diff --git a/.gn b/.gn index adcd41e0..1264b7d 100644 --- a/.gn +++ b/.gn
@@ -108,9 +108,10 @@ "//ui/chromeos/*", "//ui/compositor/*", "//ui/display/*", - "//ui/events:events", # Specifically avoid //ui/events/ozone + "//ui/events:events", "//ui/events:events_base", "//ui/events:events_unittests", + "//ui/events/ozone/*", "//ui/file_manager/*", "//ui/gfx/*", "//ui/gl/*", @@ -119,6 +120,7 @@ "//ui/message_center/*", "//ui/mojo/*", "//ui/native_theme/*", + "//ui/ozone/*", "//ui/platform_window/*", "//ui/resources/*", "//ui/shell_dialogs/*",
diff --git a/BUILD.gn b/BUILD.gn index 3172eb8..c6d0396 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -876,6 +876,15 @@ } } +# For compatibility with GYP. The linux_chromium_chromeos_rel_ng and +# linux_chromium_chromeos_compile_rel_ng bots reference this target as +# something to build, but all targets for those bots to compile are set +# up differently. +# TODO bug 601920: Remove reference to aura_builder on bot config and delete +# this group. +group("aura_builder") { +} + # Because of the source assignment filter, many targets end up over-filtering # their sources if the output directory contains a platform name. Assert that # this doesn't happen. http://crbug.com/548283
diff --git a/DEPS b/DEPS index 85229df..57e3b00 100644 --- a/DEPS +++ b/DEPS
@@ -39,11 +39,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'a821af83890d3b365c7b871f939737d47c48139c', + 'skia_revision': '834d9e109298ae704043128005f8c1bc622350f4', # 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': '798d1933a7bbaa1890e0d7beb1e506bfa886e689', + 'v8_revision': '38a336288e1780c5512dd2ff50cdc06f14cd4a89', # 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. @@ -51,11 +51,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '81efa8ec6f4efc25bc728ffc03155cfe6e0776c2', + 'angle_revision': '6684007a77572f3616fc453138b0ef5f7d42d038', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build tools # and whatever else without interference from each other. - 'buildtools_revision': 'de013cf87971d0ab40596f2275a633432c908052', + 'buildtools_revision': '5378d73123b64907773cc5c1bb027b2f765ff00a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -67,7 +67,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': 'd44a9431112d37430b3a686bbf4fb6211be69848', + 'boringssl_revision': '0fe4d8bef5918f84a7f260c34c26dd13c0d70ade', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nss # and whatever else without interference from each other. @@ -100,7 +100,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '91c0bacc9a93e51e5fb31c0743487c21d6664a45', + 'catapult_revision': '99b92b98352eaa2ddb8ec891f806354ab2271143', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -857,6 +857,6 @@ # A change to a .gyp, .gypi, or to GYP itself should run the generator. 'name': 'gyp', 'pattern': '.', - 'action': ['python', 'src/build/gyp_chromium'], + 'action': ['python', 'src/build/gyp_chromium', '--running-as-hook'], }, ]
diff --git a/ash/accelerators/accelerator_commands.cc b/ash/accelerators/accelerator_commands.cc index 23a46e3..85916853 100644 --- a/ash/accelerators/accelerator_commands.cc +++ b/ash/accelerators/accelerator_commands.cc
@@ -8,10 +8,10 @@ #include "ash/display/display_util.h" #include "ash/shell.h" #include "ash/shell_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/metrics/user_metrics.h" namespace ash {
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index 229c7c44..d2a5612c6 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc
@@ -46,6 +46,7 @@ #include "ash/touch/touch_hud_debug.h" #include "ash/utility/partial_screenshot_controller.h" #include "ash/volume_control_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/maximize_mode/maximize_mode_controller.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/window_selector_controller.h" @@ -53,7 +54,6 @@ #include "ash/wm/window_cycle_controller.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/bind.h" #include "base/command_line.h" #include "base/metrics/histogram_macros.h"
diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index 9a69677..fd21aa4f 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc
@@ -23,11 +23,11 @@ #include "ash/test/test_shell_delegate.h" #include "ash/test/test_volume_control_delegate.h" #include "ash/volume_control_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/lock_state_controller.h" #include "ash/wm/panels/panel_layout_manager.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/command_line.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/test/test_window_delegate.h"
diff --git a/ash/ash.gyp b/ash/ash.gyp index 3ef16eb..99c141b5 100644 --- a/ash/ash.gyp +++ b/ash/ash.gyp
@@ -73,8 +73,8 @@ 'display/display_change_observer_chromeos.h', 'display/display_color_manager_chromeos.cc', 'display/display_color_manager_chromeos.h', - 'display/window_tree_host_manager.cc', - 'display/window_tree_host_manager.h', + 'display/display_configuration_controller.cc', + 'display/display_configuration_controller.h', 'display/display_error_observer_chromeos.cc', 'display/display_error_observer_chromeos.h', 'display/display_info.cc', @@ -83,15 +83,13 @@ 'display/display_layout_store.h', 'display/display_manager.cc', 'display/display_manager.h', - 'display/display_configuration_controller.cc', - 'display/display_configuration_controller.h', 'display/display_pref_util.h', 'display/display_util.cc', 'display/display_util.h', - 'display/extended_mouse_warp_controller.cc', - 'display/extended_mouse_warp_controller.h', 'display/event_transformation_handler.cc', 'display/event_transformation_handler.h', + 'display/extended_mouse_warp_controller.cc', + 'display/extended_mouse_warp_controller.h', 'display/json_converter.cc', 'display/json_converter.h', 'display/mirror_window_controller.cc', @@ -117,6 +115,8 @@ 'display/shared_display_edge_indicator.h', 'display/unified_mouse_warp_controller.cc', 'display/unified_mouse_warp_controller.h', + 'display/window_tree_host_manager.cc', + 'display/window_tree_host_manager.h', 'drag_drop/drag_drop_controller.cc', 'drag_drop/drag_drop_controller.h', 'drag_drop/drag_drop_tracker.cc', @@ -233,6 +233,8 @@ 'shelf/shelf_bezel_event_filter.h', 'shelf/shelf_button.cc', 'shelf/shelf_button.h', + 'shelf/shelf_button_pressed_metric_tracker.cc', + 'shelf/shelf_button_pressed_metric_tracker.h', 'shelf/shelf_constants.cc', 'shelf/shelf_constants.h', 'shelf/shelf_delegate.h', @@ -258,8 +260,6 @@ 'shelf/shelf_util.h', 'shelf/shelf_view.cc', 'shelf/shelf_view.h', - 'shelf/shelf_button_pressed_metric_tracker.cc', - 'shelf/shelf_button_pressed_metric_tracker.h', 'shelf/shelf_widget.cc', 'shelf/shelf_widget.h', 'shelf/shelf_window_watcher.cc', @@ -525,6 +525,9 @@ 'wm/ash_native_cursor_manager.h', 'wm/boot_splash_screen_chromeos.cc', 'wm/boot_splash_screen_chromeos.h', + 'wm/common/wm_event.cc', + 'wm/common/wm_event.h', + 'wm/common/workspace/workspace_layout_manager_delegate.h', 'wm/coordinate_conversion.cc', 'wm/coordinate_conversion.h', 'wm/cursor_manager_chromeos.cc', @@ -659,8 +662,6 @@ 'wm/window_state_util.h', 'wm/window_util.cc', 'wm/window_util.h', - 'wm/wm_event.cc', - 'wm/wm_event.h', 'wm/wm_types.cc', 'wm/wm_types.h', 'wm/workspace/magnetism_matcher.cc', @@ -675,7 +676,7 @@ 'wm/workspace/workspace_event_handler.h', 'wm/workspace/workspace_layout_manager.cc', 'wm/workspace/workspace_layout_manager.h', - 'wm/workspace/workspace_layout_manager_delegate.h', + 'wm/workspace/workspace_layout_manager_backdrop_delegate.h', 'wm/workspace/workspace_types.h', 'wm/workspace/workspace_window_resizer.cc', 'wm/workspace/workspace_window_resizer.h', @@ -902,8 +903,8 @@ 'utility/partial_screenshot_controller_unittest.cc', 'virtual_keyboard_controller_unittest.cc', 'wm/always_on_top_controller_unittest.cc', - 'wm/ash_native_cursor_manager_unittest.cc', 'wm/ash_focus_rules_unittest.cc', + 'wm/ash_native_cursor_manager_unittest.cc', 'wm/dock/docked_window_layout_manager_unittest.cc', 'wm/dock/docked_window_resizer_unittest.cc', 'wm/drag_window_resizer_unittest.cc',
diff --git a/ash/display/window_tree_host_manager_unittest.cc b/ash/display/window_tree_host_manager_unittest.cc index 408b2ac..fcf837a 100644 --- a/ash/display/window_tree_host_manager_unittest.cc +++ b/ash/display/window_tree_host_manager_unittest.cc
@@ -20,8 +20,8 @@ #include "ash/test/cursor_manager_test_api.h" #include "ash/test/display_manager_test_api.h" #include "ash/test/test_shell_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "base/command_line.h" #include "ui/aura/client/focus_change_observer.h" #include "ui/aura/client/focus_client.h"
diff --git a/ash/frame/caption_buttons/frame_size_button.cc b/ash/frame/caption_buttons/frame_size_button.cc index 094d41c..1e02b01 100644 --- a/ash/frame/caption_buttons/frame_size_button.cc +++ b/ash/frame/caption_buttons/frame_size_button.cc
@@ -7,9 +7,9 @@ #include "ash/metrics/user_metrics_recorder.h" #include "ash/screen_util.h" #include "ash/shell.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/phantom_window_controller.h" #include "base/i18n/rtl.h" #include "ui/gfx/geometry/vector2d.h"
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index 83755060..8694089 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc
@@ -33,6 +33,7 @@ #include "ash/touch/touch_hud_projection.h" #include "ash/touch/touch_observer_hud.h" #include "ash/wm/always_on_top_controller.h" +#include "ash/wm/common/workspace/workspace_layout_manager_delegate.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/lock_layout_manager.h" #include "ash/wm/panels/attached_panel_window_targeter.h" @@ -49,6 +50,7 @@ #include "ash/wm/workspace/workspace_layout_manager.h" #include "ash/wm/workspace_controller.h" #include "base/command_line.h" +#include "base/memory/ptr_util.h" #include "base/time/time.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/screen_position_client.h" @@ -260,6 +262,34 @@ DISALLOW_COPY_AND_ASSIGN(EmptyWindowDelegate); }; +class WorkspaceLayoutManagerDelegateImpl + : public wm::WorkspaceLayoutManagerDelegate { + public: + explicit WorkspaceLayoutManagerDelegateImpl(aura::Window* root_window) + : root_window_(root_window) {} + ~WorkspaceLayoutManagerDelegateImpl() override = default; + + void set_shelf(ShelfLayoutManager* shelf) { shelf_ = shelf; } + + // WorkspaceLayoutManagerDelegate: + void UpdateShelfVisibility() override { + if (shelf_) + shelf_->UpdateVisibilityState(); + } + void OnFullscreenStateChanged(bool is_fullscreen) override { + if (shelf_) { + ash::Shell::GetInstance()->NotifyFullscreenStateChange(is_fullscreen, + root_window_); + } + } + + private: + aura::Window* root_window_; + ShelfLayoutManager* shelf_ = nullptr; + + DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerDelegateImpl); +}; + } // namespace void RootWindowController::CreateForPrimaryDisplay(AshWindowTreeHost* host) { @@ -541,7 +571,8 @@ void RootWindowController::MoveWindowsTo(aura::Window* dst) { // Forget the shelf early so that shelf don't update itself using wrong // display info. - workspace_controller_->SetShelf(NULL); + workspace_controller_->SetShelf(nullptr); + workspace_controller_->layout_manager()->DeleteDelegate(); ReparentAllWindows(GetRootWindow(), dst); } @@ -743,8 +774,11 @@ aura::Window* default_container = GetContainer(kShellWindowId_DefaultContainer); // Workspace manager has its own layout managers. - workspace_controller_.reset( - new WorkspaceController(default_container)); + + WorkspaceLayoutManagerDelegateImpl* workspace_layout_manager_delegate = + new WorkspaceLayoutManagerDelegateImpl(root_window); + workspace_controller_.reset(new WorkspaceController( + default_container, base::WrapUnique(workspace_layout_manager_delegate))); aura::Window* always_on_top_container = GetContainer(kShellWindowId_AlwaysOnTopContainer); @@ -757,6 +791,7 @@ aura::Window* status_container = GetContainer(kShellWindowId_StatusContainer); shelf_.reset(new ShelfWidget( shelf_container, status_container, workspace_controller())); + workspace_layout_manager_delegate->set_shelf(shelf_->shelf_layout_manager()); if (!Shell::GetInstance()->session_state_delegate()-> IsActiveUserSessionStarted()) {
diff --git a/ash/system/toast/toast_manager_unittest.cc b/ash/system/toast/toast_manager_unittest.cc index a605e11a..d31eccb 100644 --- a/ash/system/toast/toast_manager_unittest.cc +++ b/ash/system/toast/toast_manager_unittest.cc
@@ -10,6 +10,7 @@ #include "ash/system/toast/toast_manager.h" #include "ash/test/ash_test_base.h" #include "base/run_loop.h" +#include "ui/compositor/scoped_animation_duration_scale_mode.h" namespace ash { @@ -83,7 +84,6 @@ TEST_F(ToastManagerTest, ShowAndCloseAutomatically) { manager()->Show("DUMMY", 10); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); @@ -93,10 +93,28 @@ TEST_F(ToastManagerTest, ShowAndCloseManually) { manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); + EXPECT_FALSE(GetCurrentWidget()->GetLayer()->GetAnimator()->is_animating()); + + ClickDismissButton(); + + EXPECT_EQ(nullptr, GetCurrentOverlay()); +} + +TEST_F(ToastManagerTest, ShowAndCloseManuallyDuringAnimation) { + ui::ScopedAnimationDurationScaleMode slow_animation_duration( + ui::ScopedAnimationDurationScaleMode::SLOW_DURATION); + + manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); + EXPECT_TRUE(GetCurrentWidget()->GetLayer()->GetAnimator()->is_animating()); + base::RunLoop().RunUntilIdle(); + + EXPECT_EQ(1, GetToastId()); + EXPECT_TRUE(GetCurrentWidget()->GetLayer()->GetAnimator()->is_animating()); + + // Close it during animation. ClickDismissButton(); while (GetCurrentOverlay() != nullptr) @@ -108,9 +126,7 @@ manager()->Show("DUMMY2", 10); manager()->Show("DUMMY3", 10); - while (GetToastId() != 1) - base::RunLoop().RunUntilIdle(); - + EXPECT_EQ(1, GetToastId()); EXPECT_EQ("DUMMY1", GetCurrentText()); while (GetToastId() != 2) @@ -131,7 +147,6 @@ SetShelfAlignment(ash::SHELF_ALIGNMENT_BOTTOM); manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); gfx::Rect toast_bounds = GetCurrentWidget()->GetWindowBoundsInScreen(); @@ -164,7 +179,6 @@ EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); gfx::Rect toast_bounds = GetCurrentWidget()->GetWindowBoundsInScreen(); @@ -185,7 +199,6 @@ SetShelfState(ash::SHELF_HIDDEN); manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); gfx::Rect toast_bounds = GetCurrentWidget()->GetWindowBoundsInScreen(); @@ -204,7 +217,6 @@ SetShelfAlignment(ash::SHELF_ALIGNMENT_LEFT); manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); gfx::Rect toast_bounds = GetCurrentWidget()->GetWindowBoundsInScreen(); @@ -239,7 +251,6 @@ SetShelfAlignment(ash::SHELF_ALIGNMENT_BOTTOM); manager()->Show("DUMMY", kLongLongDuration /* prevent timeout */); - base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, GetToastId()); gfx::Rect toast_bounds = GetCurrentWidget()->GetWindowBoundsInScreen();
diff --git a/ash/system/toast/toast_overlay.cc b/ash/system/toast/toast_overlay.cc index 45612b5..3a59e81 100644 --- a/ash/system/toast/toast_overlay.cc +++ b/ash/system/toast/toast_overlay.cc
@@ -197,30 +197,25 @@ } ToastOverlay::~ToastOverlay() { - gfx::NativeWindow native_view = overlay_widget_->GetNativeView(); - wm::SetWindowVisibilityAnimationTransition(native_view, wm::ANIMATE_NONE); - - // Remove ourself from the animator to avoid being re-entrantly called in - // |overlay_widget_|'s destructor. - ui::Layer* layer = overlay_widget_->GetLayer(); - if (layer) { - ui::LayerAnimator* animator = layer->GetAnimator(); - if (animator) - animator->RemoveObserver(this); - } - overlay_widget_->Close(); } void ToastOverlay::Show(bool visible) { - if (is_visible_ == visible) + if (overlay_widget_->GetLayer()->GetTargetVisibility() == visible) return; - is_visible_ = visible; + ui::LayerAnimator* animator = overlay_widget_->GetLayer()->GetAnimator(); + DCHECK(animator); - overlay_widget_->GetLayer()->GetAnimator()->AddObserver(this); + base::TimeDelta original_duration = animator->GetTransitionDuration(); + ui::ScopedLayerAnimationSettings animation_settings(animator); + // ScopedLayerAnimationSettings ctor chanes the transition duration, so change + // back it to the original value (should be zero). + animation_settings.SetTransitionDuration(original_duration); - if (is_visible_) + animation_settings.AddObserver(this); + + if (visible) overlay_widget_->Show(); else overlay_widget_->Hide(); @@ -238,30 +233,13 @@ return bounds; } -void ToastOverlay::OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) { - ui::LayerAnimator* animator = overlay_widget_->GetLayer()->GetAnimator(); - if (animator) - animator->RemoveObserver(this); - if (!is_visible_) { - // Acync operation, since delegate may remove this instance and removing - // this here causes crash. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::Bind(&Delegate::OnClosed, - base::Unretained(delegate_) /* |delegate| lives longer */)); - } -} +void ToastOverlay::OnImplicitAnimationsScheduled() {} -void ToastOverlay::OnLayerAnimationAborted( - ui::LayerAnimationSequence* sequence) { - ui::LayerAnimator* animator = overlay_widget_->GetLayer()->GetAnimator(); - if (animator) - animator->RemoveObserver(this); +void ToastOverlay::OnImplicitAnimationsCompleted() { + if (!overlay_widget_->GetLayer()->GetTargetVisibility()) + delegate_->OnClosed(); } -void ToastOverlay::OnLayerAnimationScheduled( - ui::LayerAnimationSequence* sequence) {} - views::Widget* ToastOverlay::widget_for_testing() { return overlay_widget_.get(); }
diff --git a/ash/system/toast/toast_overlay.h b/ash/system/toast/toast_overlay.h index 1cd4fa9c..febd893 100644 --- a/ash/system/toast/toast_overlay.h +++ b/ash/system/toast/toast_overlay.h
@@ -28,7 +28,7 @@ class ToastOverlayView; class ToastOverlayButton; -class ASH_EXPORT ToastOverlay : public ui::LayerAnimationObserver { +class ASH_EXPORT ToastOverlay : public ui::ImplicitAnimationObserver { public: class ASH_EXPORT Delegate { public: @@ -48,15 +48,12 @@ // Returns the current bounds of the overlay, which is based on visibility. gfx::Rect CalculateOverlayBounds(); - // gfx::LayerAnimationObserver overrides: - void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override; - void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override; - void OnLayerAnimationScheduled(ui::LayerAnimationSequence* sequence) override; + void OnImplicitAnimationsScheduled() override; + void OnImplicitAnimationsCompleted() override; views::Widget* widget_for_testing(); void ClickDismissButtonForTesting(const ui::Event& event); - bool is_visible_ = false; Delegate* const delegate_; const std::string text_; std::unique_ptr<views::Widget> overlay_widget_;
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc index e48cd1fe..2115708 100644 --- a/ash/system/tray/system_tray.cc +++ b/ash/system/tray/system_tray.cc
@@ -500,8 +500,6 @@ menu_width, kTrayPopupMaxWidth); init_params.can_activate = can_activate; - // Mus cannot use EventHandlers to close the tray, so it uses capture. - init_params.close_via_capture = Shell::GetInstance()->in_mus(); init_params.first_item_has_no_margin = true; if (detailed) { // This is the case where a volume control or brightness control bubble @@ -574,8 +572,6 @@ GetAnchorAlignment(), kTrayPopupMinWidth, kTrayPopupMaxWidth); - // Mus cannot use EventHandlers to close the tray, so it uses capture. - init_params.close_via_capture = Shell::GetInstance()->in_mus(); init_params.first_item_has_no_margin = true; init_params.arrow_color = kBackgroundColor; init_params.arrow_offset = GetTrayXOffset(notification_items_[0]);
diff --git a/ash/wm/always_on_top_controller.cc b/ash/wm/always_on_top_controller.cc index e968e35..beda3c4 100644 --- a/ash/wm/always_on_top_controller.cc +++ b/ash/wm/always_on_top_controller.cc
@@ -6,6 +6,7 @@ #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/workspace/workspace_layout_manager_delegate.h" #include "ash/wm/workspace/workspace_layout_manager.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" @@ -15,7 +16,7 @@ AlwaysOnTopController::AlwaysOnTopController(aura::Window* viewport) : always_on_top_container_(viewport) { always_on_top_container_->SetLayoutManager( - new WorkspaceLayoutManager(viewport)); + new WorkspaceLayoutManager(viewport, nullptr)); // Container should be empty. DCHECK(always_on_top_container_->children().empty()); always_on_top_container_->AddObserver(this);
diff --git a/ash/wm/always_on_top_controller_unittest.cc b/ash/wm/always_on_top_controller_unittest.cc index 2e23be8..2766f363 100644 --- a/ash/wm/always_on_top_controller_unittest.cc +++ b/ash/wm/always_on_top_controller_unittest.cc
@@ -8,6 +8,7 @@ #include "ash/shell.h" #include "ash/shell_window_ids.h" #include "ash/test/ash_test_base.h" +#include "ash/wm/common/workspace/workspace_layout_manager_delegate.h" #include "ash/wm/workspace/workspace_layout_manager.h" #include "base/command_line.h" #include "ui/keyboard/keyboard_controller.h" @@ -36,7 +37,8 @@ class TestLayoutManager : public WorkspaceLayoutManager { public: explicit TestLayoutManager(aura::Window* window) - : WorkspaceLayoutManager(window), keyboard_bounds_changed_(false) {} + : WorkspaceLayoutManager(window, nullptr), + keyboard_bounds_changed_(false) {} ~TestLayoutManager() override {}
diff --git a/ash/wm/wm_event.cc b/ash/wm/common/wm_event.cc similarity index 60% rename from ash/wm/wm_event.cc rename to ash/wm/common/wm_event.cc index 803a0a46..0f5a15e 100644 --- a/ash/wm/wm_event.cc +++ b/ash/wm/common/wm_event.cc
@@ -2,25 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/wm/wm_event.h" +#include "ash/wm/common/wm_event.h" namespace ash { namespace wm { -WMEvent::WMEvent(WMEventType type) - : type_(type) { -} +WMEvent::WMEvent(WMEventType type) : type_(type) {} -WMEvent::~WMEvent() { -} +WMEvent::~WMEvent() {} SetBoundsEvent::SetBoundsEvent(WMEventType type, const gfx::Rect& bounds) - : WMEvent(type), - requested_bounds_(bounds) { -} + : WMEvent(type), requested_bounds_(bounds) {} -SetBoundsEvent::~SetBoundsEvent() { -} +SetBoundsEvent::~SetBoundsEvent() {} } // namespace wm } // namespace ash
diff --git a/ash/wm/wm_event.h b/ash/wm/common/wm_event.h similarity index 96% rename from ash/wm/wm_event.h rename to ash/wm/common/wm_event.h index fd5c249..3fcac93e49 100644 --- a/ash/wm/wm_event.h +++ b/ash/wm/common/wm_event.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_WM_WM_EVENT_H_ -#define ASH_WM_WM_EVENT_H_ +#ifndef ASH_WM_COMMON_WM_EVENT_H_ +#define ASH_WM_COMMON_WM_EVENT_H_ #include "ash/ash_export.h" #include "ash/wm/wm_types.h" @@ -104,7 +104,7 @@ // An WMEvent to request new bounds for the window. class SetBoundsEvent : public WMEvent { -public: + public: SetBoundsEvent(WMEventType type, const gfx::Rect& requested_bounds); ~SetBoundsEvent() override; @@ -119,5 +119,4 @@ } // namespace wm } // namespace ash -#endif // ASH_WM_WM_EVENT_H_ - +#endif // ASH_WM_COMMON_WM_EVENT_H_
diff --git a/ash/wm/common/workspace/workspace_layout_manager_delegate.h b/ash/wm/common/workspace/workspace_layout_manager_delegate.h new file mode 100644 index 0000000..e0ffb40 --- /dev/null +++ b/ash/wm/common/workspace/workspace_layout_manager_delegate.h
@@ -0,0 +1,27 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WM_COMMON_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_DELEGATE_H_ +#define ASH_WM_COMMON_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_DELEGATE_H_ + +#include "ash/ash_export.h" + +namespace ash { +namespace wm { + +class ASH_EXPORT WorkspaceLayoutManagerDelegate { + public: + virtual ~WorkspaceLayoutManagerDelegate() {} + + // Called when the visibility of the shelf needs to be updated. + virtual void UpdateShelfVisibility() = 0; + + // Called when the fullscreen state has changed to |is_fullscreen|. + virtual void OnFullscreenStateChanged(bool is_fullscreen) = 0; +}; + +} // namespace wm +} // namespace ash + +#endif // ASH_WM_COMMON_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_DELEGATE_H_
diff --git a/ash/wm/default_state.cc b/ash/wm/default_state.cc index c5a1972d..f461fd05 100644 --- a/ash/wm/default_state.cc +++ b/ash/wm/default_state.cc
@@ -9,6 +9,7 @@ #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/coordinate_conversion.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/window_animations.h" @@ -16,7 +17,6 @@ #include "ash/wm/window_state_delegate.h" #include "ash/wm/window_state_util.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/workspace_window_resizer.h" #include "ash/wm/workspace_controller.h" #include "ui/aura/client/aura_constants.h"
diff --git a/ash/wm/dock/docked_window_layout_manager.cc b/ash/wm/dock/docked_window_layout_manager.cc index 8714410..f7103b7 100644 --- a/ash/wm/dock/docked_window_layout_manager.cc +++ b/ash/wm/dock/docked_window_layout_manager.cc
@@ -8,6 +8,7 @@ #include "ash/shelf/shelf.h" #include "ash/shelf/shelf_constants.h" #include "ash/shelf/shelf_layout_manager.h" +#include "ash/shelf/shelf_layout_manager_observer.h" #include "ash/shelf/shelf_types.h" #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" @@ -57,16 +58,24 @@ const int kMinimizeDurationMs = 720; class DockedBackgroundWidget : public views::Widget, - public BackgroundAnimatorDelegate { + public BackgroundAnimatorDelegate, + public ShelfLayoutManagerObserver { public: - explicit DockedBackgroundWidget(aura::Window* container) - : alignment_(DOCKED_ALIGNMENT_NONE), + explicit DockedBackgroundWidget(DockedWindowLayoutManager* manager) + : manager_(manager), + alignment_(DOCKED_ALIGNMENT_NONE), background_animator_(this, 0, kShelfBackgroundAlpha), alpha_(0), opaque_background_(ui::LAYER_SOLID_COLOR), - visible_background_type_(SHELF_BACKGROUND_DEFAULT), + visible_background_type_( + manager_->shelf()->shelf_widget()->GetBackgroundType()), visible_background_change_type_(BACKGROUND_CHANGE_IMMEDIATE) { - InitWidget(container); + manager_->shelf()->shelf_layout_manager()->AddObserver(this); + InitWidget(manager_->dock_container()); + } + + ~DockedBackgroundWidget() override { + manager_->shelf()->shelf_layout_manager()->RemoveObserver(this); } // Sets widget bounds and sizes opaque background layer to fill the widget. @@ -76,17 +85,7 @@ alignment_ = alignment; } - // Sets the background type. Starts an animation to transition to - // |background_type| if the widget is visible. If the widget is not visible, - // the animation is postponed till the widget becomes visible. - void SetBackgroundType(ShelfBackgroundType background_type, - BackgroundAnimatorChangeType change_type) { - visible_background_type_ = background_type; - visible_background_change_type_ = change_type; - if (IsVisible()) - UpdateBackground(); - } - + private: // views::Widget: void OnNativeWidgetVisibilityChanged(bool visible) override { views::Widget::OnNativeWidgetVisibilityChanged(visible); @@ -124,7 +123,18 @@ SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); } - private: + // ShelfLayoutManagerObserver: + void OnBackgroundUpdated(ShelfBackgroundType background_type, + BackgroundAnimatorChangeType change_type) override { + // Sets the background type. Starts an animation to transition to + // |background_type| if the widget is visible. If the widget is not visible, + // the animation is postponed till the widget becomes visible. + visible_background_type_ = background_type; + visible_background_change_type_ = change_type; + if (IsVisible()) + UpdateBackground(); + } + void InitWidget(aura::Window* parent) { views::Widget::InitParams params; params.type = views::Widget::InitParams::TYPE_POPUP; @@ -141,7 +151,6 @@ opaque_background_.SetBounds(gfx::Rect(GetWindowBoundsInScreen().size())); opaque_background_.SetOpacity(0.0f); GetNativeWindow()->layer()->Add(&opaque_background_); - Hide(); ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); gfx::ImageSkia shelf_background = @@ -150,6 +159,12 @@ shelf_background, SkBitmapOperations::ROTATION_90_CW); shelf_background_right_ = gfx::ImageSkiaOperations::CreateRotatedImage( shelf_background, SkBitmapOperations::ROTATION_270_CW); + + // This background should be explicitly stacked below any windows already in + // the dock, otherwise the z-order is set by the order in which windows were + // added to the container, and UpdateStacking only manages user windows, not + // the background widget. + parent->StackChildAtBottom(GetNativeWindow()); } // Transitions to |visible_background_type_| if the widget is visible and to @@ -181,6 +196,8 @@ SchedulePaintInRect(gfx::Rect(GetWindowBoundsInScreen().size())); } + DockedWindowLayoutManager* manager_; + DockedAlignment alignment_; // The animator for the background transitions. @@ -401,10 +418,10 @@ : SnapToPixelLayoutManager(dock_container), dock_container_(dock_container), in_layout_(false), - dragged_window_(NULL), + dragged_window_(nullptr), is_dragged_window_docked_(false), is_dragged_from_dock_(false), - shelf_(NULL), + shelf_(nullptr), workspace_controller_(workspace_controller), in_fullscreen_(workspace_controller_->GetWindowState() == WORKSPACE_WINDOW_STATE_FULL_SCREEN), @@ -412,9 +429,9 @@ alignment_(DOCKED_ALIGNMENT_NONE), preferred_alignment_(DOCKED_ALIGNMENT_NONE), event_source_(DOCKED_ACTION_SOURCE_UNKNOWN), - last_active_window_(NULL), + last_active_window_(nullptr), last_action_time_(base::Time::Now()), - background_widget_(new DockedBackgroundWidget(dock_container_)) { + background_widget_(nullptr) { DCHECK(dock_container); aura::client::GetActivationClient(Shell::GetPrimaryRootWindow())-> AddObserver(this); @@ -426,11 +443,9 @@ } void DockedWindowLayoutManager::Shutdown() { - if (shelf_ && shelf_->shelf_layout_manager()) { - shelf_->shelf_layout_manager()->RemoveObserver(this); - shelf_observer_.reset(); - } - shelf_ = NULL; + background_widget_.reset(); + shelf_observer_.reset(); + shelf_ = nullptr; for (size_t i = 0; i < dock_container_->children().size(); ++i) { aura::Window* child = dock_container_->children()[i]; child->RemoveObserver(this); @@ -517,7 +532,7 @@ dragged_window_->RemoveObserver(this); wm::GetWindowState(dragged_window_)->RemoveObserver(this); if (last_active_window_ == dragged_window_) - last_active_window_ = NULL; + last_active_window_ = nullptr; } else { // If this is the first window that got docked by a move update alignment. if (alignment_ == DOCKED_ALIGNMENT_NONE) @@ -528,7 +543,7 @@ // count limit so do it here. MaybeMinimizeChildrenExcept(dragged_window_); } - dragged_window_ = NULL; + dragged_window_ = nullptr; dragged_bounds_ = gfx::Rect(); Relayout(); UpdateDockBounds(DockedWindowLayoutManagerObserver::CHILD_CHANGED); @@ -538,10 +553,7 @@ void DockedWindowLayoutManager::SetShelf(Shelf* shelf) { DCHECK(!shelf_); shelf_ = shelf; - if (shelf_->shelf_layout_manager()) { - shelf_->shelf_layout_manager()->AddObserver(this); - shelf_observer_.reset(new ShelfWindowObserver(this)); - } + shelf_observer_.reset(new ShelfWindowObserver(this)); } DockedAlignment DockedWindowLayoutManager::GetAlignmentOfWindow( @@ -714,7 +726,7 @@ UpdateDockedWidth(0); } if (last_active_window_ == child) - last_active_window_ = NULL; + last_active_window_ = nullptr; child->RemoveObserver(this); wm::GetWindowState(child)->RemoveObserver(this); Relayout(); @@ -821,14 +833,6 @@ } ///////////////////////////////////////////////////////////////////////////// -// DockedWindowLayoutManager, ShelfLayoutManagerObserver implementation: -void DockedWindowLayoutManager::OnBackgroundUpdated( - ShelfBackgroundType background_type, - BackgroundAnimatorChangeType change_type) { - background_widget_->SetBackgroundType(background_type, change_type); -} - -///////////////////////////////////////////////////////////////////////////// // DockedWindowLayoutManager, WindowStateObserver implementation: void DockedWindowLayoutManager::OnPreWindowStateTypeChange( @@ -892,11 +896,10 @@ DCHECK(!is_dragged_window_docked_); } if (window == last_active_window_) - last_active_window_ = NULL; + last_active_window_ = nullptr; RecordUmaAction(DOCKED_ACTION_CLOSE, event_source_); } - //////////////////////////////////////////////////////////////////////////////// // DockedWindowLayoutManager, aura::client::ActivationChangeObserver // implementation: @@ -908,7 +911,7 @@ if (gained_active && IsPopupOrTransient(gained_active)) return; // Ignore if the window that is not managed by this was activated. - aura::Window* ancestor = NULL; + aura::Window* ancestor = nullptr; for (aura::Window* parent = gained_active; parent; parent = parent->parent()) { if (parent->parent() == dock_container_) { @@ -1075,7 +1078,7 @@ base::AutoReset<bool> auto_reset_in_layout(&in_layout_, true); gfx::Rect dock_bounds = dock_container_->GetBoundsInScreen(); - aura::Window* active_window = NULL; + aura::Window* active_window = nullptr; std::vector<WindowWithHeight> visible_windows; for (size_t i = 0; i < dock_container_->children().size(); ++i) { aura::Window* window(dock_container_->children()[i]); @@ -1206,9 +1209,8 @@ // Sort windows by their center positions and fan out overlapping // windows. std::sort(visible_windows->begin(), visible_windows->end(), - CompareWindowPos(is_dragged_from_dock_ ? dragged_window_ : NULL, - dock_container_, - delta)); + CompareWindowPos(is_dragged_from_dock_ ? dragged_window_ : nullptr, + dock_container_, delta)); for (std::vector<WindowWithHeight>::iterator iter = visible_windows->begin(); iter != visible_windows->end(); ++iter) { aura::Window* window = iter->window(); @@ -1292,11 +1294,14 @@ gfx::Rect background_bounds(docked_bounds_); if (shelf_observer_) background_bounds.Subtract(shelf_observer_->shelf_bounds_in_screen()); - background_widget_->SetBackgroundBounds(background_bounds, alignment_); - if (docked_width_ > 0) + if (docked_width_ > 0) { + if (!background_widget_) + background_widget_.reset(new DockedBackgroundWidget(this)); + background_widget_->SetBackgroundBounds(background_bounds, alignment_); background_widget_->Show(); - else + } else if (background_widget_) { background_widget_->Hide(); + } } void DockedWindowLayoutManager::UpdateStacking(aura::Window* active_window) { @@ -1332,7 +1337,7 @@ } int active_center_y = active_window->bounds().CenterPoint().y(); - aura::Window* previous_window = NULL; + aura::Window* previous_window = nullptr; for (std::map<int, aura::Window*>::const_iterator it = window_ordering.begin(); it != window_ordering.end() && it->first < active_center_y; ++it) {
diff --git a/ash/wm/dock/docked_window_layout_manager.h b/ash/wm/dock/docked_window_layout_manager.h index b1589bd..e89be0d8 100644 --- a/ash/wm/dock/docked_window_layout_manager.h +++ b/ash/wm/dock/docked_window_layout_manager.h
@@ -8,7 +8,6 @@ #include <memory> #include "ash/ash_export.h" -#include "ash/shelf/shelf_layout_manager_observer.h" #include "ash/shell_observer.h" #include "ash/snap_to_pixel_layout_manager.h" #include "ash/wm/dock/dock_types.h" @@ -41,7 +40,6 @@ class DockedWindowLayoutManagerObserver; class DockedWindowResizerTest; class Shelf; -class ShelfLayoutManager; class WorkspaceController; struct WindowWithHeight { @@ -72,7 +70,6 @@ public aura::WindowObserver, public aura::client::ActivationChangeObserver, public keyboard::KeyboardControllerObserver, - public ShelfLayoutManagerObserver, public wm::WindowStateObserver { public: // Maximum width of the docked windows area. @@ -163,10 +160,6 @@ aura::Window* root_window) override; void OnShelfAlignmentChanged(aura::Window* root_window) override; - // ShelfLayoutManagerObserver: - void OnBackgroundUpdated(ShelfBackgroundType background_type, - BackgroundAnimatorChangeType change_type) override; - // wm::WindowStateObserver: void OnPreWindowStateTypeChange(wm::WindowState* window_state, wm::WindowStateType old_type) override;
diff --git a/ash/wm/dock/docked_window_resizer.cc b/ash/wm/dock/docked_window_resizer.cc index 624dc72..7d433ed 100644 --- a/ash/wm/dock/docked_window_resizer.cc +++ b/ash/wm/dock/docked_window_resizer.cc
@@ -12,10 +12,10 @@ #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/magnetism_matcher.h" #include "ash/wm/workspace/workspace_window_resizer.h" #include "base/command_line.h"
diff --git a/ash/wm/dock/docked_window_resizer_unittest.cc b/ash/wm/dock/docked_window_resizer_unittest.cc index 3cfeeb9..4f19e41 100644 --- a/ash/wm/dock/docked_window_resizer_unittest.cc +++ b/ash/wm/dock/docked_window_resizer_unittest.cc
@@ -19,12 +19,12 @@ #include "ash/test/cursor_manager_test_api.h" #include "ash/test/shell_test_api.h" #include "ash/test/test_shelf_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/drag_window_resizer.h" #include "ash/wm/panels/panel_layout_manager.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/command_line.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/window_tree_client.h"
diff --git a/ash/wm/lock_layout_manager.cc b/ash/wm/lock_layout_manager.cc index 590b949..f2f9a85f 100644 --- a/ash/wm/lock_layout_manager.cc +++ b/ash/wm/lock_layout_manager.cc
@@ -6,9 +6,9 @@ #include "ash/shell.h" #include "ash/shell_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/lock_window_state.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h" #include "ui/events/event.h"
diff --git a/ash/wm/lock_window_state.cc b/ash/wm/lock_window_state.cc index d5f89a3d..591a60d 100644 --- a/ash/wm/lock_window_state.cc +++ b/ash/wm/lock_window_state.cc
@@ -9,13 +9,13 @@ #include "ash/display/display_manager.h" #include "ash/screen_util.h" #include "ash/shell.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/lock_layout_manager.h" #include "ash/wm/window_animations.h" #include "ash/wm/window_state.h" #include "ash/wm/window_state_delegate.h" #include "ash/wm/window_state_util.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" #include "ui/gfx/geometry/rect.h"
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager.cc b/ash/wm/maximize_mode/maximize_mode_window_manager.cc index 907b0173..d5aec1f8 100644 --- a/ash/wm/maximize_mode/maximize_mode_window_manager.cc +++ b/ash/wm/maximize_mode/maximize_mode_window_manager.cc
@@ -8,13 +8,13 @@ #include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/maximize_mode/maximize_mode_window_state.h" #include "ash/wm/maximize_mode/workspace_backdrop_delegate.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace_controller.h" #include "base/command_line.h" #include "ui/aura/client/aura_constants.h" @@ -325,7 +325,7 @@ aura::Window* container = Shell::GetContainer( controller->GetRootWindow(), kShellWindowId_DefaultContainer); controller->workspace_controller()->SetMaximizeBackdropDelegate( - std::unique_ptr<WorkspaceLayoutManagerDelegate>( + std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate>( enable ? new WorkspaceBackdropDelegate(container) : NULL)); } }
diff --git a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc index 67deb94..2825767d 100644 --- a/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc +++ b/ash/wm/maximize_mode/maximize_mode_window_manager_unittest.cc
@@ -13,13 +13,13 @@ #include "ash/switchable_windows.h" #include "ash/test/ash_test_base.h" #include "ash/test/shell_test_api.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/maximize_mode/maximize_mode_controller.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/window_selector_controller.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h"
diff --git a/ash/wm/maximize_mode/maximize_mode_window_state.cc b/ash/wm/maximize_mode/maximize_mode_window_state.cc index a543ddd6..043ed78 100644 --- a/ash/wm/maximize_mode/maximize_mode_window_state.cc +++ b/ash/wm/maximize_mode/maximize_mode_window_state.cc
@@ -9,6 +9,7 @@ #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/coordinate_conversion.h" #include "ash/wm/maximize_mode/maximize_mode_window_manager.h" #include "ash/wm/window_animations.h" @@ -16,7 +17,6 @@ #include "ash/wm/window_state_delegate.h" #include "ash/wm/window_state_util.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/workspace_window_resizer.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h"
diff --git a/ash/wm/maximize_mode/workspace_backdrop_delegate.h b/ash/wm/maximize_mode/workspace_backdrop_delegate.h index 0593a92..6c1564c8 100644 --- a/ash/wm/maximize_mode/workspace_backdrop_delegate.h +++ b/ash/wm/maximize_mode/workspace_backdrop_delegate.h
@@ -6,7 +6,7 @@ #define ASH_WM_MAXIMIZE_MODE_WORKSPACE_BACKDROP_DELEGATE_H_ #include "ash/ash_export.h" -#include "ash/wm/workspace/workspace_layout_manager_delegate.h" +#include "ash/wm/workspace/workspace_layout_manager_backdrop_delegate.h" #include "base/compiler_specific.h" #include "base/macros.h" #include "ui/aura/window_observer.h" @@ -30,7 +30,7 @@ // entire container. class ASH_EXPORT WorkspaceBackdropDelegate : public aura::WindowObserver, - public NON_EXPORTED_BASE(WorkspaceLayoutManagerDelegate) { + public WorkspaceLayoutManagerBackdropDelegate { public: explicit WorkspaceBackdropDelegate(aura::Window* container); ~WorkspaceBackdropDelegate() override; @@ -40,7 +40,7 @@ const gfx::Rect& old_bounds, const gfx::Rect& new_bounds) override; - // WorkspaceLayoutManagerDelegate overrides: + // WorkspaceLayoutManagerBackdropDelegate overrides: void OnWindowAddedToLayout(aura::Window* child) override; void OnWindowRemovedFromLayout(aura::Window* child) override; void OnChildWindowVisibilityChanged(aura::Window* child,
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index 2520beb..f874a69 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc
@@ -20,6 +20,7 @@ #include "ash/test/shelf_view_test_api.h" #include "ash/test/shell_test_api.h" #include "ash/test/test_shelf_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/maximize_mode/maximize_mode_controller.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/window_grid.h" @@ -29,7 +30,6 @@ #include "ash/wm/panels/panel_layout_manager.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/command_line.h" #include "base/compiler_specific.h" #include "base/memory/scoped_vector.h"
diff --git a/ash/wm/panels/panel_window_resizer_unittest.cc b/ash/wm/panels/panel_window_resizer_unittest.cc index 2df23df8..cb983d5 100644 --- a/ash/wm/panels/panel_window_resizer_unittest.cc +++ b/ash/wm/panels/panel_window_resizer_unittest.cc
@@ -17,9 +17,9 @@ #include "ash/test/cursor_manager_test_api.h" #include "ash/test/shell_test_api.h" #include "ash/test/test_shelf_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/drag_window_resizer.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "base/i18n/rtl.h" #include "base/win/windows_version.h" #include "ui/aura/client/aura_constants.h"
diff --git a/ash/wm/toplevel_window_event_handler.cc b/ash/wm/toplevel_window_event_handler.cc index 27c2eaf..fc58f59 100644 --- a/ash/wm/toplevel_window_event_handler.cc +++ b/ash/wm/toplevel_window_event_handler.cc
@@ -5,12 +5,12 @@ #include "ash/wm/toplevel_window_event_handler.h" #include "ash/shell.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/resize_shadow_controller.h" #include "ash/wm/window_resizer.h" #include "ash/wm/window_state.h" #include "ash/wm/window_state_observer.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "ui/aura/client/cursor_client.h"
diff --git a/ash/wm/video_detector_unittest.cc b/ash/wm/video_detector_unittest.cc index 02d23c1f..f19c2f8f 100644 --- a/ash/wm/video_detector_unittest.cc +++ b/ash/wm/video_detector_unittest.cc
@@ -8,8 +8,8 @@ #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "base/compiler_specific.h" #include "base/time/time.h" #include "third_party/skia/include/core/SkColor.h"
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc index afd9441..cd34b1a 100644 --- a/ash/wm/window_state.cc +++ b/ash/wm/window_state.cc
@@ -10,13 +10,13 @@ #include "ash/root_window_controller.h" #include "ash/screen_util.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/default_state.h" #include "ash/wm/window_animations.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_state_delegate.h" #include "ash/wm/window_state_observer.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/auto_reset.h" #include "base/command_line.h" #include "ui/aura/client/aura_constants.h"
diff --git a/ash/wm/window_state_unittest.cc b/ash/wm/window_state_unittest.cc index 1b95838..1f52c5bc 100644 --- a/ash/wm/window_state_unittest.cc +++ b/ash/wm/window_state_unittest.cc
@@ -8,8 +8,8 @@ #include "ash/screen_util.h" #include "ash/test/ash_test_base.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/test/test_window_delegate.h" #include "ui/aura/window.h"
diff --git a/ash/wm/window_util.cc b/ash/wm/window_util.cc index a0fb399..4a2c8b8 100644 --- a/ash/wm/window_util.cc +++ b/ash/wm/window_util.cc
@@ -10,9 +10,9 @@ #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/snap_to_pixel_layout_manager.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h"
diff --git a/ash/wm/workspace/workspace_event_handler.cc b/ash/wm/workspace/workspace_event_handler.cc index afd017b..73d1a8c 100644 --- a/ash/wm/workspace/workspace_event_handler.cc +++ b/ash/wm/workspace/workspace_event_handler.cc
@@ -7,8 +7,8 @@ #include "ash/metrics/user_metrics_recorder.h" #include "ash/shell.h" #include "ash/touch/touch_uma.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" -#include "ash/wm/wm_event.h" #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" #include "ui/base/hit_test.h"
diff --git a/ash/wm/workspace/workspace_event_handler_unittest.cc b/ash/wm/workspace/workspace_event_handler_unittest.cc index 7037af0..113a92696 100644 --- a/ash/wm/workspace/workspace_event_handler_unittest.cc +++ b/ash/wm/workspace/workspace_event_handler_unittest.cc
@@ -7,9 +7,9 @@ #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace_controller.h" #include "ash/wm/workspace_controller_test_helper.h" #include "base/thread_task_runner_handle.h"
diff --git a/ash/wm/workspace/workspace_layout_manager.cc b/ash/wm/workspace/workspace_layout_manager.cc index fcf5cc7..db5ec9f 100644 --- a/ash/wm/workspace/workspace_layout_manager.cc +++ b/ash/wm/workspace/workspace_layout_manager.cc
@@ -9,16 +9,16 @@ #include "ash/root_window_controller.h" #include "ash/screen_util.h" #include "ash/session/session_state_delegate.h" -#include "ash/shelf/shelf_layout_manager.h" #include "ash/shell.h" #include "ash/wm/always_on_top_controller.h" +#include "ash/wm/common/wm_event.h" +#include "ash/wm/common/workspace/workspace_layout_manager_delegate.h" #include "ash/wm/window_animations.h" #include "ash/wm/window_positioner.h" #include "ash/wm/window_properties.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" -#include "ash/wm/workspace/workspace_layout_manager_delegate.h" +#include "ash/wm/workspace/workspace_layout_manager_backdrop_delegate.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h" @@ -34,10 +34,12 @@ namespace ash { -WorkspaceLayoutManager::WorkspaceLayoutManager(aura::Window* window) - : shelf_(NULL), - window_(window), +WorkspaceLayoutManager::WorkspaceLayoutManager( + aura::Window* window, + std::unique_ptr<wm::WorkspaceLayoutManagerDelegate> delegate) + : window_(window), root_window_(window->GetRootWindow()), + delegate_(std::move(delegate)), work_area_in_parent_(ScreenUtil::ConvertRectFromScreen( window_, gfx::Screen::GetScreen() @@ -60,12 +62,12 @@ Shell::GetInstance()->activation_client()->RemoveObserver(this); } -void WorkspaceLayoutManager::SetShelf(ShelfLayoutManager* shelf) { - shelf_ = shelf; +void WorkspaceLayoutManager::DeleteDelegate() { + delegate_.reset(); } void WorkspaceLayoutManager::SetMaximizeBackdropDelegate( - std::unique_ptr<WorkspaceLayoutManagerDelegate> delegate) { + std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> delegate) { backdrop_delegate_.reset(delegate.release()); } @@ -329,8 +331,8 @@ } void WorkspaceLayoutManager::UpdateShelfVisibility() { - if (shelf_) - shelf_->UpdateVisibilityState(); + if (delegate_) + delegate_->UpdateShelfVisibility(); } void WorkspaceLayoutManager::UpdateFullscreenState() { @@ -339,13 +341,12 @@ // only windows in the default workspace container will go fullscreen but // this should really be tracked by the RootWindowController since // technically any container could get a fullscreen window. - if (!shelf_) + if (!delegate_) return; bool is_fullscreen = GetRootWindowController( window_->GetRootWindow())->GetWindowForFullscreenMode() != NULL; if (is_fullscreen != is_fullscreen_) { - ash::Shell::GetInstance()->NotifyFullscreenStateChange( - is_fullscreen, window_->GetRootWindow()); + delegate_->OnFullscreenStateChanged(is_fullscreen); is_fullscreen_ = is_fullscreen; } }
diff --git a/ash/wm/workspace/workspace_layout_manager.h b/ash/wm/workspace/workspace_layout_manager.h index 7685356e..cfe5034 100644 --- a/ash/wm/workspace/workspace_layout_manager.h +++ b/ash/wm/workspace/workspace_layout_manager.h
@@ -30,11 +30,11 @@ } namespace ash { -class ShelfLayoutManager; -class WorkspaceLayoutManagerDelegate; +class WorkspaceLayoutManagerBackdropDelegate; namespace wm { class WindowState; +class WorkspaceLayoutManagerDelegate; class WMEvent; } @@ -47,16 +47,19 @@ public ShellObserver, public wm::WindowStateObserver { public: - explicit WorkspaceLayoutManager(aura::Window* window); + WorkspaceLayoutManager( + aura::Window* window, + std::unique_ptr<wm::WorkspaceLayoutManagerDelegate> delegate); + ~WorkspaceLayoutManager() override; - void SetShelf(ShelfLayoutManager* shelf); + void DeleteDelegate(); // A delegate which can be set to add a backdrop behind the top most visible // window. With the call the ownership of the delegate will be transferred to // the WorkspaceLayoutManager. void SetMaximizeBackdropDelegate( - std::unique_ptr<WorkspaceLayoutManagerDelegate> delegate); + std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> delegate); // Overridden from aura::LayoutManager: void OnWindowResized() override {} @@ -129,10 +132,11 @@ // Animates the window bounds to |bounds|. void SetChildBoundsAnimated(aura::Window* child, const gfx::Rect& bounds); - ShelfLayoutManager* shelf_; aura::Window* window_; aura::Window* root_window_; + std::unique_ptr<wm::WorkspaceLayoutManagerDelegate> delegate_; + // Set of windows we're listening to. WindowSet windows_; @@ -144,7 +148,7 @@ // A window which covers the full container and which gets inserted behind the // topmost visible window. - std::unique_ptr<WorkspaceLayoutManagerDelegate> backdrop_delegate_; + std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> backdrop_delegate_; DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManager); };
diff --git a/ash/wm/workspace/workspace_layout_manager_delegate.h b/ash/wm/workspace/workspace_layout_manager_backdrop_delegate.h similarity index 77% rename from ash/wm/workspace/workspace_layout_manager_delegate.h rename to ash/wm/workspace/workspace_layout_manager_backdrop_delegate.h index cdc76c2..c994a1c 100644 --- a/ash/wm/workspace/workspace_layout_manager_delegate.h +++ b/ash/wm/workspace/workspace_layout_manager_backdrop_delegate.h
@@ -2,9 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_WM_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_DELEGATE_H_ -#define ASH_WM_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_DELEGATE_H_ +#ifndef ASH_WM_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_BACKDROP_DELEGATE_H_ +#define ASH_WM_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_BACKDROP_DELEGATE_H_ +#include "ash/ash_export.h" #include "ash/wm/wm_types.h" namespace aura { @@ -18,10 +19,9 @@ // A delegate which can be set to create and control a backdrop which gets // placed below the top level window. -class WorkspaceLayoutManagerDelegate { +class ASH_EXPORT WorkspaceLayoutManagerBackdropDelegate { public: - WorkspaceLayoutManagerDelegate() {} - virtual ~WorkspaceLayoutManagerDelegate() {} + virtual ~WorkspaceLayoutManagerBackdropDelegate() {} // A window got added to the layout. virtual void OnWindowAddedToLayout(aura::Window* child) = 0; @@ -46,4 +46,4 @@ } // namespace ash -#endif // ASH_WM_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_DELEGATE_H_ +#endif // ASH_WM_WORKSPACE_WORKSPACE_LAYOUT_MANAGER_BACKDROP_DELEGATE_H_
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc index f7cf212d..ed780d01 100644 --- a/ash/wm/workspace/workspace_layout_manager_unittest.cc +++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -18,10 +18,10 @@ #include "ash/shell_window_ids.h" #include "ash/test/ash_test_base.h" #include "ash/test/display_manager_test_api.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/maximize_mode/workspace_backdrop_delegate.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/workspace_window_resizer.h" #include "base/compiler_specific.h" #include "ui/aura/client/aura_constants.h" @@ -842,7 +842,7 @@ // Turn the top window back drop on / off. void ShowTopWindowBackdrop(bool show) { - std::unique_ptr<ash::WorkspaceLayoutManagerDelegate> backdrop; + std::unique_ptr<ash::WorkspaceLayoutManagerBackdropDelegate> backdrop; if (show) { backdrop.reset(new ash::WorkspaceBackdropDelegate(default_container_)); }
diff --git a/ash/wm/workspace/workspace_window_resizer.cc b/ash/wm/workspace/workspace_window_resizer.cc index e65f2f4..84d4d14 100644 --- a/ash/wm/workspace/workspace_window_resizer.cc +++ b/ash/wm/workspace/workspace_window_resizer.cc
@@ -15,6 +15,7 @@ #include "ash/screen_util.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/default_window_resizer.h" #include "ash/wm/dock/docked_window_layout_manager.h" #include "ash/wm/dock/docked_window_resizer.h" @@ -22,7 +23,6 @@ #include "ash/wm/panels/panel_window_resizer.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/phantom_window_controller.h" #include "ash/wm/workspace/two_step_edge_cycler.h" #include "base/command_line.h"
diff --git a/ash/wm/workspace/workspace_window_resizer_unittest.cc b/ash/wm/workspace/workspace_window_resizer_unittest.cc index bb259c9..a1b893f 100644 --- a/ash/wm/workspace/workspace_window_resizer_unittest.cc +++ b/ash/wm/workspace/workspace_window_resizer_unittest.cc
@@ -12,9 +12,9 @@ #include "ash/shell_window_ids.h" #include "ash/test/ash_test_base.h" #include "ash/test/display_manager_test_api.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "ash/wm/workspace/phantom_window_controller.h" #include "ash/wm/workspace_controller.h" #include "base/command_line.h"
diff --git a/ash/wm/workspace_controller.cc b/ash/wm/workspace_controller.cc index a477727..08f2a42 100644 --- a/ash/wm/workspace_controller.cc +++ b/ash/wm/workspace_controller.cc
@@ -10,12 +10,13 @@ #include "ash/shelf/shelf_layout_manager.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" +#include "ash/wm/common/workspace/workspace_layout_manager_delegate.h" #include "ash/wm/window_animations.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" #include "ash/wm/workspace/workspace_event_handler.h" #include "ash/wm/workspace/workspace_layout_manager.h" -#include "ash/wm/workspace/workspace_layout_manager_delegate.h" +#include "ash/wm/workspace/workspace_layout_manager_backdrop_delegate.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" @@ -40,11 +41,14 @@ } // namespace -WorkspaceController::WorkspaceController(aura::Window* viewport) +WorkspaceController::WorkspaceController( + aura::Window* viewport, + std::unique_ptr<wm::WorkspaceLayoutManagerDelegate> delegate) : viewport_(viewport), shelf_(NULL), event_handler_(new WorkspaceEventHandler), - layout_manager_(new WorkspaceLayoutManager(viewport)) { + layout_manager_( + new WorkspaceLayoutManager(viewport, std::move(delegate))) { SetWindowVisibilityAnimationTransition( viewport_, ::wm::ANIMATE_NONE); @@ -101,7 +105,6 @@ void WorkspaceController::SetShelf(ShelfLayoutManager* shelf) { shelf_ = shelf; - layout_manager_->SetShelf(shelf); } void WorkspaceController::DoInitialAnimation() { @@ -134,7 +137,7 @@ } void WorkspaceController::SetMaximizeBackdropDelegate( - std::unique_ptr<WorkspaceLayoutManagerDelegate> delegate) { + std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> delegate) { layout_manager_->SetMaximizeBackdropDelegate(std::move(delegate)); }
diff --git a/ash/wm/workspace_controller.h b/ash/wm/workspace_controller.h index c5c318c..e34e111 100644 --- a/ash/wm/workspace_controller.h +++ b/ash/wm/workspace_controller.h
@@ -20,13 +20,19 @@ class WorkspaceControllerTestHelper; class WorkspaceEventHandler; class WorkspaceLayoutManager; +class WorkspaceLayoutManagerBackdropDelegate; + +namespace wm { class WorkspaceLayoutManagerDelegate; +} // WorkspaceController acts as a central place that ties together all the // various workspace pieces. class ASH_EXPORT WorkspaceController { public: - explicit WorkspaceController(aura::Window* viewport); + WorkspaceController( + aura::Window* viewport, + std::unique_ptr<wm::WorkspaceLayoutManagerDelegate> delegate); virtual ~WorkspaceController(); // Returns the current window state. @@ -40,7 +46,7 @@ // Add a delegate which adds a backdrop behind the top window of the default // workspace. void SetMaximizeBackdropDelegate( - std::unique_ptr<WorkspaceLayoutManagerDelegate> delegate); + std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> delegate); WorkspaceLayoutManager* layout_manager() { return layout_manager_; }
diff --git a/base/BUILD.gn b/base/BUILD.gn index 7eddca0..994a17a 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -974,6 +974,8 @@ "win/shortcut.h", "win/startup_information.cc", "win/startup_information.h", + "win/wait_chain.cc", + "win/wait_chain.h", "win/win_util.cc", "win/win_util.h", "win/windows_version.cc", @@ -1890,6 +1892,7 @@ "win/scoped_variant_unittest.cc", "win/shortcut_unittest.cc", "win/startup_information_unittest.cc", + "win/wait_chain_unittest.cc", "win/win_util_unittest.cc", "win/windows_version_unittest.cc", "win/wrapped_window_proc_unittest.cc",
diff --git a/base/allocator/README.md b/base/allocator/README.md index 164df51a..e08aaab9 100644 --- a/base/allocator/README.md +++ b/base/allocator/README.md
@@ -97,7 +97,7 @@ a central place. - Full documentation: [Allocator shim design doc][url-allocator-shim]. - - Current state: Available and enabled by default on Linux, CrOS and Android. + - Current state: Available and enabled by default on Linux and CrOS. - Tracking bug: [https://crbug.com/550886][crbug.com/550886]. - Build-time flag: `use_experimental_allocator_shim`.
diff --git a/base/allocator/allocator_shim_internals.h b/base/allocator/allocator_shim_internals.h index fc3624c..35df284 100644 --- a/base/allocator/allocator_shim_internals.h +++ b/base/allocator/allocator_shim_internals.h
@@ -9,12 +9,8 @@ #include <sys/cdefs.h> // for __THROW -#ifndef __THROW // Not a glibc system -#ifdef _NOEXCEPT // LLVM libc++ uses noexcept instead -#define __THROW _NOEXCEPT -#else +#ifndef __THROW /* Not a glibc system */ #define __THROW -#endif // !_NOEXCEPT #endif // Shim layer symbols need to be ALWAYS exported, regardless of component build.
diff --git a/base/base.gyp b/base/base.gyp index f5b32d8..4aea9c5 100644 --- a/base/base.gyp +++ b/base/base.gyp
@@ -602,6 +602,7 @@ 'win/scoped_variant_unittest.cc', 'win/shortcut_unittest.cc', 'win/startup_information_unittest.cc', + 'win/wait_chain_unittest.cc', 'win/win_util_unittest.cc', 'win/windows_version_unittest.cc', 'win/wrapped_window_proc_unittest.cc',
diff --git a/base/base.gypi b/base/base.gypi index 2cc906f..0d809d15 100644 --- a/base/base.gypi +++ b/base/base.gypi
@@ -789,6 +789,8 @@ 'win/shortcut.h', 'win/startup_information.cc', 'win/startup_information.h', + 'win/wait_chain.cc', + 'win/wait_chain.h', 'win/win_util.cc', 'win/win_util.h', 'win/windows_version.cc',
diff --git a/base/bind_internal_win.h b/base/bind_internal_win.h index 2ee12ef2..2def874 100644 --- a/base/bind_internal_win.h +++ b/base/bind_internal_win.h
@@ -8,6 +8,8 @@ #ifndef BASE_BIND_INTERNAL_WIN_H_ #define BASE_BIND_INTERNAL_WIN_H_ +#include <utility> + #include "build/build_config.h" // In the x64 architecture in Windows, __fastcall, __stdcall, etc, are all @@ -33,8 +35,9 @@ : function_(function) { } - R Run(typename CallbackParamTraits<Args>::ForwardType... args) { - return function_(args...); + template <typename... RunArgs> + R Run(RunArgs&&... args) { + return function_(std::forward<RunArgs>(args)...); } private: @@ -53,8 +56,9 @@ : function_(function) { } - R Run(typename CallbackParamTraits<Args>::ForwardType... args) { - return function_(args...); + template <typename... RunArgs> + R Run(RunArgs&&... args) { + return function_(std::forward<RunArgs>(args)...); } private:
diff --git a/base/callback_internal.h b/base/callback_internal.h index 7bff0ba..3e8e10f 100644 --- a/base/callback_internal.h +++ b/base/callback_internal.h
@@ -8,11 +8,6 @@ #ifndef BASE_CALLBACK_INTERNAL_H_ #define BASE_CALLBACK_INTERNAL_H_ -#include <stddef.h> -#include <memory> -#include <type_traits> -#include <vector> - #include "base/atomic_ref_count.h" #include "base/base_export.h" #include "base/callback_forward.h" @@ -116,129 +111,6 @@ extern template class CallbackBase<CopyMode::MoveOnly>; extern template class CallbackBase<CopyMode::Copyable>; -// A helper template to determine if given type is non-const move-only-type, -// i.e. if a value of the given type should be passed via std::move() in a -// destructive way. Types are considered to be move-only if they have a -// sentinel MoveOnlyTypeForCPP03 member: a class typically gets this from using -// the DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND macro. -// It would be easy to generalize this trait to all move-only types... but this -// confuses template deduction in VS2013 with certain types such as -// std::unique_ptr. -// TODO(dcheng): Revisit this when Windows switches to VS2015 by default. - -template <typename T> struct IsMoveOnlyType { - // Types YesType and NoType are guaranteed such that sizeof(YesType) < - // sizeof(NoType). - using YesType = char; - struct NoType { YesType dummy[2]; }; - - template <typename U> - static YesType Test(const typename U::MoveOnlyTypeForCPP03*); - - template <typename U> - static NoType Test(...); - - static const bool value = sizeof((Test<T>(0))) == sizeof(YesType) && - !std::is_const<T>::value; -}; - -// Specialization of IsMoveOnlyType so that std::unique_ptr is still considered -// move-only, even without the sentinel member. -template <typename T, typename D> -struct IsMoveOnlyType<std::unique_ptr<T, D>> : std::true_type {}; - -// Specialization of std::vector, so that it's considered move-only if the -// element type is move-only. Allocator is explicitly ignored when determining -// move-only status of the std::vector. -template <typename T, typename Allocator> -struct IsMoveOnlyType<std::vector<T, Allocator>> : IsMoveOnlyType<T> {}; - -template <typename> -struct CallbackParamTraitsForMoveOnlyType; - -template <typename> -struct CallbackParamTraitsForNonMoveOnlyType; - -// TODO(tzik): Use a default parameter once MSVS supports variadic templates -// with default values. -// http://connect.microsoft.com/VisualStudio/feedbackdetail/view/957801/compilation-error-with-variadic-templates -// -// This is a typetraits object that's used to take an argument type, and -// extract a suitable type for forwarding arguments. -template <typename T> -struct CallbackParamTraits - : std::conditional<IsMoveOnlyType<T>::value, - CallbackParamTraitsForMoveOnlyType<T>, - CallbackParamTraitsForNonMoveOnlyType<T>>::type { -}; - -template <typename T> -struct CallbackParamTraitsForNonMoveOnlyType { - using ForwardType = const T&; -}; - -// Note that for array types, we implicitly add a const in the conversion. This -// means that it is not possible to bind array arguments to functions that take -// a non-const pointer. Trying to specialize the template based on a "const -// T[n]" does not seem to match correctly, so we are stuck with this -// restriction. -template <typename T, size_t n> -struct CallbackParamTraitsForNonMoveOnlyType<T[n]> { - using ForwardType = const T*; -}; - -// See comment for CallbackParamTraits<T[n]>. -template <typename T> -struct CallbackParamTraitsForNonMoveOnlyType<T[]> { - using ForwardType = const T*; -}; - -// Parameter traits for movable-but-not-copyable scopers. -// -// Callback<>/Bind() understands movable-but-not-copyable semantics where -// the type cannot be copied but can still have its state destructively -// transferred (aka. moved) to another instance of the same type by calling a -// helper function. When used with Bind(), this signifies transferal of the -// object's state to the target function. -// -// For these types, the ForwardType must not be a const reference, or a -// reference. A const reference is inappropriate, and would break const -// correctness, because we are implementing a destructive move. A non-const -// reference cannot be used with temporaries which means the result of a -// function or a cast would not be usable with Callback<> or Bind(). -template <typename T> -struct CallbackParamTraitsForMoveOnlyType { - using ForwardType = T; -}; - -// CallbackForward() is a very limited simulation of C++11's std::forward() -// used by the Callback/Bind system for a set of movable-but-not-copyable -// types. It is needed because forwarding a movable-but-not-copyable -// argument to another function requires us to invoke the proper move -// operator to create a rvalue version of the type. The supported types are -// whitelisted below as overloads of the CallbackForward() function. The -// default template compiles out to be a no-op. -// -// In C++11, std::forward would replace all uses of this function. However, it -// is impossible to implement a general std::forward without C++11 due to a lack -// of rvalue references. -// -// In addition to Callback/Bind, this is used by PostTaskAndReplyWithResult to -// simulate std::forward() and forward the result of one Callback as a -// parameter to another callback. This is to support Callbacks that return -// the movable-but-not-copyable types whitelisted above. -template <typename T> -typename std::enable_if<!IsMoveOnlyType<T>::value, T>::type& CallbackForward( - T& t) { - return t; -} - -template <typename T> -typename std::enable_if<IsMoveOnlyType<T>::value, T>::type CallbackForward( - T& t) { - return std::move(t); -} - } // namespace internal } // namespace base
diff --git a/base/callback_list.h b/base/callback_list.h index 848c900..7ab79dd 100644 --- a/base/callback_list.h +++ b/base/callback_list.h
@@ -9,7 +9,6 @@ #include <memory> #include "base/callback.h" -#include "base/callback_internal.h" #include "base/compiler_specific.h" #include "base/logging.h" #include "base/macros.h" @@ -211,8 +210,8 @@ CallbackList() {} - void Notify( - typename internal::CallbackParamTraits<Args>::ForwardType... args) { + template <typename... RunArgs> + void Notify(RunArgs&&... args) { typename internal::CallbackListBase<CallbackType>::Iterator it = this->GetIterator(); CallbackType* cb;
diff --git a/base/memory/shared_memory.h b/base/memory/shared_memory.h index b7e5a05..13238aa 100644 --- a/base/memory/shared_memory.h +++ b/base/memory/shared_memory.h
@@ -32,7 +32,10 @@ struct BASE_EXPORT SharedMemoryCreateOptions { SharedMemoryCreateOptions(); -#if !(defined(OS_MACOSX) && !defined(OS_IOS)) +#if defined(OS_MACOSX) && !defined(OS_IOS) + // The type of OS primitive that should back the SharedMemory object. + SharedMemoryHandle::Type type; +#else // DEPRECATED (crbug.com/345734): // If NULL, the object is anonymous. This pointer is owned by the caller // and must live through the call to Create(). @@ -44,7 +47,7 @@ // shared memory must not exist. This flag is meaningless unless // name_deprecated is non-NULL. bool open_existing_deprecated; -#endif // !(defined(OS_MACOSX) && !defined(OS_IOS)) +#endif // defined(OS_MACOSX) && !defined(OS_IOS) // Size of the shared memory object to be created. // When opening an existing object, this has no effect. @@ -99,7 +102,7 @@ // The caller is responsible for destroying the duplicated OS primitive. static SharedMemoryHandle DuplicateHandle(const SharedMemoryHandle& handle); -#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) +#if defined(OS_POSIX) // This method requires that the SharedMemoryHandle is backed by a POSIX fd. static int GetFdFromSharedMemoryHandle(const SharedMemoryHandle& handle); #endif @@ -120,6 +123,16 @@ // Returns true on success and false on failure. bool CreateAndMapAnonymous(size_t size); +#if defined(OS_MACOSX) && !defined(OS_IOS) + // These two methods are analogs of CreateAndMapAnonymous and CreateAnonymous + // that force the underlying OS primitive to be a POSIX fd. Do not add new + // uses of these methods unless absolutely necessary, since constructing a + // fd-backed SharedMemory object frequently takes 100ms+. + // http://crbug.com/466437. + bool CreateAndMapAnonymousPosix(size_t size); + bool CreateAnonymousPosix(size_t size); +#endif // defined(OS_MACOSX) && !defined(OS_IOS) + // Creates an anonymous shared memory segment of size size. // Returns true on success and false on failure. bool CreateAnonymous(size_t size) { @@ -244,11 +257,12 @@ } private: -#if defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_ANDROID) && \ - !(defined(OS_MACOSX) && !defined(OS_IOS)) +#if defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_ANDROID) bool PrepareMapFile(ScopedFILE fp, ScopedFD readonly); +#if !(defined(OS_MACOSX) && !defined(OS_IOS)) bool FilePathForMemoryName(const std::string& mem_name, FilePath* path); #endif +#endif // defined(OS_POSIX) && !defined(OS_NACL) && !defined(OS_ANDROID) enum ShareMode { SHARE_READONLY, SHARE_CURRENT_MODE, @@ -268,6 +282,10 @@ // The OS primitive that backs the shared memory region. SharedMemoryHandle shm_; + // The mechanism by which the memory is mapped. Only valid if |memory_| is not + // |nullptr|. + SharedMemoryHandle::Type mapped_memory_mechanism_; + int readonly_mapped_file_; #elif defined(OS_POSIX) int mapped_file_;
diff --git a/base/memory/shared_memory_handle.h b/base/memory/shared_memory_handle.h index 8eff26b..5befcdd6 100644 --- a/base/memory/shared_memory_handle.h +++ b/base/memory/shared_memory_handle.h
@@ -14,7 +14,9 @@ #include "base/process/process_handle.h" #elif defined(OS_MACOSX) && !defined(OS_IOS) #include <mach/mach.h> +#include <sys/types.h> #include "base/base_export.h" +#include "base/file_descriptor_posix.h" #include "base/macros.h" #include "base/process/process_handle.h" #elif defined(OS_POSIX) @@ -85,9 +87,32 @@ #else class BASE_EXPORT SharedMemoryHandle { public: + // The values of these enums must not change, as they are used by the + // histogram OSX.SharedMemory.Mechanism. + enum Type { + // The SharedMemoryHandle is backed by a POSIX fd. + POSIX, + // The SharedMemoryHandle is backed by the Mach primitive "memory object". + MACH, + }; + static const int TypeMax = 2; + + // The format that should be used to transmit |Type| over the wire. + typedef int TypeWireFormat; + // The default constructor returns an invalid SharedMemoryHandle. SharedMemoryHandle(); + // Constructs a SharedMemoryHandle backed by the components of a + // FileDescriptor. The newly created instance has the same ownership semantics + // as base::FileDescriptor. This typically means that the SharedMemoryHandle + // takes ownership of the |fd| if |auto_close| is true. Unfortunately, it's + // common for existing code to make shallow copies of SharedMemoryHandle, and + // the one that is finally passed into a base::SharedMemory is the one that + // "consumes" the fd. + explicit SharedMemoryHandle(const base::FileDescriptor& file_descriptor); + SharedMemoryHandle(int fd, bool auto_close); + // Makes a Mach-based SharedMemoryHandle of the given size. On error, // subsequent calls to IsValid() return false. explicit SharedMemoryHandle(mach_vm_size_t size); @@ -113,16 +138,28 @@ bool operator==(const SharedMemoryHandle& handle) const; bool operator!=(const SharedMemoryHandle& handle) const; + // Returns the type. + Type GetType() const; + // Whether the underlying OS primitive is valid. Once the SharedMemoryHandle // is backed by a valid OS primitive, it becomes immutable. bool IsValid() const; + // Sets the POSIX fd backing the SharedMemoryHandle. Requires that the + // SharedMemoryHandle be backed by a POSIX fd. + void SetFileHandle(int fd, bool auto_close); + + // This method assumes that the SharedMemoryHandle is backed by a POSIX fd. + // This is eventually no longer going to be true, so please avoid adding new + // uses of this method. + const FileDescriptor GetFileDescriptor() const; + // Exposed so that the SharedMemoryHandle can be transported between // processes. mach_port_t GetMemoryObject() const; // Returns false on a failure to determine the size. On success, populates the - // output variable |size|. Returns 0 if the handle is invalid. + // output variable |size|. bool GetSize(size_t* size) const; // The SharedMemoryHandle must be valid. @@ -141,21 +178,31 @@ // Shared code between copy constructor and operator=. void CopyRelevantData(const SharedMemoryHandle& handle); - mach_port_t memory_object_ = MACH_PORT_NULL; + Type type_; - // The size of the shared memory region when |type_| is MACH. Only - // relevant if |memory_object_| is not |MACH_PORT_NULL|. - mach_vm_size_t size_ = 0; + // Each instance of a SharedMemoryHandle is backed either by a POSIX fd or a + // mach port. |type_| determines the backing member. + union { + FileDescriptor file_descriptor_; - // The pid of the process in which |memory_object_| is usable. Only - // relevant if |memory_object_| is not |MACH_PORT_NULL|. - base::ProcessId pid_ = 0; + struct { + mach_port_t memory_object_; - // Whether passing this object as a parameter to an IPC message passes - // ownership of |memory_object_| to the IPC stack. This is meant to mimic - // the behavior of the |auto_close| parameter of FileDescriptor. - // Defaults to |false|. - bool ownership_passes_to_ipc_ = false; + // The size of the shared memory region when |type_| is MACH. Only + // relevant if |memory_object_| is not |MACH_PORT_NULL|. + mach_vm_size_t size_; + + // The pid of the process in which |memory_object_| is usable. Only + // relevant if |memory_object_| is not |MACH_PORT_NULL|. + base::ProcessId pid_; + + // Whether passing this object as a parameter to an IPC message passes + // ownership of |memory_object_| to the IPC stack. This is meant to mimic + // the behavior of the |auto_close| parameter of FileDescriptor. + // Defaults to |false|. + bool ownership_passes_to_ipc_; + }; + }; }; #endif
diff --git a/base/memory/shared_memory_handle_mac.cc b/base/memory/shared_memory_handle_mac.cc index ad470bea..600d2bb 100644 --- a/base/memory/shared_memory_handle_mac.cc +++ b/base/memory/shared_memory_handle_mac.cc
@@ -14,9 +14,22 @@ namespace base { -SharedMemoryHandle::SharedMemoryHandle() {} +static_assert(sizeof(SharedMemoryHandle::Type) <= + sizeof(SharedMemoryHandle::TypeWireFormat), + "Size of enum SharedMemoryHandle::Type exceeds size of type " + "transmitted over wire."); + +SharedMemoryHandle::SharedMemoryHandle() : type_(POSIX), file_descriptor_() {} + +SharedMemoryHandle::SharedMemoryHandle( + const base::FileDescriptor& file_descriptor) + : type_(POSIX), file_descriptor_(file_descriptor) {} + +SharedMemoryHandle::SharedMemoryHandle(int fd, bool auto_close) + : type_(POSIX), file_descriptor_(fd, auto_close) {} SharedMemoryHandle::SharedMemoryHandle(mach_vm_size_t size) { + type_ = MACH; mach_port_t named_right; kern_return_t kr = mach_make_memory_entry_64( mach_task_self(), @@ -39,12 +52,14 @@ SharedMemoryHandle::SharedMemoryHandle(mach_port_t memory_object, mach_vm_size_t size, base::ProcessId pid) - : memory_object_(memory_object), + : type_(MACH), + memory_object_(memory_object), size_(size), pid_(pid), ownership_passes_to_ipc_(false) {} -SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle) { +SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle) + : type_(handle.type_) { CopyRelevantData(handle); } @@ -53,51 +68,104 @@ if (this == &handle) return *this; + type_ = handle.type_; CopyRelevantData(handle); return *this; } SharedMemoryHandle SharedMemoryHandle::Duplicate() const { - if (!IsValid()) - return SharedMemoryHandle(MACH_PORT_NULL, 0, 0); + switch (type_) { + case POSIX: { + if (!IsValid()) + return SharedMemoryHandle(); - // Increment the ref count. - kern_return_t kr = mach_port_mod_refs(mach_task_self(), memory_object_, - MACH_PORT_RIGHT_SEND, 1); - DCHECK_EQ(kr, KERN_SUCCESS); - SharedMemoryHandle handle(*this); - handle.SetOwnershipPassesToIPC(true); - return handle; + int duped_fd = HANDLE_EINTR(dup(file_descriptor_.fd)); + if (duped_fd < 0) + return SharedMemoryHandle(); + return SharedMemoryHandle(duped_fd, true); + } + case MACH: { + if (!IsValid()) + return SharedMemoryHandle(MACH_PORT_NULL, 0, 0); + + // Increment the ref count. + kern_return_t kr = mach_port_mod_refs(mach_task_self(), memory_object_, + MACH_PORT_RIGHT_SEND, 1); + DCHECK_EQ(kr, KERN_SUCCESS); + SharedMemoryHandle handle(*this); + handle.SetOwnershipPassesToIPC(true); + return handle; + } + } } bool SharedMemoryHandle::operator==(const SharedMemoryHandle& handle) const { if (!IsValid() && !handle.IsValid()) return true; - return memory_object_ == handle.memory_object_ && size_ == handle.size_ && - pid_ == handle.pid_; + if (type_ != handle.type_) + return false; + + switch (type_) { + case POSIX: + return file_descriptor_ == handle.file_descriptor_; + case MACH: + return memory_object_ == handle.memory_object_ && size_ == handle.size_ && + pid_ == handle.pid_; + } } bool SharedMemoryHandle::operator!=(const SharedMemoryHandle& handle) const { return !(*this == handle); } +SharedMemoryHandle::Type SharedMemoryHandle::GetType() const { + return type_; +} + bool SharedMemoryHandle::IsValid() const { - return memory_object_ != MACH_PORT_NULL; + switch (type_) { + case POSIX: + return file_descriptor_.fd >= 0; + case MACH: + return memory_object_ != MACH_PORT_NULL; + } +} + +void SharedMemoryHandle::SetFileHandle(int fd, bool auto_close) { + DCHECK(!IsValid()); + file_descriptor_.fd = fd; + file_descriptor_.auto_close = auto_close; + type_ = POSIX; +} + +const FileDescriptor SharedMemoryHandle::GetFileDescriptor() const { + DCHECK_EQ(type_, POSIX); + return file_descriptor_; } mach_port_t SharedMemoryHandle::GetMemoryObject() const { + DCHECK_EQ(type_, MACH); return memory_object_; } bool SharedMemoryHandle::GetSize(size_t* size) const { - if (!IsValid()) { - *size = 0; - return true; - } + if (!IsValid()) + return false; - *size = size_; - return true; + switch (type_) { + case SharedMemoryHandle::POSIX: + struct stat st; + if (fstat(file_descriptor_.fd, &st) != 0) + return false; + if (st.st_size < 0) + return false; + *size = st.st_size; + return true; + case SharedMemoryHandle::MACH: + *size = size_; + return true; + } } bool SharedMemoryHandle::MapAt(off_t offset, @@ -105,42 +173,72 @@ void** memory, bool read_only) { DCHECK(IsValid()); - DCHECK_EQ(pid_, GetCurrentProcId()); - kern_return_t kr = mach_vm_map( - mach_task_self(), - reinterpret_cast<mach_vm_address_t*>(memory), // Output parameter - bytes, - 0, // Alignment mask - VM_FLAGS_ANYWHERE, memory_object_, offset, - FALSE, // Copy - VM_PROT_READ | (read_only ? 0 : VM_PROT_WRITE), // Current protection - VM_PROT_WRITE | VM_PROT_READ | VM_PROT_IS_MASK, // Maximum protection - VM_INHERIT_NONE); - return kr == KERN_SUCCESS; + switch (type_) { + case SharedMemoryHandle::POSIX: + *memory = mmap(nullptr, bytes, PROT_READ | (read_only ? 0 : PROT_WRITE), + MAP_SHARED, file_descriptor_.fd, offset); + + return *memory && *memory != reinterpret_cast<void*>(-1); + case SharedMemoryHandle::MACH: + // The flag VM_PROT_IS_MASK is only supported on OSX 10.7+. + DCHECK(mac::IsOSLionOrLater()); + + DCHECK_EQ(pid_, GetCurrentProcId()); + kern_return_t kr = mach_vm_map( + mach_task_self(), + reinterpret_cast<mach_vm_address_t*>(memory), // Output parameter + bytes, + 0, // Alignment mask + VM_FLAGS_ANYWHERE, + memory_object_, + offset, + FALSE, // Copy + VM_PROT_READ | (read_only ? 0 : VM_PROT_WRITE), // Current protection + VM_PROT_WRITE | VM_PROT_READ | VM_PROT_IS_MASK, // Maximum protection + VM_INHERIT_NONE); + return kr == KERN_SUCCESS; + } } void SharedMemoryHandle::Close() const { if (!IsValid()) return; - kern_return_t kr = mach_port_deallocate(mach_task_self(), memory_object_); - if (kr != KERN_SUCCESS) - DPLOG(ERROR) << "Error deallocating mach port: " << kr; + switch (type_) { + case POSIX: + if (IGNORE_EINTR(close(file_descriptor_.fd)) < 0) + DPLOG(ERROR) << "Error closing fd."; + break; + case MACH: + kern_return_t kr = mach_port_deallocate(mach_task_self(), memory_object_); + if (kr != KERN_SUCCESS) + DPLOG(ERROR) << "Error deallocating mach port: " << kr; + break; + } } void SharedMemoryHandle::SetOwnershipPassesToIPC(bool ownership_passes) { + DCHECK_EQ(type_, MACH); ownership_passes_to_ipc_ = ownership_passes; } bool SharedMemoryHandle::OwnershipPassesToIPC() const { + DCHECK_EQ(type_, MACH); return ownership_passes_to_ipc_; } void SharedMemoryHandle::CopyRelevantData(const SharedMemoryHandle& handle) { - memory_object_ = handle.memory_object_; - size_ = handle.size_; - pid_ = handle.pid_; - ownership_passes_to_ipc_ = handle.ownership_passes_to_ipc_; + switch (type_) { + case POSIX: + file_descriptor_ = handle.file_descriptor_; + break; + case MACH: + memory_object_ = handle.memory_object_; + size_ = handle.size_; + pid_ = handle.pid_; + ownership_passes_to_ipc_ = handle.ownership_passes_to_ipc_; + break; + } } } // namespace base
diff --git a/base/memory/shared_memory_mac.cc b/base/memory/shared_memory_mac.cc index c9882fd0..6dd95762 100644 --- a/base/memory/shared_memory_mac.cc +++ b/base/memory/shared_memory_mac.cc
@@ -4,22 +4,33 @@ #include "base/memory/shared_memory.h" +#include <errno.h> +#include <fcntl.h> #include <mach/mach_vm.h> +#include <stddef.h> +#include <sys/mman.h> +#include <sys/stat.h> +#include <unistd.h> #include "base/files/file_util.h" #include "base/files/scoped_file.h" #include "base/logging.h" -#include "base/mac/foundation_util.h" #include "base/mac/mac_util.h" #include "base/mac/scoped_mach_vm.h" #include "base/metrics/field_trial.h" #include "base/metrics/histogram_macros.h" +#include "base/posix/eintr_wrapper.h" +#include "base/posix/safe_strerror.h" #include "base/process/process_metrics.h" #include "base/profiler/scoped_tracker.h" #include "base/scoped_generic.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#if defined(OS_MACOSX) +#include "base/mac/foundation_util.h" +#endif // OS_MACOSX + namespace base { namespace { @@ -67,15 +78,81 @@ return true; } +struct ScopedPathUnlinkerTraits { + static FilePath* InvalidValue() { return nullptr; } + + static void Free(FilePath* path) { + // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466437 + // is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "466437 SharedMemory::Create::Unlink")); + if (unlink(path->value().c_str())) + PLOG(WARNING) << "unlink"; + } +}; + +// Unlinks the FilePath when the object is destroyed. +typedef ScopedGeneric<FilePath*, ScopedPathUnlinkerTraits> ScopedPathUnlinker; + +// Makes a temporary file, fdopens it, and then unlinks it. |fp| is populated +// with the fdopened FILE. |readonly_fd| is populated with the opened fd if +// options.share_read_only is true. |path| is populated with the location of +// the file before it was unlinked. +// Returns false if there's an unhandled failure. +bool CreateAnonymousSharedMemory(const SharedMemoryCreateOptions& options, + ScopedFILE* fp, + ScopedFD* readonly_fd, + FilePath* path) { + // Q: Why not use the shm_open() etc. APIs? + // A: Because they're limited to 4mb on OS X. FFFFFFFUUUUUUUUUUU + FilePath directory; + ScopedPathUnlinker path_unlinker; + if (GetShmemTempDir(options.executable, &directory)) { + // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466437 + // is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "466437 SharedMemory::Create::OpenTemporaryFile")); + fp->reset(CreateAndOpenTemporaryFileInDir(directory, path)); + + // Deleting the file prevents anyone else from mapping it in (making it + // private), and prevents the need for cleanup (once the last fd is + // closed, it is truly freed). + if (*fp) + path_unlinker.reset(path); + } + + if (*fp) { + if (options.share_read_only) { + // TODO(erikchen): Remove ScopedTracker below once + // http://crbug.com/466437 is fixed. + tracked_objects::ScopedTracker tracking_profile( + FROM_HERE_WITH_EXPLICIT_FUNCTION( + "466437 SharedMemory::Create::OpenReadonly")); + // Also open as readonly so that we can ShareReadOnlyToProcess. + readonly_fd->reset(HANDLE_EINTR(open(path->value().c_str(), O_RDONLY))); + if (!readonly_fd->is_valid()) { + DPLOG(ERROR) << "open(\"" << path->value() << "\", O_RDONLY) failed"; + fp->reset(); + return false; + } + } + } + return true; +} + } // namespace SharedMemoryCreateOptions::SharedMemoryCreateOptions() - : size(0), + : type(SharedMemoryHandle::MACH), + size(0), executable(false), share_read_only(false) {} SharedMemory::SharedMemory() - : readonly_mapped_file_(-1), + : mapped_memory_mechanism_(SharedMemoryHandle::POSIX), + readonly_mapped_file_(-1), mapped_size_(0), memory_(NULL), read_only_(false), @@ -83,6 +160,7 @@ SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only) : shm_(handle), + mapped_memory_mechanism_(SharedMemoryHandle::POSIX), readonly_mapped_file_(-1), mapped_size_(0), memory_(NULL), @@ -111,8 +189,7 @@ // static size_t SharedMemory::GetHandleLimit() { - // This should be effectively unlimited on OS X. - return 10000; + return GetMaxFds(); } // static @@ -121,10 +198,27 @@ return handle.Duplicate(); } +// static +int SharedMemory::GetFdFromSharedMemoryHandle( + const SharedMemoryHandle& handle) { + return handle.GetFileDescriptor().fd; +} + bool SharedMemory::CreateAndMapAnonymous(size_t size) { return CreateAnonymous(size) && Map(size); } +bool SharedMemory::CreateAndMapAnonymousPosix(size_t size) { + return CreateAnonymousPosix(size) && Map(size); +} + +bool SharedMemory::CreateAnonymousPosix(size_t size) { + SharedMemoryCreateOptions options; + options.type = SharedMemoryHandle::POSIX; + options.size = size; + return Create(options); +} + // static bool SharedMemory::GetSizeFromSharedMemoryHandle( const SharedMemoryHandle& handle, @@ -146,9 +240,42 @@ if (options.size > static_cast<size_t>(std::numeric_limits<int>::max())) return false; - shm_ = SharedMemoryHandle(options.size); + if (options.type == SharedMemoryHandle::MACH) { + shm_ = SharedMemoryHandle(options.size); + requested_size_ = options.size; + return shm_.IsValid(); + } + + // This function theoretically can block on the disk. Both profiling of real + // users and local instrumentation shows that this is a real problem. + // https://code.google.com/p/chromium/issues/detail?id=466437 + base::ThreadRestrictions::ScopedAllowIO allow_io; + + ScopedFILE fp; + ScopedFD readonly_fd; + + FilePath path; + bool result = CreateAnonymousSharedMemory(options, &fp, &readonly_fd, &path); + if (!result) + return false; + + if (!fp) { + PLOG(ERROR) << "Creating shared memory in " << path.value() << " failed"; + return false; + } + + // Get current size. + struct stat stat; + if (fstat(fileno(fp.get()), &stat) != 0) + return false; + const size_t current_size = stat.st_size; + if (current_size != options.size) { + if (HANDLE_EINTR(ftruncate(fileno(fp.get()), options.size)) != 0) + return false; + } requested_size_ = options.size; - return shm_.IsValid(); + + return PrepareMapFile(std::move(fp), std::move(readonly_fd)); } bool SharedMemory::MapAt(off_t offset, size_t bytes) { @@ -164,6 +291,7 @@ mapped_size_ = bytes; DCHECK_EQ(0U, reinterpret_cast<uintptr_t>(memory_) & (SharedMemory::MAP_MINIMUM_ALIGNMENT - 1)); + mapped_memory_mechanism_ = shm_.GetType(); } else { memory_ = NULL; } @@ -175,49 +303,142 @@ if (memory_ == NULL) return false; - mach_vm_deallocate(mach_task_self(), - reinterpret_cast<mach_vm_address_t>(memory_), - mapped_size_); + switch (mapped_memory_mechanism_) { + case SharedMemoryHandle::POSIX: + munmap(memory_, mapped_size_); + break; + case SharedMemoryHandle::MACH: + mach_vm_deallocate(mach_task_self(), + reinterpret_cast<mach_vm_address_t>(memory_), + mapped_size_); + break; + } + memory_ = NULL; mapped_size_ = 0; return true; } SharedMemoryHandle SharedMemory::handle() const { - return shm_; + switch (shm_.GetType()) { + case SharedMemoryHandle::POSIX: + return SharedMemoryHandle(shm_.GetFileDescriptor().fd, false); + case SharedMemoryHandle::MACH: + return shm_; + } } void SharedMemory::Close() { shm_.Close(); shm_ = SharedMemoryHandle(); + if (shm_.GetType() == SharedMemoryHandle::POSIX) { + if (readonly_mapped_file_ > 0) { + if (IGNORE_EINTR(close(readonly_mapped_file_)) < 0) + PLOG(ERROR) << "close"; + readonly_mapped_file_ = -1; + } + } +} + +bool SharedMemory::PrepareMapFile(ScopedFILE fp, ScopedFD readonly_fd) { + DCHECK(!shm_.IsValid()); + DCHECK_EQ(-1, readonly_mapped_file_); + if (fp == NULL) + return false; + + // This function theoretically can block on the disk, but realistically + // the temporary files we create will just go into the buffer cache + // and be deleted before they ever make it out to disk. + base::ThreadRestrictions::ScopedAllowIO allow_io; + + struct stat st = {}; + if (fstat(fileno(fp.get()), &st)) + NOTREACHED(); + if (readonly_fd.is_valid()) { + struct stat readonly_st = {}; + if (fstat(readonly_fd.get(), &readonly_st)) + NOTREACHED(); + if (st.st_dev != readonly_st.st_dev || st.st_ino != readonly_st.st_ino) { + LOG(ERROR) << "writable and read-only inodes don't match; bailing"; + return false; + } + } + + int mapped_file = HANDLE_EINTR(dup(fileno(fp.get()))); + if (mapped_file == -1) { + if (errno == EMFILE) { + LOG(WARNING) << "Shared memory creation failed; out of file descriptors"; + return false; + } else { + NOTREACHED() << "Call to dup failed, errno=" << errno; + } + } + shm_ = SharedMemoryHandle(mapped_file, false); + readonly_mapped_file_ = readonly_fd.release(); + + return true; } bool SharedMemory::ShareToProcessCommon(ProcessHandle process, SharedMemoryHandle* new_handle, bool close_self, ShareMode share_mode) { - DCHECK(shm_.IsValid()); + if (shm_.GetType() == SharedMemoryHandle::MACH) { + DCHECK(shm_.IsValid()); - bool success = false; + bool success = false; + switch (share_mode) { + case SHARE_CURRENT_MODE: + *new_handle = shm_.Duplicate(); + success = true; + break; + case SHARE_READONLY: + success = MakeMachSharedMemoryHandleReadOnly(new_handle, shm_, memory_); + break; + } + + if (success) + new_handle->SetOwnershipPassesToIPC(true); + + if (close_self) { + Unmap(); + Close(); + } + + return success; + } + + int handle_to_dup = -1; switch (share_mode) { case SHARE_CURRENT_MODE: - *new_handle = shm_.Duplicate(); - success = true; + handle_to_dup = shm_.GetFileDescriptor().fd; break; case SHARE_READONLY: - success = MakeMachSharedMemoryHandleReadOnly(new_handle, shm_, memory_); + // We could imagine re-opening the file from /dev/fd, but that can't make + // it readonly on Mac: https://codereview.chromium.org/27265002/#msg10 + CHECK_GE(readonly_mapped_file_, 0); + handle_to_dup = readonly_mapped_file_; break; } - if (success) - new_handle->SetOwnershipPassesToIPC(true); + const int new_fd = HANDLE_EINTR(dup(handle_to_dup)); + if (new_fd < 0) { + if (close_self) { + Unmap(); + Close(); + } + DPLOG(ERROR) << "dup() failed."; + return false; + } + + new_handle->SetFileHandle(new_fd, true); if (close_self) { Unmap(); Close(); } - return success; + return true; } } // namespace base
diff --git a/base/memory/shared_memory_unittest.cc b/base/memory/shared_memory_unittest.cc index 8251f60..948a9d0d 100644 --- a/base/memory/shared_memory_unittest.cc +++ b/base/memory/shared_memory_unittest.cc
@@ -316,8 +316,6 @@ } } -// The Mach functionality is tested in shared_memory_mac_unittest.cc. -#if !(defined(OS_MACOSX) && !defined(OS_IOS)) TEST(SharedMemoryTest, ShareReadOnly) { StringPiece contents = "Hello World"; @@ -325,6 +323,10 @@ SharedMemoryCreateOptions options; options.size = contents.size(); options.share_read_only = true; +#if defined(OS_MACOSX) && !defined(OS_IOS) + // The Mach functionality is tested in shared_memory_mac_unittest.cc. + options.type = SharedMemoryHandle::POSIX; +#endif ASSERT_TRUE(writable_shmem.Create(options)); ASSERT_TRUE(writable_shmem.Map(options.size)); memcpy(writable_shmem.memory(), contents.data(), contents.size()); @@ -400,7 +402,6 @@ #error Unexpected platform; write a test that tries to make 'handle' writable. #endif // defined(OS_POSIX) || defined(OS_WIN) } -#endif // !(defined(OS_MACOSX) && !defined(OS_IOS)) TEST(SharedMemoryTest, ShareToSelf) { StringPiece contents = "Hello World"; @@ -474,7 +475,7 @@ EXPECT_EQ(old_address, memory.memory()); } -#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) +#if defined(OS_POSIX) // This test is not applicable for iOS (crbug.com/399384). #if !defined(OS_IOS) // Create a shared memory object, mmap it, and mprotect it to PROT_EXEC. @@ -485,6 +486,10 @@ SharedMemoryCreateOptions options; options.size = kTestSize; options.executable = true; +#if defined(OS_MACOSX) && !defined(OS_IOS) + // The Mach functionality is tested in shared_memory_mac_unittest.cc. + options.type = SharedMemoryHandle::POSIX; +#endif EXPECT_TRUE(shared_memory.Create(options)); EXPECT_TRUE(shared_memory.Map(shared_memory.requested_size())); @@ -518,6 +523,10 @@ SharedMemory shared_memory; SharedMemoryCreateOptions options; options.size = kTestSize; +#if defined(OS_MACOSX) && !defined(OS_IOS) + // The Mach functionality is tested in shared_memory_mac_unittest.cc. + options.type = SharedMemoryHandle::POSIX; +#endif // Set a file mode creation mask that gives all permissions. ScopedUmaskSetter permissive_mask(S_IWGRP | S_IWOTH); @@ -540,6 +549,10 @@ SharedMemory shared_memory; SharedMemoryCreateOptions options; options.size = kTestSize; +#if defined(OS_MACOSX) && !defined(OS_IOS) + // The Mach functionality is tested in shared_memory_mac_unittest.cc. + options.type = SharedMemoryHandle::POSIX; +#endif // Set a file mode creation mask that gives all permissions. ScopedUmaskSetter permissive_mask(S_IWGRP | S_IWOTH); @@ -556,7 +569,7 @@ } #endif // !defined(OS_ANDROID) -#endif // defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) +#endif // defined(OS_POSIX) // Map() will return addresses which are aligned to the platform page size, this // varies from platform to platform though. Since we'd like to advertise a
diff --git a/base/task_runner_util.h b/base/task_runner_util.h index da088db2a..ba8e120 100644 --- a/base/task_runner_util.h +++ b/base/task_runner_util.h
@@ -7,7 +7,6 @@ #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/callback_internal.h" #include "base/logging.h" #include "base/task_runner.h" @@ -32,7 +31,7 @@ // current code that relies on this API softness has been removed. // http://crbug.com/162712 if (!callback.is_null()) - callback.Run(CallbackForward(*result)); + callback.Run(std::move(*result)); } } // namespace internal
diff --git a/base/task_scheduler/priority_queue.cc b/base/task_scheduler/priority_queue.cc index 55eaf74..05a90b22 100644 --- a/base/task_scheduler/priority_queue.cc +++ b/base/task_scheduler/priority_queue.cc
@@ -23,20 +23,12 @@ PriorityQueue::SequenceAndSortKey::~SequenceAndSortKey() = default; PriorityQueue::Transaction::Transaction(PriorityQueue* outer_queue) - : auto_lock_(new AutoSchedulerLock(outer_queue->container_lock_)), - outer_queue_(outer_queue) { + : auto_lock_(outer_queue->container_lock_), outer_queue_(outer_queue) { DCHECK(CalledOnValidThread()); } PriorityQueue::Transaction::~Transaction() { DCHECK(CalledOnValidThread()); - - // Run the wake up callback once for each call to Push(). Perform this outside - // the scope of PriorityQueue's lock to avoid imposing an unnecessary lock - // dependency on the callback's destination. - auto_lock_.reset(); - for (size_t i = 0; i < num_wake_ups_; ++i) - outer_queue_->wake_up_callback_.Run(); } void PriorityQueue::Transaction::Push( @@ -44,16 +36,6 @@ DCHECK(CalledOnValidThread()); DCHECK(!sequence_and_sort_key->is_null()); - PushNoWakeUp(std::move(sequence_and_sort_key)); - - ++num_wake_ups_; -} - -void PriorityQueue::Transaction::PushNoWakeUp( - std::unique_ptr<SequenceAndSortKey> sequence_and_sort_key) { - DCHECK(CalledOnValidThread()); - DCHECK(!sequence_and_sort_key->is_null()); - outer_queue_->container_.push(std::move(sequence_and_sort_key)); } @@ -75,16 +57,10 @@ outer_queue_->container_.pop(); } -PriorityQueue::PriorityQueue(const Closure& wake_up_callback) - : wake_up_callback_(wake_up_callback) { - DCHECK(!wake_up_callback_.is_null()); -} +PriorityQueue::PriorityQueue() = default; -PriorityQueue::PriorityQueue(const Closure& wake_up_callback, - const PriorityQueue* predecessor_priority_queue) - : container_lock_(&predecessor_priority_queue->container_lock_), - wake_up_callback_(wake_up_callback) { - DCHECK(!wake_up_callback_.is_null()); +PriorityQueue::PriorityQueue(const PriorityQueue* predecessor_priority_queue) + : container_lock_(&predecessor_priority_queue->container_lock_) { DCHECK(predecessor_priority_queue); }
diff --git a/base/task_scheduler/priority_queue.h b/base/task_scheduler/priority_queue.h index 726c682..5333969d 100644 --- a/base/task_scheduler/priority_queue.h +++ b/base/task_scheduler/priority_queue.h
@@ -10,7 +10,6 @@ #include <vector> #include "base/base_export.h" -#include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/task_scheduler/scheduler_lock.h" @@ -56,16 +55,9 @@ public: ~Transaction(); - // Inserts |sequence_and_sort_key| in the PriorityQueue. Each call to this - // method will result in one invocation of the wake up callback when the - // Transaction is destroyed. + // Inserts |sequence_and_sort_key| in the PriorityQueue. void Push(std::unique_ptr<SequenceAndSortKey> sequence_and_sort_key); - // Inserts |sequence_and_sort_key| in the PriorityQueue without invoking the - // wake up callback. - void PushNoWakeUp( - std::unique_ptr<SequenceAndSortKey> sequence_and_sort_key); - // Returns the SequenceAndSortKey with the highest priority or a null // SequenceAndSortKey if the PriorityQueue is empty. The reference becomes // invalid the next time that a Sequence is popped from the PriorityQueue. @@ -80,32 +72,20 @@ explicit Transaction(PriorityQueue* outer_queue); - // Holds the lock of |outer_queue_| for most of the lifetime of this - // Transaction. Using a scoped_ptr allows the destructor to release the lock - // before performing internal operations which have to be done outside of - // its scope. - std::unique_ptr<AutoSchedulerLock> auto_lock_; + // Holds the lock of |outer_queue_| for the lifetime of this Transaction. + AutoSchedulerLock auto_lock_; PriorityQueue* const outer_queue_; - // Number of times that the wake up callback should be invoked when this - // Transaction is destroyed. - size_t num_wake_ups_ = 0; - DISALLOW_COPY_AND_ASSIGN(Transaction); }; - // |wake_up_callback| is a non-null callback invoked when a Transaction is - // done for each call to Push() on the Transaction. - explicit PriorityQueue(const Closure& wake_up_callback); + PriorityQueue(); - // |wake_up_callback| is a non-null callback invoked when a Transaction is - // done for each call to Push() on the Transaction. // |predecessor_priority_queue| is a PriorityQueue for which a thread is // allowed to have an active Transaction when it creates a Transaction for // this PriorityQueue. - PriorityQueue(const Closure& wake_up_callback, - const PriorityQueue* predecessor_priority_queue); + PriorityQueue(const PriorityQueue* predecessor_priority_queue); ~PriorityQueue(); @@ -132,8 +112,6 @@ ContainerType container_; - const Closure wake_up_callback_; - // A null SequenceAndSortKey returned by Peek() when the PriorityQueue is // empty. const SequenceAndSortKey empty_sequence_and_sort_key_;
diff --git a/base/task_scheduler/priority_queue_unittest.cc b/base/task_scheduler/priority_queue_unittest.cc index ff397fd..1396414 100644 --- a/base/task_scheduler/priority_queue_unittest.cc +++ b/base/task_scheduler/priority_queue_unittest.cc
@@ -6,8 +6,6 @@ #include <memory> -#include "base/bind.h" -#include "base/bind_helpers.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted.h" @@ -19,7 +17,6 @@ #include "base/threading/platform_thread.h" #include "base/threading/simple_thread.h" #include "base/time/time.h" -#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { @@ -27,15 +24,6 @@ namespace { -class PriorityQueueCallbackMock { - public: - PriorityQueueCallbackMock() = default; - MOCK_METHOD0(WakeUp, void()); - - private: - DISALLOW_COPY_AND_ASSIGN(PriorityQueueCallbackMock); -}; - class ThreadBeginningTransaction : public SimpleThread { public: explicit ThreadBeginningTransaction(PriorityQueue* priority_queue) @@ -108,10 +96,8 @@ SequenceSortKey sort_key_d = sequence_d->GetSortKey(); // Create a PriorityQueue and a Transaction. - testing::StrictMock<PriorityQueueCallbackMock> mock; - PriorityQueue pq(Bind(&PriorityQueueCallbackMock::WakeUp, Unretained(&mock))); - std::unique_ptr<PriorityQueue::Transaction> transaction( - pq.BeginTransaction()); + PriorityQueue pq; + auto transaction(pq.BeginTransaction()); EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(), transaction->Peek()); @@ -172,114 +158,13 @@ transaction->Pop(); EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(), transaction->Peek()); - - // Expect 4 calls to mock.WakeUp() when the Transaction is destroyed. - EXPECT_CALL(mock, WakeUp()).Times(4); - transaction.reset(); -} - -TEST(TaskSchedulerPriorityQueueTest, PushNoWakeUpPopPeek) { - // Create test sequences. - scoped_refptr<Sequence> sequence_a(new Sequence); - sequence_a->PushTask(WrapUnique( - new Task(FROM_HERE, Closure(), - TaskTraits().WithPriority(TaskPriority::USER_VISIBLE)))); - SequenceSortKey sort_key_a = sequence_a->GetSortKey(); - - scoped_refptr<Sequence> sequence_b(new Sequence); - sequence_b->PushTask(WrapUnique( - new Task(FROM_HERE, Closure(), - TaskTraits().WithPriority(TaskPriority::USER_BLOCKING)))); - SequenceSortKey sort_key_b = sequence_b->GetSortKey(); - - scoped_refptr<Sequence> sequence_c(new Sequence); - sequence_c->PushTask(WrapUnique( - new Task(FROM_HERE, Closure(), - TaskTraits().WithPriority(TaskPriority::USER_BLOCKING)))); - SequenceSortKey sort_key_c = sequence_c->GetSortKey(); - - scoped_refptr<Sequence> sequence_d(new Sequence); - sequence_d->PushTask(WrapUnique( - new Task(FROM_HERE, Closure(), - TaskTraits().WithPriority(TaskPriority::BACKGROUND)))); - SequenceSortKey sort_key_d = sequence_d->GetSortKey(); - - // Create a PriorityQueue and a Transaction. - testing::StrictMock<PriorityQueueCallbackMock> mock; - PriorityQueue pq(Bind(&PriorityQueueCallbackMock::WakeUp, Unretained(&mock))); - std::unique_ptr<PriorityQueue::Transaction> transaction( - pq.BeginTransaction()); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(), - transaction->Peek()); - - // Push |sequence_a| in the PriorityQueue. It becomes the sequence with the - // highest priority. - transaction->PushNoWakeUp(WrapUnique( - new PriorityQueue::SequenceAndSortKey(sequence_a, sort_key_a))); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_a, sort_key_a), - transaction->Peek()); - - // Push |sequence_b| in the PriorityQueue. It becomes the sequence with the - // highest priority. - transaction->PushNoWakeUp(WrapUnique( - new PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b))); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b), - transaction->Peek()); - - // Push |sequence_c| in the PriorityQueue. |sequence_b| is still the sequence - // with the highest priority. - transaction->PushNoWakeUp(WrapUnique( - new PriorityQueue::SequenceAndSortKey(sequence_c, sort_key_c))); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b), - transaction->Peek()); - - // Push |sequence_d| in the PriorityQueue. |sequence_b| is still the sequence - // with the highest priority. - transaction->PushNoWakeUp(WrapUnique( - new PriorityQueue::SequenceAndSortKey(sequence_d, sort_key_d))); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b), - transaction->Peek()); - - // Pop |sequence_b| from the PriorityQueue. |sequence_c| becomes the sequence - // with the highest priority. - transaction->Pop(); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_c, sort_key_c), - transaction->Peek()); - - // Pop |sequence_c| from the PriorityQueue. |sequence_a| becomes the sequence - // with the highest priority. - transaction->Pop(); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_a, sort_key_a), - transaction->Peek()); - - // Pop |sequence_a| from the PriorityQueue. |sequence_d| becomes the sequence - // with the highest priority. - transaction->Pop(); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ( - PriorityQueue::SequenceAndSortKey(sequence_d, sort_key_d), - transaction->Peek()); - - // Pop |sequence_d| from the PriorityQueue. It is now empty. - transaction->Pop(); - EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(), - transaction->Peek()); - - // Expect no call to mock.WakeUp() when the Transaction is destroyed. - EXPECT_CALL(mock, WakeUp()).Times(0); - transaction.reset(); } // Check that creating Transactions on the same thread for 2 unrelated // PriorityQueues causes a crash. TEST(TaskSchedulerPriorityQueueTest, IllegalTwoTransactionsSameThread) { - PriorityQueue pq_a(Bind(&DoNothing)); - PriorityQueue pq_b(Bind(&DoNothing)); + PriorityQueue pq_a; + PriorityQueue pq_b; EXPECT_DCHECK_DEATH( { @@ -294,8 +179,8 @@ // Check that there is no crash when Transactions are created on the same thread // for 2 PriorityQueues which have a predecessor relationship. TEST(TaskSchedulerPriorityQueueTest, LegalTwoTransactionsSameThread) { - PriorityQueue pq_a(Bind(&DoNothing)); - PriorityQueue pq_b(Bind(&DoNothing), &pq_a); + PriorityQueue pq_a; + PriorityQueue pq_b(&pq_a); // This shouldn't crash. std::unique_ptr<PriorityQueue::Transaction> transaction_a = @@ -309,7 +194,7 @@ // second thread should block until the Transaction has ended on the first // thread. TEST(TaskSchedulerPriorityQueueTest, TwoTransactionsTwoThreads) { - PriorityQueue pq(Bind(&DoNothing)); + PriorityQueue pq; // Call BeginTransaction() on this thread and keep the Transaction alive. std::unique_ptr<PriorityQueue::Transaction> transaction = @@ -333,10 +218,10 @@ TEST(TaskSchedulerPriorityQueueTest, SequenceAndSortKeyIsNull) { EXPECT_TRUE(PriorityQueue::SequenceAndSortKey().is_null()); - const PriorityQueue::SequenceAndSortKey non_null_sequence_andsort_key( + const PriorityQueue::SequenceAndSortKey non_null_sequence_and_sort_key( make_scoped_refptr(new Sequence), SequenceSortKey(TaskPriority::USER_VISIBLE, TimeTicks())); - EXPECT_FALSE(non_null_sequence_andsort_key.is_null()); + EXPECT_FALSE(non_null_sequence_and_sort_key.is_null()); } } // namespace internal
diff --git a/base/task_scheduler/task_traits.cc b/base/task_scheduler/task_traits.cc index 5a09064..7eddc15 100644 --- a/base/task_scheduler/task_traits.cc +++ b/base/task_scheduler/task_traits.cc
@@ -14,7 +14,7 @@ TaskTraits::TaskTraits() : with_file_io_(false), priority_(TaskPriority::BACKGROUND), - shutdown_behavior_(TaskShutdownBehavior::BLOCK_SHUTDOWN) {} + shutdown_behavior_(TaskShutdownBehavior::SKIP_ON_SHUTDOWN) {} TaskTraits::~TaskTraits() = default;
diff --git a/base/trace_event/heap_profiler_allocation_context.h b/base/trace_event/heap_profiler_allocation_context.h index 8544c78e..98d83518 100644 --- a/base/trace_event/heap_profiler_allocation_context.h +++ b/base/trace_event/heap_profiler_allocation_context.h
@@ -45,6 +45,12 @@ StackFrame frames[12]; }; +// Struct to store the size and count of the allocations. +struct AllocationMetrics { + size_t size; + size_t count; +}; + bool BASE_EXPORT operator==(const Backtrace& lhs, const Backtrace& rhs); // The |AllocationContext| is context metadata that is kept for every allocation
diff --git a/base/trace_event/heap_profiler_heap_dump_writer.cc b/base/trace_event/heap_profiler_heap_dump_writer.cc index 7ad401b..9a3112ea 100644 --- a/base/trace_event/heap_profiler_heap_dump_writer.cc +++ b/base/trace_event/heap_profiler_heap_dump_writer.cc
@@ -41,13 +41,21 @@ // A group of bytes for which the context shares a prefix. struct Bucket { - Bucket() : size(0), backtrace_cursor(0), is_broken_down_by_type_name(false) {} + Bucket() + : size(0), + count(0), + backtrace_cursor(0), + is_broken_down_by_type_name(false) {} - std::vector<std::pair<const AllocationContext*, size_t>> bytes_by_context; + std::vector<std::pair<const AllocationContext*, AllocationMetrics>> + metrics_by_context; - // The sum of the sizes of |bytes_by_context|. + // The sum of the sizes of |metrics_by_context|. size_t size; + // The sum of number of allocations of |metrics_by_context|. + size_t count; + // The index of the stack frame that has not yet been broken down by. For all // elements in this bucket, the stack frames 0 up to (but not including) the // cursor, must be equal. @@ -69,8 +77,8 @@ base::hash_map<const char*, Bucket> breakdown; if (breakBy == BreakDownMode::kByBacktrace) { - for (const auto& context_and_size : bucket.bytes_by_context) { - const Backtrace& backtrace = context_and_size.first->backtrace; + for (const auto& context_and_metrics : bucket.metrics_by_context) { + const Backtrace& backtrace = context_and_metrics.first->backtrace; const char* const* begin = std::begin(backtrace.frames); const char* const* end = std::end(backtrace.frames); const char* const* cursor = begin + bucket.backtrace_cursor; @@ -85,24 +93,28 @@ if (cursor != end) { Bucket& subbucket = breakdown[*cursor]; - subbucket.size += context_and_size.second; - subbucket.bytes_by_context.push_back(context_and_size); + subbucket.size += context_and_metrics.second.size; + subbucket.count += context_and_metrics.second.count; + subbucket.metrics_by_context.push_back(context_and_metrics); subbucket.backtrace_cursor = bucket.backtrace_cursor + 1; subbucket.is_broken_down_by_type_name = bucket.is_broken_down_by_type_name; DCHECK_GT(subbucket.size, 0u); + DCHECK_GT(subbucket.count, 0u); } } } else if (breakBy == BreakDownMode::kByTypeName) { if (!bucket.is_broken_down_by_type_name) { - for (const auto& context_and_size : bucket.bytes_by_context) { - const AllocationContext* context = context_and_size.first; + for (const auto& context_and_metrics : bucket.metrics_by_context) { + const AllocationContext* context = context_and_metrics.first; Bucket& subbucket = breakdown[context->type_name]; - subbucket.size += context_and_size.second; - subbucket.bytes_by_context.push_back(context_and_size); + subbucket.size += context_and_metrics.second.size; + subbucket.count += context_and_metrics.second.count; + subbucket.metrics_by_context.push_back(context_and_metrics); subbucket.backtrace_cursor = bucket.backtrace_cursor; subbucket.is_broken_down_by_type_name = true; DCHECK_GT(subbucket.size, 0u); + DCHECK_GT(subbucket.count, 0u); } } } @@ -179,9 +191,9 @@ // The contexts in the bucket are all different, but the [begin, cursor) range // is equal for all contexts in the bucket, and the type names are the same if // |is_broken_down_by_type_name| is set. - DCHECK(!bucket.bytes_by_context.empty()); + DCHECK(!bucket.metrics_by_context.empty()); - const AllocationContext* context = bucket.bytes_by_context.front().first; + const AllocationContext* context = bucket.metrics_by_context.front().first; const char* const* backtrace_begin = std::begin(context->backtrace.frames); const char* const* backtrace_end = backtrace_begin + bucket.backtrace_cursor; @@ -197,6 +209,7 @@ : -1; entry.size = bucket.size; + entry.count = bucket.count; auto position_and_inserted = entries_.insert(entry); return position_and_inserted.second; @@ -222,17 +235,19 @@ } const std::set<Entry>& HeapDumpWriter::Summarize( - const hash_map<AllocationContext, size_t>& bytes_by_context) { + const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context) { // Start with one bucket that represents the entire heap. Iterate by // reference, because the allocation contexts are going to point to allocation - // contexts stored in |bytes_by_context|. + // contexts stored in |metrics_by_context|. Bucket root_bucket; - for (const auto& context_and_size : bytes_by_context) { - DCHECK_GT(context_and_size.second, 0u); - const AllocationContext* context = &context_and_size.first; - const size_t size = context_and_size.second; - root_bucket.bytes_by_context.push_back(std::make_pair(context, size)); - root_bucket.size += size; + for (const auto& context_and_metrics : metrics_by_context) { + DCHECK_GT(context_and_metrics.second.size, 0u); + DCHECK_GT(context_and_metrics.second.count, 0u); + const AllocationContext* context = &context_and_metrics.first; + root_bucket.metrics_by_context.push_back( + std::make_pair(context, context_and_metrics.second)); + root_bucket.size += context_and_metrics.second.size; + root_bucket.count += context_and_metrics.second.count; } AddEntryForBucket(root_bucket); @@ -256,6 +271,9 @@ SStringPrintf(&buffer, "%" PRIx64, static_cast<uint64_t>(entry.size)); traced_value->SetString("size", buffer); + SStringPrintf(&buffer, "%" PRIx64, static_cast<uint64_t>(entry.count)); + traced_value->SetString("count", buffer); + if (entry.stack_frame_id == -1) { // An empty backtrace (which will have ID -1) is represented by the empty // string, because there is no leaf frame to reference in |stackFrames|. @@ -285,12 +303,12 @@ } // namespace internal std::unique_ptr<TracedValue> ExportHeapDump( - const hash_map<AllocationContext, size_t>& bytes_by_size, + const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context, StackFrameDeduplicator* stack_frame_deduplicator, TypeNameDeduplicator* type_name_deduplicator) { internal::HeapDumpWriter writer(stack_frame_deduplicator, type_name_deduplicator); - return Serialize(writer.Summarize(bytes_by_size)); + return Serialize(writer.Summarize(metrics_by_context)); } } // namespace trace_event
diff --git a/base/trace_event/heap_profiler_heap_dump_writer.h b/base/trace_event/heap_profiler_heap_dump_writer.h index fa24b2b..88fb86f 100644 --- a/base/trace_event/heap_profiler_heap_dump_writer.h +++ b/base/trace_event/heap_profiler_heap_dump_writer.h
@@ -22,12 +22,12 @@ class TracedValue; class TypeNameDeduplicator; -// Aggregates |bytes_by_context|, recursively breaks down the heap, and returns -// a traced value with an "entries" array that can be dumped in the trace log, -// following the format described in https://goo.gl/KY7zVE. The number of -// entries is kept reasonable because long tails are not included. +// Aggregates |metrics_by_context|, recursively breaks down the heap, and +// returns a traced value with an "entries" array that can be dumped in the +// trace log, following the format described in https://goo.gl/KY7zVE. The +// number of entries is kept reasonable because long tails are not included. BASE_EXPORT std::unique_ptr<TracedValue> ExportHeapDump( - const hash_map<AllocationContext, size_t>& bytes_by_context, + const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context, StackFrameDeduplicator* stack_frame_deduplicator, TypeNameDeduplicator* type_name_deduplicator); @@ -40,6 +40,7 @@ // An entry in the "entries" array as described in https://goo.gl/KY7zVE. struct BASE_EXPORT Entry { size_t size; + size_t count; // References a backtrace in the stack frame deduplicator. -1 means empty // backtrace (the root of the tree). @@ -74,7 +75,7 @@ // in the "entries" array. The number of entries is kept reasonable because // long tails are not included. Use |Serialize| to convert to a traced value. const std::set<Entry>& Summarize( - const hash_map<AllocationContext, size_t>& bytes_by_context); + const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context); private: // Inserts an |Entry| for |Bucket| into |entries_|. Returns false if the
diff --git a/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc b/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc index 894de69..8faa5cf 100644 --- a/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc +++ b/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc
@@ -68,11 +68,11 @@ } // Given a desired stack frame ID and type ID, looks up the entry in the set and -// asserts that it is present and has the expected size. -void AssertSizeEq(const std::set<Entry>& entries, - int stack_frame_id, - int type_id, - size_t expected_size) { +// asserts that it is present and has the expected size and count. +void AssertSizeAndCountEq(const std::set<Entry>& entries, + int stack_frame_id, + int type_id, + const AllocationMetrics& expected) { // The comparison operator for |Entry| does not take size into account, so by // setting only stack frame ID and type ID, the real entry can be found. Entry entry; @@ -82,8 +82,11 @@ ASSERT_NE(entries.end(), it) << "No entry found for sf = " << stack_frame_id << ", type = " << type_id << "."; - ASSERT_EQ(expected_size, it->size) << "Wrong size for sf = " << stack_frame_id + ASSERT_EQ(expected.size, it->size) << "Wrong size for sf = " << stack_frame_id << ", type = " << type_id << "."; + ASSERT_EQ(expected.count, it->count) + << "Wrong count for sf = " << stack_frame_id << ", type = " << type_id + << "."; } // Given a desired stack frame ID and type ID, asserts that no entry was dumped @@ -107,6 +110,7 @@ entry.stack_frame_id = -1; // -1 means empty backtrace. entry.type_id = 0; entry.size = 1; + entry.count = 1; std::unique_ptr<const DictionaryValue> json_entry = WriteAndReadBackEntry(entry); @@ -129,6 +133,7 @@ entry.type_id = -1; // -1 means sum over all types. entry.stack_frame_id = 0; entry.size = 1; + entry.count = 1; std::unique_ptr<const DictionaryValue> json_entry = WriteAndReadBackEntry(entry); @@ -145,7 +150,7 @@ ASSERT_EQ("2", type_id); } -TEST(HeapDumpWriterTest, SizeIsHexadecimalString) { +TEST(HeapDumpWriterTest, SizeAndCountAreHexadecimal) { // Take a number between 2^63 and 2^64 (or between 2^31 and 2^32 if |size_t| // is not 64 bits). const size_t large_value = @@ -156,6 +161,7 @@ entry.type_id = 0; entry.stack_frame_id = 0; entry.size = large_value; + entry.count = large_value; std::unique_ptr<const DictionaryValue> json_entry = WriteAndReadBackEntry(entry); @@ -163,10 +169,14 @@ std::string size; ASSERT_TRUE(json_entry->GetString("size", &size)); ASSERT_EQ(large_value_str, size); + + std::string count; + ASSERT_TRUE(json_entry->GetString("count", &count)); + ASSERT_EQ(large_value_str, count); } TEST(HeapDumpWriterTest, BacktraceTypeNameTable) { - hash_map<AllocationContext, size_t> bytes_by_context; + hash_map<AllocationContext, AllocationMetrics> metrics_by_context; AllocationContext ctx = AllocationContext::Empty(); ctx.backtrace.frames[0] = kBrowserMain; @@ -174,38 +184,39 @@ ctx.type_name = kInt; // 10 bytes with context { type: int, bt: [BrowserMain, CreateWidget] }. - bytes_by_context[ctx] = 10; + metrics_by_context[ctx] = {10, 5}; ctx.type_name = kBool; // 18 bytes with context { type: bool, bt: [BrowserMain, CreateWidget] }. - bytes_by_context[ctx] = 18; + metrics_by_context[ctx] = {18, 18}; ctx.backtrace.frames[0] = kRendererMain; ctx.backtrace.frames[1] = kInitialize; // 30 bytes with context { type: bool, bt: [RendererMain, Initialize] }. - bytes_by_context[ctx] = 30; + metrics_by_context[ctx] = {30, 30}; ctx.type_name = kString; // 19 bytes with context { type: string, bt: [RendererMain, Initialize] }. - bytes_by_context[ctx] = 19; + metrics_by_context[ctx] = {19, 4}; // At this point the heap looks like this: // - // | | CrWidget <- BrMain | Init <- RenMain | Sum | - // +--------+--------------------+-----------------+-----+ - // | int | 10 | 0 | 10 | - // | bool | 18 | 30 | 48 | - // | string | 0 | 19 | 19 | - // +--------+--------------------+-----------------+-----+ - // | Sum | 28 | 49 | 77 | + // | | CrWidget <- BrMain | Init <- RenMain | Sum | + // +--------+--------------------+-----------------+-------------+ + // | | size count | size count | size count | + // | int | 10 5 | 0 0 | 10 5 | + // | bool | 18 18 | 30 30 | 48 48 | + // | string | 0 0 | 19 4 | 19 4 | + // +--------+--------------------+-----------------+-------------+ + // | Sum | 28 23 | 49 34 | 77 57 | auto sf_deduplicator = WrapUnique(new StackFrameDeduplicator); auto tn_deduplicator = WrapUnique(new TypeNameDeduplicator); HeapDumpWriter writer(sf_deduplicator.get(), tn_deduplicator.get()); - const std::set<Entry>& dump = writer.Summarize(bytes_by_context); + const std::set<Entry>& dump = writer.Summarize(metrics_by_context); // Get the indices of the backtraces and types by adding them again to the // deduplicator. Because they were added before, the same number is returned. @@ -220,57 +231,61 @@ int type_id_string = tn_deduplicator->Insert(kString); // Full heap should have size 77. - AssertSizeEq(dump, -1, -1, 77); + AssertSizeAndCountEq(dump, -1, -1, {77, 57}); - // 49 bytes were allocated in RendererMain and children. Also check the type - // breakdown. - AssertSizeEq(dump, bt_renderer_main, -1, 49); - AssertSizeEq(dump, bt_renderer_main, type_id_bool, 30); - AssertSizeEq(dump, bt_renderer_main, type_id_string, 19); + // 49 bytes in 34 chunks were allocated in RendererMain and children. Also + // check the type breakdown. + AssertSizeAndCountEq(dump, bt_renderer_main, -1, {49, 34}); + AssertSizeAndCountEq(dump, bt_renderer_main, type_id_bool, {30, 30}); + AssertSizeAndCountEq(dump, bt_renderer_main, type_id_string, {19, 4}); - // 28 bytes were allocated in BrowserMain and children. Also check the type - // breakdown. - AssertSizeEq(dump, bt_browser_main, -1, 28); - AssertSizeEq(dump, bt_browser_main, type_id_int, 10); - AssertSizeEq(dump, bt_browser_main, type_id_bool, 18); + // 28 bytes in 23 chunks were allocated in BrowserMain and children. Also + // check the type breakdown. + AssertSizeAndCountEq(dump, bt_browser_main, -1, {28, 23}); + AssertSizeAndCountEq(dump, bt_browser_main, type_id_int, {10, 5}); + AssertSizeAndCountEq(dump, bt_browser_main, type_id_bool, {18, 18}); // In this test all bytes are allocated in leaf nodes, so check again one // level deeper. - AssertSizeEq(dump, bt_renderer_main_initialize, -1, 49); - AssertSizeEq(dump, bt_renderer_main_initialize, type_id_bool, 30); - AssertSizeEq(dump, bt_renderer_main_initialize, type_id_string, 19); - AssertSizeEq(dump, bt_browser_main_create_widget, -1, 28); - AssertSizeEq(dump, bt_browser_main_create_widget, type_id_int, 10); - AssertSizeEq(dump, bt_browser_main_create_widget, type_id_bool, 18); + AssertSizeAndCountEq(dump, bt_renderer_main_initialize, -1, {49, 34}); + AssertSizeAndCountEq(dump, bt_renderer_main_initialize, type_id_bool, + {30, 30}); + AssertSizeAndCountEq(dump, bt_renderer_main_initialize, type_id_string, + {19, 4}); + AssertSizeAndCountEq(dump, bt_browser_main_create_widget, -1, {28, 23}); + AssertSizeAndCountEq(dump, bt_browser_main_create_widget, type_id_int, + {10, 5}); + AssertSizeAndCountEq(dump, bt_browser_main_create_widget, type_id_bool, + {18, 18}); // The type breakdown of the entrie heap should have been dumped as well. - AssertSizeEq(dump, -1, type_id_int, 10); - AssertSizeEq(dump, -1, type_id_bool, 48); - AssertSizeEq(dump, -1, type_id_string, 19); + AssertSizeAndCountEq(dump, -1, type_id_int, {10, 5}); + AssertSizeAndCountEq(dump, -1, type_id_bool, {48, 48}); + AssertSizeAndCountEq(dump, -1, type_id_string, {19, 4}); } TEST(HeapDumpWriterTest, InsignificantValuesNotDumped) { - hash_map<AllocationContext, size_t> bytes_by_context; + hash_map<AllocationContext, AllocationMetrics> metrics_by_context; AllocationContext ctx = AllocationContext::Empty(); ctx.backtrace.frames[0] = kBrowserMain; ctx.backtrace.frames[1] = kCreateWidget; - // 0.5a KiB in BrowserMain -> CreateWidget itself. - bytes_by_context[ctx] = 512; + // 0.5 KiB and 1 chunk in BrowserMain -> CreateWidget itself. + metrics_by_context[ctx] = {512, 1}; - // 1 MiB in BrowserMain -> CreateWidget -> GetBitmap. + // 1 MiB and 1 chunk in BrowserMain -> CreateWidget -> GetBitmap. ctx.backtrace.frames[2] = kGetBitmap; - bytes_by_context[ctx] = 1024 * 1024; + metrics_by_context[ctx] = {1024 * 1024, 1}; - // 0.5 KiB in BrowserMain -> CreateWidget -> Initialize. + // 0.5 KiB and 1 chunk in BrowserMain -> CreateWidget -> Initialize. ctx.backtrace.frames[2] = kInitialize; - bytes_by_context[ctx] = 512; + metrics_by_context[ctx] = {512, 1}; auto sf_deduplicator = WrapUnique(new StackFrameDeduplicator); auto tn_deduplicator = WrapUnique(new TypeNameDeduplicator); HeapDumpWriter writer(sf_deduplicator.get(), tn_deduplicator.get()); - const std::set<Entry>& dump = writer.Summarize(bytes_by_context); + const std::set<Entry>& dump = writer.Summarize(metrics_by_context); // Get the indices of the backtraces and types by adding them again to the // deduplicator. Because they were added before, the same number is returned. @@ -281,17 +296,19 @@ int bt_get_bitmap = sf_deduplicator->Insert(bt0, bt0 + 3); int bt_initialize = sf_deduplicator->Insert(bt1, bt1 + 3); - // Full heap should have size of 1 MiB + 1 KiB. - AssertSizeEq(dump, -1, -1 /* No type specified */, 1024 * 1024 + 512 + 512); + // Full heap should have size of 1 MiB + 1 KiB and 3 chunks. + AssertSizeAndCountEq(dump, -1, -1 /* No type specified */, + {1024 * 1024 + 512 + 512, 3}); - // |GetBitmap| allocated 1 MiB. - AssertSizeEq(dump, bt_get_bitmap, -1, 1024 * 1024); + // |GetBitmap| allocated 1 MiB and 1 chunk. + AssertSizeAndCountEq(dump, bt_get_bitmap, -1, {1024 * 1024, 1}); // Because |GetBitmap| was dumped, all of its parent nodes should have been // dumped too. |CreateWidget| has 1 MiB in |GetBitmap|, 512 bytes in - // |Initialize|, and 512 bytes of its own. - AssertSizeEq(dump, bt_create_widget, -1, 1024 * 1024 + 512 + 512); - AssertSizeEq(dump, bt_browser_main, -1, 1024 * 1024 + 512 + 512); + // |Initialize|, and 512 bytes of its own and each in 1 chunk. + AssertSizeAndCountEq(dump, bt_create_widget, -1, + {1024 * 1024 + 512 + 512, 3}); + AssertSizeAndCountEq(dump, bt_browser_main, -1, {1024 * 1024 + 512 + 512, 3}); // Initialize was not significant, it should not have been dumped. AssertNotDumped(dump, bt_initialize, -1);
diff --git a/base/trace_event/malloc_dump_provider.cc b/base/trace_event/malloc_dump_provider.cc index 17e5c1e..be6efc8 100644 --- a/base/trace_event/malloc_dump_provider.cc +++ b/base/trace_event/malloc_dump_provider.cc
@@ -178,21 +178,24 @@ // profiler does not see unabalanced malloc/free calls from these containers. { TraceEventMemoryOverhead overhead; - hash_map<AllocationContext, size_t> bytes_by_context; + hash_map<AllocationContext, AllocationMetrics> metrics_by_context; { AutoLock lock(allocation_register_lock_); if (allocation_register_) { if (args.level_of_detail == MemoryDumpLevelOfDetail::DETAILED) { - for (const auto& alloc_size : *allocation_register_) - bytes_by_context[alloc_size.context] += alloc_size.size; + for (const auto& alloc_size : *allocation_register_) { + AllocationMetrics& metrics = metrics_by_context[alloc_size.context]; + metrics.size += alloc_size.size; + metrics.count++; + } } allocation_register_->EstimateTraceMemoryOverhead(&overhead); } } // lock(allocation_register_lock_) - if (!bytes_by_context.empty()) { + if (!metrics_by_context.empty()) { std::unique_ptr<TracedValue> heap_dump = ExportHeapDump( - bytes_by_context, pmd->session_state()->stack_frame_deduplicator(), + metrics_by_context, pmd->session_state()->stack_frame_deduplicator(), pmd->session_state()->type_name_deduplicator()); pmd->AddHeapDump("malloc", std::move(heap_dump)); }
diff --git a/base/win/wait_chain.cc b/base/win/wait_chain.cc new file mode 100644 index 0000000..3570617 --- /dev/null +++ b/base/win/wait_chain.cc
@@ -0,0 +1,135 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/win/wait_chain.h" + +#include <memory> + +#include "base/logging.h" +#include "base/strings/stringprintf.h" + +namespace base { +namespace win { + +namespace { + +// Helper deleter to hold a HWCT into a unique_ptr. +struct WaitChainSessionDeleter { + using pointer = HWCT; + void operator()(HWCT session_handle) const { + ::CloseThreadWaitChainSession(session_handle); + } +}; + +using ScopedWaitChainSessionHandle = + std::unique_ptr<HWCT, WaitChainSessionDeleter>; + +const wchar_t* WctObjectTypeToString(WCT_OBJECT_TYPE type) { + switch (type) { + case WctCriticalSectionType: + return L"CriticalSection"; + case WctSendMessageType: + return L"SendMessage"; + case WctMutexType: + return L"Mutex"; + case WctAlpcType: + return L"Alpc"; + case WctComType: + return L"Com"; + case WctThreadWaitType: + return L"ThreadWait"; + case WctProcessWaitType: + return L"ProcessWait"; + case WctThreadType: + return L"Thread"; + case WctComActivationType: + return L"ComActivation"; + case WctUnknownType: + return L"Unknown"; + case WctSocketIoType: + return L"SocketIo"; + case WctSmbIoType: + return L"SmbIo"; + case WctMaxType: + break; + } + NOTREACHED(); + return L""; +} + +const wchar_t* WctObjectStatusToString(WCT_OBJECT_STATUS status) { + switch (status) { + case WctStatusNoAccess: + return L"NoAccess"; + case WctStatusRunning: + return L"Running"; + case WctStatusBlocked: + return L"Blocked"; + case WctStatusPidOnly: + return L"PidOnly"; + case WctStatusPidOnlyRpcss: + return L"PidOnlyRpcss"; + case WctStatusOwned: + return L"Owned"; + case WctStatusNotOwned: + return L"NotOwned"; + case WctStatusAbandoned: + return L"Abandoned"; + case WctStatusUnknown: + return L"Unknown"; + case WctStatusError: + return L"Error"; + case WctStatusMax: + break; + } + NOTREACHED(); + return L""; +} + +} // namespace + +bool GetThreadWaitChain(DWORD thread_id, + WaitChainNodeVector* wait_chain, + bool* is_deadlock) { + DCHECK(wait_chain); + DCHECK(is_deadlock); + + // Open a synchronous session. + ScopedWaitChainSessionHandle session_handle( + ::OpenThreadWaitChainSession(0, nullptr)); + if (!session_handle) { + DPLOG(ERROR) << "Failed to create the Wait Chain session"; + return false; + } + + DWORD nb_nodes = WCT_MAX_NODE_COUNT; + wait_chain->resize(nb_nodes); + BOOL is_cycle; + if (!::GetThreadWaitChain(session_handle.get(), NULL, 0, thread_id, &nb_nodes, + wait_chain->data(), &is_cycle)) { + DPLOG(ERROR) << "Failed to get the thread wait chain"; + return false; + } + + *is_deadlock = is_cycle ? true : false; + wait_chain->resize(nb_nodes); + + return true; +} + +base::string16 WaitChainNodeToString(const WAITCHAIN_NODE_INFO& node) { + if (node.ObjectType == WctThreadType) { + return base::StringPrintf(L"Thread %d in process %d with status %ls", + node.ThreadObject.ThreadId, + node.ThreadObject.ProcessId, + WctObjectStatusToString(node.ObjectStatus)); + } else { + return base::StringPrintf(L"Lock of type %ls with status %ls", + WctObjectTypeToString(node.ObjectType), + WctObjectStatusToString(node.ObjectStatus)); + } +} + +} // namespace win +} // namespace base
diff --git a/base/win/wait_chain.h b/base/win/wait_chain.h new file mode 100644 index 0000000..4cd7355 --- /dev/null +++ b/base/win/wait_chain.h
@@ -0,0 +1,37 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_WIN_WAIT_CHAIN_H_ +#define BASE_WIN_WAIT_CHAIN_H_ + +#include <windows.h> +#include <wct.h> + +#include <vector> + +#include "base/strings/string16.h" + +namespace base { +namespace win { + +using WaitChainNodeVector = std::vector<WAITCHAIN_NODE_INFO>; + +// Gets the wait chain for |thread_id|. Also specifies if the |wait_chain| +// contains a deadlock. Returns true on success. +// +// From MSDN: A wait chain is an alternating sequence of threads and +// synchronization objects; each thread waits for the object that follows it, +// which is owned by the subsequent thread in the chain. +BASE_EXPORT bool GetThreadWaitChain(DWORD thread_id, + WaitChainNodeVector* wait_chain, + bool* is_deadlock); + +// Returns a string that represents the node for a wait chain. +BASE_EXPORT base::string16 WaitChainNodeToString( + const WAITCHAIN_NODE_INFO& node); + +} // namespace win +} // namespace base + +#endif // BASE_WIN_WAIT_CHAIN_H_
diff --git a/base/win/wait_chain_unittest.cc b/base/win/wait_chain_unittest.cc new file mode 100644 index 0000000..3362a10 --- /dev/null +++ b/base/win/wait_chain_unittest.cc
@@ -0,0 +1,318 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/win/wait_chain.h" + +#include <memory> +#include <string> + +#include "base/bind.h" +#include "base/command_line.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_piece.h" +#include "base/test/multiprocess_test.h" +#include "base/threading/simple_thread.h" +#include "base/win/win_util.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/multiprocess_func_list.h" + +namespace base { +namespace win { + +namespace { + +// Appends |handle| as a command line switch. +void AppendSwitchHandle(CommandLine* command_line, + StringPiece switch_name, + HANDLE handle) { + command_line->AppendSwitchASCII(switch_name.as_string(), + UintToString(HandleToUint32(handle))); +} + +// Retrieves the |handle| associated to |switch_name| from the command line. +ScopedHandle GetSwitchValueHandle(CommandLine* command_line, + StringPiece switch_name) { + std::string switch_string = + command_line->GetSwitchValueASCII(switch_name.as_string()); + unsigned int switch_uint = 0; + if (switch_string.empty() || !StringToUint(switch_string, &switch_uint)) { + DLOG(ERROR) << "Missing or invalid " << switch_name << " argument."; + return ScopedHandle(); + } + return ScopedHandle(reinterpret_cast<HANDLE>(switch_uint)); +} + +// Helper function to create a mutex. +ScopedHandle CreateMutex(bool inheritable) { + SECURITY_ATTRIBUTES security_attributes = {sizeof(SECURITY_ATTRIBUTES), + nullptr, inheritable}; + return ScopedHandle(::CreateMutex(&security_attributes, FALSE, NULL)); +} + +// Helper function to create an event. +ScopedHandle CreateEvent(bool inheritable) { + SECURITY_ATTRIBUTES security_attributes = {sizeof(SECURITY_ATTRIBUTES), + nullptr, inheritable}; + return ScopedHandle( + ::CreateEvent(&security_attributes, FALSE, FALSE, nullptr)); +} + +// Helper thread class that runs the callback then stops. +class SingleTaskThread : public SimpleThread { + public: + explicit SingleTaskThread(const Closure& task) + : SimpleThread("WaitChainTest SingleTaskThread"), task_(task) {} + + void Run() override { task_.Run(); } + + private: + Closure task_; + + DISALLOW_COPY_AND_ASSIGN(SingleTaskThread); +}; + +// Helper thread to cause a deadlock by acquiring 2 mutexes in a given order. +class DeadlockThread : public SimpleThread { + public: + DeadlockThread(HANDLE mutex_1, HANDLE mutex_2) + : SimpleThread("WaitChainTest DeadlockThread"), + wait_event_(CreateEvent(false)), + mutex_acquired_event_(CreateEvent(false)), + mutex_1_(mutex_1), + mutex_2_(mutex_2) {} + + void Run() override { + // Acquire the mutex then signal the main thread. + EXPECT_EQ(WAIT_OBJECT_0, ::WaitForSingleObject(mutex_1_, INFINITE)); + EXPECT_TRUE(::SetEvent(mutex_acquired_event_.Get())); + + // Wait until both threads are holding their mutex before trying to acquire + // the other one. + EXPECT_EQ(WAIT_OBJECT_0, + ::WaitForSingleObject(wait_event_.Get(), INFINITE)); + + // To unblock the deadlock, one of the threads will get terminated (via + // TerminateThread()) without releasing the mutex. This causes the other + // thread to wake up with WAIT_ABANDONED. + EXPECT_EQ(WAIT_ABANDONED, ::WaitForSingleObject(mutex_2_, INFINITE)); + } + + // Blocks until a mutex is acquired. + void WaitForMutexAcquired() { + EXPECT_EQ(WAIT_OBJECT_0, + ::WaitForSingleObject(mutex_acquired_event_.Get(), INFINITE)); + } + + // Signal the thread to acquire the second mutex. + void SignalToAcquireMutex() { EXPECT_TRUE(::SetEvent(wait_event_.Get())); } + + // Terminates the thread. + bool Terminate() { + ScopedHandle thread_handle(::OpenThread(THREAD_TERMINATE, FALSE, tid())); + return ::TerminateThread(thread_handle.Get(), 0); + } + + private: + ScopedHandle wait_event_; + ScopedHandle mutex_acquired_event_; + + // The 2 mutex to acquire. + HANDLE mutex_1_; + HANDLE mutex_2_; + + DISALLOW_COPY_AND_ASSIGN(DeadlockThread); +}; + +// Creates a thread that joins |thread_to_join| and then terminates when it +// finishes execution. +std::unique_ptr<SingleTaskThread> CreateJoiningThread( + SimpleThread* thread_to_join) { + std::unique_ptr<SingleTaskThread> thread(new SingleTaskThread( + Bind(&SimpleThread::Join, Unretained(thread_to_join)))); + thread->Start(); + + return thread; +} + +// Creates a thread that calls WaitForSingleObject() on the handle and then +// terminates when it unblocks. +std::unique_ptr<SingleTaskThread> CreateWaitingThread(HANDLE handle) { + std::unique_ptr<SingleTaskThread> thread(new SingleTaskThread( + Bind(IgnoreResult(&::WaitForSingleObject), handle, INFINITE))); + thread->Start(); + + return thread; +} + +// Creates a thread that blocks on |mutex_2| after acquiring |mutex_1|. +std::unique_ptr<DeadlockThread> CreateDeadlockThread(HANDLE mutex_1, + HANDLE mutex_2) { + std::unique_ptr<DeadlockThread> thread(new DeadlockThread(mutex_1, mutex_2)); + thread->Start(); + + // Wait until the first mutex is acquired before returning. + thread->WaitForMutexAcquired(); + + return thread; +} + +// Child process to test the cross-process capability of the WCT api. +// This process will simulate a hang while holding a mutex that the parent +// process is waiting on. +MULTIPROCESS_TEST_MAIN(WaitChainTestProc) { + CommandLine* command_line = CommandLine::ForCurrentProcess(); + + ScopedHandle mutex = GetSwitchValueHandle(command_line, "mutex"); + CHECK(mutex.IsValid()); + + ScopedHandle sync_event(GetSwitchValueHandle(command_line, "sync_event")); + CHECK(sync_event.IsValid()); + + // Acquire mutex. + CHECK(::WaitForSingleObject(mutex.Get(), INFINITE) == WAIT_OBJECT_0); + + // Signal back to the parent process that the mutex is hold. + CHECK(::SetEvent(sync_event.Get())); + + // Wait on a signal from the parent process before terminating. + CHECK(::WaitForSingleObject(sync_event.Get(), INFINITE) == WAIT_OBJECT_0); + + return 0; +} + +// Start a child process and passes the |mutex| and the |sync_event| to the +// command line. +Process StartChildProcess(HANDLE mutex, HANDLE sync_event) { + CommandLine command_line = GetMultiProcessTestChildBaseCommandLine(); + + AppendSwitchHandle(&command_line, "mutex", mutex); + AppendSwitchHandle(&command_line, "sync_event", sync_event); + + LaunchOptions options; + HandlesToInheritVector handle_vector; + handle_vector.push_back(mutex); + handle_vector.push_back(sync_event); + options.handles_to_inherit = &handle_vector; + return SpawnMultiProcessTestChild("WaitChainTestProc", command_line, options); +} + +// Returns true if the |wait_chain| is an alternating sequence of thread objects +// and synchronization objects. +bool WaitChainStructureIsCorrect(const WaitChainNodeVector& wait_chain) { + // Checks thread objects. + for (size_t i = 0; i < wait_chain.size(); i += 2) { + if (wait_chain[i].ObjectType != WctThreadType) + return false; + } + + // Check synchronization objects. + for (size_t i = 1; i < wait_chain.size(); i += 2) { + if (wait_chain[i].ObjectType == WctThreadType) + return false; + } + return true; +} + +// Returns true if the |wait_chain| goes through more than 1 process. +bool WaitChainIsCrossProcess(const WaitChainNodeVector& wait_chain) { + if (wait_chain.size() == 0) + return false; + + // Just check that the process id changes somewhere in the chain. + // Note: ThreadObjects are every 2 nodes. + DWORD first_process = wait_chain[0].ThreadObject.ProcessId; + for (size_t i = 2; i < wait_chain.size(); i += 2) { + if (first_process != wait_chain[i].ThreadObject.ProcessId) + return true; + } + return false; +} + +} // namespace + +// Creates 2 threads that acquire their designated mutex and then try to +// acquire each others' mutex to cause a deadlock. +TEST(WaitChainTest, Deadlock) { + // 2 mutexes are needed to get a deadlock. + ScopedHandle mutex_1 = CreateMutex(false); + ASSERT_TRUE(mutex_1.IsValid()); + ScopedHandle mutex_2 = CreateMutex(false); + ASSERT_TRUE(mutex_2.IsValid()); + + std::unique_ptr<DeadlockThread> deadlock_thread_1 = + CreateDeadlockThread(mutex_1.Get(), mutex_2.Get()); + std::unique_ptr<DeadlockThread> deadlock_thread_2 = + CreateDeadlockThread(mutex_2.Get(), mutex_1.Get()); + + // Signal the threads to try to acquire the other mutex. + deadlock_thread_1->SignalToAcquireMutex(); + deadlock_thread_2->SignalToAcquireMutex(); + // Sleep to make sure the 2 threads got a chance to execute. + Sleep(10); + + // Create a few waiting threads to get a longer wait chain. + std::unique_ptr<SingleTaskThread> waiting_thread_1 = + CreateJoiningThread(deadlock_thread_1.get()); + std::unique_ptr<SingleTaskThread> waiting_thread_2 = + CreateJoiningThread(waiting_thread_1.get()); + + WaitChainNodeVector wait_chain; + bool is_deadlock; + ASSERT_TRUE( + GetThreadWaitChain(waiting_thread_2->tid(), &wait_chain, &is_deadlock)); + + EXPECT_EQ(9U, wait_chain.size()); + EXPECT_TRUE(is_deadlock); + EXPECT_TRUE(WaitChainStructureIsCorrect(wait_chain)); + EXPECT_FALSE(WaitChainIsCrossProcess(wait_chain)); + + ASSERT_TRUE(deadlock_thread_1->Terminate()); + + // The SimpleThread API expect Join() to be called before destruction. + deadlock_thread_2->Join(); + waiting_thread_2->Join(); +} + +// Creates a child process that acquires a mutex and then blocks. A chain of +// threads then blocks on that mutex. +TEST(WaitChainTest, CrossProcess) { + ScopedHandle mutex = CreateMutex(true); + ASSERT_TRUE(mutex.IsValid()); + ScopedHandle sync_event = CreateEvent(true); + ASSERT_TRUE(sync_event.IsValid()); + + Process child_process = StartChildProcess(mutex.Get(), sync_event.Get()); + ASSERT_TRUE(child_process.IsValid()); + + // Wait for the child process to signal when it's holding the mutex. + EXPECT_EQ(WAIT_OBJECT_0, ::WaitForSingleObject(sync_event.Get(), INFINITE)); + + // Create a few waiting threads to get a longer wait chain. + std::unique_ptr<SingleTaskThread> waiting_thread_1 = + CreateWaitingThread(mutex.Get()); + std::unique_ptr<SingleTaskThread> waiting_thread_2 = + CreateJoiningThread(waiting_thread_1.get()); + std::unique_ptr<SingleTaskThread> waiting_thread_3 = + CreateJoiningThread(waiting_thread_2.get()); + + WaitChainNodeVector wait_chain; + bool is_deadlock; + ASSERT_TRUE( + GetThreadWaitChain(waiting_thread_3->tid(), &wait_chain, &is_deadlock)); + + EXPECT_EQ(7U, wait_chain.size()); + EXPECT_FALSE(is_deadlock); + EXPECT_TRUE(WaitChainStructureIsCorrect(wait_chain)); + EXPECT_TRUE(WaitChainIsCrossProcess(wait_chain)); + + // Unblock child process and wait for it to terminate. + ASSERT_TRUE(::SetEvent(sync_event.Get())); + ASSERT_TRUE(child_process.WaitForExit(nullptr)); + + // The SimpleThread API expect Join() to be called before destruction. + waiting_thread_3->Join(); +} + +} // namespace win +} // namespace base
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_am.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_am.xtb index b864bbcd..c34654af 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_am.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_am.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="am"> <translation id="1091157412887719337">ምደባ አልተሳካም። ምንም ፕሮግራም አይገኝም።</translation> +<translation id="1416550906796893042">የመተግበሪያ ስሪት</translation> <translation id="2004526128230838685">ምደባ አልተሳካም። ያልታወቀ ችግር።</translation> <translation id="2023631438558435272">ምደባ አልተሳካም። ልክ ያልሆነ ምላሽ።</translation> <translation id="2353984724370197742">ምደባ አልተሳካም። የአውታረ መረብ ጥያቄ አልተሳካም።</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">ምደባ አልተሳካም። መለያ መዳረሻ የለውም።</translation> <translation id="704835510384979817">ምደባ አልተሳካም። ምንም ተዛማጅ የፕሮግራም ስሪት የለም።</translation> <translation id="7536363920335771251">የሞተር ግንኙነት ተቋርጧል፣ ምክንያት፦ %1$s</translation> +<translation id="7596558890252710462">ስርዓተ ክወና</translation> <translation id="7961542533680218955">ምደባ ተሳክቷል።</translation> <translation id="8514856595257368555">ማስመሰያ ተገኝቷል።</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ar.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ar.xtb index eab8891..503b781 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ar.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ar.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ar"> <translation id="1091157412887719337">أخفق التعيين. لا يتوفر محرك.</translation> +<translation id="1416550906796893042">إصدار التطبيق</translation> <translation id="2004526128230838685">أخفق التعيين. مشكلة غير معروفة.</translation> <translation id="2023631438558435272">أخفق التعيين. استجابة غير صالحة.</translation> <translation id="2353984724370197742">أخفق التعيين. أخفق طلب الشبكة.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">أخفق التعيين. لا تتوفر إمكانية الدخول إلى الحساب.</translation> <translation id="704835510384979817">أخفق التعيين. لا يوجد إصدار محرك مطابق.</translation> <translation id="7536363920335771251">المحرك غير متصل، والسبب: %1$s</translation> +<translation id="7596558890252710462">نظام التشغيل</translation> <translation id="7961542533680218955">تم نجاح التعيين.</translation> <translation id="8514856595257368555">تم استرداد الرمز المميز.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_bg.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_bg.xtb index dc4bbea..603d5d2 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_bg.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_bg.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="bg"> <translation id="1091157412887719337">Получаването на заданието не бе успешно. Няма налична машина.</translation> +<translation id="1416550906796893042">Версия на приложението</translation> <translation id="2004526128230838685">Получаването на заданието не бе успешно. Неизвестен проблем.</translation> <translation id="2023631438558435272">Получаването на заданието не бе успешно. Невалиден отговор.</translation> <translation id="2353984724370197742">Получаването на заданието не бе успешно поради проблем с мрежовата заявка.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Получаването на заданието не бе успешно. Профилът няма достъп.</translation> <translation id="704835510384979817">Получаването на заданието не бе успешно. Няма съответстваща версия на машина.</translation> <translation id="7536363920335771251">Връзката с машината е прекратена поради следната причина: %1$s</translation> +<translation id="7596558890252710462">Операционна система</translation> <translation id="7961542533680218955">Получаването на заданието бе успешно.</translation> <translation id="8514856595257368555">Означението бе извлечено.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ca.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ca.xtb index 90cf29175..e668d65 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ca.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ca.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ca"> <translation id="1091157412887719337">No s'ha pogut obtenir l'assignació. No hi havia cap motor disponible.</translation> +<translation id="1416550906796893042">Versió de l'aplicació</translation> <translation id="2004526128230838685">No s'ha pogut obtenir l'assignació. S'ha produït un error desconegut.</translation> <translation id="2023631438558435272">No s'ha pogut obtenir l'assignació. La resposta no era vàlida.</translation> <translation id="2353984724370197742">No s'ha pogut obtenir l'assignació. S'ha produït un error a la sol·licitud de xarxa.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">No s'ha pogut obtenir l'assignació. El compte no hi té accés.</translation> <translation id="704835510384979817">No s'ha pogut obtenir l'assignació. La versió del motor no és correcta.</translation> <translation id="7536363920335771251">El motor s'ha desconnectat pel motiu següent: %1$s</translation> +<translation id="7596558890252710462">Sistema operatiu</translation> <translation id="7961542533680218955">L'assignació s'ha obtingut correctament.</translation> <translation id="8514856595257368555">S'ha recuperat el testimoni.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_cs.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_cs.xtb index a3e1cb8..0f672ed 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_cs.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_cs.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="cs"> <translation id="1091157412887719337">Přidružení se nezdařilo. Není k dispozici žádný modul.</translation> +<translation id="1416550906796893042">Verze aplikace</translation> <translation id="2004526128230838685">Přidružení se nezdařilo. Neznámý problém.</translation> <translation id="2023631438558435272">Přidružení se nezdařilo. Neplatná odpověď.</translation> <translation id="2353984724370197742">Přidružení se nezdařilo. Síťový požadavek se nezdařil.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Přidružení se nezdařilo. Účet nemá přístup.</translation> <translation id="704835510384979817">Přidružení se nezdařilo. Není k dispozici odpovídající verze modulu.</translation> <translation id="7536363920335771251">Vyhledávač byl odpojen. Důvod: %1$s</translation> +<translation id="7596558890252710462">Operační systém</translation> <translation id="7961542533680218955">Přidružení bylo úspěšné.</translation> <translation id="8514856595257368555">Token byl načten.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_da.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_da.xtb index 06b66ee..078c622 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_da.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_da.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="da"> <translation id="1091157412887719337">Tildelingen mislykkedes. Der var ingen tilgængelig maskine.</translation> +<translation id="1416550906796893042">Appversion</translation> <translation id="2004526128230838685">Tildelingen mislykkedes. Ukendt problem.</translation> <translation id="2023631438558435272">Tildelingen mislykkedes. Ugyldigt svar.</translation> <translation id="2353984724370197742">Tildelingen mislykkedes. Netværksanmodningen mislykkedes.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Tildelingen mislykkedes. Kontoen har ikke adgang.</translation> <translation id="704835510384979817">Tildelingen mislykkedes. Ingen matchende maskinversion.</translation> <translation id="7536363920335771251">Forbindelsen til maskinen blev afbrudt. Årsag: %1$s</translation> +<translation id="7596558890252710462">Operativsystem</translation> <translation id="7961542533680218955">Tildelingen lykkedes.</translation> <translation id="8514856595257368555">Tokenet blev hentet.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_de.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_de.xtb index c5fa1d9..2ee7ce03 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_de.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_de.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="de"> <translation id="1091157412887719337">Zuweisung fehlgeschlagen. Kein Modul verfügbar.</translation> +<translation id="1416550906796893042">Anwendungsversion</translation> <translation id="2004526128230838685">Zuweisung fehlgeschlagen. Unbekanntes Problem.</translation> <translation id="2023631438558435272">Zuweisung fehlgeschlagen. Ungültige Antwort.</translation> <translation id="2353984724370197742">Zuweisung fehlgeschlagen. Netzwerkanfrage fehlgeschlagen.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Zuweisung fehlgeschlagen. Konto hat keinen Zugriff.</translation> <translation id="704835510384979817">Zuweisung fehlgeschlagen. Keine übereinstimmende Modulversion.</translation> <translation id="7536363920335771251">Modul getrennt, Grund: %1$s</translation> +<translation id="7596558890252710462">Betriebssystem</translation> <translation id="7961542533680218955">Zuweisung ist erfolgt.</translation> <translation id="8514856595257368555">Token abgerufen.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_el.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_el.xtb index dfcc313..0e4e80f 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_el.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_el.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="el"> <translation id="1091157412887719337">Η ανάθεση απέτυχε. Δεν υπάρχει διαθέσιμη μηχανή.</translation> +<translation id="1416550906796893042">Έκδοση εφαρμογής</translation> <translation id="2004526128230838685">Η ανάθεση απέτυχε. Άγνωστη πρόβλημα.</translation> <translation id="2023631438558435272">Η ανάθεση απέτυχε. Μη έγκυρη απόκριση.</translation> <translation id="2353984724370197742">Η ανάθεση απέτυχε. Το αίτημα δικτύου απέτυχε.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Η ανάθεση απέτυχε. Ο λογαριασμός δεν έχει πρόσβαση.</translation> <translation id="704835510384979817">Η ανάθεση απέτυχε. Η έκδοση μηχανής δεν αντιστοιχεί.</translation> <translation id="7536363920335771251">Η μηχανή αποσυνδέθηκε. Αιτία: %1$s</translation> +<translation id="7596558890252710462">Λειτουργικό σύστημα</translation> <translation id="7961542533680218955">Η ανάθεση ήταν επιτυχής.</translation> <translation id="8514856595257368555">Το διακριτικό ανακτήθηκε.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_en-GB.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_en-GB.xtb index e785dfd8..f4aca3e 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_en-GB.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_en-GB.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="en-GB"> <translation id="1091157412887719337">Assignment failed. No engine available.</translation> +<translation id="1416550906796893042">Application version</translation> <translation id="2004526128230838685">Assignment failed. Unknown issue.</translation> <translation id="2023631438558435272">Assignment failed. Invalid response.</translation> <translation id="2353984724370197742">Assignment failed. Network request failed.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Assignment failed. Account does not have access.</translation> <translation id="704835510384979817">Assignment failed. No matching engine version.</translation> <translation id="7536363920335771251">Engine disconnected, reason: %1$s</translation> +<translation id="7596558890252710462">Operating system</translation> <translation id="7961542533680218955">Assignment succeeded.</translation> <translation id="8514856595257368555">Token retrieved.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_es-419.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_es-419.xtb index c139010..d8580f5f 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_es-419.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_es-419.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="es-419"> <translation id="1091157412887719337">Se produjo un error de asignación. No hay motores disponibles.</translation> +<translation id="1416550906796893042">Versión de la aplicación</translation> <translation id="2004526128230838685">Se produjo un error de asignación. Hay un problema desconocido.</translation> <translation id="2023631438558435272">Se produjo un error de asignación. La respuesta no es válida.</translation> <translation id="2353984724370197742">Se produjo un error de asignación. Se produjo un error en la solicitud de la red.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Se produjo un error de asignación. La cuenta no tiene acceso.</translation> <translation id="704835510384979817">Se produjo un error de asignación. No hay ninguna versión coincidente del motor.</translation> <translation id="7536363920335771251">Motivo de la desconexión del motor: %1$s</translation> +<translation id="7596558890252710462">Sistema operativo</translation> <translation id="7961542533680218955">La asignación se completó correctamente.</translation> <translation id="8514856595257368555">Se recuperó el token.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_es.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_es.xtb index 63a24aa..f48f33cb 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_es.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_es.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="es"> <translation id="1091157412887719337">Ha fallado la asignación. No hay motores disponibles.</translation> +<translation id="1416550906796893042">Versión de la aplicación</translation> <translation id="2004526128230838685">Ha fallado la asignación. Problema desconocido.</translation> <translation id="2023631438558435272">Ha fallado la asignación. La respuesta no es válida.</translation> <translation id="2353984724370197742">Ha fallado la asignación. Error en la solicitud de red.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Ha fallado la asignación. La cuenta no dispone de acceso.</translation> <translation id="704835510384979817">Ha fallado la asignación. La versión del motor no coincide.</translation> <translation id="7536363920335771251">Motivo por el que el motor está desconectado: %1$s</translation> +<translation id="7596558890252710462">Sistema operativo</translation> <translation id="7961542533680218955">Asignación correcta.</translation> <translation id="8514856595257368555">Se ha recuperado el token.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fa.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fa.xtb index 66b9d51..627a4db 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fa.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fa.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fa"> <translation id="1091157412887719337">واگذاری ناموفق بود. موتوری در دسترس نیست.</translation> +<translation id="1416550906796893042">نسخه برنامه</translation> <translation id="2004526128230838685">واگذاری ناموفق بود. مشکل نامشخص.</translation> <translation id="2023631438558435272">واگذاری ناموفق بود. پاسخ نامعتبر.</translation> <translation id="2353984724370197742">واگذاری ناموفق بود. درخواست شبکه انجام نشد.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">واگذاری ناموفق بود. حساب دسترسی ندارد.</translation> <translation id="704835510384979817">واگذاری ناموفق بود. نسخه موتور مطابقی وجود ندارد.</translation> <translation id="7536363920335771251">ارتباط موتور قطع شد، دلیل: %1$s</translation> +<translation id="7596558890252710462">سیستم عامل</translation> <translation id="7961542533680218955">واگذاری با موفقیت انجام شد.</translation> <translation id="8514856595257368555">کد بازیابی شد.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fi.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fi.xtb index 1be55f4..2bcb8ee 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fi.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fi"> <translation id="1091157412887719337">Tehtävä epäonnistui. Koneita ei ole käytettävissä.</translation> +<translation id="1416550906796893042">Sovellusversio</translation> <translation id="2004526128230838685">Tehtävä epäonnistui. Tapahtui tuntematon virhe.</translation> <translation id="2023631438558435272">Tehtävä epäonnistui. Vastaus on virheellinen.</translation> <translation id="2353984724370197742">Tehtävä epäonnistui. Verkon pyyntö epäonnistui.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Tehtävä epäonnistui. Tilillä ei ole käyttöoikeutta.</translation> <translation id="704835510384979817">Tehtävä epäonnistui. Koneiden versiot eivät täsmää.</translation> <translation id="7536363920335771251">Yhteys katkaistiin. Syy: %1$s.</translation> +<translation id="7596558890252710462">Käyttöjärjestelmä</translation> <translation id="7961542533680218955">Tehtävä onnistui.</translation> <translation id="8514856595257368555">Tunnus noudettu.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fil.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fil.xtb index 075a1cf..fda5191d 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fil.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fil.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fil"> <translation id="1091157412887719337">Hindi naitalaga. Walang available na engine.</translation> +<translation id="1416550906796893042">Bersyon ng application</translation> <translation id="2004526128230838685">Hindi naitalaga. May hindi matukoy na isyu.</translation> <translation id="2023631438558435272">Hindi naitalaga. Di-wasto ang tugon.</translation> <translation id="2353984724370197742">Hindi naitalaga. Hindi naisagawa ang kahilingan sa network.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Hindi naitalaga. Walang access ang account.</translation> <translation id="704835510384979817">Hindi naitalaga. Walang tumutugmang bersyon ng engine.</translation> <translation id="7536363920335771251">Nadiskonekta ang engine, dahilan: %1$s</translation> +<translation id="7596558890252710462">Operating system</translation> <translation id="7961542533680218955">Naging matagumpay ang pagtatalaga.</translation> <translation id="8514856595257368555">Nabawi ang token.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fr.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fr.xtb index eb7e37c..5e6001e5 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_fr.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_fr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="fr"> <translation id="1091157412887719337">Échec de l'attribution. Aucun moteur disponible.</translation> +<translation id="1416550906796893042">Version de l'application</translation> <translation id="2004526128230838685">Échec de l'attribution. Problème inconnu.</translation> <translation id="2023631438558435272">Échec de l'attribution. Réponse incorrecte.</translation> <translation id="2353984724370197742">Échec de l'attribution. Échec de la demande réseau.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Échec de l'attribution. Le compte ne dispose pas de l'accès.</translation> <translation id="704835510384979817">Échec de l'attribution. Aucune version de moteur correspondante.</translation> <translation id="7536363920335771251">Moteur déconnecté. Motif : %1$s</translation> +<translation id="7596558890252710462">Système d'exploitation</translation> <translation id="7961542533680218955">L'attribution a bien été effectuée.</translation> <translation id="8514856595257368555">Le jeton a bien été récupéré.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_hi.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_hi.xtb index 63586a9..9b40d81 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_hi.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_hi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hi"> <translation id="1091157412887719337">असाइनमेंट विफल रहा. कोई इंजन उपलब्ध नहीं.</translation> +<translation id="1416550906796893042">ऐप्लिकेशन वर्शन</translation> <translation id="2004526128230838685">असाइनमेंट विफल रहा. अज्ञात समस्या.</translation> <translation id="2023631438558435272">असाइनमेंट विफल रहा. अमान्य प्रतिसाद.</translation> <translation id="2353984724370197742">असाइनमेंट विफल रहा. नेटवर्क अनुरोध विफल रहा.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">असाइनमेंट विफल रहा. खाते के पास एक्सेस नहीं है.</translation> <translation id="704835510384979817">असाइनमेंट विफल रहा. मिलान वाला कोई इंजन वर्शन नहीं है.</translation> <translation id="7536363920335771251">इंजन इस कारण डिस्कनेक्ट किया गया: %1$s</translation> +<translation id="7596558890252710462">ऑपरेटिंग सिस्टम</translation> <translation id="7961542533680218955">असाइनमेंट सफल रहा.</translation> <translation id="8514856595257368555">टोकन प्राप्त हुआ.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_hr.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_hr.xtb index d7d7366..60d4f8e 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_hr.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_hr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hr"> <translation id="1091157412887719337">Dodjeljivanje nije uspjelo. Tražilica nije dostupna.</translation> +<translation id="1416550906796893042">Verzija aplikacije</translation> <translation id="2004526128230838685">Dodjeljivanje nije uspjelo zbog nepoznatog problema.</translation> <translation id="2023631438558435272">Dodjeljivanje nije uspjelo zbog nevažećeg odgovora.</translation> <translation id="2353984724370197742">Dodjeljivanje nije uspjelo. Mrežni zahtjev nije uspio.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Dodjeljivanje nije uspjelo. Račun nema pristup.</translation> <translation id="704835510384979817">Dodjeljivanje nije uspjelo. Nema podudarne verzije tražilice.</translation> <translation id="7536363920335771251">Prekinuta je veza s uređajem, razlog: %1$s</translation> +<translation id="7596558890252710462">Operativni sustav</translation> <translation id="7961542533680218955">Dodjeljivanje je uspjelo.</translation> <translation id="8514856595257368555">Oznaka je dohvaćena.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_hu.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_hu.xtb index c7dbbb1..27a349bb 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_hu.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_hu.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="hu"> <translation id="1091157412887719337">A hozzárendelés nem sikerült. Nem áll rendelkezésre motor.</translation> +<translation id="1416550906796893042">Alkalmazás verziószáma</translation> <translation id="2004526128230838685">A hozzárendelés nem sikerült. Ismeretlen hiba történt.</translation> <translation id="2023631438558435272">A hozzárendelés nem sikerült. Érvénytelen válasz.</translation> <translation id="2353984724370197742">A hozzárendelés nem sikerült. Sikertelen hálózati kérés.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">A hozzárendelés nem sikerült. A fióknak nincs hozzáférése.</translation> <translation id="704835510384979817">A hozzárendelés nem sikerült. Nincs egyező motorverzió.</translation> <translation id="7536363920335771251">Motor leválasztva, ok: %1$s</translation> +<translation id="7596558890252710462">Operációs rendszer</translation> <translation id="7961542533680218955">A hozzárendelés sikerült.</translation> <translation id="8514856595257368555">Token lekérve.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_id.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_id.xtb index bc61baa1..bd702abf 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_id.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_id.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="id"> <translation id="1091157412887719337">Penugasan gagal. Tidak ada mesin yang tersedia.</translation> +<translation id="1416550906796893042">Versi aplikasi</translation> <translation id="2004526128230838685">Penugasan gagal. Masalah tidak dikenal.</translation> <translation id="2023631438558435272">Penugasan gagal. Tanggapan tidak valid.</translation> <translation id="2353984724370197742">Penugasan gagal. Permintaan jaringan gagal.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Penugasan gagal. Akun tidak memiliki akses.</translation> <translation id="704835510384979817">Penugasan gagal. Tidak ada versi mesin yang sesuai.</translation> <translation id="7536363920335771251">Sambungan perangkat terputus, alasan: %1$s</translation> +<translation id="7596558890252710462">Sistem operasi</translation> <translation id="7961542533680218955">Penugasan berhasil.</translation> <translation id="8514856595257368555">Token telah diambil.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_it.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_it.xtb index 05dfcf9..9f464a3 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_it.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_it.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="it"> <translation id="1091157412887719337">Assegnazione non riuscita. Nessun motore disponibile.</translation> +<translation id="1416550906796893042">Versione applicazione</translation> <translation id="2004526128230838685">Assegnazione non riuscita. Problema sconosciuto.</translation> <translation id="2023631438558435272">Assegnazione non riuscita. Risposta non valida.</translation> <translation id="2353984724370197742">Assegnazione non riuscita. Richiesta di rete non riuscita.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Assegnazione non riuscita. All'account non è consentito l'accesso.</translation> <translation id="704835510384979817">Assegnazione non riuscita. Nessuna versione del motore corrispondente.</translation> <translation id="7536363920335771251">Motore disconnesso. Motivo: %1$s</translation> +<translation id="7596558890252710462">Sistema operativo</translation> <translation id="7961542533680218955">Assegnazione riuscita.</translation> <translation id="8514856595257368555">Token recuperato.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_iw.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_iw.xtb index 6af7421..98dad36 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_iw.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_iw.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="1091157412887719337">ההקצאה נכשלה. אין מנוע זמין.</translation> +<translation id="1416550906796893042">גרסת אפליקציה</translation> <translation id="2004526128230838685">ההקצאה נכשלה. בעיה לא ידועה.</translation> <translation id="2023631438558435272">ההקצאה נכשלה. תגובה לא חוקית.</translation> <translation id="2353984724370197742">ההקצאה נכשלה. בקשת הרשת נכשלה.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">ההקצאה נכשלה. אין לחשבון הרשאת גישה.</translation> <translation id="704835510384979817">ההקצאה נכשלה. לא נמצאה גירסת מנוע תואמת.</translation> <translation id="7536363920335771251">המנוע מנותק. הסיבה: %1$s</translation> +<translation id="7596558890252710462">מערכת הפעלה</translation> <translation id="7961542533680218955">ההקצאה הצליחה.</translation> <translation id="8514856595257368555">האסימון אוחזר.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ja.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ja.xtb index 0a89429..29cd8f6 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ja.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ja.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ja"> <translation id="1091157412887719337">割り当てが失敗しました。利用できるエンジンがありません。</translation> +<translation id="1416550906796893042">アプリケーションのバージョン</translation> <translation id="2004526128230838685">割り当てが失敗しました。不明なエラーが発生しました。</translation> <translation id="2023631438558435272">割り当てが失敗しました。無効な応答が返されました。</translation> <translation id="2353984724370197742">割り当てが失敗しました。ネットワーク リクエストが失敗しました。</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">割り当てが失敗しました。アカウントにアクセス権がありません。</translation> <translation id="704835510384979817">割り当てが失敗しました。一致するエンジン バージョンがありません。</translation> <translation id="7536363920335771251">エンジンが切断されました。原因: %1$s</translation> +<translation id="7596558890252710462">オペレーティング システム</translation> <translation id="7961542533680218955">割り当てが成功しました。</translation> <translation id="8514856595257368555">トークンを取得しました。</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ko.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ko.xtb index 7a57cf8c..da17e557 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ko.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ko.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ko"> <translation id="1091157412887719337">할당하지 못했습니다. 사용 가능한 엔진이 없습니다.</translation> +<translation id="1416550906796893042">애플리케이션 버전</translation> <translation id="2004526128230838685">할당하지 못했습니다. 알 수 없는 문제가 발생했습니다.</translation> <translation id="2023631438558435272">할당하지 못했습니다. 응답이 잘못되었습니다.</translation> <translation id="2353984724370197742">할당하지 못했습니다. 네트워크 요청에 실패했습니다.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">할당하지 못했습니다. 계정에 액세스 권한이 없습니다.</translation> <translation id="704835510384979817">할당하지 못했습니다. 일치하는 엔진 버전이 없습니다.</translation> <translation id="7536363920335771251">다음 이유로 엔진 연결이 해제되었습니다. %1$s</translation> +<translation id="7596558890252710462">운영체제</translation> <translation id="7961542533680218955">할당이 완료되었습니다.</translation> <translation id="8514856595257368555">토큰을 가져왔습니다.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_lt.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_lt.xtb index 03b10fe1..a509f2d6 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_lt.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_lt.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="lt"> <translation id="1091157412887719337">Priskirti nepavyko. Nėra jokių pasiekiamų variklių.</translation> +<translation id="1416550906796893042">Programos versija</translation> <translation id="2004526128230838685">Priskirti nepavyko. Nežinoma problema.</translation> <translation id="2023631438558435272">Priskirti nepavyko. Netinkamas atsakas.</translation> <translation id="2353984724370197742">Priskirti nepavyko. Nepavyko tinklo užklausa.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Priskirti nepavyko. Naudojant paskyrą negalima pasiekti duomenų.</translation> <translation id="704835510384979817">Priskirti nepavyko. Nėra atitinkamos versijos variklio.</translation> <translation id="7536363920335771251">Variklis atjungtas, priežastis: %1$s</translation> +<translation id="7596558890252710462">Operacinė sistema</translation> <translation id="7961542533680218955">Priskirti pavyko.</translation> <translation id="8514856595257368555">Prieigos raktas gautas.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_lv.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_lv.xtb index 78279baf..c7e699c 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_lv.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_lv.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="lv"> <translation id="1091157412887719337">Piešķires kļūme. Nav pieejamas programmas.</translation> +<translation id="1416550906796893042">Lietojumprogrammas versija</translation> <translation id="2004526128230838685">Piešķires kļūme. Nezināma problēma.</translation> <translation id="2023631438558435272">Piešķires kļūme. Nederīga atbilde.</translation> <translation id="2353984724370197742">Piešķires kļūme. Tīkla pieprasījuma kļūme.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Piešķires kļūme. Kontam nav piekļuves.</translation> <translation id="704835510384979817">Piešķires kļūme. Nav atbilstošas programmas versijas.</translation> <translation id="7536363920335771251">Programma ir atvienota, iemesls: %1$s</translation> +<translation id="7596558890252710462">Operētājsistēma</translation> <translation id="7961542533680218955">Piešķire bija veiksmīga.</translation> <translation id="8514856595257368555">Pilnvara ir iegūta.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_nl.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_nl.xtb index 4bf8521..61e5bcf 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_nl.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_nl.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="nl"> <translation id="1091157412887719337">Toewijzing mislukt. Geen engine beschikbaar.</translation> +<translation id="1416550906796893042">Appversie</translation> <translation id="2004526128230838685">Toewijzing mislukt. Onbekend probleem.</translation> <translation id="2023631438558435272">Toewijzing mislukt. Ongeldige reactie.</translation> <translation id="2353984724370197742">Toewijzing mislukt. Netwerkverzoek mislukt.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Toewijzing mislukt. Account heeft geen toegang.</translation> <translation id="704835510384979817">Toewijzing mislukt. Geen overeenkomende engine-versie.</translation> <translation id="7536363920335771251">Verbinding met engine verbroken, reden: %1$s</translation> +<translation id="7596558890252710462">Besturingssysteem</translation> <translation id="7961542533680218955">Toewijzing voltooid.</translation> <translation id="8514856595257368555">Token opgehaald.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_no.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_no.xtb index a1241e7..b8c3711 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_no.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_no.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="no"> <translation id="1091157412887719337">Oppgaven kunne ikke utføres. Ingen motorer var tilgjengelige.</translation> +<translation id="1416550906796893042">Programversjon</translation> <translation id="2004526128230838685">Oppgaven kunne ikke utføres. Ukjent problem.</translation> <translation id="2023631438558435272">Oppgaven kunne ikke utføres. Ugyldig svar.</translation> <translation id="2353984724370197742">Oppgaven kunne ikke utføres. Nettverksforespørselen mislyktes.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Oppgaven kunne ikke utføres. Kontoen har ikke tilgang.</translation> <translation id="704835510384979817">Oppgaven kunne ikke utføres. Ingen samsvarende motorversjon.</translation> <translation id="7536363920335771251">Motoren er koblet fra. Årsak: %1$s</translation> +<translation id="7596558890252710462">Operativsystem</translation> <translation id="7961542533680218955">Oppgaven ble utført.</translation> <translation id="8514856595257368555">Tokenet er hentet.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_pl.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_pl.xtb index e092c1c..d41a3308 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_pl.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_pl.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pl"> <translation id="1091157412887719337">Przypisanie się nie udało. Nie jest dostępna żadna wyszukiwarka.</translation> +<translation id="1416550906796893042">Wersja aplikacji</translation> <translation id="2004526128230838685">Przypisanie się nie udało. Nieznany problem.</translation> <translation id="2023631438558435272">Przypisanie się nie udało. Nieprawidłowa odpowiedź.</translation> <translation id="2353984724370197742">Przypisanie się nie udało. Błąd żądania sieciowego.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Przypisanie się nie udało. Konto nie ma dostępu.</translation> <translation id="704835510384979817">Przypisanie się nie udało. Brak pasującej wersji przeglądarki.</translation> <translation id="7536363920335771251">Rozłączono z mechanizmem, powód: %1$s</translation> +<translation id="7596558890252710462">System operacyjny</translation> <translation id="7961542533680218955">Przypisano.</translation> <translation id="8514856595257368555">Token został pobrany.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-BR.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-BR.xtb index 6aa0715..a757145 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-BR.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-BR.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> <translation id="1091157412887719337">Falha na atribuição. Nenhum mecanismo disponível.</translation> +<translation id="1416550906796893042">Versão do aplicativo</translation> <translation id="2004526128230838685">Falha na atribuição. Problema desconhecido.</translation> <translation id="2023631438558435272">Falha na atribuição. Resposta inválida.</translation> <translation id="2353984724370197742">Falha na atribuição. Falha na solicitação de rede.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Falha na atribuição. A conta não tem acesso.</translation> <translation id="704835510384979817">Falha na atribuição. Nenhuma versão compatível do mecanismo.</translation> <translation id="7536363920335771251">Mecanismo desconectado, motivo: %1$s</translation> +<translation id="7596558890252710462">Sistema operacional</translation> <translation id="7961542533680218955">Atribuição concluída.</translation> <translation id="8514856595257368555">Token recuperado.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-PT.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-PT.xtb index 158411f..d61245d 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-PT.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_pt-PT.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="pt-PT"> <translation id="1091157412887719337">A atribuição falhou. Nenhum motor disponível.</translation> +<translation id="1416550906796893042">Versão da aplicação</translation> <translation id="2004526128230838685">A atribuição falhou. Problema desconhecido.</translation> <translation id="2023631438558435272">A atribuição falhou. Resposta inválida.</translation> <translation id="2353984724370197742">A atribuição falhou. Falha no pedido de rede.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">A atribuição falhou. A conta não tem acesso.</translation> <translation id="704835510384979817">A atribuição falhou. Não há uma versão do motor correspondente.</translation> <translation id="7536363920335771251">Motor desligado, motivo: %1$s</translation> +<translation id="7596558890252710462">Sistema operativo</translation> <translation id="7961542533680218955">A atribuição foi bem-sucedida.</translation> <translation id="8514856595257368555">Símbolo obtido.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ro.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ro.xtb index abc531c6..ae795b5 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ro.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ro.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ro"> <translation id="1091157412887719337">Atribuirea nu a reușit. Niciun motor disponibil.</translation> +<translation id="1416550906796893042">Versiunea aplicației</translation> <translation id="2004526128230838685">Atribuirea nu a reușit. Problemă necunoscută.</translation> <translation id="2023631438558435272">Atribuirea nu a reușit. Răspuns nevalid.</translation> <translation id="2353984724370197742">Atribuirea nu a reușit. Solicitarea din rețea nu a reușit.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Atribuirea nu a reușit. Contul nu are acces.</translation> <translation id="704835510384979817">Atribuirea nu a reușit. Nicio versiune a motorului potrivită.</translation> <translation id="7536363920335771251">Motor deconectat, motiv: %1$s</translation> +<translation id="7596558890252710462">Sistem de operare</translation> <translation id="7961542533680218955">Atribuirea a reușit.</translation> <translation id="8514856595257368555">Indicativul a fost preluat.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ru.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ru.xtb index c64df996..edef03c 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_ru.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_ru.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="ru"> <translation id="1091157412887719337">Ошибка. Поисковая система недоступна.</translation> +<translation id="1416550906796893042">Версия приложения</translation> <translation id="2004526128230838685">Неизвестная ошибка.</translation> <translation id="2023631438558435272">Ошибка. Недействительный ответ.</translation> <translation id="2353984724370197742">Ошибка. Не удалось обработать запрос.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Ошибка. У аккаунта нет права доступа.</translation> <translation id="704835510384979817">Ошибка. Совместимая версия поисковой системы отсутствует.</translation> <translation id="7536363920335771251">Соединение прервано. Причина: %1$s.</translation> +<translation id="7596558890252710462">Операционная система</translation> <translation id="7961542533680218955">Готово.</translation> <translation id="8514856595257368555">Токен получен.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sk.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sk.xtb index 44cec94..f398a7cc 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sk.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sk.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sk"> <translation id="1091157412887719337">Priradenie zlyhalo. Nie je k dispozícii žiadny nástroj.</translation> +<translation id="1416550906796893042">Verzia aplikácie</translation> <translation id="2004526128230838685">Priradenie zlyhalo. Neznáma chyba.</translation> <translation id="2023631438558435272">Priradenie zlyhalo. Neplatná odpoveď.</translation> <translation id="2353984724370197742">Priradenie zlyhalo. Zlyhala žiadosť do siete.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Priradenie zlyhalo. Účet nemá prístup.</translation> <translation id="704835510384979817">Priradenie zlyhalo. Žiadna zodpovedajúca verzia nástroja.</translation> <translation id="7536363920335771251">Nástroj bol odpojený. Dôvod: %1$s</translation> +<translation id="7596558890252710462">Operačný systém</translation> <translation id="7961542533680218955">Priradenie bolo úspešné.</translation> <translation id="8514856595257368555">Token bol načítaný.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sl.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sl.xtb index 0a51ffa..9f97d45 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sl.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sl.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sl"> <translation id="1091157412887719337">Dodelitev ni uspela. Na voljo ni iskalnika.</translation> +<translation id="1416550906796893042">Različica aplikacije</translation> <translation id="2004526128230838685">Dodelitev ni uspela. Neznana težava.</translation> <translation id="2023631438558435272">Dodelitev ni uspela. Neveljaven odgovor.</translation> <translation id="2353984724370197742">Dodelitev ni uspela. Omrežna zahteva ni uspela.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Dodelitev ni uspela. Račun nima dostopa.</translation> <translation id="704835510384979817">Dodelitev ni uspela. Ni ujemajoče se različice iskalnika.</translation> <translation id="7536363920335771251">Povezava z mehanizmom je prekinjena; razlog: %1$s</translation> +<translation id="7596558890252710462">Operacijski sistem</translation> <translation id="7961542533680218955">Dodelitev je uspela.</translation> <translation id="8514856595257368555">Žeton pridobljen.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sr.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sr.xtb index 3b163b6..3793bdc16 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sr.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sr"> <translation id="1091157412887719337">Пренос права није успео. Нема доступног механизма.</translation> +<translation id="1416550906796893042">Верзија апликације</translation> <translation id="2004526128230838685">Пренос права није успео. Дошло је до непознатог проблема.</translation> <translation id="2023631438558435272">Пренос права није успео. Неважећи одговор.</translation> <translation id="2353984724370197742">Пренос права није успео. Захтев мреже није успео.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Пренос права није успео. Налог нема приступ.</translation> <translation id="704835510384979817">Пренос права није успео. Нема одговарајуће верзије механизма.</translation> <translation id="7536363920335771251">Прекинута је веза са механизмом, разлог: %1$s</translation> +<translation id="7596558890252710462">Оперативни систем</translation> <translation id="7961542533680218955">Пренос права је успео.</translation> <translation id="8514856595257368555">Токен је преузет.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sv.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sv.xtb index 099f660..2a5627f 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sv.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sv.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sv"> <translation id="1091157412887719337">Tilldelningen misslyckades. Det finns ingen tillgänglig motor.</translation> +<translation id="1416550906796893042">Appversion</translation> <translation id="2004526128230838685">Tilldelningen misslyckades. Okänt problem.</translation> <translation id="2023631438558435272">Tilldelningen misslyckades. Ogiltigt svar.</translation> <translation id="2353984724370197742">Tilldelningen misslyckades. Nätverksbegäran misslyckades.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Tilldelningen misslyckades. Kontot har ingen åtkomst.</translation> <translation id="704835510384979817">Tilldelningen misslyckades. Det finns ingen matchande motorversion.</translation> <translation id="7536363920335771251">Motorn är frånkopplad. Anledning: %1$s</translation> +<translation id="7596558890252710462">Operativsystem</translation> <translation id="7961542533680218955">Tilldelningen lyckades.</translation> <translation id="8514856595257368555">Token har hämtats.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sw.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sw.xtb index 6f26fbd..98280aa 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_sw.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_sw.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="sw"> <translation id="1091157412887719337">Haijafaulu kuhawilisha. Hakuna mtambo unaopatikana.</translation> +<translation id="1416550906796893042">Toleo la programu</translation> <translation id="2004526128230838685">Haijafaulu kuhawilisha. Hitilafu isiyojulikana.</translation> <translation id="2023631438558435272">Haijafaulu kuhawilisha. Jibu si sahihi.</translation> <translation id="2353984724370197742">Haijafaulu kuhawilisha. Ombi la mtandao halijafaulu.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Haijafaulu kuhawilisha. Akaunti haina idhini ya kufikia.</translation> <translation id="704835510384979817">Haijafaulu kuhawilisha. Hakuna toleo la mtambo linalolingana.</translation> <translation id="7536363920335771251">Mtambo umeondolewa, sababu: %1$s</translation> +<translation id="7596558890252710462">Mfumo wa uendeshaji</translation> <translation id="7961542533680218955">Imefaulu kuhawilisha.</translation> <translation id="8514856595257368555">Tokeni imerejeshwa.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_th.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_th.xtb index ef0e209..57a4650a 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_th.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_th.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="th"> <translation id="1091157412887719337">การมอบหมายล้มเหลว ไม่มีเครื่องที่พร้อมใช้งาน</translation> +<translation id="1416550906796893042">เวอร์ชันของแอปพลิเคชัน</translation> <translation id="2004526128230838685">การมอบหมายล้มเหลว ไม่ทราบปัญหา</translation> <translation id="2023631438558435272">การมอบหมายล้มเหลว การตอบกลับไม่ถูกต้อง</translation> <translation id="2353984724370197742">การมอบหมายล้มเหลว คำขอเครือข่ายล้มเหลว</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">การมอบหมายล้มเหลว บัญชีไม่มีสิทธิ์เข้าถึง</translation> <translation id="704835510384979817">การมอบหมายล้มเหลว เวอร์ชันของเครื่องไม่ตรงกัน</translation> <translation id="7536363920335771251">ยกเลิกการเชื่อมต่อเครื่องมือแล้ว เหตุผลคือ %1$s</translation> +<translation id="7596558890252710462">ระบบปฏิบัติการ</translation> <translation id="7961542533680218955">การมอบหมายสำเร็จ</translation> <translation id="8514856595257368555">ดึงข้อมูลโทเค็นแล้ว</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_tr.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_tr.xtb index 2271a58b..53e06211 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_tr.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_tr.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="tr"> <translation id="1091157412887719337">Atama başarısız oldu. Kullanılabilir motor yok.</translation> +<translation id="1416550906796893042">Uygulama sürümü</translation> <translation id="2004526128230838685">Atama başarısız oldu. Bilinmeyen sorun.</translation> <translation id="2023631438558435272">Atama başarısız oldu. Geçersiz yanıt.</translation> <translation id="2353984724370197742">Atama başarısız oldu. Ağ isteği başarısız oldu.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Atama başarısız oldu. Hesabın erişimi yok.</translation> <translation id="704835510384979817">Atama başarısız oldu. Eşleşen motor sürümü yok.</translation> <translation id="7536363920335771251">Motor bağlantısı kesildi, neden: %1$s</translation> +<translation id="7596558890252710462">İşletim sistemi</translation> <translation id="7961542533680218955">Atama başarılı oldu.</translation> <translation id="8514856595257368555">Jeton alındı.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_uk.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_uk.xtb index f31986e6..a574e25 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_uk.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_uk.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="uk"> <translation id="1091157412887719337">Не вдалось отримати завдання. Немає доступних ресурсів.</translation> +<translation id="1416550906796893042">Версія додатка</translation> <translation id="2004526128230838685">Не вдалось отримати завдання. Невідома проблема.</translation> <translation id="2023631438558435272">Не вдалось отримати завдання. Недійсна відповідь.</translation> <translation id="2353984724370197742">Не вдалось отримати завдання. Помилка мережі.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Не вдалось отримати завдання. Обліковий запис не має доступу.</translation> <translation id="704835510384979817">Не вдалось отримати завдання. Немає відповідної версії ресурсу.</translation> <translation id="7536363920335771251">Систему від’єднано. Причина: %1$s</translation> +<translation id="7596558890252710462">Операційна система</translation> <translation id="7961542533680218955">Завдання отримано.</translation> <translation id="8514856595257368555">Маркер отримано.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_vi.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_vi.xtb index d8d1cba..e6a297c2 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_vi.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_vi.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="vi"> <translation id="1091157412887719337">Gán không thành công. Không có công cụ.</translation> +<translation id="1416550906796893042">Phiên bản ứng dụng</translation> <translation id="2004526128230838685">Gán không thành công. Sự cố không xác định.</translation> <translation id="2023631438558435272">Gán không thành công. Phản hồi không hợp lệ.</translation> <translation id="2353984724370197742">Gán không thành công. Yêu cầu mạng không thành công.</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">Gán không thành công. Tài khoản không có quyền truy cập.</translation> <translation id="704835510384979817">Gán không thành công. Không có phiên bản công cụ phù hợp.</translation> <translation id="7536363920335771251">Đã ngắt kết nối công cụ, lí do: %1$s</translation> +<translation id="7596558890252710462">Hệ điều hành</translation> <translation id="7961542533680218955">Đã gán thành công.</translation> <translation id="8514856595257368555">Đã truy xuất mã thông báo.</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-CN.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-CN.xtb index 6ed01d91..a2b4965 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-CN.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-CN.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-CN"> <translation id="1091157412887719337">无法获取任务,因为没有可用的引擎。</translation> +<translation id="1416550906796893042">应用版本</translation> <translation id="2004526128230838685">无法获取任务,因为出现了未知问题。</translation> <translation id="2023631438558435272">无法获取任务,因为响应无效。</translation> <translation id="2353984724370197742">无法获取任务,因为网络请求失败。</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">无法获取任务,因为相关帐户无访问权限。</translation> <translation id="704835510384979817">无法获取任务,因为没有相符的引擎版本。</translation> <translation id="7536363920335771251">引擎已断开,原因:%1$s</translation> +<translation id="7596558890252710462">操作系统</translation> <translation id="7961542533680218955">已成功获取任务。</translation> <translation id="8514856595257368555">已检索到令牌。</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-TW.xtb b/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-TW.xtb index 319990f..d239019 100644 --- a/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-TW.xtb +++ b/blimp/client/app/android/java/strings/translations/android_blimp_strings_zh-TW.xtb
@@ -2,6 +2,7 @@ <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> <translation id="1091157412887719337">指派失敗。沒有可用的引擎。</translation> +<translation id="1416550906796893042">應用程式版本</translation> <translation id="2004526128230838685">指派失敗。發生不明問題。</translation> <translation id="2023631438558435272">指派失敗。回應無效。</translation> <translation id="2353984724370197742">指派失敗。網路要求失敗。</translation> @@ -16,6 +17,7 @@ <translation id="5860346505531085166">指派失敗。帳戶沒有存取權。</translation> <translation id="704835510384979817">指派失敗。沒有相符的引擎版本。</translation> <translation id="7536363920335771251">引擎連線已中斷 (原因:%1$s)</translation> +<translation id="7596558890252710462">作業系統</translation> <translation id="7961542533680218955">指派成功。</translation> <translation id="8514856595257368555">已擷取憑證。</translation> </translationbundle> \ No newline at end of file
diff --git a/blimp/engine/renderer/engine_image_serialization_processor.cc b/blimp/engine/renderer/engine_image_serialization_processor.cc index ffecf35..8b670197 100644 --- a/blimp/engine/renderer/engine_image_serialization_processor.cc +++ b/blimp/engine/renderer/engine_image_serialization_processor.cc
@@ -71,7 +71,12 @@ // the WebP defaults would invalidate all caches they are hard coded. config.lossless = 0; config.quality = 75.0; // between 0 (smallest file) and 100 (biggest). - config.method = 4; // quality/speed trade-off (0=fast, 6=slower-better). + + // TODO(nyquist): Move image encoding to a different thread when + // asynchronous loading of images is possible. The encode work currently + // blocks the render thread so we are dropping the method down to 0. + // crbug.com/603643. + config.method = 0; // quality/speed trade-off (0=fast, 6=slower-better). // Encode the picture using the given configuration. bool success = WebPEncode(&config, &picture);
diff --git a/breakpad/breakpad_unittests.isolate b/breakpad/breakpad_unittests.isolate deleted file mode 100644 index 24c1634..0000000 --- a/breakpad/breakpad_unittests.isolate +++ /dev/null
@@ -1,14 +0,0 @@ -# Copyright 2013 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. -{ - 'conditions': [ - ['OS=="android"', { - 'variables': { - 'files': [ - '<(PRODUCT_DIR)/linux_dumper_unittest_helper', - ], - }, - }], - ], -}
diff --git a/breakpad/breakpad_unittests_apk.isolate b/breakpad/breakpad_unittests_apk.isolate index 0b1e062..ff3e87c4 100644 --- a/breakpad/breakpad_unittests_apk.isolate +++ b/breakpad/breakpad_unittests_apk.isolate
@@ -4,7 +4,6 @@ { 'includes': [ '../build/android/android.isolate', - 'breakpad_unittests.isolate', ], 'variables': { 'command': [ @@ -14,7 +13,6 @@ 'files': [ '<(PRODUCT_DIR)/bin/run_breakpad_unittests', '<(PRODUCT_DIR)/breakpad_unittests', - 'breakpad_unittests.isolate', ] }, }
diff --git a/build/android/gyp/create_test_runner_script.py b/build/android/gyp/create_test_runner_script.py index 0b127e7..be15dfd 100755 --- a/build/android/gyp/create_test_runner_script.py +++ b/build/android/gyp/create_test_runner_script.py
@@ -60,6 +60,7 @@ group.add_argument('--additional-apk-list') group.add_argument('--apk-under-test') group.add_argument('--apk-under-test-incremental-install-script') + group.add_argument('--executable-dist-dir') group.add_argument('--isolate-file-path') group.add_argument('--output-directory') group.add_argument('--test-apk') @@ -92,6 +93,10 @@ ('--apk-under-test-incremental-install-script', RelativizePathToScript( args.apk_under_test_incremental_install_script))) + if args.executable_dist_dir: + test_runner_path_args.append( + ('--executable-dist-dir', + RelativizePathToScript(args.executable_dist_dir))) if args.isolate_file_path: test_runner_path_args.append( ('--isolate-file-path', RelativizePathToScript(args.isolate_file_path)))
diff --git a/build/android/pylib/gtest/gtest_test_instance.py b/build/android/pylib/gtest/gtest_test_instance.py index 3291116..0a076c6 100644 --- a/build/android/pylib/gtest/gtest_test_instance.py +++ b/build/android/pylib/gtest/gtest_test_instance.py
@@ -31,7 +31,6 @@ 'third_party/WebKit/Source/platform/heap/BlinkHeapUnitTests.isolate', 'blink_platform_unittests': 'third_party/WebKit/Source/platform/blink_platform_unittests.isolate', - 'breakpad_unittests': 'breakpad/breakpad_unittests.isolate', 'cc_perftests': 'cc/cc_perftests.isolate', 'components_browsertests': 'components/components_browsertests.isolate', 'components_unittests': 'components/components_unittests.isolate', @@ -301,8 +300,6 @@ self._isolate_delegate.PurgeExcluded(_DEPS_EXCLUSION_LIST) self._isolate_delegate.MoveOutputDeps() dest_dir = None - if self._suite == 'breakpad_unittests': - dest_dir = '/data/local/tmp/' self._data_deps.extend([ (self._isolate_delegate.isolate_deps_dir, dest_dir)])
diff --git a/build/common.gypi b/build/common.gypi index bbe2722..06ef8dd 100644 --- a/build/common.gypi +++ b/build/common.gypi
@@ -607,6 +607,12 @@ # Enable FTP support by default. 'disable_ftp_support%': 0, + # Do not use the platform ICU alternatives by default. + 'use_platform_icu_alternatives%': 0, + + # Do not disable brotli filter by default. + 'disable_brotli_filter%': 0, + # Use of precompiled headers on Windows. # # This variable may be explicitly set to 1 (enabled) or 0 @@ -1064,9 +1070,9 @@ # Windows. ['OS=="win" and target_arch=="ia32" and branding=="Chrome"', { # Enable hang reports from the watcher process. - 'kasko_hang_reports%': 0, + 'kasko_hang_reports%': 1, # Enable failed rendez-vous reports. - 'kasko_failed_rdv_reports%': 0, + 'kasko_failed_rdv_reports%': 1, }, { # Enable hang reports from the watcher process. 'kasko_hang_reports%': 0, @@ -1270,6 +1276,8 @@ 'enable_captive_portal_detection%': '<(enable_captive_portal_detection)', 'disable_file_support%': '<(disable_file_support)', 'disable_ftp_support%': '<(disable_ftp_support)', + 'use_platform_icu_alternatives%': '<(use_platform_icu_alternatives)', + 'disable_brotli_filter%': '<(disable_brotli_filter)', 'enable_task_manager%': '<(enable_task_manager)', 'sas_dll_path%': '<(sas_dll_path)', 'wix_path%': '<(wix_path)', @@ -2266,7 +2274,7 @@ 'use_allocator%': 'none', 'use_sanitizer_options%': 1, }], - ['(OS=="linux" or OS=="android") and asan==0 and msan==0 and lsan==0 and tsan==0 and build_for_tool==""', { + ['OS=="linux" and asan==0 and msan==0 and lsan==0 and tsan==0 and build_for_tool==""', { 'use_experimental_allocator_shim%': 1, }], ['OS=="linux" and asan==0 and msan==0 and lsan==0 and tsan==0', { @@ -4937,15 +4945,6 @@ }], ], }], - ['asan==1', { - 'cflags': [ - # Android build relies on -Wl,--gc-sections removing - # unreachable code. ASan instrumentation for globals inhibits - # this and results in a library with unresolvable relocations. - # TODO(eugenis): find a way to reenable this. - '-mllvm -asan-globals=0', - ], - }], ['target_arch == "arm" and order_profiling==0', { 'ldflags': [ # Enable identical code folding to reduce size.
diff --git a/build/config/allocator.gni b/build/config/allocator.gni index 06447af0..b6444a2a 100644 --- a/build/config/allocator.gni +++ b/build/config/allocator.gni
@@ -11,7 +11,7 @@ _default_allocator = "tcmalloc" } -if ((is_linux || is_android) && !is_asan && !is_lsan && !is_tsan && !is_msan) { +if (is_linux && !is_asan && !is_lsan && !is_tsan && !is_msan) { _default_use_experimental_allocator_shim = true } else { _default_use_experimental_allocator_shim = false
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 3cf7222..13dea91 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -1246,10 +1246,6 @@ if (!using_sanitizer && target_cpu != "arm64") { cflags += [ "-fomit-frame-pointer" ] } - - # Don't use gc-sections since it can cause links to succeed when they - # actually shouldn't. http://crbug.com/159847 - ldflags = common_optimize_on_ldflags - [ "-Wl,--gc-sections" ] } else { cflags = [ "-O0" ] ldflags = []
diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni index 2bcfbd68..4e9ea68f 100644 --- a/build/config/mac/rules.gni +++ b/build/config/mac/rules.gni
@@ -57,13 +57,14 @@ output_name = _output_name output_prefix_override = true output_extension = "" + output_dir = "$target_out_dir/$_shared_library_target" } bundle_data(_shared_library_bundle_data) { visibility = [ ":$_framework_target" ] forward_variables_from(invoker, [ "testonly" ]) sources = [ - "$root_out_dir/${_output_name}", + "$target_out_dir/$_shared_library_target/$_output_name", ] outputs = [ "{{bundle_executable_dir}}/$_output_name",
diff --git a/build/config/sanitizers/BUILD.gn b/build/config/sanitizers/BUILD.gn index ce48fed..258d69f 100644 --- a/build/config/sanitizers/BUILD.gn +++ b/build/config/sanitizers/BUILD.gn
@@ -152,16 +152,7 @@ [ "-fsanitize-blacklist=" + rebase_path("//tools/memory/asan/blacklist.txt", root_build_dir) ] } - if (is_android) { - # Android build relies on -Wl,--gc-sections removing unreachable code. - # ASan instrumentation for globals inhibits this and results in a - # library with unresolvable relocations. - # TODO(eugenis): find a way to reenable this. - cflags += [ - "-mllvm", - "-asan-globals=0", - ] - } else if (is_mac) { + if (is_mac) { # http://crbug.com/352073 cflags += [ "-mllvm",
diff --git a/build/gyp_chromium.py b/build/gyp_chromium.py index 3c975d6..e491216 100644 --- a/build/gyp_chromium.py +++ b/build/gyp_chromium.py
@@ -320,6 +320,22 @@ if mac_toolchain_dir: args.append('-Gmac_toolchain_dir=' + mac_toolchain_dir) + # TODO(crbug.com/432967) - We are eventually going to switch GYP off + # by default for all Chromium builds, so this list of configurations + # will get broader and broader. + running_as_hook = '--running-as-hook' + if (running_as_hook in args and + os.environ.get('GYP_CHROMIUM_NO_ACTION', None) != '0' and + (sys.platform.startswith('linux') and not gyp_vars_dict)): + print 'GYP is now disabled in this configuration by default in runhooks.\n' + print 'If you really want to run this, either run ' + print '`python build/gyp_chromium.py` explicitly by hand' + print 'or set the environment variable GYP_CHROMIUM_NO_ACTION=0.' + sys.exit(0) + + if running_as_hook in args: + args.remove(running_as_hook) + if not use_analyzer: print 'Updating projects from gyp files...' sys.stdout.flush()
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni index e2b98e06..77bc16f 100644 --- a/build/toolchain/gcc_toolchain.gni +++ b/build/toolchain/gcc_toolchain.gni
@@ -234,23 +234,25 @@ description = "AR {{output}}" rspfile_content = "{{inputs}}" outputs = [ - "{{target_out_dir}}/{{target_output_name}}{{output_extension}}", + "{{output_dir}}/{{target_output_name}}{{output_extension}}", ] + + # Shared libraries go in the target out directory by default so we can + # generate different targets with the same name and not have them collide. + default_output_dir = "{{target_out_dir}}" default_output_extension = ".a" output_prefix = "lib" } tool("solink") { soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". - sofile = "{{root_out_dir}}/$soname" # Possibly including toolchain dir. - if (shlib_subdir != ".") { - sofile = "{{root_out_dir}}/$shlib_subdir/$soname" - } + sofile = "{{output_dir}}/$soname" # Possibly including toolchain dir. rspfile = sofile + ".rsp" - unstripped_sofile = sofile if (defined(invoker.strip)) { unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" + } else { + unstripped_sofile = sofile } # These variables are not built into GN but are helpers that @@ -283,6 +285,11 @@ # specifies). default_output_extension = default_shlib_extension + default_output_dir = "{{root_out_dir}}" + if (shlib_subdir != ".") { + default_output_dir += "/$shlib_subdir" + } + output_prefix = "lib" # Since the above commands only updates the .TOC file when it changes, ask @@ -305,15 +312,13 @@ tool("solink_module") { soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". - sofile = "{{root_out_dir}}/$soname" # Possibly including toolchain dir. - if (shlib_subdir != ".") { - sofile = "{{root_out_dir}}/$shlib_subdir/$soname" - } + sofile = "{{output_dir}}/$soname" rspfile = sofile + ".rsp" - unstripped_sofile = sofile if (defined(invoker.strip)) { unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" + } else { + unstripped_sofile = sofile } command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" @@ -335,6 +340,11 @@ default_output_extension = default_shlib_extension } + default_output_dir = "{{root_out_dir}}" + if (shlib_subdir != ".") { + default_output_dir += "/$shlib_subdir" + } + output_prefix = "lib" outputs = [ @@ -347,7 +357,7 @@ tool("link") { exename = "{{target_output_name}}{{output_extension}}" - outfile = "{{root_out_dir}}/$exename" + outfile = "{{output_dir}}/$exename" rspfile = "$outfile.rsp" unstripped_outfile = outfile @@ -356,6 +366,8 @@ # specifies). default_output_extension = default_executable_extension + default_output_dir = "{{root_out_dir}}" + if (defined(invoker.strip)) { unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" }
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn index d1982997..eb83248 100644 --- a/build/toolchain/mac/BUILD.gn +++ b/build/toolchain/mac/BUILD.gn
@@ -114,14 +114,15 @@ command = "rm -f {{output}} && ./gyp-mac-tool filter-libtool libtool -static -o {{output}} {{inputs}}" description = "LIBTOOL-STATIC {{output}}" outputs = [ - "{{target_out_dir}}/{{target_output_name}}{{output_extension}}", + "{{output_dir}}/{{target_output_name}}{{output_extension}}", ] + default_output_dir = "{{target_out_dir}}" default_output_extension = ".a" output_prefix = "lib" } tool("solink") { - dylib = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" # eg "./libfoo.dylib" + dylib = "{{output_dir}}/{{target_output_name}}{{output_extension}}" # eg "./libfoo.dylib" rspfile = dylib + ".rsp" # These variables are not built into GN but are helpers that implement @@ -156,6 +157,7 @@ # Use this for {{output_extension}} expansions unless a target manually # overrides it (in which case {{output_extension}} will be what the target # specifies). + default_output_dir = "{{root_out_dir}}" default_output_extension = ".dylib" output_prefix = "lib" @@ -176,7 +178,7 @@ } tool("solink_module") { - sofile = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" # eg "./libfoo.so" + sofile = "{{output_dir}}/{{target_output_name}}{{output_extension}}" # eg "./libfoo.so" rspfile = sofile + ".rsp" link_command = @@ -194,6 +196,7 @@ # Use this for {{output_extension}} expansions unless a target manually # overrides it (in which case {{output_extension}} will be what the target # specifies). + default_output_dir = "{{root_out_dir}}" default_output_extension = ".so" outputs = [ @@ -202,7 +205,7 @@ } tool("link") { - outfile = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" + outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}" rspfile = "$outfile.rsp" # Note about --filelist: Apple's linker reads the file list file and @@ -219,6 +222,8 @@ outputs = [ outfile, ] + + default_output_dir = "{{root_out_dir}}" } # These two are really entirely generic, but have to be repeated in
diff --git a/cc/input/event_listener_properties.h b/cc/input/event_listener_properties.h index 6b9141d..e1932af 100644 --- a/cc/input/event_listener_properties.h +++ b/cc/input/event_listener_properties.h
@@ -7,7 +7,15 @@ namespace cc { -enum class EventListenerClass { kTouch, kMouseWheel, kNumClasses }; +enum class EventListenerClass { + // This value includes "touchstart", "touchmove", and "pointer" events. + kTouchStartOrMove, + // This value includes "wheel" and "mousewheel" events. + kMouseWheel, + // This value includes "touchend" and "touchcancel" events. + kTouchEndOrCancel, + kNumClasses +}; enum class EventListenerProperties { kNone,
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc index 434c931..c433bf5 100644 --- a/cc/layers/heads_up_display_layer_impl.cc +++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -198,13 +198,12 @@ } TRACE_EVENT0("cc", "UploadHudTexture"); - SkImageInfo info; - size_t row_bytes = 0; - const void* pixels = hud_surface_->peekPixels(&info, &row_bytes); - DCHECK(pixels); - DCHECK(info.colorType() == kN32_SkColorType); + SkPixmap pixmap; + hud_surface_->peekPixels(&pixmap); + DCHECK(pixmap.addr()); + DCHECK(pixmap.info().colorType() == kN32_SkColorType); resource_provider->CopyToResource(resources_.back()->id(), - static_cast<const uint8_t*>(pixels), + static_cast<const uint8_t*>(pixmap.addr()), internal_content_bounds_); resource_provider->GenerateSyncTokenForResource(resources_.back()->id()); }
diff --git a/cc/playback/display_item_list.cc b/cc/playback/display_item_list.cc index 7fb037a7..235ee3f86 100644 --- a/cc/playback/display_item_list.cc +++ b/cc/playback/display_item_list.cc
@@ -308,8 +308,4 @@ image_map_.GetDiscardableImagesInRect(rect, raster_scale, images); } -bool DisplayItemList::MayHaveDiscardableImages() const { - return !image_map_.empty(); -} - } // namespace cc
diff --git a/cc/playback/display_item_list.h b/cc/playback/display_item_list.h index 4588b03..0aa5863 100644 --- a/cc/playback/display_item_list.h +++ b/cc/playback/display_item_list.h
@@ -108,7 +108,6 @@ void GetDiscardableImagesInRect(const gfx::Rect& rect, float raster_scale, std::vector<DrawImage>* images); - bool MayHaveDiscardableImages() const; gfx::Rect VisualRectForTesting(int index) { return visual_rects_[index]; }
diff --git a/cc/playback/raster_source.cc b/cc/playback/raster_source.cc index ab0fd5a..38a83b9a3 100644 --- a/cc/playback/raster_source.cc +++ b/cc/playback/raster_source.cc
@@ -100,11 +100,16 @@ SkipImageCanvas canvas(raster_canvas); RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, contents_scale); - } else if (settings.use_image_hijack_canvas && - display_list_->MayHaveDiscardableImages()) { + } else if (settings.use_image_hijack_canvas) { const SkImageInfo& info = raster_canvas->imageInfo(); + ImageHijackCanvas canvas(info.width(), info.height(), image_decode_controller_); + // Before adding the canvas, make sure that the ImageHijackCanvas is aware + // of the current transform, which may affect the clip bounds. Since we + // query the clip bounds of the current canvas to get the list of draw + // commands to process, this is important to produce correct content. + canvas.setMatrix(raster_canvas->getTotalMatrix()); canvas.addCanvas(raster_canvas); RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect,
diff --git a/cc/playback/raster_source_unittest.cc b/cc/playback/raster_source_unittest.cc index 7f0c0cfc..673d6f7 100644 --- a/cc/playback/raster_source_unittest.cc +++ b/cc/playback/raster_source_unittest.cc
@@ -10,6 +10,7 @@ #include "cc/test/fake_recording_source.h" #include "cc/test/skia_common.h" +#include "cc/tiles/software_image_decode_controller.h" #include "skia/ext/refptr.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/skia/include/core/SkPixelRef.h" @@ -538,5 +539,64 @@ EXPECT_LT(total_memory_usage, 2 * kReportedMemoryUsageInBytes); } +TEST(RasterSourceTest, ImageHijackCanvasRespectsSharedCanvasTransform) { + gfx::Size size(100, 100); + + // Create a recording source that is filled with red and every corner is + // green (4x4 rects in the corner are green to account for blending when + // scaling). Note that we paint an image first, so that we can force image + // hijack canvas to be used. + std::unique_ptr<FakeRecordingSource> recording_source = + FakeRecordingSource::CreateFilledRecordingSource(size); + + // 1. Paint the image. + skia::RefPtr<SkImage> image = CreateDiscardableImage(gfx::Size(5, 5)); + recording_source->add_draw_image(image.get(), gfx::Point(0, 0)); + + // 2. Cover everything in red. + SkPaint paint; + paint.setColor(SK_ColorRED); + recording_source->add_draw_rect_with_paint(gfx::Rect(size), paint); + + // 3. Draw 4x4 green rects into every corner. + paint.setColor(SK_ColorGREEN); + recording_source->add_draw_rect_with_paint(gfx::Rect(0, 0, 4, 4), paint); + recording_source->add_draw_rect_with_paint( + gfx::Rect(size.width() - 4, 0, 4, 4), paint); + recording_source->add_draw_rect_with_paint( + gfx::Rect(0, size.height() - 4, 4, 4), paint); + recording_source->add_draw_rect_with_paint( + gfx::Rect(size.width() - 4, size.height() - 4, 4, 4), paint); + + recording_source->SetGenerateDiscardableImagesMetadata(true); + recording_source->Rerecord(); + + bool can_use_lcd = true; + scoped_refptr<RasterSource> raster_source = + recording_source->CreateRasterSource(can_use_lcd); + SoftwareImageDecodeController controller; + raster_source->SetImageDecodeController(&controller); + + SkBitmap bitmap; + bitmap.allocN32Pixels(size.width() * 0.5f, size.height() * 0.25f); + SkCanvas canvas(bitmap); + canvas.scale(0.5f, 0.25f); + + RasterSource::PlaybackSettings settings; + settings.playback_to_shared_canvas = true; + settings.use_image_hijack_canvas = true; + raster_source->PlaybackToCanvas(&canvas, gfx::Rect(size), gfx::Rect(size), + 1.f, settings); + + EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 0)); + EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 0)); + EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(0, 24)); + EXPECT_EQ(SK_ColorGREEN, bitmap.getColor(49, 24)); + for (int x = 0; x < 49; ++x) + EXPECT_EQ(SK_ColorRED, bitmap.getColor(x, 12)); + for (int y = 0; y < 24; ++y) + EXPECT_EQ(SK_ColorRED, bitmap.getColor(24, y)); +} + } // namespace } // namespace cc
diff --git a/cc/proto/layer_tree_host.proto b/cc/proto/layer_tree_host.proto index e324d1d..407061f 100644 --- a/cc/proto/layer_tree_host.proto +++ b/cc/proto/layer_tree_host.proto
@@ -55,6 +55,7 @@ optional uint32 next_surface_sequence = 33; optional uint32 wheel_event_listener_properties = 34; optional bool have_scroll_event_handlers = 35; - optional uint32 touch_event_listener_properties = 36; + optional uint32 touch_start_or_move_event_listener_properties = 36; repeated int32 layers_that_should_push_properties = 37; + optional uint32 touch_end_or_cancel_event_listener_properties = 38; }
diff --git a/cc/raster/tile_task_worker_pool.cc b/cc/raster/tile_task_worker_pool.cc index f8c1c73..9333d5a 100644 --- a/cc/raster/tile_task_worker_pool.cc +++ b/cc/raster/tile_task_worker_pool.cc
@@ -114,11 +114,12 @@ DCHECK_EQ(size.height() % 4, 0); std::unique_ptr<TextureCompressor> texture_compressor = TextureCompressor::Create(TextureCompressor::kFormatETC1); - texture_compressor->Compress(reinterpret_cast<const uint8_t*>( - surface->peekPixels(nullptr, nullptr)), - reinterpret_cast<uint8_t*>(memory), - size.width(), size.height(), - TextureCompressor::kQualityHigh); + SkPixmap pixmap; + surface->peekPixels(&pixmap); + texture_compressor->Compress( + reinterpret_cast<const uint8_t*>(pixmap.addr()), + reinterpret_cast<uint8_t*>(memory), size.width(), size.height(), + TextureCompressor::kQualityHigh); } else { TRACE_EVENT0("cc", "TileTaskWorkerPool::PlaybackToMemory::ConvertRGBA4444");
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc index 1ef8fbe..4b18aa2 100644 --- a/cc/surfaces/surface_aggregator.cc +++ b/cc/surfaces/surface_aggregator.cc
@@ -313,18 +313,22 @@ return copy_shared_quad_state; } -static gfx::Rect CalculateQuadSpaceDamageRect( +// Returns true if the damage rect is valid. +static bool CalculateQuadSpaceDamageRect( const gfx::Transform& quad_to_target_transform, const gfx::Transform& target_to_root_transform, - const gfx::Rect& root_damage_rect) { + const gfx::Rect& root_damage_rect, + gfx::Rect* quad_space_damage_rect) { gfx::Transform quad_to_root_transform(target_to_root_transform, quad_to_target_transform); gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization); bool inverse_valid = quad_to_root_transform.GetInverse(&inverse_transform); - DCHECK(inverse_valid); + if (!inverse_valid) + return false; - return MathUtil::ProjectEnclosingClippedRect(inverse_transform, - root_damage_rect); + *quad_space_damage_rect = MathUtil::ProjectEnclosingClippedRect( + inverse_transform, root_damage_rect); + return true; } void SurfaceAggregator::CopyQuadsToPass( @@ -344,6 +348,7 @@ // TODO(jbauman): This rect may contain unnecessary area if // transform isn't axis-aligned. gfx::Rect damage_rect_in_quad_space; + bool damage_rect_in_quad_space_valid = false; #if DCHECK_IS_ON() // If quads have come in with SharedQuadState out of order, or when quads have @@ -370,10 +375,11 @@ gfx::Transform quad_to_target_transform( target_transform, quad->shared_quad_state->quad_to_target_transform); - damage_rect_in_quad_space = CalculateQuadSpaceDamageRect( + damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect( quad_to_target_transform, dest_pass->transform_to_root_target, - root_damage_rect_); - if (!damage_rect_in_quad_space.Intersects(quad->visible_rect)) + root_damage_rect_, &damage_rect_in_quad_space); + if (damage_rect_in_quad_space_valid && + !damage_rect_in_quad_space.Intersects(quad->visible_rect)) continue; } HandleSurfaceQuad(surface_quad, target_transform, clip_rect, dest_pass); @@ -383,14 +389,16 @@ quad->shared_quad_state, target_transform, clip_rect, dest_pass); last_copied_source_shared_quad_state = quad->shared_quad_state; if (aggregate_only_damaged_ && !has_copy_requests_) { - damage_rect_in_quad_space = CalculateQuadSpaceDamageRect( + damage_rect_in_quad_space_valid = CalculateQuadSpaceDamageRect( dest_shared_quad_state->quad_to_target_transform, - dest_pass->transform_to_root_target, root_damage_rect_); + dest_pass->transform_to_root_target, root_damage_rect_, + &damage_rect_in_quad_space); } } if (ignore_undamaged) { - if (!damage_rect_in_quad_space.Intersects(quad->visible_rect)) + if (damage_rect_in_quad_space_valid && + !damage_rect_in_quad_space.Intersects(quad->visible_rect)) continue; }
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc index 2fab3d4f..c276cad 100644 --- a/cc/surfaces/surface_aggregator_unittest.cc +++ b/cc/surfaces/surface_aggregator_unittest.cc
@@ -1457,16 +1457,18 @@ TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { SurfaceId child_surface_id = allocator_.GenerateId(); factory_.Create(child_surface_id); - // The child surface has two quads, one with a visible rect of 13,13 4x4 and + // The child surface has three quads, one with a visible rect of 13,13 4x4 and // the other other with a visible rect of 10,10 2x2 (relative to root target - // space). + // space), and one with a non-invertible transform. { RenderPassId child_pass_id = RenderPassId(1, 1); test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)}; test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)}; + test::Quad child_quads3[] = {test::Quad::RenderPassQuad(child_pass_id)}; test::Pass child_passes[] = { test::Pass(child_quads1, arraysize(child_quads1), child_pass_id), - test::Pass(child_quads2, arraysize(child_quads2), child_pass_id)}; + test::Pass(child_quads2, arraysize(child_quads2), child_pass_id), + test::Pass(child_quads3, arraysize(child_quads2), child_pass_id)}; RenderPassList child_pass_list; AddPasses(&child_pass_list, gfx::Rect(SurfaceSize()), child_passes, @@ -1482,6 +1484,15 @@ child_pass_list[1]->quad_list.ElementAt(0)->visible_rect = gfx::Rect(0, 0, 2, 2); + SharedQuadState* child_noninvertible_sqs = + child_pass_list[2]->shared_quad_state_list.ElementAt(0u); + child_noninvertible_sqs->quad_to_target_transform.matrix().setDouble(0, 0, + 0.0); + EXPECT_FALSE( + child_noninvertible_sqs->quad_to_target_transform.IsInvertible()); + child_pass_list[2]->quad_list.ElementAt(0)->visible_rect = + gfx::Rect(0, 0, 2, 2); + SubmitPassListAsFrame(child_surface_id, &child_pass_list); } @@ -1512,12 +1523,13 @@ const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; - ASSERT_EQ(2u, aggregated_pass_list.size()); + ASSERT_EQ(3u, aggregated_pass_list.size()); // Damage rect for first aggregation should contain entire root surface. - EXPECT_EQ(gfx::Rect(0, 0, 15, 15), aggregated_pass_list[1]->damage_rect); + EXPECT_EQ(gfx::Rect(0, 0, 15, 15), aggregated_pass_list[2]->damage_rect); EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); + EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); // Create a root surface with a smaller damage rect. { @@ -1548,15 +1560,16 @@ const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; - ASSERT_EQ(2u, aggregated_pass_list.size()); + ASSERT_EQ(3u, aggregated_pass_list.size()); // Only first quad from surface is inside damage rect and should be // included. - EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[1]->damage_rect); + EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); EXPECT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); EXPECT_EQ(gfx::Rect(0, 0, 2, 2), aggregated_pass_list[1]->quad_list.back()->visible_rect); + EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); } // New child frame has same content and no damage, but has a @@ -1613,6 +1626,7 @@ aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect); EXPECT_EQ(gfx::Rect(0, 0, 2, 2), aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect); + ASSERT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); } {
diff --git a/cc/tiles/software_image_decode_controller.cc b/cc/tiles/software_image_decode_controller.cc index 8ed5a0eb..5f19a38e 100644 --- a/cc/tiles/software_image_decode_controller.cc +++ b/cc/tiles/software_image_decode_controller.cc
@@ -370,116 +370,22 @@ "SoftwareImageDecodeController::DecodeImageInternal", "key", key.ToString()); const SkImage* image = draw_image.image(); - - // If we can use the original decode, then we don't need to do scaling. We can - // just read pixels into the final memory. - if (key.can_use_original_decode()) { - SkImageInfo decoded_info = - CreateImageInfo(image->width(), image->height(), format_); - std::unique_ptr<base::DiscardableMemory> decoded_pixels; - { - TRACE_EVENT0( - "disabled-by-default-cc.debug", - "SoftwareImageDecodeController::DecodeImageInternal - allocate " - "decoded pixels"); - decoded_pixels = - base::DiscardableMemoryAllocator::GetInstance() - ->AllocateLockedDiscardableMemory(decoded_info.minRowBytes() * - decoded_info.height()); - } - { - TRACE_EVENT0( - "disabled-by-default-cc.debug", - "SoftwareImageDecodeController::DecodeImageInternal - read pixels"); - bool result = image->readPixels(decoded_info, decoded_pixels->data(), - decoded_info.minRowBytes(), 0, 0, - SkImage::kDisallow_CachingHint); - - if (!result) { - decoded_pixels->Unlock(); - return nullptr; - } - } - - return base::WrapUnique( - new DecodedImage(decoded_info, std::move(decoded_pixels), - SkSize::Make(0, 0), next_tracing_id_.GetNext())); - } - - // If we get here, that means we couldn't use the original sized decode for - // whatever reason. However, in all cases we do need an original decode to - // either do a scale or to extract a subrect from the image. So, what we can - // do is construct a key that would require a full sized decode, then get that - // decode via GetDecodedImageForDrawInternal(), use it, and unref it. This - // ensures that if the original sized decode is already available in any of - // the caches, we reuse that. We also ensure that all the proper locking takes - // place. If, on the other hand, the decode was not available, - // GetDecodedImageForDrawInternal() would decode the image, and unreffing it - // later ensures that we will store the discardable memory unlocked in the - // cache to be used by future requests. - gfx::Rect full_image_rect(image->width(), image->height()); - DrawImage original_size_draw_image(image, gfx::RectToSkIRect(full_image_rect), - kNone_SkFilterQuality, SkMatrix::I()); - ImageKey original_size_key = - ImageKey::FromDrawImage(original_size_draw_image); - // Sanity checks. - DCHECK(original_size_key.can_use_original_decode()) - << original_size_key.ToString(); - DCHECK(full_image_rect.size() == original_size_key.target_size()); - - auto decoded_draw_image = GetDecodedImageForDrawInternal( - original_size_key, original_size_draw_image); - if (!decoded_draw_image.image()) { - DrawWithImageFinished(original_size_draw_image, decoded_draw_image); + if (!image) return nullptr; - } - SkPixmap decoded_pixmap; - bool result = decoded_draw_image.image()->peekPixels(&decoded_pixmap); - DCHECK(result) << key.ToString(); - if (key.src_rect() != full_image_rect) { - result = decoded_pixmap.extractSubset(&decoded_pixmap, - gfx::RectToSkIRect(key.src_rect())); - DCHECK(result) << key.ToString(); + switch (key.filter_quality()) { + case kNone_SkFilterQuality: + case kLow_SkFilterQuality: + return GetOriginalImageDecode(key, *image); + case kMedium_SkFilterQuality: + NOTIMPLEMENTED(); + return nullptr; + case kHigh_SkFilterQuality: + return GetScaledImageDecode(key, *image); + default: + NOTREACHED(); + return nullptr; } - - // Now we have a decoded_pixmap which represents the src_rect at the - // original scale. All we need to do is scale it. - DCHECK(!key.target_size().IsEmpty()); - SkImageInfo scaled_info = CreateImageInfo( - key.target_size().width(), key.target_size().height(), format_); - std::unique_ptr<base::DiscardableMemory> scaled_pixels; - { - TRACE_EVENT0( - "disabled-by-default-cc.debug", - "SoftwareImageDecodeController::DecodeImageInternal - allocate " - "scaled pixels"); - scaled_pixels = base::DiscardableMemoryAllocator::GetInstance() - ->AllocateLockedDiscardableMemory( - scaled_info.minRowBytes() * scaled_info.height()); - } - SkPixmap scaled_pixmap(scaled_info, scaled_pixels->data(), - scaled_info.minRowBytes()); - // TODO(vmpstr): Start handling more than just high filter quality. - DCHECK_EQ(kHigh_SkFilterQuality, key.filter_quality()); - { - TRACE_EVENT0( - "disabled-by-default-cc.debug", - "SoftwareImageDecodeController::DecodeImageInternal - scale pixels"); - bool result = - decoded_pixmap.scalePixels(scaled_pixmap, key.filter_quality()); - DCHECK(result) << key.ToString(); - } - - // Release the original sized decode. Any other intermediate result to release - // would be the subrect memory. However, that's in a unique_ptr and will be - // deleted automatically when we return. - DrawWithImageFinished(original_size_draw_image, decoded_draw_image); - - return base::WrapUnique( - new DecodedImage(scaled_info, std::move(scaled_pixels), - SkSize::Make(-key.src_rect().x(), -key.src_rect().y()), - next_tracing_id_.GetNext())); } DecodedDrawImage SoftwareImageDecodeController::GetDecodedImageForDraw( @@ -591,6 +497,106 @@ return decoded_draw_image; } +std::unique_ptr<SoftwareImageDecodeController::DecodedImage> +SoftwareImageDecodeController::GetOriginalImageDecode(const ImageKey& key, + const SkImage& image) { + SkImageInfo decoded_info = + CreateImageInfo(image.width(), image.height(), format_); + std::unique_ptr<base::DiscardableMemory> decoded_pixels; + { + TRACE_EVENT0("disabled-by-default-cc.debug", + "SoftwareImageDecodeController::GetOriginalImageDecode - " + "allocate decoded pixels"); + decoded_pixels = + base::DiscardableMemoryAllocator::GetInstance() + ->AllocateLockedDiscardableMemory(decoded_info.minRowBytes() * + decoded_info.height()); + } + { + TRACE_EVENT0("disabled-by-default-cc.debug", + "SoftwareImageDecodeController::GetOriginalImageDecode - " + "read pixels"); + bool result = image.readPixels(decoded_info, decoded_pixels->data(), + decoded_info.minRowBytes(), 0, 0, + SkImage::kDisallow_CachingHint); + + if (!result) { + decoded_pixels->Unlock(); + return nullptr; + } + } + return base::WrapUnique( + new DecodedImage(decoded_info, std::move(decoded_pixels), + SkSize::Make(0, 0), next_tracing_id_.GetNext())); +} + +std::unique_ptr<SoftwareImageDecodeController::DecodedImage> +SoftwareImageDecodeController::GetScaledImageDecode(const ImageKey& key, + const SkImage& image) { + // Construct a key to use in GetDecodedImageForDrawInternal(). + // This allows us to reuse an image in any cache if available. + gfx::Rect full_image_rect(image.width(), image.height()); + DrawImage original_size_draw_image(&image, + gfx::RectToSkIRect(full_image_rect), + kNone_SkFilterQuality, SkMatrix::I()); + ImageKey original_size_key = + ImageKey::FromDrawImage(original_size_draw_image); + // Sanity checks. + DCHECK(original_size_key.can_use_original_decode()) + << original_size_key.ToString(); + DCHECK(full_image_rect.size() == original_size_key.target_size()); + + auto decoded_draw_image = GetDecodedImageForDrawInternal( + original_size_key, original_size_draw_image); + if (!decoded_draw_image.image()) { + DrawWithImageFinished(original_size_draw_image, decoded_draw_image); + return nullptr; + } + + SkPixmap decoded_pixmap; + bool result = decoded_draw_image.image()->peekPixels(&decoded_pixmap); + DCHECK(result) << key.ToString(); + if (key.src_rect() != full_image_rect) { + result = decoded_pixmap.extractSubset(&decoded_pixmap, + gfx::RectToSkIRect(key.src_rect())); + DCHECK(result) << key.ToString(); + } + + DCHECK(!key.target_size().IsEmpty()); + SkImageInfo scaled_info = CreateImageInfo( + key.target_size().width(), key.target_size().height(), format_); + std::unique_ptr<base::DiscardableMemory> scaled_pixels; + { + TRACE_EVENT0( + "disabled-by-default-cc.debug", + "SoftwareImageDecodeController::ScaleImage - allocate scaled pixels"); + scaled_pixels = base::DiscardableMemoryAllocator::GetInstance() + ->AllocateLockedDiscardableMemory( + scaled_info.minRowBytes() * scaled_info.height()); + } + SkPixmap scaled_pixmap(scaled_info, scaled_pixels->data(), + scaled_info.minRowBytes()); + // TODO(vmpstr): Start handling more than just high filter quality. + DCHECK_EQ(kHigh_SkFilterQuality, key.filter_quality()); + { + TRACE_EVENT0("disabled-by-default-cc.debug", + "SoftwareImageDecodeController::ScaleImage - scale pixels"); + bool result = + decoded_pixmap.scalePixels(scaled_pixmap, key.filter_quality()); + DCHECK(result) << key.ToString(); + } + + // Release the original sized decode. Any other intermediate result to release + // would be the subrect memory. However, that's in a scoped_ptr and will be + // deleted automatically when we return. + DrawWithImageFinished(original_size_draw_image, decoded_draw_image); + + return base::WrapUnique( + new DecodedImage(scaled_info, std::move(scaled_pixels), + SkSize::Make(-key.src_rect().x(), -key.src_rect().y()), + next_tracing_id_.GetNext())); +} + void SoftwareImageDecodeController::DrawWithImageFinished( const DrawImage& image, const DecodedDrawImage& decoded_image) {
diff --git a/cc/tiles/software_image_decode_controller.h b/cc/tiles/software_image_decode_controller.h index a94c45f7..9697720 100644 --- a/cc/tiles/software_image_decode_controller.h +++ b/cc/tiles/software_image_decode_controller.h
@@ -211,6 +211,19 @@ DecodedDrawImage GetDecodedImageForDrawInternal(const ImageKey& key, const DrawImage& draw_image); + // GetOriginalImageDecode is called by DecodeImageInternal when the quality + // does not scale the image. Like DecodeImageInternal, it should be called + // with no lock acquired and it returns nullptr if the decoding failed. + std::unique_ptr<DecodedImage> GetOriginalImageDecode(const ImageKey& key, + const SkImage& image); + + // GetScaledImageDecode is called by DecodeImageInternal when the quality + // requires the image be scaled. Like DecodeImageInternal, it should be + // called with no lock acquired and it returns nullptr if the decoding or + // scaling failed. + std::unique_ptr<DecodedImage> GetScaledImageDecode(const ImageKey& key, + const SkImage& image); + void SanityCheckState(int line, bool lock_acquired); void RefImage(const ImageKey& key); void RefAtRasterImage(const ImageKey& key);
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc index e2f362d..cabc5d286 100644 --- a/cc/tiles/tile_manager.cc +++ b/cc/tiles/tile_manager.cc
@@ -880,9 +880,8 @@ tile->enclosing_layer_rect(), tile->contents_scale(), &images); } - // TODO(vmpstr): We should disable image hijack canvas in - // |playback_settings| here if |images| is empty. - + // We can skip the image hijack canvas if we have no images. + playback_settings.use_image_hijack_canvas = !images.empty(); for (auto it = images.begin(); it != images.end();) { scoped_refptr<ImageDecodeTask> task; bool need_to_unref_when_finished =
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc index e10dd3f..17b1e6b 100644 --- a/cc/trees/layer_tree_host.cc +++ b/cc/trees/layer_tree_host.cc
@@ -441,11 +441,14 @@ sync_tree->set_has_transparent_background(has_transparent_background_); sync_tree->set_have_scroll_event_handlers(have_scroll_event_handlers_); sync_tree->set_event_listener_properties( - EventListenerClass::kTouch, - event_listener_properties(EventListenerClass::kTouch)); + EventListenerClass::kTouchStartOrMove, + event_listener_properties(EventListenerClass::kTouchStartOrMove)); sync_tree->set_event_listener_properties( EventListenerClass::kMouseWheel, event_listener_properties(EventListenerClass::kMouseWheel)); + sync_tree->set_event_listener_properties( + EventListenerClass::kTouchEndOrCancel, + event_listener_properties(EventListenerClass::kTouchEndOrCancel)); if (page_scale_layer_.get() && inner_viewport_scroll_layer_.get()) { sync_tree->SetViewportLayersFromIds( @@ -1529,8 +1532,12 @@ proto->set_have_scroll_event_handlers(have_scroll_event_handlers_); proto->set_wheel_event_listener_properties(static_cast<uint32_t>( event_listener_properties(EventListenerClass::kMouseWheel))); - proto->set_touch_event_listener_properties(static_cast<uint32_t>( - event_listener_properties(EventListenerClass::kTouch))); + proto->set_touch_start_or_move_event_listener_properties( + static_cast<uint32_t>( + event_listener_properties(EventListenerClass::kTouchStartOrMove))); + proto->set_touch_end_or_cancel_event_listener_properties( + static_cast<uint32_t>( + event_listener_properties(EventListenerClass::kTouchEndOrCancel))); proto->set_in_paint_layer_contents(in_paint_layer_contents_); proto->set_id(id_); proto->set_next_commit_forces_redraw(next_commit_forces_redraw_); @@ -1599,9 +1606,14 @@ EventListenerClass::kMouseWheel)] = static_cast<EventListenerProperties>( proto.wheel_event_listener_properties()); - event_listener_properties_[static_cast<size_t>(EventListenerClass::kTouch)] = + event_listener_properties_[static_cast<size_t>( + EventListenerClass::kTouchStartOrMove)] = static_cast<EventListenerProperties>( - proto.touch_event_listener_properties()); + proto.touch_start_or_move_event_listener_properties()); + event_listener_properties_[static_cast<size_t>( + EventListenerClass::kTouchEndOrCancel)] = + static_cast<EventListenerProperties>( + proto.touch_end_or_cancel_event_listener_properties()); in_paint_layer_contents_ = proto.in_paint_layer_contents(); id_ = proto.id(); next_commit_forces_redraw_ = proto.next_commit_forces_redraw();
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index 19aa497..f10f157 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -1496,7 +1496,11 @@ layer_tree_host()->SetEventListenerProperties( EventListenerClass::kMouseWheel, EventListenerProperties::kPassive); layer_tree_host()->SetEventListenerProperties( - EventListenerClass::kTouch, EventListenerProperties::kBlocking); + EventListenerClass::kTouchStartOrMove, + EventListenerProperties::kBlocking); + layer_tree_host()->SetEventListenerProperties( + EventListenerClass::kTouchEndOrCancel, + EventListenerProperties::kBlockingAndPassive); layer_tree_host()->SetHaveScrollEventHandlers(true); PostSetNeedsCommitToMainThread(); @@ -1510,7 +1514,10 @@ EventListenerClass::kMouseWheel)); EXPECT_EQ(EventListenerProperties::kBlocking, impl->active_tree()->event_listener_properties( - EventListenerClass::kTouch)); + EventListenerClass::kTouchStartOrMove)); + EXPECT_EQ(EventListenerProperties::kBlockingAndPassive, + impl->active_tree()->event_listener_properties( + EventListenerClass::kTouchEndOrCancel)); EXPECT_TRUE(impl->active_tree()->have_scroll_event_handlers()); EndTest();
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index f2c6a83..5fbc305b 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc
@@ -418,11 +418,14 @@ target_tree->set_has_transparent_background(has_transparent_background()); target_tree->set_have_scroll_event_handlers(have_scroll_event_handlers()); target_tree->set_event_listener_properties( - EventListenerClass::kTouch, - event_listener_properties(EventListenerClass::kTouch)); + EventListenerClass::kTouchStartOrMove, + event_listener_properties(EventListenerClass::kTouchStartOrMove)); target_tree->set_event_listener_properties( EventListenerClass::kMouseWheel, event_listener_properties(EventListenerClass::kMouseWheel)); + target_tree->set_event_listener_properties( + EventListenerClass::kTouchEndOrCancel, + event_listener_properties(EventListenerClass::kTouchEndOrCancel)); if (ViewportSizeInvalid()) target_tree->SetViewportSizeInvalid();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java index fa7e8fe7..89ccf368 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
@@ -1150,9 +1150,12 @@ */ void pauseDownload(String downloadGuid) { nativePauseDownload(getNativeDownloadManagerService(), downloadGuid); - // Calling pause will stop listening to the download item. Update its progress now. DownloadProgress progress = mDownloadProgressMap.get(downloadGuid); - if (progress != null) { + // Calling pause will stop listening to the download item. Update its progress now. + // If download is already completed, canceled or failed, there is no need to update the + // download notification. + if (progress != null && (progress.mDownloadStatus == DOWNLOAD_STATUS_INTERRUPTED + || progress.mDownloadStatus == DOWNLOAD_STATUS_IN_PROGRESS)) { DownloadInfo info = DownloadInfo.Builder.fromDownloadInfo( progress.mDownloadItem.getDownloadInfo()).setIsPaused(true).build(); onDownloadUpdated(info);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java index ee1cd52..3fb7a71 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/AsyncInitializationActivity.java
@@ -59,10 +59,7 @@ private NativeInitializationController mNativeInitializationController; private MemoryUma mMemoryUma; private long mLastUserInteractionTime; - private boolean mIsTablet; - private boolean mIsSmallestScreenWidthDpOverriden; - private int mSmallestScreenWidthDpOverride; public AsyncInitializationActivity() { mHandler = new Handler(); @@ -86,8 +83,6 @@ int smallestDeviceWidthDp = DeviceFormFactor.getSmallestDeviceWidthDp(this); if (smallestDeviceWidthDp >= DeviceFormFactor.MINIMUM_TABLET_WIDTH_DP) { - mIsSmallestScreenWidthDpOverriden = true; - mSmallestScreenWidthDpOverride = smallestDeviceWidthDp; Configuration overrideConfiguration = new Configuration(); overrideConfiguration.smallestScreenWidthDp = smallestDeviceWidthDp; applyOverrideConfiguration(overrideConfiguration); @@ -369,20 +364,6 @@ mLastUserInteractionTime = SystemClock.elapsedRealtime(); } - @Override - public void onConfigurationChanged(Configuration newConfig) { - // AppCompatActivity#onConfigurationChanged() updates the activity resources with the - // newConfig without taking into account the configuration override we apply in - // #onAttachBaseContext(). For now, we can work around that by setting the - // smallestScreenWidthDp on the newConfig before calling super.onConfigurationChanged(). - // See crbug.com/594540. - // TODO(twellington): Remove this once AppCompatActivity bug is fixed. - if (mIsSmallestScreenWidthDpOverriden) { - newConfig.smallestScreenWidthDp = mSmallestScreenWidthDpOverride; - } - super.onConfigurationChanged(newConfig); - } - /** * @return timestamp when the last user interaction was made. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java index e97b46e..504ebe8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -1428,6 +1428,9 @@ intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(getUrl())); intent.putExtra(IntentHandler.EXTRA_TAB_ID, mId); + if (isIncognito()) { + intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true); + } IntentHandler.addTrustedIntentExtras(intent, activity); AsyncTabParamsManager.add(mId,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java index d795155..dc43ba18 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelImpl.java
@@ -129,7 +129,9 @@ index = mOrderController.determineInsertionIndex(type, index, tab); assert index <= mTabs.size(); - assert tab.isIncognito() == isIncognito(); + if (tab.isIncognito() != isIncognito()) { + throw new IllegalStateException("Attempting to open tab in wrong model"); + } // TODO(dtrainor): Update the list of undoable tabs instead of committing it. commitAllTabClosures();
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb index dd4ecde..26cf767 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">በጭራሽ አልተቀመጠም</translation> <translation id="1061441684050139317">Chrome እሱን ለዚህ ጣቢያ ለማጋራት የማይክሮፎን መዳረሻ ያስፈልገዋል።</translation> <translation id="1080790410959514870">በ <ph name="DOMAIN_NAME" />ከሚቀናበር መለያ ዘግተው እየወጡ ነው። ይሄ በዚህ መሣሪያ ላይ የተከማቸውን የChrome ውሂብ ይሰርዘዋል፣ ነገር ግን ውሂቡ በእርስዎ የGoogle መለያ ውስጥ እንዳለ ይቀራል።</translation> -<translation id="1095407227123756519">የእርስዎን ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች በሁሉም መሣሪያዎችዎ ላይ ለማግኘት መለያ ያክሉ።</translation> <translation id="1098052486217676340">ተጠናቋል</translation> <translation id="1121094540300013208">የአጠቃቀም እና የብልሽት ሪፖርቶች</translation> <translation id="1137305377394488060">ያለፈው ሰዓት</translation> @@ -354,7 +353,6 @@ <translation id="5712189971979076230">ስንክል በሚያጋጥመዎት ማንኛውም ጊዜ ላይ ስለፋይሎች፣ መተግበሪያዎች እና እየሰሩ ስላሉ አገልግሎቶች ወደ Google መረጃ በመላክ ቅድሚያ ሰጥተን ልንሰራባቸው የሚገቡ ነገሮችን እንድንለይ እና ማሻሻያዎችን እንድናደርግ ያግዙን። የአጠቃቀም ስታትስቲክስ እንደ ምርጫዎች፣ የአዝራር ጠቅታዎች እና የማህደትውስታ ያሉ መረጃዎችን ያካትታል። የድረ-ገጽ ዩአርኤሎችን ወይም ማንኛውም የግል መረጃን አያካትቱም። የስንክል ሪፖርቶች በስንክሉ ጊዜ ያለውን የስርዓት መረጃ ይይዛሉ፣ እና በብልሽቱ ወቅት ሲደረግ በነበረው ነገር የሚወሰን ሆኖ የድረ-ገጽ ዩአርኤሎችን ወይም የግል መረጃን ሊይዙ ይችላሉ።</translation> -<translation id="5715468759630044318">መለያ ይምረጡ</translation> <translation id="5719837394786370183">ማንነት በማያሳውቁ ትሮች ላይ የሚያዩዋቸው ገጾች ሁሉንም ማንነት የማያሳውቁ ትሮችዎን ከዘጉ በኋላ በእርስዎ የአሳሽ ታሪክ፣ የኩኪ ማከማቻ ወይም የፍለጋ ታሪክ ውስጥ አይቆዩም። የሚያወርዷቸው ማንኛቸውም ፋይሎች ወይም ዕልባቶች ይቀመጣሉ። ይሁንና እርስዎ ስውር አይደሉም። ማንነት በማያሳውቅ ሁነታ ላይ መሆን የእርስዎን አሰሳ ከአሰሪዎ፣ ከበይነመረብ አገልጋይዎ ወይም ከሚጎበኟቸው ድር ጣቢያዎች አይደብቁዎውም።</translation> @@ -435,8 +433,6 @@ <translation id="6699351163704950317">ሁሉም የተቀመጡ ገጾች</translation> <translation id="6710213216561001401">ቀዳሚ</translation> <translation id="6720988912937197322">የተቀመጠ ገጽ ከመስመር ውጭ አይገኝም</translation> -<translation id="6722992508235227685">የእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች ከGoogle መለያዎ ጋር ይሠምራሉ፣ በዚህም በሁሉም መሣሪያዎችዎ ላይ ሊጠቀሙባቸው ይችላሉ። -በ<ph name="BEGIN_LINK1" />ቅንብሮች<ph name="END_LINK1" /> ውስጥ ምን ማሰመር እንደሚፈልጉ መምረጥ ይችላሉ።</translation> <translation id="6738867403308150051">በማውረድ ላይ…</translation> <translation id="6762156594045689028">ይህን ቅንብር ለመለወጥ <ph name="BEGIN_LINK" />ስምረትን ዳግም ያስጀምሩ<ph name="END_LINK" /></translation> <translation id="6770414673596662518">የChrome የጥንቃቄ አሰሳ ስርዓት ተንኮል-አዘል ገጾችን ለማወቅ እና እርስዎን ከማስገር፣ ተንኮል-አዘል ዌር እና ጎጂ ወራጆች ለመጠበቅ ስራ ላይ ይውላል።</translation> @@ -545,7 +541,6 @@ <translation id="8069239273282989646">ከእመቃ በኋላ</translation> <translation id="8073388330009372546">ምስሉን በአዲስ ትር ውስጥ ክፈት</translation> <translation id="8076014560081431679">የተቀመጡ ጣቢያ ቅንብሮች አይሰረዙም፣ እና የእርስዎን የአሰሳ ልማዶች ሊያንጸባርቁ ይችሉ ይሆናል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">ከማናቸውም መሣሪያ ላይ የእርስዎን የድር ነገሮች ለመድረስ በመለያ ይግቡ።</translation> <translation id="8087000398470557479">ይህ ይዘት ከ<ph name="DOMAIN_NAME" /> የመጣ ነው፣ የተላከው በGoogle ነው።</translation> <translation id="8098570222830891427">ከእርስዎ አቅራቢያ ያሉ መሣሪያዎች ድረ-ገጾችን በብሉቱዝ በኩል እያሰራጩ ነው። Chrome ገጾችን ይቃኝና መሣሪያዎን ሲያነቁት ገጾቹን ያሳያቸዋል። እነዚህ ገጾች የገጽ ውጤቶችን ጥራት ለማሻሻል ሲባል በGoogle አገልግሎት በኩል ያልፋሉ።
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb index 52fe2e0d..3efc438 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">لم يتم الحفظ مطلقًا</translation> <translation id="1061441684050139317">يحتاج Chrome إلى الحصول على حق الوصول إلى الميكرفون لمشاركته مع هذا الموقع.</translation> <translation id="1080790410959514870">أنت بصدد الخروج من حساب تحت إدارة <ph name="DOMAIN_NAME" />. سيؤدي هذا إلى حذف بيانات Chrome المخزنة على هذا الجهاز، إلا أن البيانات ستظل في حسابك على Google.</translation> -<translation id="1095407227123756519">أضف حسابًا للحصول على الإشارات المرجعية والسجل وكلمة المرور والإعدادات الأخرى على كل أجهزتك.</translation> <translation id="1098052486217676340">تم الانتهاء</translation> <translation id="1121094540300013208">تقارير الاستخدام والأعطال</translation> <translation id="1137305377394488060">الساعة الماضية</translation> @@ -353,7 +352,6 @@ <translation id="5712189971979076230">ساعدنا على تحديد أولوية الميزات والتحسينات التي يجب علينا العمل عليها من خلال إرسال معلومات إلى Google حول الملفات، والتطبيقات، والخدمات التي تعمل عندما تواجه عطلاً. يتضمن استخدام الإحصاءات معلومات، مثل التفضيلات، وعدد النقرات على الزر، واستخدام الذاكرة. ولا تتضمن عناوين URL لصفحات الويب أو أي معلومات شخصية. تحتوي تقارير الأعطال على معلومات النظام في وقت العطل، وقد تحتوي على عناوين URL لصفحات ويب أو معلومات شخصية، بناءً على ما كان يجري وقت حدوث العطل.</translation> -<translation id="5715468759630044318">اختر حسابًا</translation> <translation id="5719837394786370183">لن تظهر الصفحات التي تشاهدها في علامات تبويب التصفح المتخفي في سجل متصفحك ولا في وحدة تخزين ملفات تعريف الارتباط ولا في سجل البحث بعد إغلاق جميع علامات تبويب التصفح المتخفي. وستُحفظ أي ملفات تنزلها وأي علامات مرجعية تنشئها. لكنك لن تكون غير مرئي، فاستخدام وضع التصفح المتخفي لا يخفي تصفحك عن صاحب العمل أو مزود خدمة الإنترنت أو مواقع الويب التي تزورها.</translation> @@ -434,7 +432,6 @@ <translation id="6699351163704950317">جميع الصفحات التي تم حفظها</translation> <translation id="6710213216561001401">السابق</translation> <translation id="6720988912937197322">الصفحة المحفوظة غير متوفر في وضع عدم الاتصال</translation> -<translation id="6722992508235227685">ستتم مزامنة الإشارات المرجعية والسجل وكلمات المرور والإعدادات الأخرى مع حسابك في Google؛ حتى يتسنَّى لك استخدامها على جميع أجهزتك. يمكنك اختيار ما تريد مزامنته في <ph name="BEGIN_LINK1" />الإعدادات<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">جارٍ التنزيل…</translation> <translation id="6762156594045689028">لتغيير هذا الإعداد، يمكنك <ph name="BEGIN_LINK" />إعادة تعيين المزامنة<ph name="END_LINK" /></translation> <translation id="6770414673596662518">سيتم استخدام نظام التصفح الآمن من Chrome أيضًا في اكتشاف الصفحات الضارة وحمايتك من التصيّد، والبرامج الضارة، والتنزيلات التي تلحق أذى بالجهاز.</translation> @@ -545,7 +542,6 @@ <translation id="8069239273282989646">بعد الضغط</translation> <translation id="8073388330009372546">فتح الصورة بعلامة تبويب جديدة</translation> <translation id="8076014560081431679">لن يتم حذف إعدادات موقع الويب المحفوظة وقد تعكس عادات التصفح. <ph name="BEGIN_LINK" />مزيد من المعلومات<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">سجّل الدخول للوصول إلى برامج الويب من أي جهاز.</translation> <translation id="8087000398470557479">هذا المحتوى من <ph name="DOMAIN_NAME" />، وتم عرضه من قبل Google.</translation> <translation id="8098570222830891427">تبث الأجهزة المجاورة لك صفحات ويب عبر بلوتوث. سيعمل Chrome على فحص الصفحات وعرضها عند تشغيل جهازك. وستمر هذه الصفحات عبر خدمة Google لتحسين جودة نتائج الصفحات.
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb index c1a3778..c50dd18e 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Незапазвани никога</translation> <translation id="1061441684050139317">Chrome се нуждае от достъп до микрофона, за да го сподели с този сайт.</translation> <translation id="1080790410959514870">Излизате от профил, управляван от <ph name="DOMAIN_NAME" />. Съхраняваните на това устройство данни в Chrome ще се изтрият, но ще останат в профила ви в Google.</translation> -<translation id="1095407227123756519">Добавете профил, за да получите своите отметки, история, пароли и други настройки на всичките си устройства.</translation> <translation id="1098052486217676340">Завършено</translation> <translation id="1121094540300013208">Отчети за употребата и сигнали за сривове</translation> <translation id="1137305377394488060">последния час</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">В близост има уеб страници</translation> <translation id="3732088672634061408">Интересите не можаха да се извлекат.</translation> <translation id="3738139272394829648">Търсене чрез докосване</translation> +<translation id="3744111561329211289">Синхронизиране на заден план</translation> <translation id="3809549525127675114">„<ph name="VIDEO_TITLE" />“ завърши</translation> <translation id="3828029223314399057">Търсене в отметките</translation> <translation id="3871171699884605801">Историята на сърфирането в профили за деца не може да се изчиства</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Серифен</translation> <translation id="5039804452771397117">Разрешаване</translation> <translation id="5040262127954254034">Поверителност</translation> +<translation id="5056549851600133418">Статии за вас</translation> <translation id="5063480226653192405">Употреба</translation> <translation id="5100237604440890931">Свито – кликнете за разгъване.</translation> <translation id="5107381076085091558">Изтеглянето е на пауза.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Помогнете ни да разберем над кои функции и подобрения да работим първо, като изпращате до Google информация за файловете, приложенията и услугите, които се изпълняват при настъпване на срив. Статистическите данни за употребата съдържат информация като предпочитания, кликвания върху бутони и използвана памет. Те не включват URL адреси на уеб страници, нито каквато и да е лична информация. Сигналите за сривове съдържат системни данни от момента на срива и може да включват URL адреси на уеб страници или лична информация в зависимост от това, какво се е случвало по време на срива.</translation> -<translation id="5715468759630044318">Избиране на профил</translation> <translation id="5719837394786370183">След като затворите всички раздели в режим „инкогнито“, преглежданите в тях страници няма да останат в историята или хранилището за „бисквитки“ на браузъра ви, нито в историята на търсенето. Ще се запазят всички файлове, които изтеглите, или отметки, които създадете. Сърфирането ви обаче не е невидимо. При преминаване в режим „инкогнито“ то не се скрива от работодателя ви и от доставчика ви на интернет услуги, нито от уебсайтовете, които посещавате.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Всички запазени страници</translation> <translation id="6710213216561001401">Предишна</translation> <translation id="6720988912937197322">Запазената страница не е налице офлайн</translation> -<translation id="6722992508235227685">Вашите отметки, история, пароли и други настройки ще се синхронизират с профила ви в Google, за да можете да ги използвате на всичките си устройства. От <ph name="BEGIN_LINK1" />Настройки<ph name="END_LINK1" /> можете да изберете какво да се синхронизира.</translation> <translation id="6738867403308150051">Изтегля се…</translation> <translation id="6762156594045689028">За да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Системата на Chrome за безопасно сърфиране ще се използва също за откриване на злонамерени страници и за да ви защитава от фишинг, злонамерен софтуер и опасни изтегляния.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Всички отметки</translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7562080006725997899">Данните за сърфирането се изчистват</translation> +<translation id="756809126120519699">Данните в Chrome са изчистени</translation> <translation id="7588950540487816470">Физическа мрежа</translation> <translation id="7596558890252710462">Операционна система</translation> <translation id="7599840151813361502">Няма да излезете от <ph name="BEGIN_LINK" />профилите си в Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">След компресиране</translation> <translation id="8073388330009372546">Отваряне в нов раздел</translation> <translation id="8076014560081431679">Запазените настройки за сайтове няма да бъдат изтрити и може да отразяват навиците ви при сърфиране. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Влезте в профила си, за да имате достъп до всичките си неща в мрежата от всяко устройство</translation> +<translation id="8087000398470557479">Това съдържание се показва от Google, а източникът му е <ph name="DOMAIN_NAME" />.</translation> <translation id="8098570222830891427">Устройствата близо до вас излъчват уеб страници през Bluetooth. Chrome ще сканира за страници и ще ги показва, когато устройството ви излезе от спящ режим. Те ще преминават през услуга на Google с цел подобряване на качеството на съответните резултати. Можете да управлявате Физическата мрежа от настройките на Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Физическа мрежа</translation> <translation id="8941248009481596111">Връзката ви с този сайт е частна.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Отваряне в другия прозорец</translation> <translation id="8959122750345127698">Навигирането не е възможно: <ph name="URL" /></translation> <translation id="8979340629087822094">последния ден</translation> <translation id="8987061207681586800">Персонализирайте Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb index acd08cf..feebf9c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Contrasenyes que no es desen mai</translation> <translation id="1061441684050139317">Chrome necessita accés al micròfon per compartir-lo amb aquest lloc web.</translation> <translation id="1080790410959514870">Esteu tancant la sessió d'un compte que gestiona <ph name="DOMAIN_NAME" />. Aquesta acció farà que se suprimeixin les dades de Chrome emmagatzemades en aquest dispositiu, però les dades es conservaran al vostre compte de Google.</translation> -<translation id="1095407227123756519">Afegiu un compte per tenir les adreces d'interès, l'historial, les contrasenyes i altres configuracions en tots els vostres dispositius.</translation> <translation id="1098052486217676340">Finalitzat</translation> <translation id="1121094540300013208">Informes d'ús i d'error</translation> <translation id="1137305377394488060">de l'última hora</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Hi ha pàgines web a prop</translation> <translation id="3732088672634061408">No s'han pogut recuperar els interessos.</translation> <translation id="3738139272394829648">Toca per cercar</translation> +<translation id="3744111561329211289">Sincronització en segon pla</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" ha finalitzat</translation> <translation id="3828029223314399057">Cerca adreces d'interès</translation> <translation id="3871171699884605801">L'historial de navegació no es pot esborrar amb un compte infantil</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Permet</translation> <translation id="5040262127954254034">Privadesa</translation> +<translation id="5056549851600133418">Articles que us poden interessar</translation> <translation id="5063480226653192405">Ús</translation> <translation id="5100237604440890931">Vista replegada (feu clic per desplegar-la)</translation> <translation id="5107381076085091558">S'ha aturat la baixada.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Ajudeu-nos a prioritzar les funcions i les millores en les quals hem de treballar enviant a Google informació sobre els fitxers, les aplicacions i els serveis que s'executaven en el moment de l'error. Les estadístiques d'ús inclouen dades com ara les preferències, els clics en botons i l'ús de la memòria. No inclouen els URL de les pàgines web ni cap informació personal. Els informes d'error contenen informació del sistema en el moment de l'error i poden incloure els URL de pàgines web o informació personal, en funció de l'activitat registrada en el moment de l'error.</translation> -<translation id="5715468759630044318">Tria un compte</translation> <translation id="5719837394786370183">Les pàgines que visualitzeu a les pestanyes d'incògnit no quedaran registrades a l'historial del navegador, al magatzem de galetes ni a l'historial de cerca un cop tanqueu totes les pestanyes d'incògnit. Tots els fitxers que baixeu o les adreces d'interès que creeu es conservaran. Tanmateix, no sou invisible. El vostre cap, el vostre proveïdor de serveis d'Internet i els llocs web que visiteu poden veure la vostra navegació d'incògnit.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Totes les pàgines desades</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6720988912937197322">La pàgina desada no està disponible sense connexió</translation> -<translation id="6722992508235227685">Les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració se sincronitzaran amb el vostre compte de Google, perquè els pugueu utilitzar en tots els dispositius. Per triar què voleu sincronitzar, aneu a <ph name="BEGIN_LINK1" />Configuració<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Baixada en curs...</translation> <translation id="6762156594045689028">Per canviar aquesta configuració, <ph name="BEGIN_LINK" />restabliu la sincronització<ph name="END_LINK" /></translation> <translation id="6770414673596662518">El sistema de Navegació segura de Chrome també s'utilitzarà per detectar pàgines malicioses i per protegir-vos de la pesca (suplantació d'identitat), de programari maliciós i de baixades perjudicials.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Totes adreces d'interès</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">S'estan esborrant les dades de navegació</translation> +<translation id="756809126120519699">S'han esborrat les dades de Chrome</translation> <translation id="7588950540487816470">El Web físic</translation> <translation id="7596558890252710462">Sistema operatiu</translation> <translation id="7599840151813361502">No es tancarà la sessió dels <ph name="BEGIN_LINK" />comptes de Google<ph name="END_LINK" />.</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Després de la compressió</translation> <translation id="8073388330009372546">Obre en una pestanya nova</translation> <translation id="8076014560081431679">La configuració desada del lloc no se suprimirà i és possible que reflecteixi els vostres hàbits de navegació. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Inicieu la sessió per accedir a tots els vostres recursos d'Internet des de qualsevol dispositiu.</translation> +<translation id="8087000398470557479">Aquest contingut és del domini <ph name="DOMAIN_NAME" />, publicat per Google.</translation> <translation id="8098570222830891427">Hi ha dispositius a prop que estan emetent pàgines web per Bluetooth. Quan activeu el vostre dispositiu, Chrome cercarà pàgines i us les mostrarà. A més, es processaran mitjançant un servei de Google per millorar la qualitat dels resultats. Podeu controlar el Web físic a la configuració de Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + el Web físic</translation> <translation id="8941248009481596111">La vostra connexió amb aquest lloc és privada.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Obre en una altra finestra</translation> <translation id="8959122750345127698">No es pot accedir a la navegació: <ph name="URL" /></translation> <translation id="8979340629087822094">d'ahir</translation> <translation id="8987061207681586800">Personalitzar Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb index 9ec0b35..0a5a368 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nikdy se neukládají</translation> <translation id="1061441684050139317">Aby Chrome mohl s těmito webovými stránkami sdílet mikrofon, musí k němu mít přístup.</translation> <translation id="1080790410959514870">Odhlašujete se z účtu, který je spravován doménou <ph name="DOMAIN_NAME" />. Data prohlížeče Chrome uložená v tomto zařízení touto akcí smažete, avšak v účtu Google tato data zůstanou.</translation> -<translation id="1095407227123756519">Přidejte účet a synchronizujte záložky, historii, hesla a další nastavení do všech svých zařízení.</translation> <translation id="1098052486217676340">Dokončeno</translation> <translation id="1121094540300013208">Zprávy o využití a selhání</translation> <translation id="1137305377394488060">z uplynulé hodiny</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Ve vašem okolí jsou webové stránky</translation> <translation id="3732088672634061408">Zájmy nelze načíst.</translation> <translation id="3738139272394829648">Vyhledání klepnutím</translation> +<translation id="3744111561329211289">Synchronizace na pozadí</translation> <translation id="3809549525127675114">Dokončeno přehrávání videa <ph name="VIDEO_TITLE" /></translation> <translation id="3828029223314399057">Hledat v záložkách</translation> <translation id="3871171699884605801">Pomocí účtů pro děti historii procházení vymazat nelze.</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Patková</translation> <translation id="5039804452771397117">Povolit</translation> <translation id="5040262127954254034">Ochrana soukromí</translation> +<translation id="5056549851600133418">Články pro vás</translation> <translation id="5063480226653192405">Použití</translation> <translation id="5100237604440890931">Sbaleno – kliknutím rozbalíte</translation> <translation id="5107381076085091558">Stahování bylo pozastaveno.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Pomozte nám upřednostnit funkce a vylepšení, na kterých bychom měli pracovat. Odesílejte do Googlu informace o souborech, aplikacích a službách spuštěných při selhání. Statistiky využití obsahují informace, jako jsou předvolby, kliknutí na tlačítka a využití paměti. Neobsahují adresy URL webových stránek ani žádné osobní údaje. Zprávy o selhání obsahují informace o systému v době selhání a mohou obsahovat adresy URL webových stránek nebo osobní údaje (v závislosti na činnosti, kterou jste v době selhání právě prováděli).</translation> -<translation id="5715468759630044318">Zvolit účet</translation> <translation id="5719837394786370183">Stránky, které otevřete na anonymních kartách, po zavření všech anonymních karet nezanechají žádné stopy v historii prohlížeče, v úložišti souborů cookie ani v historii vyhledávání. Všechny stažené soubory a vytvořené záložky však zůstanou zachovány. Nejste však neviditelní. Anonymní režim neskryje vaši aktivitu před zaměstnavatelem, poskytovatelem internetových služeb ani webovými stránkami, které navštívíte.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Všechny uložené stránky</translation> <translation id="6710213216561001401">Předchozí</translation> <translation id="6720988912937197322">Uložená stránka není k dispozici offline</translation> -<translation id="6722992508235227685">Vaše záložky, historie, hesla a další nastavení budou synchronizována do účtu Google, abyste je mohli používat ve všech svých zařízeních. Položky, které chcete synchronizovat, můžete vybrat v <ph name="BEGIN_LINK1" />Nastavení<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Stahování…</translation> <translation id="6762156594045689028">Chcete-li toto nastavení změnit, <ph name="BEGIN_LINK" />resetujte synchronizaci<ph name="END_LINK" />.</translation> <translation id="6770414673596662518">Chrome bude také používat systém Bezpečné prohlížení, který umožňuje zjistit škodlivé stránky a ochránit vás před phishingem, malwarem a škodlivými soubory ke stažení.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Všechny záložky</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Mazání údajů o prohlížení</translation> +<translation id="756809126120519699">Vymazání údajů Chromu</translation> <translation id="7588950540487816470">Fyzický web</translation> <translation id="7596558890252710462">Operační systém</translation> <translation id="7599840151813361502">Od svých <ph name="BEGIN_LINK" />účtů Google<ph name="END_LINK" /> nebudete odhlášeni</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Po kompresi</translation> <translation id="8073388330009372546">Otevřít na nové kartě</translation> <translation id="8076014560081431679">Uložená nastavení webů nebudou smazána a mohou vypovídat o vašich zvycích při prohlížení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Chcete-li mít přístup k webovému obsahu ve všech zařízeních, přihlaste se.</translation> +<translation id="8087000398470557479">Tento obsah pochází z domény <ph name="DOMAIN_NAME" />. Poskytováno společností Google.</translation> <translation id="8098570222830891427">Zařízení v okolí vysílají webové stránky přes Bluetooth. Když zařízení probudíte z režimu spánku, Chrome tyto stránky vyhledá a zobrazí. Stránky budou za účelem zlepšení kvality zpracovány službou Google. Fyzický web můžete ovládat v nastavení Chromu.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + fyzický web</translation> <translation id="8941248009481596111">Spojení s tímto webem je soukromé.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Otevřít v jiném okně</translation> <translation id="8959122750345127698">Navigace není dosažitelná: <ph name="URL" /></translation> <translation id="8979340629087822094">z uplynulého dne</translation> <translation id="8987061207681586800">Přizpůsobte si Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb index a6e93c19..e33a1648 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Aldrig gemt</translation> <translation id="1061441684050139317">Chrome skal have adgang til mikrofonen for at kunne dele den med dette website.</translation> <translation id="1080790410959514870">Du er ved at logge ud af en konto, der administreres af <ph name="DOMAIN_NAME" />. Dette medfører sletning af de Chrome-data, der er gemt på denne enhed, men dataene forbliver på din Google-konto.</translation> -<translation id="1095407227123756519">Tilføj en konto for at få adgang til bogmærker, historik og andre indstillinger på alle dine enheder.</translation> <translation id="1098052486217676340">Afsluttet</translation> <translation id="1121094540300013208">Forbrugs- og nedbrudsrapporter</translation> <translation id="1137305377394488060">den seneste time</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Der er websider i nærheden</translation> <translation id="3732088672634061408">Interesser kunne ikke hentes.</translation> <translation id="3738139272394829648">Tryk for at søge</translation> +<translation id="3744111561329211289">Synkronisering i baggrunden</translation> <translation id="3809549525127675114">Afspilningen af "<ph name="VIDEO_TITLE" />" er slut</translation> <translation id="3828029223314399057">Søg i bogmærker</translation> <translation id="3871171699884605801">Browserhistorikken kan ikke ryddes på børnekonti</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Tillad</translation> <translation id="5040262127954254034">Beskyttelse af personlige oplysninger</translation> +<translation id="5056549851600133418">Artikler til dig</translation> <translation id="5063480226653192405">Forbrug</translation> <translation id="5100237604440890931">Skjult – klik for at udvide.</translation> <translation id="5107381076085091558">Downloaden er sat på pause.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Hjælp os med at prioritere de funktioner og forbedringer, vi bør arbejde på, ved at sende oplysninger til Google om, hvilke filer, applikationer og tjenester, der kører, når du oplever nedbrud. Brugsstatistik indeholder oplysninger, såsom præferencer, antal klik på en knap og hukommelsesforbrug. De omfatter ikke webadresser eller personlige oplysninger. Nedbrudsrapporter indeholder systemoplysninger på tidspunktet for nedbruddet og kan indeholde webadresser eller personlige oplysninger, afhængigt af hvad der skete på tidspunktet for nedbruddet.</translation> -<translation id="5715468759630044318">Vælg konto</translation> <translation id="5719837394786370183">De sider, du ser på inkognitofaner, gemmes ikke i browserhistorikken, cookielageret eller søgehistorikken, når du har lukket alle dine inkognitofaner. Alle de filer, du downloader, eller bogmærker, du opretter, vil blive gemt. Du er dog ikke usynlig. Inkognitotilstanden skjuler ikke dine søgninger fra din arbejdsgiver, din internetudbyder eller de websites, du besøger.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Alle gemte sider</translation> <translation id="6710213216561001401">Forrige</translation> <translation id="6720988912937197322">Den gemte side er ikke tilgængelig offline</translation> -<translation id="6722992508235227685">Dine bogmærker, din historik, dine adgangskoder og andre indstillinger synkroniseres til din Google-konto, så du kan bruge dem på alle dine enheder. Du kan vælge, hvad der skal synkroniseres, under <ph name="BEGIN_LINK1" />Indstillinger<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Downloader…</translation> <translation id="6762156594045689028">Hvis du vil ændre denne indstilling, skal du <ph name="BEGIN_LINK" />nulstille synkroniseringen<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Systemet Beskyttet browsing i Chrome anvendes også til at registrere skadelige sider og beskytte dig mod phishing, malware og skadelige downloads.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Alle bogmærker</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Browserdata ryddes</translation> +<translation id="756809126120519699">Chrome-dataene blev ryddet</translation> <translation id="7588950540487816470">Fysisk web</translation> <translation id="7596558890252710462">Operativsystem</translation> <translation id="7599840151813361502">Du bliver ikke logget ud af dine <ph name="BEGIN_LINK" />Google-konti<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Efter komprimering</translation> <translation id="8073388330009372546">Åbn billede på ny fane</translation> <translation id="8076014560081431679">Gemte websiteindstillinger slettes ikke og kan afspejle dine søgevaner. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Log ind for at få adgang til alle dine webting fra en enhver enhed</translation> +<translation id="8087000398470557479">Dette indhold er fra <ph name="DOMAIN_NAME" />, som leveres af Google.</translation> <translation id="8098570222830891427">Der er enheder i nærheden, som udsender websider via Bluetooth. Chrome scanner efter disse sider og viser dem, når du starter din enhed. Siderne går gennem en Google-tjeneste for at forbedre kvaliteten af sideresultaterne. Du kan kontrollere Fysisk web i Chrome-indstillingerne.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome og Fysisk web</translation> <translation id="8941248009481596111">Din forbindelse til dette website er privat.</translation> <translation id="8941729603749328384">www.eksempel.com</translation> +<translation id="8942627711005830162">Åbn i et andet vindue</translation> <translation id="8959122750345127698">Navigationen er ikke mulig: <ph name="URL" /></translation> <translation id="8979340629087822094">det seneste døgn</translation> <translation id="8987061207681586800">Gør Chrome til dit eget</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb index 6ee16ac..ced5758 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nie speichern für...</translation> <translation id="1061441684050139317">Chrome benötigt Zugriff auf das Mikrofon, um es für diese Website freizugeben.</translation> <translation id="1080790410959514870">Sie melden sich von einem Konto ab, das von <ph name="DOMAIN_NAME" /> verwaltet wird. Dadurch werden die auf diesem Gerät gespeicherten Chrome-Daten gelöscht. Die Daten verbleiben jedoch weiterhin in Ihrem Google-Konto.</translation> -<translation id="1095407227123756519">Fügen Sie ein Konto hinzu, um Ihre Lesezeichen, Ihren Verlauf, Ihre Passwörter und andere Einstellungen auf allen Ihren Geräten abzurufen.</translation> <translation id="1098052486217676340">Fertig</translation> <translation id="1121094540300013208">Nutzungs- und Absturzberichte</translation> <translation id="1137305377394488060">für die letzte Stunde</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Webseiten in der Nähe vorhanden</translation> <translation id="3732088672634061408">Interessen konnten nicht abgerufen werden.</translation> <translation id="3738139272394829648">Zum Suchen tippen</translation> +<translation id="3744111561329211289">Hintergrundsynchronisierung</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" vollständig abgespielt</translation> <translation id="3828029223314399057">In Lesezeichen suchen</translation> <translation id="3871171699884605801">Der Browserverlauf kann nicht über ein Kinderkonto gelöscht werden.</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serifenschrift</translation> <translation id="5039804452771397117">Zulassen</translation> <translation id="5040262127954254034">Datenschutz</translation> +<translation id="5056549851600133418">Artikel für Sie</translation> <translation id="5063480226653192405">Verwendung</translation> <translation id="5100237604440890931">Minimiert – zum Maximieren klicken</translation> <translation id="5107381076085091558">Download angehalten.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Helfen Sie uns dabei, den Funktionen und Verbesserungen Priorität einzuräumen, die Ihnen wichtig sind, indem Sie Informationen über die Dateien, Anwendungen und Dienste, die zum Zeitpunkt eines Absturzes ausgeführt wurden, an Google senden. Nutzungsstatistiken enthalten Informationen wie Einstellungen, Klicks auf Schaltflächen und Speicherauslastung. URLs von Webseiten oder personenbezogene Daten sind darin nicht enthalten. Absturzberichte enthalten Systeminformationen zum Zeitpunkt des Absturzes. Je nachdem, was zu diesem Zeitpunkt gerade geschah, können auch URLs von Webseiten oder personenbezogene Daten erfasst werden.</translation> -<translation id="5715468759630044318">Konto auswählen</translation> <translation id="5719837394786370183">Seiten, die Sie sich auf Inkognito-Tabs ansehen, werden nach dem Schließen aller Inkognito-Tabs nicht in Ihrem Browserverlauf, Cookie-Speicher oder Suchverlauf gespeichert. Ihre Lesezeichen und Ihre heruntergeladenen Dateien bleiben erhalten. Sie sind jedoch nicht unsichtbar. Der Inkognitomodus verhindert nicht, dass Informationen zu Ihren Webaktivitäten von Ihrem Arbeitgeber oder Ihrem Internetanbieter erfasst werden. Zudem verzeichnen auch die Websites, die Sie im Inkognitomodus aufrufen, weiterhin Ihren Besuch.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Alle gespeicherten Seiten</translation> <translation id="6710213216561001401">Zurück</translation> <translation id="6720988912937197322">Gespeicherte Seite nicht offline verfügbar</translation> -<translation id="6722992508235227685">Lesezeichen, Verlauf, Passwörter und andere Einstellungen werden mit Ihrem Google-Konto synchronisiert, damit Sie diese auf allen Ihren Geräten nutzen können. Unter <ph name="BEGIN_LINK1" />Einstellungen<ph name="END_LINK1" /> können Sie festlegen, welche Daten synchronisiert werden sollen.</translation> <translation id="6738867403308150051">Wird heruntergeladen...</translation> <translation id="6762156594045689028">Wenn Sie diese Einstellung ändern möchten, <ph name="BEGIN_LINK" />setzen Sie die Synchronisierung zurück<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Das Safe Browsing-System von Chrome erkennt außerdem schädliche Seiten und schützt Sie vor Phishing, Malware und schädlichen Downloads.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Alle Lesezeichen</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Browserdaten werden gelöscht</translation> +<translation id="756809126120519699">Gelöschte Chrome-Daten</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7596558890252710462">Betriebssystem</translation> <translation id="7599840151813361502">Sie werden nicht von Ihren <ph name="BEGIN_LINK" />Google-Konten<ph name="END_LINK" /> abgemeldet.</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Nach Komprimierung</translation> <translation id="8073388330009372546">Bild in neuem Tab öffnen</translation> <translation id="8076014560081431679">Gespeicherte Website-Einstellungen werden nicht gelöscht und können möglicherweise Ihre Surfgewohnheiten wiedergeben. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Melden Sie sich an, um von jedem beliebigen Gerät aus auf Ihre Webinhalte zuzugreifen.</translation> +<translation id="8087000398470557479">Dieser Inhalt ist von <ph name="DOMAIN_NAME" /> und wurde von Google bereitgestellt.</translation> <translation id="8098570222830891427">Geräte in Ihrer Nähe übertragen Webseiten über Bluetooth. Chrome sucht nach Seiten und zeigt Sie Ihnen an, wenn Ihr Gerät entsperrt ist. Diese Seiten werden durch einen Google-Dienst überprüft, um die Qualität der Suchergebnisse zu verbessern. Über die Chrome-Einstellungen können Sie das Physical Web verwalten.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Physical Web</translation> <translation id="8941248009481596111">Ihre Verbindung zu dieser Website ist privat.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">In anderem Fenster öffnen</translation> <translation id="8959122750345127698">Navigation nicht möglich: <ph name="URL" /> ist nicht erreichbar.</translation> <translation id="8979340629087822094">für den letzten Tag</translation> <translation id="8987061207681586800">Chrome personalisieren</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb index 9a3662af..e0db5597 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Δεν έχει αποθηκευθεί ποτέ</translation> <translation id="1061441684050139317">Το Chrome χρειάζεται πρόσβαση στο μικρόφωνο προκειμένου να το μοιραστεί με αυτόν τον ιστότοπο.</translation> <translation id="1080790410959514870">Πρόκειται να αποσυνδεθείτε από έναν λογαριασμό που τελεί υπό τη διαχείριση του <ph name="DOMAIN_NAME" />. Με αυτόν τον τρόπο θα διαγραφούν τα δεδομένα του Chrome που είναι αποθηκευμένα σε αυτήν τη συσκευή, αλλά τα δεδομένα θα διατηρηθούν στο Λογαριασμό σας Google.</translation> -<translation id="1095407227123756519">Προσθέστε έναν λογαριασμό για τη λήψη όλων των σελιδοδεικτών, του ιστορικού, των κωδικών πρόσβασης και των άλλων ρυθμίσεων σε όλες τις συσκευές σας.</translation> <translation id="1098052486217676340">Ολοκληρώθηκε</translation> <translation id="1121094540300013208">Αναφορές χρήσης και σφαλμάτων</translation> <translation id="1137305377394488060">τελευταία ώρα</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Υπάρχουν κοντινές ιστοσελίδες</translation> <translation id="3732088672634061408">Δεν ήταν δυνατή η ανάκτηση ενδιαφερόντων.</translation> <translation id="3738139272394829648">Αγγίξτε για αναζήτηση</translation> +<translation id="3744111561329211289">Συγχρονισμός παρασκηνίου</translation> <translation id="3809549525127675114">Ολοκληρώθηκε "<ph name="VIDEO_TITLE" />"</translation> <translation id="3828029223314399057">Αναζήτηση σελιδοδεικτών</translation> <translation id="3871171699884605801">Δεν είναι δυνατή η εκκαθάριση του ιστορικού περιήγησης για παιδικούς λογαριασμούς</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Επιτρέπεται</translation> <translation id="5040262127954254034">Απόρρητο</translation> +<translation id="5056549851600133418">Άρθρα για εσάς</translation> <translation id="5063480226653192405">Χρήση</translation> <translation id="5100237604440890931">Συμπτυγμένη - Κάντε κλικ για ανάπτυξη</translation> <translation id="5107381076085091558">Η λήψη τέθηκε σε παύση.</translation> @@ -353,7 +354,6 @@ <translation id="5712189971979076230">Βοηθήστε μας να ορίσουμε προτεραιότητες στις λειτουργίες και τις βελτιώσεις, πάνω στις οποίες πρέπει να εργαστούμε, αποστέλλοντας στην Google πληροφορίες σχετικά με τα αρχεία, τις εφαρμογές και τις υπηρεσίες που εκτελούνται κάθε φορά που προκύπτει κάποιο σφάλμα. Τα στατιστικά χρήσης περιλαμβάνουν πληροφορίες όπως οι προτιμήσεις, τα κλικ κουμπιών και η χρήση της μνήμης. Αυτές δεν περιλαμβάνουν διευθύνσεις URL ιστοσελίδων ή προσωπικές πληροφορίες. Οι αναφορές σφαλμάτων περιέχουν πληροφορίες συστήματος για τη χρονική στιγμή που παρουσιάστηκε το σφάλμα και ενδέχεται να περιλαμβάνουν διευθύνσεις URL ιστοσελίδων ή προσωπικές πληροφορίες, ανάλογα με το τι συνέβαινε στον υπολογιστή τη χρονική στιγμή που παρουσιάστηκε το σφάλμα.</translation> -<translation id="5715468759630044318">Επιλέξτε λογαριασμό</translation> <translation id="5719837394786370183">Οι σελίδες που προβάλετε στις καρτέλες της ανώνυμης περιήγησης δεν διατηρούνται στο ιστορικό του προγράμματος περιήγησής σας, στα cookie ή στο ιστορικό αναζήτησης, αφού κλείσετε όλες τις καρτέλες της ανώνυμης περιήγησης. Τα αρχεία που κατεβάζετε ή οι σελιδοδείκτες που δημιουργείτε θα διατηρηθούν. Ωστόσο, δεν είστε αόρατοι. Με την ανώνυμη περιήγηση δεν γίνεται απόκρυψη της περιήγησής σας από τον εργοδότη σας, τον παροχέα υπηρεσιών διαδικτύου ή τους ιστότοπους που επισκέπτεστε.</translation> @@ -434,7 +434,6 @@ <translation id="6699351163704950317">Όλες οι αποθηκευμένες σελίδες</translation> <translation id="6710213216561001401">Προηγούμενο</translation> <translation id="6720988912937197322">Η αποθηκευμένη σελίδα δεν είναι διαθέσιμη εκτός σύνδεσης</translation> -<translation id="6722992508235227685">Οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις θα συγχρονιστούν με το Λογαριασμό σας Google, για να μπορείτε να τις χρησιμοποιείτε σε όλες τις συσκευές σας. Μπορείτε να επιλέξετε τα στοιχεία που θέλετε να συγχρονιστούν από τις <ph name="BEGIN_LINK1" />Ρυθμίσεις<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Λήψη…</translation> <translation id="6762156594045689028">Για να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />επαναφέρετε το συγχρονισμό<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Το σύστημα ασφαλούς περιήγησης του Chrome μπορεί να χρησιμοποιηθεί επίσης για τον εντοπισμό κακόβουλων σελίδων και την προστασία σας από ηλεκτρονικό "ψάρεμα" (phishing), κακόβουλα προγράμματα (malware) και επιβλαβείς λήψεις.</translation> @@ -501,6 +500,7 @@ <translation id="7501135638693251872">Όλοι οι σελιδοδείκτες</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Εκκαθάριση δεδομένων περιήγησης</translation> +<translation id="756809126120519699">Τα δεδομένα του Chrome διαγράφηκαν</translation> <translation id="7588950540487816470">Φυσικό δίκτυο</translation> <translation id="7596558890252710462">Λειτουργικό σύστημα</translation> <translation id="7599840151813361502">Δεν θα αποσυνδεθείτε από τους <ph name="BEGIN_LINK" />Λογαριασμούς Google<ph name="END_LINK" /></translation> @@ -544,7 +544,7 @@ <translation id="8069239273282989646">Μετά τη συμπίεση</translation> <translation id="8073388330009372546">Άνοιγμα εικόνας σε νέα καρτέλα</translation> <translation id="8076014560081431679">Οι αποθηκευμένες ρυθμίσεις ιστότοπου δεν θα διαγραφούν και ενδέχεται να υποδεικνύουν τις συνήθειες περιήγησής σας. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Συνδεθείτε για να αποκτήσετε πρόσβαση σε όλο το περιεχόμενό σας στον Ιστό, από οποιαδήποτε συσκευή</translation> +<translation id="8087000398470557479">Αυτό το περιεχόμενο προέρχεται από το <ph name="DOMAIN_NAME" /> και παρέχεται από την Google.</translation> <translation id="8098570222830891427">Οι συσκευές που βρίσκονται κοντά σας μεταδίδουν ιστοσελίδες μέσω Bluetooth. Το Chrome θα σαρώσει τις κοντινές σελίδες και θα τις εμφανίσει μόλις ενεργοποιήσετε τη συσκευή σας. Αυτές οι σελίδες θα περάσουν από μια υπηρεσία Google για τη βελτίωση της ποιότητας των αποτελεσμάτων σελίδων. Μπορείτε να ελέγξετε τη λειτουργία του Φυσικού δικτύου από τις Ρυθμίσεις του Chrome.</translation> @@ -610,6 +610,7 @@ <translation id="8931159598799892500">Chrome + Φυσικό δίκτυο</translation> <translation id="8941248009481596111">Η σύνδεσή σας σε αυτόν τον ιστότοπο είναι ιδιωτική.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Άνοιγμα σε άλλο παράθυρο</translation> <translation id="8959122750345127698">Δεν είναι δυνατή η μετάβαση στη διεύθυνση: <ph name="URL" /></translation> <translation id="8979340629087822094">τελευταία ημέρα</translation> <translation id="8987061207681586800">Εξατομικεύστε το Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb index 7bd9ea22..e1766b9 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Never saved</translation> <translation id="1061441684050139317">Chrome needs microphone access to share it with this site.</translation> <translation id="1080790410959514870">You are signing out of an account managed by <ph name="DOMAIN_NAME" />. This will delete the Chrome data stored on this device, but the data will remain in your Google Account.</translation> -<translation id="1095407227123756519">Add an account to get your bookmarks, history, passwords and other settings on all your devices.</translation> <translation id="1098052486217676340">Finished</translation> <translation id="1121094540300013208">Usage and crash reports</translation> <translation id="1137305377394488060">past hour</translation> @@ -354,7 +353,6 @@ <translation id="5712189971979076230">Help us to prioritise the features and improvements that we should work on by sending Google information about the files, applications and services running whenever you experience a crash. Usage statistics include information such as preferences, button clicks and memory usage. They do not include web page URLs or any personal information. Crash reports contain system information at the time of the crash, and may contain web page URLs or personal information, depending on what was happening at the time of the crash.</translation> -<translation id="5715468759630044318">Choose account</translation> <translation id="5719837394786370183">Pages that you view in incognito tabs won’t stick around in your browser’s history, cookie store or search history after you've closed all of your incognito tabs. Any files that you download or bookmarks that you create will be kept. However, you aren't invisible. Going incognito doesn't hide your browsing from your employer, your Internet service provider or the websites you visit.</translation> @@ -435,7 +433,6 @@ <translation id="6699351163704950317">All saved pages</translation> <translation id="6710213216561001401">Previous</translation> <translation id="6720988912937197322">Saved page not available offline</translation> -<translation id="6722992508235227685">Your bookmarks, history, passwords and other settings will be synced to your Google Account so that you can use them on all your devices. You can choose what to sync in <ph name="BEGIN_LINK1" />Settings<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Downloading…</translation> <translation id="6762156594045689028">To change this setting, <ph name="BEGIN_LINK" />reset sync<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chrome’s Safe Browsing system will also be used to detect malicious pages and protect you from phishing, malware and harmful downloads.</translation> @@ -546,7 +543,6 @@ <translation id="8069239273282989646">After compression</translation> <translation id="8073388330009372546">Open image in new tab</translation> <translation id="8076014560081431679">Saved site settings will not be deleted and may reflect your browsing habits. <ph name="BEGIN_LINK" />Find out more<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Sign in to access all your web stuff from any device</translation> <translation id="8087000398470557479">This content is from <ph name="DOMAIN_NAME" />, delivered by Google.</translation> <translation id="8098570222830891427">Devices near to you are broadcasting web pages over Bluetooth. Chrome will scan for pages and display them when you wake up your device. These pages will go through a Google service to improve the quality of page results.
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb index 1baafe5..7d69d68 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nunca guardado</translation> <translation id="1061441684050139317">Chrome necesita acceso al micrófono para compartirlo con este sitio.</translation> <translation id="1080790410959514870">Saldrás de una cuenta administrada por <ph name="DOMAIN_NAME" />. Esta acción eliminará los datos de Chrome almacenados en este dispositivo, aunque estos se mantendrán en la cuenta de Google.</translation> -<translation id="1095407227123756519">Permite agregar una cuenta para ver los marcadores, el historial, las contraseñas y otras opciones de configuración en todos los dispositivos.</translation> <translation id="1098052486217676340">Finalizado</translation> <translation id="1121094540300013208">Informes de uso y de fallos</translation> <translation id="1137305377394488060">hace una hora</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Páginas web cercanas</translation> <translation id="3732088672634061408">No se pudieron recuperar los intereses.</translation> <translation id="3738139272394829648">Tocar para buscar</translation> +<translation id="3744111561329211289">Sincronización en segundo plano</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" finalizado</translation> <translation id="3828029223314399057">Buscar marcadores</translation> <translation id="3871171699884605801">No se puede borrar el historial de navegación en las cuentas para niños</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidad</translation> +<translation id="5056549851600133418">Artículos para ti</translation> <translation id="5063480226653192405">Uso</translation> <translation id="5100237604440890931">Contraído; haz clic para expandir.</translation> <translation id="5107381076085091558">Descarga en pausa</translation> @@ -353,7 +354,6 @@ <translation id="5712189971979076230">Ayúdanos a establecer prioridades entre las características y las mejoras en las que debemos trabajar: envía información a Google acerca de los archivos, las aplicaciones y los servicios en ejecución cuando se produce un bloqueo. Las estadísticas de uso incluyen información, como las preferencias, los clics en los botones y el uso de memoria. No se incluyen las URL de las páginas web ni ninguna información personal. Los informes de fallos incluyen la información del sistema en el momento del bloqueo y podrían contener URL de páginas web o información personal, según lo que haya ocurrido en el momento del bloqueo.</translation> -<translation id="5715468759630044318">Seleccionar una cuenta</translation> <translation id="5719837394786370183">Una vez que cierres todas las pestañas de incógnito, los datos de las páginas que hayas visitado en ese modo no se guardarán en el historial del navegador, en la lista de cookies ni en el historial de búsquedas. Sí se guardarán los archivos que descargues y los marcadores que crees. Sin embargo, no vas a pasar completamente desapercibido. El modo de navegación de incógnito no oculta tu información de navegación de un empleador, del proveedor de servicios de Internet ni de los sitios web que visitas.</translation> @@ -434,7 +434,6 @@ <translation id="6699351163704950317">Todas las páginas guardadas</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6720988912937197322">La página guardada no está disponible sin conexión.</translation> -<translation id="6722992508235227685">Tus marcadores, el historial, las contraseñas y otras opciones de configuración se sincronizarán con tu cuenta de Google para que puedas utilizarlos en todos tus dispositivos. Puedes elegir qué sincronizar en <ph name="BEGIN_LINK1" />Configuración<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Descargando…</translation> <translation id="6762156594045689028">Para cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /></translation> <translation id="6770414673596662518">El sistema de navegación segura de Chrome también se puede utilizar para detectar páginas maliciosas y protegerte de la suplantación de identidad (phishing), el software malicioso y las descargas peligrosas.</translation> @@ -501,6 +500,7 @@ <translation id="7501135638693251872">Todos los marcadores</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Borrando datos de navegación</translation> +<translation id="756809126120519699">Datos de Chrome borrados</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7596558890252710462">Sistema operativo</translation> <translation id="7599840151813361502">No saldrás de tus <ph name="BEGIN_LINK" />Cuentas de Google<ph name="END_LINK" /></translation> @@ -544,7 +544,7 @@ <translation id="8069239273282989646">Poscompresión</translation> <translation id="8073388330009372546">Abrir imagen en pestaña nueva</translation> <translation id="8076014560081431679">Las opciones de configuración de sitios guardadas no se borrarán y es posible que reflejen tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Accede a tu cuenta para ver tu contenido web en cualquier dispositivo.</translation> +<translation id="8087000398470557479">Este contenido es de <ph name="DOMAIN_NAME" />, publicado por Google.</translation> <translation id="8098570222830891427">Los dispositivos cercanos están transmitiendo páginas web a través de Bluetooth. Chrome buscará páginas y las mostrará cuando actives tu dispositivo. Estas páginas pasarán por un servicio de Google que mejorará la calidad de los resultados. Puedes controlar la Web física desde la configuración de Chrome.</translation> @@ -610,6 +610,7 @@ <translation id="8931159598799892500">Chrome + Web física</translation> <translation id="8941248009481596111">Tu conexión con este sitio es privada.</translation> <translation id="8941729603749328384">www.ejemplo.com</translation> +<translation id="8942627711005830162">Abrir en otra ventana</translation> <translation id="8959122750345127698">Navegación inaccesible: <ph name="URL" /></translation> <translation id="8979340629087822094">ayer</translation> <translation id="8987061207681586800">Personaliza Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb index 8f77d42..f24bcc98 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Contraseñas que nunca se guardan</translation> <translation id="1061441684050139317">Chrome necesita acceder al micrófono para compartirlo con este sitio web.</translation> <translation id="1080790410959514870">Vas a salir de una cuenta administrada por <ph name="DOMAIN_NAME" />. Se eliminarán los datos de Chrome almacenados en este dispositivo, pero los datos permanecerán en tu cuenta de Google.</translation> -<translation id="1095407227123756519">Añade una cuenta para ver tus marcadores, tu historial, tus contraseñas y otras opciones en todos tus dispositivos.</translation> <translation id="1098052486217676340">Finalizado</translation> <translation id="1121094540300013208">Informes de uso y sobre fallos</translation> <translation id="1137305377394488060">última hora</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Hay páginas web cercanas</translation> <translation id="3732088672634061408">No se han podido recuperar los intereses.</translation> <translation id="3738139272394829648">Tocar para buscar</translation> +<translation id="3744111561329211289">Sincronización en segundo plano</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" ha finalizado</translation> <translation id="3828029223314399057">Buscar marcadores</translation> <translation id="3871171699884605801">El historial de navegación no se puede borrar con cuentas infantiles</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidad</translation> +<translation id="5056549851600133418">Artículos recomendados</translation> <translation id="5063480226653192405">Uso</translation> <translation id="5100237604440890931">Contraído (hacer clic para ampliar)</translation> <translation id="5107381076085091558">Se ha pausado la descarga.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Ayúdanos a priorizar las funciones y las mejoras en las que debemos trabajar enviando información a Google sobre los archivos, las aplicaciones y los servicios utilizados cuando se produce un error. Las estadísticas de uso incluyen información sobre preferencias, clics en botones, uso de memoria y otros datos. No incluyen las URL de páginas web ni información personal. Los informes sobre fallos contienen información del sistema en el momento del error y pueden incluir las URL de páginas web o información personal (según lo que haya sucedido en el momento del fallo).</translation> -<translation id="5715468759630044318">Seleccionar cuenta</translation> <translation id="5719837394786370183">Las páginas que visites a través de las pestañas de incógnito no se mostrarán en el historial del navegador, en el almacén de cookies ni en el historial de búsquedas una vez que cierres todas las pestañas de incógnito. Sí se conservarán los archivos que descargues y los marcadores que crees. No obstante, tus acciones no serán totalmente invisibles. El uso del modo incógnito no te permite ocultar tu actividad de navegación a tu empresa, a tu proveedor de servicios de Internet o a los sitios web que visites.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Todas las páginas guardadas</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6720988912937197322">La página guardada no está disponible sin conexión</translation> -<translation id="6722992508235227685">Tus marcadores, tu historial, tus contraseñas y otros ajustes se sincronizarán con tu cuenta de Google para que puedas utilizarlos en todos tus dispositivos. Puedes elegir lo que quieras que se sincronice en <ph name="BEGIN_LINK1" />Configuración<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Descargando…</translation> <translation id="6762156594045689028">Para cambiar esta opción, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /></translation> <translation id="6770414673596662518">El sistema de navegación segura de Chrome también se utilizará para detectar páginas maliciosas y para proteger al usuario de la suplantación de identidad, del software malicioso y de las descargas peligrosas.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Todos los marcadores</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Borrando datos de navegación</translation> +<translation id="756809126120519699">Datos de Chrome borrados</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7596558890252710462">Sistema operativo</translation> <translation id="7599840151813361502">No se cerrará la sesión en tus <ph name="BEGIN_LINK" />cuentas de Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Después de comprimir</translation> <translation id="8073388330009372546">Abrir en pestaña nueva</translation> <translation id="8076014560081431679">No se eliminará la configuración guardada de los sitios web, lo cual puede reflejar tus hábitos de navegación. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Inicia sesión para acceder a todo tu contenido web desde cualquier dispositivo</translation> +<translation id="8087000398470557479">Este contenido procede de <ph name="DOMAIN_NAME" />, publicado por Google.</translation> <translation id="8098570222830891427">Dispositivos cercanos con los que transmites páginas web por Bluetooth. Chrome busca páginas y las muestra cuando activas el dispositivo. Estas páginas se envían a un servicio de Google para mejorar la calidad de los resultados de páginas. Puedes controlar la Web física en la configuración de privacidad de Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Web física</translation> <translation id="8941248009481596111">Tu conexión con este sitio es privada.</translation> <translation id="8941729603749328384">www.ejemplo.com</translation> +<translation id="8942627711005830162">Abrir en otra ventana</translation> <translation id="8959122750345127698">No se puede realizar la navegación: <ph name="URL" /></translation> <translation id="8979340629087822094">último día</translation> <translation id="8987061207681586800">Personaliza Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb index 0dcca43..d85269c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">هرگز ذخیره نمیشود</translation> <translation id="1061441684050139317">Chrome باید به میکروفون دسترسی داشته باشد تا آن را با این سایت به اشتراک بگذارد.</translation> <translation id="1080790410959514870">در حال خروج از حسابی هستید که توسط <ph name="DOMAIN_NAME" /> مدیریت میشود. این کار دادههای Chrome ذخیره شده در این دستگاه را حذف خواهد کرد، اما دادهها در حساب Google شما باقی خواهد ماند.</translation> -<translation id="1095407227123756519">یک حساب اضافه کنید تا نشانکها، سابقه و گذرواژهها و سایر تنظیماتتان را در همه دستگاههایتان، دریافت کنید.</translation> <translation id="1098052486217676340">پایان یافت</translation> <translation id="1121094540300013208">آمار استفاده و گزارشهای خرابی</translation> <translation id="1137305377394488060">ساعت گذشته</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">صفحات وب در نزدیکی هستند</translation> <translation id="3732088672634061408">علایق بازیابی نشدند.</translation> <translation id="3738139272394829648">لمس کردن برای جستجو</translation> +<translation id="3744111561329211289">همگامسازی پسزمینه</translation> <translation id="3809549525127675114">«<ph name="VIDEO_TITLE" />» به پایان رسید</translation> <translation id="3828029223314399057">جستجوی نشانکها</translation> <translation id="3871171699884605801">با حسابهای مخصوص کودکان نمیتوان سابقه مرور را پاک کرد</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">اجازه دادن</translation> <translation id="5040262127954254034">حریم خصوصی</translation> +<translation id="5056549851600133418">مقالاتی برای شما</translation> <translation id="5063480226653192405">کاربر </translation> <translation id="5100237604440890931">کوچک شده - برای بزرگ کردن کلیک کنید.</translation> <translation id="5107381076085091558">بارگیری موقتاً متوقف شد.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">هر زمان که با یک خرابی روبهرو شدید با ارسال اطلاعات درباره فایلها، برنامهها و سرویسهای در حال اجرا به Google، به ما کمک کنید قابلیتها و بهبودهایی را که باید روی آنها کار کنیم، اولویتبندی کنیم. آمار کاربرد شامل اطلاعاتی مانند تنظیمات ترجیحی، کلیکهای روی دکمه و مصرف حافظه میشود. این آمار نشانیهای وب صفحه وب یا اطلاعات شخصی را در برندارند. گزارشهای خرابی شامل اطلاعات سیستم در زمان خراب شدن است و ممکن است بسته به آنچه که در زمان خرابی اتفاق افتاده است، نشانیهای وب صفحه وب یا اطلاعات شخصی را در برگیرد.</translation> -<translation id="5715468759630044318">انتخاب حساب</translation> <translation id="5719837394786370183">صفحاتی که در برگههای ناشناس میبینید بعد از بستن برگههای ناشناس، در سابقه مرور، فضای ذخیره کوکی یا سابقه جستجویتان بهجا نمیمانند. هر فایلی که دانلود میکنید یا نشانکهایی که ایجاد میکنید، حفظ میشوند. با این حال، نامرئی نیستید. رفتن به حالت ناشناس، مرورتان را از کارفرما، ارائهکننده خدمات اینترنتی یا وبسایتهایی که بازید میکنید، پنهان نمیکند.</translation> <translation id="572328651809341494">برگههای اخیر</translation> @@ -432,7 +432,6 @@ <translation id="6699351163704950317">همه صفحههای ذخیره شده</translation> <translation id="6710213216561001401">قبلی</translation> <translation id="6720988912937197322">صفحه ذخیره شده بهصورت آفلاین در دسترس نیست</translation> -<translation id="6722992508235227685">نشانکها، سابقه، گذرواژه و سایر تنظیماتتان در حساب Google شما همگامسازی خواهد شد، بنابراین میتوانید در همه دستگاههایتان از آنها استفاده کنید. در <ph name="BEGIN_LINK1" />تنظیمات<ph name="END_LINK1" /> میتوانید مواردی را که میخواهید همگامسازی شود انتخاب کنید.</translation> <translation id="6738867403308150051">در حال بارگیری…</translation> <translation id="6762156594045689028">برای تغییر این تنظیم، <ph name="BEGIN_LINK" />همگامسازی را بازنشانی کنید<ph name="END_LINK" /></translation> <translation id="6770414673596662518">همچنین از سیستم مرور ایمن Chrome برای تشخیص صفحات مخرب و محافظت از شما در برابر فیشینگ، بدافزار و بارگیریهای خطرناک استفاده میشود.</translation> @@ -499,6 +498,7 @@ <translation id="7501135638693251872">همه نشانکها</translation> <translation id="7521387064766892559">جاوا اسکریپت</translation> <translation id="7562080006725997899">پاک کردن دادههای مرور</translation> +<translation id="756809126120519699">دادههای Chrome پاک شد</translation> <translation id="7588950540487816470">وب فیزیکی</translation> <translation id="7596558890252710462">سیستم عامل</translation> <translation id="7599840151813361502">از سیستم <ph name="BEGIN_LINK" />حسابهای Google<ph name="END_LINK" /> خود خارج نخواهید شد</translation> @@ -542,7 +542,7 @@ <translation id="8069239273282989646">بعد از فشردهسازی</translation> <translation id="8073388330009372546">باز کردن تصویر در برگه جدید</translation> <translation id="8076014560081431679">تنظیمات ذخیرهشده سایت حذف نمیشوند و احتمالاً عادات مرور شما را نشان میدهند. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">به سیستم وارد شوید تا از هر دستگاهی به محتوای وبیتان دسترسی داشته باشید</translation> +<translation id="8087000398470557479">این محتوا از <ph name="DOMAIN_NAME" /> است و توسط Google ارائه میشود.</translation> <translation id="8098570222830891427">دستگاهای نزدیک شما درحال پخش صفحههای وب ازطریق بلوتوث هستند. وقتی دستگاهتان را فعال میکنید، Chrome برای صفحههای وب جستجو میکند و آنها را نشان میدهد. این صفحهها از یکی از سرویسهای Google عبور میکنند تا کیفیت نتایج صفحه بهتر شود. میتوانید «وب فیزیکی» را در تنظیمات حریم خصوصی Chrome کنترل کنید.</translation> @@ -608,6 +608,7 @@ <translation id="8931159598799892500">Chrome + وب فیزیکی</translation> <translation id="8941248009481596111">اتصال شما به این سایت خصوصی است.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">باز کردن در پنجره دیگر</translation> <translation id="8959122750345127698">پیمایش غیرقابل دسترسی است: <ph name="URL" /></translation> <translation id="8979340629087822094">روز گذشته</translation> <translation id="8987061207681586800">Chrome را برای خود اختصاصی کنید</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb index 65cfd12..2dc498b9 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Ei tallenneta</translation> <translation id="1061441684050139317">Chrome tarvitsee mikrofonin käyttöoikeuden voidakseen jakaa sen tämän sivuston kanssa.</translation> <translation id="1080790410959514870">Olet kirjautumassa ulos tilistä, jota hallinnoi <ph name="DOMAIN_NAME" />. Laitteelle tallennetut Chrome-tiedot poistetaan, mutta ne säilytetään Google-tililläsi.</translation> -<translation id="1095407227123756519">Lisää tili, niin voit käyttää kirjanmerkkejä, historiaa, salasanoja ja muita asetuksiasi kaikilla laitteillasi.</translation> <translation id="1098052486217676340">Päättyi</translation> <translation id="1121094540300013208">Käyttö- ja virheraportit</translation> <translation id="1137305377394488060">viimeisen tunnin ajalta</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Lähellä on verkkosivuja.</translation> <translation id="3732088672634061408">Kiinnostuksen kohteita ei voitu hakea.</translation> <translation id="3738139272394829648">Koskettamalla hakeminen</translation> +<translation id="3744111561329211289">Taustasynkronointi</translation> <translation id="3809549525127675114"><ph name="VIDEO_TITLE" /> päättyi</translation> <translation id="3828029223314399057">Hae kirjanmerkeistä</translation> <translation id="3871171699884605801">Lasten tileillä ei voi tyhjentää selaushistoriaa.</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Salli</translation> <translation id="5040262127954254034">Tietosuoja</translation> +<translation id="5056549851600133418">Sinulle valitut artikkelit</translation> <translation id="5063480226653192405">Käyttö</translation> <translation id="5100237604440890931">Tiivistetty – laajenna klikkaamalla.</translation> <translation id="5107381076085091558">Lataus keskeytetty</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Voit auttaa Googlea suunnittelemaan ominaisuuksien ja parannuksien tärkeysjärjestystä, jos lähetät meille jokaisen kaatumisen jälkeen tietoja käynnissä olleista tiedostoista, sovelluksista palveluista. Käyttötilastot sisältävät tietoja esimerkiksi asetuksista, painetuista painikkeista ja muistin käytöstä. Ne eivät sisällä verkkosivujen URL-osoitteita tai henkilötietoja. Kaatumisraportit sisältävät tietoja järjestelmästä kaatumisen aikana, ja niihin voi sisältyä verkkosivujen URL-osoitteita tai henkilökohtaisia tietoja riippuen siitä, mitä kaatumisen aikana tapahtui.</translation> -<translation id="5715468759630044318">Valitse tili.</translation> <translation id="5719837394786370183">Incognito-välilehdillä avaamasi sivut eivät jää selaimen historiaan, evästeisiin tai hakuhistoriaan, kun olet sulkenut kaikki incognito-välilehdet. Kaikki lataamasi tiedostot ja luomasi kirjanmerkit säilytetään. Et ole kuitenkaan näkymätön. Incognito-tila ei piilota selaustietojasi työnantajaltasi, internetpalveluntarjoajaltasi tai vierailemiltasi verkkosivustoilta.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Kaikki tallennetut sivut</translation> <translation id="6710213216561001401">Edellinen</translation> <translation id="6720988912937197322">Tallennettu sivu ei ole käytettävissä offline-tilassa.</translation> -<translation id="6722992508235227685">Kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi synkronoidaan Google-tilillesi, jotta voit käyttää niitä kaikilla laitteillasi. Voit valita synkronoitavat kohteet <ph name="BEGIN_LINK1" />Asetuksissa<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Ladataan…</translation> <translation id="6762156594045689028">Jos haluat muokata tätä asetusta, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" />.</translation> <translation id="6770414673596662518">Chromen selaussuojajärjestelmän avulla myös tunnistetaan haitallisia sivuja ja suojataan sinua tietojenkalastelulta, haittaohjelmilta ja haitallisilta latauksilta.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Kaikki kirjanmerkit</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Selaustietoja poistetaan</translation> +<translation id="756809126120519699">Chrome-tiedot tyhjennetty</translation> <translation id="7588950540487816470">Fyysinen web</translation> <translation id="7596558890252710462">Käyttöjärjestelmä</translation> <translation id="7599840151813361502">Sinua ei kirjata ulos <ph name="BEGIN_LINK" />Google-tileiltäsi<ph name="END_LINK" />.</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Pakkaamisen jälkeen</translation> <translation id="8073388330009372546">Avaa kuva uudessa välilehdessä</translation> <translation id="8076014560081431679">Tallennettuja sivustoasetuksia ei poisteta, ja ne saattavat sisältää tietoa selaustavoistasi. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Kirjaudu sisään, niin voit käyttää verkkosisältöäsi millä tahansa laitteella.</translation> +<translation id="8087000398470557479">Google on toimittanut tämän sisällön osoitteesta <ph name="DOMAIN_NAME" />.</translation> <translation id="8098570222830891427">Lähelläsi olevat laitteet lähettävät verkkosivuja Bluetoothin kautta. Kun herätät laitteen lepotilasta, Chrome etsii sivuja ja näyttää ne. Google käsittelee sivut palvelussaan parantaakseen tulosten laatua. Voit hallinnoida Fyysisen webin ominaisuuksia Chromen asetuksissa.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome ja Fyysinen web</translation> <translation id="8941248009481596111">Sivustoon on muodostettu salattu yhteys.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Avaa uudessa ikkunassa</translation> <translation id="8959122750345127698">Kohde ei ole saatavilla: <ph name="URL" /></translation> <translation id="8979340629087822094">viimeisen päivän ajalta</translation> <translation id="8987061207681586800">Muokkaa Chromea</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb index 95addb50..d97ffcb 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Hindi kailanman nag-save</translation> <translation id="1061441684050139317">Kailangan ng Chrome ng access sa mikropono upang maibahagi ito sa site na ito.</translation> <translation id="1080790410959514870">Nagsa-sign out ka sa isang account na pinamamahalaan ng <ph name="DOMAIN_NAME" />. Ide-delete nito ang data ng Chrome na nakaimbak sa device na ito, ngunit mananatili ang data sa iyong Google Account.</translation> -<translation id="1095407227123756519">Magdagdag ng account upang makuha ang iyong mga bookmark, history, password at ibang mga setting sa lahat ng iyong device.</translation> <translation id="1098052486217676340">Tapos na</translation> <translation id="1121094540300013208">Mga ulat sa paggamit at pag-crash</translation> <translation id="1137305377394488060">nakalipas na oras</translation> @@ -354,7 +353,6 @@ <translation id="5712189971979076230">Tulungan kaming unahin ang mga feature at pagpapahusay na dapat naming gawin sa pamamagitan ng pagpapadala sa Google ng impormasyon tungkol sa mga file, application at serbisyo na tumatakbo kapag nakaranas ka ng pag-crash. Kasama sa mga istatistika sa paggamit ang impormasyon tulad ng mga kagustuhan, pag-click ng button at paggamit ng memory. Hindi kasama sa mga ito ang mga URL ng webpage o anumang personal na impormasyon. Naglalaman ang mga ulat ng pag-crash ng mga impormasyon ng system sa oras ng pag-crash, at maaaring maglaman ng mga URL ng web page o personal na impormasyon, depende sa kung ano ang nangyayari sa oras ng pag-crash.</translation> -<translation id="5715468759630044318">Pumili ng account</translation> <translation id="5719837394786370183">Hindi mananatili ang mga page na tiningnan mo sa mga tab na incognito sa iyong history ng browser, cookie store o history ng paghahanap pagkatapos mong isara ang lahat ng iyong tab na incognito. Itatabi ang anumang file na iyong na-download o bookmark na iyong ginawa. Gayunpaman, hindi ka invisible. Hindi tinatago ng pagiging incognito ang iyong pagba-browse sa iyong employer, iyong internet service provider o sa mga binibisita mong website.</translation> @@ -435,7 +433,6 @@ <translation id="6699351163704950317">Lahat ng naka-save na page</translation> <translation id="6710213216561001401">Nakaraan</translation> <translation id="6720988912937197322">Hindi available offline ang na-save na page</translation> -<translation id="6722992508235227685">Isi-sync ang iyong mga bookmark, history, password at iba pang mga setting sa iyong Google Account upang magamit mo ang mga ito sa lahat ng iyong device. Mapipili mo kung ano ang isi-sync sa <ph name="BEGIN_LINK1" />Mga Setting<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Nagda-download...</translation> <translation id="6762156594045689028">Upang baguhin ang setting na ito, <ph name="BEGIN_LINK" />i-reset ang pag-sync<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Ang Chrome ay mayroong system na Ligtas na Pagba-browse para malaman kung aling mga page ang hindi ligtas gamitin. Mapoprotektahan ka nito mula sa phishing, malware at mga download na nakakasama.</translation> @@ -546,7 +543,6 @@ <translation id="8069239273282989646">Pagkatapos ng compression</translation> <translation id="8073388330009372546">Buksan ang larawan sa bagong tab</translation> <translation id="8076014560081431679">Hindi made-delete ang mga naka-save na setting ng site at maaari nitong ipakita ang iyong mga gawi sa pagba-browse. <ph name="BEGIN_LINK" />Matuto nang higit pa<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Mag-sign in upang i-access ang lahat ng iyong bagay sa web mula sa anumang device</translation> <translation id="8087000398470557479">Ang content na ito ay mula sa <ph name="DOMAIN_NAME" />, na ipinadala ng Google.</translation> <translation id="8098570222830891427">May mga device na malapit sa iyo na nagbo-broadcast ng mga web page sa pamamagitan ng Bluetooth. Maghahanap ang Chrome ng mga page at ipapakita ang mga ito sa iyo kapag ginamit mo ang iyong device. Dadaan ang mga page na ito sa isang serbisyo ng Google upang pahusayin ang kalidad ng mga resulta ng page.
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb index 7a2fbe7b..98ec2d3 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Jamais enregistrés</translation> <translation id="1061441684050139317">Chrome doit disposer de l'accès au micro pour le partager avec ce site.</translation> <translation id="1080790410959514870">Vous vous déconnectez d'un compte géré par <ph name="DOMAIN_NAME" />. Cette opération va entraîner la suppression des données Chrome stockées sur l'appareil, mais celles-ci seront conservées dans votre compte Google.</translation> -<translation id="1095407227123756519">Ajoutez un compte pour récupérer vos favoris, votre historique, vos mots de passe et d'autres paramètres sur tous vos appareils.</translation> <translation id="1098052486217676340">Terminé</translation> <translation id="1121094540300013208">Statistiques d'utilisation et rapports d'erreur</translation> <translation id="1137305377394488060">de la dernière heure</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Pages Web à proximité</translation> <translation id="3732088672634061408">Impossible de récupérer les centres d'intérêt.</translation> <translation id="3738139272394829648">Appuyer pour rechercher</translation> +<translation id="3744111561329211289">Synchronisation en arrière-plan</translation> <translation id="3809549525127675114">Lecture de la vidéo "<ph name="VIDEO_TITLE" />" terminée.</translation> <translation id="3828029223314399057">Rechercher dans les favoris</translation> <translation id="3871171699884605801">L'historique de navigation des comptes pour enfants ne peut être effacé.</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Autoriser</translation> <translation id="5040262127954254034">Confidentialité</translation> +<translation id="5056549851600133418">Articles pour vous</translation> <translation id="5063480226653192405">Utilisation</translation> <translation id="5100237604440890931">Réduit – Cliquer pour développer</translation> <translation id="5107381076085091558">Téléchargement suspendu.</translation> @@ -353,7 +354,6 @@ <translation id="5712189971979076230">Aidez-nous à identifier les fonctionnalités et les améliorations sur lesquelles nous devons travailler en priorité en nous envoyant des informations sur les fichiers, les applications et les services en cours d'exécution au moment où vous constatez un plantage. Les statistiques d'utilisation englobent des informations telles que les préférences, les clics sur les boutons et l'utilisation de la mémoire. Elles n'incluent pas d'URL de pages Web ni d'informations personnelles. Les rapports d'erreur contiennent des informations relatives au système au moment du plantage, et peuvent contenir des URL de pages Web ou des informations personnelles, en fonction des activités en cours lors de l'incident.</translation> -<translation id="5715468759630044318">Choisir un compte</translation> <translation id="5719837394786370183">Les pages consultées dans les onglets de navigation privée ne sont pas enregistrées dans l'historique de votre navigateur, dans les cookies ni dans l'historique des recherches une fois que vous avez fermé tous les onglets de navigation privée. Les fichiers téléchargés et les favoris ajoutés sont conservés. Vous n'êtes cependant pas devenu invisible. L'utilisation du mode navigation privée n'empêche pas votre employeur, votre fournisseur d'accès à Internet ou les sites Web que vous avez consultés d'avoir accès aux informations relatives à votre navigation.</translation> @@ -434,7 +434,6 @@ <translation id="6699351163704950317">Toutes les pages enregistrées</translation> <translation id="6710213216561001401">Précédent</translation> <translation id="6720988912937197322">La page enregistrée n'est pas disponible hors connexion.</translation> -<translation id="6722992508235227685">Vos favoris, votre historique, vos mots de passe et d'autres paramètres sont synchronisés avec votre compte Google afin que vous puissiez les utiliser sur tous vos appareils. Vous pouvez sélectionner les éléments à synchroniser dans <ph name="BEGIN_LINK1" />Paramètres<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Téléchargement en cours…</translation> <translation id="6762156594045689028">Pour modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" />.</translation> <translation id="6770414673596662518">Nous utilisons également le système de navigation sécurisée de Chrome pour détecter les pages nuisibles tout en vous protégeant de l'hameçonnage, des logiciels malveillants et des téléchargements dangereux.</translation> @@ -501,6 +500,7 @@ <translation id="7501135638693251872">Tous les favoris</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Effacement des données de navigation en cours</translation> +<translation id="756809126120519699">Données de Chrome effacées</translation> <translation id="7588950540487816470">Web physique</translation> <translation id="7596558890252710462">Système d'exploitation</translation> <translation id="7599840151813361502">Vous ne serez pas déconnecté de vos <ph name="BEGIN_LINK" />comptes Google<ph name="END_LINK" />.</translation> @@ -544,7 +544,7 @@ <translation id="8069239273282989646">Après compression</translation> <translation id="8073388330009372546">Ouvrir image dans autre onglet</translation> <translation id="8076014560081431679">Les paramètres de site enregistrés ne seront pas supprimés et peuvent donner des indications sur vos habitudes de navigation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Connectez-vous pour accéder à tous vos contenus Web sur n'importe quel appareil.</translation> +<translation id="8087000398470557479">Ce contenu est issu de <ph name="DOMAIN_NAME" />. Il est diffusé par Google.</translation> <translation id="8098570222830891427">Des appareils à proximité diffusent des pages Web via le Bluetooth. Chrome recherche les pages à proximité et les affiche lorsque vous réactivez votre l'appareil. Ces pages sont analysées par un service Google pour améliorer la qualité des résultats. Vous pouvez contrôler le Web physique dans les paramètres de Chrome.</translation> @@ -610,6 +610,7 @@ <translation id="8931159598799892500">Chrome et le Web physique</translation> <translation id="8941248009481596111">Votre connexion à ce site est privée.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Ouvrir dans une autre fenêtre</translation> <translation id="8959122750345127698">Impossible d'accéder à <ph name="URL" />.</translation> <translation id="8979340629087822094">des dernières 24 heures</translation> <translation id="8987061207681586800">Personnalisez Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb index 77918c4..76a643dd 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">कभी नहीं सहेजा गया</translation> <translation id="1061441684050139317">Chrome को माइक्रोफ़ोन ऐक्सेस की आवश्यकता है ताकि माइक्रोफ़ोन को इस साइट के साथ साझा किया जा सके.</translation> <translation id="1080790410959514870">आप <ph name="DOMAIN_NAME" /> द्वारा प्रबंधित खाते से प्रस्थान कर रहे हैं. इससे इस डिवाइस पर संग्रहीत Chrome डेटा हट जाएगा, लेकिन डेटा आपके Google खाते में बना रहेगा.</translation> -<translation id="1095407227123756519">अपने सभी डिवाइस पर अपने बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग प्राप्त करने के लिए कोई खाता जोड़ें.</translation> <translation id="1098052486217676340">समाप्त</translation> <translation id="1121094540300013208">उपयोग और क्रैश रिपोर्ट</translation> <translation id="1137305377394488060">पिछला घंटा</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">वेबपृष्ठ आस-पास उपलब्ध हैं</translation> <translation id="3732088672634061408">रुचियां पुनर्प्राप्त नहीं की जा सकीं.</translation> <translation id="3738139272394829648">खोजने के लिए स्पर्श करें</translation> +<translation id="3744111561329211289">पृष्ठभूमि समन्वयन</translation> <translation id="3809549525127675114">“<ph name="VIDEO_TITLE" />” समाप्त</translation> <translation id="3828029223314399057">बुकमार्क खोजें</translation> <translation id="3871171699884605801">ब्राउज़िंग इतिहास को बच्चों के खातों से साफ़ नहीं किया जा सकता</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">अनुमति दें</translation> <translation id="5040262127954254034">गोपनीयता</translation> +<translation id="5056549851600133418">आपके लिए लेख</translation> <translation id="5063480226653192405">उपयोग</translation> <translation id="5100237604440890931">संक्षिप्त - विस्तृत करने के लिए क्लिक करें.</translation> <translation id="5107381076085091558">डाउनलोड रोका गया.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">जब भी क्रैश हो, तो उस दौरान चलने वाली फ़ाइलें, ऐप्लिकेशन और सेवाओं के बारे में जानकारी Google को भेजकर उन सुविधाओं और सुधारों को प्राथमिकता देने में हमारी सहायता करें जिन पर हमें काम करना चाहिए. उपयोग के आंकड़ों में प्राथमिकताएं, बटन क्लिक और मेमोरी उपयोग जैसी जानकारी शामिल की जाती है. उनमें वेबपृष्ठ URL या कोई व्यक्तिगत जानकारी शामिल नहीं की जाती है. क्रैश रिपोर्ट में क्रैश के समय की सिस्टम जानकारी होती है और क्रैश के समय जो हो रहा था, उसके आधार पर वेब पृष्ठ के URL की या व्यक्तिगत जानकारी हो सकती है.</translation> -<translation id="5715468759630044318">खाता चुनें</translation> <translation id="5719837394786370183">आपके द्वारा अपने सभी गुप्त टैब बंद करने के बाद आपको गुप्त टैब में दिखाई देने वाले पृष्ठ आपके ब्राउज़र के इतिहास, कुकी स्टोर, या खोज इतिहास में नहीं बने रहेंगे. आप जो भी फ़ाइल डाउनलोड करते हैं या जो भी बुकमार्क बनाते हैं उन्हें रखा जाएगा. हालांकि, आप अदृश्य नहीं हैं. गुप्त मोड में जाने से आपके नियोक्ता, आपके इंटरनेट सेवा प्रदाता, या आपके द्वारा देखी जाने वाली वेबसाइटों से आपकी ब्राउज़िंग नहीं छिपती.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">सभी सहेजे गए पृष्ठ</translation> <translation id="6710213216561001401">पिछला</translation> <translation id="6720988912937197322">सहेजा गया पृष्ठ ऑफ़लाइन उपलब्ध नहीं है</translation> -<translation id="6722992508235227685">आपके बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग आपके Google खाते में समन्वयित की जाएंगी ताकि आप अपने सभी डिवाइस पर उनका उपयोग कर सकें. आप <ph name="BEGIN_LINK1" />सेटिंग<ph name="END_LINK1" /> में चुन सकते हैं कि क्या समन्वयित करना है.</translation> <translation id="6738867403308150051">डाउनलोड हो रहे हैं...</translation> <translation id="6762156594045689028">यह सेटिंग बदलने के लिए, <ph name="BEGIN_LINK" />समन्वयन रीसेट करें<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chrome के सुरक्षित ब्राउज़िंग सिस्टम का उपयोग दुर्भावनापूर्ण पृष्ठों का पता लगाने तथा फ़िशिंग, मैलवेयर और हानिकारक डाउनलोड से आपकी सुरक्षा करने के लिए भी किया जाएगा.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">सभी बुकमार्क</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">ब्राउज़िंग डेटा साफ़ हो रहा है</translation> +<translation id="756809126120519699">साफ़ किया गया Chrome डेटा</translation> <translation id="7588950540487816470">वास्तविक वेब</translation> <translation id="7596558890252710462">ऑपरेटिंग सिस्टम</translation> <translation id="7599840151813361502">आप अपने <ph name="BEGIN_LINK" />Google खातों<ph name="END_LINK" /> से प्रस्थान नहीं करेंगे</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">संपीड़न के बाद</translation> <translation id="8073388330009372546">चित्र नए टैब में खोलें</translation> <translation id="8076014560081431679">सहेजी गई साइट सेटिंग नहीं हटाई जाएंगी और इससे आपका ब्राउज़िंग व्यवहार प्रदर्शित हो सकता है. <ph name="BEGIN_LINK" />अधिक जानें<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">किसी भी डिवाइस से अपनी सभी वेब सामग्री एेक्सेस करने के लिए प्रवेश करें</translation> +<translation id="8087000398470557479">यह सामग्री <ph name="DOMAIN_NAME" /> की है जिसे Google के द्वारा वितरित किया गया है.</translation> <translation id="8098570222830891427">आपके आस-पास के डिवाइस ब्लूटूथ पर वेबपृष्ठों को प्रसारित कर रहे हैं. जब आप अपने डिवाइस को सक्रिय करेंगे तो Chrome पृष्ठों के लिए स्कैन करेगा और उन्हें प्रदर्शित करेगा. पृष्ठ परिणामों की गुणवत्ता को बेहतर बनाने के लिए ये पृष्ठ एक Google सेवा से गुज़रेंगे. आप भौतिक वेब को Chrome सेटिंग में नियंत्रित कर सकते हैं.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + शारीरिक वेब</translation> <translation id="8941248009481596111">इस साइट से आपका कनेक्शन निजी है.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">अन्य विंडो में खोलें</translation> <translation id="8959122750345127698">मार्गदर्शक तक नहीं पहुंचा जा सकता: <ph name="URL" /></translation> <translation id="8979340629087822094">पिछला दिन</translation> <translation id="8987061207681586800">Chrome को अपना बनाएं</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb index fe32e3a8..78896a4 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Zaporke se nikad ne spremaju</translation> <translation id="1061441684050139317">Chrome treba imati pristup mikrofonu da bi ga dijelio s ovom web-lokacijom.</translation> <translation id="1080790410959514870">Odjavljujete se s računa kojim upravlja <ph name="DOMAIN_NAME" />. Time će se izbrisati podaci preglednika Chrome pohranjeni na ovom uređaju, ali ti će podaci ostati na vašem Google računu.</translation> -<translation id="1095407227123756519">Dodajte račun da biste imali svoje oznake, povijest, zaporke i druge postavke na svim svojim uređajima.</translation> <translation id="1098052486217676340">Završeno</translation> <translation id="1121094540300013208">Izvješća o upotrebi i rušenju programa</translation> <translation id="1137305377394488060">od proteklog sata</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">U blizini postoje web-stranice</translation> <translation id="3732088672634061408">Interesi nisu dohvaćeni.</translation> <translation id="3738139272394829648">Dodirnite za pretraživanje</translation> +<translation id="3744111561329211289">Sinkronizacija u pozadini</translation> <translation id="3809549525127675114">Videozapis "<ph name="VIDEO_TITLE" />" je završen</translation> <translation id="3828029223314399057">Pretraži oznake</translation> <translation id="3871171699884605801">Povijest pregledavanja ne može se ukloniti s računa za djecu</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Dopusti</translation> <translation id="5040262127954254034">Privatnost</translation> +<translation id="5056549851600133418">Preporučeni članci</translation> <translation id="5063480226653192405">Upotreba</translation> <translation id="5100237604440890931">Sažeto – kliknite za proširivanje.</translation> <translation id="5107381076085091558">Preuzimanje je pauzirano.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Svaki put kada se nešto sruši, pošaljite Googleu informacije o datotekama, aplikacijama i uslugama koje se izvode kako biste nam pomogli odrediti kojim bismo značajkama i poboljšanjima trebali dati prednost. Statistika upotrebe uključuje informacije kao što su postavke, klikovi na gumbe i upotreba memorije. Ne uključuje URL-ove web-stranica ni osobne podatke. Izvješća o rušenju programa sadrže informacije o sustavu u trenutku rušenja i mogu sadržavati URL-ove web-stranica ili osobne podatke, ovisno o tome što se događalo u trenutku rušenja.</translation> -<translation id="5715468759630044318">Odabir računa</translation> <translation id="5719837394786370183">Stranice koje gledate na anonimnim karticama neće se zadržati u povijesti preglednika, pohrani kolačića i povijesti pretraživanja nakon što zatvorite sve anonimne kartice. Sve datoteke koje preuzmete i oznake koje izradite sačuvat će se. Međutim, niste nevidljivi. Anonimni način neće sakriti vaše pregledavanje od vašeg poslodavca, davatelja internetskih usluga i web-lokacija koje posjetite.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Sve spremljene stranice</translation> <translation id="6710213216561001401">Prethodno</translation> <translation id="6720988912937197322">Spremljena stranica nije dostupna izvanmrežno</translation> -<translation id="6722992508235227685">Vaše oznake, povijest, zaporke i ostale postavke sinkronizirat će se s vašim Google računom kako biste ih mogli upotrebljavati na svim uređajima. U <ph name="BEGIN_LINK1" />postavkama<ph name="END_LINK1" /> možete odabrati što će se sinkronizirati.</translation> <translation id="6738867403308150051">Preuzimanje...</translation> <translation id="6762156594045689028">Da biste promijenili tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chromeov sustav Sigurno pregledavanje upotrebljavat će se i za otkrivanje zlonamjernih stranica i zaštitu od krađe identiteta, zlonamjernog softvera i štetnih preuzimanja.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Sve oznake</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Brisanje podataka o pregledavanju</translation> +<translation id="756809126120519699">Chromeovi su podaci izbrisani</translation> <translation id="7588950540487816470">Fizički web</translation> <translation id="7596558890252710462">Operativni sustav</translation> <translation id="7599840151813361502">Nećete se odjaviti sa svojih <ph name="BEGIN_LINK" />Google računa<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Nakon kompresije</translation> <translation id="8073388330009372546">Otvori sliku u novoj kartici</translation> <translation id="8076014560081431679">Spremljene postavke web-lokacije neće se izbrisati i mogu odražavati vaše navike prilikom pregledavanja. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Prijavite se za pristup svim svojim sadržajima na webu s bilo kojeg uređaja</translation> +<translation id="8087000398470557479">Sadržaj potječe s domene <ph name="DOMAIN_NAME" />, a omogućuje ga Google.</translation> <translation id="8098570222830891427">Uređaji u blizini emitiraju web-stranice Bluetoothom. Chrome će tražiti stranice i prikazati ih kada aktivirate uređaj. Googleova služba obradit će te stranice radi poboljšanja kvalitete rezultata stranica. Fizičkim webom možete upravljati u Chromeovim postavkama.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome i Fizički web</translation> <translation id="8941248009481596111">Veza s web-lokacijom privatna je.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Otvori u drugom prozoru</translation> <translation id="8959122750345127698">Otvaranje je nedostupno: <ph name="URL" /></translation> <translation id="8979340629087822094">od proteklog dana</translation> <translation id="8987061207681586800">Prilagodite Chrome sebi</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb index e893bdbf..251571c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Az alábbi oldalakról soha ne mentsen jelszavakat</translation> <translation id="1061441684050139317">A Chrome-nak rendelkeznie kell hozzáféréssel a mikrofonhoz, hogy megoszthassa ezzel a webhellyel.</translation> <translation id="1080790410959514870">Kijelentkezik egy <ph name="DOMAIN_NAME" /> által felügyelt fiókból. Ezzel törli a Chrome-nak az eszközön tárolt adatait, Google-fiókjában azonban továbbra is megmaradnak.</translation> -<translation id="1095407227123756519">Adjon hozzá egy fiókot, hogy könyvjelzőit, előzményeit, jelszavait és más beállításait az összes eszközén elérje.</translation> <translation id="1098052486217676340">Befejezve</translation> <translation id="1121094540300013208">Használati és hibajelentések</translation> <translation id="1137305377394488060">elmúlt óra</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Weboldalak találhatók a közelben</translation> <translation id="3732088672634061408">Nem sikerült lekérni az érdeklődési köröket.</translation> <translation id="3738139272394829648">Érintéssel keresés</translation> +<translation id="3744111561329211289">Szinkronizálás a háttérben</translation> <translation id="3809549525127675114">A(z) „<ph name="VIDEO_TITLE" />” lejátszása befejeződött</translation> <translation id="3828029223314399057">Könyvjelzők keresése</translation> <translation id="3871171699884605801">A böngészési előzmények nem törölhetők a gyerekeknek szóló fiókok esetében</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Engedélyezés</translation> <translation id="5040262127954254034">Adatvédelem</translation> +<translation id="5056549851600133418">Cikkek Önnek</translation> <translation id="5063480226653192405">Használat</translation> <translation id="5100237604440890931">Összecsukva – kattintson a kibontáshoz.</translation> <translation id="5107381076085091558">A letöltés szünetel.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Segítsen nekünk annak eldöntésében, hogy mely funkciókon és fejlesztéseken kell előbb dolgoznunk – küldje el a Google-nak a böngésző lefagyásakor éppen futó fájlokkal, alkalmazásokkal és szolgáltatásokkal kapcsolatos információkat. A használati statisztika részét alkotják például a beállítások, a gombokra kattintások és a memóriahasználat. A statisztika nem tartalmazza weboldalak URL-jeit és semmilyen személyes adatot. A hibajelentések a hiba időpontjában aktuális rendszer-információkat tartalmazzák, de tartalmazhatják weboldalak URL-címeit vagy személyes adatokat is, attól függően, hogy mi történt a hiba időpontjában.</translation> -<translation id="5715468759630044318">Fiók választása</translation> <translation id="5719837394786370183">Az inkognitólapokon megtekintett oldalak nem maradnak meg a böngészési előzményekben, a cookie-k tárolójában vagy a keresési előzményekben, miután bezárta az összes inkognitólapot. A letöltött fájlok és a létrehozott könyvjelzők azonban megmaradnak. Mindazonáltal Ön nem lesz láthatatlan. Az inkognitómód használatával nem rejtheti el böngészési tevékenységét munkaadója, internetszolgáltatója vagy a felkeresett webhelyek elől.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Minden mentett oldal</translation> <translation id="6710213216561001401">Előző</translation> <translation id="6720988912937197322">A mentett oldal nem érhető el offline módban</translation> -<translation id="6722992508235227685">A böngésző szinkronizálni fogja a könyvjelzőket, az előzményeket, a jelszavakat és az egyéb beállításokat Google-fiókjával, hogy minden eszközén használhassa őket. A <ph name="BEGIN_LINK1" />Beállítások<ph name="END_LINK1" /> között adhatja meg, hogy milyen adatok legyenek szinkronizálva.</translation> <translation id="6738867403308150051">Letöltés…</translation> <translation id="6762156594045689028">A beállítás módosításához <ph name="BEGIN_LINK" />állítsa alaphelyzetbe a szinkronizálást<ph name="END_LINK" /></translation> <translation id="6770414673596662518">A Chrome Biztonságos Böngészés rendszere is segít a rosszindulatú oldalak észlelésében, valamint megvédi Önt az adathalászattól, a rosszindulatú programoktól és az ártalmas letöltésektől.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Minden könyvjelző</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Böngészési adatok törlése</translation> +<translation id="756809126120519699">Chrome-adatok törölve</translation> <translation id="7588950540487816470">Fizikai web</translation> <translation id="7596558890252710462">Operációs rendszer</translation> <translation id="7599840151813361502">A böngésző nem fogja kijelentkeztetni <ph name="BEGIN_LINK" />Google-fiókjaiból<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Tömörítés után</translation> <translation id="8073388330009372546">Kép megnyitása új lapon</translation> <translation id="8076014560081431679">A mentett webhelybeállítások nem törlődnek, és tájékozódási alapul szolgálhatnak böngészési szokásait illetően. <ph name="BEGIN_LINK" />További információ.<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Jelentkezzen be, hogy bármely eszközről hozzáférhessen valamennyi internetes dolgához</translation> +<translation id="8087000398470557479">Ez a Google által megjelenített tartalom a(z) <ph name="DOMAIN_NAME" /> domainről származik.</translation> <translation id="8098570222830891427">Az Ön közelében található eszközök weboldalakat sugároznak Bluetooth-on keresztül. A Chrome megkeresi és megjeleníti ezeket a weboldalakat, miután Ön felébresztette eszközét. Ezek az oldalak egy adott Google-szolgáltatáson mennek keresztül az oldaltalálatok minőségének javítása érdekében. A Fizikai webet a Chrome-beállításokban szabályozhatja.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Fizikai web</translation> <translation id="8941248009481596111">A webhellyel való kapcsolata privát.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Megnyitás másik ablakban</translation> <translation id="8959122750345127698">Nem érhető el az ide vezető navigáció: <ph name="URL" /></translation> <translation id="8979340629087822094">elmúlt nap</translation> <translation id="8987061207681586800">Formálja saját ízlésére a Chrome-ot</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb index 0b23592..6ca9b2f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Jangan pernah disimpan</translation> <translation id="1061441684050139317">Chrome memerlukan akses mikrofon untuk berbagi dengan situs ini.</translation> <translation id="1080790410959514870">Anda keluar dari akun yang dikelola oleh <ph name="DOMAIN_NAME" />. Tindakan ini akan menghapus data Chrome yang tersimpan di perangkat ini, namun data akan tetap berada di Akun Google Anda.</translation> -<translation id="1095407227123756519">Tambahkan akun untuk mendapatkan bookmark, riwayat, sandi, dan setelan lainnya di semua perangkat Anda.</translation> <translation id="1098052486217676340">Selesai</translation> <translation id="1121094540300013208">Laporan kerusakan dan penggunaan</translation> <translation id="1137305377394488060">satu jam terakhir</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Terdapat laman web di sekitar</translation> <translation id="3732088672634061408">Tidak dapat mengambil minat.</translation> <translation id="3738139272394829648">Sentuh untuk Menelusuri</translation> +<translation id="3744111561329211289">Sinkronisasi latar belakang</translation> <translation id="3809549525127675114">“<ph name="VIDEO_TITLE" />” selesai</translation> <translation id="3828029223314399057">Cari bookmark</translation> <translation id="3871171699884605801">Riwayat penjelajahan tidak dapat dihapus melalui akun anak</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Izinkan</translation> <translation id="5040262127954254034">Privasi</translation> +<translation id="5056549851600133418">Artikel untuk Anda</translation> <translation id="5063480226653192405">Penggunaan</translation> <translation id="5100237604440890931">Diciutkan - klik untuk memperluas.</translation> <translation id="5107381076085091558">Unduhan dijeda.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Bantu kami memprioritaskan fitur dan penyempurnaan yang harus dikerjakan dengan mengirimkan informasi tentang file, aplikasi, dan layanan yang sedang berjalan kepada Google kapan pun aplikasi mogok. Statistik penggunaan mencakup informasi seperti preferensi, klik tombol, dan penggunaan memori. Statistik ini tidak mencakup URL laman web atau informasi pribadi apa pun. Laporan kerusakan berisi informasi sistem saat terjadi mogok dan dapat berisi URL laman web atau informasi pribadi, tergantung apa yang terjadi saat aplikasi mogok.</translation> -<translation id="5715468759630044318">Pilih akun</translation> <translation id="5719837394786370183">Laman yang Anda lihat dalam tab penyamaran tidak akan disimpan di riwayat, penyimpanan cookie, atau riwayat penelusuran browser setelah semua tab penyamaran ditutup. File apa pun yang diunduh atau bookmark yang dibuat akan tetap tersimpan. Namun demikian, bukan berarti Anda sama sekali tidak terlihat. Menggunakan mode penyamaran tidak akan menyembunyikan penjelajahan yang Anda lakukan dari atasan di kantor, dari penyedia layanan internet, maupun situs web yang Anda kunjungi.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Semua laman tersimpan</translation> <translation id="6710213216561001401">Sebelumnya</translation> <translation id="6720988912937197322">Laman tersimpan tidak tersedia offline</translation> -<translation id="6722992508235227685">Bookmark, riwayat, sandi, dan setelan lainnya akan disinkronkan dengan Akun Google sehingga Anda dapat menggunakannya di semua perangkat. Anda dapat memilih data yang ingin disinkronkan di <ph name="BEGIN_LINK1" />Setelan<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Mengunduh…</translation> <translation id="6762156594045689028">Untuk mengubah setelan ini, <ph name="BEGIN_LINK" />setel ulang sinkronisasi<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Sistem Penjelajahan Aman Chrome juga dapat digunakan untuk mendeteksi laman berbahaya dan melindungi Anda dari phishing, perangkat lunak perusak, dan unduhan berbahaya.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Semua bookmark</translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7562080006725997899">Menghapus data penjelajahan</translation> +<translation id="756809126120519699">Data Chrome telah dihapus</translation> <translation id="7588950540487816470">Web Fisik</translation> <translation id="7596558890252710462">Sistem operasi</translation> <translation id="7599840151813361502">Anda tidak akan dikeluarkan dari <ph name="BEGIN_LINK" />Akun Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Setelah kompresi</translation> <translation id="8073388330009372546">Buka gambar di tab baru</translation> <translation id="8076014560081431679">Setelan situs yang disimpan tidak akan dihapus dan dapat mencerminkan kebiasaan penjelajahan Anda. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Masuk untuk mengakses semua file web Anda dari perangkat apa pun</translation> +<translation id="8087000398470557479">Konten ini dari <ph name="DOMAIN_NAME" />, dikirimkan oleh Google.</translation> <translation id="8098570222830891427">Perangkat di sekitar Anda sedang mentransmisi laman web melalui Bluetooth. Chrome akan memindai laman dan menampilkannya saat Anda membangunkan perangkat. Laman ini akan melalui layanan Google untuk meningkatkan kualitas hasil laman. Anda dapat mengontrol Web Fisik di Setelan Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Web Fisik</translation> <translation id="8941248009481596111">Sambungan Anda ke situs ini bersifat pribadi.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Buka di jendela lain</translation> <translation id="8959122750345127698">Navigasi tidak dapat dijangkau: <ph name="URL" /></translation> <translation id="8979340629087822094">kemarin</translation> <translation id="8987061207681586800">Gayakan Chrome sesukamu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb index a3c3d07..d3da789f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Mai salvate</translation> <translation id="1061441684050139317">Chrome deve avere accesso al microfono per condividerla con questo sito.</translation> <translation id="1080790410959514870">Stai per uscire da un account gestito da <ph name="DOMAIN_NAME" />. Verranno eliminati i dati di Chrome memorizzati su questo dispositivo, ma i dati rimarranno nel tuo account Google.</translation> -<translation id="1095407227123756519">Aggiungi un account per visualizzare i tuoi Preferiti, la cronologia, le password e altre impostazioni su tutti i tuoi dispositivi.</translation> <translation id="1098052486217676340">Terminata</translation> <translation id="1121094540300013208">Rapporti sull'utilizzo e sugli arresti anomali</translation> <translation id="1137305377394488060">ultima ora</translation> @@ -354,7 +353,6 @@ <translation id="5712189971979076230">Aiutaci a scegliere le funzioni e i miglioramenti a cui dare la priorità inviando a Google informazioni sui file, sulle applicazioni e sui servizi in esecuzione quando si verifica un arresto anomalo. Le statistiche sull'utilizzo includono informazioni quali preferenze, clic sui pulsanti e utilizzo della memoria. Non includono gli URL delle pagine web o le informazioni personali. I rapporti sugli arresti anomali contengono informazioni sul sistema al momento dell'arresto anomalo e potrebbero includere URL di pagine web o informazioni personali, in base alle attività in corso al momento dell'arresto.</translation> -<translation id="5715468759630044318">Scegli account</translation> <translation id="5719837394786370183">Le pagine visualizzate nelle schede in incognito non vengono memorizzate nella cronologia del browser, nell'archivio di cookie o nella cronologia delle ricerche dopo aver chiuso tutte le schede. I file da te scaricati o i Preferiti da te creati vengono mantenuti. Tuttavia, le tue attività non sono invisibili. L'attivazione della modalità di navigazione in incognito non consente di nascondere la navigazione al tuo datore di lavoro, al tuo provider di servizi Internet o ai siti web da te visitati.</translation> @@ -435,7 +433,6 @@ <translation id="6699351163704950317">Tutte le pagine salvate</translation> <translation id="6710213216561001401">Indietro</translation> <translation id="6720988912937197322">Pagina salvata non disponibile offline</translation> -<translation id="6722992508235227685">I tuoi preferiti, la cronologia, le password e altre impostazioni verranno sincronizzati con il tuo account Google per consentirti di utilizzarli su tutti i tuoi dispositivi. Puoi scegliere quali dati sincronizzare nelle <ph name="BEGIN_LINK1" />Impostazioni<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Download in corso…</translation> <translation id="6762156594045689028">Per modificare questa impostazione, <ph name="BEGIN_LINK" />reimposta la sincronizzazione<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Il sistema Navigazione sicura di Chrome verrà utilizzato anche per rilevare pagine dannose e proteggerti da phishing, malware e download pericolosi.</translation> @@ -546,7 +543,6 @@ <translation id="8069239273282989646">Dopo la compressione</translation> <translation id="8073388330009372546">Immagine in nuova scheda</translation> <translation id="8076014560081431679">Le impostazioni del sito salvate non verranno eliminate e potrebbero rispecchiare le tue abitudini di navigazione. <ph name="BEGIN_LINK" />Ulteriori informazioni<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Esegui l'accesso per accedere a tutti i tuoi contenuti web da qualsiasi dispositivo</translation> <translation id="8087000398470557479">Questi contenuti derivano da <ph name="DOMAIN_NAME" /> e sono offerti da Google.</translation> <translation id="8098570222830891427">Alcuni dispositivi nelle tue vicinanze stanno trasmettendo pagine web tramite Bluetooth. Chrome cerca pagine nelle vicinanze quando attivi il tuo dispositivo. Tali pagine passeranno attraverso un servizio di Google per migliorare la qualità dei risultati.
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb index 816aa95..22d5165 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">פריטים שאף פעם לא נשמרו</translation> <translation id="1061441684050139317">Chrome זקוק לגישה למיקרופון כדי לשתף אותו עם האתר הזה.</translation> <translation id="1080790410959514870">אתה מתנתק מחשבון המנוהל על ידי <ph name="DOMAIN_NAME" />. הפעולה הזו תמחק את נתוני Chrome המאוחסנים במכשיר הזה, אבל הנתונים יישמרו בחשבון Google שלך.</translation> -<translation id="1095407227123756519">הוסף חשבון כדי לקבל גישה אל הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות בכל המכשירים שברשותך.</translation> <translation id="1098052486217676340">הסתיים</translation> <translation id="1121094540300013208">דוחות קריסה ושימוש</translation> <translation id="1137305377394488060">מהשעה האחרונה</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">יש דפי אינטרנט בסביבה הקרובה</translation> <translation id="3732088672634061408">לא ניתן היה לאחזר את תחומי העניין.</translation> <translation id="3738139272394829648">גע כדי לחפש</translation> +<translation id="3744111561329211289">סינכרון ברקע</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" הסתיים</translation> <translation id="3828029223314399057">חפש סימניות</translation> <translation id="3871171699884605801">לא ניתן למחוק את היסטוריית הגלישה בחשבונות של ילדים</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">אפשר</translation> <translation id="5040262127954254034">פרטיות</translation> +<translation id="5056549851600133418">מאמרים מומלצים עבורך</translation> <translation id="5063480226653192405">שימוש</translation> <translation id="5100237604440890931">מכווץ - לחץ כדי להרחיב.</translation> <translation id="5107381076085091558">ההורדה הושהתה.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">כדי לעזור לנו לקבוע את סדר העדיפויות לגבי תכונות ושיפורים שעלינו לעבוד עליהם, שלח ל-Google מידע על הקבצים, על האפליקציות ועל השירותים הפועלים בזמן שאתה נתקל בקריסה. סטטיסטיקות השימוש כוללות מידע כגון העדפות, לחיצות על לחצנים ושימוש בזיכרון. הן אינן כוללות כתובות של דפי אינטרנט או מידע אישי. דוחות קריסה מכילים מידע על המערכת בזמן הקריסה, והם עשויים להכיל כתובות של דפי אינטרנט או מידע אישי, בהתאם למתרחש בזמן הקריסה.</translation> -<translation id="5715468759630044318">בחר חשבון</translation> <translation id="5719837394786370183">דפים שאתה מציג בכרטיסיות גלישה בסתר לא יישמרו בהיסטוריית הדפדפן, אחסון קובצי ה-cookie או היסטוריית החיפושים לאחר שתסגור את כל הכרטיסיות של גלישה בסתר. קבצים שתוריד או סימניות שתיצור יישמרו. עם זאת, אינך בלתי נראה. מעבר למצב גלישה בסתר אינו מסתיר את הגלישה שלך מהמעסיק, ספק שירות האינטרנט או האתרים שבהם אתה מבקר.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">כל הדפים שנשמרו</translation> <translation id="6710213216561001401">הקודם</translation> <translation id="6720988912937197322">הדף שנשמר אינו זמין במצב לא מקוון</translation> -<translation id="6722992508235227685">הסימניות, ההיסטוריה, הסיסמאות והגדרות אחרות יסונכרנו עם חשבון Google כך שתוכל להשתמש בהם בכל המכשירים שלך. בעזרת ה<ph name="BEGIN_LINK1" />הגדרות<ph name="END_LINK1" /> ניתן לבחור איזה פריטים לסנכרן.</translation> <translation id="6738867403308150051">מוריד...</translation> <translation id="6762156594045689028"><ph name="BEGIN_LINK" />אפס את הסינכרון<ph name="END_LINK" /> כדי לשנות את ההגדרה הזו</translation> <translation id="6770414673596662518">מערכת הגלישה הבטוחה של Chrome תשמש גם לזיהוי דפים זדוניים ולהגנה עליך מפני דיוג, תוכנות זדוניות והורדות של קבצים מזיקים.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">כל הסימניות</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">מנקה נתוני גלישה</translation> +<translation id="756809126120519699">נתוני Chrome נוקו</translation> <translation id="7588950540487816470">האינטרנט הווירטופיזי</translation> <translation id="7596558890252710462">מערכת הפעלה</translation> <translation id="7599840151813361502">לא תתבצע יציאה מ<ph name="BEGIN_LINK" />חשבונות Google<ph name="END_LINK" /> שלך</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">לאחר דחיסה</translation> <translation id="8073388330009372546">פתח את התמונה בכרטיסייה חדשה</translation> <translation id="8076014560081431679">הגדרות אתרים שנשמרו לא יימחקו ועשויות לשקף את הרגלי הגלישה שלך. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">היכנס כדי לגשת לכל הדברים שלך באינטרנט מכל מכשיר</translation> +<translation id="8087000398470557479">התוכן הזה הוא מ-<ph name="DOMAIN_NAME" />, ומסופק על-ידי Google.</translation> <translation id="8098570222830891427">בסביבה הקרובה יש מכשירים שמשדרים דפי אינטרנט בתקשורת Bluetooth. Chrome יאתר את הדפים האלו בסריקה ויציג אותם כשתוציא את המכשיר ממצב שינה. הדפים יעברו דרך שירות של Google כדי לשפר את איכות התוצאות. ניתן לשלוט על האינטרנט הווירטופיזי בהגדרות של Chrome.</translation> @@ -607,6 +607,7 @@ <translation id="8931159598799892500">Chrome + האינטרנט הווירטופיזי</translation> <translation id="8941248009481596111">החיבור שלך לאתר זה הוא פרטי.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">פתח בחלון האחר</translation> <translation id="8959122750345127698">הניווט לא אפשרי: <ph name="URL" /></translation> <translation id="8979340629087822094">מהיום האחרון</translation> <translation id="8987061207681586800">התאם אישית את Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb index 2342a12..a235557b 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">未保存</translation> <translation id="1061441684050139317">このサイトとマイクを共有するには Chrome にマイクへのアクセスを許可する必要があります。</translation> <translation id="1080790410959514870"><ph name="DOMAIN_NAME" /> により管理されているアカウントからログアウトします。このデバイスに保存されている Chrome データは削除されますが、Google アカウントではデータが保持されます。</translation> -<translation id="1095407227123756519">アカウントを追加すると、お使いのどのデバイスでも同じブックマーク、履歴、パスワード、その他の設定を利用できるようになります。</translation> <translation id="1098052486217676340">終了しました</translation> <translation id="1121094540300013208">利用状況と障害レポート</translation> <translation id="1137305377394488060">過去 1 時間</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">ウェブページが近くにあります</translation> <translation id="3732088672634061408">興味や関心を取得できませんでした。</translation> <translation id="3738139272394829648">タップして検索</translation> +<translation id="3744111561329211289">バックグラウンド同期</translation> <translation id="3809549525127675114">「<ph name="VIDEO_TITLE" />」が終了しました</translation> <translation id="3828029223314399057">ブックマークを検索</translation> <translation id="3871171699884605801">子供向けのアカウントで閲覧履歴を消去することはできません</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">許可</translation> <translation id="5040262127954254034">プライバシー</translation> +<translation id="5056549851600133418">おすすめの記事</translation> <translation id="5063480226653192405">使用状況</translation> <translation id="5100237604440890931">折りたたまれています - クリックすると展開します。</translation> <translation id="5107381076085091558">ダウンロードを一時停止しました。</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Google では優先度の高い機能から順に開発や改善に取り組みたいと考えています。そのため、障害が発生した場合は、実行していたファイル、アプリケーション、サービスに関する情報を Google に送信していただけますと幸いです。 使用統計データには、設定、ボタンのクリック数、メモリの使用状況などの情報が含まれ、ウェブページの URL や個人情報は含まれません。障害レポートには、障害発生時のシステム情報が含まれ、障害発生時の状況によってはウェブページの URL や個人情報が含まれることもあります。</translation> -<translation id="5715468759630044318">アカウントを選択</translation> <translation id="5719837394786370183">シークレット タブで表示したページの記録は、シークレット タブをすべて閉じた後、ブラウザの履歴、Cookieの保存場所、検索履歴から消去されます。ただし、ダウンロードしたファイルや作成したブックマークは保存されます。 あらゆる場所に記録が一切残らないわけではありません。シークレット モードを使っても、雇用主、インターネット サービス プロバイダ、訪問先のウェブサイトに閲覧内容が知られる可能性はあります。</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">保存したすべてのページ</translation> <translation id="6710213216561001401">前へ</translation> <translation id="6720988912937197322">保存したページはオフラインで表示できません</translation> -<translation id="6722992508235227685">ブックマーク、履歴、パスワードなどの設定が Google アカウントに同期され、どのデバイスでも利用できるようになります。同期する項目は [<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />] で選択できます。</translation> <translation id="6738867403308150051">ダウンロードしています…</translation> <translation id="6762156594045689028">この設定を変更するには、<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />します</translation> <translation id="6770414673596662518">また、Chrome のセーフ ブラウジング システムにより悪意のあるページが検出され、フィッシング、不正なソフトウェア、有害なダウンロードからユーザーを保護します。</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">すべてのブックマーク</translation> <translation id="7521387064766892559">Javascript</translation> <translation id="7562080006725997899">閲覧データの消去</translation> +<translation id="756809126120519699">Chrome データの消去完了</translation> <translation id="7588950540487816470">フィジカルウェブ</translation> <translation id="7596558890252710462">オペレーティング システム</translation> <translation id="7599840151813361502"><ph name="BEGIN_LINK" />Google アカウント<ph name="END_LINK" />へのログインは維持されます</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">圧縮後</translation> <translation id="8073388330009372546">新しいタブで画像を開く</translation> <translation id="8076014560081431679">保存済みのサイト設定は削除されず、普段の閲覧行動を反映した設定などが残る場合があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">ログインすると、どのデバイスからもウェブ上の自分のデータにアクセスできます</translation> +<translation id="8087000398470557479"><ph name="DOMAIN_NAME" /> のコンテンツを Google から配信しています。</translation> <translation id="8098570222830891427">近くのデバイスから Bluetooth を介してウェブページが送信されています。端末がアクティブになったとき、Chrome ではこうしたページがスキャンされ、表示されます。スキャンされたページは Google サービスに送られ、ページ結果の品質向上に使用されます。 フィジカル ウェブの管理は Chrome のプライバシー設定で行うことができます。</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + フィジカル ウェブ</translation> <translation id="8941248009481596111">このサイトへの接続はプライベート接続です。</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">別のウィンドウで開く</translation> <translation id="8959122750345127698"><ph name="URL" /> にアクセスできません</translation> <translation id="8979340629087822094">過去 1 日</translation> <translation id="8987061207681586800">自分だけの Chrome を</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb index 97e33bc..c51edea 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">비밀번호를 저장하지 않은 사이트</translation> <translation id="1061441684050139317">이 사이트에 공유하려면 Chrome에 마이크 액세스 권한이 있어야 합니다.</translation> <translation id="1080790410959514870"><ph name="DOMAIN_NAME" />에서 관리하는 계정에서 로그아웃합니다. 로그아웃하면 이 기기에 저장된 Chrome 데이터는 삭제되지만 Google 계정에는 데이터가 남습니다.</translation> -<translation id="1095407227123756519">계정을 추가하면 모든 기기에서 북마크, 방문 기록, 비밀번호, 기타 설정을 사용할 수 있습니다.</translation> <translation id="1098052486217676340">완료</translation> <translation id="1121094540300013208">사용 및 충돌 보고서</translation> <translation id="1137305377394488060">지난 1시간</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">주변에 웹페이지 있음</translation> <translation id="3732088672634061408">관심분야를 검색하지 못했습니다.</translation> <translation id="3738139272394829648">터치하여 검색</translation> +<translation id="3744111561329211289">백그라운드 동기화</translation> <translation id="3809549525127675114">'<ph name="VIDEO_TITLE" />' 재생 완료</translation> <translation id="3828029223314399057">북마크 검색</translation> <translation id="3871171699884605801">어린이용 계정으로는 인터넷 사용 기록을 삭제할 수 없습니다.</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">허용</translation> <translation id="5040262127954254034">개인정보</translation> +<translation id="5056549851600133418">추천 도움말</translation> <translation id="5063480226653192405">사용</translation> <translation id="5100237604440890931">접힘 - 펼치려면 클릭</translation> <translation id="5107381076085091558">다운로드가 일시중지되었습니다.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">다운이 발생할 때마다 실행 중인 파일, 애플리케이션, 서비스에 관한 정보를 Google에 전송하여 우선적으로 구현해야 할 기능과 개선사항을 정할 수 있도록 도와주세요. 사용 통계에는 환경설정, 버튼 클릭수, 메모리 사용량과 같은 정보가 포함되며 웹페이지 URL이나 개인정보는 포함되어 있지 않습니다. 오류 보고서에는 문제가 발생했을 당시의 시스템 정보가 포함되며 발생 당시 상황에 따라 웹페이지 URL이나 개인정보가 포함될 수도 있습니다.</translation> -<translation id="5715468759630044318">계정 선택</translation> <translation id="5719837394786370183">시크릿 탭을 모두 닫으면 시크릿 탭에서 본 페이지는 브라우저 방문 기록, 쿠키 저장소 또는 방문 기록 어디에도 흔적이 남지 않습니다. 단, 다운로드한 파일이나 생성한 북마크는 유지됩니다. 하지만 완전한 비밀이 보장되는 것은 아닙니다. 시크릿 모드로 탐색해도 회사, 인터넷 서비스 제공업체(IPS), 방문한 웹사이트에 저장된 흔적까지 없앨 수는 없습니다.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">모든 저장된 페이지</translation> <translation id="6710213216561001401">이전</translation> <translation id="6720988912937197322">저장한 페이지를 오프라인에서 사용할 수 없습니다.</translation> -<translation id="6722992508235227685">북마크, 방문 기록, 비밀번호 등 기타 설정이 Google 계정에 동기화되어 모든 기기에서 사용할 수 있습니다. <ph name="BEGIN_LINK1" />설정<ph name="END_LINK1" />에서 동기화할 항목을 선택할 수 있습니다.</translation> <translation id="6738867403308150051">다운로드 중...</translation> <translation id="6762156594045689028">이 설정을 변경하려면 <ph name="BEGIN_LINK" />동기화를 재설정<ph name="END_LINK" />합니다.</translation> <translation id="6770414673596662518">또한 Chrome의 세이프 브라우징 시스템이 악성 웹페이지를 탐지하여 피싱, 멀웨어, 유해한 다운로드로부터 사용자를 보호합니다.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">모든 북마크</translation> <translation id="7521387064766892559">자바스크립트</translation> <translation id="7562080006725997899">인터넷 사용 기록 삭제</translation> +<translation id="756809126120519699">Chrome 데이터 삭제됨</translation> <translation id="7588950540487816470">피지컬 웹</translation> <translation id="7596558890252710462">운영체제</translation> <translation id="7599840151813361502"><ph name="BEGIN_LINK" />Google 계정<ph name="END_LINK" />에서 로그아웃되지 않습니다.</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">압축 후</translation> <translation id="8073388330009372546">새 탭에서 이미지 열기</translation> <translation id="8076014560081431679">저장된 사이트 설정은 삭제되지 않으며 인터넷 사용 습관이 반영될 수 있습니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">모든 기기에서 모든 웹 항목에 액세스하려면 로그인하세요.</translation> +<translation id="8087000398470557479">이 콘텐츠의 출처는 Google에서 제공하는 <ph name="DOMAIN_NAME" />입니다.</translation> <translation id="8098570222830891427">주변 기기에서 블루투스를 사용하여 웹페이지를 전송합니다. 내 기기의 대기 모드가 해제되었을 때 Chrome에서 페이지를 스캔하고 표시합니다. 이 페이지는 페이지 결과의 품질을 높이기 위해 Google 서비스를 거칩니다. Chrome 설정에서 피지컬 웹을 관리할 수 있습니다.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + 피지컬 웹</translation> <translation id="8941248009481596111">이 사이트에 대한 연결은 비공개입니다.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">다른 창에서 열기</translation> <translation id="8959122750345127698">탐색할 수 없음: <ph name="URL" /></translation> <translation id="8979340629087822094">지난 1일</translation> <translation id="8987061207681586800">나만의 Chrome 만들기</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb index 93d2186..6eaebc5 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Niekada neišsaugota</translation> <translation id="1061441684050139317">„Chrome“ reikia galimybės pasiekti mikrofoną, kad jį būtų galima bendrinti su šia svetaine.</translation> <translation id="1080790410959514870">Atsijungiate nuo <ph name="DOMAIN_NAME" /> tvarkomos paskyros. Bus ištrinti šiame įrenginyje saugomi „Chrome“ duomenys, bet jie išliks „Google“ paskyroje.</translation> -<translation id="1095407227123756519">Pridėkite paskyrą ir pasiekite žymių, istorijos, slaptažodžių bei kitų nustatymų duomenis visuose įrenginiuose.</translation> <translation id="1098052486217676340">Baigta</translation> <translation id="1121094540300013208">Naudojimo ir strigčių ataskaitos</translation> <translation id="1137305377394488060">pastaroji valanda</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Tinklalapius transliuojantys įrenginiai yra netoliese</translation> <translation id="3732088672634061408">Nepavyko gauti pomėgių.</translation> <translation id="3738139272394829648">Paieška palietus</translation> +<translation id="3744111561329211289">Fono sinchronizavimas</translation> <translation id="3809549525127675114">Baigta leisti „<ph name="VIDEO_TITLE" />“</translation> <translation id="3828029223314399057">Ieškoti žymėse</translation> <translation id="3871171699884605801">Negalima išvalyti vaikų paskyrų naršymo istorijos</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Su užraitais</translation> <translation id="5039804452771397117">Leisti</translation> <translation id="5040262127954254034">Privatumas</translation> +<translation id="5056549851600133418">Jums skirti straipsniai</translation> <translation id="5063480226653192405">Naudojimas</translation> <translation id="5100237604440890931">Sutraukta – spustelėkite, kad išskleistumėte</translation> <translation id="5107381076085091558">Atsisiuntimas pristabdytas.</translation> @@ -353,7 +354,6 @@ <translation id="5712189971979076230">Padėkite pirmiausia sutelkti dėmesį į funkcijas ir patobulinimus, ties kuriais turėtume padirbėti, į sistemą „Google“ siųsdami informacijos apie failus, programas ir paslaugas, kurios buvo vykdomos per strigtį. Naudojimo statistika yra įvairi informacija, įskaitant nuostatas, mygtukų paspaudimus ir atminties naudojimą. Tinklalapių URL adresai ar kita asmeninė informacija neįtraukiama. Strigčių ataskaitose pateikiama užstrigusios sistemos informacija ir jose gali būti tinklalapių URL adresų ar asmeninės informacijos, atsižvelgiant į tai, kas vyko per strigtį.</translation> -<translation id="5715468759630044318">Pasirinkti paskyrą</translation> <translation id="5719837394786370183">Kai uždarysite visus inkognito skirtukų lapus, puslapiai, kuriuos žiūrite inkognito režimu, nebus saugomi naršyklės istorijoje, slapukų saugykloje ar paieškos istorijoje. Bus išsaugoti visi atsisiųsti failai ar sukurtos žymės. Tačiau nesate nematomi. Kai naudojate inkognito režimą, jūsų darbdavys, interneto paslaugų teikėjas ar lankomos svetainės vis tiek gali pasiekti naršymo informaciją.</translation> @@ -434,7 +434,6 @@ <translation id="6699351163704950317">Visi išsaugoti puslapiai</translation> <translation id="6710213216561001401">Ankstesnis</translation> <translation id="6720988912937197322">Išsaugotas puslapis nepasiekiamas neprisijungus</translation> -<translation id="6722992508235227685">Žymės, istorija, slaptažodžiai ir kiti nustatymai bus sinchronizuojami su „Google“ paskyra, kad galėtumėte juos naudoti visuose įrenginiuose. <ph name="BEGIN_LINK1" />„Nustatymų“<ph name="END_LINK1" /> skiltyje galite pasirinkti, ką norite sinchronizuoti.</translation> <translation id="6738867403308150051">Atsisiunčiama...</translation> <translation id="6762156594045689028">Kad pakeistumėte šį nustatymą, <ph name="BEGIN_LINK" />iš naujo nustatykite sinchronizavimą<ph name="END_LINK" /></translation> <translation id="6770414673596662518">„Chrome“ saugaus naršymo sistema taip pat bus naudojama siekiant aptikti kenkėjiškus puslapius ir apsaugoti jus nuo sukčiavimo, kenkėjiškų programų ir žalingų atsisiuntimų.</translation> @@ -501,6 +500,7 @@ <translation id="7501135638693251872">Visos žymės</translation> <translation id="7521387064766892559">„JavaScript“</translation> <translation id="7562080006725997899">Naršymo duomenų išvalymas</translation> +<translation id="756809126120519699">Išvalyti „Chrome“ duomenys</translation> <translation id="7588950540487816470">Fizinis žiniatinklis</translation> <translation id="7596558890252710462">Operacinė sistema</translation> <translation id="7599840151813361502">Nuo <ph name="BEGIN_LINK" />„Google“ paskyrų<ph name="END_LINK" /> atjungti nebūsite</translation> @@ -544,7 +544,7 @@ <translation id="8069239273282989646">Suglaudinus</translation> <translation id="8073388330009372546">Atid. vaizdą nauj. skirt. lap.</translation> <translation id="8076014560081431679">Išsaugoti svetainių nustatymai nebus ištrinti ir gali nurodyti naršymo įpročius. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Prisijunkite, kad pasiektumėte visus žiniatinklio elementus bet kuriuo įrenginiu.</translation> +<translation id="8087000398470557479">Šis turinys yra iš domeno <ph name="DOMAIN_NAME" />, kurį teikia „Google“.</translation> <translation id="8098570222830891427">Netoliese esantys įrenginiai transliuoja tinklalapius „Bluetooth“ ryšiu. Kai suaktyvinsite įrenginį, „Chrome“ nuskaitys puslapius ir rodys juos. Šie puslapiai bus siunčiami naudojant „Google“ paslaugą siekiant patobulinti puslapių rezultatų kokybę. Fizinį žiniatinklį galite valdyti „Chrome“ nustatymuose.</translation> @@ -610,6 +610,7 @@ <translation id="8931159598799892500">„Chrome“ + Fizinis žiniatinklis</translation> <translation id="8941248009481596111">Jūsų ryšys su šia svetaine privatus.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Atidaryti kitame lange</translation> <translation id="8959122750345127698">Naršymas nepasiekiamas: <ph name="URL" /></translation> <translation id="8979340629087822094">pastaroji diena</translation> <translation id="8987061207681586800">Suasmeninkite „Chrome“</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb index 9348cb58..13f53c8 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Netiek saglabātas</translation> <translation id="1061441684050139317">Pārlūkam Chrome ir nepieciešama piekļuve mikrofonam, lai kopīgotu to ar šo vietni.</translation> <translation id="1080790410959514870">Jūs izrakstāties no konta, kurš tiek pārvaldīts domēnā <ph name="DOMAIN_NAME" />. Tādējādi tiks dzēsti šajā ierīcē glabātie Chrome dati, taču tie joprojām būs pieejami jūsu Google kontā.</translation> -<translation id="1095407227123756519">Pievienojiet kontu, lai piekļūtu savām grāmatzīmēm, vēsturei, parolēm un citiem iestatījumiem no visām savām ierīcēm.</translation> <translation id="1098052486217676340">Pabeigts</translation> <translation id="1121094540300013208">Lietojuma un avāriju pārskati</translation> <translation id="1137305377394488060">iepriekšējās stundas</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Tuvumā ir tīmekļa lapas</translation> <translation id="3732088672634061408">Nevarēja izgūt intereses.</translation> <translation id="3738139272394829648">Meklēšana pieskaroties</translation> +<translation id="3744111561329211289">Sinhronizācija fonā</translation> <translation id="3809549525127675114">Tika pabeigta videoklipa “<ph name="VIDEO_TITLE" />” atskaņošana</translation> <translation id="3828029223314399057">Meklēt grāmatzīmes</translation> <translation id="3871171699884605801">Pārlūkošanas vēsturi nevar notīrīt, izmantojot bērniem paredzētu kontu.</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Atļaut</translation> <translation id="5040262127954254034">Privātums</translation> +<translation id="5056549851600133418">Jums piemeklēti raksti</translation> <translation id="5063480226653192405">Lietojums</translation> <translation id="5100237604440890931">Sakļauts — noklikšķiniet, lai izvērstu.</translation> <translation id="5107381076085091558">Lejupielāde apturēta.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Nosūtot Google serveriem informāciju par failiem, lietojumprogrammām un pakalpojumiem, kuri darbojas brīdī, kad notiek avārija, palīdziet mums noteikt to funkciju un uzlabojumu prioritāti, pie kā mums ir jāstrādā. Lietojuma statistikas datos tiek ietverta tāda informācija kā preferences, klikšķi uz pogām un atmiņas lietojums. Datos netiek ietverti tīmekļa lapu URL un nekāda veida personas informācija. Avāriju pārskatos tiek ietverta avārijas brīdī pieejamā informācija par sistēmu, kā arī var tikt ietverti tīmekļa lapu URL vai personas informācija atkarībā no tā, kas avārijas brīdī ir noticis.</translation> -<translation id="5715468759630044318">Izvēlieties kontu</translation> <translation id="5719837394786370183">Lapas, ko skatāt inkognito cilnēs, nebūs redzamas pārlūka vēsturē, sīkfailu krātuvē vai meklēšanas vēsturē, kad aizvērsiet visas inkognito cilnes. Tomēr visi lejupielādētie faili un izveidotās grāmatzīmes tiks saglabātas. Ņemiet vērā, ka inkognito režīmā jūs neesat neredzams. Jūsu pārlūkošanas darbības inkognito režīmā netiek slēptas no jūsu darba devēja, interneta pakalpojumu sniedzēja vai apmeklētajām vietnēm.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Visas saglabātās lapas</translation> <translation id="6710213216561001401">Iepriekšējais</translation> <translation id="6720988912937197322">Saglabātā lapa nav pieejama bezsaistē.</translation> -<translation id="6722992508235227685">Jūsu grāmatzīmes, vēsture, paroles un citi iestatījumi tiks sinhronizēti ar jūsu Google kontu, lai jūs varētu piekļūt šim saturam visās savās ierīcēs. Sinhronizējamo saturu varat izvēlēties sadaļā <ph name="BEGIN_LINK1" />Iestatījumi<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Notiek lejupielāde…</translation> <translation id="6762156594045689028">Lai mainītu šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" />.</translation> <translation id="6770414673596662518">Chrome sistēma Droša pārlūkošana tiks arī izmantota, lai noteiktu ļaunprātīgas lapas un pasargātu jūs no pikšķerēšanas, ļaunprātīgas programmatūras un kaitīgu failu lejupielādes.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Visas grāmatzīmes</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Notiek pārlūkošanas datu notīrīšana</translation> +<translation id="756809126120519699">Chrome dati tika notīrīti</translation> <translation id="7588950540487816470">Fiziskais tīmeklis</translation> <translation id="7596558890252710462">Operētājsistēma</translation> <translation id="7599840151813361502">Jūs netiksiet izrakstīts no saviem <ph name="BEGIN_LINK" />Google kontiem<ph name="END_LINK" />.</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Pēc saspiešanas</translation> <translation id="8073388330009372546">Atvērt attēlu jaunā cilnē</translation> <translation id="8076014560081431679">Saglabātie vietņu iestatījumi netiks dzēsti, un tie var atspoguļot jūsu pārlūkošanas ieradumus. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation> -<translation id="8084156870963450514">Pierakstieties, lai piekļūtu visam savam tīmekļa saturam jebkurā ierīcē.</translation> +<translation id="8087000398470557479">Šis saturs ir no vietnes <ph name="DOMAIN_NAME" />, ko nodrošina Google.</translation> <translation id="8098570222830891427">Jūsu tuvumā esošās ierīces pārraida tīmekļa lapas, izmantojot Bluetooth savienojumu. Chrome meklēs lapas un parādīs tās, kad aktivizēsiet savu ierīci. Šīs lapas tiks pārbaudītas Google pakalpojumā, lai uzlabotu lapu rezultātu kvalitāti. Fizisko tīmekli varat kontrolēt Chrome iestatījumos.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + fiziskais tīmeklis</translation> <translation id="8941248009481596111">Jūsu savienojums ar šo vietni ir privāts.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Atvērt citā logā</translation> <translation id="8959122750345127698">Navigācija nav sasniedzama: <ph name="URL" /></translation> <translation id="8979340629087822094">iepriekšējās dienas</translation> <translation id="8987061207681586800">Pielāgojiet Chrome sev</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb index e2644ee..ddcf41b6 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nooit opgeslagen</translation> <translation id="1061441684050139317">Chrome heeft microfoontoegang nodig om het item te delen met deze site.</translation> <translation id="1080790410959514870">Je logt uit van een account dat wordt beheerd door <ph name="DOMAIN_NAME" />. Hiermee worden de Chrome-gegevens verwijderd die zijn opgeslagen op dit apparaat, maar de gegevens blijven bewaard in je Google-account.</translation> -<translation id="1095407227123756519">Voeg een account toe om je bladwijzers, geschiedenis, wachtwoorden en andere instellingen op al je apparaten te bekijken.</translation> <translation id="1098052486217676340">Afgelopen</translation> <translation id="1121094540300013208">Gebruiks- en crashrapporten</translation> <translation id="1137305377394488060">het afgelopen uur</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Webpagina's in de buurt</translation> <translation id="3732088672634061408">Kan interesses niet ophalen.</translation> <translation id="3738139272394829648">Tikken om te zoeken</translation> +<translation id="3744111561329211289">Synchronisatie op de achtergrond</translation> <translation id="3809549525127675114">'<ph name="VIDEO_TITLE" />' is afgelopen</translation> <translation id="3828029223314399057">Zoeken in bladwijzers</translation> <translation id="3871171699884605801">Browsegeschiedenis kan niet worden verwijderd bij accounts voor kinderen</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Toestaan</translation> <translation id="5040262127954254034">Privacy</translation> +<translation id="5056549851600133418">Artikelen voor jou</translation> <translation id="5063480226653192405">Gebruik</translation> <translation id="5100237604440890931">Samengevouwen; klik om uit te vouwen.</translation> <translation id="5107381076085091558">Download onderbroken.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Help ons prioriteit aan te geven aan de functies en verbeteringen waaraan we moeten werken door Google informatie te sturen over de bestanden, apps en services die worden uitgevoerd op het moment dat er een crash plaatsvindt. Gebruiksstatistieken omvatten informatie zoals voorkeuren, klikken op knoppen en geheugengebruik. Ze bevatten geen URL's van webpagina's of persoonlijke gegevens. Crashrapporten bevatten systeeminformatie ten tijde van de crash en kunnen URL's van webpagina's of persoonlijke gegevens bevatten, afhankelijk van wat er gebeurde op het moment van de crash.</translation> -<translation id="5715468759630044318">Account kiezen</translation> <translation id="5719837394786370183">Pagina's die je bekijkt op incognitotabbladen, blijven niet in de geschiedenis, cookie-opslag of zoekgeschiedenis van je browser staan nadat je alle incognitotabbladen hebt gesloten. Bestanden die je downloadt of bladwijzers die je instelt, blijven behouden. Je bent echter niet onzichtbaar. Als je incognito bent, wordt je browsegeschiedenis niet verborgen voor je werkgever, je internetprovider of de websites die je bezoekt.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Alle opgeslagen pagina's</translation> <translation id="6710213216561001401">Vorige</translation> <translation id="6720988912937197322">Opgeslagen pagina niet offline beschikbaar</translation> -<translation id="6722992508235227685">Je bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden gesynchroniseerd met je Google-account, zodat je ze op al je apparaten kunt gebruiken. Je kunt via <ph name="BEGIN_LINK1" />Instellingen<ph name="END_LINK1" /> aangeven wat je wilt synchroniseren.</translation> <translation id="6738867403308150051">Downloaden...</translation> <translation id="6762156594045689028">Als je deze instelling wilt wijzigen, <ph name="BEGIN_LINK" />stel je de synchronisatie opnieuw in<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Het Safe Browsing-systeem van Chrome wordt ook gebruikt om onveilige pagina's te detecteren en je te beschermen tegen phishing, malware en andere schadelijke downloads.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Alle bladwijzers</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Browsegegevens wissen</translation> +<translation id="756809126120519699">Chrome-gegevens gewist</translation> <translation id="7588950540487816470">Fysieke web</translation> <translation id="7596558890252710462">Besturingssysteem</translation> <translation id="7599840151813361502">Je wordt niet uitgelogd van je <ph name="BEGIN_LINK" />Google-accounts<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Na compressie</translation> <translation id="8073388330009372546">Openen op nieuw tabblad</translation> <translation id="8076014560081431679">Opgeslagen site-instellingen worden niet verwijderd en kunnen je browsegedrag weerspiegelen. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Log in zodat al je online items toegankelijk zijn vanaf elk apparaat</translation> +<translation id="8087000398470557479">Deze content is afkomstig van <ph name="DOMAIN_NAME" />, geleverd door Google.</translation> <translation id="8098570222830891427">Apparaten bij je in de buurt verzenden webpagina's via Bluetooth. Chrome scant op pagina's en geeft ze weer wanneer je je apparaat activeert uit de slaapstand. Deze pagina's worden verwerkt door een Google-servcice om de kwaliteit van paginaresultaten te verbeteren. Je kunt het Fysieke web beheren via de instellingen van Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Fysieke web</translation> <translation id="8941248009481596111">Je verbinding met deze site is privé.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Openen in een ander venster</translation> <translation id="8959122750345127698">Navigatie is onbereikbaar: <ph name="URL" /></translation> <translation id="8979340629087822094">de afgelopen dag</translation> <translation id="8987061207681586800">Personaliseer Chrome voor jou</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb index 86314e2..3ebf915c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Aldri lagret</translation> <translation id="1061441684050139317">Chrome må ha tilgang til mikrofonen for å kunne dele den med dette nettstedet.</translation> <translation id="1080790410959514870">Du er i ferd med å logge av en konto som er administrert av <ph name="DOMAIN_NAME" />. Dette fører til at Chrome-data som er lagret på enheten, slettes. Dataene er imidlertid fortsatt lagret i Google-kontoen din.</translation> -<translation id="1095407227123756519">Legg til en konto for å få bokmerkene, loggen, passordene og de andre innstillingene dine på alle enhetene du bruker.</translation> <translation id="1098052486217676340">Ferdig</translation> <translation id="1121094540300013208">Bruks- og programstopprapporter</translation> <translation id="1137305377394488060">den siste timen</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Det finnes nettsider i nærheten</translation> <translation id="3732088672634061408">Kunne ikke hente interesser.</translation> <translation id="3738139272394829648">Trykk for å søke</translation> +<translation id="3744111561329211289">Bakgrunnssynkronisering</translation> <translation id="3809549525127675114"><ph name="VIDEO_TITLE" /> er ferdig</translation> <translation id="3828029223314399057">Søk i bokmerker</translation> <translation id="3871171699884605801">Nettlesingsloggen kan ikke slettes for barnekontoer</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Tillat</translation> <translation id="5040262127954254034">Personvern</translation> +<translation id="5056549851600133418">Artikler for deg</translation> <translation id="5063480226653192405">Bruk</translation> <translation id="5100237604440890931">Minimert – klikk for å utvide</translation> <translation id="5107381076085091558">Nedlastingen er satt på pause.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Hjelp oss med å prioritere funksjonene og forbedringene vi skal jobbe på, ved å sende Google informasjon om filene, appene og tjenestene som kjører når du opplever et krasj. Bruksstatistikken inneholder informasjon om for eksempel innstillinger, knappeklikk og minnebruk. Den inneholder ikke nettadresser eller personopplysninger. Programstopprapporter inneholder systeminformasjon fra krasjtidspunktet, og de kan inneholde nettadresser eller personopplysninger, avhengig av hva som skjedde på krasjtidspunktet.</translation> -<translation id="5715468759630044318">Velg en konto</translation> <translation id="5719837394786370183">Når du åpner sider i inkognitofaner, lagres de ikke i nettleser- eller søkeloggen, og eventuelle informasjonskapsler slettes. Filer du laster ned og bokmerker du oppretter, beholdes. Du er imidlertid ikke usynlig. Inkognito-modusen skjuler ikke surfingen din for arbeidsgiveren, nettleverandøren eller nettstedene du besøker.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Alle lagrede sider</translation> <translation id="6710213216561001401">Forrige</translation> <translation id="6720988912937197322">Den lagrede siden er ikke tilgjengelig uten nett</translation> -<translation id="6722992508235227685">Bokmerkene dine, loggen din, passordene dine og andre innstillinger synkroniseres til Google-kontoen din, slik at du kan bruke dem på alle enhetene dine. Du kan velge hva som skal synkroniseres, i <ph name="BEGIN_LINK1" />innstillingene<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Laster ned …</translation> <translation id="6762156594045689028">For å endre denne innstillingen, <ph name="BEGIN_LINK" />tilbakestill synkroniseringen<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Safe Browsing-systemet («sikker surfing») i Chrome brukes også til å oppdage skadelige sider og beskytte deg mot nettfisking, skadelig programvare og skadelige nedlastinger.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Alle bokmerker</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Sletter nettlesingsdata</translation> +<translation id="756809126120519699">Chrome-dataene er slettet</translation> <translation id="7588950540487816470">Fysisk nett</translation> <translation id="7596558890252710462">Operativsystem</translation> <translation id="7599840151813361502">Du logges ikke av <ph name="BEGIN_LINK" />Google-kontoene<ph name="END_LINK" /> dine</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Etter komprimering</translation> <translation id="8073388330009372546">Åpne bildet i en ny fane</translation> <translation id="8076014560081431679">Lagrede nettstedsinnstillinger slettes ikke og kan gjenspeile nettleserbruken din. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Logg på, så får du tilgang til alt du har på nettet, på alle enheter du bruker</translation> +<translation id="8087000398470557479">Dette innholdet er fra <ph name="DOMAIN_NAME" /> og er levert av Google.</translation> <translation id="8098570222830891427">Enheter i nærheten av deg kringkaster nettsider via Bluetooth. Chrome søker etter sider og viser dem når du vekker enheten. Disse sidene går gjennom en Google-tjeneste for å forbedre kvaliteten på sideresultatene. Du kan kontrollere det fysiske nettet i Chrome-innstillingene.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + det fysiske nettet</translation> <translation id="8941248009481596111">Tilkoblingen til dette nettstedet er privat.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Åpne i et annet vindu</translation> <translation id="8959122750345127698">Nettadressen er utilgjengelig: <ph name="URL" /></translation> <translation id="8979340629087822094">det siste døgnet</translation> <translation id="8987061207681586800">Tilpass Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb index f3e292d..c847d9f3 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nigdy nie zapisane</translation> <translation id="1061441684050139317">Aby zezwolić stronie na wykorzystanie mikrofonu, Chrome musi mieć do niego dostęp.</translation> <translation id="1080790410959514870">Wylogowujesz się z konta zarządzanego przez <ph name="DOMAIN_NAME" />. Spowoduje to usunięcie danych Chrome zapisanych na tym urządzeniu, jednak pozostaną one na Twoim koncie Google.</translation> -<translation id="1095407227123756519">Dodaj konto, by korzystać z zakładek, historii, haseł i innych ustawień na wszystkich swoich urządzeniach.</translation> <translation id="1098052486217676340">Zakończono</translation> <translation id="1121094540300013208">Raporty o użytkowaniu i awariach</translation> <translation id="1137305377394488060">z ostatniej godziny</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Znaleziono strony internetowe w pobliżu</translation> <translation id="3732088672634061408">Nie udało się pobrać zainteresowań.</translation> <translation id="3738139272394829648">Dotknij, by wyszukać</translation> +<translation id="3744111561329211289">Synchronizacja w tle</translation> <translation id="3809549525127675114">Zakończono odtwarzanie „<ph name="VIDEO_TITLE" />”</translation> <translation id="3828029223314399057">Przeszukaj zakładki</translation> <translation id="3871171699884605801">Na kontach dla dzieci nie można usunąć historii przeglądania</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Szeryfowa</translation> <translation id="5039804452771397117">Zezwalaj</translation> <translation id="5040262127954254034">Prywatność</translation> +<translation id="5056549851600133418">Artykuły dla Ciebie</translation> <translation id="5063480226653192405">Wykorzystanie</translation> <translation id="5100237604440890931">Zwinięty – kliknij, by rozwinąć.</translation> <translation id="5107381076085091558">Pobieranie zostało wstrzymane.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Pomóż nam określić najważniejsze funkcje i ulepszenia, nad którymi powinniśmy pracować, wysyłając do Google przy każdej awarii informacje o plikach, aplikacjach oraz uruchomionych usługach. Statystyki użytkowania obejmują np. dane o ustawieniach, kliknięciach przycisków i wykorzystaniu pamięci. Nie zawierają one adresów URL stron internetowych ani żadnych danych osobowych. Raporty o awariach zawierają informacje systemowe z chwili awarii i mogą obejmować adresy URL stron internetowych lub dane osobowe w zależności od okoliczności awarii.</translation> -<translation id="5715468759630044318">Wybierz konto</translation> <translation id="5719837394786370183">Po zamknięciu wszystkich kart incognito wyświetlane na nich strony nie pozostawią żadnych śladów w historii przeglądarki, magazynie plików cookie ani historii wyszukiwania. Pobrane pliki i utworzone zakładki zostaną zachowane. To jednak nie oznacza, że Cię nie widać. Nawet gdy przejdziesz w tryb incognito, Twój pracodawca, dostawca usług internetowych czy webmasterzy otwieranych stron mogą dowiedzieć się, co przeglądasz.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Wszystkie zapisane strony</translation> <translation id="6710213216561001401">Wstecz</translation> <translation id="6720988912937197322">Zapisana strona nie jest dostępna w trybie offline</translation> -<translation id="6722992508235227685">Zakładki, historia, hasła i inne ustawienia zostaną zsynchronizowane z kontem Google, by można było z nich korzystać na wszystkich urządzeniach. Elementy do zsynchronizowania możesz wybrać w <ph name="BEGIN_LINK1" />Ustawieniach<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Pobieram…</translation> <translation id="6762156594045689028">Aby zmienić to ustawienie, <ph name="BEGIN_LINK" />zresetuj synchronizację<ph name="END_LINK" /></translation> <translation id="6770414673596662518">System Bezpieczne przeglądanie w Chrome jest też używany do wykrywania złośliwych stron oraz ochrony przed wyłudzaniem informacji, złośliwym oprogramowaniem i szkodliwymi plikami do pobrania.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Wszystkie zakładki</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Czyszczenie danych przeglądania</translation> +<translation id="756809126120519699">Wyczyszczono dane Chrome</translation> <translation id="7588950540487816470">Internet rzeczy</translation> <translation id="7596558890252710462">System operacyjny</translation> <translation id="7599840151813361502">Nie spowoduje to wylogowania Cię z <ph name="BEGIN_LINK" />kont Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Po skompresowaniu</translation> <translation id="8073388330009372546">Otwórz grafikę w nowej karcie</translation> <translation id="8076014560081431679">Zapisane ustawienia witryn nie zostaną usunięte i mogą zawierać informacje o Twoim korzystaniu z przeglądarki. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Zaloguj się, by móc korzystać ze wszystkich swoich rzeczy związanych z internetem na dowolnym urządzeniu</translation> +<translation id="8087000398470557479">Treść z <ph name="DOMAIN_NAME" /> dostarczana przez Google.</translation> <translation id="8098570222830891427">Urządzenia w pobliżu przekazują strony internetowe przy użyciu Bluetooth. Chrome wyszuka te strony i wyświetli je, gdy wybudzisz urządzenie. Następnie trafią one do usługi Google, która zwiększy trafność wyników. Internet rzeczy możesz skonfigurować w ustawieniach Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + internet rzeczy</translation> <translation id="8941248009481596111">Twoje połączenie z tą witryną jest prywatne.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Otwórz w innym oknie</translation> <translation id="8959122750345127698">Adres nieosiągalny: <ph name="URL" /></translation> <translation id="8979340629087822094">z ostatniego dnia</translation> <translation id="8987061207681586800">Dostosuj Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb index 60d2b21..11ab76a6 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nunca salvam</translation> <translation id="1061441684050139317">O Chrome precisa ter acesso ao microfone para compartilhá-lo com este site.</translation> <translation id="1080790410959514870">Você está se desconectando de uma conta gerenciada por <ph name="DOMAIN_NAME" />. Essa ação excluirá os dados do Google Chrome armazenados neste dispositivo, mas os dados permanecerão na sua Conta do Google.</translation> -<translation id="1095407227123756519">Adicione uma conta para ver seus favoritos, histórico, senhas e outras configurações em todos os seus dispositivos.</translation> <translation id="1098052486217676340">Concluído</translation> <translation id="1121094540300013208">Relatórios de uso e falhas</translation> <translation id="1137305377394488060">da última hora</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Há páginas da Web nas proximidades</translation> <translation id="3732088672634061408">Não foi possível recuperar interesses.</translation> <translation id="3738139272394829648">Tocar para pesquisar</translation> +<translation id="3744111561329211289">Sincronização em segundo plano</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" concluído</translation> <translation id="3828029223314399057">Pesquisar favoritos</translation> <translation id="3871171699884605801">Não é possível limpar o histórico de navegação com contas para crianças</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidade</translation> +<translation id="5056549851600133418">Artigos para você</translation> <translation id="5063480226653192405">Uso</translation> <translation id="5100237604440890931">Visualização recolhida. Clique para expandir</translation> <translation id="5107381076085091558">Download pausado.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Ajude-nos a priorizar os recursos e aprimoramentos nos quais deveríamos trabalhar, enviando informações ao Google sobre os arquivos, aplicativos e serviços que estão sendo executados quando ocorre uma falha. As estatísticas de uso incluem informações como preferências, cliques em botões e uso da memória. Elas não incluem URLs de páginas da Web ou qualquer informação pessoal. Relatórios de erros contêm informações do sistema do momento da falha e podem conter URLs de páginas da Web ou informações pessoais, dependendo de o que estava acontecendo no momento da falha.</translation> -<translation id="5715468759630044318">Escolher conta</translation> <translation id="5719837394786370183">As páginas que você visualiza nas guias anônimas não permanecem no histórico do navegador, no armazenamento de cookies nem no histórico de pesquisa depois que você fecha todas as guias anônimas. Os arquivos que você transfere por download ou os favoritos que cria são mantidos. No entanto, você não fica invisível. O modo anônimo não oculta sua navegação do seu empregador, do seu provedor de acesso à Internet ou dos websites que você visita.</translation> <translation id="572328651809341494">Guias recentes</translation> @@ -432,7 +432,6 @@ <translation id="6699351163704950317">Todas as páginas salvas</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6720988912937197322">Página salva não disponível off-line</translation> -<translation id="6722992508235227685">Seus favoritos, histórico, senhas e outras configurações serão sincronizados com sua Conta do Google para que você possa usá-los em todos os dispositivos. Escolha o que sincronizar em <ph name="BEGIN_LINK1" />Configurações<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Fazendo o download...</translation> <translation id="6762156594045689028">Para alterar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" /></translation> <translation id="6770414673596662518">O sistema de Navegação segura do Chrome também é usado para detectar páginas maliciosas e proteger você contra phishing, malware e downloads nocivos.</translation> @@ -499,6 +498,7 @@ <translation id="7501135638693251872">Todos os favoritos</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Limpando dados de navegação</translation> +<translation id="756809126120519699">Dados do Chrome apagados</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7596558890252710462">Sistema operacional</translation> <translation id="7599840151813361502">Você não será desconectado das suas <ph name="BEGIN_LINK" />Contas do Google<ph name="END_LINK" /></translation> @@ -542,7 +542,7 @@ <translation id="8069239273282989646">Após compactação</translation> <translation id="8073388330009372546">Abrir imagem em nova guia</translation> <translation id="8076014560081431679">As configurações salvas em sites não são excluídas e podem refletir seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Faça login para acessar tudo o que você tem na Web, a partir de qualquer dispositivo</translation> +<translation id="8087000398470557479">Este conteúdo é de <ph name="DOMAIN_NAME" />, veiculado pelo Google.</translation> <translation id="8098570222830891427">Dispositivos próximos a você estão transmitindo páginas da Web por Bluetooth. O Chrome procurará e exibirá páginas quando você ativar seu dispositivo. Elas passarão por um serviço do Google para melhorar a qualidade dos resultados de páginas. É possível controlar a Web física nas configurações do Chrome.</translation> @@ -607,6 +607,7 @@ <translation id="8931159598799892500">Chrome + Web física</translation> <translation id="8941248009481596111">Sua conexão a este site é particular.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Abrir em outra janela</translation> <translation id="8959122750345127698">A Navegação GPS está inacessível: <ph name="URL" /></translation> <translation id="8979340629087822094">do dia anterior</translation> <translation id="8987061207681586800">O Chrome é seu</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb index 73055f6..9a80a4a 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nunca guardadas</translation> <translation id="1061441684050139317">O Chrome necessita de acesso ao microfone para o partilhar com este site.</translation> <translation id="1080790410959514870">Está a terminar sessão numa conta gerida por <ph name="DOMAIN_NAME" />. Esta ação elimina os dados do Chrome armazenados neste dispositivo, mas os dados permanecem na sua Conta Google.</translation> -<translation id="1095407227123756519">Adicione uma conta para aceder aos marcadores, ao histórico, às palavras-passe e a outras definições em todos os dispositivos.</translation> <translation id="1098052486217676340">Concluído</translation> <translation id="1121094540300013208">Relatórios de utilização e falhas</translation> <translation id="1137305377394488060">da hora anterior</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Existem páginas Web próximas</translation> <translation id="3732088672634061408">Não foi possível obter os interesses.</translation> <translation id="3738139272394829648">Tocar para pesquisar</translation> +<translation id="3744111561329211289">Sincronização em segundo plano</translation> <translation id="3809549525127675114">"<ph name="VIDEO_TITLE" />" concluído</translation> <translation id="3828029223314399057">Pesquisar marcadores</translation> <translation id="3871171699884605801">Não é possível limpar o histórico de navegação nas contas para crianças</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidade</translation> +<translation id="5056549851600133418">Artigos para si</translation> <translation id="5063480226653192405">Utilização</translation> <translation id="5100237604440890931">Reduzido. Clique para expandir.</translation> <translation id="5107381076085091558">Transferência interrompida.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Ajude-nos a dar prioridade às funcionalidades e às melhorias nas quais devemos trabalhar ao enviar à Google informações sobre os ficheiros, as aplicações e os serviços em execução sempre que ocorrer uma falha. As estatísticas de utilização incluem informações como preferências, cliques em botões e utilização da memória. Estas não incluem URLs de páginas Web nem quaisquer informações pessoais. Os relatórios de falhas contêm informações do sistema no momento em que as falhas ocorreram e podem conter URLs de páginas Web ou informações pessoais, consoante as operações em curso no momento da falha.</translation> -<translation id="5715468759630044318">Escolher conta</translation> <translation id="5719837394786370183">As páginas que visualizar em separadores de navegação anónima não serão guardadas no histórico do navegador, no armazenamento de cookies ou no histórico de pesquisas depois de fechar todos os separadores de navegação anónima. Os ficheiros que transferir ou os marcadores que criar manter-se-ão. No entanto, a navegação não é invisível. Passar para o modo de navegação anónima não oculta a navegação do empregador ou do prestador de serviços de Internet, nem os Websites que visitar.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Todas as páginas guardadas</translation> <translation id="6710213216561001401">Anterior</translation> <translation id="6720988912937197322">Página guardada não disponível offline</translation> -<translation id="6722992508235227685">Os marcadores, o histórico, as palavras-passe e outras definições são sincronizados com a sua Conta Google para que os possa utilizar em todos os dispositivos. Pode escolher os conteúdos a sincronizar em <ph name="BEGIN_LINK1" />Definições<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">A transferir...</translation> <translation id="6762156594045689028">Para alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" /></translation> <translation id="6770414673596662518">O sistema de Navegação segura do Chrome também será utilizado para detetar páginas maliciosas e para o proteger contra phishing, programas maliciosos e transferências prejudiciais.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Todos os marcadores</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">A limpar dados de navegação</translation> +<translation id="756809126120519699">Dados do Chrome limpos</translation> <translation id="7588950540487816470">Web física</translation> <translation id="7596558890252710462">Sistema operativo</translation> <translation id="7599840151813361502">A sessão nas suas <ph name="BEGIN_LINK" />Contas Google<ph name="END_LINK" /> não é terminada</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Após compressão</translation> <translation id="8073388330009372546">Abrir imagem num novo separad.</translation> <translation id="8076014560081431679">As definições de sites guardadas não são eliminadas e podem refletir os seus hábitos de navegação. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Iniciar sessão para aceder a todo o seu conteúdo da Web a partir de qualquer dispositivo</translation> +<translation id="8087000398470557479">Este conteúdo é proveniente de <ph name="DOMAIN_NAME" />, fornecido pela Google.</translation> <translation id="8098570222830891427">Existem dispositivos próximos de si a transmitir páginas Web através de Bluetooth. O Chrome procura páginas e apresenta-as quando reativar o dispositivo. Estas páginas passam por um serviço Google para melhorar a qualidade dos resultados da página. Pode controlar a Web física nas definições do Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Web física</translation> <translation id="8941248009481596111">A sua ligação a este site é privada.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Abrir noutra janela</translation> <translation id="8959122750345127698">A navegação está inacessível: <ph name="URL" /></translation> <translation id="8979340629087822094">do dia anterior</translation> <translation id="8987061207681586800">Personalizar o Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb index 439e71b5e..14b90d9 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nu se salvează niciodată</translation> <translation id="1061441684050139317">Chrome are nevoie de acces la microfon pentru a-l acorda acestui site.</translation> <translation id="1080790410959514870">În prezent, te deconectezi de la un cont gestionat de <ph name="DOMAIN_NAME" />. Astfel, vor fi șterse datele Chrome stocate pe acest dispozitiv, dar datele vor rămâne în Contul Google.</translation> -<translation id="1095407227123756519">Adaugă un cont pentru a avea marcajele, istoricul, parolele și alte setări pe toate dispozitivele.</translation> <translation id="1098052486217676340">Terminat</translation> <translation id="1121094540300013208">Statistici de utilizare și rapoarte de blocare</translation> <translation id="1137305377394488060">din ultima oră</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Există pagini web în apropiere</translation> <translation id="3732088672634061408">Interesele nu au putut fi preluate.</translation> <translation id="3738139272394829648">Atinge pentru a căuta</translation> +<translation id="3744111561329211289">Sincronizare în fundal</translation> <translation id="3809549525127675114">Videoclipul „<ph name="VIDEO_TITLE" />” s-a terminat</translation> <translation id="3828029223314399057">Căutați în marcaje</translation> <translation id="3871171699884605801">Istoricul de navigare nu poate fi golit folosind conturile de copii</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Permite</translation> <translation id="5040262127954254034">Confidențialitate</translation> +<translation id="5056549851600133418">Articole pentru tine</translation> <translation id="5063480226653192405">Utilizare</translation> <translation id="5100237604440890931">Afișare restrânsă – dă clic pentru a extinde.</translation> <translation id="5107381076085091558">Descărcare întreruptă.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Trimite la Google informații despre fișierele, aplicațiile și serviciile care rulează când te confrunți cu o blocare, pentru a ne ajuta să stabilim la care funcții și îmbunătățiri ar trebui să lucrăm. Statisticile de utilizare includ informații precum preferințele, clicurile pe butoane și utilizarea memoriei. Acestea nu includ adresele URL ale paginilor web sau alte informații personale. Rapoartele de blocare includ informații despre sistem din momentul blocării și pot include adresele URL ale paginilor web sau informații personale, în funcție de ceea ce s-a întâmplat în momentul blocării.</translation> -<translation id="5715468759630044318">Alege contul</translation> <translation id="5719837394786370183">Paginile pe care le vezi în filele incognito nu vor fi înregistrate în istoricul browserului, nu vor stoca cookie-uri și nu vor rămâne în istoricul de căutare după ce închizi toate filele incognito. Fișierele descărcate și marcajele create vor fi păstrate. Totuși, nu ești invizibil(ă). Trecerea în modul incognito nu ascunde activitatea de navigare față de angajator, față de furnizorul de servicii de internet sau față de site-urile pe care le accesezi.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Toate paginile salvate</translation> <translation id="6710213216561001401">Înapoi</translation> <translation id="6720988912937197322">Pagina salvată nu este disponibilă offline</translation> -<translation id="6722992508235227685">Marcajele, istoricul, parolele și alte setări vor fi sincronizate cu Contul Google pentru a le putea folosi pe toate dispozitivele. Poți alege ce să sincronizezi în <ph name="BEGIN_LINK1" />Setări<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Se descarcă...</translation> <translation id="6762156594045689028">Pentru a modifica această setare, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Sistemul Navigare sigură din Chrome va fi folosit pentru a detecta pagini rău-intenționate și pentru a te proteja împotriva phishingului, a programelor malware și a descărcărilor periculoase.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Toate marcajele</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Se șterg datele de navigare</translation> +<translation id="756809126120519699">Datele Chrome au fost șterse</translation> <translation id="7588950540487816470">Web material</translation> <translation id="7596558890252710462">Sistem de operare</translation> <translation id="7599840151813361502">Nu vei fi deconectat(ă) de la <ph name="BEGIN_LINK" />Conturile Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">După comprimare</translation> <translation id="8073388330009372546">Vedeți imaginea în filă nouă</translation> <translation id="8076014560081431679">Setările salvate pentru site-uri nu vor fi șterse și pot reflecta obiceiurile de navigare. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Conectează-te pentru a-ți accesa tot conținutul de pe web folosind orice dispozitiv</translation> +<translation id="8087000398470557479">Acest conținut provine de pe <ph name="DOMAIN_NAME" />, oferit de Google.</translation> <translation id="8098570222830891427">Dispozitive din apropierea ta difuzează pagini web prin Bluetooth. Chrome va căuta astfel de pagini și le va afișa când activezi dispozitivul. Aceste pagini vor fi procesate de un serviciu Google pentru a îmbunătăți calitatea rezultatelor cu pagini. Poți să controlezi Webul material din Setările Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Webul material</translation> <translation id="8941248009481596111">Conexiunea la acest site este privată.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Deschide în altă fereastră</translation> <translation id="8959122750345127698">Navigarea nu este accesibilă: <ph name="URL" /></translation> <translation id="8979340629087822094">din ultima zi</translation> <translation id="8987061207681586800">Personalizează Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb index 5b8aa13..52e0e49 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Сайты, пароли для которых не сохраняются</translation> <translation id="1061441684050139317">Предоставьте браузеру Chrome доступ к микрофону, чтобы пользоваться им на этом сайте.</translation> <translation id="1080790410959514870">Вы выходите из аккаунта, которым управляет администратор домена <ph name="DOMAIN_NAME" />. Все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.</translation> -<translation id="1095407227123756519">Добавьте аккаунт, и вы сможете работать с одними и теми же закладками, историей, паролями и другими настройками на любом устройстве.</translation> <translation id="1098052486217676340">Завершено</translation> <translation id="1121094540300013208">Отчеты об использовании и сбоях</translation> <translation id="1137305377394488060">последний час</translation> @@ -354,7 +353,6 @@ <translation id="5712189971979076230">Расскажите, на какие проблемы нам стоит обратить внимание прежде всего. Для этого отправляйте в Google сведения о файлах, приложениях и сервисах, в работе которых возникли сбои. В статистику использования включаются сведения о настройках, нажатиях кнопок и использовании памяти, но не входят URL веб-страниц и личная информация. Отчеты о сбоях содержат системную информацию на момент сбоя, а иногда также URL веб-страниц и личные данные (в зависимости от того, как использовался браузер).</translation> -<translation id="5715468759630044318">Выберите аккаунт</translation> <translation id="5719837394786370183">Страницы, открытые в этом окне, не останутся в истории браузера или поиска. Они не оставят на компьютере следов, таких как файлы cookie, после того как вы закроете все вкладки инкогнито. Скачанные вами файлы и добавленные закладки будут сохранены. В режиме инкогнито ваши действия видны системному администратору и интернет-провайдеру, а также доступны веб-сайтам, которые вы посещаете.</translation> @@ -435,7 +433,6 @@ <translation id="6699351163704950317">Все сохраненные страницы</translation> <translation id="6710213216561001401">Назад</translation> <translation id="6720988912937197322">Страница недоступна в офлайн-режиме</translation> -<translation id="6722992508235227685">Пароли, закладки, история и другие параметры будут синхронизированы с аккаунтом Google, чтобы у вас был доступ к ним на любом устройстве. Выбрать данные для синхронизации можно в <ph name="BEGIN_LINK1" />Настройках<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Скачивание…</translation> <translation id="6762156594045689028">Чтобы изменить эту настройку, <ph name="BEGIN_LINK" />сбросьте параметры синхронизации<ph name="END_LINK" />.</translation> <translation id="6770414673596662518">Функция "Безопасный просмотр" также позволяет обнаружить подозрительные страницы и защитить устройство от фишинга и вредоносного ПО.</translation> @@ -546,7 +543,6 @@ <translation id="8069239273282989646">После сжатия</translation> <translation id="8073388330009372546">Открыть в новой вкладке</translation> <translation id="8076014560081431679">Настройки сайтов не изменятся, поэтому данные о вашей работе в Интернете сохранятся. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Войдите в аккаунт и получите доступ к своим данным, например вкладкам и истории просмотров, на любом устройстве</translation> <translation id="8087000398470557479">Контент с сайта <ph name="DOMAIN_NAME" />. Получен с помощью Google.</translation> <translation id="8098570222830891427">Просматривайте веб-страницы, связанные с объектами вокруг вас. Chrome будет искать их с помощью Bluetooth, когда ваше устройство разблокировано. Чтобы улучшить работу функции, страницы будут отправляться через сервис Google.
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb index 8749497..4480dee4 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Neuložené</translation> <translation id="1061441684050139317">Na to, aby Chrome mohol s týmito webovými stránkami zdieľať mikrofón, musí mať k nemu prístup.</translation> <translation id="1080790410959514870">Odhlasujete sa z účtu spravovaného doménou <ph name="DOMAIN_NAME" />. Vymažú sa údaje prehliadača Chrome uložené na tomto zariadení, ale údaje uložené v účte Google zostanú zachované.</translation> -<translation id="1095407227123756519">Pridajte si účet a získajte svoje záložky, históriu, heslá a nastavenia do všetkých svojich zariadení.</translation> <translation id="1098052486217676340">Dokončené</translation> <translation id="1121094540300013208">Správy o použití a o zlyhaní</translation> <translation id="1137305377394488060">poslednej hodiny</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">V okolí sú webové stránky</translation> <translation id="3732088672634061408">Nepodarilo sa načítať záujmy.</translation> <translation id="3738139272394829648">Vyhľadávanie klepnutím</translation> +<translation id="3744111561329211289">Synchronizácia na pozadí</translation> <translation id="3809549525127675114">Dokončené prehrávanie videa <ph name="VIDEO_TITLE" /></translation> <translation id="3828029223314399057">Prehľadať záložky</translation> <translation id="3871171699884605801">Históriu prehliadania nie je možné vymazať prostredníctvom účtu pre deti</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Pätkové</translation> <translation id="5039804452771397117">Povoliť</translation> <translation id="5040262127954254034">Ochrana súkromia</translation> +<translation id="5056549851600133418">Články pre vás</translation> <translation id="5063480226653192405">Použitie</translation> <translation id="5100237604440890931">Zbalená (rozbalíte ju kliknutím)</translation> <translation id="5107381076085091558">Sťahovanie bolo pozastavené.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Pomôžte nám určiť tie funkcie a zlepšenia, na ktorých by sme mali pracovať. Odosielajte Googlu informácie o súboroch, aplikáciách a službách spustených pri zlyhaní. Štatistiky používania obsahujú informácie, ako sú predvoľby, kliknutia na tlačidlá a využitie pamäte. Nie sú v nich však zahrnuté webové adresy stránok ani osobné informácie. Správy o zlyhaní obsahujú systémové informácie z času, kedy došlo k zlyhaniu. V závislosti od toho, aké aplikácie a služby boli v čase zlyhania spustené, môžu obsahovať webové adresy stránok alebo osobné informácie.</translation> -<translation id="5715468759630044318">Vybrať účet</translation> <translation id="5719837394786370183">Stránky, ktoré si zobrazíte na kartách inkognito, budú odstránené z histórie prehliadača, z histórie vyhľadávania aj zo súborov cookie okamžite po zatvorení všetkých kariet inkognito. Stiahnuté súbory a záložky, ktoré vytvoríte, ostanú uložené. Nie ste však neviditeľný/-á. Používanie režimu inkognito neukryje vaše prehliadanie pred vaším zamestnávateľom, poskytovateľom internetových služieb či webovými stránkami, ktoré navštívite.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Všetky uložené stránky</translation> <translation id="6710213216561001401">Dozadu</translation> <translation id="6720988912937197322">Uložená stránka nie je k dispozícii v režime offline</translation> -<translation id="6722992508235227685">Záložky, história, heslá a ďalšie nastavenia budú synchronizované s vaším účtom Google a budete ich môcť použiť na všetkých zariadeniach. Položky, ktoré chcete synchronizovať, môžete vybrať v <ph name="BEGIN_LINK1" />Nastaveniach<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Sťahuje sa...</translation> <translation id="6762156594045689028">Ak chcete zmeniť toto nastavenie, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Systém Bezpečné prehliadanie v prehliadači Chrome sa použije aj na rozpoznanie škodlivých stránok a ochranu pred phishingom, malvérom a sťahovaním škodlivých súborov.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Všetky záložky</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Vymazávajú sa údaje prehliadania</translation> +<translation id="756809126120519699">Údaje Chromu boli vymazané</translation> <translation id="7588950540487816470">Fyzický web</translation> <translation id="7596558890252710462">Operačný systém</translation> <translation id="7599840151813361502">Neodhlásime vás z vašich <ph name="BEGIN_LINK" />účtov Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Po kompresii</translation> <translation id="8073388330009372546">Otvoriť obrázok na novej karte</translation> <translation id="8076014560081431679">Uložené nastavenia webov sa neodstránia a môžu odrážať vaše návyky prehliadania. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Prihláste sa a získajte prístup k všetkým svojim položkám na webe z ľubovoľného zariadenia</translation> +<translation id="8087000398470557479">Tento obsah pochádza z domény <ph name="DOMAIN_NAME" /> a bol doručený Googlom.</translation> <translation id="8098570222830891427">Zariadenia vo vašom okolí vysielajú webové stránky prostredníctvom funkcie Bluetooth. Chrome bude vyhľadávať stránky a zobrazí ich, keď zariadenie prebudíte z režimu spánku. Tieto stránky bude s cieľom zlepšenia kvality vyhľadávania spracovávať Google. Predvoľby Fyzického webu môžete ovládať v Nastaveniach Chromu.</translation> @@ -607,6 +607,7 @@ <translation id="8931159598799892500">Chrome + Fyzický web</translation> <translation id="8941248009481596111">Vaše pripojenie k týmto stránkam je súkromné.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Otvoriť v ďalšom okne</translation> <translation id="8959122750345127698">Navigácia je nedostupná: <ph name="URL" /></translation> <translation id="8979340629087822094">posledného dňa</translation> <translation id="8987061207681586800">Prispôsobte si Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb index ea533337..06e556e1 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Nikoli shranjeno</translation> <translation id="1061441684050139317">Chrome potrebuje dostop do mikrofona, če želite, da temu spletnemu mestu omogoči dostop do njega.</translation> <translation id="1080790410959514870">Odjavljate se iz računa, ki ga upravlja <ph name="DOMAIN_NAME" />. S tem bodo izbrisani podatki, ki jih je Chrome shranil v tej napravi, vendar bodo podatki ostali v vašem Google Računu.</translation> -<translation id="1095407227123756519">Dodajte račun, da boste lahko dostopali do zaznamkov, zgodovine gesel in drugih nastavitev v vseh svojih napravah.</translation> <translation id="1098052486217676340">Končano</translation> <translation id="1121094540300013208">Poročila o uporabi in zrušitvah</translation> <translation id="1137305377394488060">zadnje ure</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Spletne strani so v bližini</translation> <translation id="3732088672634061408">Zanimanj ni bilo mogoče pridobiti.</translation> <translation id="3738139272394829648">Dotaknite se za iskanje</translation> +<translation id="3744111561329211289">Sinhroniziranje v ozadju</translation> <translation id="3809549525127675114">Predvajanje videoposnetka »<ph name="VIDEO_TITLE" />« je končano</translation> <translation id="3828029223314399057">Išči po zaznamkih</translation> <translation id="3871171699884605801">Z računom za otroke ni mogoče izbrisati zgodovine brskanja</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Dovoli</translation> <translation id="5040262127954254034">Zasebnost</translation> +<translation id="5056549851600133418">Članki za vas</translation> <translation id="5063480226653192405">Uporaba</translation> <translation id="5100237604440890931">Strnjeno – kliknite, če želite razširiti.</translation> <translation id="5107381076085091558">Prenos je zaustavljen.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Pomagajte nam izdelati prednostni seznam funkcij in izboljšav, ki naj jih razvijamo, tako da pošiljate Googlu podatke o datotekah, aplikacijah in storitvah, ki se izvajajo, ko pride do zrušitve. Statistični podatki o uporabi vključujejo podatke, kot so nastavitve, kliki gumbov in uporaba pomnilnika. Ne vključujejo URL-jev spletnih mest ali kakršnih koli osebnih podatkov. Poročila o zrušitvah vsebujejo podatke o sistemu v trenutku zrušitve in glede na dogajanje v trenutku zrušitve morda vsebujejo tudi URL-je spletnih strani ali osebne podatke.</translation> -<translation id="5715468759630044318">Izbira računa</translation> <translation id="5719837394786370183">Strani, ki si jih ogledate na zavihkih brez beleženja zgodovine, ne bodo pustile sledi v zgodovini brskalnika, shrambi piškotkov ali zgodovini iskanja, ko zaprete vse zavihke brez beleženja zgodovine. Prenesene datoteke ali ustvarjeni zaznamki se bodo ohranili. Kljub temu niste nevidni. Če uporabljate način brez beleženja zgodovine, ne skrijete brskanja pred delodajalcem, ponudnikom internetnih storitev ali spletnimi mesti, ki jih obiskujete.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Vse shranjene strani</translation> <translation id="6710213216561001401">Nazaj</translation> <translation id="6720988912937197322">Shranjena stran ni na voljo brez povezave</translation> -<translation id="6722992508235227685">Vaši zaznamki, zgodovina, gesla in druge nastavitve bodo sinhronizirani z Google Računom, tako da jih boste lahko uporabljali v vseh napravah. V <ph name="BEGIN_LINK1" />nastavitvah<ph name="END_LINK1" /> lahko izberete, kaj želite sinhronizirati.</translation> <translation id="6738867403308150051">Prenašanje ...</translation> <translation id="6762156594045689028">Če želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chromov sistem varnega brskanja bo uporabljen za odkrivanje strani z zlonamerno vsebino in zaščito pred lažnim predstavljanjem, zlonamerno programsko opremo in škodljivimi prenosi.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Vsi zaznamki</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Brisanje podatkov brskanja</translation> +<translation id="756809126120519699">Chromovi podatki so izbrisani.</translation> <translation id="7588950540487816470">Fizični splet</translation> <translation id="7596558890252710462">Operacijski sistem</translation> <translation id="7599840151813361502">Iz <ph name="BEGIN_LINK" />Google Računov<ph name="END_LINK" /> ne boste odjavljeni</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Po stiskanju</translation> <translation id="8073388330009372546">Odpri sliko na novem zavihku</translation> <translation id="8076014560081431679">Shranjene nastavitve spletnih mest ne bodo izbrisane in morda odražajo vaše brskalne navade. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Prijavite se za dostop do vseh vaših spletnih stvari iz poljubne naprave</translation> +<translation id="8087000398470557479">Ta vsebina je iz domene <ph name="DOMAIN_NAME" /> in jo prikazuje Google.</translation> <translation id="8098570222830891427">Naprave v vaši bližini oddajajo spletne strani prek Bluetootha. Chrome bo iskal strani in jih prikazal, ko preklopite napravo iz stanja pripravljenosti. Te strani bo zaradi izboljšanja kakovosti rezultatov za strani obdelala Googlova storitev. Fizični splet lahko nadzirate v Chromovih nastavitvah.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome in Fizični splet</translation> <translation id="8941248009481596111">Povezava s tem mestom je zasebna.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Odpri v drugem oknu</translation> <translation id="8959122750345127698">Krmarjenje ni dosegljivo: <ph name="URL" /></translation> <translation id="8979340629087822094">zadnjega dne</translation> <translation id="8987061207681586800">Prilagodite si Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb index 54fb1daf..a885f4c46 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Никада се не чува</translation> <translation id="1061441684050139317">Chrome-у је потребан приступ за микрофон да би га делио са овим сајтом.</translation> <translation id="1080790410959514870">Одјављујете се са налога којим управља <ph name="DOMAIN_NAME" />. То ће избрисати Chrome податке сачуване на овом уређају, али ће подаци остати на Google налогу.</translation> -<translation id="1095407227123756519">Додајте налог да би вам обележивачи, историја, лозинке и друга подешавања били доступни на свим уређајима.</translation> <translation id="1098052486217676340">Завршено је</translation> <translation id="1121094540300013208">Извештаји о коришћењу и отказивању</translation> <translation id="1137305377394488060">прошли сат</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Веб-странице су у околини</translation> <translation id="3732088672634061408">Преузимање интересовања није успело.</translation> <translation id="3738139272394829648">Додирни за претрагу</translation> +<translation id="3744111561329211289">Синхронизација у позадини</translation> <translation id="3809549525127675114">„<ph name="VIDEO_TITLE" />“ је завршен</translation> <translation id="3828029223314399057">Претражи обележиваче</translation> <translation id="3871171699884605801">Историја прегледања не може да се брише помоћу налога за децу</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Дозволи</translation> <translation id="5040262127954254034">Приватност</translation> +<translation id="5056549851600133418">Чланци за вас</translation> <translation id="5063480226653192405">Коришћење</translation> <translation id="5100237604440890931">Скупљено је – Кликните да бисте проширили.</translation> <translation id="5107381076085091558">Преузимање је паузирано.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Помозите нам да одредимо приоритет функција и побољшања на којима би требало да радимо тако што ћете слати Google-у информације о датотекама, апликацијама и услугама које сте користили у тренутку отказивања. Статистика коришћења обухвата информације попут подешавања, кликова на дугмад и коришћења меморије. Не обухвата URL-ове веб-страница нити личне податке. Извештаји о отказивању садрже информације о систему у тренутку отказивања и могу да садрже URL-ове веб-страница или личне податке, у зависности од тога шта се дешавало у тренутку отказивања.</translation> -<translation id="5715468759630044318">Изаберите налог</translation> <translation id="5719837394786370183">Странице које прегледате на картицама без архивирања се неће задржавати у историји прегледача, складишту колачића или историји претраге када затворите све картице без архивирања. Сачуваћемо све преузете датотеке или направљене обележиваче. Међутим, нисте невидљиви. Прелазак у режим без архивирања не сакрива оно што прегледате од послодавца, добављача интернет услуге или веб-сајтова које посећујете.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Све сачуване странице</translation> <translation id="6710213216561001401">Претходно</translation> <translation id="6720988912937197322">Сачувана страница није доступна офлајн</translation> -<translation id="6722992508235227685">Обележивачи, историја, лозинке и друга подешавања ће се синхронизовати са Google налогом да бисте могли да их користите на свим уређајима. Можете да изаберете шта желите да синхронизујете у <ph name="BEGIN_LINK1" />Подешавањима<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Преузима се...</translation> <translation id="6762156594045689028">Да бисте променили ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chrome-ов систем Безбедно прегледање ћемо користити и да бисмо откривали злонамерне странице и да бисмо вас заштитили од „пецања“, малвера и штетних преузимања.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Сви обележивачи</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Брисање података прегледања</translation> +<translation id="756809126120519699">Chrome подаци су обрисани</translation> <translation id="7588950540487816470">Интернет око нас</translation> <translation id="7596558890252710462">Оперативни систем</translation> <translation id="7599840151813361502">Нећете бити одјављени са <ph name="BEGIN_LINK" />Google налога<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">После компримовања</translation> <translation id="8073388330009372546">Отвори слику на новој картици</translation> <translation id="8076014560081431679">Нећемо избрисати сачувана подешавања сајтова и она могу да одражавају ваше навике при прегледању. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Пријавите се да бисте приступали целокупном садржају на вебу са било ког уређаја</translation> +<translation id="8087000398470557479">Овај садржај је са <ph name="DOMAIN_NAME" />, приказује Google.</translation> <translation id="8098570222830891427">Уређаји у околини емитују веб-странице преко Bluetooth-а. Chrome скенира странице и приказује их када пробудите уређај. Те странице се шаљу Google услузи да би се побољшао квалитет резултата за странице. Интернет око нас можете да контролишете у Подешавањима Chrome-а.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Интернет око нас</translation> <translation id="8941248009481596111">Веза са овим сајтом је приватна.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Отвори у другом прозору</translation> <translation id="8959122750345127698">Навигација је недоступна: <ph name="URL" /></translation> <translation id="8979340629087822094">прошли дан</translation> <translation id="8987061207681586800">Прилагодите Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb index 1a36d01..3546565 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Aldrig sparad</translation> <translation id="1061441684050139317">Chrome behöver tillgång till mikrofonen för att kunna dela den på den här webbplatsen.</translation> <translation id="1080790410959514870">Du loggar ut från ett konto som hanteras av <ph name="DOMAIN_NAME" />. Chrome-data som lagras på enheten kommer att tas bort, men all data finns kvar i ditt Google-konto.</translation> -<translation id="1095407227123756519">Lägg till ett konto och få åtkomst till bokmärken, historik, lösenord och andra inställningar på alla dina enheter.</translation> <translation id="1098052486217676340">Har avslutats</translation> <translation id="1121094540300013208">Användning och felrapporter</translation> <translation id="1137305377394488060">den senaste timmen</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Det finns webbsidor i närheten</translation> <translation id="3732088672634061408">Det gick inte att hämta intressen.</translation> <translation id="3738139272394829648">Tryck för att söka</translation> +<translation id="3744111561329211289">Synkronisera i bakgrunden</translation> <translation id="3809549525127675114">Uppspelningen av <ph name="VIDEO_TITLE" /> har avslutats</translation> <translation id="3828029223314399057">Sök efter bokmärken</translation> <translation id="3871171699884605801">Webbhistoriken kan inte rensas med barnkonton</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Tillåt</translation> <translation id="5040262127954254034">Sekretess</translation> +<translation id="5056549851600133418">Artiklar för dig</translation> <translation id="5063480226653192405">Användning</translation> <translation id="5100237604440890931">Vyn har komprimerats. Expandera den genom att klicka.</translation> <translation id="5107381076085091558">Nedladdning pausad.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Hjälp oss att prioritera vilka funktioner och förbättringar vi ska arbeta med genom att skicka information till Google om vilka filer, program och tjänster som körs när en krasch inträffar. Användningsstatistiken innehåller information som inställningar, knappklick och minnesanvändning. De innehåller inte webbadresser eller personliga uppgifter. Felrapporter innehåller information om systemet vid tidpunkten för kraschen och kan innehålla webbadresser eller personliga uppgifter beroende på vad som hände vid kraschen.</translation> -<translation id="5715468759630044318">Välj konto</translation> <translation id="5719837394786370183">Sidor du visar i inkognitoflikar sparas inte i webbläsarhistoriken och lagras inte bland cookies eller i sökhistoriken när du har stängt alla inkognitoflikar. Däremot sparas alla filer du laddar ned och bokmärken du skapar. Du är dock inte osynlig. Trots inkognitoläget kan din arbetsgivare, din internetleverantör eller de webbplatser du besöker se din aktivitet.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Alla sparade sidor</translation> <translation id="6710213216561001401">Föregående</translation> <translation id="6720988912937197322">Sidan som sparades är inte tillgänglig offline</translation> -<translation id="6722992508235227685">Bokmärken, historik, lösenord och andra inställningar synkroniseras med ditt Google-konto så att du kan använda dem på alla enheter. Du kan välja vad som ska synkroniseras under <ph name="BEGIN_LINK1" />Inställningar<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Laddar ned …</translation> <translation id="6762156594045689028"><ph name="BEGIN_LINK" />Återställ synkroniseringen<ph name="END_LINK" /> om du vill ändra den här inställningen.</translation> <translation id="6770414673596662518">Säker webbsökning i Chrome används dessutom för att identifiera skadliga sidor och skydda dig från nätfiske, skadlig programvara och skadliga filnedladdningar.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Alla bokmärken</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Tar bort webbinformation</translation> +<translation id="756809126120519699">Data i Chrome har rensats</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7596558890252710462">Operativsystem</translation> <translation id="7599840151813361502">Du loggas inte ut från dina <ph name="BEGIN_LINK" />Google-konton<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Efter komprimering</translation> <translation id="8073388330009372546">Öppna bild i ny flik</translation> <translation id="8076014560081431679">Sparade webbplatsinställningar raderas inte och kan visa dina surfvanor. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Logga in för att komma åt alla dina grejer på webben från vilken enhet som helst</translation> +<translation id="8087000398470557479">Innehållet kommer från <ph name="DOMAIN_NAME" /> via Google.</translation> <translation id="8098570222830891427">Webbsidor sänds via Bluetooth av enheter i närheten. Chrome söker efter sidor och visar dem när du startar enheten. Sidorna skickas via en tjänst från Google för att förbättra kvaliteten på sidresultaten. Du kan styra Physical Web i inställningarna för Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Physical Web</translation> <translation id="8941248009481596111">Din anslutning till webbplatsen är privat.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Öppna i ett annat fönster</translation> <translation id="8959122750345127698">Det går inte att nå webbadressen: <ph name="URL" /></translation> <translation id="8979340629087822094">den senaste dagen</translation> <translation id="8987061207681586800">Anpassa Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb index bf225aab..45729dfc 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Haijahifadhiwa kamwe</translation> <translation id="1061441684050139317">Chrome inahitaji idhini ya kufikia maikrofoni ili iishiriki na tovuti hii.</translation> <translation id="1080790410959514870">Unaondoka katika akaunti inayodhibitiwa na <ph name="DOMAIN_NAME" />. Hii itafuta data ya Chrome iliyohifadhiwa kwenye kifaa hiki, lakini data itasalia katika Akaunti yako ya Google.</translation> -<translation id="1095407227123756519">Ongeza akaunti ili upate alamisho, historia, manenosiri, na mipangilio yako mingine kwenye vifaa vyako vyote.</translation> <translation id="1098052486217676340">Imekamilika</translation> <translation id="1121094540300013208">Ripoti za matumizi na za kuacha kufanya kazi</translation> <translation id="1137305377394488060">saa moja iliyopita</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Kurasa za wavuti zipo karibu</translation> <translation id="3732088672634061408">Haikuweza kuleta mambo yanayokuvutia.</translation> <translation id="3738139272394829648">Gusa ili Utafute</translation> +<translation id="3744111561329211289">Usawazishaji wa chini chini</translation> <translation id="3809549525127675114">Imekamilisha kucheza “<ph name="VIDEO_TITLE" />”</translation> <translation id="3828029223314399057">Tafuta katika alamisho</translation> <translation id="3871171699884605801">Historia ya kuvinjari haiwezi kufutwa kwa kutumia akaunti za watoto</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Ruhusu</translation> <translation id="5040262127954254034">Faragha</translation> +<translation id="5056549851600133418">Makala kwa ajili yako</translation> <translation id="5063480226653192405">Matumizi</translation> <translation id="5100237604440890931">Imekunjwa - bofya ili upanue.</translation> <translation id="5107381076085091558">Upakuaji umesitishwa.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Tusaidie kuweka kipaumbele katika vipengele na maboresho tunayopaswa kushughulikia kwa kuitumia Google maelezo kuhusu faili, programu, na huduma zinazofanya kazi unapokumbwa na hitilafu ya kuacha kufanya kazi. Takwimu za matumizi zinajumuisha maelezo kama vile mapendeleo, mibofyo ya vitufe, na matumizi ya hifadhi. Hazijumuishi URL za ukurasa wa wavuti au maelezo yoyote ya kibinafsi. Ripoti za kuacha kufanya kazi zina maelezo ya mfumo ya wakati wa kuacha kufanya kazi, na zinaweza kuwa na URL za ukurasa wa wavuti au maelezo ya kibinafsi, kutegemea na kilichokuwa kikitendeka wakati wa kuacha kufanya kazi.</translation> -<translation id="5715468759630044318">Chagua akaunti</translation> <translation id="5719837394786370183">Kurasa unazoziangalia katika vichupo fiche hazitaendelea kuwepo katika historia ya kivinjari, hifadhi ya vidakuzi, au historia yako ya utafutaji ukishafunga vichupo vyako vyote fiche. Faili zozote unazopakua au alamisho unazounda hazitafutwa. Hata hivyo, huonekani. Kuvinjari katika hali fiche hakufichi kuvinjari kwako kusionekane kwa mwajiri, mtoa huduma wako wa intaneti, au tovuti unazotembelea.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Kurasa zote zilizohifadhiwa</translation> <translation id="6710213216561001401">Iliyotangulia</translation> <translation id="6720988912937197322">Ukurasa uliohifadhiwa haupatikani nje ya mtandao</translation> -<translation id="6722992508235227685">Alamisho, historia, manenosiri, na mipangilio yako mingine itasawazishwa kwenye Akaunti yako ya Google ili uweze kuitumia kwenye vifaa vyako vyote. Unaweza kuchagua faili za kusawazisha katika <ph name="BEGIN_LINK1" />Mipangilio<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Inapakua...</translation> <translation id="6762156594045689028">Ili kubadilisha mipangilio hii, <ph name="BEGIN_LINK" />fanya usawazishaji upya<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Mfumo wa Kuvinjari Salama wa Chrome pia utatumiwa kugundua kurasa hasidi na kukulinda dhidi ya hadaa ili kupata maelezo ya kibinafsi, programu hasidi, na vipakuliwa vya kudhuru.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Alamisho zote</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Inafuta data ya kuvinjari</translation> +<translation id="756809126120519699">Data ya Chrome imefutwa</translation> <translation id="7588950540487816470">Wavuti Kila Mahali</translation> <translation id="7596558890252710462">Mfumo wa uendeshaji</translation> <translation id="7599840151813361502">Hutaondolewa katika <ph name="BEGIN_LINK" />Akaunti zako za Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Baada ya kushindiliwa</translation> <translation id="8073388330009372546">Fungua picha katika kichupo kipya</translation> <translation id="8076014560081431679">Mipangilio ya tovuti iliyohifadhiwa haitafutwa na inaweza kuonyesha mtindo wako wa kuvinjari. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Ingia katika akaunti ili ufikie mambo yako yote ya wavuti kutoka kwenye kifaa chochote</translation> +<translation id="8087000398470557479">Maudhui haya yanatoka <ph name="DOMAIN_NAME" />, yamewasilishwa na Google.</translation> <translation id="8098570222830891427">Vifaa vilivyo karibu vinatuma kurasa za wavuti kupitia Bluetooth. Chrome itachanganua kurasa na kuzionyesha ukifungua kifaa chako. Kurasa hizi zitapitishwa katika huduma ya Google ili kuimarisha ubora wa matokeo ya kurasa. Unaweza kudhibiti Wavuti Kila Mahali katika Mipangilio ya Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Wavuti kila mahali</translation> <translation id="8941248009481596111">Muunganisho wako kwenye tovuti hii ni wa faragha.</translation> <translation id="8941729603749328384">www.mfano.com</translation> +<translation id="8942627711005830162">Fungua katika dirisha jingine</translation> <translation id="8959122750345127698">Kudurusu hakufikiki: <ph name="URL" /></translation> <translation id="8979340629087822094">siku iliyopita</translation> <translation id="8987061207681586800">Ifanye Chrome kuwa yako</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb index d0a25dda4..e6d72faf 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">ไม่เคยบันทึก</translation> <translation id="1061441684050139317">Chrome ต้องการเข้าถึงไมโครโฟนเพื่อแชร์กับเว็บไซต์นี้</translation> <translation id="1080790410959514870">คุณกำลังออกจากระบบบัญชีที่จัดการโดย <ph name="DOMAIN_NAME" /> การออกจากระบบจะลบข้อมูล Chrome ที่จัดเก็บในอุปกรณ์นี้ แต่ข้อมูลดังกล่าวจะยังคงอยู่ในบัญชี Google ของคุณ</translation> -<translation id="1095407227123756519">เพิ่มบัญชีเพื่อรับบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ บนอุปกรณ์ทั้งหมดของคุณ</translation> <translation id="1098052486217676340">เสร็จแล้ว</translation> <translation id="1121094540300013208">รายงานการใช้งานและข้อขัดข้อง</translation> <translation id="1137305377394488060">ชั่วโมงที่ผ่านมา</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">มีหน้าเว็บอยู่ใกล้เคียง</translation> <translation id="3732088672634061408">ไม่สามารถดึงความสนใจ</translation> <translation id="3738139272394829648">แตะเพื่อค้นหา</translation> +<translation id="3744111561329211289">ซิงค์ในแบ็กกราวด์</translation> <translation id="3809549525127675114">“<ph name="VIDEO_TITLE" />” เล่นจบแล้ว</translation> <translation id="3828029223314399057">ค้นหาบุ๊กมาร์ก</translation> <translation id="3871171699884605801">ไม่สามารถล้างประวัติการท่องเว็บด้วยบัญชีของเด็ก</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">อนุญาต</translation> <translation id="5040262127954254034">ความเป็นส่วนตัว</translation> +<translation id="5056549851600133418">บทความสำหรับคุณ</translation> <translation id="5063480226653192405">การใช้</translation> <translation id="5100237604440890931">ยุบ - คลิกเพื่อขยาย</translation> <translation id="5107381076085091558">การดาวน์โหลดหยุดชั่วคราว</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">ช่วยเราจัดลำดับความสำคัญของคุณลักษณะและการปรับปรุงที่เราควรทำโดยการส่งข้อมูลเกี่ยวกับไฟล์ แอปพลิเคชัน และบริการที่ทำงานอยู่ในขณะที่เกิดการขัดข้องไปยัง Google สถิติการใช้งานจะรวมถึงข้อมูลอย่างเช่น ค่ากำหนด การคลิกปุ่ม และการใช้หน่วยความจำ สถิติเหล่านี้ไม่รวม URL ของหน้าเว็บหรือข้อมูลส่วนบุคคลใดๆ ส่วนรายงานข้อขัดข้องนั้นจะประกอบด้วยข้อมูลระบบในเวลาที่มีการขัดข้อง และอาจประกอบด้วย URL ของหน้าเว็บหรือข้อมูลส่วนบุคคล ซึ่งขึ้นอยู่กับสิ่งที่เกิดขึ้นในขณะที่มีการขัดข้อง</translation> -<translation id="5715468759630044318">เลือกบัญชี</translation> <translation id="5719837394786370183">หน้าที่คุณดูในแท็บแบบไม่ระบุตัวตนจะไม่เก็บอยู่ในประวัติของเบราว์เซอร์ การจัดเก็บคุกกี้ หรือประวัติการค้นหาหลังจากที่คุณปิดแท็บที่ไม่ระบุตัวตนทั้งหมดแล้ว แต่จะมีการเก็บไฟล์ใดๆ ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่คุณสร้างไว้ อย่างไรก็ตาม คนอื่นจะยังสามารถมองเห็นคุณ การเข้าสู่โหมดไม่ระบุตัวตนไม่ได้เป็นการซ่อนการท่องเว็บจากนายจ้าง ผู้ให้บริการอินเทอร์เน็ต หรือเว็บไซต์ที่คุณเข้าชม</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">หน้าที่บันทึกไว้ทั้งหมด</translation> <translation id="6710213216561001401">ก่อนหน้า</translation> <translation id="6720988912937197322">หน้าที่บันทึกไว้ไม่พร้อมใช้งานแบบออฟไลน์</translation> -<translation id="6722992508235227685">บุ๊กมาร์ก ประวัติ รหัสผ่าน และการตั้งค่าอื่นๆ จะซิงค์กับบัญชี Google คุณจึงสามารถใช้รายการดังกล่าวได้กับอุปกรณ์ของคุณทั้งหมด คุณสามารถเลือกข้อมูลที่จะซิงค์ได้ใน<ph name="BEGIN_LINK1" />การตั้งค่า<ph name="END_LINK1" /></translation> <translation id="6738867403308150051">กำลังดาวน์โหลด…</translation> <translation id="6762156594045689028">หากต้องการเปลี่ยนการตั้งค่านี้ โปรด<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation> <translation id="6770414673596662518">ระบบ Safe Browsing ของ Chrome ยังใช้ในการตรวจหาหน้าเว็บที่ไม่ปลอดภัยและปกป้องคุณจากฟิชชิง มัลแวร์ และการดาวน์โหลดที่เป็นอันตราย</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">บุ๊กมาร์กทั้งหมด</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">กำลังล้างข้อมูลการท่องเว็บ</translation> +<translation id="756809126120519699">ล้างข้อมูล Chrome แล้ว</translation> <translation id="7588950540487816470">Physical Web</translation> <translation id="7596558890252710462">ระบบปฏิบัติการ</translation> <translation id="7599840151813361502">คุณจะไม่ออกจากระบบ<ph name="BEGIN_LINK" />บัญชี Google<ph name="END_LINK" /> โดยอัตโนมัติ</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">หลังการบีบอัด</translation> <translation id="8073388330009372546">เปิดภาพในแท็บใหม่</translation> <translation id="8076014560081431679">การตั้งค่าเว็บไซต์ที่บันทึกไว้จะไม่ถูกลบและอาจส่งผลกับลักษณะการท่องเว็บของคุณ <ph name="BEGIN_LINK" />เรียนรู้เพิ่มเติม<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">ลงชื่อเข้าใช้เพื่อเข้าถึงข้อมูลทั้งหมดของคุณในเว็บจากอุปกรณ์ใดก็ได้</translation> +<translation id="8087000398470557479">เนื้อหานี้มาจาก <ph name="DOMAIN_NAME" /> และนำส่งโดย Google</translation> <translation id="8098570222830891427">อุปกรณ์ใกล้เคียงคุณกำลังเผยแพร่หน้าเว็บผ่านบลูทูธ Chrome จะสแกนหาและแสดงหน้าเว็บดังกล่าวเมื่อคุณเรียกให้อุปกรณ์ทำงาน หน้าเหล่านี้จะแสดงผ่านบริการของ Google เพื่อปรับปรุงคุณภาพผลการค้นหาหน้าเว็บ คุณควบคุม Physical Web ได้ในการตั้งค่า Chrome</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Physical Web</translation> <translation id="8941248009481596111">การเชื่อมต่อกับไซต์นี้เป็นแบบส่วนตัว</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">เปิดในหน้าต่างอื่น</translation> <translation id="8959122750345127698">ไม่สามารถเข้าถึงการนำทางได้: <ph name="URL" /></translation> <translation id="8979340629087822094">วันที่ผ่านมา</translation> <translation id="8987061207681586800">เปลี่ยน Chrome ในแบบคุณ</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb index 7eff860673..ef99aa9 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Hiç kaydedilmeyecekler</translation> <translation id="1061441684050139317">Chrome'un mikrofonu bu siteyle paylaşması için mikrofon erişimine ihtiyacı var.</translation> <translation id="1080790410959514870"><ph name="DOMAIN_NAME" /> tarafından yönetilen bir hesaptan çıkış yapıyorsunuz. Bu işlem, bu cihazda depolanan Chrome verilerini siler, ancak veriler Google Hesabınızda kalmaya devam eder.</translation> -<translation id="1095407227123756519">Yer işaretlerinize, geçmişinize, şifrelerinize ve diğer ayarlarınıza tüm cihazlarınızdan erişmek için bir hesap ekleyin.</translation> <translation id="1098052486217676340">Bitti</translation> <translation id="1121094540300013208">Kullanım ve kilitlenme raporları</translation> <translation id="1137305377394488060">son 1 saat</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Yakındaki web sayfaları</translation> <translation id="3732088672634061408">İlgi alanları alınamadı.</translation> <translation id="3738139272394829648">Dokun ve Ara</translation> +<translation id="3744111561329211289">Arka plan senkronizasyonu</translation> <translation id="3809549525127675114">“<ph name="VIDEO_TITLE" />” bitti</translation> <translation id="3828029223314399057">Yer işaretlerinde ara</translation> <translation id="3871171699884605801">Çocuklar için hesapların tarama geçmişi temizlenemez</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">İzin ver</translation> <translation id="5040262127954254034">Gizlilik</translation> +<translation id="5056549851600133418">Size uygun makaleler</translation> <translation id="5063480226653192405">Kullanım</translation> <translation id="5100237604440890931">Daraltıldı - Genişletmek için tıklayın.</translation> <translation id="5107381076085091558">İndirme işlemi duraklatıldı.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Bir kilitlenme yaşadığınızda çalışan dosyalarla, uygulamalarla ve hizmetlerle ilgili bilgileri Google'a göndererek, üzerinde çalışmamız gereken özellikler ve iyileştirmelerle ilgili öncelikleri belirlememize yardım edin. Kullanım istatistikleri; tercihler, tıklanan düğmeler ve bellek kullanımı gibi bilgileri içerir. Web sayfası URL'lerini veya hiçbir kişisel bilgiyi içermez. Kilitlenme raporları, kilitlenme sırasında geçerli olan sistem bilgilerini kapsar ve kilitlenme sırasında olanlara bağlı olarak web sayfası URL'lerini veya kişisel bilgilerinizi içerebilir.</translation> -<translation id="5715468759630044318">Hesap seçin</translation> <translation id="5719837394786370183">Gizli sekmelerde görüntülediğiniz sayfalar, gizli sekmelerinizin tamamını kapattıktan sonra tarayıcı geçmişinizde, çerez deponuzda veya arama geçmişinizde kalmaz. İndirdiğiniz dosyalar veya oluşturduğunuz yer işaretleri saklanır. Yine de, görünmez olmazsınız. Gizli moda geçmeniz web'de yaptıklarınızı işvereninizden, İnternet servis sağlayıcınızdan veya ziyaret ettiğiniz web sitelerinden saklamaz.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Kaydedilen tüm sayfalar</translation> <translation id="6710213216561001401">Önceki</translation> <translation id="6720988912937197322">Kaydedilen sayfa çevrimdışı olarak kullanılamıyor</translation> -<translation id="6722992508235227685">Yer işaretleri, geçmiş, şifre ve diğer ayarlarınız Google Hesabınızla senkronize edilecek. Böylece, bu ayarlarınızı tüm cihazlarınızda kullanabileceksiniz. Nelerin senkronize edileceğini <ph name="BEGIN_LINK1" />Ayarlar<ph name="END_LINK1" />'da seçebilirsiniz.</translation> <translation id="6738867403308150051">İndiriliyor…</translation> <translation id="6762156594045689028">Bu ayarı değiştirmek için <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayın<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chrome'un Güvenli Tarama sistemi, kötü amaçlı sayfaların tespit edilmesinin yanı sıra sizi kimlik avı, kötü amaçlı uygulama ve zararlı indirme işlemlerine karşı korumak için de kullanılır.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Tüm yer işaretleri</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Göz atma verileri temizleniyor</translation> +<translation id="756809126120519699">Chrome verileri temizlendi</translation> <translation id="7588950540487816470">Fiziksel Web</translation> <translation id="7596558890252710462">İşletim sistemi</translation> <translation id="7599840151813361502"><ph name="BEGIN_LINK" />Google Hesaplarınızdaki<ph name="END_LINK" /> oturumlarınız kapatılmaz</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Sıkıştırmadan sonra</translation> <translation id="8073388330009372546">Resmi yeni sekmede aç</translation> <translation id="8076014560081431679">Kayıtlı site ayarları silinmez ve web'e göz atma alışkanlıklarınızı yansıtabilir. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Herhangi bir cihazdan tüm web öğelerinize erişmek için oturum açın</translation> +<translation id="8087000398470557479">Bu içerik Google tarafından <ph name="DOMAIN_NAME" /> adresinden sağlanmaktadır.</translation> <translation id="8098570222830891427">Bluetooth üzerinden web sayfaları yayınlayan size yakın cihazlar. Cihazınız uyku modunda olmadığında Chrome yakındaki sayfaları tarar ve gösterir. Bu sayfalar, sayfa sonuçlarının kalitesini iyileştirmek amacıyla bir Google hizmeti üzerinden gönderilir. Fiziksel Web'i Chrome gizlilik ayarlarından kontrol edebilirsiniz.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Fiziksel Web</translation> <translation id="8941248009481596111">Bu siteye bağlantınız gizli.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Yeni pencerede aç</translation> <translation id="8959122750345127698">Gezinme işlevine ulaşılamıyor: <ph name="URL" /></translation> <translation id="8979340629087822094">son 1 gün</translation> <translation id="8987061207681586800">Chrome'u size özel yapın</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb index d2b5c6c..18c408e 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Ніколи не зберігалося</translation> <translation id="1061441684050139317">Chrome потрібен доступ до мікрофона, щоб дозволити цьому сайту використовувати його.</translation> <translation id="1080790410959514870">Ви виходите з облікового запису, яким керує домен <ph name="DOMAIN_NAME" />. Дані Chrome, які зберігаються на цьому пристрої, буде видалено, але вони залишаться у вашому обліковому записі Google.</translation> -<translation id="1095407227123756519">Додайте обліковий запис, щоб мати доступ до закладок, історії, паролів та інших налаштувань на всіх своїх пристроях.</translation> <translation id="1098052486217676340">Завершено</translation> <translation id="1121094540300013208">Звіти про використання й аварійне завершення роботи</translation> <translation id="1137305377394488060">останню годину</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Поруч є веб-сторінки</translation> <translation id="3732088672634061408">Не вдалось отримати дані про інтереси.</translation> <translation id="3738139272394829648">Пошук дотиком</translation> +<translation id="3744111561329211289">Фонова синхронізація</translation> <translation id="3809549525127675114">Відео "<ph name="VIDEO_TITLE" />" закінчилося</translation> <translation id="3828029223314399057">Пошук закладок</translation> <translation id="3871171699884605801">В обліковому записі для дітей не можна видалити історію веб-перегляду</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Дозволити</translation> <translation id="5040262127954254034">Конфіденційність</translation> +<translation id="5056549851600133418">Статті для вас</translation> <translation id="5063480226653192405">Використання</translation> <translation id="5100237604440890931">Згорнуто – натисніть, щоб розгорнути.</translation> <translation id="5107381076085091558">Завантаження призупинено.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Допоможіть нам визначити, що слід покращити, надсилаючи в Google інформацію про файли, додатки та сервіси, які працювали на момент аварійного завершення роботи. Статистика використання містить дані про налаштування, натискання кнопок і використання пам’яті. Вона не включає URL-адреси веб-сторінок або особисту інформацію. Звіти про аварійне завершення роботи містять дані про систему на момент збою та можуть включати URL-адреси веб-сторінок або особисту інформацію – залежно від активності на момент аварійного завершення роботи.</translation> -<translation id="5715468759630044318">Виберіть обліковий запис</translation> <translation id="5719837394786370183">Сторінки, які ви переглядаєте на анонімних вкладках, не реєструються в історії веб-переглядача чи історії пошуку та не залишають файлів cookie, коли ви закриваєте всі анонімні вкладки. Усі завантажені файли чи створені закладки зберігаються. Проте ви не можете сховати все. Навіть у режимі анонімного перегляду ваш роботодавець, постачальник послуг Інтернету чи адміністратори веб-сайтів, які ви відвідуєте, можуть бачити, що ви переглядаєте.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Усі збережені сторінки</translation> <translation id="6710213216561001401">Попереднє</translation> <translation id="6720988912937197322">Збережена сторінка недоступна в режимі офлайн</translation> -<translation id="6722992508235227685">Ваші закладки, історія, паролі й інші налаштування синхронізуватимуться з обліковим записом Google, щоб ви могли користуватися ними на всіх своїх пристроях. У <ph name="BEGIN_LINK1" />Налаштуваннях<ph name="END_LINK1" /> можна вибрати, що синхронізувати.</translation> <translation id="6738867403308150051">Завантаження…</translation> <translation id="6762156594045689028">Щоб змінити це налаштування, <ph name="BEGIN_LINK" />скиньте синхронізацію<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Система Безпечного перегляду Chrome також використовується для виявлення шкідливих сторінок і захисту від фішингу, зловмисного програмного забезпечення та небезпечних завантажень.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Усі закладки</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Очищення даних веб-перегляду</translation> +<translation id="756809126120519699">Дані Chrome видалено</translation> <translation id="7588950540487816470">Інтернет навколо нас</translation> <translation id="7596558890252710462">Операційна система</translation> <translation id="7599840151813361502">Ви не вийдете з <ph name="BEGIN_LINK" />облікових записів Google<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Після стиснення</translation> <translation id="8073388330009372546">Відкрити в новій вкладці</translation> <translation id="8076014560081431679">Збережені налаштування, які можуть стосуватися ваших зацікавлень в Інтернеті, не буде видалено. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Увійдіть в обліковий запис, щоб користуватися збереженим веб-вмістом на будь-якому пристрої</translation> +<translation id="8087000398470557479">Це вміст із сайту <ph name="DOMAIN_NAME" />, який доставляє Google.</translation> <translation id="8098570222830891427">Пристрої поруч транслюють веб-сторінки через Bluetooth. Chrome шукатиме та показуватиме сторінки, коли ви активуєте пристрій. Google оброблятиме ці сторінки, щоб покращити якість результатів. Ви можете керувати сервісом Інтернет навколо нас у налаштуваннях Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Інтернет навколо нас</translation> <translation id="8941248009481596111">Ваше з’єднання з цим сайтом конфіденційне.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Відкрити в іншому вікні</translation> <translation id="8959122750345127698">Веб-сторінка <ph name="URL" /> недоступна</translation> <translation id="8979340629087822094">останній день</translation> <translation id="8987061207681586800">Chrome саме для вас</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb index 7b583d185..9c856f4 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">Không bao giờ được lưu</translation> <translation id="1061441684050139317">Chrome cần quyền truy cập micrô để chia sẻ micrô với trang web này.</translation> <translation id="1080790410959514870">Bạn đang đăng xuất tài khoản do <ph name="DOMAIN_NAME" /> quản lý. Thao tác này sẽ xóa dữ liệu Chrome được lưu trữ trên thiết bị này nhưng dữ liệu sẽ vẫn còn trong tài khoản Google của bạn.</translation> -<translation id="1095407227123756519">Thêm tài khoản để nhận dấu trang, lịch sử, mật khẩu và các cài đặt khác trên tất cả các thiết bị của bạn.</translation> <translation id="1098052486217676340">Đã hoàn thành</translation> <translation id="1121094540300013208">Báo cáo sử dụng và sự cố</translation> <translation id="1137305377394488060">giờ trước</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">Các trang web lân cận</translation> <translation id="3732088672634061408">Không thể truy xuất sở thích.</translation> <translation id="3738139272394829648">Chạm để tìm kiếm</translation> +<translation id="3744111561329211289">Đồng bộ hóa dưới nền</translation> <translation id="3809549525127675114">Đã phát xong “<ph name="VIDEO_TITLE" />”</translation> <translation id="3828029223314399057">Tìm kiếm dấu trang</translation> <translation id="3871171699884605801">Không thể xóa lịch sử duyệt web bằng tài khoản dành cho trẻ em</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">Cho phép</translation> <translation id="5040262127954254034">Bảo mật</translation> +<translation id="5056549851600133418">Bài viết dành cho bạn</translation> <translation id="5063480226653192405">Sử dụng</translation> <translation id="5100237604440890931">Đã thu gọn - nhấp để mở rộng.</translation> <translation id="5107381076085091558">Đã tạm dừng tải xuống.</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">Giúp chúng tôi ưu tiên các tính năng và cải tiến mà chúng tôi nên giải quyết bằng cách gửi cho Google thông tin về các tệp, ứng dụng và dịch vụ đang chạy bất cứ khi nào bạn gặp sự cố. Số liệu thống kê sử dụng bao gồm thông tin chẳng hạn như tùy chọn, số lần nhấp nút và mức sử dụng bộ nhớ. Số liệu này không bao gồm URL trang web hoặc bất kỳ thông tin cá nhân nào. Báo cáo sự cố chứa thông tin hệ thống tại thời điểm xảy ra sự cố và có thể bao gồm URL của trang web hoặc thông tin cá nhân tùy thuộc vào hiện tượng tại thời điểm xảy ra sự cố.</translation> -<translation id="5715468759630044318">Chọn tài khoản</translation> <translation id="5719837394786370183">Trang mà bạn xem ở tab ẩn danh sẽ không bị lưu lại trong lịch sử của trình duyệt, kho cookie hoặc lịch sử tìm kiếm sau khi bạn đóng tất cả tab ẩn danh của bạn. Mọi tệp bạn tải xuống hoặc dấu trang bạn tạo sẽ được giữ nguyên. Tuy nhiên, bạn vẫn hiển thị. Truy cập ẩn danh sẽ không ẩn thao tác duyệt của bạn khỏi chủ lao động, nhà cung cấp dịch vụ Internet hoặc trang web bạn truy cập.</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">Tất cả các trang đã lưu</translation> <translation id="6710213216561001401">Trước đó</translation> <translation id="6720988912937197322">Trang đã lưu không khả dụng khi ngoại tuyến</translation> -<translation id="6722992508235227685">Dấu trang, lịch sử, mật khẩu và các cài đặt khác của bạn sẽ được đồng bộ hóa với Tài khoản Google để bạn có thể sử dụng trên tất cả thiết bị. Bạn có thể chọn nội dung cần đồng bộ hóa trong <ph name="BEGIN_LINK1" />Cài đặt<ph name="END_LINK1" />.</translation> <translation id="6738867403308150051">Đang tải xuống...</translation> <translation id="6762156594045689028">Để thay đổi cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại đồng bộ hóa<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Hệ thống duyệt web an toàn của Chrome cũng sẽ được sử dụng để phát hiện trang độc hại và bảo vệ bạn khỏi lừa đảo, phần mềm độc hại và nội dung tải xuống có hại.</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">Tất cả dấu trang</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">Xóa dữ liệu duyệt web</translation> +<translation id="756809126120519699">Đã xóa dữ liệu Chrome</translation> <translation id="7588950540487816470">Web trong cuộc sống</translation> <translation id="7596558890252710462">Hệ điều hành</translation> <translation id="7599840151813361502">Bạn sẽ không bị đăng xuất khỏi <ph name="BEGIN_LINK" />Tài khoản Google<ph name="END_LINK" /> của mình</translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">Sau khi nén</translation> <translation id="8073388330009372546">Mở ảnh trong tab mới</translation> <translation id="8076014560081431679">Cài đặt trang web đã lưu sẽ không bị xóa và có thể phản ánh thói quen duyệt web của bạn. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">Đăng nhập để truy cập tất cả nội dung trên trang web của bạn từ mọi thiết bị</translation> +<translation id="8087000398470557479">Nội dung này đến từ <ph name="DOMAIN_NAME" />, do Google phân phối.</translation> <translation id="8098570222830891427">Các thiết bị lân cận mà bạn đang truyền trang web qua Bluetooth. Chrome sẽ quét tìm các trang và hiển thị chúng khi bạn khởi động thiết bị của mình. Các trang này sẽ được chuyển tới một dịch vụ của Google để cải thiện chất lượng của kết quả trang. Bạn có thể kiểm soát cài đặt Web trong cuộc sống trên Chrome.</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + Web trong cuộc sống</translation> <translation id="8941248009481596111">Kết nối của bạn tới trang web này ở chế độ riêng tư.</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">Mở trong cửa sổ khác</translation> <translation id="8959122750345127698">Không thể tiếp cận điều hướng: <ph name="URL" /></translation> <translation id="8979340629087822094">ngày trước</translation> <translation id="8987061207681586800">Tùy chỉnh riêng Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb index ee7b5c6a..32efec7 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">一律不保存</translation> <translation id="1061441684050139317">Chrome 需要具有麦克风使用权限,才能批准此网站的分享请求。</translation> <translation id="1080790410959514870">您要退出某个由 <ph name="DOMAIN_NAME" /> 管理的帐户。这会导致系统删除此设备上存储的 Chrome 数据,但这些数据仍会保留在您的 Google 帐户中。</translation> -<translation id="1095407227123756519">请添加帐户,以便获取您所有设备上保存的书签、历史记录、密码和其他设置。</translation> <translation id="1098052486217676340">已完成</translation> <translation id="1121094540300013208">使用情况统计信息和崩溃报告</translation> <translation id="1137305377394488060">过去 1 小时</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">附近有设备在播报网页</translation> <translation id="3732088672634061408">无法检索兴趣相关数据。</translation> <translation id="3738139272394829648">触摸搜索</translation> +<translation id="3744111561329211289">后台同步</translation> <translation id="3809549525127675114">“<ph name="VIDEO_TITLE" />”已播放完毕</translation> <translation id="3828029223314399057">搜索书签</translation> <translation id="3871171699884605801">无法清除未成年人帐户的浏览记录</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">允许</translation> <translation id="5040262127954254034">隐私设置</translation> +<translation id="5056549851600133418">为您推荐的文章</translation> <translation id="5063480226653192405">使用情况</translation> <translation id="5100237604440890931">已收起 - 点击此处即可展开。</translation> <translation id="5107381076085091558">已暂停下载。</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">将发生崩溃时正在运行的文件、应用和服务的相关信息发送给 Google,协助我们确定应优先推出和改进哪些功能。 使用情况统计信息包含偏好设置、按钮点击次数和内存使用情况之类的信息,但不包含网页网址或任何个人信息。崩溃报告包含发生崩溃时的系统信息,并可能包含网页网址或个人信息,具体取决于发生崩溃时的情况。</translation> -<translation id="5715468759630044318">选择帐户</translation> <translation id="5719837394786370183">在您关闭所有隐身标签页后,您在这些标签页中查看的网页不会在浏览器历史记录、Cookie 存储区或搜索记录中留下任何痕迹。不过,您下载的所有文件或创建的书签均会保留下来。 但是,这并不意味着您能完全隐身。即使您进入隐身模式,您的雇主、互联网服务提供商和您访问的网站仍然能看到您的浏览活动。</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">所有保存的网页</translation> <translation id="6710213216561001401">上一个</translation> <translation id="6720988912937197322">无法为保存的页面创建离线副本</translation> -<translation id="6722992508235227685">您的书签、历史记录、密码和其他设置将同步到您的 Google 帐户,这样您便可以在自己的任意设备上使用这些内容。您可以在<ph name="BEGIN_LINK1" />设置<ph name="END_LINK1" />部分选择要同步的内容。</translation> <translation id="6738867403308150051">即将开始下载…</translation> <translation id="6762156594045689028">要更改此设置,请<ph name="BEGIN_LINK" />重置同步设置<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chrome 的安全浏览系统也将用于检测恶意网页,保护您免受网上诱骗、恶意软件和有害下载内容的侵害。</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">所有书签</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">正在清除浏览数据</translation> +<translation id="756809126120519699">已清除 Chrome 数据</translation> <translation id="7588950540487816470">实物网</translation> <translation id="7596558890252710462">操作系统</translation> <translation id="7599840151813361502">您不会因此而退出自己的 <ph name="BEGIN_LINK" />Google 帐户<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">压缩后</translation> <translation id="8073388330009372546">在新标签页中打开图片</translation> <translation id="8076014560081431679">已保存的网站设置将不会遭到删除,并且可能会反映您的浏览习惯。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">登录后即可通过任意设备查看您的所有在线内容</translation> +<translation id="8087000398470557479">此内容来自 <ph name="DOMAIN_NAME" />(由 Google 提供)。</translation> <translation id="8098570222830891427">附近有设备在通过蓝牙播报网页。当您唤醒自己的设备时,Chrome 将会搜索并显示这些网页。这些网页将经由 Google 服务进行处理,以让网页搜索结果的展示更理想。 您可以在 Chrome 设置部分控制实物网。</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome + 实物网</translation> <translation id="8941248009481596111">您与此网站建立的是私密连接。</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">在其他窗口中打开</translation> <translation id="8959122750345127698">无法访问 <ph name="URL" /></translation> <translation id="8979340629087822094">过去 1 天</translation> <translation id="8987061207681586800">定制自己专属的 Chrome</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb index 7acde9b3..b29a05f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -6,7 +6,6 @@ <translation id="10614374240317010">永不儲存</translation> <translation id="1061441684050139317">Chrome 需要存取麥克風,才能與這個網站分享。</translation> <translation id="1080790410959514870">您即將登出由 <ph name="DOMAIN_NAME" /> 所管理的帳戶。儲存在這個裝置上的 Chrome 資料將因此遭到刪除,但這些資料仍會保留在您的 Google 帳戶中。</translation> -<translation id="1095407227123756519">新增帳戶後,即可從任何裝置取得自己的書籤、歷史紀錄、密碼和其他設定。</translation> <translation id="1098052486217676340">已結束</translation> <translation id="1121094540300013208">使用資料和當機報告</translation> <translation id="1137305377394488060">過去 1 小時</translation> @@ -197,6 +196,7 @@ <translation id="3716158070938632480">附近有裝置在播送網頁</translation> <translation id="3732088672634061408">無法擷取興趣資料。</translation> <translation id="3738139272394829648">輕觸搜尋</translation> +<translation id="3744111561329211289">背景同步處理</translation> <translation id="3809549525127675114">「<ph name="VIDEO_TITLE" />」已結束</translation> <translation id="3828029223314399057">搜尋書籤</translation> <translation id="3871171699884605801">無法清除兒童專用帳戶的瀏覽紀錄</translation> @@ -285,6 +285,7 @@ <translation id="5016205925109358554">Serif</translation> <translation id="5039804452771397117">允許</translation> <translation id="5040262127954254034">隱私權</translation> +<translation id="5056549851600133418">為您推薦的文章</translation> <translation id="5063480226653192405">用量</translation> <translation id="5100237604440890931">已收合 - 按一下即可展開。</translation> <translation id="5107381076085091558">已暫停下載。</translation> @@ -352,7 +353,6 @@ <translation id="5712189971979076230">發生當機情形時,如果您將當下正在執行的檔案、應用程式和服務的相關資訊傳送給 Google,即可協助我們優先提供重要的功能與改進項目。 使用統計資料包括偏好設定、按鈕點擊次數和記憶體使用量等資訊,不含網頁網址或任何個人資訊。當機報告則包括當機時的系統資訊;而且根據當機時發生的狀況,可能會包含網頁網址和個人資訊。</translation> -<translation id="5715468759630044318">選擇帳戶</translation> <translation id="5719837394786370183">當您關閉所有無痕式分頁後,您在其中瀏覽的網頁都不會保留在瀏覽器紀錄、Cookie 儲存庫或搜尋紀錄中。不過,系統會將您下載的檔案或建立的書籤全部予以保留。 然而,您並沒有因此隱形。使用無痕模式時,您的雇主和網際網路服務供應商仍然可以追蹤您的瀏覽紀錄,您所造訪的網站也可記錄您的瀏覽行為。</translation> @@ -433,7 +433,6 @@ <translation id="6699351163704950317">所有儲存的網頁</translation> <translation id="6710213216561001401">返回</translation> <translation id="6720988912937197322">無法離線存取您剛儲存的網頁</translation> -<translation id="6722992508235227685">您的書籤、歷史紀錄、密碼和其他設定都會在您的 Google 帳戶中保持同步,讓您在所有個人裝置上使用。您可以在 [<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />] 中選擇要同步處理的資料。</translation> <translation id="6738867403308150051">下載中…</translation> <translation id="6762156594045689028">如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation> <translation id="6770414673596662518">Chrome 的安全瀏覽系統也會用於偵測惡意網頁,保護您不受網路釣魚、惡意軟體和有害下載內容的攻擊。</translation> @@ -500,6 +499,7 @@ <translation id="7501135638693251872">所有書籤</translation> <translation id="7521387064766892559">JavaScript</translation> <translation id="7562080006725997899">正在清除瀏覽資料</translation> +<translation id="756809126120519699">已清除 Chrome 資料</translation> <translation id="7588950540487816470">實體化網路</translation> <translation id="7596558890252710462">作業系統</translation> <translation id="7599840151813361502">您不會因此登出 <ph name="BEGIN_LINK" />Google 帳戶<ph name="END_LINK" /></translation> @@ -543,7 +543,7 @@ <translation id="8069239273282989646">壓縮後大小</translation> <translation id="8073388330009372546">在新分頁中開啟圖片</translation> <translation id="8076014560081431679">已儲存的網站設定不會遭到刪除,而且可能會反映您的瀏覽習慣。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> -<translation id="8084156870963450514">登入帳戶即可透過任何裝置存取您在網路上的所有資料</translation> +<translation id="8087000398470557479">這個內容來自 <ph name="DOMAIN_NAME" />,由 Google 所提供。</translation> <translation id="8098570222830891427">您附近的裝置正在透過藍牙播送網頁。Chrome 會在您的裝置結束休眠狀態時掃瞄並顯示這些網頁。這些網頁經由 Google 服務處理過後,可讓網頁搜尋結果的品質更臻完善。 您可以在 Chrome 設定中控管「實體化網路」設定。</translation> @@ -609,6 +609,7 @@ <translation id="8931159598799892500">Chrome 和實體化網路</translation> <translation id="8941248009481596111">您與這個網站建立了私人連線。</translation> <translation id="8941729603749328384">www.example.com</translation> +<translation id="8942627711005830162">在其他視窗中開啟</translation> <translation id="8959122750345127698">瀏覽的網址無法存取:<ph name="URL" /></translation> <translation id="8979340629087822094">過去 1 天</translation> <translation id="8987061207681586800">自訂您專屬的 Chrome</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java index b72951c..0654af6 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTest.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.download; import android.os.Environment; +import android.test.FlakyTest; import android.test.suitebuilder.annotation.MediumTest; import android.view.View; @@ -202,6 +203,7 @@ */ @MediumTest @Feature({"Downloads"}) + @FlakyTest public void testDuplicateHttpPostDownload_Dismiss() throws Exception { // Download a file. loadUrl(mTestServer.getURL("/chrome/test/data/android/download/post.html"));
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb index 0ae8b260..095b5da 100644 --- a/chrome/app/resources/chromium_strings_am.xtb +++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -224,7 +224,6 @@ ዝም ብሎ መግባት እንደ ዕልባቶች፣ ታሪክ እና ሌሎች ቅንብሮች ያሉ የChromium መረጃዎችን ከ<ph name="ACCOUNT_EMAIL_NEW" /> ጋር ያዋህዳቸዋል።</translation> <translation id="9013087743919948559">ወደ Chromium ያክሉ</translation> -<translation id="9013262824292842194">Chromium Windows Vista ወይም Windows XP ከSP2 ወይም ከዚያ በላይ ይፈልጋል።</translation> <translation id="9019929317751753759">Chromiumን ይበልጥ ደህንነቱ የተጠበቀ እንዲሆን ለማድረግ፣ በ<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ውስጥ ያልተዘረዘረውን የሚከተለውን ቅጥያ አሰናክለነዋል እና እርስዎ ሳያውቁት የታከለ ሊሆን ይችላል።</translation> <translation id="9022552996538154597">Chromium ውስጥ ይግቡ</translation> <translation id="9036189287518468038">Chromium የመተግበሪያ አስጀማሪ</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index 2662423..fd7e117e 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -222,7 +222,6 @@ سيؤدي تسجيل الدخول على أية حال إلى دمج معلومات Chromium مثل الإشارات المرجعية والسجل والإعدادات الأخرى مع <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">إضافة إلى Chromium</translation> -<translation id="9013262824292842194">يتطلب Chromium نظام التشغيل Windows Vista أو Windows XP المزود بحزمة الخدمة SP2 أو الإصدارات الأحدث.</translation> <translation id="9019929317751753759">لجعل Chromium أكثر أمنًا، عطلنا الإضافة التالية التي لم تُدرج في <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> وربما تكون قد أضيفت دون علمك.</translation> <translation id="9022552996538154597">تسجيل الدخول إلى Chromium</translation> <translation id="9036189287518468038">مشغل تطبيقات Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb index 026aff59..4935a618 100644 --- a/chrome/app/resources/chromium_strings_bg.xtb +++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">Гостите могат да използват Chromium, без да оставят следи.</translation> <translation id="4994636714258228724">Добавяне на вас към Chromium</translation> <translation id="5032989939245619637">Подробностите да се запазват в Chromium</translation> +<translation id="5116586539350239523">Chromium ще съхранява надеждно личните ви данни, за да не се налага да ги въвеждате отново.</translation> <translation id="5358375970380395591">Влизате с управляван профил и давате на администратора му контрол над потребителския си профил в Chromium. Данните ви там, като например приложения, отметки, история, пароли и други настройки, ще се свържат за постоянно с/ъс <ph name="USER_NAME" />. Ще можете да ги изтриете чрез таблото за управление на Google Профили, но не и да ги свържете с друг профил. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Налице е нова версия на Chromium.</translation> <translation id="5427571867875391349">Задаване на Chromium като браузър по подразбиране</translation> @@ -215,7 +216,6 @@ В случай че влезете въпреки това, данните в Chromium като отметки, история и други настройки ще се обединят с/ъс <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Добавяне към Chromium</translation> -<translation id="9013262824292842194">Chromium изисква Windows Vista или Windows XP с SP2 или по-нова версия.</translation> <translation id="9019929317751753759">За да направим Chromium по-безопасен, деактивирахме следното разширение, което липсва от <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и може да е било добавено без ваше знание.</translation> <translation id="9022552996538154597">Вход в Chromium</translation> <translation id="9036189287518468038">Стартов панел с приложения за Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb index 0842c910..4926904 100644 --- a/chrome/app/resources/chromium_strings_bn.xtb +++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">অতিথিগণ কোনো কিছুর জন্য অভাব বোধ না করেই Chromium ব্যবহার করতে পারবেন৷</translation> <translation id="4994636714258228724">Chromium এর সাথে নিজেকে যোগ করুন</translation> <translation id="5032989939245619637">Chromium এ বিবরণ সংরক্ষণ করুন</translation> +<translation id="5116586539350239523">Chromium আপনার ব্যক্তিগত বিবরণ সুরক্ষিত ভাবে সঞ্চয় করবে, তাই আপনার আর টাইপ করার প্রয়োজন হবে না।</translation> <translation id="5358375970380395591">আপনি একটি পরিচালিত অ্যাকাউন্টের মাধ্যমে সাইন ইন করছেন এবং এর প্রশাসককে আপনার Chromium প্রোফাইলের উপরে নিয়ন্ত্রণ দিচ্ছেন৷ আপনার Chromium ডেটা, যেমন অ্যাপ্লিকেশান, বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং অন্যান্য সেটিংস <ph name="USER_NAME" /> এতে স্থায়ীভাবে সম্পৃক্ত হবে৷ আপনি Google অ্যাকাউন্টগুলির ড্যাশবোর্ডের মাধ্যমে এই ডেটাগুলি মুছতে সক্ষম হবেন, কিন্তু অন্য অ্যাকাউন্টের সাথে এই ডেটা সংশ্লিষ্ট করতে পারবেন না৷ <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium-এর একটি নতুন সংস্করণ উপলব্ধ আছে৷</translation> <translation id="5427571867875391349">Chromium কে আপনার ডিফল্ট ব্রাউজার হিসাবে সেট করুন</translation> @@ -219,7 +220,6 @@ যেকোনো উপায়ে সাইন ইন করা হলে তা বুকমার্কগুলি, ইতিহাস, এবং অন্যান্য সেটিংসের মত Chromium তথ্যকে <ph name="ACCOUNT_EMAIL_NEW" /> এ মার্জ করবে৷</translation> <translation id="9013087743919948559">Chromium-এ জুড়ুন</translation> -<translation id="9013262824292842194">Windows Vista বা SP2 সহ Windows XP বা উন্নততর Chromium প্রয়োজন৷</translation> <translation id="9019929317751753759">Chromium কে আরো নিরাপদ করতে, আমরা নীচের এক্সটেনশানটি অক্ষম করেছি যা <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> এ তালিকাবদ্ধ করা হয়নি এবং হয়ত আপনাকে না জানিয়ে যোগ করা হয়েছিল৷</translation> <translation id="9022552996538154597">Chromium-এ সাইন ইন করুন</translation> <translation id="9036189287518468038">Chromium অ্যাপ্লিকেশান লঞ্চার</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb index 6181903..f1cb25ab 100644 --- a/chrome/app/resources/chromium_strings_ca.xtb +++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Els convidats poden utilitzar Chromium sense deixar-hi rastre.</translation> <translation id="4994636714258228724">Afegeix-me a Chromium</translation> <translation id="5032989939245619637">Desa els detalls a Chromium</translation> +<translation id="5116586539350239523">Chromium emmagatzemarà de manera segura les vostres dades personals perquè no les hàgiu de tornar a escriure</translation> <translation id="5358375970380395591">Esteu a punt d'iniciar la sessió amb un compte gestionat i d'atorgar el control del vostre perfil de Chromium a l'administrador corresponent. Les dades de Chromium, com ara aplicacions, adreces d'interès, historial, contrasenyes i altres configuracions, s'enllaçaran permanentment amb <ph name="USER_NAME" />. Podreu suprimir aquestes dades mitjançant el Tauler de Comptes de Google, però no les podreu associar amb un altre compte. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Hi ha disponible una versió nova de Chromium.</translation> <translation id="5427571867875391349">Defineix Chromium com a navegador predeterminat</translation> @@ -221,7 +222,6 @@ En iniciar la sessió, sigui amb l'usuari que sigui, es combinarà amb <ph name="ACCOUNT_EMAIL_NEW" /> la informació de Chromium com ara adreces d'interès, historial i altres configuracions.</translation> <translation id="9013087743919948559">Addició a Chromium</translation> -<translation id="9013262824292842194">Chromium requereix Windows Vista o Windows XP amb SP2 o superior.</translation> <translation id="9019929317751753759">Per tal que Chromium sigui més segur, hem desactivat algunes de les extensions que no figuren a <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i que és possible que s'hagin afegit sense que ho sapigueu.</translation> <translation id="9022552996538154597">Inici de sessió a Chromium</translation> <translation id="9036189287518468038">Menú d'aplicacions de Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb index 832f1be..19dbb686 100644 --- a/chrome/app/resources/chromium_strings_cs.xtb +++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Hosté mohou Chromium používat, aniž by po nich zůstaly jakékoliv stopy.</translation> <translation id="4994636714258228724">Přidejte do prohlížeče Chromium svůj účet</translation> <translation id="5032989939245619637">Ukládat údaje do prohlížeče Chromium</translation> +<translation id="5116586539350239523">Chromium vaše osobní údaje bezpečně uloží, abyste je nemuseli zadávat znovu.</translation> <translation id="5358375970380395591">Přihlašujete se pomocí spravovaného účtu a poskytujete jeho správci kontrolu nad vaším profilem prohlížeče Chromium. Vaše údaje prohlížeče Chromium, například aplikace, záložky, historie, hesla a jiná nastavení, budou trvale přidružena k účtu <ph name="USER_NAME" />. Tyto údaje budete moci smazat pomocí Hlavního panelu v Účtech Google, ale nebudete je moci přidružit k jinému účtu. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">K dispozici je nová verze prohlížeče Chromium.</translation> <translation id="5427571867875391349">Nastavit Chromium jako výchozí prohlížeč</translation> @@ -223,7 +224,6 @@ Pokud se přesto přihlásíte, budou data prohlížeče Chromium (například záložky, historie a další nastavení) sloučena s účtem <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Přidat do prohlížeče Chromium</translation> -<translation id="9013262824292842194">Chromium vyžaduje operační systém Windows Vista nebo Windows XP SP2 nebo vyšší.</translation> <translation id="9019929317751753759">Aby byl prohlížeč Chromium bezpečnější, deaktivovali jsme následující rozšíření, které není uvedeno na webu <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a pravděpodobně bylo přidáno bez vašeho vědomí.</translation> <translation id="9022552996538154597">Přihlásit se do prohlížeče Chromium</translation> <translation id="9036189287518468038">Spouštěč aplikací Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb index 62bf2fd..62b05c8 100644 --- a/chrome/app/resources/chromium_strings_da.xtb +++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Gæster kan bruge Chromium uden at efterlade noget.</translation> <translation id="4994636714258228724">Tilføj dig selv i Chromium</translation> <translation id="5032989939245619637">Gem oplysninger i Chromium</translation> +<translation id="5116586539350239523">Chromium gemmer dine personlige oplysninger på sikker vis, så du ikke behøver at angive dem igen.</translation> <translation id="5358375970380395591">Du er ved at logge ind med en administreret konto og giver dens administrator kontrol over din profil i Chromium. Dine Chromium-data, f.eks. dine apps, bogmærker, historikdata, adgangskoder og andre indstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse data via betjeningspanelet for Google Konti, men du kan ikke knytte disse data til en anden konto. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Der er en ny version af Chromium til rådighed.</translation> <translation id="5427571867875391349">Angiv Chromium som din standardbrowser</translation> @@ -221,7 +222,6 @@ Hvis du logger ind alligevel, flettes Chromium-oplysninger, som f.eks. bogmærker, historik og andre indstillinger, med <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Føj til Chromium</translation> -<translation id="9013262824292842194">Chromium kræver Windows Vista eller Windows XP med SP2 eller højere.</translation> <translation id="9019929317751753759">For at gøre Chromium mere sikker har vi deaktiveret følgende udvidelser, som ikke er anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og muligvis er blevet tilføjet, uden at du vidste det.</translation> <translation id="9022552996538154597">Log ind på Chromium</translation> <translation id="9036189287518468038">Chromium-applisten</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb index 80913eb..583a9ae72 100644 --- a/chrome/app/resources/chromium_strings_de.xtb +++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Gastnutzer können Chromium verwenden, ohne Daten zu hinterlassen.</translation> <translation id="4994636714258228724">Mich zu Chromium hinzufügen</translation> <translation id="5032989939245619637">Details in Chromium speichern</translation> +<translation id="5116586539350239523">Ihre personenbezogenen Daten werden von Chromium sicher gespeichert. Dadurch brauchen Sie sie nicht noch einmal einzugeben.</translation> <translation id="5358375970380395591">Sie melden sich mit einem verwalteten Konto an und ermöglichen dessen Administrator Zugriff auf Ihr Chromium-Profil. Ihre Chromium-Daten, wie Apps, Lesezeichen, Verlauf, Passwörter und andere Einstellungen, werden dauerhaft mit <ph name="USER_NAME" /> verknüpft. Sie können diese Daten über das Google Konten-Dashboard löschen, aber nicht mit einem anderen Konto verknüpfen. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Eine neue Version von Chromium ist verfügbar.</translation> <translation id="5427571867875391349">Chromium als Standardbrowser festlegen</translation> @@ -221,7 +222,6 @@ Sollten Sie sich trotzdem anmelden, werden die Chromium-Daten wie Lesezeichen, Verlauf und andere Einstellungen in <ph name="ACCOUNT_EMAIL_NEW" /> zusammengeführt.</translation> <translation id="9013087743919948559">Zu Chromium hinzufügen</translation> -<translation id="9013262824292842194">Für Chromium ist Windows Vista oder Windows XP SP2 oder höher erforderlich.</translation> <translation id="9019929317751753759">Um Chromium sicherer zu machen, haben wir die folgende Erweiterung deaktiviert. Sie ist nicht im <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> aufgeführt und wurde möglicherweise ohne Ihr Wissen hinzugefügt.</translation> <translation id="9022552996538154597">In Chromium anmelden</translation> <translation id="9036189287518468038">Chromium App Launcher</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb index 7fd30a5..f5ab4838 100644 --- a/chrome/app/resources/chromium_strings_el.xtb +++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Οι επισκέπτες μπορούν να χρησιμοποιούν το Chromium χωρίς να αφήνουν κανένα ίχνος.</translation> <translation id="4994636714258228724">Προσθήκη του εαυτού σας στο Chromium</translation> <translation id="5032989939245619637">Αποθήκευση λεπτομερειών στο Chromium</translation> +<translation id="5116586539350239523">Το Chromium θα αποθηκεύσει με ασφάλεια τα προσωπικά σας στοιχεία, έτσι ώστε να μην χρειάζεται να τα πληκτρολογείτε ξανά.</translation> <translation id="5358375970380395591">Είστε συνδεδεμένοι με έναν διαχειριζόμενο λογαριασμό και παραχωρείτε στο διαχειριστή του τον έλεγχο του προφίλ σας στο Chromium. Τα δεδομένα σας στο Chromium, όπως οι εφαρμογές, οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις θα συνδεθούν μόνιμα με το όνομα χρήστη <ph name="USER_NAME" />. Θα έχετε τη δυνατότητα να διαγράψετε αυτά τα δεδομένα μέσω του Πίνακα ελέγχου των Λογαριασμών Google, αλλά δεν θα μπορείτε να τα συσχετίσετε με άλλο λογαριασμό. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Μια νέα έκδοση του Chromium είναι διαθέσιμη.</translation> <translation id="5427571867875391349">Ορισμός του Chromium ως προεπιλεγμένου προγράμματος περιήγησης</translation> @@ -221,7 +222,6 @@ Με τη σύνδεση, θα συγχωνευτούν στο Chromium πληροφορίες όπως οι σελιδοδείκτες, το ιστορικό και άλλες ρυθμίσεις στο <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Προσθήκη στο Chromium</translation> -<translation id="9013262824292842194">Το Chromium απαιτεί λειτουργικό σύστημα Windows Vista ή Windows XP με SP2 ή μεταγενέστερη έκδοση.</translation> <translation id="9019929317751753759">Για να κάνουμε το Chromium πιο ασφαλές, απενεργοποιήσαμε τις ακόλουθες επεκτάσεις που δεν αναφέρονται στο <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> και ενδέχεται να έχουν προστεθεί εν αγνοία σας.</translation> <translation id="9022552996538154597">Σύνδεση στο Chromium</translation> <translation id="9036189287518468038">Λειτουργία εκκίνησης εφαρμογών Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_en-GB.xtb b/chrome/app/resources/chromium_strings_en-GB.xtb index 3e70b90f..b1d73e26 100644 --- a/chrome/app/resources/chromium_strings_en-GB.xtb +++ b/chrome/app/resources/chromium_strings_en-GB.xtb
@@ -224,7 +224,6 @@ Signing in anyway will merge Chromium information like bookmarks, history, and other settings to <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Add to Chromium</translation> -<translation id="9013262824292842194">Chromium requires Windows Vista or Windows XP with SP2 or higher.</translation> <translation id="9019929317751753759">To make Chromium safer, we disabled the following extension that isn't listed in the <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> and may have been added without your knowledge.</translation> <translation id="9022552996538154597">Sign in to Chromium</translation> <translation id="9036189287518468038">Chromium App Launcher</translation>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb index 2edbe41c..4a58837 100644 --- a/chrome/app/resources/chromium_strings_es-419.xtb +++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">Los invitados pueden utilizar Chromium sin dejar nada detrás.</translation> <translation id="4994636714258228724">Agregarte a Chromium</translation> <translation id="5032989939245619637">Guardar los detalles en Chromium</translation> +<translation id="5116586539350239523">Chromium almacenará de forma segura tus datos personales para que no tengas que volver a escribirlos.</translation> <translation id="5358375970380395591">Estás por acceder con una cuenta administrada, lo que significa que proporcionarás al administrador el control sobre tu perfil de Chromium. Tus datos de Chromium, como las aplicaciones, los marcadores, el historial, las contraseñas y otros parámetros de configuración quedarán vinculados a <ph name="USER_NAME" /> de forma permanente. Podrás eliminar estos datos a través del Panel de control de Cuentas de Google, pero no podrás asociarlos a otra cuenta. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Hay una nueva versión de Chromium disponible.</translation> <translation id="5427571867875391349">Establecer Chromium como navegador predeterminado</translation> @@ -215,7 +216,6 @@ Si accedes de todos modos, se fusionará la información de Chromium, como los marcadores, el historial y otros parámetros de configuración en <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Agregar a Chromium</translation> -<translation id="9013262824292842194">Para usar Chromium Frame, se necesita Windows Vista o Windows XP con SP2 o superior.</translation> <translation id="9019929317751753759">Para que Chromium sea más seguro, inhabilitamos algunas extensiones que no aparecen en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que posiblemente se hayan agregado sin tu conocimiento.</translation> <translation id="9022552996538154597">Iniciar sesión en Chromium</translation> <translation id="9036189287518468038">Selector de aplicaciones de Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb index 3f2ecd5..9680a82 100644 --- a/chrome/app/resources/chromium_strings_es.xtb +++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Los invitados pueden utilizar Chromium sin dejar nada atrás.</translation> <translation id="4994636714258228724">Añadirte a Chromium</translation> <translation id="5032989939245619637">Guardar detalles en Chromium</translation> +<translation id="5116586539350239523">Chromium almacenará de forma segura tu información personal, de modo que no tendrás que volver a introducirla.</translation> <translation id="5358375970380395591">Vas a iniciar sesión con una cuenta administrada, lo que significa que proporcionarás a su administrador control sobre tu perfil de Chromium. Tus datos de Chromium como, por ejemplo, tus aplicaciones, tus marcadores, tu historial, tus contraseñas y otras opciones se vincularán de forma permanente a la cuenta <ph name="USER_NAME" />. Podrás eliminar estos datos a través del Panel de control de cuentas de Google, pero no podrás asociarlos a otra cuenta. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Hay una nueva versión de Chromium disponible.</translation> <translation id="5427571867875391349">Establecer Chromium como navegador predeterminado</translation> @@ -224,7 +225,6 @@ Si decides iniciar sesión de todas formas, se fusionará la información de Chromium, como marcadores, historial y otras opciones con la de <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Añadir a Chromium</translation> -<translation id="9013262824292842194">Chromium está disponible para Windows Vista o Windows XP con SP2 o superior.</translation> <translation id="9019929317751753759">Para aumentar la seguridad de Chromium, hemos inhabilitado la siguiente extensión que no figura en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que puede haberse añadido sin tu conocimiento.</translation> <translation id="9022552996538154597">Iniciar sesión en Chromium</translation> <translation id="9036189287518468038">Menú de aplicaciones de Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb index d1598cc93..4915b13 100644 --- a/chrome/app/resources/chromium_strings_et.xtb +++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Külastajad saavad kasutada Chromiumi jälgi jätmata.</translation> <translation id="4994636714258228724">Lisa Chromiumi</translation> <translation id="5032989939245619637">Salvesta üksikasjad Chromiumi</translation> +<translation id="5116586539350239523">Chromium salvestab turvaliselt teie isiklikud andmed, et te ei peaks neid uuesti sisestama.</translation> <translation id="5358375970380395591">Logite sisse hallatud kontoga ja annate selle administraatorile üle Chromiumi profiili juhtimise. Teie Chromiumi andmed, näiteks rakendused, järjehoidjad, ajalugu, paroolid ja muud seaded seotakse jäädavalt kasutajaga <ph name="USER_NAME" />. Saate need andmed kustutada Google'i kontode juhtpaneeli kaudu, kuid te ei saa neid seostada teise kontoga. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromiumi uus versioon on saadaval.</translation> <translation id="5427571867875391349">Määra Chromium vaikebrauseriks</translation> @@ -221,7 +222,6 @@ Kui logite siiski sisse, liidetakse Chromiumi teave, nagu järjehoidjad, ajalugu ja muud seaded, kontoga <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Chromiumi lisamine</translation> -<translation id="9013262824292842194">Chromium nõuab Windows Vistat või Windows XP-d vähemalt hoolduspaketiga SP2.</translation> <translation id="9019929317751753759">Chromiumi turvalisemaks muutmiseks keelasime järgmise laienduse, mida ei leidu veebipoes <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja mis võidi lisada teie teadmata.</translation> <translation id="9022552996538154597">Logige Chromiumi sisse</translation> <translation id="9036189287518468038">Chromiumi rakenduste käiviti</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb index eb81b19..c560b2c 100644 --- a/chrome/app/resources/chromium_strings_fa.xtb +++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -110,6 +110,7 @@ <translation id="4987820182225656817">مهمانها می توانند از Chromium استفاده کنند بدون اینکه اثری از خود به جا بگذارند.</translation> <translation id="4994636714258228724">افرودن خودتان به Chromium</translation> <translation id="5032989939245619637">ذخیره جزئیات در Chromium</translation> +<translation id="5116586539350239523">Chromium بهطور امن جزئیات شخصیتان را ذخیره خواهد کرد، بنابراین نیازی نیست دوباره آنها را تایپ کنید.</translation> <translation id="5358375970380395591">شما با حساب مدیریتشده وارد سیستم میشوید و به سرپرست آن اجازه کنترل بر نمایه Chromium خود را میدهید. دادههای Chromium شما شامل برنامهها، نشانکها، سابقه، گذرواژهها و سایر تنظیمات برای همیشه به <ph name="USER_NAME" /> مرتبط خواهد شد. میتوانید این دادهها را از طریق داشبورد حسابهای Google حذف کنید اما نمیتوانید این دادهها را به حساب دیگری مرتبط سازید. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">نسخه جدیدی از Chromium موجود است.</translation> <translation id="5427571867875391349">تنظیم Chromium به عنوان مرورگر پیشفرضتان</translation> @@ -219,7 +220,6 @@ ورود به سیستم به هر حال اطلاعات Chromium مانند نشانکها، سابقه، و سایر تنظیمات را در <ph name="ACCOUNT_EMAIL_NEW" /> ادغام میکند.</translation> <translation id="9013087743919948559">افزودن به Chromium</translation> -<translation id="9013262824292842194">Chromium به Windows Vista یا Windows XP دارای SP2 یا بالاتر نیاز دارد.</translation> <translation id="9019929317751753759">برای ایمنتر کردن Chromium، افزونه زیر را که در <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> فهرست نشده است و ممکن است بدون اطلاع شما اضافه شده باشد، غیرفعال کردیم.</translation> <translation id="9022552996538154597">ورود به سیستم Chromium</translation> <translation id="9036189287518468038">راهانداز برنامه Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb index 03c56e7..fcf0575 100644 --- a/chrome/app/resources/chromium_strings_fi.xtb +++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Vierailijat voivat käyttää Chromiumia jälkiä jättämättä.</translation> <translation id="4994636714258228724">Lisää itsesi Chromiumiin</translation> <translation id="5032989939245619637">Tallenna tiedot Chromiumiin</translation> +<translation id="5116586539350239523">Chromium tallentaa tietosi turvalliseen paikkaan, jottei sinun tarvitse kirjoittaa tietoja uudelleen.</translation> <translation id="5358375970380395591">Olet kirjautumassa sisään hallinnoidulla tilillä ja antamassa tilin järjestelmänvalvojalle oikeuden hallita Chromium-profiiliasi. Chromium-tietosi, kuten sovelluksesi, kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi, yhdistetään pysyvästi käyttäjätiliin <ph name="USER_NAME" />. Voit poistaa nämä tiedot Google-tilien Hallintapaneelissa, mutta et voi liittää tietoja toiseen tiliin. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromiumista on saatavilla uusi versio.</translation> <translation id="5427571867875391349">Aseta Chromium oletusselaimeksi</translation> @@ -221,7 +222,6 @@ Jos kirjaudut silti sisään, Chromium-tiedot, kuten kirjanmerkit, historia ja asetukset, yhdistetään tilin <ph name="ACCOUNT_EMAIL_NEW" /> tietoihin.</translation> <translation id="9013087743919948559">Lisää Chromiumiin</translation> -<translation id="9013262824292842194">Chromium edellyttää, että käyttöjärjestelmä on Windows Vista tai Windows XP SP2 tai uudempi.</translation> <translation id="9019929317751753759">Paransimme Chromiumin turvallisuutta poistamalla käytöstä sovelluksia, joita <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ei tarjoa ja jotka on voitu lisätä ilman lupaasi.</translation> <translation id="9022552996538154597">Kirjaudu sisään Chromiumiin</translation> <translation id="9036189287518468038">Chromium-sovellusten käynnistysohjelma</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb index 5b6b162..030a967 100644 --- a/chrome/app/resources/chromium_strings_fil.xtb +++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -224,7 +224,6 @@ Kapag nag-sign in ka pa rin, isasama sa <ph name="ACCOUNT_EMAIL_NEW" /> ang impormasyon sa Chromium gaya ng mga bookmark, kasaysayan, at iba pang mga setting.</translation> <translation id="9013087743919948559">Idagdag sa Chromium</translation> -<translation id="9013262824292842194">Kinakailangan ng Chromium ang Windows Vista o Windows XP na may SP2 o mas mataas.</translation> <translation id="9019929317751753759">Upang mas gawing ligtas ang Chromium, na-disable namin ang sumusunod na extension na hindi nakalista sa <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na maaaring naidagdag nang hindi mo nalalalaman.</translation> <translation id="9022552996538154597">Mag-sign in sa Chromium</translation> <translation id="9036189287518468038">App Launcher ng Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb index 5f62be8..e07aae3 100644 --- a/chrome/app/resources/chromium_strings_fr.xtb +++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -112,6 +112,7 @@ <translation id="4987820182225656817">Les invités peuvent utiliser Chromium sans laisser aucune trace.</translation> <translation id="4994636714258228724">Ajouter un utilisateur à Chromium</translation> <translation id="5032989939245619637">Enregistrer les détails dans Chromium</translation> +<translation id="5116586539350239523">Chromium va stocker les informations personnelles vous concernant de manière sécurisée. Ainsi, vous n'aurez pas besoin de les saisir à nouveau.</translation> <translation id="5358375970380395591">Vous vous connectez avec un compte géré et donnez le contrôle de votre profil Chromium à son administrateur. Vos données Chromium, telles que les applications, les favoris, l'historique, les mots de passe et les autres paramètres, vont être définitivement associées à <ph name="USER_NAME" />. Vous pouvez supprimer ces données via le tableau de bord des comptes Google, mais vous ne pouvez pas les associer à un autre compte. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Une nouvelle version de Chromium est disponible.</translation> <translation id="5427571867875391349">Définir Chromium comme navigateur par défaut</translation> @@ -222,7 +223,6 @@ Si vous vous connectez quand même, toutes les informations Chromium, comme les favoris, l'historique et les autres paramètres, seront fusionnées avec <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Ajouter à Chromium</translation> -<translation id="9013262824292842194">Chromium requiert Windows Vista ou Windows XP avec SP2 ou une version ultérieure.</translation> <translation id="9019929317751753759">Afin de rendre Chromium plus sûr, nous avons désactivé l'extension suivante qui n'est pas répertoriée sur le <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et qui a pu être ajoutée à votre insu.</translation> <translation id="9022552996538154597">Se connecter à Chromium</translation> <translation id="9036189287518468038">Lanceur d'applications Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_gu.xtb b/chrome/app/resources/chromium_strings_gu.xtb index 9979e8f..3128625 100644 --- a/chrome/app/resources/chromium_strings_gu.xtb +++ b/chrome/app/resources/chromium_strings_gu.xtb
@@ -114,6 +114,7 @@ <translation id="4987820182225656817">અતિથિઓ કંઈપણ પાછળ છોડ્યાં વિના Chromium નો ઉપયોગ કરી શકે છે.</translation> <translation id="4994636714258228724">સ્વયંને Chromium માં ઉમેરો</translation> <translation id="5032989939245619637">Chromium માં વિગતો સાચવો</translation> +<translation id="5116586539350239523">Chromium તમારી વ્યક્તિગત માહિતીને સુરક્ષિત રીતે સંગ્રહિત કરશે જેથી તમારે તેમને ફરીથી ટાઇપ કરવાની જરૂર નથી.</translation> <translation id="5358375970380395591">તમે સંચાલિત કરેલ એકાઉન્ટ સાથે સાઇન ઇન કરી રહ્યાં છો અને તમારી Chromium પ્રોફાઇલ પર તેનું વ્યવસ્થાપક નિયંત્રણ આપી રહ્યાં છો. તમારો Chromium ડેટા, જેમ કે એપ્લિકેશનો, બુકમાર્ક્સ, ઇતિહાસ, પાસવર્ડ્સ અને અન્ય સેટિંગ્સ, કાયમ માટે <ph name="USER_NAME" /> થી બંધાયેલ રહેશે. તમે Google એકાઉન્ટ્સ ડેશબોર્ડથી આ ડેટાને કાઢી શકશો, પરંતુ તમે આ ડેટાને અન્ય એકાઉન્ટ સાથે સાંકળી શકશો નહીં. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium નું નવું સંસ્કરણ ઉપલબ્ધ છે.</translation> <translation id="5427571867875391349">Chromium ને તમારા ડિફોલ્ટ બ્રાઉઝર તરીકે સેટ કરો</translation> @@ -224,7 +225,6 @@ કોઈપણ રીતે સાઇન ઇન કરવું બુકમાર્ક્સ, ઇતિહાસ, અને અન્ય સેટિંગ્સ જેવી Chromium માહિતીને <ph name="ACCOUNT_EMAIL_NEW" /> માં મર્જ કરશે.</translation> <translation id="9013087743919948559">Chromium માં ઉમેરો</translation> -<translation id="9013262824292842194">Chromium ને Windows Vista અથવા SP1 વાળા Windows XP અથવા તે પછીનાની આવશ્યકતા છે.</translation> <translation id="9019929317751753759">Chromium ને સુરક્ષિત બનાવવા માટે, અમે નીચેના એક્સ્ટેન્શનને અક્ષમ કર્યું છે કે જે <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> માં સૂચિબદ્ધ નથી અને તમારી જાણ વિના ઉમેરવામાં આવ્યું હોઈ શકે છે.</translation> <translation id="9022552996538154597">Chromium માં સાઇન ઇન કરો</translation> <translation id="9036189287518468038">Chromium એપ્લિકેશન લૉંચર</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb index c9381cb..2d42ac2 100644 --- a/chrome/app/resources/chromium_strings_hi.xtb +++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">अतिथि कुछ भी छोड़े बिना क्रोमियम का उपयोग कर सकते हैं.</translation> <translation id="4994636714258228724">स्वयं को क्रोमियम में जोड़ें</translation> <translation id="5032989939245619637">क्रोमियम में विवरण सहेजें</translation> +<translation id="5116586539350239523">क्रोमियम आपके व्यक्तिगत विवरण को सुरक्षित रूप से संग्रहीत करेगा, इसलिए आपको इन्हें पुनः लिखने की आवश्यकता नहीं है.</translation> <translation id="5358375970380395591">आप प्रबंधित खाते से प्रवेश कर रहे हैं और उसके व्यवस्थापक को अपनी क्रोमियम प्रोफ़ाइल पर नियंत्रण दे रहे हैं. आपका क्रोमियम डेटा, जैसे आपके ऐप्स , बुकमार्क, इतिहास, पासवर्ड, औऱ अन्य सेटिंग स्थायी रूप से <ph name="USER_NAME" /> से जुड़ जाएंगी. आप Google खाता डैशबोर्ड के माध्यम से इस डेटा को हटा सकेंगे, लेकिन आप किसी अन्य खाते से इस डेटा को संबद्ध नहीं कर सकेंगे. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">क्रोमियम का एक नया वर्शन उपलब्ध है.</translation> <translation id="5427571867875391349">क्रोमियम को अपने डिफ़ॉल्ट ब्राउज़र के रूप में सेट करें</translation> @@ -221,7 +222,6 @@ किसी भी तरह प्रवेश करने से बुकमार्क, इतिहास, और अन्य सेटिंग जैसी जानकारी <ph name="ACCOUNT_EMAIL_NEW" /> में मर्ज हो जाएगी.</translation> <translation id="9013087743919948559">क्रोमियम में जोड़ें</translation> -<translation id="9013262824292842194">क्रोमियम के लिए Windows Vista या SP2 या इससे अधिक वाले Windows XP की आवश्यकता होती है.</translation> <translation id="9019929317751753759">क्रोमियम को अधिक सुरक्षित बनाने के लिए, हमने निम्न एक्सटेंशन को अक्षम कर दिया है जो <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> में सूचीबद्ध नहीं है और आपकी जानकारी के बिना जोड़ा गया हो सकता है.</translation> <translation id="9022552996538154597">क्रोमियम में प्रवेश करें</translation> <translation id="9036189287518468038">क्रोमियम ऐप्स लॉन्चर</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb index 8cd2183..6e2d3bc 100644 --- a/chrome/app/resources/chromium_strings_hr.xtb +++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Gosti mogu upotrebljavati Chromium bez ostavljanja tragova o upotrebi.</translation> <translation id="4994636714258228724">Dodajte sebe kao korisnika Chromiuma</translation> <translation id="5032989939245619637">Spremi pojedinosti u sustavu Chromium</translation> +<translation id="5116586539350239523">Chromium će pohraniti vaše osobne podatke na siguran način tako da ih ne morate ponovo upisivati.</translation> <translation id="5358375970380395591">Prijavljujete se upravljanim računom i dajete administratoru kontrolu nad svojim profilom u sustavu Chromium. Vaši podaci u sustavu Chromium, primjerice, aplikacije, oznake, povijest, zaporke i ostale postavke, trajno će se povezati s korisnikom <ph name="USER_NAME" />. Moći ćete izbrisati te podatke putem Nadzorne ploče Google računa, ali ih nećete moći povezati s nekim drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Dostupna je nova verzija preglednika Chromium.</translation> <translation id="5427571867875391349">Postavite Chrome kao zadani preglednik</translation> @@ -221,7 +222,6 @@ Ako se ipak prijavite, podaci sustava Chromium kao što su oznake, povijest i ostale postavke spojit će se s korisnikom <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Dodajte u Chromium</translation> -<translation id="9013262824292842194">Chromium zahtijeva sustav Windows Vista ili Windows XP sa servisnim paketom SP2 ili novijim.</translation> <translation id="9019929317751753759">Kako bismo Chromium učinili sigurnijim, onemogućili smo sljedeće proširenje koje nije navedeno na stranici <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i možda je dodano bez vašeg znanja.</translation> <translation id="9022552996538154597">Prijava na Chromium</translation> <translation id="9036189287518468038">Pokretač aplikacija sustava Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb index 7b71100..67f67419 100644 --- a/chrome/app/resources/chromium_strings_hu.xtb +++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">A vendégek úgy használhatják a Chromiumot, hogy nem hagynak hátra semmit.</translation> <translation id="4994636714258228724">Adja hozzá magát a Chromiumban</translation> <translation id="5032989939245619637">Részletek mentése a Chromiumban</translation> +<translation id="5116586539350239523">A Chromium biztonságosan tárolja a személyes adatait, így nem kell újra begépelnie őket.</translation> <translation id="5358375970380395591">Kezelt fiókkal jelentkezik be, és annak adminisztrátora számára hozzáférést biztosít Chromium-profiljához. Chromium-adatait – például alkalmazásait, könyvjelzőit, előzményeit, jelszavait és más beállításait – a rendszer véglegesen társítja a(z) <ph name="USER_NAME" /> fiókhoz. Ezen adatokat a Google-fiók Irányítópultján törölheti, de más fiókhoz nem társíthatja őket. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Elérhető a Chromium új verziója.</translation> <translation id="5427571867875391349">A Chromium beállítása alapértelmezett böngészőként</translation> @@ -219,7 +220,6 @@ Ha mindenképp bejelentkezik, akkor egyesíti a(z) <ph name="ACCOUNT_EMAIL_NEW" /> fiókkal az olyan Chromium-adatokat, mint a könyvjelzők, az előzmények és más beállítások.</translation> <translation id="9013087743919948559">Hozzáadás a Chromiumhoz</translation> -<translation id="9013262824292842194">A Chromium futtatásához Windows Vista, illetve Windows XP SP2 vagy újabb verzió szükséges.</translation> <translation id="9019929317751753759">A Chromium biztonságosabbá tétele érdekében kikapcsoltuk a következő bővítményt, amely nem a(z) <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> szolgáltatásból származik, és előfordulhat, hogy az Ön tudta nélkül lett telepítve.</translation> <translation id="9022552996538154597">Bejelentkezés a Chromiumba</translation> <translation id="9036189287518468038">Chromium Alkalmazásindító</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb index ce0e763..f2fad0e 100644 --- a/chrome/app/resources/chromium_strings_id.xtb +++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Tamu dapat menggunakan Chromium tanpa meninggalkan apa pun.</translation> <translation id="4994636714258228724">Tambahkan diri Anda ke Chromium</translation> <translation id="5032989939245619637">Simpan detail di Chromium</translation> +<translation id="5116586539350239523">Chromium akan meyimpan detail pribadi Anda secara aman sehingga Anda tidak perlu mengetiknya lagi.</translation> <translation id="5358375970380395591">Anda masuk dengan akun yang dikelola dan memberikan administratornya kontrol atas profil Chromium Anda. Data Chromium Anda, seperti aplikasi, bookmark, riwayat, sandi, dan setelan lain selamanya akan dikaitkan ke <ph name="USER_NAME" />. Anda dapat menghapus data ini melalui Dasbor Akun Google, namun Anda tidak akan dapat mengaitkan data ini dengan akun yang lain. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Tersedia Chromium versi baru.</translation> <translation id="5427571867875391349">Setel Chromium sebagai browser default</translation> @@ -221,7 +222,6 @@ Tetap masuk akan menggabungkan informasi Chromium seperti bookmark, riwayat, dan setelan lain ke <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Tambahkan ke Chromium</translation> -<translation id="9013262824292842194">Chromium memerlukan Windows Vista atau Windows XP dengan SP2 atau yang lebih baru.</translation> <translation id="9019929317751753759">Agar Chromium lebih aman, kami menonaktifkan ekstensi berikut yang tidak tercantum dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa sepengetahuan Anda.</translation> <translation id="9022552996538154597">Masuk ke Chromium</translation> <translation id="9036189287518468038">Peluncur Aplikasi Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb index 583b256..2e64d9f 100644 --- a/chrome/app/resources/chromium_strings_it.xtb +++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -222,7 +222,6 @@ Se esegui comunque l'accesso, le informazioni di Chromium come Preferiti, cronologia e altre impostazioni verranno unite a quelle di <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Aggiungi a Chromium</translation> -<translation id="9013262824292842194">Chromium richiede Windows Vista o Windows XP con SP2 o versioni successive.</translation> <translation id="9019929317751753759">Per rendere Chromium più sicuro, abbiamo disattivato la seguente estensione non presente nel <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> che potrebbe essere stata aggiunta a tua insaputa.</translation> <translation id="9022552996538154597">Accedi a Chromium</translation> <translation id="9036189287518468038">Avvio applicazioni di Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb index 9474795..fbe077c5 100644 --- a/chrome/app/resources/chromium_strings_iw.xtb +++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">אורחים יכולים להשתמש ב-Chromium בלי להשאיר דבר מאחור.</translation> <translation id="4994636714258228724">הוסף את עצמך ל-Chromium</translation> <translation id="5032989939245619637">שמור פרטים ב-Chromium</translation> +<translation id="5116586539350239523">Chromium יאחסן את הפרטים האישיים שלך באופן מאובטח כך שלא תידרש להקליד אותם שוב.</translation> <translation id="5358375970380395591">אתה נכנס עם חשבון מנוהל ונותן למנהל המערכת שלו שליטה על הפרופיל שלך ב-Chromium. הנתונים שלך ב-Chromium, כגון יישומים, סימניות, היסטוריה, סיסמאות והגדרות אחרות ייקשרו באופן קבוע ל-<ph name="USER_NAME" />. תוכל למחוק את הנתונים האלה באמצעות לוח הבקרה של חשבונות Google, אבל לא תוכל לשייך את הנתונים האלה לחשבון אחר. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">גרסה חדשה של Chromium זמינה כעת.</translation> <translation id="5427571867875391349">הגדר את Chromium כדפדפן ברירת המחדל שלך</translation> @@ -219,7 +220,6 @@ אם תמשיך בכניסה, המידע ב-Chromuim , כמו סימניות, היסטוריה והגדרות אחרות, ימוזג עם <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">הוסף ל-Chromium</translation> -<translation id="9013262824292842194">להפעלת Chromium יש להשתמש במערכת ההפעלה Windows Vista או Windows XP עם SP2 ואילך.</translation> <translation id="9019929317751753759">כדי לשפר את האבטחה של Chromium, השבתנו את התוסף הבא שאינו רשום ב-<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> וייתכן שנוסף ללא ידיעתך.</translation> <translation id="9022552996538154597">היכנס אל Chromium</translation> <translation id="9036189287518468038">Chromium App Launcher</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb index 3fbf795..4f1d2a5 100644 --- a/chrome/app/resources/chromium_strings_ja.xtb +++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">ゲスト ユーザーは、記録を残さずに Chromium を使用できます。</translation> <translation id="4994636714258228724">Chromium に自分を追加</translation> <translation id="5032989939245619637">Chromium で詳細を保存する</translation> +<translation id="5116586539350239523">Chromium でユーザーの情報が安全に保存されるので、再度入力する必要がなくなります。</translation> <translation id="5358375970380395591">現在、管理対象アカウントでログインしており、あなたの Chromium プロフィールを管理者が制御できる状態になっています。あなたの Chromium データ(アプリ、ブックマーク、履歴、パスワードなどの設定)は永続的に <ph name="USER_NAME" /> に関連付けられます。このデータは Google アカウントのダッシュボードを介して削除できますが、このデータを別のアカウントに関連付けることはできなくなります。<ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium の最新バージョンをぜひお試しください。</translation> <translation id="5427571867875391349">Chromium をデフォルト ブラウザに設定する</translation> @@ -221,7 +222,6 @@ このままログインすると、ブックマーク、履歴、その他の設定などの Chromium データが <ph name="ACCOUNT_EMAIL_NEW" /> と統合されます。</translation> <translation id="9013087743919948559">Chromium に追加</translation> -<translation id="9013262824292842194">Chromium のご利用には Windows Vista または Windows XP SP2 以降が必要です。</translation> <translation id="9019929317751753759">Chromium をより安全にご利用いただくために、<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />で提供していない次の拡張機能を無効にしました。これは知らないうちに追加された可能性があります。</translation> <translation id="9022552996538154597">Chromium にログイン</translation> <translation id="9036189287518468038">Chromium アプリ ランチャー</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb index 433dd0e..0a877379 100644 --- a/chrome/app/resources/chromium_strings_kn.xtb +++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">ಅತಿಥಿಗಳು ಏನನ್ನೂ ಉಳಿಸದೆಯೇ Chromium ಬಳಸಬಹುದು.</translation> <translation id="4994636714258228724">ನೀವಾಗಿಯೇ Chromium ಗೆ ಸೇರಿಕೊಳ್ಳಿ</translation> <translation id="5032989939245619637">Chromium ನಲ್ಲಿ ವಿವರಣೆಗಳನ್ನು ಉಳಿಸಿ</translation> +<translation id="5116586539350239523">Chromium ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ವಿವರಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಸಂಗ್ರಹಿಸಿಕೊಳ್ಳುತ್ತದೆ ಇದರಿಂದಾಗಿ ನೀವು ಅವುಗಳನ್ನು ಮತ್ತೆ ಟೈಪ್ ಮಾಡಬೇಕಾಗಿಲ್ಲ.</translation> <translation id="5358375970380395591">ನೀವು ನಿರ್ವಹಿಸಲಾದ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುತ್ತಿರುವಿರಿ ಮತ್ತು ನಿಮ್ಮ Chromium ಪ್ರೊಫೈಲ್ ಮೂಲಕ ಅದರ ನಿರ್ವಾಹಕ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು, ಹಾಗೂ ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳಂತಹ ನಿಮ್ಮ Chromium ಡೇಟಾವನ್ನು <ph name="USER_NAME" /> ಅವರಿಗೆ ಶಾಶ್ವತವಾಗಿ ಬಂಧಿಸಲಾಗುತ್ತದೆ. Google ಖಾತೆಗಳ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಮೂಲಕ ಈ ಡೇಟಾವನ್ನು ಅಳಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯ, ಆದರೆ ಬೇರೊಂದು ಖಾತೆಯೊಂದಿಗೆ ಈ ಡೇಟಾವನ್ನು ಸಂಯೋಜಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium ನ ಹೊಸ ಆವೃತ್ತಿ ಲಭ್ಯವಿದೆ.</translation> <translation id="5427571867875391349">Chromium ಅನ್ನು ನಿಮ್ಮ ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ರೂಪದಲ್ಲಿ ಹೊಂದಿಸಿ</translation> @@ -215,7 +216,6 @@ ಸೈನ್ ಇನ್ ಮಾಡುವುದು ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಹಾಗೂ ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳಂತಹ Chromium ಮಾಹಿತಿಯನ್ನು <ph name="ACCOUNT_EMAIL_NEW" /> ಗೆ ಹೇಗಾದರೂ ವಿಲೀನಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="9013087743919948559">Chromium ಗೆ ಸೇರಿಸಿ</translation> -<translation id="9013262824292842194">Chromium ಗೆ SP2 ಅಥವಾ ಹೆಚ್ಚಿನದರೊಂದಿಗೆ Windows Vista ಅಥವಾ Windows XP ಅಗತ್ಯವಿರುತ್ತದೆ.</translation> <translation id="9019929317751753759">Chromium ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ನಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡದಿರುವ ಕೆಳಗಿನ ವಿಸ್ತರಣೆಯನ್ನು ನಾವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದೇವೆ ಮತ್ತು ಇದು ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಬಾರದೇ ಸೇರಿಸಲಾಗಿರಬಹುದು.</translation> <translation id="9022552996538154597">Chromium ಗೆ ಸೈನ್ ಇನ್ ಆಗಿ</translation> <translation id="9036189287518468038">Chromium ಅಪ್ಲಿಕೇಶನ್ ಲಾಂಚರ್</translation>
diff --git a/chrome/app/resources/chromium_strings_ko.xtb b/chrome/app/resources/chromium_strings_ko.xtb index 92f49e2..76794c4 100644 --- a/chrome/app/resources/chromium_strings_ko.xtb +++ b/chrome/app/resources/chromium_strings_ko.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">손님으로 사용 기록을 남기지 않고 Chromium을 사용할 수 있습니다.</translation> <translation id="4994636714258228724">Chromium에 본인 추가</translation> <translation id="5032989939245619637">Chromium에 세부정보 저장</translation> +<translation id="5116586539350239523">Chromium은 개인정보를 안전하게 저장하므로 정보를 다시 입력할 필요가 없습니다.</translation> <translation id="5358375970380395591">관리 계정으로 로그인하고 Chromium 프로필에 대한 관리자 제어권을 부여하려고 합니다. 앱, 북마크, 방문 기록, 비밀번호 및 기타 설정 등 Chromium 데이터가 <ph name="USER_NAME" /> 계정에 영구적으로 연결됩니다. 이후 이 데이터를 Google 계정 대시보드에서 삭제할 수는 있지만 다른 계정에 연결할 수는 없습니다. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium의 새 버전이 출시되었습니다.</translation> <translation id="5427571867875391349">Chromium을 기본 브라우저로 설정</translation> @@ -223,7 +224,6 @@ 로그인하면 북마크, 방문 기록 및 기타 설정과 같은 Chromium 정보가 <ph name="ACCOUNT_EMAIL_NEW" />에 병합됩니다.</translation> <translation id="9013087743919948559">Chromium에 추가</translation> -<translation id="9013262824292842194">Chromium은 Windows Vista 또는 Windows XP 서비스 팩 2 이상이 설치된 컴퓨터에서 사용하실 수 있습니다.</translation> <translation id="9019929317751753759">Google에서는 Chromium의 보안을 강화하기 위해 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />에 표시되지 않고 사용자가 모르게 추가되었을 수 있는 다음 확장 프로그램의 사용을 중지했습니다.</translation> <translation id="9022552996538154597">Chromium에 로그인</translation> <translation id="9036189287518468038">Chromium 앱 실행기</translation>
diff --git a/chrome/app/resources/chromium_strings_lt.xtb b/chrome/app/resources/chromium_strings_lt.xtb index 1299a59..64c9932 100644 --- a/chrome/app/resources/chromium_strings_lt.xtb +++ b/chrome/app/resources/chromium_strings_lt.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Svečiai gali naudoti „Chromium“ nepalikdami jokių duomenų.</translation> <translation id="4994636714258228724">Pridėkite save prie „Chromium“</translation> <translation id="5032989939245619637">Išsaugoti išsamią informaciją „Chromium“</translation> +<translation id="5116586539350239523">„Chromium“ patikimai saugos jūsų išsamią informaciją, kad nebereikėtų jos vėl įvesti.</translation> <translation id="5358375970380395591">Prisijungiate su valdoma paskyra ir leidžiate jos administratoriui valdyti jūsų „Chromium“ profilį. „Chromium“ duomenys, pvz., programos, žymės, istorija, slaptažodžiai ir kiti nustatymai, bus visam laikui susieti su <ph name="USER_NAME" />. Galėsite ištrinti šiuos duomenis naudodami „Google“ paskyrų informacijos suvestinę, bet negalėsite susieti šių duomenų su kita paskyra. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Pasiekiama nauja „Chromium“ versija.</translation> <translation id="5427571867875391349">Nustatyti „Chromium“ kaip numatytąją naršyklę</translation> @@ -223,7 +224,6 @@ Prisijungus bet kuriuo būdu, „Chromium“ informacija, pvz., žymės, istorija ir kiti nustatymai, bus sujungta su <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Pridėti prie „Chromium“</translation> -<translation id="9013262824292842194">„Chromium“ reikalinga „Windows Vista“ ar „Windows XP“ su SP2 ar naujesne versija.</translation> <translation id="9019929317751753759">Kad „Chromium“ būtų saugesnė, išjungėme toliau nurodytą plėtinį, kuris nepateiktas <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> sąraše ir tikriausiai buvo pridėtas be jūsų žinios.</translation> <translation id="9022552996538154597">Prisijungti prie „Chromium“</translation> <translation id="9036189287518468038">„Chromium“ programų paleidimo priemonė</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb index 7b01997..995603d8 100644 --- a/chrome/app/resources/chromium_strings_lv.xtb +++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Viesi var izmantot Chromium, neatstājot nekādas pēdas.</translation> <translation id="4994636714258228724">Pievienot savu kontu pārlūkā Chromium</translation> <translation id="5032989939245619637">Saglabāt informāciju operētājsistēmā Chromium</translation> +<translation id="5116586539350239523">Chromium droši saglabās jūsu privāto informāciju, lai jums vairs nevajadzētu to atkārtoti ievadīt.</translation> <translation id="5358375970380395591">Jūs pierakstāties ar pārvaldītu kontu, kura administrators var kontrolēt jūsu profilu. Jūsu Chromium dati, piemēram, lietotnes, grāmatzīmes, vēsture, paroles un citi iestatījumi, tiks neatgriezeniski saistīti ar lietotāju <ph name="USER_NAME" />. Varēsiet dzēst šos datus, izmantojot Google kontu informācijas paneli, taču nevarēsiet šos datus saistīt ar citu kontu. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Pieejama jauna Chromium versija.</translation> <translation id="5427571867875391349">Iestatīt Chromium kā noklusējuma pārlūku</translation> @@ -219,7 +220,6 @@ Ja pierakstīsieties tik un tā, Chromium informācija, piemēram, grāmatzīmes, vēsture un citi iestatījumi, tiks apvienota ar konta <ph name="ACCOUNT_EMAIL_NEW" /> informāciju.</translation> <translation id="9013087743919948559">Pievienot pārlūkam Chromium</translation> -<translation id="9013262824292842194">Pārlūka Chromium izmantošanai nepieciešama operētājsistēma Windows Vista vai Windows XP ar SP2, vai jaunāka tās versija.</translation> <translation id="9019929317751753759">Lai uzlabotu Chromium drošību, mēs atspējojām tālāk norādīto paplašinājumu, kas nav norādīts vietnē <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> un, iespējams, tika pievienots, jums nezinot.</translation> <translation id="9022552996538154597">Pierakstieties pārlūkā Chromium</translation> <translation id="9036189287518468038">Chromium lietotņu palaišanas programma</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb index e26db9a..5399807 100644 --- a/chrome/app/resources/chromium_strings_ml.xtb +++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -114,6 +114,7 @@ <translation id="4987820182225656817">അതിഥികൾക്ക് ഒന്നും ശേഷിപ്പിക്കാതെ തന്നെ Chromium ഉപയോഗിക്കാനാകും.</translation> <translation id="4994636714258228724">Chromium-ത്തിലേക്ക് സ്വയം ചേരുക</translation> <translation id="5032989939245619637">Chromium-ൽ വിശദാംശങ്ങൾ സംരക്ഷിക്കുക</translation> +<translation id="5116586539350239523">Chromium നിങ്ങളുടെ വ്യക്തിപരമായ വിശദാംശങ്ങൾ സുരക്ഷിതമായി സൂക്ഷിക്കുന്നതിനാൽ അവ വീണ്ടും ടൈപ്പുചെയ്യേണ്ടതില്ല.</translation> <translation id="5358375970380395591">നിങ്ങൾ ഒരു നിയന്ത്രിത അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്ത് അതിന്റെ അഡ്മിനിസ്ട്രേറ്റർക്ക് നിങ്ങളുടെ Chromium പ്രൊഫൈലിന്റെ നിയന്ത്രണം നൽകുന്നു. നിങ്ങളുടെ അപ്ലിക്കേഷനുകൾ, ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ, മറ്റ് ക്രമീകരണങ്ങൾ എന്നിവ പോലെയുള്ള Chromium ഡാറ്റ <ph name="USER_NAME" /> എന്നതുമായി ശാശ്വതമായി ബന്ധിപ്പിച്ചതായിത്തീരും. Google അക്കൗണ്ട്സ് ഡാഷ്ബോർഡ് വഴി നിങ്ങൾക്ക് ഈ ഡാറ്റ ഇല്ലാതാക്കാനാകുമെങ്കിലും, ഈ ഡാറ്റ മറ്റൊരു അക്കൗണ്ടുമായി ബന്ധപ്പെടുത്താനാകില്ല. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium-ത്തിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.</translation> <translation id="5427571867875391349">നിങ്ങളുടെ സ്ഥിര ബ്രൗസറായി Chromium സജ്ജമാക്കുക</translation> @@ -224,7 +225,6 @@ ഏതുവിധേനയും സൈൻ ഇൻ ചെയ്യുന്നത് ബുക്ക്മാർക്കുകൾ, ചരിത്രം, മറ്റ് ക്രമീകരണങ്ങൾ എന്നിവ പോലുള്ള Chromium വിവരങ്ങൾ <ph name="ACCOUNT_EMAIL_NEW" /> എന്നതുമായി ലയിപ്പിക്കും.</translation> <translation id="9013087743919948559">Chromium-ലേക്ക് ചേർത്തു</translation> -<translation id="9013262824292842194">Chromium-ത്തിന് SP2 അല്ലെങ്കിൽ അതിലും ഉയർന്നതോട് കൂടിയ Windows Vista അല്ലെങ്കിൽ Windows XP ആവശ്യമാണ്.</translation> <translation id="9019929317751753759">Chromium സുരക്ഷിതമാക്കാൻ, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റുചെയ്യാത്ത ഇനിപ്പറയുന്ന വിപുലീകരണം ഞങ്ങൾ പ്രവർത്തനരഹിതമാക്കി, അവ നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation> <translation id="9022552996538154597">Chromium-ത്തിലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="9036189287518468038">Chromium അപ്ലിക്കേഷൻ ലോഞ്ചർ</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb index dddada7..7fc98e1 100644 --- a/chrome/app/resources/chromium_strings_mr.xtb +++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -223,7 +223,6 @@ तरीही साइन इन करण्यामुळे <ph name="ACCOUNT_EMAIL_NEW" /> मध्ये बुकमार्क, इतिहास यासारखी Chromium माहिती आणि अन्य सेटिंग्ज विलीन होईल.</translation> <translation id="9013087743919948559">Chromium वर जोडा</translation> -<translation id="9013262824292842194">Chromium साठी SP2 किंवा त्यापेक्षा उच्च आवृत्तीसह Windows Vista किंवा Windows XP आवश्यक आहे.</translation> <translation id="9019929317751753759">Chromium अधिक सुरक्षित करण्यासाठी, आम्ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये सूचीबद्ध नसलेला आणि आपल्या माहितीशिवाय कदाचित जोडला गेलेला खालील विस्तार अक्षम केला आहे.</translation> <translation id="9022552996538154597">Chromium वर साइन इन करा</translation> <translation id="9036189287518468038">Chromium App लाँचर</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb index 7bca7dd..24957d1 100644 --- a/chrome/app/resources/chromium_strings_ms.xtb +++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -222,7 +222,6 @@ Meneruskan juga log masuk akan menggabungkan maklumat Chromium seperti penanda halaman, sejarah dan tetapan lain ke <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Tambah ke Chromium</translation> -<translation id="9013262824292842194">Chromium memerlukan Windows Vista atau Windows XP dengan SP2 atau lebih tinggi.</translation> <translation id="9019929317751753759">Untuk menjadikan Chromium lebih selamat, kami melumpuhkan sambungan berikut yang tidak disenaraikan dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa pengetahuan anda.</translation> <translation id="9022552996538154597">Log masuk ke Chromium</translation> <translation id="9036189287518468038">Pelancar Apl Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb index d2f9776..59713d8 100644 --- a/chrome/app/resources/chromium_strings_nl.xtb +++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Gasten kunnen Chromium gebruiken zonder iets achter te laten.</translation> <translation id="4994636714258228724">Jezelf toevoegen aan Chromium</translation> <translation id="5032989939245619637">Details opslaan in Chromium</translation> +<translation id="5116586539350239523">Chromium slaat je persoonlijke gegevens veilig op, zodat je ze niet opnieuw hoeft op te geven.</translation> <translation id="5358375970380395591">Je logt in op een beheerd account waarmee de eigenaar van dat account beheer krijgt over je Chromium-profiel. Je Chromium-gegevens zoals je apps, bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden permanent gekoppeld aan <ph name="USER_NAME" />. Je kunt deze gegevens verwijderen via het Google Accounts Dashboard, maar je kunt deze gegevens niet koppelen aan een ander account.<ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Er is een nieuwe versie van Chromium beschikbaar.</translation> <translation id="5427571867875391349">Chromium instellen als je standaardbrowser</translation> @@ -223,7 +224,6 @@ Als je toch inlogt, worden Chromium-gegevens zoals bladwijzers, geschiedenis en andere instellingen samengevoegd met <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Toevoegen aan Chromium</translation> -<translation id="9013262824292842194">Voor Chromium is Windows Vista of Windows XP met SP2 of hoger vereist.</translation> <translation id="9019929317751753759">We hebben de volgende extensie uitgeschakeld die niet wordt vermeld in de <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> en mogelijk zonder je medeweten is toegevoegd. We doen dit om Chromium veiliger te maken.</translation> <translation id="9022552996538154597">Inloggen bij Chromium</translation> <translation id="9036189287518468038">App-opstartprogramma van Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb index 63e4b7b..0ad7c8d9 100644 --- a/chrome/app/resources/chromium_strings_no.xtb +++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Gjester kan bruke Chromium uten å etterlate seg spor.</translation> <translation id="4994636714258228724">Legg til deg selv i Chromium</translation> <translation id="5032989939245619637">Lagre detaljer i Chromium</translation> +<translation id="5116586539350239523">Chromium lagrer personopplysningene dine sikkert, slik at du slipper å skrive dem inn på nytt.</translation> <translation id="5358375970380395591">Du logger deg på med en administrert konto og gir tilhørende administratorer kontroll over Chromium-profilen din. Chromium-dataene dine, slik som apper, bokmerker, loggen, passord og andre innstillinger, knyttes permanent til <ph name="USER_NAME" />. Du kan slette disse dataene via oversikten for Google-kontoer, men du kan ikke knytte disse dataene til en annen konto. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">En nyere versjon av Chromium er tilgjengelig.</translation> <translation id="5427571867875391349">Bruk Chromium som standard nettleser</translation> @@ -221,7 +222,6 @@ Hvis du logger deg på allikevel, blir Chromium-informasjon som bokmerker, loggen og andre innstillinger slått sammen med <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Legg til i Chromium</translation> -<translation id="9013262824292842194">Chromium krever Windows Vista eller Windows XP med SP2 eller høyere.</translation> <translation id="9019929317751753759">For å gjøre Chromium tryggere har vi slått av følgende utvidelse som ikke finnes i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, og som kan ha blitt lagt til uten at du vet det.</translation> <translation id="9022552996538154597">Logg på Chromium</translation> <translation id="9036189287518468038">Chromium-appvelger</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb index 3565018c..ac2b5fe 100644 --- a/chrome/app/resources/chromium_strings_pl.xtb +++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">Goście mogą korzystać z Chromium, nie pozostawiając żadnych danych.</translation> <translation id="4994636714258228724">Dodaj siebie do Chromium</translation> <translation id="5032989939245619637">Zapisz szczegóły w Chromium</translation> +<translation id="5116586539350239523">Chromium będzie bezpiecznie przechowywać Twoje dane, dzięki czemu nie będzie trzeba wpisywać ich ponownie.</translation> <translation id="5358375970380395591">Logujesz się na zarządzane konto i przekazujesz jego administratorowi kontrolę nad swoim profilem Chromium. Twoje dane Chromium, takie jak aplikacje, zakładki, historia, hasła i inne ustawienia, zostaną trwale powiązane z użytkownikiem <ph name="USER_NAME" />. Będzie można je usunąć w Panelu kont Google, ale nie będzie można ich powiązać z innym kontem. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Pojawiła się nowa wersja Chromium.</translation> <translation id="5427571867875391349">Ustaw Chromium jako domyślną przeglądarkę</translation> @@ -219,7 +220,6 @@ Jeśli jednak zalogujesz się teraz, informacje Chromium, takie jak zakładki, historia i inne ustawienia, zostaną połączone z kontem <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Dodaj do Chromium</translation> -<translation id="9013262824292842194">Chromium wymaga systemu Windows Vista bądź Windows XP z dodatkiem SP2 lub nowszym.</translation> <translation id="9019929317751753759">Aby poprawić bezpieczeństwo Chromium, wyłączyliśmy to rozszerzenie. Nie jest ono dostępne w <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i mogło zostać dodane bez Twojej wiedzy.</translation> <translation id="9022552996538154597">Zaloguj się do Chromium</translation> <translation id="9036189287518468038">Program uruchamiający aplikacje Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb index b9cbdfeb..f03213d 100644 --- a/chrome/app/resources/chromium_strings_pt-BR.xtb +++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">Convidados podem usar o Chromium sem deixar nada para trás.</translation> <translation id="4994636714258228724">Cadastrar-se no Chromium</translation> <translation id="5032989939245619637">Salvar detalhes no Chromium</translation> +<translation id="5116586539350239523">O Chromium armazenará seus dados pessoais com segurança para que não seja necessário digitá-los novamente.</translation> <translation id="5358375970380395591">Você está fazendo login com uma conta gerenciada e concedendo ao administrador da conta o controle sobre seu perfil do Chromium. Seus dados do Chromium, como aplicativos, favoritos, histórico, senhas e outras configurações serão permanentemente vinculados a <ph name="USER_NAME" />. Você pode excluir esses dados pelo painel das Contas do Google, mas não pode associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Há uma nova versão do Chromium disponível.</translation> <translation id="5427571867875391349">Definir o Chromium como seu navegador padrão</translation> @@ -215,7 +216,6 @@ Se você decidir fazer login assim mesmo, as informações do Chromium, como favoritos, histórico e outras configurações serão mescladas com as informações de <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Adicionar ao Chromium</translation> -<translation id="9013262824292842194">O Chromium requer o Windows Vista ou Windows XP com SP2 ou superior.</translation> <translation id="9019929317751753759">Para tornar o Chromium mais seguro, desativamos a extensão a seguir, que não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e pode ter sido adicionada sem seu conhecimento.</translation> <translation id="9022552996538154597">Fazer login no Chromium</translation> <translation id="9036189287518468038">Iniciador de aplicativos do Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb index 546760e..363c3c2 100644 --- a/chrome/app/resources/chromium_strings_pt-PT.xtb +++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Os convidados podem utilizar o Chromium sem perder qualquer funcionalidade.</translation> <translation id="4994636714258228724">Adicionar-se ao Chromium</translation> <translation id="5032989939245619637">Guardar os detalhes no Chromium</translation> +<translation id="5116586539350239523">O Chromium armazena os seus detalhes pessoais em segurança para que não tenha de os introduzir novamente.</translation> <translation id="5358375970380395591">Está a iniciar sessão com uma conta gerida e a permitir que o administrador controle o seu perfil do Chromium. Os seus dados do Chromium, como aplicações, marcadores, histórico, palavras-passe e outras definições, ficarão associados definitivamente a <ph name="USER_NAME" />. Poderá eliminar estes dados através do Painel de Controlo das Contas Google, mas não poderá associá-los a outra conta. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Está disponível uma nova versão do Chromium.</translation> <translation id="5427571867875391349">Definir o Chromium como o seu navegador predefinido</translation> @@ -221,7 +222,6 @@ Se continuar com este início de sessão, as informações do Chromium, como marcadores, histórico e outras definições, fundir-se-ão com <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Adicionar ao Chromium</translation> -<translation id="9013262824292842194">O Chromium requer o Windows Vista ou Windows XP com SP2 ou superior.</translation> <translation id="9019929317751753759">Para tornar o Chromium mais seguro, desativámos a seguinte extensão, que não está listada na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, e é possível que tenha sido adicionada sem o seu conhecimento.</translation> <translation id="9022552996538154597">Iniciar sessão no Chromium</translation> <translation id="9036189287518468038">Iniciador de Aplicações do Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb index 749d9332..48a4cbb 100644 --- a/chrome/app/resources/chromium_strings_ro.xtb +++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Invitații pot folosi Chromium fără a lăsa nicio urmă.</translation> <translation id="4994636714258228724">Adăugați-vă la Chromium</translation> <translation id="5032989939245619637">Salvați detaliile în Chromium</translation> +<translation id="5116586539350239523">Chromium va stoca în siguranță detaliile personale, pentru a nu fi necesar să le introduci din nou.</translation> <translation id="5358375970380395591">Vă conectați cu un cont gestionat și îi permiteți administratorului acestuia controlul asupra profilului dvs. Chromium. Datele Chromium, cum ar fi aplicațiile, marcajele, istoricul, parolele și alte setări vor fi asociate definitiv cu <ph name="USER_NAME" />. Veți putea să ștergeți aceste date prin intermediul Tabloului de bord pentru Conturi Google, însă nu veți putea să asociați aceste date cu alt cont. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Este disponibilă o nouă versiune Chromium.</translation> <translation id="5427571867875391349">Setați Chromium ca browser prestabilit</translation> @@ -221,7 +222,6 @@ Dacă totuși vă conectați, informațiile Chromium cum ar fi marcajele, istoricul și alte setări vor fi îmbinate cu <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Adăugați la Chromium</translation> -<translation id="9013262824292842194">Chromium necesită Windows Vista sau Windows XP cu SP2 sau o versiune ulterioară.</translation> <translation id="9019929317751753759">Pentru mai multă siguranță în Chromium, am dezactivat următoarea extensie care nu este inclusă în <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> și care este posibil să fi fost adăugată fără știrea ta.</translation> <translation id="9022552996538154597">Conectați-vă la Chromium</translation> <translation id="9036189287518468038">Lansatorul de aplicații Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index 3457ffa..bcb34eb 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -218,7 +218,6 @@ Если войти в систему сейчас, закладки, история и прочие данные Chromium будут синхронизированы с новым аккаунтом: <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Добавить в Chromium</translation> -<translation id="9013262824292842194">Для установки Chromium требуется ОС Windows Vista или Windows XP SP2 или более поздней версии.</translation> <translation id="9019929317751753759">Чтобы обеспечить безопасность ваших данных, некоторые расширения были отключены, так как <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не содержит сведений о них (то есть они могли быть установлены без вашего ведома).</translation> <translation id="9022552996538154597">Войти в Chromium</translation> <translation id="9036189287518468038">Панель запуска Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb index 7751930..a486510 100644 --- a/chrome/app/resources/chromium_strings_sk.xtb +++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Hostia môžu používať prehliadač Chromium bez toho, aby po sebe zanechali akékoľvek informácie.</translation> <translation id="4994636714258228724">Pridajte si účet do prehliadača Chromium</translation> <translation id="5032989939245619637">Uložiť podrobnosti v prehliadači Chromium</translation> +<translation id="5116586539350239523">Chromium vaše osobné údaje bezpečne uloží, aby ste ich už nemuseli znova zadávať.</translation> <translation id="5358375970380395591">Prihlasujete sa pomocou spravovaného účtu a jeho správcovi dávate kontrolu nad vaším profilom Chromium. Vaše údaje prehliadača Chromium, ako sú aplikácie, záložky, história, heslá a iné nastavenia, sa natrvalo priradia k účtu <ph name="USER_NAME" />. Tieto údaje budete môcť odstrániť len pomocou panela Dashboard v Účtoch Google, ale nebudete ich môcť priradiť k inému účtu. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">K dispozícii je nová verzia prehliadača Chromium.</translation> <translation id="5427571867875391349">Nastaviť Chromium ako predvolený prehliadač</translation> @@ -223,7 +224,6 @@ Ak sa chcete aj napriek tomu prihlásiť, informácie prehliadača Chromium, ako sú záložky, história a iné nastavenia, sa priradia k účtu <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Pridať do prehliadača Chromium</translation> -<translation id="9013262824292842194">Prehliadač Chromium vyžaduje systém Windows Vista alebo Windows XP s balíkom SP2 alebo vyšším.</translation> <translation id="9019929317751753759">Z dôvodu zvýšenia bezpečnosti prehliadača Chromium sme zakázali nasledujúce rozšírenie, ktoré nie je uvedené v službe <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohlo byť pridané bez vášho vedomia.</translation> <translation id="9022552996538154597">Prihlásiť sa do prehliadača Chromium</translation> <translation id="9036189287518468038">Spúšťač aplikácií Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb index 56833ac..c5099ac1 100644 --- a/chrome/app/resources/chromium_strings_sl.xtb +++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Gostje lahko uporabljajo Chromium, ne da bi za seboj pustili kar koli.</translation> <translation id="4994636714258228724">Dodajte se v Chromium</translation> <translation id="5032989939245619637">Shrani podrobnosti v Chromium</translation> +<translation id="5116586539350239523">Chromium bo varno shranil vaše osebne podatke, tako da vam jih ne bo treba več vnesti.</translation> <translation id="5358375970380395591">Prijavljate se z upravljanim računom in s tem njegovemu skrbniku omogočate nadzor vašega profila v Chromiumu. Vaši podatki v Chromiumu, kot so aplikacije, zaznamki, zgodovina, gesla in druge nastavitve, bodo postali trajno povezani z uporabnikom <ph name="USER_NAME" />. Te podatke boste lahko izbrisali na nadzorni plošči za Google Račune, vendar jih ne boste mogli povezati z drugim računom. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Na voljo je nova različica Chromiuma.</translation> <translation id="5427571867875391349">Nastavitev Chromiuma za privzeti brskalnik</translation> @@ -223,7 +224,6 @@ Če se boste kljub temu prijavili, se bodo podatki iz Chromiuma, na primer zaznamki, zgodovina in druge nastavitve, združili v računu <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Dodaj v Chromium</translation> -<translation id="9013262824292842194">Za Chromium potrebujete operacijski sistem Windows Vista ali Windows XP s servisnim paketom SP2 ali novejšim.</translation> <translation id="9019929317751753759">Zaradi večje varnosti smo v Chromiumu onemogočili to razširitev, ki ni navedena tukaj in je bila morda dodana brez vaše vednosti: <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />.</translation> <translation id="9022552996538154597">Prijava v Chromium</translation> <translation id="9036189287518468038">Zaganjalnik aplikacij v Chromiumu</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb index b603618..2870bb8 100644 --- a/chrome/app/resources/chromium_strings_sr.xtb +++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Гости могу да користе Chromium а да не остављају никакве трагове.</translation> <translation id="4994636714258228724">Додајте себе у Chromium</translation> <translation id="5032989939245619637">Сачувај детаље у Chromium-у</translation> +<translation id="5116586539350239523">Chromium ће безбедно складиштити личне податке да не бисте морали да их поново уносите.</translation> <translation id="5358375970380395591">Пријављујете се помоћу налога којим се управља и дајете његовом администратору контролу над Chromium профилом. Chromium подаци, као што су апликације, обележивачи, историја, лозинке и друга подешавања, биће трајно повезани са налогом <ph name="USER_NAME" />. Моћи ћете да избришете те податке преко Контролне табле Google налога, али нећете моћи да их повежете са неким другим налогом. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Доступна је нова верзија Chromium-а.</translation> <translation id="5427571867875391349">Подеси Chromium као подразумевани прегледач</translation> @@ -223,7 +224,6 @@ Ако се ипак пријавите, Chromium информације као што су обележивачи, историја и друга подешавања ће бити обједињене на <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Додавање у Chromium</translation> -<translation id="9013262824292842194">За Chromium је неопходан Windows Vista или Windows XP са SP2 или новија верзија.</translation> <translation id="9019929317751753759">Да бисмо учинили Chromium безбеднијим, онемогућили смо следећи додатак који <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> не наводи и који је можда додат без вашег знања.</translation> <translation id="9022552996538154597">Пријављивање на Chromium</translation> <translation id="9036189287518468038">Покретач Chromium апликација</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb index 6e85cf1..be0d654 100644 --- a/chrome/app/resources/chromium_strings_sv.xtb +++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Gäster kan använda Chromium utan att lämna spår efter sig.</translation> <translation id="4994636714258228724">Lägg till dig själv i Chromium</translation> <translation id="5032989939245619637">Spara information i Chromium</translation> +<translation id="5116586539350239523">Chromium sparar dina personliga uppgifter på ett säkert sätt så att du inte behöver ange dem på nytt.</translation> <translation id="5358375970380395591">Du loggar in med ett hanterat konto och ger dess administratör kontroll över din Chromium-profil. Dina uppgifter i Chromium, t.ex. dina appar, bokmärken, din historik, ditt lösenord och andra inställningar, kopplas då permanent till <ph name="USER_NAME" />. Du kommer att kunna ta bort dessa uppgifter via instrumentpanelen i Google Konton, men du kommer inte att kunna koppla dem till något annat konto. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Det finns en ny version av Chromium.</translation> <translation id="5427571867875391349">Använd Chromium som standardwebbläsare</translation> @@ -223,7 +224,6 @@ Om du loggar in ändå kommer information som bokmärken, historik och andra inställningar i Chromium att synkroniseras med <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Lägg till i Chromium</translation> -<translation id="9013262824292842194">För Chromium krävs Windows Vista eller Windows XP med SP2 eller senare.</translation> <translation id="9019929317751753759">Vi har gjort Chromium säkrare genom att inaktivera följande tillägg som inte anges i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> och som kan ha lagts till utan att du vet om det.</translation> <translation id="9022552996538154597">Logga in i Chromium</translation> <translation id="9036189287518468038">Startprogrammet för appar i Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb index 8ee6edf..0d9bca4 100644 --- a/chrome/app/resources/chromium_strings_sw.xtb +++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -113,6 +113,7 @@ <translation id="4987820182225656817">Walioalikwa wanaweza kutumia Chromium bila kuacha kitu chochote nyuma.</translation> <translation id="4994636714258228724">Jiongeze kwenye Chrome</translation> <translation id="5032989939245619637">Hifadhi maelezo katika Chromium</translation> +<translation id="5116586539350239523">Chromium itahifadhi salama maelezo yako ya kibinafsi ili usihitaji kuyaandika tena.</translation> <translation id="5358375970380395591">Unaingia katika akaunti inayodhibitiwa na kumpa msimamizi wa akaunti hiyo udhibiti wa wasifu wako kwenye Chromium. Data yako ya Chromium, kama vile programu zako, alamisho, historia, manenosiri, na mipangilio miingine itahusishwa na <ph name="USER_NAME" /> kabisa. Utaweza kufuta data hii kupitia Dashibodi ya Akaunti za Google, lakini hutaweza kuunganisha data hii na akaunti nyingine. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Kuna toleo jipya la Chromium linalopatikana.</translation> <translation id="5427571867875391349">Weka Chromium kuwa kivinjari chako chaguo-msingi</translation> @@ -223,7 +224,6 @@ Kuingia bila kujali kutaunganisha maelezo ya Chromium kama vile alamisho, historia, na mipangilio mingine kwenye <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Ongeza kwenye Chromium</translation> -<translation id="9013262824292842194">Chromium inahitaji Windows Vista au Windows XP iliyo na SP2 au zaidi.</translation> <translation id="9019929317751753759">Ili kufanya Chromium salama zaidi, tumezima kiendelezi kinachofuata ambacho hakijaorodheshwa katika <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na huenda kimeongezwa bila ridhaa yako.</translation> <translation id="9022552996538154597">Ingia kwenye Chromium</translation> <translation id="9036189287518468038">Kizinduzi cha Programu ya Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb index d5201497..f2760df 100644 --- a/chrome/app/resources/chromium_strings_ta.xtb +++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">எதையும் விட்டுசெல்லாமல் விருந்தினர்கள் Chromium ஐப் பயன்படுத்தலாம்.</translation> <translation id="4994636714258228724">உங்களை Chromium இல் சேர்க்கவும்</translation> <translation id="5032989939245619637">விவரங்களை Chromium இல் சேமி</translation> +<translation id="5116586539350239523">Chromium உங்கள் தனிப்பட்ட விவரங்களைப் பாதுகாப்பாகச் சேமிக்கும் என்பதால் அவற்றை மீண்டும் உள்ளிட வேண்டியதில்லை.</translation> <translation id="5358375970380395591">நீங்கள் நிர்வகிக்கப்படும் கணக்கு மூலம் உள்நுழைகிறீர்கள், மேலும் அதன் நிர்வாகிக்கு உங்கள் Chromium சுயவிவரத்தின் கட்டுப்பாட்டை வழங்குகிறீர்கள். உங்கள் பயன்பாடுகள், புக்மார்க்குகள், வரலாறு, கடவுச்சொற்கள் போன்ற உங்கள் Chromium தரவு மற்றும் பிற அமைப்புகள் நிரந்தரமாக <ph name="USER_NAME" /> உடன் இணைக்கப்படும். இந்தத் தரவை Google கணக்குகளின் டாஷ்போர்டு வழியாக நீக்க முடியும், ஆனால் இந்தத் தரவை வேறொரு கணக்குடன் தொடர்புபடுத்த முடியாது. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium இன் புதிய பதிப்பு கிடைக்கிறது.</translation> <translation id="5427571867875391349">உங்கள் இயல்புநிலை உலாவியாக Chromium ஐ அமை</translation> @@ -221,7 +222,6 @@ எப்படியிருந்தாலும் உள்நுழைதல் <ph name="ACCOUNT_EMAIL_NEW" /> க்கான புக்மார்க்குகள், வரலாறு, மற்றும் பிற அமைப்புகள் போன்ற Chromium தகவலைப் பிணைக்கும்.</translation> <translation id="9013087743919948559">Chromium இல் சேர்</translation> -<translation id="9013262824292842194">Windows Vista அல்லது SP2 உடன் Windows XP அல்லது அதற்கு மேம்பட்டது Chromium க்குத் தேவை.</translation> <translation id="9019929317751753759">Chromiumஐப் பாதுகாப்பானதாக்க, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> இல் பட்டியலிடப்படாத பின்வரும் நீட்டிப்பை முடக்கியுள்ளோம், மேலும் அது உங்களுக்குத் தெரியாமல் சேர்க்கப்பட்டிருக்கலாம்.</translation> <translation id="9022552996538154597">Chromium இல் உள்நுழைக</translation> <translation id="9036189287518468038">Chromium பயன்பாட்டுத் துவக்கி</translation>
diff --git a/chrome/app/resources/chromium_strings_te.xtb b/chrome/app/resources/chromium_strings_te.xtb index 88c10c1..dc9dd89 100644 --- a/chrome/app/resources/chromium_strings_te.xtb +++ b/chrome/app/resources/chromium_strings_te.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">అతిథులు ఎటువంటి చరిత్రను వదలకుండానే Chromiumను ఉపయోగించవచ్చు.</translation> <translation id="4994636714258228724">Chromiumకు మిమ్మల్ని జోడించుకోండి</translation> <translation id="5032989939245619637">వివరాలను Chromiumలో సేవ్ చేయి</translation> +<translation id="5116586539350239523">Chromium మీ వ్యక్తిగత వివరాలను సురక్షితంగా నిల్వ చేస్తుంది కాబట్టి మీరు వాటిని మళ్లీ టైప్ చేయాల్సిన అవసరం లేదు.</translation> <translation id="5358375970380395591">మీరు నిర్వహించబడే ఖాతాతో సైన్ ఇన్ చేస్తున్నారు మరియు దీని నిర్వాహకునికి మీ Chromium ప్రొఫైల్పై నియంత్రణను అందిస్తున్నారు. మీ అనువర్తనాలు, బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు మరియు ఇతర సెట్టింగ్ల వంటి మీ Chromium డేటా శాశ్వతంగా <ph name="USER_NAME" />కు అనుబంధించబడుతుంది. మీరు Google ఖాతాల డాష్బోర్డ్ ద్వారా ఈ డేటాను తొలగించవచ్చు, కానీ ఈ డేటాను మరో ఖాతాతో అనుబంధించలేరు. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">క్రొత్త Chromium సంస్కరణ అందుబాటులో ఉంది.</translation> <translation id="5427571867875391349">Chromiumను మీ డిఫాల్ట్ బ్రౌజర్గా సెట్ చేయండి</translation> @@ -217,7 +218,6 @@ ఏదేమైనా సైన్ ఇన్ చేస్తే బుక్మార్క్లు, చరిత్ర మరియు ఇతర సెట్టింగ్ల వంటి Chromium సమాచారం <ph name="ACCOUNT_EMAIL_NEW" />కు విలీనం చేయబడుతుంది.</translation> <translation id="9013087743919948559">Chromiumకి జోడించండి</translation> -<translation id="9013262824292842194">Chromiumకి SP2 లేదా తదుపరి దానితో Windows Vista లేదా Windows XP అవసరం.</translation> <translation id="9019929317751753759">Chromiumని సురక్షితం చేయడానికి, మేము క్రింది పొడిగింపుని నిలిపివేసాము, ఇది <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />లో జాబితా చేయబడలేదు మరియు మీకు తెలియకుండా జోడించబడి ఉండవచ్చు.</translation> <translation id="9022552996538154597">Chromiumకి సైన్ ఇన్ చేయండి</translation> <translation id="9036189287518468038">Chromium అనువర్తన లాంచర్</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb index 092f3ba..1e2f2df 100644 --- a/chrome/app/resources/chromium_strings_th.xtb +++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">ผู้เยี่ยมชมสามารถใช้ Chromium โดยไม่ทิ้งร่องรอยไว้</translation> <translation id="4994636714258228724">เพิ่มตัวคุณเองใน Chromium</translation> <translation id="5032989939245619637">บันทึกรายละเอียดใน Chromium</translation> +<translation id="5116586539350239523">Chromium จะเก็บรายละเอียดส่วนตัวของคุณอย่างปลอดภัย คุณจึงไม่จำเป็นต้องพิมพ์รายละเอียดเหล่านั้นอีกครั้ง</translation> <translation id="5358375970380395591">คุณกำลังลงชื่อเข้าใช้ด้วยบัญชีที่จัดการ และให้การควบคุมระดับผู้ดูแลระบบของบัญชีดังกล่าวเหนือโปรไฟล์ Chromium ของคุณ ข้อมูล Chromium เช่น แอป บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะเชื่อมโยงอย่างถาวรกับ <ph name="USER_NAME" /> คุณจะสามารถลบข้อมูลนี้ผ่านทางแผงควบคุมบัญชี Google แต่คุณจะไม่สามารถเชื่อมโยงข้อมูลนี้กับบัญชีอื่น <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium รุ่นใหม่พร้อมให้ใช้งานแล้ว</translation> <translation id="5427571867875391349">ตั้ง Chromium เป็นเบราว์เซอร์เริ่มต้นของคุณ</translation> @@ -221,7 +222,6 @@ การลงชื่อเข้าใช้ต่อไปจะรวมข้อมูล Chromium เช่น บุ๊กมาร์ก ประวัติการเข้าชม และการตั้งค่าอื่นๆ เข้ากับ <ph name="ACCOUNT_EMAIL_NEW" /></translation> <translation id="9013087743919948559">เพิ่มลงใน Chromium</translation> -<translation id="9013262824292842194">Chromium ต้องใช้ Windows Vista หรือ Windows XP พร้อม SP2 หรือใหม่กว่า</translation> <translation id="9019929317751753759">เพื่อให้ Chromium ปลอดภัยขึ้น เราได้ปิดส่วนขยายต่อไปนี้ซึ่งไม่ได้แสดงอยู่ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจมีการเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation> <translation id="9022552996538154597">ลงชื่อเข้าใช้ Chromium</translation> <translation id="9036189287518468038">Chromium App Launcher</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb index ef4d08f..cc417bae 100644 --- a/chrome/app/resources/chromium_strings_tr.xtb +++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -109,6 +109,7 @@ <translation id="4987820182225656817">Misafirler Chromium'u geride hiçbir şey bırakmadan kullanabilir.</translation> <translation id="4994636714258228724">Kendinizi Chromium'a ekleyin</translation> <translation id="5032989939245619637">Ayrıntıları Chromium'a kaydet</translation> +<translation id="5116586539350239523">Chromium, kişisel bilgilerinizi güvenli şekilde depoladığından bu bilgileri tekrar yazmak zorunda kalmazsınız.</translation> <translation id="5358375970380395591">Yönetilen bir hesapla oturum açıyor ve hesabın yöneticisine Chromium profilinizi denetleme izni veriyorsunuz. Uygulamalarınız, yer işaretleriniz, geçmişiniz, şifreleriniz ve diğer ayarlarınız gibi Chromium verileriniz kalıcı olarak <ph name="USER_NAME" /> ile bağlantılandırılacaktır. Google Hesapları Hesap Özeti'ni kullanarak bu verileri silebilecek, ancak bu verileri başka bir hesapla ilişkilendiremeyeceksiniz. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium'un yeni bir sürümü çıktı.</translation> <translation id="5427571867875391349">Chromium'u varsayılan tarayıcım olarak ayarla</translation> @@ -219,7 +220,6 @@ Yine de oturum açarsanız, yer işaretleriniz, geçmişiniz ve diğer ayarlarınız gibi Chromium bilgileriniz <ph name="ACCOUNT_EMAIL_NEW" /> ile birleştirilecektir.</translation> <translation id="9013087743919948559">Chromium'a ekle</translation> -<translation id="9013262824292842194">Chromium; Windows Vista veya Windows XP SP2 ya da daha ileri bir sürümü gerektirir.</translation> <translation id="9019929317751753759">Chromium'u daha güvenli bir hale getirmek için <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> altında listelenmeyen ve bilginiz dışında eklenmiş olabilecek aşağıdaki uzantıyı devre dışı bıraktık.</translation> <translation id="9022552996538154597">Chromium'da oturum aç</translation> <translation id="9036189287518468038">Chromium Uygulama Başlatıcı</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb index 60252cd2..4813473 100644 --- a/chrome/app/resources/chromium_strings_uk.xtb +++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Гості можуть анонімно користуватися Chromium.</translation> <translation id="4994636714258228724">Додати себе в Chromium</translation> <translation id="5032989939245619637">Зберігати дані в Chromium</translation> +<translation id="5116586539350239523">Chromium надійно зберігатиме ваші особисті дані, тож вам не потрібно буде вводити їх знову.</translation> <translation id="5358375970380395591">Ви входите, використовуючи дані облікового запису, яким керує адміністратор. Адміністратор може контролювати ваш профіль Chromium. Ваші дані Chromium, як-от програми, закладки, історія, паролі й інші налаштування, буде назавжди пов’язано з обліковим записом <ph name="USER_NAME" />. Ці дані можна видалити на інформаційній панелі Облікових записів Google, але ви не зможете пов’язати їх з іншим обліковим записом. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Доступна нова версія Chromium.</translation> <translation id="5427571867875391349">Зробити Chromium веб-переглядачем за умовчанням</translation> @@ -221,7 +222,6 @@ Якщо ви все одно ввійдете, наявні дані Chromium, як-от закладки, історію й інші налаштування, буде об’єднано з обліковим записом <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Додати в Chromium</translation> -<translation id="9013262824292842194">Chromium потребує ОС Windows Vista чи Windows XP із SP2 або новішу версію.</translation> <translation id="9019929317751753759">Щоб зробити Chromium безпечнішим, ми вимкнули наведене нижче розширення, установлене не із сайту <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> і, можливо, додане без вашого відома.</translation> <translation id="9022552996538154597">Вхід у Chromium</translation> <translation id="9036189287518468038">Панель запуску програм Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb index 5af4b6f3..ac410d58 100644 --- a/chrome/app/resources/chromium_strings_vi.xtb +++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">Khách có thể sử dụng Chromium mà không phải thoát khỏi bất cứ nội dung nào.</translation> <translation id="4994636714258228724">Thêm chính bạn vào Chromium</translation> <translation id="5032989939245619637">Lưu chi tiết trong Chromium</translation> +<translation id="5116586539350239523">Chromium sẽ lưu trữ an toàn chi tiết cá nhân của bạn nên bạn không cần nhập lại thông tin này.</translation> <translation id="5358375970380395591">Bạn đang đăng nhập bằng tài khoản được quản lý và cấp cho quản trị viên của tài khoản quyền kiểm soát cấu hình Chromium của bạn. Dữ liệu Chromium của bạn, chẳng hạn như ứng dụng, dấu trang, lịch sử, mật khẩu và các cài đặt khác sẽ vĩnh viễn được liên kết với <ph name="USER_NAME" />. Bạn có thể xóa dữ liệu này thông qua Trang tổng quan của tài khoản Google nhưng không thể liên kết dữ liệu này với tài khoản khác. <ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Hiện đã có phiên bản Chromium mới.</translation> <translation id="5427571867875391349">Đặt Chromium là trình duyệt mặc định của bạn</translation> @@ -221,7 +222,6 @@ Đăng nhập bằng mọi cách sẽ kết hợp thông tin Chromium như dấu trang, lịch sử và các cài đặt khác vào <ph name="ACCOUNT_EMAIL_NEW" />.</translation> <translation id="9013087743919948559">Thêm vào Chromium</translation> -<translation id="9013262824292842194">Chromium yêu cầu Windows Vista hoặc Windows XP có SP2 trở lên.</translation> <translation id="9019929317751753759">Để làm cho Chromium an toàn hơn, chúng tôi đã vô hiệu hóa tiện ích không được liệt kê trong <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> và có thể đã được thêm mà bạn không biết.</translation> <translation id="9022552996538154597">Đăng nhập vào Chromium</translation> <translation id="9036189287518468038">Trình chạy ứng dụng Chromium</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb index 5e352c8..567ba36 100644 --- a/chrome/app/resources/chromium_strings_zh-CN.xtb +++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">访客使用Chromium不会留下任何痕迹。</translation> <translation id="4994636714258228724">将您自己添加到Chromium</translation> <translation id="5032989939245619637">在 Chromium 中保存详细信息</translation> +<translation id="5116586539350239523">Chromium 将妥善存储您的个人详细信息,这样您日后就不必重复输入了。</translation> <translation id="5358375970380395591">您目前登录的帐户是一个托管帐户,该帐户的管理员将能够控制您的 Chromium 个人资料。您的 Chromium 数据(例如您的应用、书签、历史记录、密码和其他设置)将永远与 <ph name="USER_NAME" /> 相关联。您可以通过 Google 帐户信息中心删除这些数据,但无法将这些数据与其他帐户相关联。<ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">Chromium 现已推出新版本。</translation> <translation id="5427571867875391349">将Chromium设为默认浏览器</translation> @@ -221,7 +222,6 @@ 如果您仍然登录,Chromium 信息(例如书签、历史记录和其他设置)将合并到 <ph name="ACCOUNT_EMAIL_NEW" />。</translation> <translation id="9013087743919948559">添加到 Chromium</translation> -<translation id="9013262824292842194">Chromium 要求操作系统为 Windows Vista,或者 Windows XP SP2 或更高版本。</translation> <translation id="9019929317751753759">为了提高 Chromium 的安全性,我们停用了以下扩展程序(该扩展程序未列在<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />中,并且可能是在您不知情的情况下添加的)。</translation> <translation id="9022552996538154597">登录 Chromium</translation> <translation id="9036189287518468038">Chromium 应用启动器</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb index 4e11cbad..464a250 100644 --- a/chrome/app/resources/chromium_strings_zh-TW.xtb +++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -111,6 +111,7 @@ <translation id="4987820182225656817">以訪客身分使用 Chromium 不會留下任何紀錄。</translation> <translation id="4994636714258228724">新增為 Chromium 使用者</translation> <translation id="5032989939245619637">在 Chromium 中儲存詳細資料</translation> +<translation id="5116586539350239523">Chromium 會妥善保存您的個人詳細資料,讓您不必重複輸入相同的資料。</translation> <translation id="5358375970380395591">您已登入管理化環境下的帳戶,並將管理控制權授予您的 Chromium 設定檔。您的 Chromium 資料 (例如應用程式、書籤、紀錄、密碼和其他設定) 均將永久與 <ph name="USER_NAME" /> 建立關聯。您可以透過 Google 帳戶資訊主頁刪除這些資料,但您無法將這些資料與其他帳戶建立關聯。<ph name="LEARN_MORE" /></translation> <translation id="5398878173008909840">新版 Chromium 現已推出。</translation> <translation id="5427571867875391349">將 Chromium 設為預設瀏覽器</translation> @@ -221,7 +222,6 @@ 如果您仍要繼續登入帳戶,各項 Chromium 資訊 (例如書籤、紀錄和其他設定) 則會合併至 <ph name="ACCOUNT_EMAIL_NEW" />。</translation> <translation id="9013087743919948559">新增至 Chromium</translation> -<translation id="9013262824292842194">Chromium 僅支援 Windows Vista 或 Windows XP SP2 以上版本。</translation> <translation id="9019929317751753759">為了讓 Chromium 的安全性更有保障,我們停用了以下這個未列在「<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />」中的擴充功能 (它可能是在您不知情的情況下加入瀏覽器)。</translation> <translation id="9022552996538154597">登入 Chromium</translation> <translation id="9036189287518468038">Chromium 應用程式啟動器</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 8e65b5f..cc6a069c 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -563,7 +563,6 @@ <translation id="1783075131180517613">እባክዎ የማመሳሰል ይለፍ ሐረግዎን ያዘምኑ።</translation> <translation id="1788636309517085411">ነባሪን ይጠቀሙ</translation> <translation id="1789575671122666129">ብቅ-ባዮች</translation> -<translation id="1790550373387225389">ወደ ማቅረቢያ ሁነታ ግባ</translation> <translation id="1792705092719258158">የተንጸባረቀ ማያ ገጽ ሁነታን አንቃ።</translation> <translation id="1793119619663054394">እርግጠኛ ነዎት «<ph name="PROFILE_NAME" />» እና ሁሉም ተዛማጅ የChrome ውሂብ ከዚህ ኮምፒውተር መሰረዝ ይፈልጋሉ? ይሄ ሊቀለበስ አይችልም።</translation> <translation id="179767530217573436">ያለፉት 4 ሳምንታት</translation> @@ -1663,7 +1662,6 @@ <translation id="3324301154597925148">የጠበቁት የፍለጋ ገጽ ይሄ ነው?</translation> <translation id="3324684065575061611">(በድርጅት መመሪያ የተሰናከለ)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" />ን በማጨቅ ላይ...</translation> -<translation id="3330206034087160972">ከማቅረቢያ ሁነታ ውጣ</translation> <translation id="3330686263988132416">ለWebRTC Stun ምንጭ ርዕስ</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">የተንጸባረቀ ማያ ገጽ ሁነታን አንቃ። ይህ ሁነታ የማያ ገጽ ምስሉን በጎን ይገለብጠዋል።</translation> @@ -1919,7 +1917,6 @@ <translation id="367645871420407123">የስር ይለፍ ቃሉ ወደ ነባሪው የሙከራ ምስል እሴት ለማዘጋጀት ከፈለጉ ባዶ እንደሆነ ይተዉት</translation> <translation id="3678156199662914018">ቅጥያ፦ <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltese የቁልፍ ሰሌዳ</translation> -<translation id="3680173818488851340">ዝቅተኛ ቅድሚያ የሚሰጣቸው iframes።</translation> <translation id="3683524264665795342">የ<ph name="APP_NAME" /> ማያ ገጽ ማጋራት ጥያቄ</translation> <translation id="3685122418104378273">የሞባይል ውሂብ ጥቅም ላይ በሚውልበት ጊዜ Google Drive ማመሳሰል በነባሪ ይሰናከላል።</translation> <translation id="3685387984467886507">ለተወሰነ ጊዜ በኤስኤስኤል ስህተቶች በኩል ለመቀጠል የተወሰዱ ውሳኔዎችን አስታውስ።</translation> @@ -3870,7 +3867,6 @@ <translation id="6662016084451426657">የማመሳሰል ስህተት፦ ማመሳሰልን ለማንቃት እባክዎ አስተዳዳሪውን ያግኙ።</translation> <translation id="6663792236418322902">የመረጡት የይለፍ ቃል ይህን ፋይል በኋላ ላይ ለማስመለስ ያስፈልጋል። እባክዎ ደህንነቱ በተጠበቀ ቦታ ላይ ይመዝግቡት።</translation> <translation id="6664237456442406323">የአጋጣሚ ነገር ሆኖ ኮምፒውተርዎ በተበላሸ የሃርድዌር መታወቂያ ነው የተዋቀረው። ይሄ Chrome ስርዓተ ክወና በቅርብ ጊዜዎቹ የደህንነት ጥገናዎች እንዳይዘመን ያግደዋል፣ እና የእርስዎ ኮምፒውተር <ph name="BEGIN_BOLD" />ለተንኮል-አዘል ጥቃቶች የተጋለጠ ሊሆን ይችላል<ph name="END_BOLD" />።</translation> -<translation id="666541661050183336">የIframe መረጃዎችን በቅድሚያ መጫን ይቀንሳል።</translation> <translation id="6666647326143344290">በGoogle መለያዎ</translation> <translation id="6675665718701918026">መጠቆሚያ መሣሪያ ተገናኝቷል</translation> <translation id="6677037229676347494">የተጠበቀው መታወቂያ «<ph name="EXPECTED_ID" />» ግን መታወቂያዎ «<ph name="NEW_ID" />» ነበር።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 6af531e1..284abca4 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -564,7 +564,6 @@ <translation id="1783075131180517613">الرجاء تحديث عبارة مرور المزامنة.</translation> <translation id="1788636309517085411">استخدام الموقع الافتراضي</translation> <translation id="1789575671122666129">النوافذ المنبثقة</translation> -<translation id="1790550373387225389">الدخول إلى وضع العرض</translation> <translation id="1792705092719258158">تمكين وضع الشاشة المنعكس.</translation> <translation id="1793119619663054394">هل تريد بالتأكيد إزالة "<ph name="PROFILE_NAME" />" وكل البيانات المرتبطة بمتصفح Chrome من جهاز الكمبيوتر هذا؟ لا يمكن التراجع عن هذا الإجراء.</translation> <translation id="179767530217573436">آخر 4 أسابيع</translation> @@ -1659,7 +1658,6 @@ <translation id="3324301154597925148">هل هذه هي صفحة البحث التي كنت تتوقع ظهورها؟</translation> <translation id="3324684065575061611">(تم التعطيل بموجب سياسة المؤسسة)</translation> <translation id="3326821416087822643">جارٍ ضغط <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">الخروج من وضع العرض</translation> <translation id="3330686263988132416">عنوان الأصل WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">تمكين وضع الشاشة المعكوس. هذا الوضع يعكس الصورة المعروضة على الشاشة أفقيًا.</translation> @@ -1915,7 +1913,6 @@ <translation id="367645871420407123">اتركه فارغًا إذا كنت ترغب في تعيين كلمة مرور الجذر إلى قيمة صورة الاختبار الافتراضية</translation> <translation id="3678156199662914018">الإضافة: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">لوحة المفاتيح المالطية</translation> -<translation id="3680173818488851340">الأطر المدمجة ذات الأولوية المنخفضة.</translation> <translation id="3683524264665795342">يطلب <ph name="APP_NAME" /> مشاركة الشاشة</translation> <translation id="3685122418104378273">يتم تعطيل مزامنة Google Drive افتراضيًا، عند استخدام بيانات الجوّال.</translation> <translation id="3685387984467886507">تذكر القرارات للمتابعة خلال أخطاء SSL لمدة محددة من الوقت.</translation> @@ -3863,7 +3860,6 @@ <translation id="6662016084451426657">خطأ في المزامنة: الرجاء الاتصال بالمشرف لتمكين المزامنة.</translation> <translation id="6663792236418322902">ستكون كلمة المرور التي تختارها مطلوبة لاستعادة هذا الملف لاحقًا. الرجاء تسجيلها في مكان آمن.</translation> <translation id="6664237456442406323">للأسف، تمت تهيئة جهاز الكمبيوتر باستخدام معرف جهاز غير صحيح. وهذا يمنع تحديث نظام التشغيل Chrome بأحدث إصلاحات الأمان، وقد يكون جهاز الكمبيوتر <ph name="BEGIN_BOLD" />عرضة للهجمات الضارة<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">يقلل من أولوية تحميل موارد الأطر المدمجة.</translation> <translation id="6666647326143344290">باستخدام حساب Google</translation> <translation id="6675665718701918026">الإشارة إلى الأجهزة المتصلة</translation> <translation id="6677037229676347494">المعرف المتوقع "<ph name="EXPECTED_ID" />"، ولكن المعرف كان "<ph name="NEW_ID" />".</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 2331c0ab..bcd7ea08 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Изберете квадратна област от изображението.</translation> <translation id="1697532407822776718">Готово!</translation> +<translation id="1697988819212986149">Показва икона на Google до елементите в контекстното меню, предоставени от услугите ни.</translation> <translation id="1699274548822076330">Тази настройка трябва да се използва заедно с флага trace-upload-url. ПРЕДУПРЕЖДЕНИЕ: Когато настройката е активирана, Chrome ще записва данните за ефективността за всяко действие при сърфиране и ще ги качва на URL адреса, посочен чрез trace-upload-url. Проследяването може да включва подлежаща на идентифициране лична информация (PII), например заглавията и URL адресите на посещаваните от вас уебсайтове.</translation> <translation id="1699395855685456105">Версия на хардуера:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">Моля, актуализирайте пропуска си за синхронизиране.</translation> <translation id="1788636309517085411">Използване на стандартното</translation> <translation id="1789575671122666129">Изскачащи прозорци</translation> -<translation id="1790550373387225389">Вход в режима за презентации</translation> <translation id="1792705092719258158">Активиране на режим на огледален екран.</translation> <translation id="1793119619663054394">Наистина ли искате да премахнете <ph name="PROFILE_NAME" /> и всички свързани данни в Chrome от този компютър? Действието не може да бъде отменено.</translation> <translation id="179767530217573436">последните 4 седмици</translation> @@ -1151,6 +1151,7 @@ <translation id="267285457822962309">Промяна на настройките, конкретни за вашето и за периферните устройства.</translation> <translation id="2673135533890720193">Да чете историята на сърфирането ви</translation> <translation id="2673589024369449924">Създаване на пряк път на работния плот за този потребител</translation> +<translation id="2675358154061544447">Силно експериментална поддръжка за изобразяване на вложените рамки от различни сайтове чрез отделни процеси. В този режим за документите ще се използва един и същ процес на програмата за визуализация само ако са от един и същ уебсайт.</translation> <translation id="2676946222714718093">Възпроизвежда се на</translation> <translation id="2678063897982469759">Повторно активиране</translation> <translation id="2678246812096664977">Всички приставки</translation> @@ -1377,6 +1378,7 @@ <translation id="2960393411257968125">Как диспечерът на паролите използва автоматичното попълване за идентификационните данни за синхронизиране.</translation> <translation id="29611076221683977">Понастоящем извършители на атака срещу <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> може да опитат да инсталират опасни програми на компютъра ви под Mac, които крадат или изтриват информацията ви (например снимки, пароли, съобщения и номера на кредитни карти).</translation> <translation id="2961695502793809356">Кликнете, за да преминете напред. Задръжте, за да видите историята.</translation> +<translation id="296216853343927883">Показване на икона на Google в контекстното меню</translation> <translation id="2963151496262057773">Следната приставка е блокирала: <ph name="PLUGIN_NAME" />. Искате ли да я спрете?</translation> <translation id="2963783323012015985">Турска клавиатура</translation> <translation id="2964193600955408481">Деактивиране на Wi-Fi</translation> @@ -1426,6 +1428,16 @@ <translation id="3025729795978504041">Извършете дясно кликване върху бутона по-горе, за да видите другите хора.</translation> <translation id="3026050830483105579">Всичко е тук.</translation> <translation id="302620147503052030">Показване на бутона</translation> +<translation id="302781076327338683">Презареждане със заобикаляне на кеша</translation> +<translation id="3030243755303701754">Контролираният потребител може да изследва мрежата с ваше напътствие. Като негов мениджър в Chrome сте в състояние: + + • да разрешавате или забранявате определени уебсайтове; + • да преглеждате посетените от контролирания потребител уебсайтове; + • да управлявате други настройки. + +Създаването на контролиран потребител не създава профил в Google. Отметките, историята на сърфиране и останалите предпочитания на съответния човек няма да бъдат налични за него на други устройства чрез синхронизирането в Chrome. След като създадете нов контролиран потребител, можете по всяко време и от всяко устройство да управлявате настройките му на адрес <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +За повече информация посетете <ph name="BEGIN_LINK" />Помощния ни център<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Агент „X“</translation> <translation id="3031557471081358569">Изберете елементи за импортиране:</translation> <translation id="3033332627063280038">Активирайте експерименталното внедряване на директивата за контрол на кеша, която изпраща остарелите отговори по време на повторно потвърждаване. Това разрешава на сървърите да указват, че някои ресурси може да се опресняват на заден план, за да се намали забавянето.</translation> @@ -1645,7 +1657,6 @@ <translation id="3324301154597925148">Това ли е очакваната от вас страница за търсене?</translation> <translation id="3324684065575061611">(Деактивирано съгласно корпоративно правило)</translation> <translation id="3326821416087822643">„<ph name="FILE_NAME" />“ се компресира...</translation> -<translation id="3330206034087160972">Изход от режима за презентации</translation> <translation id="3330686263988132416">Заглавка за произхода на WebRTC съобщенията през STUN</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Активиране на режим на огледален екран. При него изображението на екрана се обръща хоризонтално.</translation> @@ -1690,6 +1701,7 @@ <translation id="3392020134425442298">Възстановяване на злонамерения файл</translation> <translation id="3394150261239285340"><ph name="HOST" /> иска да използва камерата и микрофона ви.</translation> <translation id="3394279550557729862">Активирайте поддръжката за директно изпълнение на изскачащите известия и на центъра за известия в платформи, където тези функции са налице.</translation> +<translation id="3394862755749546286">Деактивира обединения (за Android и работния плот) канал за мултимедия под Android.</translation> <translation id="3396331542604645348">Избраният принтер не е налице или не е инсталиран правилно. Проверете принтера си или опитайте да изберете друг.</translation> <translation id="3399597614303179694">Македонска клавиатура</translation> <translation id="3401130144947259741">Ако настройката е активирана, проследяванията ще се експортират към функцията за проследяване на събития за Windows (ETW), след което ще могат да се записват чрез инструменти като UIForETW или Xperf.</translation> @@ -1900,7 +1912,6 @@ <translation id="367645871420407123">не попълвайте, ако искате паролата на root да е стандартната от тестовия образ</translation> <translation id="3678156199662914018">Разширение: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Малтийска клавиатура</translation> -<translation id="3680173818488851340">Вложени рамки с нисък приоритет.</translation> <translation id="3683524264665795342">Заявка за споделяне на екрана от <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Синхронизирането на Google Диск е деактивирано по подразбиране, когато се използват мобилни данни.</translation> <translation id="3685387984467886507">Запомняне за определено време на решенията за продължаване при грешки в SSL.</translation> @@ -1949,6 +1960,7 @@ <translation id="3741158646617793859">„<ph name="DEVICE_NAME" />“ вече ще се показва в Admin console</translation> <translation id="3741243925913727067">Създавайте в Google Диск резервни копия на снимките и видеоклиповете от мултимедийното си устройство.</translation> <translation id="3743492083222969745">Активирайте/деактивирайте на страницата с настройки опцията за въвеждане чрез жест за виртуалната клавиатура.</translation> +<translation id="3744111561329211289">Синхронизиране на заден план</translation> <translation id="3749289110408117711">Име на файла</translation> <translation id="3751427701788899101">Връзката бе прекъсната</translation> <translation id="3751522270321808809">Този сайт може да опита да ви подведе, за да открадне информацията ви (например пароли, съобщения или номера на кредитни карти).</translation> @@ -2266,6 +2278,7 @@ <translation id="4218259925454408822">Вход в друг профил</translation> <translation id="4219614746733932747">Ако настройката е активирана, механизмът на Blink за мащабиране ще се използва като мащабен коефициент на устройството при промяна на мащаба на съдържанието.</translation> <translation id="4220865787605972627">Разрешаване на калибрирането на цветовете на дисплея, ако той поддържа тази функцията.</translation> +<translation id="4232692576734035989">Силно експериментален режим за ефективност, при който вложените рамки от различни сайтове и основният документ се обработват чрез отделни процеси. В този режим е разрешено да се използва един и същ процес за вложените рамки от други сайтове на трети страни.</translation> <translation id="4235200303672858594">Цял екран</translation> <translation id="4235813040357936597">Добавяне на профил за <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> не може да се покаже на този език</translation> @@ -2431,6 +2444,7 @@ <translation id="4509017836361568632">Отхвърляне на снимката</translation> <translation id="4509345063551561634">Местоположение:</translation> <translation id="4514542542275172126">Настройване на нов контролиран потребител</translation> +<translation id="4514914692061505365">Принудително използване на бързия преобразувател Subzero на PNaCl за всички преносими изпълними файлове.</translation> <translation id="4518677423782794009">Възникват ли сривове в Chrome, показват ли се необичайни страници при стартиране или ленти с инструменти, виждате ли неочаквани реклами, които не можете да премахнете, или друга промяна в практическата си работа при сърфиране? Възможно е да решите проблема, като стартирате инструмента за почистване на Chrome.</translation> <translation id="452039078290142656">неизвестни устройства от <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Подробности</translation> @@ -2479,6 +2493,7 @@ <translation id="4595560905247879544">Само мениджърът (<ph name="CUSTODIAN_NAME" />) може да променя приложенията и разширенията.</translation> <translation id="4601242977939794209">Преобразуване в EMF</translation> <translation id="4602466770786743961">Достъпът на <ph name="HOST" /> до камерата и микрофона ви да е разрешен винаги</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Няма връзка с интернет</translation> <translation id="4608500690299898628">&Търсене...</translation> <translation id="4610637590575890427">Може би искахте да отворите <ph name="SITE" />?</translation> @@ -2782,6 +2797,7 @@ <translation id="5062930723426326933">Влизането не бе успешно. Моля, свържете се с интернет и опитайте отново.</translation> <translation id="5063180925553000800">Нов ПИН:</translation> <translation id="5067867186035333991">Да се получава запитване, ако <ph name="HOST" /> иска достъп до микрофона ви</translation> +<translation id="5068918910148307423">Забраняване на наскоро затворените сайтове да завършват изпращането и получаването на данни</translation> <translation id="507075806566596212">На път сте да запишете това устройство <ph name="DEVICE_TYPE" /> в Google и да активирате възможността за отдалеченото му откриване и заключване и изтриване на данните от него. За целта ще е необходимо рестартиране. Искате ли да продължите?</translation> <translation id="5072836811783999860">Показване на управляваните отметки</translation> <translation id="5074318175948309511">Може да се наложи тази страница да бъде презаредена, преди да влязат в сила новите настройки.</translation> @@ -2891,6 +2907,7 @@ <translation id="5227808808023563348">Търсене на предишния текст</translation> <translation id="5228076606934445476">Нещо не е наред с устройството. За възстановяване от тази грешка ще трябва да рестартирате устройството и да опитате отново.</translation> <translation id="5228962187251412618">Само онлайн проверка</translation> +<translation id="5229622432348746578">Деактивиране на споделянето на звука за работния плот</translation> <translation id="5230516054153933099">Прозорец</translation> <translation id="5232178406098309195">Когато използвате команди за аудиоактивиране, като например „Ok Google“, или докоснете иконата на микрофон, частната ви функция за гласова и аудиоактивност съхранява гласови данни и друг звук в профила ви. Ще бъде съхранен запис на следващите говор и звук, както и на тези от няколко секунди преди това.</translation> <translation id="523299859570409035">Изключения за известия</translation> @@ -3145,6 +3162,7 @@ <translation id="5557991081552967863">Поддържане на включена Wi-Fi в спящ режим</translation> <translation id="5558129378926964177">&Увеличаване</translation> <translation id="556042886152191864">Бутон</translation> +<translation id="5562781907504170924">Този раздел е свързан с устройство с Bluetooth.</translation> <translation id="5565871407246142825">Кредитни карти</translation> <translation id="5567989639534621706">Кешове на приложения</translation> <translation id="5568069709869097550">Не може да се влезе</translation> @@ -3305,6 +3323,7 @@ <translation id="5803531701633845775">Да се избират фрази от обратната страна без преместване на курсора</translation> <translation id="5804241973901381774">Разрешения</translation> <translation id="580571955903695899">Преподреждане по азбучен ред</translation> +<translation id="5808982448801399019">Упълномощаването не бе успешно</translation> <translation id="580961539202306967">Извеждане на запитване, когато сайт иска да ми изпраща насочени съобщения (препоръчително)</translation> <translation id="5815645614496570556">Адрес на X.400</translation> <translation id="5817397429773072584">китайски (традиционен)</translation> @@ -3574,6 +3593,7 @@ <translation id="6243774244933267674">Няма достъп до сървъра</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Актуализацията е готова</translation> +<translation id="6248400709929739064">Активиране на субтитрите</translation> <translation id="6248988683584659830">Търсене в Настройки</translation> <translation id="6251870443722440887">Манипулатори за GDI обекти</translation> <translation id="6251889282623539337">Общи условия на <ph name="DOMAIN" /></translation> @@ -3598,6 +3618,7 @@ <translation id="6277105963844135994">Времето за изчакване на мрежата изтече</translation> <translation id="6277518330158259200">Създаване на &екранна снимка</translation> <translation id="6279183038361895380">Натиснете |<ph name="ACCELERATOR" />|, за да се покаже курсорът</translation> +<translation id="6280215091796946657">Влизане с друг профил</translation> <translation id="6281743458679673853">Експеримент, чрез който всички приложни програмни интерфейси (API) отразяват външната част на прозоречния изглед. Така свойствата window.scroll ще се прилагат спрямо нея.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Нов принтер в мрежата ви}other{Нови принтери в мрежата ви}}</translation> <translation id="6285395082104474418">В тази лента се показва текущото състояние на мрежата, батерията и др.</translation> @@ -3679,6 +3700,9 @@ <translation id="6418160186546245112">Предишната инсталирана версия на <ph name="IDS_SHORT_PRODUCT_NAME" /> се възстановява</translation> <translation id="6418481728190846787">Премахване за постоянно на достъпа за всички приложения</translation> <translation id="6418505248408153264">Активиране на историята, основана на material design</translation> +<translation id="6419288379019356534">Това устройство се управлява от <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. +<ph name="LINE_BREAK" /> +Моля, кликнете върху „Напред“, за да продължите с влизането в профила си в/ъв <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Централна Европа</translation> <translation id="6420676428473580225">Добавяне към работния плот</translation> <translation id="6422329785618833949">Снимката бе обърната</translation> @@ -3839,7 +3863,6 @@ <translation id="6662016084451426657">Грешка при синхронизирането: Моля, свържете се с администратора, за да го активира.</translation> <translation id="6663792236418322902">Паролата, която изберете, ще се изисква за възстановяване на файла по-късно. Моля, запишете я на сигурно място.</translation> <translation id="6664237456442406323">За съжаление компютърът ви е конфигуриран с неправилно образуван идентификационен номер на хардуера. Това не позволява на Chrome OS да се актуализира с най-новите корекции за сигурност и машината ви <ph name="BEGIN_BOLD" />може да е уязвима към злонамерени атаки<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Намалява приоритета на зареждане на ресурсите на вложените рамки.</translation> <translation id="6666647326143344290">с профила си в Google</translation> <translation id="6675665718701918026">Свързано е посочващо устройство</translation> <translation id="6677037229676347494">Очакваният идентификационен номер е „<ph name="EXPECTED_ID" />“, но той бе „<ph name="NEW_ID" />“.</translation> @@ -3932,6 +3955,7 @@ <translation id="6825883775269213504">руски</translation> <translation id="6827236167376090743">Видеоклипът ще продължи да се възпроизвежда до края на света.</translation> <translation id="6828153365543658583">Влизането да се ограничи до следните потребители:</translation> +<translation id="6828434191343384461">Избраните данни са премахнати от Chrome и синхронизираните устройства. Възможно е в профила ви в Google да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> – например търсения и активност от други наши услуги.</translation> <translation id="6828860976882136098">Настройването на автоматични актуализации за всички потребители не бе успешно (грешка при изпълнението на предстартовия процес: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Получете помощ за устройството си <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Записване в организацията ви</translation> @@ -4012,6 +4036,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Порт</translation> <translation id="6965978654500191972">Устройство</translation> +<translation id="6969104364835835175">Принудително използване на Subzero на PNaCl</translation> <translation id="6970230597523682626">български</translation> <translation id="6970480684834282392">Тип стартиране</translation> <translation id="6970856801391541997">Отпечатване на конкретни страници</translation> @@ -4094,10 +4119,12 @@ <translation id="7057058088140140610">Кредитни карти и адреси посредством Google Payments</translation> <translation id="7059858479264779982">Задаване на автоматично стартиране</translation> <translation id="7061692898138851896">Автоматично запазване на паролите</translation> +<translation id="7062222374113411376">Разрешаване на наскоро затворените сайтове да завършват изпращането и получаването на данни (препоръчително)</translation> <translation id="7063129466199351735">Преките пътища се обработват...</translation> <translation id="7065223852455347715">Това устройство е заключено в режим, който не позволява корпоративно записване. Ако искате да го запишете, трябва първо да преминете през процеса на възстановяване.</translation> <translation id="7065534935986314333">Всичко за системата</translation> <translation id="7066944511817949584">Свързването с „<ph name="DEVICE_NAME" />“ не бе успешно.</translation> +<translation id="7067725467529581407">Без повторно показване.</translation> <translation id="7070804685954057874">Директно въвеждане</translation> <translation id="7072010813301522126">Име на прекия път</translation> <translation id="7072025625456903686">Разрешаване на всички или персонализиране</translation> @@ -4370,6 +4397,7 @@ <translation id="7489605380874780575">Проверка дали отговаряте на условията</translation> <translation id="749028671485790643">Човек <ph name="VALUE" /></translation> <translation id="7491962110804786152">раздел</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> може да събира целия въведен от вас текст, включително лични данни, като пароли и номера на кредитни карти. Искате ли да използвате това разширение?</translation> <translation id="7495778526395737099">Забравили сте старата си парола?</translation> <translation id="7503191893372251637">Тип на сертификата на Netscape</translation> <translation id="7503821294401948377">Не можа да се зареди иконата „<ph name="ICON" />“ за действието на браузъра.</translation> @@ -4421,6 +4449,7 @@ <translation id="756445078718366910">Отваряне на прозореца на браузъра</translation> <translation id="7564847347806291057">Прекратяване на процеса</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Данните в Chrome са изчистени</translation> <translation id="7568790562536448087">Актуализира се</translation> <translation id="7573172247376861652">Заряд на батерията</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4550,6 +4579,7 @@ <translation id="7786207843293321886">Изход от сесията като гост</translation> <translation id="7786889348652477777">&Презареждане на приложението</translation> <translation id="7787129790495067395">Понастоящем използвате пропуск. Ако сте го забравили, можете да нулирате синхронизирането, за да изчистите данните си от нашите сървъри чрез Google Табло за управление.</translation> +<translation id="7787308148023287649">Показване на друг екран</translation> <translation id="7788080748068240085">За да запазите „<ph name="FILE_NAME" />“ офлайн, трябва да освободите допълнително място в размер на <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />освободете файлове, до които вече не ви е нужен достъп офлайн;<ph name="MARKUP_3" /> <ph name="MARKUP_4" />изтрийте файлове от папката си за изтегляния.<ph name="MARKUP_5" /></translation> @@ -4618,6 +4648,7 @@ <translation id="7878999881405658917">Google изпрати известие до този телефон. Обърнете внимание, че при работа с Bluetooth е възможно телефонът ви да предотвратява заключването на вашия <ph name="DEVICE_TYPE" /> от над 10 метра. В случаите, когато това е проблем, можете <a>временно да деактивирате функцията</a>.</translation> <translation id="7879478708475862060">Следване на режима за въвеждане</translation> <translation id="7880836220014399562">„<ph name="BUNDLE_NAME" />“ ще добави следните приложения и разширения:</translation> +<translation id="7881969471599061635">Деактивиране на субтитрите</translation> <translation id="7884988936047469945">Експериментални функции за достъпност</translation> <translation id="7885253890047913815">Скорошни местоназначения</translation> <translation id="7885283703487484916">много кратко</translation> @@ -4982,6 +5013,7 @@ <translation id="839736845446313156">Регистриране</translation> <translation id="8398790343843005537">Намиране на телефона ви</translation> <translation id="8398877366907290961">Продължаване напред въпреки това</translation> +<translation id="8399276228600040370">Влизане с профила ви, запазен чрез <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Празно квадратче за отметка</translation> <translation id="8408402540408758445">Предварително зареждане на резултатите от търсенето</translation> <translation id="8410073653152358832">Използване на този телефон</translation> @@ -5068,6 +5100,7 @@ <translation id="8545211332741562162">Активирайте използването от уеб страниците на експерименталните функции на JavaScript.</translation> <translation id="8545575359873600875">За съжаление паролата ви не можа да бъде потвърдена. Възможно е мениджърът на този контролиран потребител да я е променил наскоро. В такъв случай новата парола ще е в сила при следващото ви влизане в профила. Опитайте да използвате старaта.</translation> <translation id="8546306075665861288">Кеш за изображения</translation> +<translation id="854653344619327455">Когато този флаг е включен, потребителите няма да могат да избират дали да споделят звука от прозореца на инструмента за споделяне на работния плот.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Символ</translation> <translation id="855081842937141170">Фиксиране на раздела</translation> @@ -5098,6 +5131,7 @@ <translation id="8589311641140863898">Експериментални приложни програмни интерфейси (API) за разширения</translation> <translation id="8590375307970699841">Настройка за автоматични актуализации</translation> <translation id="8592071947729879125">Ограничаване на разрешенията за вложени рамки.</translation> +<translation id="8592125506633137593">Изолиране на основния документ</translation> <translation id="8594787581355215556">Влезли сте като <ph name="USER_EMAIL_ADDRESS" />. Управлявайте синхронизираните си данни от <ph name="BEGIN_LINK" />Google Табло за управление<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Персонализирани файлове</translation> <translation id="8596785155158796745">Понастоящем няма достъп до микрофона. <ph name="BEGIN_LINK" />Управление на микрофона<ph name="END_LINK" /></translation> @@ -5170,6 +5204,7 @@ <translation id="8688579245973331962">Не виждате името си?</translation> <translation id="8688644143607459122">С кликването си върху „Напред“ приемате да използвате Google Payments. За да ви предпазим от измами, информация за компютъра ви (включително местоположението му) ще бъде споделена с услугата.</translation> <translation id="8689102680909215706">Разширението <ph name="EXTENSION_NAME" /> бе инсталирано отдалечено.</translation> +<translation id="868926756781121513">Споделяне на работния плот чрез раздел</translation> <translation id="8689341121182997459">Валидност до:</translation> <translation id="8690754533598178758">Изключенията за микрофона за Adobe Flash Player са различни.</translation> <translation id="8691686986795184760">(Активирано съгласно корпоративно правило)</translation> @@ -5213,6 +5248,7 @@ <translation id="8737685506611670901">Да отваря връзки от типа „<ph name="PROTOCOL" />“ вместо <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Прецизиране на позицията на жестовете с докосване, за да се компенсира лошата разделителна способност на докосванията в сравнение с мишката.</translation> +<translation id="8741995161408053644">Възможно е в профила ви в Google да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">В лавицата да се показва разгънато меню с опции за въвеждане.</translation> <translation id="874420130893181774">Метод на въвеждане за традиционен пинин</translation> <translation id="8744525654891896746">Изберете аватар за този контролиран потребител</translation> @@ -5226,6 +5262,7 @@ <translation id="8757640015637159332">Вход в обществена сесия</translation> <translation id="8757742102600829832">Изберете Chromebox, с който да се извърши свързването</translation> <translation id="8757803915342932642">Устройство в Google Cloud Devices</translation> +<translation id="8758895886513993540">Този флаг контролира дали потребителите да могат да избират раздел за споделяне на работния плот.</translation> <translation id="8759408218731716181">Централизираният вход не може да се настрои</translation> <translation id="8759753423332885148">Научете повече.</translation> <translation id="8761567432415473239">Google Безопасно сърфиране наскоро <ph name="BEGIN_LINK" />откри опасни програми<ph name="END_LINK" /> на <ph name="SITE" />.</translation> @@ -5436,6 +5473,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Мишката с USB е свързана</translation> <translation id="9076523132036239772">За съжаление имейлът или паролата ви не можаха да бъдат потвърдени. Опитайте първо да се свържете с мрежа.</translation> +<translation id="9077132661879924646">Деактивиране на обединения канал за мултимедия под Android.</translation> <translation id="907841381057066561">Създаването на временен компресиран файл при пакетирането не бе успешно.</translation> <translation id="9083147368019416919">Отписването не бе успешно</translation> <translation id="9084064520949870008">Отваряне като прозорец</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index ebef0037..95c2cd4 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">চিত্রটির একটি বর্গাকার অঞ্চল নির্বাচন করুন৷</translation> <translation id="1697532407822776718">আপনার সমস্ত সেট আছে!</translation> +<translation id="1697988819212986149">Google পরিষেবা দ্বারা চালিত প্রসঙ্গ মেনু আইটেমগুলির ঠিক পাশেই একটি Google আইকন দেখায়।</translation> <translation id="1699274548822076330">এটি ট্রেস-আপলোড-url ফ্ল্যাগের সাথে একত্রে ব্যবহার করতে হবে। সতর্কতা: সক্ষম করা অবস্থায় Chrome প্রতিটি নেভিগেশানের জন্য কার্য-সম্পাদনা ডেটা সংরক্ষণ করবে এবং এটি ট্রেস-আপলোড-url ফ্ল্যাগ দ্বারা সুনির্দিষ্ট করা URL এ আপলোড করবে। ট্রেসটিতে ব্যক্তিগতভাবে শনাক্তকরণযোগ্য তথ্য (PII) যেমন, অাপনার ঘুরে দেখা ওয়েবসাইটের শিরোনাম ও URLগুলি অন্তর্ভুক্ত থাকতে পারে।</translation> <translation id="1699395855685456105">হার্ডওয়্যার পুনর্বিবেচনাসমূহ:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">দয়া করে আপনার সিঙ্ক পাসফ্রেজ আপডেট করুন৷</translation> <translation id="1788636309517085411">ডিফল্ট ব্যবহার করুন</translation> <translation id="1789575671122666129">পপআপ</translation> -<translation id="1790550373387225389">উপস্থাপনা মোড লিখুন</translation> <translation id="1792705092719258158">মিরর্ড্ স্ক্রীন মোড সক্ষম করুন৷</translation> <translation id="1793119619663054394">আপনি কি "<ph name="PROFILE_NAME" />" এবং এই কম্পিউটার থেকে সমস্ত সংশ্লিষ্ট Chrome ডেটা মুছে ফেলার বিষয়ে নিশ্চিত? এটিকে পূর্বাবস্থায় ফেরানো যাবে না৷</translation> <translation id="179767530217573436">বিগত 4 সপ্তাহ</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">আপনার ডিভাইস এবং যন্ত্রপাতি বিশেষে সেটিংসমূহ পরিবর্তন করুন৷</translation> <translation id="2673135533890720193">আপনার ব্রাউজিং ইতিহাস পড়ুন</translation> <translation id="2673589024369449924">এই ব্যবহারকারীর জন্য একটি ডেস্কটপ শর্টকাট তৈরি করুন</translation> +<translation id="2675358154061544447">পৃথক প্রক্রিয়াতে ক্রস সাইট আইফ্রেমগুলি রেন্ডারিংয়ের জন্য উচ্চ পরীক্ষামূলক সমর্থন। এই মোডে, দস্তাবেজ একটি রেন্ডারার প্রক্রিয়া শেয়ার করবে শুধুমাত্র যদি তারা একই ওয়েব সাইট থেকে আসে।</translation> <translation id="2676946222714718093">এতে প্লে হচ্ছে</translation> <translation id="2678063897982469759">পুনঃ সক্ষম</translation> <translation id="2678246812096664977">সকল প্লাগ ইনগুলি</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">সিঙ্ক প্রমাণপত্রের জন্য পাসওয়ার্ড পরিচালক কীভাবে স্বতঃপূর্ণ পরিচালনা করে৷</translation> <translation id="29611076221683977">বর্তমানে <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> এর আক্রমণকারীরা আপনার Mac এ ক্ষতিকারক প্রোগ্রাম ইনস্টল করতে পারে বা আপনার তথ্য (উদাহরণস্বরুপ, ফটো, পাসওয়ার্ড, বার্তা এবং ক্রেডিট কার্ড) চুরি করতে বা মুছে দিতে পারে।</translation> <translation id="2961695502793809356">এগিয়ে যাওয়ার জন্য ক্লিক করুন, ইতিহাস দেখার জন্য ধরে রাখুন</translation> +<translation id="296216853343927883">প্রসঙ্গ মেনুতে Google ব্রান্ডিং</translation> <translation id="2963151496262057773">নিম্নোক্ত প্ল্যাগ ইনটি প্রতিক্রিয়াবিহীন: <ph name="PLUGIN_NAME" /> আপনি কি এটিকে থামাতে চান?</translation> <translation id="2963783323012015985">তুর্কী কীবোর্ড</translation> <translation id="2964193600955408481">Wi-Fi অক্ষম করুন</translation> @@ -1429,6 +1431,15 @@ <translation id="3025729795978504041">অন্যান্য ব্যক্তিগণকে দেখতে উপরের বোতামে ডান ক্লিক করুন।</translation> <translation id="3026050830483105579">সমস্ত কিছুই এখানে রয়েছে৷</translation> <translation id="302620147503052030">প্রদর্শন বোতাম</translation> +<translation id="302781076327338683">ক্যাশে বাইপাস করা পুনরায় লোড করুন</translation> +<translation id="3030243755303701754">একজন তত্ত্বাবধানে থাকা ব্যবহারকারী আপনার নির্দেশনা অনুযায়ী ওয়েব ঘুরে দেখতে পারে। Chrome এ একজন তত্ত্বাবধানে থাকা ব্যবহারকারীর পরিচালক হিসাবে, আপনি: +• নির্দিষ্ট কিছু ওয়েবসাইটকে মঞ্জুরি দিতে বা নিষিদ্ধ করতে পারেন, +• তত্ত্বাবধানে থাকা ব্যবহারকারীর ঘুরে দেখা ওয়েবসাইটগুলি পর্যালোচনা করতে পারেন, এবং +• অন্যান্য সেটিংস পরিচালনা করতে পারেন। + +একজন তত্ত্বাবধানে থাকা ব্যবহারকারী তৈরী করা হলে কোনো Google অ্যাকাউন্ট তৈরি হয় না এবং তাদের বুকমার্ক, ব্রাউজিং ইতিহাস এবং অন্যান্য পছন্দগুলি Chrome সিঙ্কের সঙ্গে অন্যান্য ডিভাইসগুলিতে তাদেরকে অনুসরণ করবে না। আপনি একজন নতুন তত্ত্বাবধানে থাকা ব্যবহারকারী তৈরি করার পরে, <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> এ গিয়ে যেকোনো সময়ে যেকোনো ডিভাইস থেকে তাদের সেটিংস পরিচালনা করতে পারেন। + +আরো তথ্যের জন্য, আমাদের <ph name="BEGIN_LINK" />সহায়তা কেন্দ্র<ph name="END_LINK" /> ঘুরে দেখুন।</translation> <translation id="3031417829280473749">এজেন্ট X</translation> <translation id="3031557471081358569">আমদানির জন্য আইটেম নির্বাচন করুন:</translation> <translation id="3033332627063280038">ক্যাশে-নিয়ন্ত্রণ: পুনঃবৈধতার-সময়ে-অব্যবহৃত ডিরেক্টিভ এর পরীক্ষামূলক বাস্তবায়ন সক্ষম করে। এটি সার্ভারকে লেটেন্সি উন্নত করার জন্য কিছু রিসোর্সের যে পুনঃবৈধতা করা যেতে পারে তা উল্লেখ করার অনুমতি দেয়।</translation> @@ -1644,7 +1655,6 @@ <translation id="3324301154597925148">আপনি কি এই পৃষ্ঠাটিকে অনুসন্ধান পৃষ্টা হিসেবে আশা করছিলেন?</translation> <translation id="3324684065575061611">(এন্টারপ্রাইজ নীতি দ্বারা অক্ষমিত)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> জিপ করা হচ্ছে...</translation> -<translation id="3330206034087160972">উপস্থাপনা মোড থেকে প্রস্থান করুন</translation> <translation id="3330686263988132416">WebRTC স্টান মূল হেডার</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">মিরর স্ক্রীন মোড সক্ষম করুন৷ এই মোডটি অনুভূমিকভাবে স্ক্রীনের চিত্রকে পাল্টায়৷</translation> @@ -1689,6 +1699,7 @@ <translation id="3392020134425442298">ক্ষতিকারক ফাইল উদ্ধার করুন</translation> <translation id="3394150261239285340"><ph name="HOST" /> আপনার ক্যামেরা ও মাইক্রোফোন ব্যবহার করতে চায়৷</translation> <translation id="3394279550557729862">উপলব্ধ থাকলে প্ল্যাটফর্মগুলিতে নেটিভ বিজ্ঞপ্তির টোস্ট এবং বিজ্ঞপ্তি কেন্দ্র ব্যবহার করার জন্য সমর্থন সক্ষম করুন।</translation> +<translation id="3394862755749546286">Android এ সমন্বিত (Android ও ডেস্কটপ) মিডিয়া পাইপলাইন অক্ষম করে।</translation> <translation id="3396331542604645348">নির্বাচিত মুদ্রকটি উপলব্ধ নেই বা সঠিকভাবে ইনস্টল হওয়া নেই৷ আপনার মুদ্রকটি পরীক্ষা করুন বা অন্য একটি মুদ্রক নির্বাচনের চেষ্টা করুন৷</translation> <translation id="3399597614303179694">ম্যাসেডোনীয় কীবোর্ড</translation> <translation id="3401130144947259741">সক্ষম করা হলে, ট্রেস ইভেন্টগুলি উইন্ডোজ (ETW) এর জন্য ইভেন্ট ট্রেসিংয়ে রপ্তানি করা হয় এবং UIForETW বা Xperf এর মতো সরঞ্জাম দ্বারা ক্যাপচার করা যায়।</translation> @@ -1899,7 +1910,6 @@ <translation id="367645871420407123">যদি আপনি ডিফল্ট টেস্ট চিত্র মানে রুট পাসওয়ার্ড সেট করতে চান তবে খালি ছাড়ুন</translation> <translation id="3678156199662914018">এক্সটেনশন: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">মাল্টাদেশীয় কীবোর্ড</translation> -<translation id="3680173818488851340">নিম্ন অগ্রাধিকারের আইফ্রেমগুলি।</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> এর থেকে স্ক্রিন শেয়ার করার অনুরোধ</translation> <translation id="3685122418104378273">মোবাইল ডেট ব্যবহার করার সময় ডিফল্টরূপে Google ড্রাইভ সিঙ্ক অক্ষম করা হয়৷</translation> <translation id="3685387984467886507">একটি নির্দিষ্ট সময়কালের জন্য SSL ত্রুটিগুলির মাধ্যমে চালনা করতে, সিদ্ধান্তগুলিকে মনে রাখে৷</translation> @@ -1948,6 +1958,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> এখন অ্যাডমিন কনসোলে প্রদর্শিত হবে</translation> <translation id="3741243925913727067">Google ড্রাইভে আপনার মিডিয়া ডিভাইসের ফটো এবং ভিডিওগুলির ব্যকআপ নিন৷</translation> <translation id="3743492083222969745">ভার্চুয়াল কীবোর্ডের জন্য সেটিংস পৃষ্ঠা থেকে অঙ্গভঙ্গি টাইপিং বিকল্পটি সক্ষম/অক্ষম করুন।</translation> +<translation id="3744111561329211289">পটভূমি সিঙ্ক</translation> <translation id="3749289110408117711">ফাইলের নাম</translation> <translation id="3751427701788899101">সংযোগ বিচ্ছিন্ন হয়ে গেছে</translation> <translation id="3751522270321808809">এই সাইটটি আপনার তথ্য (উদাহরণস্বরূপ: পাসওয়ার্ড, বার্তা, বা ক্রেডিট কার্ডসমূহ) চুরি করার জন্য কৌশল ব্যবহার করতে পারে৷</translation> @@ -2264,6 +2275,7 @@ <translation id="4218259925454408822">অন্য একটি অ্যাকাউন্টের সাইন ইন করুন</translation> <translation id="4219614746733932747">সক্ষম করা হলে, ডিভাইস স্কেল ফ্যাক্টরের জন্য সামগ্রী স্কেল করতে Blink তার জুম করার প্রক্রিয়া ব্যবহার করে।</translation> <translation id="4220865787605972627">যদি বৈশিষ্ট্যটিকে প্রদর্শন সমর্থন করে, তবে প্রদর্শনের রঙ ক্রমাঙ্কন অনুমোদন করুন।</translation> +<translation id="4232692576734035989">অত্যন্ত উচ্চ পরীক্ষামূলক কার্য-সম্পাদনা মোড যেখানে ক্রস-সাইট আইফ্রেমগুলি শীর্ষ দস্তাবেজগুলি থেকে একটি পৃথক প্রক্রিয়ায় রাখা হয়। এই মোডে, বিভিন্ন তৃতীয় পক্ষের সাইটের আইফ্রেমগুলিকে একটি প্রক্রিয়া শেয়ার করতে মঞ্জুরি দেয়া হবে।</translation> <translation id="4235200303672858594">সম্পূর্ণ স্ক্রীন</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> এর জন্য অ্যাকাউন্ট যোগ করুন</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> এই ভাষাতে প্রদর্শিত হবে না</translation> @@ -2428,6 +2440,7 @@ <translation id="4509017836361568632">ফটো বাতিল করুন</translation> <translation id="4509345063551561634">অবস্থান:</translation> <translation id="4514542542275172126">তত্ত্বাবধানে থাকা ব্যবহারকারী সেট করুন</translation> +<translation id="4514914692061505365">সব pexe ফাইলের জন্য PNaCl এর দ্রুত Subzero অনুবাদকের ব্যবহার বলবৎ করে।</translation> <translation id="4518677423782794009">Chrome কি ক্র্যাশ করছে? অস্বাভাবিক শুরুর পৃষ্ঠা বা সরঞ্জামদন্ডগুলি দেখাচ্ছে? এমন অপ্রত্যাশিত বিজ্ঞাপন দেখাচ্ছে যেগুলির থেকে আপনি পরিত্রাণ পাচ্ছেন না, অথবা অন্য কোনোভাবে আপনার ব্রাউজিং অভিজ্ঞতা পরিবর্তন করছে? আপনি Chrome পরিষ্কারের সরঞ্জামটি ব্যবহার করে সমস্যাটির সমাধান করতে পারেন৷</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> থেকে অজানা ডিভাইসগুলি</translation> <translation id="4522570452068850558">বিশদ বিবরণ</translation> @@ -2476,6 +2489,7 @@ <translation id="4595560905247879544">অ্যাপ্লিকেশান এবং এক্সটেনশানগুলি শুধুমাত্র পরিচালক (<ph name="CUSTODIAN_NAME" />) দ্বারা পরিবর্তন করা যাবে।</translation> <translation id="4601242977939794209">EMF রূপান্তর</translation> <translation id="4602466770786743961">আপনার ক্যামেরা এবং মাইক্রোফোন যেকোনো সময় অ্যাক্সেস করতে <ph name="HOST" /> কে মঞ্জুরি দেয়</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">ইন্টারনেট সংযুক্ত নেই</translation> <translation id="4608500690299898628">&সন্ধান করুন...</translation> <translation id="4610637590575890427">আপনি <ph name="SITE" />-এ যাওয়ার কথা বলছেন কি?</translation> @@ -2777,6 +2791,7 @@ <translation id="5062930723426326933">সাইন ইন ব্যর্থ হয়েছে, দয়া করে ইন্টারনেটের সাথে সংযোগ স্থাপন করুন এবং আবার চেষ্টা করুন৷</translation> <translation id="5063180925553000800">নতুন পিন:</translation> <translation id="5067867186035333991"><ph name="HOST" /> আপনার মাইক্রোফোন অ্যাক্সেস করতে চায় কিনা জিজ্ঞাসা করুন</translation> +<translation id="5068918910148307423">সম্প্রতি বন্ধ করা সাইটগুলিকে ডেটা পাঠানো ও গ্রহণ শেষ করতে মঞ্জুরি দেবেন না</translation> <translation id="507075806566596212">আপনার ডিভাইসটিকে দূর থেকে সনাক্ত করা, মোছা ও লক করতে সক্ষম করার জন্য অাপনি আপনার এই <ph name="DEVICE_TYPE" /> কে Google এ তালিকাভুক্ত করতে যাচ্ছেন। এ জন্য পুনরায় চালু করা প্রয়োজন। আপনি কি চালিয়ে যেতে চান?</translation> <translation id="5072836811783999860">পরিচালিত বুকমার্কগুলি দেখান</translation> <translation id="5074318175948309511">নতুন সেটিংস কার্যকর করার আগে এই পৃষ্ঠাটি পুনরায় লোড করার প্রয়োজন হতে পারে৷</translation> @@ -2886,6 +2901,7 @@ <translation id="5227808808023563348">পূর্ববর্তী পাঠ খুঁজুন</translation> <translation id="5228076606934445476">ডিভাইসের সাথে কিছু ত্রুটি হয়েছে৷ এই ত্রুটি থেকে পুনরুদ্ধার করার জন্য আপনাকে আপনার ডিভাইস রিবুট করতে হবে এবং আবার চেষ্টা করুন৷</translation> <translation id="5228962187251412618">শুধুমাত্র অনলাইন চেক</translation> +<translation id="5229622432348746578">ডেস্কটপ শেয়ারের জন্য অডিও অক্ষম করে</translation> <translation id="5230516054153933099">উইন্ডো</translation> <translation id="5232178406098309195">যখন আপনি অডিও সক্রিয়করণ কমান্ডগুলি ব্যবহার করেন, যেমন "Ok Google" বা কোনো মাইক্রোফোন আইকনে স্পর্শ করা, আপনার অ্যাকাউন্টে আপনার ব্যক্তিগত ভয়েস ও অডিও কার্যকলাপ কিছু ভয়েস এবং অন্যান্য অডিও সংরক্ষণ করে৷ কয়েক সেকেন্ড আগের থেকে নিম্নলিখিত স্পীচ/অডিও সংরক্ষণ করা হবে৷</translation> <translation id="523299859570409035">বিজ্ঞপ্তি ব্যতিক্রম</translation> @@ -3140,6 +3156,7 @@ <translation id="5557991081552967863">নিষ্ক্রিয় থাকাকালীন Wi‑Fi চালু রাখুন</translation> <translation id="5558129378926964177">Zoom &In</translation> <translation id="556042886152191864">বোতাম</translation> +<translation id="5562781907504170924">এই ট্যাবটি একটি Bluetooth ডিভাইসে সংযুক্ত হয়ে আছে।</translation> <translation id="5565871407246142825">ক্রেডিট কার্ডসমূহ</translation> <translation id="5567989639534621706">অ্যাপ্লিকেশন ক্যাশে</translation> <translation id="5568069709869097550">সাইন ইন করতে পারছেন না</translation> @@ -3300,6 +3317,7 @@ <translation id="5803531701633845775">কার্সরটি না সরিয়ে পিছন থেকে শব্দবন্ধগুলি চয়ন করুন</translation> <translation id="5804241973901381774">অনুমতিগুলি</translation> <translation id="580571955903695899">শিরোনাম অনুসারে পুনঃক্রম করুন</translation> +<translation id="5808982448801399019">অনুমোদন ব্যর্থ হয়েছে</translation> <translation id="580961539202306967">যখন কোনো সাইট আমাকে পুশ বার্তা পাঠাতে চায়, তখন আমাকে জিজ্ঞাসা করুন (প্রস্তাবিত)</translation> <translation id="5815645614496570556">X.400 ঠিকানা</translation> <translation id="5817397429773072584">ঐতিহ্যবাহি চীনা</translation> @@ -3570,6 +3588,7 @@ <translation id="6243774244933267674">সার্ভার অনুপলব্ধ</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">আপডেট প্রস্তুত</translation> +<translation id="6248400709929739064">সাবটাইটেল সক্ষম করুন</translation> <translation id="6248988683584659830">অনুসন্ধান সেটিংস</translation> <translation id="6251870443722440887">GDI হ্যান্ডলগুলি</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> পরিষেবার শর্তাবলী</translation> @@ -3594,6 +3613,7 @@ <translation id="6277105963844135994">নেটওয়ার্কের সময় শেষ হয়েছে</translation> <translation id="6277518330158259200">স্ক্রীনশট নি&ন</translation> <translation id="6279183038361895380">আপনার কার্সার দেখাতে |<ph name="ACCELERATOR" />| চাপুন</translation> +<translation id="6280215091796946657">অন্য একটি অ্যাকাউন্ট দিয়ে সাইন ইন করুন</translation> <translation id="6281743458679673853">সব APIগুলি দ্বারা লেআউট ভিউপোর্ট প্রতিফলন করাতে গবেষণা করে। এটি window.scroll বৈশিষ্টসমূহকে লেআউট ভিউপোর্টের সাথে সম্পর্কিত করবে।</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{আপনার নেটওয়ার্কে নতুন প্রিন্টারটি}one{আপনার নেটওয়ার্কে নতুন প্রিন্টারগুলি}other{আপনার নেটওয়ার্কে নতুন প্রিন্টারগুলি}}</translation> <translation id="6285395082104474418">স্থিতি ট্রে আপনাকে আপনার নেটওয়ার্ক, ব্যাটারি এবং অন্যান্য জিনিসগুলির অবস্থা দেখায়৷</translation> @@ -3675,6 +3695,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> এর পূর্বে ইনস্টল করা সংস্করণে ফিরিয়ে নিয়ে যাওয়া হচ্ছে</translation> <translation id="6418481728190846787">সমস্ত অ্যাপ্লিকেশানের অ্যাক্সেস স্থায়ীভাবে সরান</translation> <translation id="6418505248408153264">মেটারিয়াল ডিজাইন ইতিহাস সক্ষম করে</translation> +<translation id="6419288379019356534">এই ডিভাইসটি <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> দ্বারা পরিচালিত হয়। + <ph name="LINE_BREAK" /> + আপনার <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> অ্যাকাউন্টে সাইন ইন চালিয়ে যেতে দয়া করে "পরবর্তী" ক্লিক করুন।</translation> <translation id="6419902127459849040">মধ্য ইউরোপীয়</translation> <translation id="6420676428473580225">ডেস্কটপে যোগ করুন</translation> <translation id="6422329785618833949">ফটো সরানো হয়েছে</translation> @@ -3834,7 +3857,6 @@ <translation id="6662016084451426657">সমন্বয় ত্রুটি: সিঙ্কটি সক্ষম করতে দয়া করে প্রশাসকের সাথে যোগাযোগ করুন৷</translation> <translation id="6663792236418322902">আপনার চয়ন করা পাসওয়ার্ডটি এই ফাইলটিকে পরে পুনরুদ্ধার করার জন্য রক্ষণের কাজে লাগবে৷ দয়া করে এটিকে একটি সুরক্ষিত স্থানে রেকর্ড করুন৷</translation> <translation id="6664237456442406323">দুর্ভাগ্যবশত, আপনার কম্পিউটার একটি ত্রুটিপূর্ণ হার্ডওয়্যার ID এর মাধ্যমে কনফিগার করা হয়েছে৷ এটি Chrome OS কে সাম্প্রতিক সুরক্ষা সমাধানে আপডেট করা থেকে বিরত করেছে এবং আপনার কম্পিউটার <ph name="BEGIN_BOLD" />অনিষ্টকারী আক্রমণগুলির ফলে অরক্ষিত হতে পারে<ph name="END_BOLD" />৷</translation> -<translation id="666541661050183336">আইফ্রেম সম্পদগুলির লোড হওয়ার অগ্রাধিকার কমায়।</translation> <translation id="6666647326143344290">আপনার Google অ্যাকাউন্ট সহ</translation> <translation id="6675665718701918026">পয়েন্টিং ডিভাইস সংযুক্ত হয়েছে</translation> <translation id="6677037229676347494">প্রত্যাশিত ID "<ph name="EXPECTED_ID" />", কিন্তু ID হল "<ph name="NEW_ID" />"৷</translation> @@ -3929,6 +3951,7 @@ <translation id="6825883775269213504">রাশিয়ান</translation> <translation id="6827236167376090743">পাশাপাশি এই ভিডিওটি দীর্ঘ সময় ধরে চলতে থাকবে৷</translation> <translation id="6828153365543658583">সাইন-ইনকে নিম্নলিখিত ব্যবহারকারীদের মধ্যে সীমাবদ্ধ রাখুন:</translation> +<translation id="6828434191343384461">Chrome ও সিঙ্ক করা ডিভাইস থেকে নির্বাচিত ডেটা সরিয়ে ফেলা হয়েছে। আপনার Google অ্যাকাউন্টের অনুসন্ধান এবং অন্যান্য Google পরিষেবাগুলি থেকে কার্যকলাপের মত অন্যান্য ধরনের ব্রাউজিং ইতিহাস <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> এ থাকতে পারে।</translation> <translation id="6828860976882136098">সকল ব্যবহারকারীর জন্য স্বয়ংক্রিয় আপডেট সেট আপ করতে ব্যর্থ হয়েছে (ফ্লাইটপূর্ব সম্পাদন ত্রুটি: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">আপনার <ph name="DEVICE_TYPE" /> এর মাধ্যমে সহায়তা পান।</translation> <translation id="6829270497922309893">আপনার প্রতিষ্ঠানের মধ্যে নথিভুক্ত করুন</translation> @@ -4009,6 +4032,7 @@ <translation id="6965382102122355670">ওকে</translation> <translation id="6965648386495488594">পোর্ট</translation> <translation id="6965978654500191972">ডিভাইস</translation> +<translation id="6969104364835835175">PNaCl Subzero বলবৎ করে</translation> <translation id="6970230597523682626">বুলগেরীয়</translation> <translation id="6970480684834282392">প্রারম্ভিক প্রকার</translation> <translation id="6970856801391541997">প্রিন্ট নির্দিষ্ট পৃষ্ঠাসমূহ</translation> @@ -4091,10 +4115,12 @@ <translation id="7057058088140140610">Google Payments ব্যবহার করে এমন ক্রেডিট কার্ড ও ঠিকানাগুলি</translation> <translation id="7059858479264779982">স্বয়ংক্রিয় লঞ্চ সেট করুন</translation> <translation id="7061692898138851896">স্বয়ংক্রিয়ভাবে পাসওয়ার্ডগুলি সংরক্ষণ করুন</translation> +<translation id="7062222374113411376">সম্প্রতি বন্ধ করা সাইটগুলিকে ডেটা পাঠানো ও গ্রহণ শেষ করতে মঞ্জুরি দিন (প্রস্তাবিত)</translation> <translation id="7063129466199351735">শর্টকাটগুলি প্রক্রিয়া করা হচ্ছে...</translation> <translation id="7065223852455347715">এই ডিভাইসটি এমন একটি মোডে লক হয়েছে যা এন্টারপ্রাইজ তালিকাভুক্তি প্রতিরোধ করে৷ যদি আপনি ডিভাইসটিকে তালিকাভুক্ত করতে চান তবে আপনাকে প্রথমে ডিভাইস পুনরুদ্ধারের মধ্য দিয়ে যেতে হবে৷</translation> <translation id="7065534935986314333">সিস্টেম সম্বন্ধে</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />"-এর সাথে সংযোগ করতে ব্যর্থ৷</translation> +<translation id="7067725467529581407">এটি আর কখনো দেখাবেন না।</translation> <translation id="7070804685954057874">প্রত্যক্ষ ইনপুট</translation> <translation id="7072010813301522126">শর্টকাটের নাম</translation> <translation id="7072025625456903686">সবগুলির অনুমোদন বা কাস্টমাইজ করুন</translation> @@ -4366,6 +4392,7 @@ <translation id="7489605380874780575">যোগ্যতার পরীক্ষা করুন</translation> <translation id="749028671485790643">ব্যক্তি <ph name="VALUE" /></translation> <translation id="7491962110804786152">ট্যাব</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> এক্সটেনশান হয়ত ব্যক্তিগত ডেটা যেমন পাসওয়ার্ড ও ক্রেডিট কার্ড নম্বরগুলি সহ আপনি যা টাইপ করেন সেসব পাঠ্য সংগ্রহ করতে পারে। আপনি কি এই এক্সটেনশান ব্যবহার করতে চান?</translation> <translation id="7495778526395737099">আপনার পুরানো পাসওয়ার্ড ভুলে গেছেন?</translation> <translation id="7503191893372251637">Netscape শংসাপত্রের প্রকার</translation> <translation id="7503821294401948377">ব্রাউজার ক্রিয়ার জন্য '<ph name="ICON" />' আইকন লোড করা যায়নি৷</translation> @@ -4417,6 +4444,7 @@ <translation id="756445078718366910">ব্রাউজার উইন্ডো খুলুন</translation> <translation id="7564847347806291057">সমাপ্তি প্রক্রিয়া</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome ডেটা সাফ হয়েছে</translation> <translation id="7568790562536448087">আপডেট হচ্ছে</translation> <translation id="7573172247376861652">ব্যাটারি চার্জ</translation> <translation id="7576032389798113292">৬x৪</translation> @@ -4546,6 +4574,7 @@ <translation id="7786207843293321886">অতিথি থেকে প্রস্থান করুন</translation> <translation id="7786889348652477777">&অ্যাপ্লিকেশান পুনরায় লোড করুন</translation> <translation id="7787129790495067395">আপনি বর্তমানে একটি পাসফ্রেজ ব্যবহার করছেন৷ যদি আপনি নিজের পাসফ্রেজ ভুলে গিয়ে থাকেন তবে আপনি Google ড্যাশবোর্ড ব্যবহার করে Google-এর সার্ভারগুলি থেকে আপনার ডেটা সাফ করতে সিঙ্ক পুনরায় সেট করতে পারেন৷</translation> +<translation id="7787308148023287649">অন্য স্ক্রীনে প্রদর্শন করুন</translation> <translation id="7788080748068240085">এই <ph name="FILE_NAME" /> অফলাইনে সংরক্ষণ করতে হলে আপনাকে অবশ্যই অতিরিক্ত <ph name="TOTAL_FILE_SIZE" />স্থান খালি করতে হবে:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />যে সমস্ত ফাইলের আপনার আর অফলাইনে ব্যবহার করার দরকার নেই সেগুলিকে আনপিন করুন<ph name="MARKUP_3" /> <ph name="MARKUP_4" />আপনার ডাউনলোড ফোলডার থেকে ফাইল মুছুন<ph name="MARKUP_5" /></translation> @@ -4614,6 +4643,7 @@ <translation id="7878999881405658917">Google এই ফোনে একটি বিজ্ঞপ্তি পাঠিয়েছে। খেয়াল করুন যে, Bluetooth এর মাধ্যমে আপনি আপনার <ph name="DEVICE_TYPE" />-কে ১০০ ফুট দূর থেকে আনলক করে রাখতে পারেন। এটি কোনো ধরনের সমস্যার কারণ হলে, আপনি <a>সাময়িকভাবে এই বৈশিষ্ট্যটি অক্ষমিত করতে পারেন</a>।</translation> <translation id="7879478708475862060">ইনপুট মোড অনুসরণ করুন</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />"এই অ্যাপ্লিকেশান এবং এক্সটেনশানসমূহ যোগ করে:</translation> +<translation id="7881969471599061635">সাবটাইটেল অক্ষম করুন</translation> <translation id="7884988936047469945">পরীক্ষামূলক অ্যাক্সেসযোগ্যতার বৈশিষ্ট্যগুলি</translation> <translation id="7885253890047913815">সাম্প্রতিক গন্তব্যস্থল</translation> <translation id="7885283703487484916">খুবই স্বল্প সময়</translation> @@ -4979,6 +5009,7 @@ <translation id="839736845446313156">নিবন্ধ করুন</translation> <translation id="8398790343843005537">আপনার ফোন খুঁজুন</translation> <translation id="8398877366907290961">যাইহোক এগিয়ে যান</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> দিয়ে সংরক্ষণ করা আপনার অ্যাকাউন্টের মাধ্যমে সাইন ইন করুন</translation> <translation id="8401363965527883709">চেকমুক্ত থাকা চেক বাক্স</translation> <translation id="8408402540408758445">প্রাক সংগ্রহিত অনুসন্ধান ফলাফলগুলি</translation> <translation id="8410073653152358832">এই ফোনটি ব্যবহার করুন</translation> @@ -5065,6 +5096,7 @@ <translation id="8545211332741562162">পরীক্ষামূলক JavaScript বৈশিষ্ট্যাবলী ব্যবহার করার জন্য ওয়েব পৃষ্ঠাগুলিকে সক্ষম করুন৷</translation> <translation id="8545575359873600875">দুঃখিত, আপনার পাসওয়ার্ড যাচাই করা যায়নি। এই তত্ত্বাবধানে থাকা ব্যবহারকারীর ম্যানেজার সম্প্রতি পাসওয়ার্ড পরিবর্তন করে থাকতে পারেন। যদি তাই হয়, তাহলে পরবর্তীকালে যখন আপনি সাইন-ইন করবেন তখন নতুন পাসওয়ার্ড দিতে হবে। আপনার পুরোনো পাসওয়ার্ড দিয়ে চেষ্টা করে দেখুন।</translation> <translation id="8546306075665861288">চিত্র ক্যাশে</translation> +<translation id="854653344619327455">এই ফ্ল্যাগ চালু থাকলে, অডিও শেয়ার করা হবে কিনা তা ডেস্কটপ শেয়ার চয়নকারি উইন্ডো ব্যবহারকারিকে চয়ন করতে দেবে।</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">চরিত্র</translation> <translation id="855081842937141170">ট্যাব পিন করুন</translation> @@ -5095,6 +5127,7 @@ <translation id="8589311641140863898">পরীক্ষামূলক এক্সটেনশন APIs</translation> <translation id="8590375307970699841">স্বয়ংক্রিয় আপডেটগুলো সেটআপ করুন</translation> <translation id="8592071947729879125">আইফ্রেম অনুমতি সীমাবদ্ধ করুন।</translation> +<translation id="8592125506633137593">শীর্ষ দস্তাবেজ বিচ্ছিন্নতা</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> হিসেবে সাইন ইন করুন৷ <ph name="BEGIN_LINK" />Google ড্যাশবোর্ডে<ph name="END_LINK" />আপনার সিঙ্ক করা ডেটা পরিচালনা করুন৷</translation> <translation id="8596540852772265699">কাস্টম ফাইলসমূহ</translation> <translation id="8596785155158796745">মাইক্রোফোন বর্তমানে অনুপলব্ধ৷ <ph name="BEGIN_LINK" />মাইক্রোফোন পরিচালনা করুন<ph name="END_LINK" /></translation> @@ -5167,6 +5200,7 @@ <translation id="8688579245973331962">আপনার নাম দেখতে পাচ্ছেন না?</translation> <translation id="8688644143607459122">‘অবিরত থাকুন’ ক্লিক করার মাধ্যমে আপনি Google Payments ব্যবহার করার সম্মতি জানাচ্ছেন। জালিয়াতি থেকে আপনাকে সুরক্ষা দিতে, আপনার কম্পিউটার (এর অবস্থান সমেত) সম্পর্কিত তথ্য Google Payments এর সাথে শেয়ার করা হবে।</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" এক্সটেনশানটিকে দূর থেকে ইনস্টল করা হয়েছে৷</translation> +<translation id="868926756781121513">ট্যাব উৎস সহ ডেস্কটপ শেয়ার</translation> <translation id="8689341121182997459">মেয়াদ শেষ:</translation> <translation id="8690754533598178758">Adobe Flash Player মাইক্রোফোন ব্যতিক্রমগুলি ভিন্ন।</translation> <translation id="8691686986795184760">(এন্টারপ্রাইজ নীতি দ্বারা সক্ষমিত)</translation> @@ -5210,6 +5244,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" />-এর পরিবর্তে <ph name="PROTOCOL" /> লিঙ্কসমূহ খুলুন</translation> <translation id="8737709691285775803">শিল</translation> <translation id="8741881454555234096">একটি মাউসের তুলনায় দূর্বল রেসুলিউশান বিশিষ্ট স্পর্শগুলিকে ক্ষতিপূরণ করার জন্য স্পর্শ করার অঙ্গভঙ্গির অবস্থান রিফাইন করুন।</translation> +<translation id="8741995161408053644"><ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> এ আপনার Google অ্যাকাউন্টের অন্যান্য ধরনের ব্রাউজিং ইতিহাস থাকতে পারে।</translation> <translation id="8743712320294854924">শেল্ফে প্রসারিত ইনপুট বিকল্পগুলি দেখান।</translation> <translation id="874420130893181774">ঐতিহ্যবাহি পিনয়িন ইনপুট পদ্ধতি</translation> <translation id="8744525654891896746">এই তত্বাবধানে থাকা ব্যবহারকারীর জন্য একটি অবতার নির্বাচন করুন</translation> @@ -5223,6 +5258,7 @@ <translation id="8757640015637159332">সর্বজনীন সেশন প্রবশ করুন</translation> <translation id="8757742102600829832">সংযোগ করার জন্য কোনো Chromebox নির্বাচন করুন</translation> <translation id="8757803915342932642">Google ক্লাউড ডিভাইসগুলিতে ডিভাইস</translation> +<translation id="8758895886513993540">ব্যবহারকারিরা ডেস্কটপ শেয়ারের জন্য একটি ট্যাব নির্বাচন করতে পারবে কিনা তা এই ফ্ল্যাগটি নিয়ন্ত্রণ করে।</translation> <translation id="8759408218731716181">একাধিক সাইন-ইন সেট আপ করা যাবে না</translation> <translation id="8759753423332885148">আরো জানুন৷</translation> <translation id="8761567432415473239">Google নিরাপদ ব্রাউজিং সম্প্রতি <ph name="SITE" /> এ <ph name="BEGIN_LINK" />ক্ষতিকারক প্রোগ্রামগুলি খুঁজে পেয়েছে<ph name="END_LINK" />৷</translation> @@ -5433,6 +5469,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB মাউস সংযুক্ত হয়েছে</translation> <translation id="9076523132036239772">দুঃখিত, আপনার ইমেল বা পাসওয়ার্ড যাচাই করা হয়নি৷ প্রথমে একটি নেটওয়ার্কের সঙ্গে সংযোগ করার চেষ্টা করুন৷</translation> +<translation id="9077132661879924646">Android এ সমন্বিত মিডিয়া পাইপলাইন অক্ষম করে।</translation> <translation id="907841381057066561">প্যাকেজিংয়ের সময় অস্থায়ী জিপ ফাইল তৈরি করতে ব্যর্থ৷</translation> <translation id="9083147368019416919">অ-তালিকাভুক্ত করতে ব্যর্থ হয়েছে</translation> <translation id="9084064520949870008">উইন্ডো হিসাবে খুলুন</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index e837e948..cc32c98 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Maj</translation> <translation id="1697068104427956555">Seleccioneu una regió quadrada de la imatge.</translation> <translation id="1697532407822776718">Ja esteu a punt</translation> +<translation id="1697988819212986149">Mostra una icona de Google al costat dels elements del menú contextual que funcionen amb la tecnologia dels serveis de Google.</translation> <translation id="1699274548822076330">S'ha d'utilitzar amb la marca trace-upload-url. ADVERTIMENT: si s'activa, Chrome registrarà les dades de rendiment de totes les activitats de navegació i les penjarà a l'URL especificat amb la marca trace-upload-url. Les dades de seguiment poden incloure informació d'identificació personal (IIP), com ara els títols i els URL de llocs web que visiteu.</translation> <translation id="1699395855685456105">Revisió de maquinari:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Actualitzeu la frase de contrasenya de sincronització.</translation> <translation id="1788636309517085411">Utilitza la predeterminada</translation> <translation id="1789575671122666129">Finestres emergents</translation> -<translation id="1790550373387225389">Entra al mode de presentació</translation> <translation id="1792705092719258158">Activa el mode de pantalla replicada.</translation> <translation id="1793119619663054394">Confirmeu que voleu suprimir <ph name="PROFILE_NAME" /> i totes les dades associades de Chrome en aquest ordinador? Aquesta acció no es pot desfer.</translation> <translation id="179767530217573436">fa quatre setmanes</translation> @@ -1153,6 +1153,7 @@ <translation id="267285457822962309">Canvieu la configuració específica del dispositiu i dels perifèrics.</translation> <translation id="2673135533890720193">Llegir l'historial de navegació</translation> <translation id="2673589024369449924">Crea una drecera a l'escriptori per a aquest usuari</translation> +<translation id="2675358154061544447">Compatibilitat molt experimental amb la renderització d'iframes entre llocs en processos separats. En aquest mode, els documents només comparteixen un procés de renderització si són del mateix lloc web.</translation> <translation id="2676946222714718093">En reproducció</translation> <translation id="2678063897982469759">Torna a activar</translation> <translation id="2678246812096664977">Tots els connectors</translation> @@ -1379,6 +1380,7 @@ <translation id="2960393411257968125">Manera en què el gestor de contrasenyes administra l'Emplenament automàtic per a les credencials de sincronització.</translation> <translation id="29611076221683977">Els atacants que actualment són a <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> poden provar d'instal·lar programes perillosos al dispositiu Mac amb els quals es pot robar o suprimir la vostra informació (per exemple, les fotos, les contrasenyes, els missatges i les targetes de crèdit).</translation> <translation id="2961695502793809356">Feu clic per anar endavant o manteniu premut per veure l'historial</translation> +<translation id="296216853343927883">Inclusió de la marca Google al menú contextual</translation> <translation id="2963151496262057773">El connector següent no respon: <ph name="PLUGIN_NAME" />. Voleu aturar-lo?</translation> <translation id="2963783323012015985">Teclat turc</translation> <translation id="2964193600955408481">Desactiva la Wi-Fi</translation> @@ -1428,6 +1430,16 @@ <translation id="3025729795978504041">Feu clic amb el botó secundari del ratolí al botó anterior per veure altres usuaris.</translation> <translation id="3026050830483105579">Ho teniu tot aquí.</translation> <translation id="302620147503052030">Mostra el botó</translation> +<translation id="302781076327338683">Actualitza i no desis a la memòria cau</translation> +<translation id="3030243755303701754">Un usuari supervisat pot explorar el web sota la vostra supervisió. Com a gestor d'un usuari supervisat a Chrome, podeu fer el següent: + + • Permetre o prohibir determinats llocs web. + • Consultar els llocs web visitats per l'usuari supervisat. + • Gestionar altres opcions de configuració. + +La creació d'un usuari supervisat no crea automàticament un compte de Google, i les adreces d'interès, l'historial de navegació i altres preferències no se sincronitzaran en altres dispositius amb la Sincronització de Chrome. Quan hàgiu creat un usuari supervisat, podeu gestionar-ne la configuració en qualsevol moment i des de qualsevol dispositiu a <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Per obtenir més informació sobre els usuaris supervisats, consulteu el <ph name="BEGIN_LINK" />Centre d'ajuda<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Seleccioneu els elements que voleu importar:</translation> <translation id="3033332627063280038">Activa la implementació experimental de Cache-Control: directiva d'inactivitat durant la revalidació. Això permet que els servidors especifiquin que alguns recursos es puguin revalidar en segon pla per millorar la latència.</translation> @@ -1647,7 +1659,6 @@ <translation id="3324301154597925148">Aquesta pàgina de cerca és la que esperàveu?</translation> <translation id="3324684065575061611">(Desactivat per una política d'empresa)</translation> <translation id="3326821416087822643">S'està comprimint <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Surt del mode de presentació</translation> <translation id="3330686263988132416">Capçalera d'origen Stun de WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Activa el mode de pantalla replicada. Aquest mode gira la imatge de la pantalla horitzontalment.</translation> @@ -1692,6 +1703,7 @@ <translation id="3392020134425442298">Recupera el fitxer maliciós</translation> <translation id="3394150261239285340"><ph name="HOST" /> vol utilitzar la càmera i el micròfon.</translation> <translation id="3394279550557729862">Permet utilitzar els missatges de notificacions natives i el centre de notificacions a les plataformes en què estan disponibles.</translation> +<translation id="3394862755749546286">Desactiva el pipeline multimèdia unificat (Android i ordinador) a Android.</translation> <translation id="3396331542604645348">La impressora seleccionada no està disponible o no s'ha instal·lat correctament. Comproveu la impressora o proveu de seleccionar-ne una altra.</translation> <translation id="3399597614303179694">Teclat macedoni</translation> <translation id="3401130144947259741">Si l'opció està activada, els esdeveniments de seguiment s'exporten a Event Tracing for Windows (ETW) i es poden capturar amb eines com UIForETW o Xperf.</translation> @@ -1902,7 +1914,6 @@ <translation id="367645871420407123">deixeu-ho en blanc si voleu establir el valor predeterminat de la imatge de prova com a contrasenya arrel</translation> <translation id="3678156199662914018">Extensió: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Teclat maltès</translation> -<translation id="3680173818488851340">Iframes de prioritat baixa.</translation> <translation id="3683524264665795342">Sol·licitud d'ús compartit de la pantalla de <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">La sincronització amb Google Drive està desactivada de manera predeterminada en utilitzar les dades mòbils.</translation> <translation id="3685387984467886507">Es recordaran les decisions relacionades amb els errors de SSL durant un període de temps especificat.</translation> @@ -1951,6 +1962,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ara es mostrarà a la Consola d'administració.</translation> <translation id="3741243925913727067">Crea còpies de seguretat de les fotos i dels vídeos del dispositiu multimèdia a Google Drive.</translation> <translation id="3743492083222969745">Activeu o desactiveu l'opció d'escriptura gestual a la pàgina de configuració del teclat virtual.</translation> +<translation id="3744111561329211289">Sincronització en segon pla</translation> <translation id="3749289110408117711">Nom del fitxer</translation> <translation id="3751427701788899101">S'ha perdut la connexió</translation> <translation id="3751522270321808809">El lloc pot mirar de robar-vos la informació (per exemple, les contrasenyes, els missatges o les targetes de crèdit).</translation> @@ -2267,6 +2279,7 @@ <translation id="4218259925454408822">Inicia la sessió amb un altre compte</translation> <translation id="4219614746733932747">Si s'activa aquesta opció, Blink utilitza el seu mecanisme de zoom per redimensionar el contingut per al factor d'escala del dispositiu.</translation> <translation id="4220865787605972627">Permet el calibratge de color de la pantalla si la pantalla admet aquesta funció.</translation> +<translation id="4232692576734035989">Mode de rendiment molt experimental en què els iframes entre llocs es mantenen en un procés separat del document principal. En aquest mode, els iframes de diferents llocs de tercers poden compartir un procés.</translation> <translation id="4235200303672858594">Tota la pantalla</translation> <translation id="4235813040357936597">Afegeix un compte per a: <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> no es pot visualitzar en aquest idioma</translation> @@ -2432,6 +2445,7 @@ <translation id="4509017836361568632">Descarta la foto</translation> <translation id="4509345063551561634">Ubicació:</translation> <translation id="4514542542275172126">Configura un usuari supervisat nou</translation> +<translation id="4514914692061505365">Força l'ús del traductor ràpid Subzero del PNaCl en tots els fitxers pexe.</translation> <translation id="4518677423782794009">Us trobeu que Chrome falla o mostra pàgines d'inici poc habituals, barres d'eines o anuncis inesperats de què no us podeu desfer? Altera la vostra experiència de navegació de cap altra manera? Executeu l'Eina per netejar Chrome per mirar de solucionar el problema.</translation> <translation id="452039078290142656">dispositius desconeguts del proveïdor <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalls</translation> @@ -2480,6 +2494,7 @@ <translation id="4595560905247879544">Només el gestor (<ph name="CUSTODIAN_NAME" />) pot modificar les aplicacions i les extensions.</translation> <translation id="4601242977939794209">Convertidor a EMF</translation> <translation id="4602466770786743961">Permet sempre que <ph name="HOST" /> accedeixi a la càmera i al micròfon</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">No està connectat a Internet</translation> <translation id="4608500690299898628">&Cerca...</translation> <translation id="4610637590575890427">Volíeu anar a <ph name="SITE" />?</translation> @@ -2781,6 +2796,7 @@ <translation id="5062930723426326933">S'ha produït un error en iniciar la sessió; connecteu-vos a Internet i torneu-ho a provar.</translation> <translation id="5063180925553000800">Nou PIN:</translation> <translation id="5067867186035333991">Pregunta si <ph name="HOST" /> vol accedir al micròfon</translation> +<translation id="5068918910148307423">No permetis que els llocs tancats recentment acabin d'enviar i rebre dades</translation> <translation id="507075806566596212">Esteu a punt de registrar aquest dispositiu <ph name="DEVICE_TYPE" /> a Google perquè es pugui localitzar, esborrar-ne les dades i bloquejar-lo remotament. Caldrà que el reinicieu. Voleu continuar?</translation> <translation id="5072836811783999860">Mostra les adreces d'interès gestionades</translation> <translation id="5074318175948309511">És possible que hàgiu de tornar a carregar aquesta pàgina perquè s'apliqui la configuració nova.</translation> @@ -2889,6 +2905,7 @@ <translation id="5227808808023563348">Cerca el text anterior</translation> <translation id="5228076606934445476">S'ha produït algun error amb el dispositiu. Per recuperar-vos d'aquest error, cal que reinicieu el dispositiu i ho torneu a provar.</translation> <translation id="5228962187251412618">Només comprovació en línia</translation> +<translation id="5229622432348746578">Desactiva l'àudio als escriptoris compartits</translation> <translation id="5230516054153933099">Finestra</translation> <translation id="5232178406098309195">En utilitzar les ordres d'activació de l'àudio, com ara "Ok Google" o tocar una icona de micròfon, la funció d'activitat privada de veu i d'àudio emmagatzema algunes d'aquestes activitats al vostre compte. Es desa un enregistrament de la veu o de l'àudio següent, a més d'uns quants segons anteriors.</translation> <translation id="523299859570409035">Excepcions de notificacions</translation> @@ -3143,6 +3160,7 @@ <translation id="5557991081552967863">No desactivis la Wi-Fi durant el repòs</translation> <translation id="5558129378926964177">&Amplia</translation> <translation id="556042886152191864">Botó</translation> +<translation id="5562781907504170924">Aquesta pestanya està connectada a un dispositiu Bluetooth</translation> <translation id="5565871407246142825">Targetes de crèdit</translation> <translation id="5567989639534621706">Memòries cau de l'aplicació</translation> <translation id="5568069709869097550">No puc accedir</translation> @@ -3303,6 +3321,7 @@ <translation id="5803531701633845775">Tria frases de darrere sense moure el cursor</translation> <translation id="5804241973901381774">Permisos</translation> <translation id="580571955903695899">Torna a ordenar per títol</translation> +<translation id="5808982448801399019">No s'ha pogut completar l'autorització</translation> <translation id="580961539202306967">Pregunta'm quan un lloc vulgui enviar-me missatges de tramesa automàtica (recomanat)</translation> <translation id="5815645614496570556">Adreça X.400</translation> <translation id="5817397429773072584">Xinès tradicional</translation> @@ -3573,6 +3592,7 @@ <translation id="6243774244933267674">El servidor no està disponible</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Actualització a punt.</translation> +<translation id="6248400709929739064">Activa els subtítols</translation> <translation id="6248988683584659830">Cerca a la configuració</translation> <translation id="6251870443722440887">Controls GDI</translation> <translation id="6251889282623539337">Termes i condicions de <ph name="DOMAIN" /></translation> @@ -3597,6 +3617,7 @@ <translation id="6277105963844135994">Temps d'espera de la xarxa</translation> <translation id="6277518330158259200">Fes una c&aptura de pantalla</translation> <translation id="6279183038361895380">Premeu |<ph name="ACCELERATOR" />| per veure el cursor</translation> +<translation id="6280215091796946657">Inicia la sessió amb un altre compte</translation> <translation id="6281743458679673853">Experimenteu perquè la finestra gràfica de disseny es reflecteixi en totes les API. Això farà que les propietats de window.scroll estiguin relacionades amb la finestra gràfica de disseny.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Impressora nova a la xarxa}other{Impressores noves a la xarxa}}</translation> <translation id="6285395082104474418">La safata d'estat mostra l'estat actual de la xarxa, de la bateria i molt més.</translation> @@ -3678,6 +3699,9 @@ <translation id="6418160186546245112">S'està tornant a la versió de <ph name="IDS_SHORT_PRODUCT_NAME" /> instal·lada anteriorment.</translation> <translation id="6418481728190846787">Retira l'accés a totes les aplicacions permanentment</translation> <translation id="6418505248408153264">Activa l'historial de Material Design</translation> +<translation id="6419288379019356534"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> gestiona aquest dispositiu. + <ph name="LINE_BREAK" /> + Feu clic a Següent per continuar iniciant la sessió al compte del domini <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Europa central</translation> <translation id="6420676428473580225">Afegeix a l'escriptori</translation> <translation id="6422329785618833949">Foto girada</translation> @@ -3837,7 +3861,6 @@ <translation id="6662016084451426657">Error de sincronització: contacteu amb l'administrador per activar la sincronització.</translation> <translation id="6663792236418322902">La contrasenya que trieu es demanarà per restaurar aquest fitxer més endavant. Registreu-la en un lloc segur.</translation> <translation id="6664237456442406323">L'ordinador està configurat amb un ID de maquinari amb un format incorrecte. Això impedeix a Chrome OS actualitzar-se amb les darreres correccions de seguretat i <ph name="BEGIN_BOLD" />pot ser que l'ordinador sigui vulnerable a atacs maliciosos<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Redueix la prioritat de càrrega dels recursos iframe.</translation> <translation id="6666647326143344290">amb el vostre Compte de Google</translation> <translation id="6675665718701918026">S'ha connectat un dispositiu per apuntar</translation> <translation id="6677037229676347494">L'ID esperat era "<ph name="EXPECTED_ID" />", però el real era "<ph name="NEW_ID" />".</translation> @@ -3930,6 +3953,7 @@ <translation id="6825883775269213504">Rus</translation> <translation id="6827236167376090743">La reproducció d'aquest vídeo continuarà indefinidament.</translation> <translation id="6828153365543658583">Restringeix l'inici de sessió als usuaris següents:</translation> +<translation id="6828434191343384461">Les dades seleccionades s'han suprimit de Chrome i dels dispositius sincronitzats. És possible que el vostre compte de Google tingui altres formes de l'historial de navegació, com ara les cerques i l'activitat d'altres serveis de Google a l'adreça <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">No s'han pogut configurar actualitzacions automàtiques per a tots els usuaris (error d'execució preliminar: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Obteniu ajuda per al dispositiu <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Inscripció a la vostra organització</translation> @@ -4010,6 +4034,7 @@ <translation id="6965382102122355670">D'acord</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Dispositiu</translation> +<translation id="6969104364835835175">Força Subzero del PNaCl</translation> <translation id="6970230597523682626">Búlgar</translation> <translation id="6970480684834282392">Tipus d'inici</translation> <translation id="6970856801391541997">Imprimeix pàgines específiques</translation> @@ -4093,10 +4118,12 @@ <translation id="7057058088140140610">Targetes de crèdit i adreces que fan servir Google Payments</translation> <translation id="7059858479264779982">Defineix com a inici automàtic</translation> <translation id="7061692898138851896">Desa les contrasenyes automàticament</translation> +<translation id="7062222374113411376">Permet que els llocs tancats recentment acabin d'enviar i rebre dades (opció recomanada)</translation> <translation id="7063129466199351735">S'estan processant les dreceres...</translation> <translation id="7065223852455347715">Aquest dispositiu està bloquejat de tal manera que no permet la inscripció empresarial. Si voleu inscriure el dispositiu, primer cal que el recupereu.</translation> <translation id="7065534935986314333">Quant al Sistema</translation> <translation id="7066944511817949584">No s'ha pogut connectar amb "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">No m'ho tornis a mostrar</translation> <translation id="7070804685954057874">Entrada directa</translation> <translation id="7072010813301522126">Nom de la drecera</translation> <translation id="7072025625456903686">Permet-ho tot o personalitza</translation> @@ -4363,6 +4390,7 @@ <translation id="7489605380874780575">Comprova l'aptitud</translation> <translation id="749028671485790643">Persona <ph name="VALUE" /></translation> <translation id="7491962110804786152">pestanya</translation> +<translation id="7493386493263658176">És possible que l'extensió <ph name="EXTENSION_NAME" /> recopili tot el que escriviu, incloses les dades personals, com ara les contrasenyes i els números de targetes de crèdit. Voleu fer-la servir?</translation> <translation id="7495778526395737099">Heu oblidat la contrasenya antiga?</translation> <translation id="7503191893372251637">Tipus de certificat de Netscape</translation> <translation id="7503821294401948377">No s'ha pogut carregar la icona "<ph name="ICON" />" per a l'acció del navegador.</translation> @@ -4412,6 +4440,7 @@ <translation id="756445078718366910">Obre una finestra del navegador</translation> <translation id="7564847347806291057">Finalitza el procés</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">S'han esborrat les dades de Chrome</translation> <translation id="7568790562536448087">Actualització</translation> <translation id="7573172247376861652">Càrrega de la bateria</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4541,6 +4570,7 @@ <translation id="7786207843293321886">Surt de la sessió de convidat</translation> <translation id="7786889348652477777">&Tornar a carregar l'aplicació</translation> <translation id="7787129790495067395">Actualment utilitzeu una frase de contrasenya. Si no la recordeu, podeu restablir la sincronització per esborrar les dades dels servidors de Google mitjançant Google Dashboard.</translation> +<translation id="7787308148023287649">Mostra en una altra pantalla</translation> <translation id="7788080748068240085">Per desar "<ph name="FILE_NAME" />" fora de línia, cal que allibereu <ph name="TOTAL_FILE_SIZE" /> més d'espai:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Desfixeu els fitxers als quals ja no necessiteu accedir fora de línia<ph name="MARKUP_3" />. <ph name="MARKUP_4" />Suprimiu fitxers de la carpeta Baixades<ph name="MARKUP_5" />.</translation> @@ -4609,6 +4639,7 @@ <translation id="7878999881405658917">Google ha enviat una notificació a aquest telèfon. Tingueu en compte que, amb Bluetooth, el telèfon pot mantenir el dispositiu <ph name="DEVICE_TYPE" /> desbloquejat des d'una distància superior a 9 metres. Si en algun moment això pot suposar un problema, podeu <a>desactivar la funció temporalment</a>.</translation> <translation id="7879478708475862060">Segueix el mode d'entrada</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" afegeix aquestes aplicacions i extensions</translation> +<translation id="7881969471599061635">Desactiva els subtítols</translation> <translation id="7884988936047469945">Funcions experimentals d'accessibilitat</translation> <translation id="7885253890047913815">Destinacions recents</translation> <translation id="7885283703487484916">molt curt</translation> @@ -4972,6 +5003,7 @@ <translation id="839736845446313156">Registra</translation> <translation id="8398790343843005537">Cerca el telèfon</translation> <translation id="8398877366907290961">Continua igualment</translation> +<translation id="8399276228600040370">Inicieu la sessió amb el compte desat a <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Casella de selecció desactivada</translation> <translation id="8408402540408758445">Fes una cerca prèvia dels resultats de la cerca</translation> <translation id="8410073653152358832">Utilitza aquest telèfon</translation> @@ -5058,6 +5090,7 @@ <translation id="8545211332741562162">Permet que les pàgines web facin servir funcions JavaScript experimentals.</translation> <translation id="8545575359873600875">No s'ha pogut verificar la vostra contrasenya. Pot ser que l'administrador d'aquest usuari supervisat l'hagi canviat recentment. Si és així, la contrasenya nova s'aplicarà la propera vegada que inicieu la sessió. Proveu d'utilitzar la contrasenya anterior.</translation> <translation id="8546306075665861288">Memòria cau d'imatges</translation> +<translation id="854653344619327455">Si aquesta marca està activada, la finestra d'opcions per compartir l'escriptori no permetrà que l'usuari triï si vol compartir l'àudio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Caràcter</translation> <translation id="855081842937141170">Fixa la pestanya</translation> @@ -5088,6 +5121,7 @@ <translation id="8589311641140863898">API d'extensions experimentals</translation> <translation id="8590375307970699841">Configurar actualitzacions automàtiques</translation> <translation id="8592071947729879125">Restringeix els permisos d'iframe.</translation> +<translation id="8592125506633137593">Aïllament del document principal</translation> <translation id="8594787581355215556">Heu iniciat la sessió com a <ph name="USER_EMAIL_ADDRESS" />. Gestioneu les dades sincronitzades al <ph name="BEGIN_LINK" />Tauler de control de Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Fitxers personalitzats</translation> <translation id="8596785155158796745">El micròfon no està disponible en aquest moment. <ph name="BEGIN_LINK" />Gestiona el micròfon<ph name="END_LINK" /></translation> @@ -5160,6 +5194,7 @@ <translation id="8688579245973331962">No veieu el vostre nom?</translation> <translation id="8688644143607459122">En fer clic a Continua, accepteu l'ús de Google Payments. Per protegir-vos dels fraus, es compartirà informació sobre el vostre ordinador (inclosa la ubicació) amb Google Payments.</translation> <translation id="8689102680909215706">L'extensió <ph name="EXTENSION_NAME" /> s'ha instal·lat remotament.</translation> +<translation id="868926756781121513">Escriptori compartit amb pestanya</translation> <translation id="8689341121182997459">Caduca:</translation> <translation id="8690754533598178758">Les excepcions del micròfon d'Adobe Flash Player són diferents.</translation> <translation id="8691686986795184760">(Activat per la política d'empresa)</translation> @@ -5203,6 +5238,7 @@ <translation id="8737685506611670901">Obrir els enllaços del protocol <ph name="PROTOCOL" /> en lloc del gestor <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Defineix millor la posició d'un gest tàctil per poder compensar els tocs que tenen poca resolució en comparació amb un ratolí.</translation> +<translation id="8741995161408053644">És possible que el vostre compte de Google tingui altres formes de l'historial de navegació a l'adreça <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Mostra opcions d'entrada ampliades al prestatge.</translation> <translation id="874420130893181774">Mètode d'introducció de pinyin tradicional</translation> <translation id="8744525654891896746">Selecció d'un avatar per a l'usuari supervisat</translation> @@ -5216,6 +5252,7 @@ <translation id="8757640015637159332">Entrada a sessió pública</translation> <translation id="8757742102600829832">Seleccioneu un dispositiu Chromebox al qual us vulgueu connectar</translation> <translation id="8757803915342932642">Dispositiu als dispositius de Google Cloud</translation> +<translation id="8758895886513993540">Aquesta marca controla si els usuaris poden triar una pestanya per als escriptoris compartits.</translation> <translation id="8759408218731716181">No es pot configurar l'inici de sessió múltiple</translation> <translation id="8759753423332885148">Més informació</translation> <translation id="8761567432415473239">Recentment, amb Navegació segura de Google s'han <ph name="BEGIN_LINK" />detectat programes perjudicials<ph name="END_LINK" /> al lloc <ph name="SITE" />.</translation> @@ -5426,6 +5463,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Ratolí USB connectat</translation> <translation id="9076523132036239772">No s'ha pogut verificar el correu electrònic o la contrasenya. Proveu de connectar-vos primer a una xarxa.</translation> +<translation id="9077132661879924646">Desactiva el pipeline multimèdia unificat a Android</translation> <translation id="907841381057066561">No s'ha pogut crear el fitxer ZIP temporal durant l'empaquetament.</translation> <translation id="9083147368019416919">No s'ha pogut cancel·lar el registre</translation> <translation id="9084064520949870008">Obre com a finestra</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index af9f5d8c..6485386e 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Vyberte čtvercovou oblast obrázku.</translation> <translation id="1697532407822776718">Vše je nastaveno!</translation> +<translation id="1697988819212986149">Zobrazí ikonu Google u položek kontextové nabídky, které využívají služby Google.</translation> <translation id="1699274548822076330">Tento příznak se bude používat ve spojení s příznakem trace-upload-url. UPOZORNĚNÍ: Když toto pravidlo povolíte, Chrome bude zaznamenávat data o výkonu prohlížení internetu a nahrávat je na adresu URL zadanou příznakem trace-upload-url. Tyto záznamy mohou obsahovat údaje umožňující zjištění totožnosti, například názvy a adresy webů, které navštěvujete.</translation> <translation id="1699395855685456105">Revize hardwaru:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">Aktualizujte prosím heslovou frázi pro synchronizaci.</translation> <translation id="1788636309517085411">Použít výchozí umístění</translation> <translation id="1789575671122666129">Vyskakovací okna</translation> -<translation id="1790550373387225389">Vstoupit do režimu prezentace</translation> <translation id="1792705092719258158">Zapnout režim zrcadlení obrazovky.</translation> <translation id="1793119619663054394">Opravdu z tohoto počítače profil <ph name="PROFILE_NAME" /> a všechna přidružená data v Chromu chcete odstranit? Tuto operaci nelze vrátit zpět.</translation> <translation id="179767530217573436">z posledních 4 týdnů</translation> @@ -1152,6 +1152,7 @@ <translation id="267285457822962309">Změnit nastavení vašeho zařízení a periferních zařízení.</translation> <translation id="2673135533890720193">Čtení vaší historie procházení</translation> <translation id="2673589024369449924">Vytvořit na ploše zástupce tohoto uživatele</translation> +<translation id="2675358154061544447">Vysoce experimentální podpora vykreslování prvků iframe napříč weby v samostatných procesech. V tomto režimu budou dokumenty sdílet stejný proces modulu vykreslení jen v případě, že pocházejí ze stejné webové stránky.</translation> <translation id="2676946222714718093">Přehrávání v zařízení</translation> <translation id="2678063897982469759">Znovu aktivovat</translation> <translation id="2678246812096664977">Všechny pluginy</translation> @@ -1378,6 +1379,7 @@ <translation id="2960393411257968125">Jak správce hesel nakládá s automatickým vyplňováním pro identifikační údaje k synchronizaci.</translation> <translation id="29611076221683977">Útočníci, kteří se aktuálně nacházejí na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, se mohou pokusit nainstalovat do vašeho počítače Mac nebezpečné programy, které mohou ukrást nebo smazat vaše informace (například fotky, hesla, zprávy nebo platební karty).</translation> <translation id="2961695502793809356">Kliknutím přejdete vpřed, přidržením se zobrazí historie</translation> +<translation id="296216853343927883">Branding Google v kontextové nabídce</translation> <translation id="2963151496262057773">Následující plugin nereaguje: <ph name="PLUGIN_NAME" /> Chcete jej zastavit?</translation> <translation id="2963783323012015985">Turecká klávesnice</translation> <translation id="2964193600955408481">Vypnout Wi-Fi</translation> @@ -1427,6 +1429,16 @@ <translation id="3025729795978504041">Chcete-li zobrazit další lidi, klikněte pravým tlačítkem na tlačítko výše.</translation> <translation id="3026050830483105579">Vše je zde.</translation> <translation id="302620147503052030">Zobrazit tlačítko</translation> +<translation id="302781076327338683">Znovu načíst bez použití mezipaměti</translation> +<translation id="3030243755303701754">Dozorovaný uživatel může procházet web podle vašich pravidel. Jako správce dozorovaného uživatele v Chromu můžete: + + • povolit nebo zakázat některé weby, + • kontrolovat weby, které dozorovaný uživatel navštívil, + • spravovat jiná nastavení. + +Vytvořením dozorovaného uživatele se nevytvoří účet Google. Záložky, historie prohlížení a další nastavení uživatele se nebude synchronizovat do dalších zařízení pomocí Synchronizace Chrome. Po vytvoření nového dozorovaného uživatele můžete jeho nastavení spravovat na stránce <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />, a to kdykoli a z libovolného zařízení. + +Další informace naleznete v <ph name="BEGIN_LINK" />centru nápovědy<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agentka</translation> <translation id="3031557471081358569">Vyberte položky k importu:</translation> <translation id="3033332627063280038">Aktivuje experimentální implementaci direktivy Cache-Control: stale-while-revalidate. Tato direktiva serverům umožňuje určit, že lze z důvodu zlepšení latence u některých zdrojů provést opětovné ověření na pozadí.</translation> @@ -1644,7 +1656,6 @@ <translation id="3324301154597925148">Je toto stránka vyhledávání, kterou jste očekávali?</translation> <translation id="3324684065575061611">(Deaktivováno podnikovými zásadami)</translation> <translation id="3326821416087822643">Komprimace souboru <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Ukončit režim prezentace</translation> <translation id="3330686263988132416">Záhlaví původu Stun WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Aktivovat režim zrcadlené obrazovky. Tento režim vodorovně zrcadlově obrátí obsah obrazovky.</translation> @@ -1689,6 +1700,7 @@ <translation id="3392020134425442298">Obnovit škodlivý soubor</translation> <translation id="3394150261239285340">Webová stránka <ph name="HOST" /> chce použít váš mikrofon a kameru.</translation> <translation id="3394279550557729862">Aktivuje podporu nativních vyskakovacích oznámení a centra oznámení na platformách, kde jsou tyto funkce dostupné.</translation> +<translation id="3394862755749546286">Deaktivuje sjednocený kanál médií pro Android (týká se médií určených pro Android a pro počítače).</translation> <translation id="3396331542604645348">Zvolená tiskárna není k dispozici nebo není správně nainstalovaná. Zkontrolujte tiskárnu nebo vyberte jinou.</translation> <translation id="3399597614303179694">Makedonská klávesnice</translation> <translation id="3401130144947259741">Pokud je tato možnost aktivována, události trasování budou exportovány do Trasování událostí pro Windows (ETW) a následně je bude možné zachytit pomocí nástroje UIForETW nebo Xperf.</translation> @@ -1899,7 +1911,6 @@ <translation id="367645871420407123">Chcete-li heslo uživatele root nastavit na výchozí hodnotu testovacího obrazu, ponechte toto pole prázdné.</translation> <translation id="3678156199662914018">Rozšíření: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltská klávesnice</translation> -<translation id="3680173818488851340">Prvky iframe s nízkou prioritou</translation> <translation id="3683524264665795342">Požadavek na sdílení obrazovky s aplikací <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Když používáte mobilní datové připojení, synchronizace s Diskem Google je ve výchozím nastavení vypnutá.</translation> <translation id="3685387984467886507">Umožňuje na určitou dobu si pamatovat rozhodnutí o pokračování po chybách SSL.</translation> @@ -1948,6 +1959,7 @@ <translation id="3741158646617793859">Zařízení <ph name="DEVICE_NAME" /> se nyní bude zobrazovat v administrátorské konzoli</translation> <translation id="3741243925913727067">Zálohujte fotky a videa ze svého mediálního zařízení na Disk Google.</translation> <translation id="3743492083222969745">Povolí/zakáže nastavení možnosti psaní gesty na virtuální klávesnici.</translation> +<translation id="3744111561329211289">Synchronizace na pozadí</translation> <translation id="3749289110408117711">Název souboru</translation> <translation id="3751427701788899101">Připojení bylo ztraceno</translation> <translation id="3751522270321808809">Tyto stránky se mohou pokusit podvodem získat vaše informace (například hesla, zprávy nebo platební karty).</translation> @@ -2264,6 +2276,7 @@ <translation id="4218259925454408822">Přihlásit jiný účet</translation> <translation id="4219614746733932747">Pokud je tento příznak aktivován, Blink použije mechanismus přibližování, aby přizpůsobil obsah měřítku zařízení.</translation> <translation id="4220865787605972627">Povolí barevnou kalibraci displeje v případě, že displej tuto funkci podporuje.</translation> +<translation id="4232692576734035989">Vysoce experimentální režim, při kterém jsou prvky iframe napříč weby vykreslovány v samostatných procesech oddělených od hlavního dokumentu. V tomto režimu budou prvky iframe z různých webů třetích stran moci sdílet stejný proces.</translation> <translation id="4235200303672858594">Celá obrazovka</translation> <translation id="4235813040357936597">Přidat účet pro profil <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">V tomto jazyce systém <ph name="PRODUCT_NAME" /> nelze použít.</translation> @@ -2429,6 +2442,7 @@ <translation id="4509017836361568632">Smazat fotku</translation> <translation id="4509345063551561634">Umístění:</translation> <translation id="4514542542275172126">Nastavení nového dozorovaného uživatele</translation> +<translation id="4514914692061505365">Vynutit použití rychlého překladače Subzero klienta PNaCl pro všechny soubory pexe.</translation> <translation id="4518677423782794009">Dochází k selhání Chromu, zobrazují se neobvyklé počáteční stránky nebo panely nástrojů, neočekávané reklamy, kterých se nelze zbavit, nebo jste zaznamenali jiné změny chování při procházení internetu? Problém by mělo vyřešit spuštění nástroje Chrome Cleanup Tool.</translation> <translation id="452039078290142656">neznámá zařízení od dodavatele <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Podrobnosti</translation> @@ -2477,6 +2491,7 @@ <translation id="4595560905247879544">Aplikace a rozšíření může upravit pouze správce (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Konvertor do formátu EMF</translation> <translation id="4602466770786743961">Vždy povolit webu <ph name="HOST" /> přístup k webové kameře a mikrofonu</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Připojení k internetu není k dispozici</translation> <translation id="4608500690299898628">&Najít...</translation> <translation id="4610637590575890427">Chtěli jste přejít na <ph name="SITE" />?</translation> @@ -2779,6 +2794,7 @@ <translation id="5062930723426326933">Přihlášení se nezdařilo. Připojte se prosím k internetu a zkuste to znovu.</translation> <translation id="5063180925553000800">Nový kód PIN:</translation> <translation id="5067867186035333991">Zobrazit dotaz, pokud bude chtít web <ph name="HOST" /> používat mikrofon</translation> +<translation id="5068918910148307423">Nepovolovat nedávno zavřeným webům dokončit odeslání a příjem dat</translation> <translation id="507075806566596212">Chystáte se toto zařízení <ph name="DEVICE_TYPE" /> zaregistrovat na Google za účelem aktivace možnosti vzdáleného vyhledání, smazání a uzamčení zařízení. Tato akce bude vyžadovat restart. Opravdu chcete pokračovat?</translation> <translation id="5072836811783999860">Zobrazit spravované záložky</translation> <translation id="5074318175948309511">Aby nové nastavení vstoupilo v platnost, pravděpodobně bude nutné načíst stránku znovu.</translation> @@ -2886,6 +2902,7 @@ <translation id="5227808808023563348">Vyhledat předchozí text</translation> <translation id="5228076606934445476">V zařízení došlo k chybě. Pokud chcete systém po chybě obnovit, bude třeba zařízení restartovat a zkusit to znovu.</translation> <translation id="5228962187251412618">Pouze online kontrola</translation> +<translation id="5229622432348746578">Zakázat sdílení zvuku mezi počítači</translation> <translation id="5230516054153933099">Okno</translation> <translation id="5232178406098309195">Když použijete zvukové aktivační příkazy, jako je „Ok Google“ nebo klepnete na ikonu mikrofonu, vaše soukromá Hlasová a zvuková aktivita do vašeho účtu uloží část vašeho hlasu a další zvukové aktivity. Uloží se záznam následující řeči nebo zvuku a několika sekund předtím.</translation> <translation id="523299859570409035">Výjimky oznámení</translation> @@ -3140,6 +3157,7 @@ <translation id="5557991081552967863">Při spánku ponechat zapnutou síť Wi-Fi</translation> <translation id="5558129378926964177">&Přiblížit</translation> <translation id="556042886152191864">Tlačítko</translation> +<translation id="5562781907504170924">Tato karta je propojena se zařízením Bluetooth.</translation> <translation id="5565871407246142825">Platební karty</translation> <translation id="5567989639534621706">Mezipaměti aplikací</translation> <translation id="5568069709869097550">Nepodařilo se přihlásit</translation> @@ -3299,6 +3317,7 @@ <translation id="5803531701633845775">Vybírat sousloví odzadu bez přesunutí kurzoru</translation> <translation id="5804241973901381774">Oprávnění</translation> <translation id="580571955903695899">Znovu uspořádat podle názvu</translation> +<translation id="5808982448801399019">Autorizace se nezdařila</translation> <translation id="580961539202306967">Zeptat se, když mi chce web odeslat nabízenou zprávu (doporučeno)</translation> <translation id="5815645614496570556">Adresa X.400</translation> <translation id="5817397429773072584">Tradiční čínština</translation> @@ -3570,6 +3589,7 @@ <translation id="6243774244933267674">Server není dostupný</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Je připravena aktualizace</translation> +<translation id="6248400709929739064">Zapnout titulky</translation> <translation id="6248988683584659830">Prohledat nastavení</translation> <translation id="6251870443722440887">Popisovače – GDI</translation> <translation id="6251889282623539337">Smluvní podmínky služby <ph name="DOMAIN" /></translation> @@ -3594,6 +3614,7 @@ <translation id="6277105963844135994">Vypršel časový limit sítě</translation> <translation id="6277518330158259200">&Pořídit snímek obrazovky</translation> <translation id="6279183038361895380">Kurzor zobrazíte stisknutím klávesy |<ph name="ACCELERATOR" />|</translation> +<translation id="6280215091796946657">Přihlásit se pomocí jiného účtu</translation> <translation id="6281743458679673853">Experiment, který umožňuje všem rozhraním API reflektovat viewport rozvržení. Nastavení window.scroll bude tudíž vycházet z viewportu rozvržení.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nová tiskárna v síti}few{Nové tiskárny v síti}many{Nové tiskárny v síti}other{Nové tiskárny v síti}}</translation> <translation id="6285395082104474418">Na stavovém panelu se zobrazuje aktuální stav sítě a baterie a další informace.</translation> @@ -3675,6 +3696,9 @@ <translation id="6418160186546245112">Obnovování předchozí nainstalované verze aplikace <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Natrvalo odebrat přístup všem aplikacím</translation> <translation id="6418505248408153264">Aktivovat historii se vzhledem Material Design</translation> +<translation id="6419288379019356534">Toto zařízení spravuje doména <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Chcete-li pokračovat s přihlášením k účtu <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, klikněte na Další.</translation> <translation id="6419902127459849040">Středoevropské jazyky</translation> <translation id="6420676428473580225">Přidat na plochu</translation> <translation id="6422329785618833949">Fotka byla zrcadlově obrácena</translation> @@ -3835,7 +3859,6 @@ <translation id="6662016084451426657">Chyba synchronizace: Obraťte se prosím na administrátora kvůli povolení synchronizace.</translation> <translation id="6663792236418322902">Heslo, které si vyberete, budete později potřebovat k obnovení souboru. Bezpečně je uschovejte.</translation> <translation id="6664237456442406323">Váš počítač je bohužel nakonfigurován pomocí chybného čísla hardwaru. Systému Chrome OS to zabraňuje získat aktualizace s nejnovějšími bezpečnostními opravami, a počítač tak <ph name="BEGIN_BOLD" />může být zranitelnější vůči škodlivým úrokům<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Sníží prioritu načítání zdrojů prvků iframe.</translation> <translation id="6666647326143344290">pomocí účtu Google</translation> <translation id="6675665718701918026">Je připojeno polohovací zařízení</translation> <translation id="6677037229676347494">Očekávané ID bylo <ph name="EXPECTED_ID" />. Skutečné ID bylo <ph name="NEW_ID" />.</translation> @@ -3928,6 +3951,7 @@ <translation id="6825883775269213504">ruština</translation> <translation id="6827236167376090743">Toto video se bude přehrávat až do skonání času.</translation> <translation id="6828153365543658583">Omezit přihlášení na následující uživatele:</translation> +<translation id="6828434191343384461">Vybraná data byla z Chromu a synchronizovaných zařízení odstraněna. Na stránce <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google, například vyhledávací dotazy a aktivita z ostatních služeb Google.</translation> <translation id="6828860976882136098">Nastavení automatických aktualizací pro všechny uživatele se nezdařilo (chyba při předběžném spuštění: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Získejte nápovědu k zařízení <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registrace do organizace</translation> @@ -4007,6 +4031,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Zařízení</translation> +<translation id="6969104364835835175">Vynucení překladače Subzero pro PNaCl</translation> <translation id="6970230597523682626">bulharština</translation> <translation id="6970480684834282392">Typ spouštění</translation> <translation id="6970856801391541997">Tisknout konkrétní stránky</translation> @@ -4092,10 +4117,12 @@ <translation id="7057058088140140610">Platební karty a adresy pomocí služby Google Playments</translation> <translation id="7059858479264779982">Nastavit na automatické spouštění</translation> <translation id="7061692898138851896">Ukládat hesla automaticky</translation> +<translation id="7062222374113411376">Povolit nedávno zavřeným webům dokončit odeslání a příjem dat (doporučeno)</translation> <translation id="7063129466199351735">Zpracování zástupců...</translation> <translation id="7065223852455347715">Toto zařízení je uzamčeno v režimu, který brání registraci v podniku. Chcete-li zařízení zaregistrovat, je nutné nejdříve provést obnovení zařízení.</translation> <translation id="7065534935986314333">O systému</translation> <translation id="7066944511817949584">Nepodařilo se připojit k zařízení <ph name="DEVICE_NAME" />.</translation> +<translation id="7067725467529581407">Tento dialog již nezobrazovat.</translation> <translation id="7070804685954057874">Přímé zadávání textu</translation> <translation id="7072010813301522126">Název zástupce</translation> <translation id="7072025625456903686">Povolit vše nebo přizpůsobit</translation> @@ -4366,6 +4393,7 @@ <translation id="7489605380874780575">Zkontrolovat způsobilost</translation> <translation id="749028671485790643">Osoba <ph name="VALUE" /></translation> <translation id="7491962110804786152">karta</translation> +<translation id="7493386493263658176">Rozšíření <ph name="EXTENSION_NAME" /> může shromažďovat veškerý text, který napíšete, včetně osobních údajů, jako jsou hesla nebo čísla platebních karet. Chcete toto rozšíření použít?</translation> <translation id="7495778526395737099">Zapomněli jste své staré heslo?</translation> <translation id="7503191893372251637">Certifikát typu Netscape</translation> <translation id="7503821294401948377">Nelze načíst ikonu „<ph name="ICON" />“ pro akci prohlížeče.</translation> @@ -4415,6 +4443,7 @@ <translation id="756445078718366910">Otevřít okno prohlížeče</translation> <translation id="7564847347806291057">Ukončit proces</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Vymazání údajů Chromu</translation> <translation id="7568790562536448087">Aktualizace</translation> <translation id="7573172247376861652">Nabití baterie</translation> <translation id="7576032389798113292">6:4</translation> @@ -4544,6 +4573,7 @@ <translation id="7786207843293321886">Odhlásit hosta</translation> <translation id="7786889348652477777">Znovu načíst &aplikaci</translation> <translation id="7787129790495067395">Momentálně používáte heslovou frázi. Pokud jste ji zapomněli, můžete synchronizaci resetovat a vymazat data ze serverů společnosti Google pomocí Hlavního panelu Google.</translation> +<translation id="7787308148023287649">Zobrazit na jiné obrazovce</translation> <translation id="7788080748068240085">Chcete-li soubor <ph name="FILE_NAME" /> uložit offline, je třeba uvolnit <ph name="TOTAL_FILE_SIZE" /> dalšího místa:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Zrušte připnutí souborů, ke kterým již nepotřebujete přístup v režimu offline.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Smažte soubory ze složky Stažené soubory.<ph name="MARKUP_5" /></translation> @@ -4612,6 +4642,7 @@ <translation id="7878999881405658917">Google do tohoto telefonu odeslal oznámení. Připomínáme, že díky rozhraní Bluetooth může telefon zařízení <ph name="DEVICE_TYPE" /> udržovat odemčené až na vzdálenost 10 metrů. V případě potíží tuto funkci můžete <a>dočasně vypnout</a>.</translation> <translation id="7879478708475862060">Sledovat režim vstupu</translation> <translation id="7880836220014399562">Balíček <ph name="BUNDLE_NAME" /> přidá tyto aplikace a rozšíření:</translation> +<translation id="7881969471599061635">Vypnout titulky</translation> <translation id="7884988936047469945">Experimentální funkce přístupnosti</translation> <translation id="7885253890047913815">Nedávné cíle</translation> <translation id="7885283703487484916">velmi krátké</translation> @@ -4977,6 +5008,7 @@ <translation id="839736845446313156">Registrace</translation> <translation id="8398790343843005537">Najděte svůj telefon</translation> <translation id="8398877366907290961">Přesto pokračovat</translation> +<translation id="8399276228600040370">Přihlásit se pomocí účtu uloženého pomocí správce <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Prázdné zaškrtávací políčko</translation> <translation id="8408402540408758445">Předběžné načítání výsledků vyhledávání</translation> <translation id="8410073653152358832">Použít tento telefon</translation> @@ -5063,6 +5095,7 @@ <translation id="8545211332741562162">Povolí webovým stránkám používat experimentální funkce jazyka JavaScript</translation> <translation id="8545575359873600875">Litujeme, heslo se nepodařilo ověřit. Heslo pravděpodobně nedávno změnil správce tohoto dozorovaného uživatele. Pokud je tomu tak, nové heslo se použije až při příštím přihlášení. Zkuste použít původní heslo.</translation> <translation id="8546306075665861288">Mezipaměť obrázků</translation> +<translation id="854653344619327455">Pokud je tento příznak aktivní, v okně výběru sdílení počítače si uživatel nemůže vybrat, zda chce sdílet zvuk.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Znak</translation> <translation id="855081842937141170">Připnout kartu</translation> @@ -5093,6 +5126,7 @@ <translation id="8589311641140863898">Experimentální rozhraní API rozšíření</translation> <translation id="8590375307970699841">Nastavit automatické aktualizace</translation> <translation id="8592071947729879125">Omezit oprávnění v prvcích iframe</translation> +<translation id="8592125506633137593">Izolace hlavního dokumentu</translation> <translation id="8594787581355215556">Jste přihlášeni jako <ph name="USER_EMAIL_ADDRESS" />. Synchronizaci dat můžete spravovat pomocí <ph name="BEGIN_LINK" />Hlavního panelu Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Vlastní soubory</translation> <translation id="8596785155158796745">Mikrofon aktuálně není k dispozici. <ph name="BEGIN_LINK" />Spravovat mikrofon<ph name="END_LINK" /></translation> @@ -5165,6 +5199,7 @@ <translation id="8688579245973331962">Nevidíte svoje jméno?</translation> <translation id="8688644143607459122">Kliknutím na tlačítko Pokračovat potvrzujete, že souhlasíte s použitím služby Google Payments. Abychom vás ochránili před podvodem, budou se službou Google Payments sdíleny informace o vašem počítači (včetně údajů o poloze).</translation> <translation id="8689102680909215706">Rozšíření <ph name="EXTENSION_NAME" /> bylo nainstalováno vzdáleně.</translation> +<translation id="868926756781121513">Sdílení mezi počítači pomocí karty</translation> <translation id="8689341121182997459">Platnost do:</translation> <translation id="8690754533598178758">Výjimky mikrofonu v přehrávači Adobe Flash Player se liší.</translation> <translation id="8691686986795184760">(Aktivováno podnikovými zásadami)</translation> @@ -5208,6 +5243,7 @@ <translation id="8737685506611670901">Otevírat odkazy <ph name="PROTOCOL" /> namísto aplikace <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Upřesnit pozici dotykových gest za účelem kompenzace nižší kvality rozlišení dotyku oproti myši.</translation> +<translation id="8741995161408053644">Na stránce <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> mohou být k dispozici další formy historie prohlížení zaznamenané ve vašem účtu Google.</translation> <translation id="8743712320294854924">Zobrazit na poličce rozbalené možnosti vstupu.</translation> <translation id="874420130893181774">Metoda zadávání textu tradiční Pchin-jin</translation> <translation id="8744525654891896746">Vyberte avatara pro dozorovaného uživatele</translation> @@ -5221,6 +5257,7 @@ <translation id="8757640015637159332">Vstoupit do veřejné relace</translation> <translation id="8757742102600829832">Vyberte zařízení Chromebox, ke kterému se chcete připojit</translation> <translation id="8757803915342932642">Zařízení ve službě Google Cloud Devices</translation> +<translation id="8758895886513993540">Tento příznak ovládá, zda uživatelé mohou vybrat kartu, která bude sdílena mezi počítači.</translation> <translation id="8759408218731716181">Vícenásobné přihlášení nelze nastavit</translation> <translation id="8759753423332885148">Další informace</translation> <translation id="8761567432415473239">Bezpečné prohlížení Google na webu <ph name="SITE" /> nedávno <ph name="BEGIN_LINK" />nalezlo škodlivé programy<ph name="END_LINK" />.</translation> @@ -5431,6 +5468,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Myš s konektorem USB byla připojena</translation> <translation id="9076523132036239772">Litujeme, e-mailovou adresu nebo heslo nelze ověřit. Zkuste se nejdříve připojit k síti.</translation> +<translation id="9077132661879924646">Deaktivovat sjednocený kanál médií pro Android</translation> <translation id="907841381057066561">Během balení se nepodařilo vytvořit dočasný soubor ZIP.</translation> <translation id="9083147368019416919">Zrušení registrace se nezdařilo</translation> <translation id="9084064520949870008">Otevřít jako okno</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 5207d509..4210d27 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Vælg et firkantet område på billedet.</translation> <translation id="1697532407822776718">Fuldført</translation> +<translation id="1697988819212986149">Viser et Google-ikon ud for de genvejsmenuelementer, der leveres af Google-tjenester.</translation> <translation id="1699274548822076330">Dette skal bruges sammen med markeringen trace-upload-url. ADVARSEL! Når funktionen er slået til, registrerer Chrome data om ydeevne for hver eneste navigation og uploader dem til den webadresse, der er angivet af markeringen trace-upload-url. Sporet kan indeholde personidentificerende oplysninger, som f.eks. titlerne og webadresserne til de websites, du besøger.</translation> <translation id="1699395855685456105">Hardwarerevision:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">Opdater din adgangssætning til synkronisering.</translation> <translation id="1788636309517085411">Brug standard</translation> <translation id="1789575671122666129">Pop op-vinduer</translation> -<translation id="1790550373387225389">Start præsentationstilstand</translation> <translation id="1792705092719258158">Aktivér tilstanden Spejlvendt skærm.</translation> <translation id="1793119619663054394">Er du sikker på, at du vil fjerne "<ph name="PROFILE_NAME" />" og alle tilknyttede Chrome-data fra denne computer? Handlingen kan ikke fortrydes.</translation> <translation id="179767530217573436">seneste fire uger</translation> @@ -1152,6 +1152,7 @@ <translation id="267285457822962309">Rediger indstillingerne, så de passer til din enhed og andet udstyr.</translation> <translation id="2673135533890720193">Læse din browserhistorik</translation> <translation id="2673589024369449924">Opret en skrivebordsgenvej for denne bruger</translation> +<translation id="2675358154061544447">Meget eksperimentel understøttelse af gengivelse af iframes på flere websites i særskilte processer. Dokumenter deler i denne tilstand kun gengivelsesprocessen, hvis de er fra samme website.</translation> <translation id="2676946222714718093">Afspilles i</translation> <translation id="2678063897982469759">Genaktiver</translation> <translation id="2678246812096664977">Alle plugins</translation> @@ -1378,6 +1379,7 @@ <translation id="2960393411257968125">Sådan håndterer adgangskodeadministratoren AutoFyld for legitimationsoplysningerne til synkronisering.</translation> <translation id="29611076221683977">Hackere, der i øjeblikket befinder sig på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, vil muligvis forsøge at installere skadelige programmer på din Mac for at stjæle eller slette dine oplysninger (f.eks. billeder, adgangskoder, beskeder og kreditkortoplysninger).</translation> <translation id="2961695502793809356">Klik for at gå frem. Hold knappen inde for at se historikken.</translation> +<translation id="296216853343927883">Google-branding i genvejsmenuen</translation> <translation id="2963151496262057773">Følgende plugins svarer ikke: <ph name="PLUGIN_NAME" />Vil du stoppe det?</translation> <translation id="2963783323012015985">Tyrkisk tastatur</translation> <translation id="2964193600955408481">Deaktiver Wi-Fi</translation> @@ -1427,6 +1429,18 @@ <translation id="3025729795978504041">Højreklik på knappen ovenfor for at se andre personer.</translation> <translation id="3026050830483105579">Det er her det sker.</translation> <translation id="302620147503052030">Vis knap</translation> +<translation id="302781076327338683">Genindlæs med omgåelse af cachen</translation> +<translation id="3030243755303701754">En administreret bruger kan udforske internettet med din vejledning. Som administrator af en administreret bruger i Chrome kan du: + + + + • Tillade eller forbyde bestemte websites. + • Gennemse de websites, den administrerede bruger har besøgt. + • Administrere andre indstillinger. + +Når du opretter en administreret bruger, oprettes der ikke nogen Google-konto, og brugerens bogmærker, browserhistorik og andre indstillinger følger ikke med vedkommende til andre enheder med Chrome-synkronisering. Når du har oprettet en ny administreret bruger, kan du administrere vedkommendes indstillinger når som helst og fra enhver enhed på <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Få flere oplysninger i <ph name="BEGIN_LINK" />Hjælp<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Scully</translation> <translation id="3031557471081358569">Vælg at importere følgende:</translation> <translation id="3033332627063280038">Aktivér den eksperimentelle implementering af Cache-kontrol: "stale-while-revalidate"-direktivet. På den måde kan serverne angive, at nogle resourcer kan valideres igen i baggrunden for at formindske forsinkelser.</translation> @@ -1647,7 +1661,6 @@ <translation id="3324301154597925148">Var det den søgeside, du havde forventet?</translation> <translation id="3324684065575061611">(Deaktiveret af en virksomhedspolitik)</translation> <translation id="3326821416087822643">Komprimerer <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Afslut præsentationstilstand</translation> <translation id="3330686263988132416">Den oprindelige header for WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Aktivér tilstanden Spejlvendt skærm. Denne tilstand spejlvender skærmbilledet horisontalt.</translation> @@ -1692,6 +1705,7 @@ <translation id="3392020134425442298">Gendan skadelig fil</translation> <translation id="3394150261239285340"><ph name="HOST" /> ønsker at bruge dit kamera og din mikrofon.</translation> <translation id="3394279550557729862">Aktivér understøttelse af indbyggede underretninger og underretningscenteret på platforme, hvor disse er tilgængelige.</translation> +<translation id="3394862755749546286">Deaktiverer den fælles mediekanal (for Android og computer) i Android.</translation> <translation id="3396331542604645348">Den valgte printer er ikke tilgængelig eller ikke installeret korrekt. Kontroller din printer, eller vælg en anden printer.</translation> <translation id="3399597614303179694">Makedonsk tastatur</translation> <translation id="3401130144947259741">Sporing af begivenheder eksporteres til Sporing af hændelse til Windows (ETW) og kan opfanges af værktøjer som f.eks. UIForETW eller Xperf, hvis funktionen aktiveres.</translation> @@ -1902,7 +1916,6 @@ <translation id="367645871420407123">lad feltet være tomt, hvis du vil angive adgangskoderoden til standardværdien for testbilledet</translation> <translation id="3678156199662914018">Udvidelse: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltesisk tastatur</translation> -<translation id="3680173818488851340">Iframes med lav prioritet.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> anmoder om at dele din skærm</translation> <translation id="3685122418104378273">Synkronisering af Google Drev er som standard deaktiveret, når du bruger mobildata.</translation> <translation id="3685387984467886507">Husk beslutninger om at fortsætte ved SSL-fejl i en defineret periode.</translation> @@ -1951,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> vises nu i administrationskonsollen</translation> <translation id="3741243925913727067">Sikkerhedskopiér billeder og videoer på din medieenhed til Google Drev.</translation> <translation id="3743492083222969745">Aktivér/deaktiver glidende indtastning på siden med indstillinger for det virtuelle tastatur.</translation> +<translation id="3744111561329211289">Synkronisering i baggrunden</translation> <translation id="3749289110408117711">Filnavn</translation> <translation id="3751427701788899101">Forbindelsen blev afbrudt</translation> <translation id="3751522270321808809">Dette website vil muligvis forsøge at narre dig for at stjæle dine oplysninger (f.eks. adgangskoder, beskeder eller kreditkort).</translation> @@ -2267,6 +2281,7 @@ <translation id="4218259925454408822">Log ind på en anden konto</translation> <translation id="4219614746733932747">Hvis det er aktiveret, bruges Blinks zoommekanisme til at skalere indhold til enhedens skaleringsfaktor.</translation> <translation id="4220865787605972627">Tillad farvekalibrering af skærmen, hvis denne understøtter funktionen.</translation> +<translation id="4232692576734035989">Meget eksperimentel effektivitetstilstand, hvor iframes på flere websites holdes adskilt fra hoveddokumentet i en særskilt proces. Iframes fra forskellige tredjepartswebsites har i denne tilstand tilladelse til at dele en proces.</translation> <translation id="4235200303672858594">Hele skærmen</translation> <translation id="4235813040357936597">Tilføj konto for <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> kan ikke vises på dette sprog</translation> @@ -2432,6 +2447,7 @@ <translation id="4509017836361568632">Kassér foto</translation> <translation id="4509345063551561634">Mappeplacering:</translation> <translation id="4514542542275172126">Konfigurer ny administreret bruger</translation> +<translation id="4514914692061505365">Gennemtving brugen af PNaCl's hurtige Subzero-oversætter for alle pexe-filer.</translation> <translation id="4518677423782794009">Har du oplevet, at Chrome går ned, viser usædvanlige startsider, værktøjslinjer eller uventede annoncer, du ikke kan komme af med, eller på anden vis ændrer din browsingoplevelse? Du kan muligvis løse problemet ved at køre Oprydningsværktøj til Chrome.</translation> <translation id="452039078290142656">ukendte enheder fra <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detaljer</translation> @@ -2480,6 +2496,7 @@ <translation id="4595560905247879544">Apps og udvidelser kan kun ændres af administratoren (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF-konverteringsprogram</translation> <translation id="4602466770786743961">Tillad altid, at <ph name="HOST" /> har adgang til dit kamera og din mikrofon</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Ingen forbindelse til internettet</translation> <translation id="4608500690299898628">&Find...</translation> <translation id="4610637590575890427">Ville du gå til <ph name="SITE" />?</translation> @@ -2773,7 +2790,7 @@ <translation id="5039804452771397117">Tillad</translation> <translation id="5045550434625856497">Ugyldig adgangskode</translation> <translation id="5048179823246820836">Nordisk</translation> -<translation id="5048294425697652159">Aktivér Quirks-klient til kalibrering af visningen.</translation> +<translation id="5048294425697652159">Aktivér Quirks Client til kalibrering af visningen.</translation> <translation id="5053604404986157245">Den vilkårligt genererede TPM-adgangskode er ikke tilgængelig. Dette er normalt efter en Powerwash.</translation> <translation id="5053803681436838483">Ny leveringsadresse...</translation> <translation id="5055309315264875868">Vis et link på indstillingssiden i adgangskodeadministrator til administration af dine adgangskoder til synkronisering på nettet.</translation> @@ -2783,6 +2800,7 @@ <translation id="5062930723426326933">Login mislykkedes. Opret forbindelse til internettet, og prøv igen.</translation> <translation id="5063180925553000800">Ny pinkode:</translation> <translation id="5067867186035333991">Spørg, om <ph name="HOST" /> vil have adgang til din mikrofon</translation> +<translation id="5068918910148307423">Tillad ikke, at nyligt lukkede websites sender og modtager data</translation> <translation id="507075806566596212">Du er ved at tilmelde denne <ph name="DEVICE_TYPE" /> på Google og aktivere muligheden for at finde, slette og låse enheden via fjernadgang. Dette kræver en genstart. Vil du fortsætte?</translation> <translation id="5072836811783999860">Vis administrerede bogmærker</translation> <translation id="5074318175948309511">Det kan være nødvendigt at genindlæse siden, så de nye indstillinger kan træde i kraft.</translation> @@ -2891,6 +2909,7 @@ <translation id="5227808808023563348">Find tidligere tekst</translation> <translation id="5228076606934445476">Der er noget galt med enheden. Du skal genstarte enheden og prøve igen for at undgå denne fejl.</translation> <translation id="5228962187251412618">Kun onlinekontrol</translation> +<translation id="5229622432348746578">Deaktiver lyd ved skrivebordsdeling</translation> <translation id="5230516054153933099">Vindue</translation> <translation id="5232178406098309195">Når du bruger lydaktiveringskommandoer, som f.eks. "Ok Google" eller trykker på mikrofonikonet, gemmer din private tale- og lydaktivitet din indtaling og anden lyd på din konto. Der gemmes en optagelse af den efterfølgende tale/lyd samt et par sekunder inden.</translation> <translation id="523299859570409035">Undtagelser for underretninger</translation> @@ -3145,6 +3164,7 @@ <translation id="5557991081552967863">Behold Wi-Fi slået til under dvale</translation> <translation id="5558129378926964177">Zoom &ind</translation> <translation id="556042886152191864">Knap</translation> +<translation id="5562781907504170924">Denne fane er tilsluttet en Bluetooth-enhed.</translation> <translation id="5565871407246142825">Kreditkort</translation> <translation id="5567989639534621706">Applikationscaches</translation> <translation id="5568069709869097550">Kan ikke logge ind</translation> @@ -3304,6 +3324,7 @@ <translation id="5803531701633845775">Vælg sætninger bagfra uden at flytte markøren</translation> <translation id="5804241973901381774">Tilladelser</translation> <translation id="580571955903695899">Omorganiser efter titel</translation> +<translation id="5808982448801399019">Godkendelsen mislykkedes</translation> <translation id="580961539202306967">Spørg mig, når et website vil sende mig push-meddelelser (anbefales)</translation> <translation id="5815645614496570556">X.400-adresse</translation> <translation id="5817397429773072584">Kinesisk (traditionelt)</translation> @@ -3574,6 +3595,7 @@ <translation id="6243774244933267674">Serveren er utilgængelig</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Opdateringen er klar</translation> +<translation id="6248400709929739064">Aktivér undertekster</translation> <translation id="6248988683584659830">Søg i indstillinger</translation> <translation id="6251870443722440887">GDI-håndtag</translation> <translation id="6251889282623539337">Servicevilkår for <ph name="DOMAIN" /></translation> @@ -3598,6 +3620,7 @@ <translation id="6277105963844135994">Netværkstimeout</translation> <translation id="6277518330158259200">T&ag skærmbillede</translation> <translation id="6279183038361895380">Tryk på |<ph name="ACCELERATOR" />| at se markøren</translation> +<translation id="6280215091796946657">Log ind med en anden konto</translation> <translation id="6281743458679673853">Eksperiment, hvor alle API'er afspejler layoutvisningen. Dette gør window.scroll-egenskaber relevante for layoutvisningen.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ny printer på dit netværk}one{Nye printere på dit netværk}other{Nye printere på dit netværk}}</translation> <translation id="6285395082104474418">I statusbakken kan du se den aktuelle status for dit netværk, batteri og meget mere.</translation> @@ -3679,6 +3702,9 @@ <translation id="6418160186546245112">Vende tilbage til den tidligere version af <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Fjern adgang for alle apps permanent</translation> <translation id="6418505248408153264">Aktivér historik for material design</translation> +<translation id="6419288379019356534">Denne enhed administreres af <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Klik på "Næste" for at fortsætte med at logge ind på din konto på <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Centraleuropæisk</translation> <translation id="6420676428473580225">Føj til skrivebordet</translation> <translation id="6422329785618833949">Vend billede</translation> @@ -3839,7 +3865,6 @@ <translation id="6662016084451426657">Synkroniseringsfejl: Kontakt administratoren for at aktivere synkronisering.</translation> <translation id="6663792236418322902">Den valgte adgangskode kræves for at gendanne denne fil senere. Gem den et sikkert sted.</translation> <translation id="6664237456442406323">Din computer er desværre konfigureret med et hardware-id i forkert format. Dette forhindrer Chrome OS i at opdatere med de nyeste sikkerhedsrettelser, og din computer <ph name="BEGIN_BOLD" />kan være sårbar over for ondartede angreb<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reducerer indlæsningsprioriteten for iframe-ressourcer.</translation> <translation id="6666647326143344290">med din Google-konto</translation> <translation id="6675665718701918026">Pegeredskabet er tilsluttet</translation> <translation id="6677037229676347494">Det forventede id er "<ph name="EXPECTED_ID" />", men id'et var "<ph name="NEW_ID" />".</translation> @@ -3932,6 +3957,7 @@ <translation id="6825883775269213504">Russisk</translation> <translation id="6827236167376090743">Denne video vil spille lige til juleaften.</translation> <translation id="6828153365543658583">Begræns login for følgende brugere:</translation> +<translation id="6828434191343384461">De valgte data er blevet fjernet fra Chrome og synkroniserede enheder. Din Google-konto kan have andre former for browserhistorik, som f.eks. søgninger og aktivitet fra andre Google-tjenester, på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Automatiske opdateringer kunne ikke konfigureres for alle brugere (fejl ved forhåndsudførelse: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Få hjælp til din <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Tilmeld dig din organisation</translation> @@ -4012,6 +4038,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Enhed</translation> +<translation id="6969104364835835175">Gennemtving PNaCl Subzero</translation> <translation id="6970230597523682626">Bulgarsk</translation> <translation id="6970480684834282392">Starttype</translation> <translation id="6970856801391541997">Udskriv bestemte sider</translation> @@ -4094,10 +4121,12 @@ <translation id="7057058088140140610">Kreditkort og adresser via Google Payments</translation> <translation id="7059858479264779982">Indstil til automatisk opstart</translation> <translation id="7061692898138851896">Gem adgangskoder automatisk</translation> +<translation id="7062222374113411376">Tillad, at nyligt lukkede websites kan sende og modtage data (anbefales)</translation> <translation id="7063129466199351735">Genveje behandles...</translation> <translation id="7065223852455347715">Denne enhed er låst i en tilstand, der forhindrer virksomhedstilmelding. Hvis du vil tilmelde enheden, skal du gendanne den først.</translation> <translation id="7065534935986314333">Om systemet</translation> <translation id="7066944511817949584">Kunne ikke oprette forbindelse til "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Vis aldrig dette igen.</translation> <translation id="7070804685954057874">Direkte indtastning</translation> <translation id="7072010813301522126">Navn på genvejen</translation> <translation id="7072025625456903686">Tillad alle, eller tilpas</translation> @@ -4370,6 +4399,7 @@ <translation id="7489605380874780575">Kontrollér berettigelse</translation> <translation id="749028671485790643">Person <ph name="VALUE" /></translation> <translation id="7491962110804786152">fane</translation> +<translation id="7493386493263658176">Udvidelsen <ph name="EXTENSION_NAME" /> indsamler muligvis al den tekst, du indtaster, herunder personlige oplysninger såsom adgangskoder og kreditkortnumre. Vil du bruge denne udvidelse?</translation> <translation id="7495778526395737099">Har du glemt din gamle adgangskode?</translation> <translation id="7503191893372251637">Netscape-certifikatstype</translation> <translation id="7503821294401948377">Ikonet '<ph name="ICON" />' for browserhandling kunne ikke indlæses.</translation> @@ -4421,6 +4451,7 @@ <translation id="756445078718366910">Åbn browservindue</translation> <translation id="7564847347806291057">Afslut proces</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome-dataene blev ryddet</translation> <translation id="7568790562536448087">Opdatering</translation> <translation id="7573172247376861652">Batteriopladning</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4550,6 +4581,7 @@ <translation id="7786207843293321886">Afslut gæstesession</translation> <translation id="7786889348652477777">&Genindlæs app</translation> <translation id="7787129790495067395">Du bruger i øjeblikket en adgangssætning. Hvis du har glemt din adgangssætning, kan du nulstille synkroniseringen for at rydde dine data fra Googles servere ved hjælp af Google Dashboard.</translation> +<translation id="7787308148023287649">Vis på en anden skærm</translation> <translation id="7788080748068240085">Hvis du vil gemme "<ph name="FILE_NAME" />" offline, skal du frigøre yderligere <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />frigør filer, som du ikke længere har brug for offlineadgang til<ph name="MARKUP_3" /> <ph name="MARKUP_4" />slet filer fra mappen Downloads<ph name="MARKUP_5" /></translation> @@ -4618,6 +4650,7 @@ <translation id="7878999881405658917">Google har sendt en underretning til denne telefon. Bemærk! Med Bluetooth kan telefonen beholde <ph name="DEVICE_TYPE" /> i ulåst tilstand på op til 10 meters afstand. I tilfælde hvor dette kan være et problem, kan du <a>deaktivere denne funktion midlertidigt</a>.</translation> <translation id="7879478708475862060">Følg indtastningstilstand</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" tilføjer disse apps og udvidelser.</translation> +<translation id="7881969471599061635">Deaktiver undertekster</translation> <translation id="7884988936047469945">Eksperimentelle hjælpefunktioner</translation> <translation id="7885253890047913815">Seneste destinationer</translation> <translation id="7885283703487484916">meget kort</translation> @@ -4982,6 +5015,7 @@ <translation id="839736845446313156">Registrer</translation> <translation id="8398790343843005537">Find din telefon</translation> <translation id="8398877366907290961">Fortsæt alligevel</translation> +<translation id="8399276228600040370">Log ind med din konto, der er gemt med <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Afkrydsningsfelt uden markering</translation> <translation id="8408402540408758445">Forudhentede søgeresultater</translation> <translation id="8410073653152358832">Brug denne telefon</translation> @@ -5068,6 +5102,7 @@ <translation id="8545211332741562162">Aktivér, at websider kan anvende eksperimentelle JavaScript-funktioner.</translation> <translation id="8545575359873600875">Din adgangskode kunne desværre ikke bekræftes. Administratoren for denne administrerede bruger kan have ændret adgangskoden for nylig. Hvis det er tilfældet, gælder den nye adgangskode, næste gang du logger på. Prøv at bruge din gamle adgangskode.</translation> <translation id="8546306075665861288">Billedcache</translation> +<translation id="854653344619327455">Når dette flag er aktiveret, kan brugerne ikke vælge, om lyden skal deles, i vinduet for skrivebordsdeling.</translation> <translation id="8546541260734613940">[*.]eksempel.dk</translation> <translation id="8548973727659841685">Tegn</translation> <translation id="855081842937141170">Fastgør fane</translation> @@ -5098,6 +5133,7 @@ <translation id="8589311641140863898">Eksperimentelle udvidelses-API'er</translation> <translation id="8590375307970699841">Konfigurer automatiske opdateringer</translation> <translation id="8592071947729879125">Begræns iframe-tilladelser.</translation> +<translation id="8592125506633137593">Isolation af hoveddokumentet</translation> <translation id="8594787581355215556">Logget ind som <ph name="USER_EMAIL_ADDRESS" />. Administrer dine synkroniserede data på <ph name="BEGIN_LINK" />Google Betjeningspanel<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Tilpassede filer</translation> <translation id="8596785155158796745">Mikrofonen er ikke tilgængelig i øjeblikket. <ph name="BEGIN_LINK" />Administrer mikrofon<ph name="END_LINK" /></translation> @@ -5170,6 +5206,7 @@ <translation id="8688579245973331962">Kan du ikke se dit navn?</translation> <translation id="8688644143607459122">Når du klikker på Fortsæt, accepterer du at bruge Google Wallet. For at beskytte dig mod bedrageri deles oplysninger om din computer (herunder dens placering) med Google Payments.</translation> <translation id="8689102680909215706">Udvidelsen "<ph name="EXTENSION_NAME" />" blev installeret via fjernadgang.</translation> +<translation id="868926756781121513">Skrivebordsdeling med fane som kilde</translation> <translation id="8689341121182997459">Udløber:</translation> <translation id="8690754533598178758">Mikrofonundtagelserne for Adobe Flash Player er forskellige.</translation> <translation id="8691686986795184760">(Aktiveret af virksomhedspolitikken)</translation> @@ -5213,6 +5250,7 @@ <translation id="8737685506611670901">Åbne <ph name="PROTOCOL" />-links i stedet for <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Juster positionen af en berøring for at kompensere for, at berøringer har en ringe præcision sammenlignet med en mus.</translation> +<translation id="8741995161408053644">Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Vis udvidede indtastningsmuligheder på hylden.</translation> <translation id="874420130893181774">Traditionel Pinyin-indtastningsmetode</translation> <translation id="8744525654891896746">Vælg en avatar for denne administrerede bruger</translation> @@ -5227,6 +5265,7 @@ <translation id="8757640015637159332">Start en offentlig session</translation> <translation id="8757742102600829832">Vælg en Chromebox, du vil oprette forbindelse til</translation> <translation id="8757803915342932642">Enhed på Google Cloud-enheder</translation> +<translation id="8758895886513993540">Dette flag kontrollerer, om brugerne kan vælge en fane til skrivebordsdeling.</translation> <translation id="8759408218731716181">Samlet login fra flere konti kan ikke konfigureres</translation> <translation id="8759753423332885148">Få flere oplysninger.</translation> <translation id="8761567432415473239">Sikker browsing i Google har for nylig <ph name="BEGIN_LINK" />fundet skadelige programmer<ph name="END_LINK" /> på <ph name="SITE" />.</translation> @@ -5437,6 +5476,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-mus er tilsluttet</translation> <translation id="9076523132036239772">Din e-mail eller adgangskode blev ikke bekræftet. Prøv at oprette forbindelse til et netværk først.</translation> +<translation id="9077132661879924646">Deaktiverer den fælles mediekanal i Android.</translation> <translation id="907841381057066561">Den midlertidige zip-fil kunne ikke oprettes under pakning.</translation> <translation id="9083147368019416919">Afmelding mislykkedes</translation> <translation id="9084064520949870008">Åbn som vindue</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 9396fe8..5133ec9ca 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Quadratischen Abschnitt im Bild auswählen</translation> <translation id="1697532407822776718">Fertig!</translation> +<translation id="1697988819212986149">Zeigt ein Google-Symbol neben den Kontextmenüoptionen, die von Google-Diensten bereitgestellt werden.</translation> <translation id="1699274548822076330">Dies ist für die Verwendung zusammen mit dem Attribut "trace-upload-url" vorgesehen. Hinweis: Bei Aktivierung speichert Chrome Leistungsdaten für jeden Navigationsablauf und lädt diese unter der im Attribut "trace-upload-url" festgelegten URL hoch. Dieser Trace kann personenbezogene Daten wie Titel und URLs von besuchten Websites enthalten.</translation> <translation id="1699395855685456105">Hardware-Version:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">Synchronisierungs-Passphrase aktualisieren</translation> <translation id="1788636309517085411">Standardeinstellung verwenden</translation> <translation id="1789575671122666129">Pop-ups</translation> -<translation id="1790550373387225389">Präsentationsmodus aktivieren</translation> <translation id="1792705092719258158">Gespiegelten Bildschirmmodus aktivieren</translation> <translation id="1793119619663054394">Möchten Sie "<ph name="PROFILE_NAME" />" und alle zugehörigen Chrome-Daten wirklich von diesem Computer entfernen? Dieser Vorgang kann nicht rückgängig gemacht werden.</translation> <translation id="179767530217573436">Letzte 4 Wochen</translation> @@ -1150,6 +1150,7 @@ <translation id="267285457822962309">Einstellungen für Ihr Gerät und Peripheriegeräte ändern</translation> <translation id="2673135533890720193">Browserverlauf lesen</translation> <translation id="2673589024369449924">Desktopverknüpfung für diesen Nutzer erstellen</translation> +<translation id="2675358154061544447">Sehr experimentelle Unterstützung des Renderings von websiteübergreifenden iFrames in separaten Prozessen. In diesem Modus werden nur für Dokumente, die von derselben Website stammen, Renderer-Prozesse durchgeführt.</translation> <translation id="2676946222714718093">Läuft gerade auf:</translation> <translation id="2678063897982469759">Wieder aktivieren</translation> <translation id="2678246812096664977">Alle Plug-ins</translation> @@ -1376,6 +1377,7 @@ <translation id="2960393411257968125">Verwendung der AutoFill-Funktion für Synchronisierungsanmeldedaten im Passwortmanager</translation> <translation id="29611076221683977">Zurzeit auf <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> befindliche Angreifer versuchen unter Umständen, gefährliche Programme auf Ihrem Mac zu installieren, um Ihre Daten zu stehlen oder zu löschen, zum Beispiel Fotos, Passwörter, Nachrichten und Kreditkartendaten.</translation> <translation id="2961695502793809356">Klicken, um weiterzugehen. Gedrückt halten, um Verlauf aufzurufen</translation> +<translation id="296216853343927883">Google-Branding im Kontextmenü</translation> <translation id="2963151496262057773">Das folgende Plug-in reagiert nicht: <ph name="PLUGIN_NAME" />. Möchten Sie es anhalten?</translation> <translation id="2963783323012015985">Türkische Tastatur</translation> <translation id="2964193600955408481">WLAN deaktivieren</translation> @@ -1425,6 +1427,16 @@ <translation id="3025729795978504041">Klicken Sie mit der rechten Maustaste auf die Schaltfläche oben, um andere Nutzer zu sehen.</translation> <translation id="3026050830483105579">Alles an einem zentralen Ort.</translation> <translation id="302620147503052030">Schaltfläche anzeigen</translation> +<translation id="302781076327338683">Unter Umgehung des Cache neu laden</translation> +<translation id="3030243755303701754">Ein betreuter Nutzer kann ohne Ihre Anleitung im Web surfen. Als Administrator eines betreuten Nutzers können Sie in Chrome: + + • bestimmte Websites zulassen oder sperren, + • die Websites ansehen, die der betreute Nutzer besucht hat, und + • sonstige Einstellungen vornehmen. + +Durch die Einrichtung eines betreuten Nutzers wird kein Google-Konto erstellt. Die Lesezeichen, der Browserverlauf und andere Einstellungen werden nicht über die Chrome-Synchronisierung auf andere Geräte übertragen. Nachdem Sie einen neuen betreuten Nutzer erstellt haben, können Sie dessen Einstellungen jederzeit von jedem Gerät unter <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> ändern. + +Mehr dazu erfahren Sie in <ph name="BEGIN_LINK" />unserer Hilfe<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agentin X</translation> <translation id="3031557471081358569">Zu importierende Daten wählen:</translation> <translation id="3033332627063280038">Aktivieren Sie die experimentelle Implementierung der Richtlinie "Cache-Control: stale-while-revalidate". Dadurch können Server angeben, dass einige Ressourcen im Hintergrund erneut überprüft werden sollten, um die Latenz zu verbessern.</translation> @@ -1645,7 +1657,6 @@ <translation id="3324301154597925148">Ist das Ihre erwartete Seite für die Suche?</translation> <translation id="3324684065575061611">(Durch Unternehmensrichtlinie deaktiviert)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> wird gezippt...</translation> -<translation id="3330206034087160972">Präsentationsmodus beenden</translation> <translation id="3330686263988132416">Ursprungsheader bei WebRTC-Stuns</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Hiermit wird der gespiegelte Bildschirmmodus aktiviert. Dabei wird der Bildschirm horizontal gedreht.</translation> @@ -1690,6 +1701,7 @@ <translation id="3392020134425442298">Schädliche Datei wiederherstellen</translation> <translation id="3394150261239285340"><ph name="HOST" /> möchte Ihre Kamera und Ihr Mikrofon verwenden.</translation> <translation id="3394279550557729862">Unterstützung für die Verwendung der nativen Benachrichtigungen und des Benachrichtigungscenters auf Plattformen aktivieren, auf denen diese Dienste verfügbar sind.</translation> +<translation id="3394862755749546286">Deaktiviert die einheitliche Medienpipeline für Android und die Desktop-Version unter Android.</translation> <translation id="3396331542604645348">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.</translation> <translation id="3399597614303179694">Mazedonische Tastatur</translation> <translation id="3401130144947259741">Ist die Option aktiviert, werden Trace-Ereignisse in Event Tracing for Windows (ETW) exportiert und können von Tools wie UIF oder ETW oder Xperf erfasst werden.</translation> @@ -1900,7 +1912,6 @@ <translation id="367645871420407123">Leer lassen, wenn Sie für das Root-Passwort den Standardtestwert festlegen möchten</translation> <translation id="3678156199662914018">Erweiterung: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltesische Tastatur</translation> -<translation id="3680173818488851340">iFrames mit geringer Priorität.</translation> <translation id="3683524264665795342">Anfrage zur Bildschirmfreigabe durch <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Die Google Drive-Synchronisierung ist bei der mobilen Datennutzung standardmäßig deaktiviert.</translation> <translation id="3685387984467886507">Entscheidungen zum Umgang mit SSL-Fehlern für einen bestimmten Zeitraum merken</translation> @@ -1949,6 +1960,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> erscheint nun in der Admin-Konsole.</translation> <translation id="3741243925913727067">Fotos und Videos des Mediengeräts auf Google Drive sichern</translation> <translation id="3743492083222969745">Bewegungseingabeoption auf der Einstellungsseite für die Bildschirmtastatur aktivieren/deaktivieren.</translation> +<translation id="3744111561329211289">Hintergrundsynchronisierung</translation> <translation id="3749289110408117711">Dateiname</translation> <translation id="3751427701788899101">Verbindung wurde getrennt</translation> <translation id="3751522270321808809">Diese Website könnte versuchen, Ihre Informationen zu stehlen, etwa Passwörter, Nachrichten oder Kreditkartendaten.</translation> @@ -2266,6 +2278,7 @@ <translation id="4218259925454408822">In anderem Konto anmelden</translation> <translation id="4219614746733932747">Wenn diese Option aktiviert ist, verwendet Blink einen Zoommechanismus, um Inhalte entsprechend des Skalierungsfaktors des Geräts zu skalieren.</translation> <translation id="4220865787605972627">Farbkalibrierung des Bildschirms zulassen, wenn der Bildschirm die Funktion unterstützt.</translation> +<translation id="4232692576734035989">Sehr experimenteller Modus, bei dem websiteübergreifende iFrames getrennt vom Hauptdokument ausgeführt werden. In diesem Modus können iFrames von unterschiedlichen Drittanbieter-Websites in einem gemeinsamen Prozess ausgeführt werden.</translation> <translation id="4235200303672858594">Gesamter Bildschirm</translation> <translation id="4235813040357936597">Konto für <ph name="PROFILE_NAME" /> hinzufügen</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> kann in dieser Sprache nicht angezeigt werden.</translation> @@ -2431,6 +2444,7 @@ <translation id="4509017836361568632">Foto verwerfen</translation> <translation id="4509345063551561634">Speicherort:</translation> <translation id="4514542542275172126">Neuen betreuten Nutzer einrichten</translation> +<translation id="4514914692061505365">Die Verwendung des schnellen Subzero-Übersetzers von PNaCl für alle Portable Executable-Dateien erzwingen.</translation> <translation id="4518677423782794009">Stürzt Chrome ab, werden ungewohnte Startseiten, Symbolleisten oder Anzeigen eingeblendet, die sich nicht deaktivieren lassen, oder reagiert der Browser anders als gewohnt? Möglicherweise lässt sich das Problem mit dem Chrome Software Cleaner beheben.</translation> <translation id="452039078290142656">unbekannte Geräte von <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Details</translation> @@ -2479,6 +2493,7 @@ <translation id="4595560905247879544">Apps und Erweiterungen können nur vom Administrator, <ph name="CUSTODIAN_NAME" />, geändert werden.</translation> <translation id="4601242977939794209">EMF-Konverter</translation> <translation id="4602466770786743961"><ph name="HOST" /> immer Zugriff auf Kamera und Mikrofon gestatten</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Keine Internetverbindung</translation> <translation id="4608500690299898628">&Suchen...</translation> <translation id="4610637590575890427">Wollten Sie <ph name="SITE" /> aufrufen?</translation> @@ -2780,6 +2795,7 @@ <translation id="5062930723426326933">Fehler bei der Anmeldung. Bitte stellen Sie eine Internetverbindung her und versuchen Sie es erneut.</translation> <translation id="5063180925553000800">Neue PIN:</translation> <translation id="5067867186035333991">Nachfragen, wenn <ph name="HOST" /> auf Ihr Mikrofon zugreifen möchte</translation> +<translation id="5068918910148307423">Fertigstellen des Datenversands und -empfangs von kürzlich geschlossen Websites nicht erlauben</translation> <translation id="507075806566596212">Sie möchten dieses Gerät (<ph name="DEVICE_TYPE" />) bei Google registrieren, um das Lokalisieren, Löschen und Sperren des Geräts per Remotezugriff zu aktivieren. Dazu ist ein Neustart erforderlich. Möchten Sie fortfahren?</translation> <translation id="5072836811783999860">Verwaltete Lesezeichen anzeigen</translation> <translation id="5074318175948309511">Damit die neuen Einstellungen wirksam werden, muss die Seite eventuell neu geladen werden.</translation> @@ -2887,6 +2903,7 @@ <translation id="5227808808023563348">Vorherigen Text suchen</translation> <translation id="5228076606934445476">Bei dem Gerät ist ein Problem aufgetreten. Starten Sie das Gerät neu und versuchen Sie es erneut.</translation> <translation id="5228962187251412618">Nur Onlineprüfung</translation> +<translation id="5229622432348746578">Audio für Desktopfreigabe deaktivieren</translation> <translation id="5230516054153933099">Fenster</translation> <translation id="5232178406098309195">Wenn Sie Befehle zur Aktivierung der Sprachbedienung verwenden, also z. B. wenn Sie "OK Google" sagen oder auf ein Mikrofonsymbol tippen, werden in Ihrem Konto in Ihren privaten Sprach- & Audioaktivitäten einige Sprachdaten und sonstige Audiodaten gespeichert. Konkret werden eine Aufnahme Ihrer darauffolgenden Sprach- bzw. Audioeingabe sowie einige Sekunden davor aufgezeichnet.</translation> <translation id="523299859570409035">Ausnahmen für Benachrichtigungen</translation> @@ -3141,6 +3158,7 @@ <translation id="5557991081552967863">WLAN im Ruhemodus aktiviert lassen</translation> <translation id="5558129378926964177">Ver&größern</translation> <translation id="556042886152191864">Schaltfläche</translation> +<translation id="5562781907504170924">Dieser Tab ist mit einem Bluetooth-Gerät verbunden.</translation> <translation id="5565871407246142825">Kreditkarten</translation> <translation id="5567989639534621706">Caches</translation> <translation id="5568069709869097550">Anmeldung nicht möglich</translation> @@ -3300,6 +3318,7 @@ <translation id="5803531701633845775">Wortgruppen von hinten wählen, ohne den Cursor zu bewegen</translation> <translation id="5804241973901381774">Berechtigungen</translation> <translation id="580571955903695899">Neu sortieren nach Titel</translation> +<translation id="5808982448801399019">Autorisierung fehlgeschlagen</translation> <translation id="580961539202306967">Nachfragen, wenn eine Website mir Push-Nachrichten senden möchte (empfohlen)</translation> <translation id="5815645614496570556">X.400-Adresse</translation> <translation id="5817397429773072584">Chinesisch (traditionell)</translation> @@ -3569,6 +3588,7 @@ <translation id="6243774244933267674">Server nicht verfügbar</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Update bereit</translation> +<translation id="6248400709929739064">Untertitel aktivieren</translation> <translation id="6248988683584659830">In Einstellungen suchen</translation> <translation id="6251870443722440887">GDI-Handles</translation> <translation id="6251889282623539337">Nutzungsbedingungen für <ph name="DOMAIN" /></translation> @@ -3593,6 +3613,7 @@ <translation id="6277105963844135994">Zeitüberschreitung im Netzwerk</translation> <translation id="6277518330158259200">Screenshot &erstellen</translation> <translation id="6279183038361895380">Zum Einblenden des Cursors |<ph name="ACCELERATOR" />| drücken</translation> +<translation id="6280215091796946657">Mit einem anderen Konto anmelden</translation> <translation id="6281743458679673853">Experiment zur Übernahme des Layout-Darstellungsbereichs in allen APIs. Damit wird ein Verhältnis zwischen "window.scroll"-Eigenschaften und dem Layout-Darstellungsbereich hergestellt.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Neuer Drucker in Ihrem Netzwerk gefunden}other{Neue Drucker in Ihrem Netzwerk gefunden}}</translation> <translation id="6285395082104474418">In der Statusleiste wird unter anderem der aktuelle Status Ihres Netzwerks und Ihres Akkus angezeigt.</translation> @@ -3674,6 +3695,9 @@ <translation id="6418160186546245112">Zuvor installierte Version von <ph name="IDS_SHORT_PRODUCT_NAME" /> wird wiederhergestellt...</translation> <translation id="6418481728190846787">Zugriff für alle Apps dauerhaft entfernen</translation> <translation id="6418505248408153264">Material Design-Verlauf aktivieren</translation> +<translation id="6419288379019356534">Dieses Gerät wird von <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> verwaltet. + <ph name="LINE_BREAK" /> + Klicken Sie auf "Weiter", um sich in Ihrem <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />-Konto anzumelden.</translation> <translation id="6419902127459849040">Mitteleuropäisch</translation> <translation id="6420676428473580225">Zu Desktop hinzufügen</translation> <translation id="6422329785618833949">Foto gespiegelt</translation> @@ -3834,7 +3858,6 @@ <translation id="6662016084451426657">Synchronisierungsfehler: Bitten Sie Ihren Administrator, die Synchronisierung zu aktivieren.</translation> <translation id="6663792236418322902">Das gewählte Passwort wird später zur Wiederherstellung dieser Datei benötigt. Bewahren Sie es an einem sicheren Ort auf.</translation> <translation id="6664237456442406323">Ihr Computer wurde mit einer ungültigen Hardware-ID konfiguriert. Daher kann Chrome OS keine aktuellen Sicherheitsupdates installieren und Ihr Computer ist <ph name="BEGIN_BOLD" />möglicherweise anfällig für schädliche Angriffe<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Verringert die Ladepriorität von iFrame-Ressourcen.</translation> <translation id="6666647326143344290">mit Ihrem Google-Konto</translation> <translation id="6675665718701918026">Zeigegerät verbunden</translation> <translation id="6677037229676347494">Erwartete ID: "<ph name="EXPECTED_ID" />", tatsächliche ID: "<ph name="NEW_ID" />"</translation> @@ -3927,6 +3950,7 @@ <translation id="6825883775269213504">Russisch</translation> <translation id="6827236167376090743">Dieses Video läuft immer weiter und weiter...</translation> <translation id="6828153365543658583">Anmeldung auf die folgenden Nutzer beschränken:</translation> +<translation id="6828434191343384461">Die ausgewählten Daten wurden aus Chrome und synchronisierten Geräten entfernt. Ihr Google-Konto weist möglicherweise andere Formen von Browserverläufen wie Suchanfragen und Aktivitäten von anderen Google-Diensten unter <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> auf.</translation> <translation id="6828860976882136098">Automatische Updates für alle Nutzer konnten nicht eingerichtet werden (Preflight-Ausführungsfehler: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Hilfe zu Ihrem Gerät (<ph name="DEVICE_TYPE" />)</translation> <translation id="6829270497922309893">Anmeldung in Ihrer Organisation</translation> @@ -4006,6 +4030,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Gerät</translation> +<translation id="6969104364835835175">Force PNaCl Subzero</translation> <translation id="6970230597523682626">Bulgarisch</translation> <translation id="6970480684834282392">Starttyp</translation> <translation id="6970856801391541997">Bestimmte Seiten drucken</translation> @@ -4088,10 +4113,12 @@ <translation id="7057058088140140610">Kreditkarten und Adressen für Google Payments</translation> <translation id="7059858479264779982">Automatisch starten</translation> <translation id="7061692898138851896">Passwörter automatisch speichern</translation> +<translation id="7062222374113411376">Fertigstellen des Datenversands und -empfangs von kürzlich geschlossen Websites erlauben (empfohlen)</translation> <translation id="7063129466199351735">Verknüpfungen werden bearbeitet...</translation> <translation id="7065223852455347715">Dieses Gerät ist gesperrt, sodass keine Unternehmensanmeldung möglich ist. Wenn Sie das Gerät anmelden möchten, müssen Sie zunächst eine Gerätewiederherstellung durchführen.</translation> <translation id="7065534935986314333">Systeminformationen</translation> <translation id="7066944511817949584">Es konnte keine Verbindung mit "<ph name="DEVICE_NAME" />" hergestellt werden.</translation> +<translation id="7067725467529581407">Nicht mehr anzeigen.</translation> <translation id="7070804685954057874">Direkte Eingabe</translation> <translation id="7072010813301522126">Verknüpfungsname</translation> <translation id="7072025625456903686">Alle zulassen oder anpassen</translation> @@ -4367,6 +4394,7 @@ <translation id="7489605380874780575">Unterstützung überprüfen</translation> <translation id="749028671485790643">Profil <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">Die Erweiterung <ph name="EXTENSION_NAME" /> erfasst unter Umständen alle von Ihnen eingegebenen Textinhalte, einschließlich personenbezogener Daten wie Passwörter und Kreditkartennummern. Möchten Sie diese Erweiterung verwenden?</translation> <translation id="7495778526395737099">Haben Sie Ihr altes Passwort vergessen?</translation> <translation id="7503191893372251637">Netscape-Zertifikatstyp</translation> <translation id="7503821294401948377">Symbol "<ph name="ICON" />" konnte nicht für Browseraktion geladen werden.</translation> @@ -4418,6 +4446,7 @@ <translation id="756445078718366910">Browserfenster öffnen</translation> <translation id="7564847347806291057">Prozess beenden</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Gelöschte Chrome-Daten</translation> <translation id="7568790562536448087">Aktualisierung läuft</translation> <translation id="7573172247376861652">Akkustand</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4547,6 +4576,7 @@ <translation id="7786207843293321886">Gastsitzung beenden</translation> <translation id="7786889348652477777">App &neu laden</translation> <translation id="7787129790495067395">Sie verwenden zurzeit eine Passphrase. Wenn Sie sie vergessen haben, können Sie die Synchronisierung mithilfe des Google Dashboards zurücksetzen, um Ihre Daten von den Google-Servern zu löschen.</translation> +<translation id="7787308148023287649">Anzeige auf einem anderen Display</translation> <translation id="7788080748068240085">Wenn Sie "<ph name="FILE_NAME" />" offline speichern möchten, müssen Sie <ph name="TOTAL_FILE_SIZE" /> zusätzlichen Speicherplatz freigeben:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Entfernen Sie Dateien, auf die Sie nicht mehr offline zugreifen müssen.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Löschen Sie Dateien aus dem Ordner "Downloads".<ph name="MARKUP_5" /></translation> @@ -4615,6 +4645,7 @@ <translation id="7878999881405658917">Google hat eine Benachrichtigung an dieses Telefon gesendet. Beachten Sie, dass Ihr Telefon über Bluetooth ein Sperren Ihres <ph name="DEVICE_TYPE" /> auf eine Entfernung von über 9 m verhindern kann. Falls dies ein Problem darstellen sollte, können Sie <a>diese Funktion vorübergehend deaktivieren</a>.</translation> <translation id="7879478708475862060">Dieselbe Methode wie bei der Eingabe verwenden</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" fügt diese Apps und Erweiterungen hinzu:</translation> +<translation id="7881969471599061635">Untertitel deaktivieren</translation> <translation id="7884988936047469945">Experimentelle Bedienungshilfen</translation> <translation id="7885253890047913815">Letzte Ziele</translation> <translation id="7885283703487484916">sehr kurz</translation> @@ -4978,6 +5009,7 @@ <translation id="839736845446313156">Registrieren</translation> <translation id="8398790343843005537">Mein Telefon finden</translation> <translation id="8398877366907290961">Trotzdem fortfahren</translation> +<translation id="8399276228600040370">Mit dem in <ph name="PASSWORD_MANAGER_BRAND" /> gespeicherten Konto anmelden</translation> <translation id="8401363965527883709">Deaktiviertes Kästchen</translation> <translation id="8408402540408758445">Vorabruf von Suchergebnissen</translation> <translation id="8410073653152358832">Dieses Telefon verwenden</translation> @@ -5064,6 +5096,7 @@ <translation id="8545211332741562162">Webseiten können experimentelle JavaScript-Funktionen nutzen.</translation> <translation id="8545575359873600875">Ihr Passwort konnte nicht bestätigt werden. Der Verwalter dieses betreuten Nutzers hat das Passwort möglicherweise vor Kurzem geändert. In diesem Fall wird das neue Passwort bei der nächsten Anmeldung wirksam. Versuchen Sie, sich mit Ihrem alten Passwort anzumelden.</translation> <translation id="8546306075665861288">Bilder-Cache</translation> +<translation id="854653344619327455">Wenn diese Markierung aktiviert ist, kann der Nutzer nicht auf seinem Desktop auswählen, ob er die Audioinhalte freigeben möchte.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Zeichen</translation> <translation id="855081842937141170">Tab anheften</translation> @@ -5094,6 +5127,7 @@ <translation id="8589311641140863898">Experimentelle Erweiterungs-APIs</translation> <translation id="8590375307970699841">Automatische Updates einrichten</translation> <translation id="8592071947729879125">iFrame-Berechtigungen beschränken</translation> +<translation id="8592125506633137593">Isolierung des Hauptdokuments</translation> <translation id="8594787581355215556">Sie sind als <ph name="USER_EMAIL_ADDRESS" /> angemeldet. Verwalten Sie Ihre synchronisierten Daten im <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Benutzerdefinierte Dateien</translation> <translation id="8596785155158796745">Das Mikrofon ist momentan nicht verfügbar. <ph name="BEGIN_LINK" />Mikrofon verwalten<ph name="END_LINK" /></translation> @@ -5166,6 +5200,7 @@ <translation id="8688579245973331962">Wird Ihr Name nicht angezeigt?</translation> <translation id="8688644143607459122">Durch einen Klick auf "Weiter" stimmen Sie der Nutzung von Google Payments zu. Um Sie vor Betrug zu schützen, werden Informationen über Ihren Computer (einschließlich des Standorts) für Google Payments freigegeben.</translation> <translation id="8689102680909215706">Die Erweiterung "<ph name="EXTENSION_NAME" />" wurde remote installiert.</translation> +<translation id="868926756781121513">Desktopfreigabe für Tabquelle</translation> <translation id="8689341121182997459">Läuft ab:</translation> <translation id="8690754533598178758">Die Adobe Flash Player-Mikrofonausnahmen unterscheiden sich von den angegebenen.</translation> <translation id="8691686986795184760">(durch Unternehmensrichtlinien aktiviert)</translation> @@ -5209,6 +5244,7 @@ <translation id="8737685506611670901"><ph name="PROTOCOL" />-Links anstelle von <ph name="REPLACED_HANDLER_TITLE" /> öffnen</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Position einer Berührung eindeutiger definieren, um die schlechte Auflösung von Berührungen im Vergleich zu einem Mauscursor zu kompensieren.</translation> +<translation id="8741995161408053644">Möglicherweise sind in Ihrem Google-Konto noch andere Formen des Browserverlaufs unter <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> vorhanden.</translation> <translation id="8743712320294854924">Erweiterte Eingabeoptionen in der Ablage anzeigen.</translation> <translation id="874420130893181774">Traditionelle Pinyin-Eingabemethode</translation> <translation id="8744525654891896746">Avatar für den betreuten Nutzer auswählen</translation> @@ -5222,6 +5258,7 @@ <translation id="8757640015637159332">Öffentliche Sitzung beginnen</translation> <translation id="8757742102600829832">Wählen Sie eine Chromebox für die Verbindung aus.</translation> <translation id="8757803915342932642">Gerät in Google Cloud Devices</translation> +<translation id="8758895886513993540">Mit dieser Markierung wird festgelegt, ob Nutzer einen Tab für die Desktopfreigabe auswählen können.</translation> <translation id="8759408218731716181">Mehrfachanmeldung kann nicht eingerichtet werden</translation> <translation id="8759753423332885148">Weitere Informationen</translation> <translation id="8761567432415473239">Google Safe Browsing hat vor Kurzem <ph name="BEGIN_LINK" />schädliche Programme<ph name="END_LINK" /> auf <ph name="SITE" /> gefunden.</translation> @@ -5432,6 +5469,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-Maus angeschlossen</translation> <translation id="9076523132036239772">Ihre E-Mail-Adresse bzw. Ihr Passwort konnte nicht bestätigt werden. Stellen Sie zunächst eine Netzwerkverbindung her.</translation> +<translation id="9077132661879924646">Deaktiviert die einheitliche Medienpipeline unter Android.</translation> <translation id="907841381057066561">Während des Packvorgangs wurde keine temporäre ZIP-Datei erstellt.</translation> <translation id="9083147368019416919">Fehler bei der Aufhebung der Registrierung</translation> <translation id="9084064520949870008">In Fenster öffnen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index ebe6dce..9db5769c 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -504,6 +504,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Επιλέξτε μια τετράγωνη περιοχή της εικόνας.</translation> <translation id="1697532407822776718">Είστε έτοιμοι!</translation> +<translation id="1697988819212986149">Εμφανίζει ένα εικονίδιο Google δίπλα στα στοιχεία του μενού περιβάλλοντος, με την υποστήριξη της Google.</translation> <translation id="1699274548822076330">Αυτό προορίζεται για χρήση σε συνδυασμό με την επισήμανση trace-upload-url. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Όταν ενεργοποιείται, το Chrome θα καταγράφει τα δεδομένα απόδοσης για κάθε πλοήγηση και θα τα ανεβάζει στη διεύθυνση URL που καθορίζεται από την επισήμανση trace-upload-url. Το ίχνος ενδέχεται να περιλαμβάνει στοιχεία προσωπικής ταυτοποίησης (PII) όπως τους τίτλους και τις διευθύνσεις URL των ιστότοπων που επισκέπτεστε.</translation> <translation id="1699395855685456105">Έκδοση υλικού: </translation> @@ -564,7 +565,6 @@ <translation id="1783075131180517613">Ενημερώστε την κωδική φράση πρόσβασης συγχρονισμού.</translation> <translation id="1788636309517085411">Χρήση προεπιλογής</translation> <translation id="1789575671122666129">Αναδυόμενα παράθυρα</translation> -<translation id="1790550373387225389">Είσοδος στη λειτουργία παρουσίασης</translation> <translation id="1792705092719258158">Ενεργοποίηση της λειτουργίας κατοπτρισμού οθόνης.</translation> <translation id="1793119619663054394">Είσαστε σίγουροι πως θέλετε να καταργήσετε το "<ph name="PROFILE_NAME" />" και όλα τα δεδομένα Chrome που συσχετίζονται με αυτό το προφίλ από αυτόν τον υπολογιστή; Δεν είναι δυνατή η αναίρεση αυτής της ενέργειας.</translation> <translation id="179767530217573436">τις τελευταίες 4 εβδομάδες</translation> @@ -1158,6 +1158,7 @@ <translation id="267285457822962309">Αλλαγή ρυθμίσεων συγκεκριμένα για τη συσκευή και τα περιφερειακά σας.</translation> <translation id="2673135533890720193">Ανάγνωση του ιστορικού περιήγησής σας</translation> <translation id="2673589024369449924">Δημιουργία συντόμευσης επιφάνειας εργασίας για αυτόν το χρήστη</translation> +<translation id="2675358154061544447">Άκρως πειραματική υποστήριξη για την απόδοση iframe σε ολόκληρο τον ιστότοπο σε ξεχωριστές διαδικασίες. Σε αυτήν τη λειτουργία, τα έγγραφα μοιράζονται μια διαδικασία λειτουργίας απόδοσης, μόνο αν προέρχονται από τον ίδιο ιστότοπο.</translation> <translation id="2676946222714718093">Αναπαραγωγή σε</translation> <translation id="2678063897982469759">Εκ νέου ενεργοποίηση</translation> <translation id="2678246812096664977">Όλες οι προσθήκες</translation> @@ -1386,6 +1387,7 @@ <translation id="2960393411257968125">Τρόπος χειρισμού της αυτόματης συμπλήρωσης για το συγχρονισμό των διαπιστευτηρίων από το διαχειριστή κωδικών.</translation> <translation id="29611076221683977">Οι εισβολείς που βρίσκονται αυτήν τη στιγμή στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ενδέχεται να επιχειρήσουν να εγκαταστήσουν επικίνδυνα προγράμματα στον υπολογιστή σας Mac, για να υποκλέψουν ή να διαγράψουν τα δεδομένα σας (για παράδειγμα, φωτογραφίες, κωδικούς πρόσβασης, μηνύματα και πιστωτικές κάρτες).</translation> <translation id="2961695502793809356">Κάντε κλικ για να πάτε μπροστά, κρατήστε το κουμπί πατημένο για να δείτε το ιστορικό</translation> +<translation id="296216853343927883">Καθιέρωσης επωνυμίας Google στο μενού περιβάλλοντος</translation> <translation id="2963151496262057773">Η ακόλουθη προσθήκη δεν ανταποκρίνεται: <ph name="PLUGIN_NAME" />Θέλετε να την τερματίσετε;</translation> <translation id="2963783323012015985">Πληκτρολόγιο με τουρκικούς χαρακτήρες</translation> <translation id="2964193600955408481">Απενεργοποίηση Wi-Fi</translation> @@ -1435,6 +1437,16 @@ <translation id="3025729795978504041">Κάντε δεξί κλικ στο παραπάνω κουμπί για να δείτε άλλους χρήστες.</translation> <translation id="3026050830483105579">Είναι όλα εδώ.</translation> <translation id="302620147503052030">Εμφάνιση κουμπιού</translation> +<translation id="302781076327338683">Επανάληψη φόρτωσης με παράκαμψη της κρυφής μνήμης</translation> +<translation id="3030243755303701754">Οι εποπτευόμενοι χρήστες μπορούν να εξερευνήσουν το διαδίκτυο με την καθοδήγησή σας. Ως διαχειριστής ενός εποπτευόμενου χρήστη στο Chrome, μπορείτε: + + • να επιτρέψετε ή να αποκλείσετε ορισμένους ιστότοπους, + • να ελέγξετε τους ιστότοπους που επισκέφτηκε ο εποπτευόμενος χρήστης και + • να διαχειριστείτε άλλες ρυθμίσεις. + +Με τη δημιουργία ενός εποπτευόμενου χρήστη, δεν δημιουργείται ένας Λογαριασμός Google, ενώ οι σελιδοδείκτες, το ιστορικό περιήγησης και οι άλλες προτιμήσεις του θα τον ακολουθούν σε άλλες συσκευές με το Συγχρονισμό Chrome. Αφού δημιουργήσετε έναν εποπτευόμενο χρήστη, μπορείτε να διαχειριστείτε τις ρυθμίσεις του ανά πάσα στιγμή, από οποιαδήποτε συσκευή, στη διεύθυνση <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Για περισσότερες πληροφορίες, επισκεφτείτε το <ph name="BEGIN_LINK" />Κέντρο βοήθειας<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Πράκτορας X</translation> <translation id="3031557471081358569">Επιλογή στοιχείων για εισαγωγή:</translation> <translation id="3033332627063280038">Ενεργοποιήστε την πειραματική εφαρμογή της οδηγίας Cache-Control: stale-while-revalidate. Αυτή η οδηγία επιτρέπει στους διακομιστές να πραγματοποιούν επανάληψη επικύρωσης στο παρασκήνιο για ορισμένους πόρους, ώστε να μειώνεται η καθυστέρηση στο δίκτυο.</translation> @@ -1657,7 +1669,6 @@ <translation id="3324301154597925148">Είναι αυτή η σελίδα αναζήτησης που περιμένατε;</translation> <translation id="3324684065575061611">(Απενεργοποιήθηκε από την πολιτική κεντρικής διαχείρισης)</translation> <translation id="3326821416087822643">Συμπίεση αρχείου <ph name="FILE_NAME" />…</translation> -<translation id="3330206034087160972">Έξοδος από τη λειτουργία παρουσίασης</translation> <translation id="3330686263988132416">Κεφαλίδα προέλευσης WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Ενεργοποίηση της λειτουργίας κατοπτρισμού οθόνης. Αυτή η λειτουργία γυρίζει οριζόντια την εικόνα της οθόνης.</translation> @@ -1702,6 +1713,7 @@ <translation id="3392020134425442298">Ανάκτηση κακόβουλου αρχείου</translation> <translation id="3394150261239285340">Ο ιστότοπος <ph name="HOST" /> επιθυμεί να χρησιμοποιήσει την κάμερα και το μικρόφωνο σας.</translation> <translation id="3394279550557729862">Ενεργοποίηση υποστήριξης για τη χρήση των αναδυόμενων εγγενών ειδοποιήσεων και του κέντρου ειδοποιήσεων σε πλατφόρμες στις οποίες είναι διαθέσιμα.</translation> +<translation id="3394862755749546286">Απενεργοποιεί την ενοποιημένη (Android και υπολογιστές) διοχέτευση πολυμέσων στο Android.</translation> <translation id="3396331542604645348">Ο επιλεγμένος εκτυπωτής δεν είναι διαθέσιμος ή δεν έχει εγκατασταθεί σωστά. Ελέγξτε τον εκτυπωτή σας ή δοκιμάστε να επιλέξετε άλλον εκτυπωτή.</translation> <translation id="3399597614303179694">Πληκτρολόγιο Σλαβομακεδονικών</translation> <translation id="3401130144947259741">Αν είναι ενεργοποιημένη, τα συμβάντα ανίχνευσης θα εξάγονται στο Event Tracing for Windows (ETW) και θα μπορούν να καταγραφούν στη συνέχεια από εργαλεία όπως το UIForETW ή το Xperf.</translation> @@ -1913,7 +1925,6 @@ <translation id="367645871420407123">αφήστε κενό εάν θέλετε να ορίσετε τον ριζικό κωδικό πρόσβασης στην προεπιλεγμένη τιμή δοκιμαστικής εικόνας</translation> <translation id="3678156199662914018">Επέκταση: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Πληκτρολόγιο Μάλτας</translation> -<translation id="3680173818488851340">Iframe χαμηλής προτεραιότητας.</translation> <translation id="3683524264665795342">Αίτημα κοινής χρήσης οθόνης από την εφαρμογή <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Ο συγχρονισμός του Google Drive είναι απενεργοποιημένος από προεπιλογή όταν χρησιμοποιούνται δεδομένα κινητής τηλεφωνίας.</translation> <translation id="3685387984467886507">Απομνημόνευση αποφάσεων για παράβλεψη σφαλμάτων SSL για ένα συγκεκριμένο χρονικό διάστημα.</translation> @@ -1962,6 +1973,7 @@ <translation id="3741158646617793859">Το <ph name="DEVICE_NAME" /> θα εμφανίζεται πλέον στην Κονσόλα διαχειριστή</translation> <translation id="3741243925913727067">Δημιουργία αντιγράφων ασφαλείας για τις φωτογραφίες και τα βίντεο της συσκευής μέσων στο Google Drive.</translation> <translation id="3743492083222969745">Ενεργοποίηση/απενεργοποίηση της επιλογής πληκτρολόγησης με κινήσεις στη σελίδα ρυθμίσεων για το εικονικό πληκτρολόγιο.</translation> +<translation id="3744111561329211289">Συγχρονισμός παρασκηνίου</translation> <translation id="3749289110408117711">Όνομα αρχείου</translation> <translation id="3751427701788899101">Η σύνδεση χάθηκε</translation> <translation id="3751522270321808809">Αυτός ο ιστότοπος ενδέχεται να προσπαθήσει να σας ξεγελάσει για να υποκλέψει τα στοιχεία σας (για παράδειγμα, κωδικούς πρόσβασης, μηνύματα ή πιστωτικές κάρτες).</translation> @@ -2280,6 +2292,7 @@ <translation id="4218259925454408822">Σύνδεση σε άλλο λογαριασμό…</translation> <translation id="4219614746733932747">Εάν είναι ενεργό, το Blink χρησιμοποιεί το μηχανισμό ζουμ για να προβάλλει περιεχόμενο σε κλίμακα, σύμφωνα με τον παράγοντα κλίμακας της συσκευής.</translation> <translation id="4220865787605972627">Να επιτρέπεται η βαθμονόμηση χρωμάτων της οθόνης, εάν η οθόνη υποστηρίζει τη λειτουργία.</translation> +<translation id="4232692576734035989">Άκρως πειραματική λειτουργία απόδοσης, στην οποία τα iframe σε ολόκληρο τον ιστότοπο διατηρούνται σε μια ξεχωριστή διαδικασία από το κορυφαίο έγγραφο. Σε αυτήν τη λειτουργία, θα επιτρέπεται στα iframe που προέρχονται από διαφορετικούς ιστότοπους τρίτου μέρους να μοιράζονται μια διαδικασία.</translation> <translation id="4235200303672858594">Πλήρης οθόνη</translation> <translation id="4235813040357936597">Προσθήκη λογαριασμού για <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Δεν είναι δυνατή η εμφάνιση του <ph name="PRODUCT_NAME" /> σε αυτή τη γλώσσα</translation> @@ -2445,6 +2458,7 @@ <translation id="4509017836361568632">Απόρριψη φωτογραφίας</translation> <translation id="4509345063551561634">Τοποθεσία:</translation> <translation id="4514542542275172126">Ρύθμιση νέου εποπτευόμενου χρήστη</translation> +<translation id="4514914692061505365">Υποχρεωτική χρήση του γρήγορου συστήματος μετάφρασης Subzero της PNaCl για όλα τα αρχεία pexe.</translation> <translation id="4518677423782794009">Προκαλούνται διακοπές λειτουργίας στο Chrome, εμφανίζονται ασυνήθιστες σελίδες εκκίνησης ή γραμμές εργαλείων, μη αναμενόμενες διαφημίσεις, από τις οποίες δεν μπορείτε να απαλλαγείτε ή αλλοιώνεται με κάποιον άλλο τρόπο η εμπειρία περιήγησής σας; Ενδέχεται να καταφέρετε να επιδιορθώσετε το πρόβλημα εκτελώντας το Εργαλείο καθαρισμού του Chrome.</translation> <translation id="452039078290142656">άγνωστες συσκευές από τον προμηθευτή <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Λεπτομέρειες</translation> @@ -2493,6 +2507,7 @@ <translation id="4595560905247879544">Οι εφαρμογές και οι επεκτάσεις μπορούν να τροποποιηθούν μόνο από τον διαχειριστή(<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Εργαλείο μετατροπής EMF</translation> <translation id="4602466770786743961">Να επιτρέπεται πάντα στο <ph name="HOST" /> η πρόσβαση στην κάμερα και στο μικρόφωνό σας</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Δεν υπάρχει σύνδεση στο διαδίκτυο</translation> <translation id="4608500690299898628">&Εύρεση...</translation> <translation id="4610637590575890427">Μήπως θέλετε να μεταβείτε στο <ph name="SITE" />;</translation> @@ -2799,6 +2814,7 @@ <translation id="5062930723426326933">Αποτυχία σύνδεσης, συνδεθείτε στο διαδίκτυο και δοκιμάστε ξανά.</translation> <translation id="5063180925553000800">Νέο PIN:</translation> <translation id="5067867186035333991">Ερώτηση αν το <ph name="HOST" /> επιθυμεί να αποκτήσει πρόσβαση στο μικρόφωνό σας</translation> +<translation id="5068918910148307423">Να μην επιτρέπεται στους ιστότοπους που έκλεισαν πρόσφατα να ολοκληρώνουν την αποστολή και τη λήψη δεδομένων</translation> <translation id="507075806566596212">Πρόκειται να προσθέσετε αυτή τη συσκευή <ph name="DEVICE_TYPE" /> στο Google για να ενεργοποιήσετε τη δυνατότητα απομακρυσμένου εντοπισμού τοποθεσίας, εκκαθάρισης και κλειδώματος της συσκευής. Αυτή η διαδικασία απαιτεί επανεκκίνηση. Θέλετε να συνεχίσετε;</translation> <translation id="5072836811783999860">Εμφάνιση διαχειριζόμενων σελιδοδεικτών</translation> <translation id="5074318175948309511">Αυτή η σελίδα ενδεχομένως να πρέπει να φορτωθεί εκ νέου προτού ενεργοποιηθούν οι νέες ρυθμίσεις.</translation> @@ -2910,6 +2926,7 @@ <translation id="5227808808023563348">Εύρεση προηγούμενου κειμένου</translation> <translation id="5228076606934445476">Κάτι δεν πάει καλά με τη συσκευή. Για να την επαναφέρετε από αυτό το σφάλμα, θα πρέπει να κάνετε επανεκκίνηση της συσκευής και να προσπαθήσετε ξανά.</translation> <translation id="5228962187251412618">Έλεγχος μόνο στο διαδίκτυο</translation> +<translation id="5229622432348746578">Απενεργοποίηση ήχου για κοινή χρήση υπολογιστή</translation> <translation id="5230516054153933099">Παράθυρο</translation> <translation id="5232178406098309195">Όταν χρησιμοποιείτε εντολές ενεργοποίησης ήχου, όπως "Ok Google", ή αγγίζετε ένα εικονίδιο μικροφώνου, η προσωπική σας Δραστηριότητα φωνής και ήχου αποθηκεύει τη φωνή και άλλους ήχους στο λογαριασμό σας. Θα αποθηκεύεται η εγγραφή της επακόλουθης ομιλίας/ήχου, καθώς και μερικά δευτερόλεπτα που προηγούνται.</translation> <translation id="523299859570409035">Εξαιρέσεις ειδοποιήσεων</translation> @@ -3165,6 +3182,7 @@ <translation id="5557991081552967863">Διατήρηση ενεργοποιημένου Wi-Fi κατά την αδράνεια</translation> <translation id="5558129378926964177">Μεγέθυνση</translation> <translation id="556042886152191864">Κουμπί</translation> +<translation id="5562781907504170924">Αυτή η καρτέλα είναι συνδεδεμένη σε μια συσκευή Bluetooth.</translation> <translation id="5565871407246142825">Πιστωτικές κάρτες</translation> <translation id="5567989639534621706">Προσωρινές μνήμες εφαρμογών</translation> <translation id="5568069709869097550">Δεν είναι δυνατή η σύνδεση</translation> @@ -3325,6 +3343,7 @@ <translation id="5803531701633845775">Επιλέξτε φράσεις από το παρασκήνιο, χωρίς να μετακινήσετε το δείκτη</translation> <translation id="5804241973901381774">Άδειες</translation> <translation id="580571955903695899">Αναδιοργάνωση κατά τίτλο</translation> +<translation id="5808982448801399019">Η εξουσιοδότηση απέτυχε</translation> <translation id="580961539202306967">Να μου ζητείται άδεια όταν ένας ιστότοπος θέλει να μου στέλνει μηνύματα push (συνιστάται)</translation> <translation id="5815645614496570556">Διεύθυνση X.400</translation> <translation id="5817397429773072584">Παραδοσιακά Κινεζικά</translation> @@ -3594,6 +3613,7 @@ <translation id="6243774244933267674">Ο διακομιστής δεν είναι διαθέσιμος</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Έτοιμη ενημέρωση</translation> +<translation id="6248400709929739064">Ενεργοποίηση υπότιτλων</translation> <translation id="6248988683584659830">Ρυθμίσεις αναζήτησης</translation> <translation id="6251870443722440887">Χειρισμοί GDI</translation> <translation id="6251889282623539337">Όροι Παροχής Υπηρεσιών <ph name="DOMAIN" /></translation> @@ -3618,6 +3638,7 @@ <translation id="6277105963844135994">Χρονικό όριο δικτύου</translation> <translation id="6277518330158259200">Λήψη στιγμιότυπου οθόνης</translation> <translation id="6279183038361895380">Πιέστε |<ph name="ACCELERATOR" />| για να εμφανιστεί ο δρομέας</translation> +<translation id="6280215091796946657">Συνδεθείτε με διαφορετικό λογαριασμό</translation> <translation id="6281743458679673853">Πείραμα με σκοπό όλα τα API να αντανακλούν τη θύρα προβολής διάταξης. Αυτό θα κάνει τις ιδιότητες window.scroll σχετικές με τη θύρα προβολής διάταξης.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Εντοπίστηκε νέος εκτυπωτής στο δίκτυό σας}other{Εντοπίστηκαν νέοι εκτυπωτές στο δίκτυό σας}}</translation> <translation id="6285395082104474418">Η περιοχή κατάστασης εμφανίζει την τρέχουσα κατάσταση του δικτύου, της μπαταρίας σας και άλλα.</translation> @@ -3699,6 +3720,9 @@ <translation id="6418160186546245112">Γίνεται επαναφορά στην προηγούμενη εγκατεστημένη έκδοση του <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Οριστική κατάργηση πρόσβασης για όλες τις εφαρμογές</translation> <translation id="6418505248408153264">Ενεργοποίηση ιστορικού Material Design</translation> +<translation id="6419288379019356534">Η διαχείριση αυτής της συσκευής γίνεται από το <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Κάντε κλικ στο "Επόμενο" για να συνεχίσετε τη σύνδεση στον λογαριασμό σας <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Κεντρική Ευρώπη</translation> <translation id="6420676428473580225">Προσθήκη στην επιφάνεια εργασίας</translation> <translation id="6422329785618833949">Η φωτογραφία μετακινήθηκε</translation> @@ -3859,7 +3883,6 @@ <translation id="6662016084451426657">Σφάλμα συγχρονισμού: Επικοινωνήστε με τον διαχειριστή για την ενεργοποίηση συγχρονισμού.</translation> <translation id="6663792236418322902">Ο κωδικός που επιλέγετε θα χρειαστεί αργότερα για την επαναφορά αυτού του αρχείου. Καταγράψτε τον σε ασφαλές μέρος.</translation> <translation id="6664237456442406323">Δυστυχώς, ο υπολογιστής σας έχει διαμορφωθεί με ένα εσφαλμένο αναγνωριστικό υλικού. Αυτό παρεμποδίζει την ενημέρωση του Chrome OS με τις πιο πρόσφατες επιδιορθώσεις ασφαλείας και ο υπολογιστής σας <ph name="BEGIN_BOLD" />ενδέχεται να είναι ευάλωτος σε κακόβουλες επιθέσεις<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Μειώνει την προτεραιότητα φόρτωσης των πόρων iframe.</translation> <translation id="6666647326143344290">με τον Λογαριασμός σας Google</translation> <translation id="6675665718701918026">Η συσκευή κατάδειξης είναι συνδεδεμένη</translation> <translation id="6677037229676347494">Αναμενόταν το αναγνωριστικό "<ph name="EXPECTED_ID" />", ωστόσο το αναγνωριστικό ήταν το "<ph name="NEW_ID" />".</translation> @@ -3953,6 +3976,7 @@ </translation> <translation id="6827236167376090743">Αυτό το βίντεο θα συνεχίσει να παίζει για πάντα.</translation> <translation id="6828153365543658583">Περιορισμός σύνδεσης στους ακόλουθους χρήστες:</translation> +<translation id="6828434191343384461">Τα επιλεγμένα δεδομένα καταργήθηκαν από το Chrome και από τις συγχρονισμένες συσκευές. Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης, όπως αναζητήσεις και δραστηριότητα από άλλες υπηρεσίες Google στη διεύθυνση <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Αποτυχία ρύθμισης αυτόματων ενημερώσεων για όλους τους χρήστες (σφάλμα προληπτικής εκτέλεσης: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Λάβετε βοήθεια για τη συσκευή σας <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Εγγραφή στον οργανισμό σας</translation> @@ -4034,6 +4058,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Θύρα</translation> <translation id="6965978654500191972">Συσκευή</translation> +<translation id="6969104364835835175">Υποχρεωτική ενεργοποίηση του PNaCl Subzero</translation> <translation id="6970230597523682626">Βουλγαρικά</translation> <translation id="6970480684834282392">Τύπος εκκίνησης</translation> <translation id="6970856801391541997">Εκτύπωση συγκεκριμένων σελίδων</translation> @@ -4118,10 +4143,12 @@ <translation id="7057058088140140610">Πιστωτικές κάρτες και διευθύνσεις που χρησιμοποιούν το Google Payments</translation> <translation id="7059858479264779982">Ορισμός σε αυτόματη εκκίνηση</translation> <translation id="7061692898138851896">Αυτόματη αποθήκευση κωδικών πρόσβασης</translation> +<translation id="7062222374113411376">Να επιτρέπεται στους ιστότοπους που έκλεισαν πρόσφατα να ολοκληρώνουν την αποστολή και τη λήψη δεδομένων (συνιστάται)</translation> <translation id="7063129466199351735">Γίνεται επεξεργασία συντομεύσεων…</translation> <translation id="7065223852455347715">Αυτή η συσκευή είναι κλειδωμένη σε μια λειτουργία που αποτρέπει την εγγραφή εταιρείας. Εάν θέλετε να εγγράψετε τη συσκευή σας θα πρέπει πρώτα να επιλέξετε την ανάκτηση δεδομένων.</translation> <translation id="7065534935986314333">Σχετικά με το σύστημα</translation> <translation id="7066944511817949584">Αποτυχία σύνδεσης στη συσκευή "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Να μην εμφανιστεί ξανά αυτό το μήνυμα.</translation> <translation id="7070804685954057874">Άμεση εισαγωγή</translation> <translation id="7072010813301522126">Όνομα συντόμευσης</translation> <translation id="7072025625456903686">Να επιτρέπονται όλα ή προσαρμογή</translation> @@ -4395,6 +4422,7 @@ <translation id="7489605380874780575">Έλεγχος καταλληλότητας</translation> <translation id="749028671485790643">Άτομο <ph name="VALUE" /></translation> <translation id="7491962110804786152">καρτέλα</translation> +<translation id="7493386493263658176">Η επέκταση <ph name="EXTENSION_NAME" /> μπορεί να συλλέγει όλο το κείμενο που πληκτρολογείτε, συμπεριλαμβανομένων προσωπικών δεδομένων, όπως κωδικών πρόσβασης και αριθμών πιστωτικών καρτών. Θέλετε να χρησιμοποιήσετε αυτήν την επέκταση;</translation> <translation id="7495778526395737099">Ξεχάσατε τον προηγούμενο κωδικό πρόσβασης σας;</translation> <translation id="7503191893372251637">Τύπος πιστοποιητικού Netscape</translation> <translation id="7503821294401948377">Δεν ήταν δυνατή η φόρτωση του εικονιδίου "<ph name="ICON" />" για ενέργεια προγράμματος περιήγησης.</translation> @@ -4448,6 +4476,7 @@ <translation id="756445078718366910">Άνοιγμα παραθύρου προγράμματος περιήγησης</translation> <translation id="7564847347806291057">Τερματισμός διαδικασίας</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Τα δεδομένα του Chrome διαγράφηκαν</translation> <translation id="7568790562536448087">Ενημέρωση</translation> <translation id="7573172247376861652">Φόρτιση μπαταρίας</translation> <translation id="7576032389798113292">6x4</translation> @@ -4577,6 +4606,7 @@ <translation id="7786207843293321886">Έξοδος επισκέπτη</translation> <translation id="7786889348652477777">Ε&πανάληψη φόρτωσης εφαρμογής</translation> <translation id="7787129790495067395">Αυτή τη στιγμή χρησιμοποιείτε μια φράση πρόσβασης. Εάν δεν θυμάστε τη φράση πρόσβασής σας, μπορείτε να την επαναφέρετε για να διαγράψετε τα δεδομένα σας από τους διακομιστές Google, χρησιμοποιώντας τον Πίνακα ελέγχου της Google.</translation> +<translation id="7787308148023287649">Προβολή σε άλλη οθόνη</translation> <translation id="7788080748068240085">Για να αποθηκεύσετε το "<ph name="FILE_NAME" />" εκτός σύνδεσης, θα πρέπει να απελευθερώσετε επιπλέον <ph name="TOTAL_FILE_SIZE" /> χώρο:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />ξεκαρφιτσώστε αρχεία στα οποία δεν χρειάζεται πλέον να έχετε πρόσβαση<ph name="MARKUP_3" /> <ph name="MARKUP_4" />διαγράψτε αρχεία από το φάκελο "Λήψεις"<ph name="MARKUP_5" /></translation> @@ -4645,6 +4675,7 @@ <translation id="7878999881405658917">Η Google έστειλε μια ειδοποίηση σε αυτό το τηλέφωνο. Έχετε υπόψη σας ότι με το Bluetooth, το τηλέφωνό σας μπορεί να διατηρεί ξεκλειδωμένη τη συσκευή <ph name="DEVICE_TYPE" /> από απόσταση μεγαλύτερη των εννιά μέτρων. Αν δεν το επιθυμείτε αυτό, μπορείτε να <a>απενεργοποιήσετε προσωρινά αυτήν τη λειτουργία</a>.</translation> <translation id="7879478708475862060">Ακολουθήστε τη λειτουργία εισόδου</translation> <translation id="7880836220014399562">Το πακέτο "<ph name="BUNDLE_NAME" />" προσθέτει αυτές τις εφαρμογές και επεκτάσεις:</translation> +<translation id="7881969471599061635">Απενεργοποίηση υπότιτλων</translation> <translation id="7884988936047469945">Πειραματικές λειτουργίες προσβασιμότητας</translation> <translation id="7885253890047913815">Πρόσφατοι προορισμοί</translation> <translation id="7885283703487484916">πολύ σύντομη</translation> @@ -5012,6 +5043,7 @@ <translation id="839736845446313156">Εγγραφή</translation> <translation id="8398790343843005537">Εύρεση του τηλεφώνου σας</translation> <translation id="8398877366907290961">Συνέχεια</translation> +<translation id="8399276228600040370">Συνδεθείτε με τον λογαριασμό σας που έχει αποθηκευτεί στο <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Αποεπιλεγμένο πλαίσιο ελέγχου</translation> <translation id="8408402540408758445">Αποτελέσματα αναζήτησης πρόωρης λήψης</translation> <translation id="8410073653152358832">Χρήση αυτού του τηλεφώνου</translation> @@ -5098,6 +5130,7 @@ <translation id="8545211332741562162">Ενεργοποίηση ιστοσελίδων για χρήση πειραματικών λειτουργιών JavaScript.</translation> <translation id="8545575359873600875">Η επαλήθευση του κωδικού σας απέτυχε. Ο διαχειριστής αυτού του εποπτευόμενου χρήστη ενδεχομένως να άλλαξε πρόσφατα τον κωδικό. Σ' αυτήν την περίπτωση, ο νέος κωδικός θα εφαρμοστεί την επόμενη φορά που θα συνδεθείτε. Δοκιμάστε τον παλιό κωδικό σας.</translation> <translation id="8546306075665861288">Προσωρινή μνήμη εικόνας</translation> +<translation id="854653344619327455">Εάν έχει αυτήν την επισήμανση, το παράθυρο του εργαλείου επιλογής κοινής χρήσης υπολογιστή δεν θα δίνει τη δυνατότητα στο χρήστη να επιλέξει εάν θα επιτρέψει την κοινή χρήση ήχου.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Χαρακτήρας</translation> <translation id="855081842937141170">Καρφίτσωμα καρτέλας</translation> @@ -5129,6 +5162,7 @@ <translation id="8589311641140863898">Πειραματικά API επεκτάσεων</translation> <translation id="8590375307970699841">Ρύθμιση αυτόματων ενημερώσεων</translation> <translation id="8592071947729879125">Περιορισμός αδειών iframe</translation> +<translation id="8592125506633137593">Απομόνωση κορυφαίου εγγράφου</translation> <translation id="8594787581355215556">Συνδέθηκε ως <ph name="USER_EMAIL_ADDRESS" />. Διαχείριση των συγχρονισμένων δεδομένων σας στον <ph name="BEGIN_LINK" />Πίνακα ελέγχου Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Προσαρμοσμένα αρχεία</translation> <translation id="8596785155158796745">Το μικρόφωνο δεν είναι διαθέσιμο προς το παρόν. <ph name="BEGIN_LINK" />Διαχείριση μικροφώνου<ph name="END_LINK" /></translation> @@ -5202,6 +5236,7 @@ <translation id="8688579245973331962">Δεν βλέπετε το όνομά σας;</translation> <translation id="8688644143607459122">Εάν κάνετε κλικ στο κουμπί "Συνέχεια", δηλώνετε ότι αποδέχεστε τη χρήση του Google Payments. Για τη δική σας προστασία από απάτη, θα γίνει κοινή χρήση των στοιχείων που αφορούν τον υπολογιστή σας, συμπεριλαμβανομένης της τοποθεσίας του, στο Google Payments.</translation> <translation id="8689102680909215706">Έγινε απομακρυσμένη εγκατάσταση της επέκτασης "<ph name="EXTENSION_NAME" />".</translation> +<translation id="868926756781121513">Κοινή χρήση υπολογιστή με πηγή καρτέλας</translation> <translation id="8689341121182997459">Λήξη:</translation> <translation id="8690754533598178758">Οι εξαιρέσεις Adobe Flash Player μικροφώνου είναι διαφορετικές.</translation> <translation id="8691686986795184760">(Ενεργοποιημένη λόγω πολιτικής επιχείρησης)</translation> @@ -5246,6 +5281,7 @@ <translation id="8737685506611670901">Άνοιγμα συνδέσμων <ph name="PROTOCOL" /> αντί για <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Συγκεκριμενοποίηση της θέσης μιας κίνησης αφής για αντιστάθμιση των κινήσεων αφής χαμηλής ανάλυσης σε σύγκριση με το ποντίκι.</translation> +<translation id="8741995161408053644">Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Εμφάνιση ανεπτυγμένων επιλογών εισόδου στο ράφι.</translation> <translation id="874420130893181774">Μέθοδος εισαγωγής παραδοσιακών Πινγίν</translation> <translation id="8744525654891896746">Επιλέξτε avatar για αυτόν το χρήστη υπό επίβλεψη</translation> @@ -5257,6 +5293,7 @@ <translation id="8757640015637159332">Είσοδος σε δημόσια περίοδο σύνδεσης</translation> <translation id="8757742102600829832">Επιλέξτε ένα Chromebox για να συνδεθείτε</translation> <translation id="8757803915342932642">Συσκευή στις Συσκευές Google Cloud</translation> +<translation id="8758895886513993540">Αυτή η επισήμανση ελέγχει αν οι χρήστες μπορούν να επιλέξουν μια καρτέλα για κοινή χρήση υπολογιστή.</translation> <translation id="8759408218731716181">Δεν είναι δυνατή η δημιουργία πολλαπλών συνδέσεων</translation> <translation id="8759753423332885148">Μάθετε περισσότερα.</translation> <translation id="8761567432415473239">Η ασφαλής περιήγηση Google <ph name="BEGIN_LINK" />εντόπισε επιβλαβή προγράμματα<ph name="END_LINK" /> πρόσφατα στο <ph name="SITE" />.</translation> @@ -5469,6 +5506,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Συνδέθηκε ποντίκι USB</translation> <translation id="9076523132036239772">Λυπούμαστε, αλλά δεν ήταν δυνατή η επαλήθευση της διεύθυνσης ηλεκτρονικού ταχυδρομείου ή του κωδικού πρόσβασής σας. Δοκιμάστε πρώτα να συνδεθείτε σε ένα δίκτυο.</translation> +<translation id="9077132661879924646">Απενεργοποιεί την ενοποιημένη διοχέτευση πολυμέσων στο Android.</translation> <translation id="907841381057066561">Αποτυχία δημιουργίας προσωρινού αρχείου zip κατά τη συσκευασία.</translation> <translation id="9083147368019416919">Η κατάργηση εγγραφής απέτυχε</translation> <translation id="9084064520949870008">Άνοιγμα σε παράθυρο</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 395d63a..2dd34f1 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -564,7 +564,6 @@ <translation id="1783075131180517613">Please update your sync passphrase.</translation> <translation id="1788636309517085411">Use default</translation> <translation id="1789575671122666129">Popups</translation> -<translation id="1790550373387225389">Enter Presentation Mode</translation> <translation id="1792705092719258158">Enable mirrored screen mode.</translation> <translation id="1793119619663054394">Are you sure that you want to remove "<ph name="PROFILE_NAME" />" and all associated Chrome data from this computer? This cannot be undone.</translation> <translation id="179767530217573436">the last 4 weeks</translation> @@ -1663,7 +1662,6 @@ <translation id="3324301154597925148">Is This the Search Page That You Were Expecting?</translation> <translation id="3324684065575061611">(Disabled by enterprise policy)</translation> <translation id="3326821416087822643">Zipping <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Exit Presentation Mode</translation> <translation id="3330686263988132416">WebRTC Stun origin header</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Enable the mirrored screen mode. This mode flips the screen image horizontally.</translation> @@ -1919,7 +1917,6 @@ <translation id="367645871420407123">leave empty if you want to set the root password to the default test image value</translation> <translation id="3678156199662914018">Extension: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltese keyboard</translation> -<translation id="3680173818488851340">Low priority iframes.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> Screen Sharing Request</translation> <translation id="3685122418104378273">Google Drive sync is disabled by default, when using mobile data.</translation> <translation id="3685387984467886507">Remember decisions to proceed through SSL errors for a specified length of time.</translation> @@ -3873,7 +3870,6 @@ <translation id="6662016084451426657">Sync Error: Please contact administrator to enable sync.</translation> <translation id="6663792236418322902">The password that you choose will be required to restore this file later. Please record it in a safe location.</translation> <translation id="6664237456442406323">Unfortunately, your computer is configured with a malformed hardware ID. This prevents Chrome OS from updating with the latest security fixes and your computer <ph name="BEGIN_BOLD" />may be vulnerable to malicious attacks<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduces the load priority of iframe resources.</translation> <translation id="6666647326143344290">with your Google Account</translation> <translation id="6675665718701918026">Pointing device connected</translation> <translation id="6677037229676347494">Expected ID "<ph name="EXPECTED_ID" />", but ID was "<ph name="NEW_ID" />".</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index cdd2707..f01d234a 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Selecciona una región cuadrada en la imagen.</translation> <translation id="1697532407822776718">¡Listo!</translation> +<translation id="1697988819212986149">Muestra un ícono de Google junto a los elementos del menú de contexto basados en los servicios de Google.</translation> <translation id="1699274548822076330">Esto se debe usar junto con la marca trace-upload-url. ADVERTENCIA: En caso de estar habilitado, Chrome registrará los datos de rendimiento de cada navegación y los subirá a la URL especificada en la marca trace-upload-url. El seguimiento puede incluir información de identificación personal (PII, por sus siglas en inglés), como los títulos y las URL de los sitios web que se visitan.</translation> <translation id="1699395855685456105">Revisión de hardware:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">Actualiza tu frase de contraseña de sincronización.</translation> <translation id="1788636309517085411">Usar predeterminado</translation> <translation id="1789575671122666129">Ventanas emergentes</translation> -<translation id="1790550373387225389">Acceder al modo Presentación</translation> <translation id="1792705092719258158">Habilitar el modo de pantalla espejada</translation> <translation id="1793119619663054394">¿Confirmas que quieres eliminar "<ph name="PROFILE_NAME" />" y todos los datos de Chrome asociados de esta computadora? Esta acción no se puede deshacer.</translation> <translation id="179767530217573436">las últimas 4 semanas</translation> @@ -1151,6 +1151,7 @@ <translation id="267285457822962309">Cambiar la configuración específica de tu dispositivo y los dispositivos periféricos.</translation> <translation id="2673135533890720193">Leer el historial de navegación</translation> <translation id="2673589024369449924">Crear un acceso directo en el escritorio para este usuario</translation> +<translation id="2675358154061544447">Compatibilidad muy experimental para procesar iframes entre sitios en procesos separados. En este modo, los documentos comparten una instancia de procesamiento solo si pertenecen al mismo sitio web.</translation> <translation id="2676946222714718093">Reproduciendo en</translation> <translation id="2678063897982469759">Permitir nuevamente</translation> <translation id="2678246812096664977">Todos los complementos</translation> @@ -1377,6 +1378,7 @@ <translation id="2960393411257968125">Establece la manera en que el administrador de contraseñas maneja la función Autocompletar para la credencial de sincronización.</translation> <translation id="29611076221683977">Los atacantes que se encuentran actualmente en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podrían intentar instalar programas peligrosos en tu Mac con el fin de robarte información o eliminarla (por ejemplo, fotos, contraseñas, mensajes y tarjetas de crédito).</translation> <translation id="2961695502793809356">Haz clic para continuar o espera para ver el historial</translation> +<translation id="296216853343927883">Marca de Google en el menú contextual</translation> <translation id="2963151496262057773">El siguiente complemento no responde: <ph name="PLUGIN_NAME" /> ¿Quieres detenerlo?</translation> <translation id="2963783323012015985">Teclado turco</translation> <translation id="2964193600955408481">Desactivar Wi-Fi</translation> @@ -1426,6 +1428,16 @@ <translation id="3025729795978504041">Para ver a otras personas, haz clic derecho en el botón que se muestra arriba.</translation> <translation id="3026050830483105579">Está todo aquí.</translation> <translation id="302620147503052030">Mostrar botón</translation> +<translation id="302781076327338683">Volver a cargar sin almacenar en caché</translation> +<translation id="3030243755303701754">Un usuario supervisado puede explorar la Web con tu asesoramiento. Como administrador de un usuario supervisado en Chrome, puedes hacer lo siguiente: + + • Permitir o prohibir determinados sitios web. + • Revisar los sitios web que el usuario supervisado haya visitado. + • Administrar otras opciones de configuración. + +La creación de un usuario supervisado no implica la creación de una cuenta de Google. Además, Chrome Sync no sincronizará sus marcadores, historial de navegación ni otras preferencias en otros dispositivos. Después de que hayas creado un usuario supervisado nuevo, puedes administrar su configuración en cualquier momento, desde cualquier dispositivo, mediante <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Para obtener más información, visita nuestro <ph name="BEGIN_LINK" />Centro de ayuda<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agente X</translation> <translation id="3031557471081358569">Selecciona elementos para importar:</translation> <translation id="3033332627063280038">Habilitar la implementación experimental de la directiva Cache-Control: stale-while-revalidate. Esto les permite a los servidores indicar que algunos recursos pueden haberse revalidado en segundo plano para mejorar la latencia.</translation> @@ -1646,7 +1658,6 @@ <translation id="3324301154597925148">¿Esta es la página de búsqueda que esperabas ver?</translation> <translation id="3324684065575061611">(Deshabilitado por la política empresarial)</translation> <translation id="3326821416087822643">Comprimiendo <ph name="FILE_NAME" />…</translation> -<translation id="3330206034087160972">Salir del modo Presentación</translation> <translation id="3330686263988132416">Encabezado de origen de WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Habilita el modo de pantalla de espejo. Este modo coloca la imagen de la pantalla en posición horizontal.</translation> @@ -1691,6 +1702,7 @@ <translation id="3392020134425442298">Recuperar archivo malicioso</translation> <translation id="3394150261239285340"><ph name="HOST" /> desea usar tu cámara y tu micrófono.</translation> <translation id="3394279550557729862">Habilita la compatibilidad para usar las notificaciones nativas y el centro de notificaciones en las plataformas en las que estén disponibles.</translation> +<translation id="3394862755749546286">Inhabilita el canal de contenido multimedia unificado (Android y escritorio) en Android.</translation> <translation id="3396331542604645348">La impresora seleccionada no está disponible o no está instalada correctamente. Comprueba tu impresora o selecciona otra.</translation> <translation id="3399597614303179694">Teclado macedonio</translation> <translation id="3401130144947259741">Si se habilita, los eventos de seguimiento se exportarán a Seguimiento de eventos para Windows (ETW) y se podrán capturar mediante herramientas como UIForETW o Xperf.</translation> @@ -1901,7 +1913,6 @@ <translation id="367645871420407123">dejar en blanco si quieres configurar la contraseña de raíz en el valor de la imagen de prueba predeterminada</translation> <translation id="3678156199662914018">Extensión: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Teclado maltés</translation> -<translation id="3680173818488851340">iframes de baja prioridad</translation> <translation id="3683524264665795342">Solicitud para compartir la pantalla de parte de <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">La sincronización con Google Drive está inhabilitada de manera predeterminada cuando se usan los datos móviles.</translation> <translation id="3685387984467886507">Se recordarán las decisiones relacionadas con los errores de SSL por un período especificado.</translation> @@ -1950,6 +1961,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> aparecerá ahora en la Consola del administrador.</translation> <translation id="3741243925913727067">Crea una copia de seguridad de las fotos y los videos del dispositivo de medios en Google Drive.</translation> <translation id="3743492083222969745">Permite habilitar o inhabilitar la opción de entrada gestual en la página de configuración del teclado virtual.</translation> +<translation id="3744111561329211289">Sincronización en segundo plano</translation> <translation id="3749289110408117711">Nombre del archivo</translation> <translation id="3751427701788899101">Se perdió la conexión</translation> <translation id="3751522270321808809">Es posible que el sitio intente engañarte para robarte información (p. ej.: contraseñas, mensajes o tarjetas de crédito).</translation> @@ -2267,6 +2279,7 @@ <translation id="4218259925454408822">Acceder con otra cuenta</translation> <translation id="4219614746733932747">Si se habilita, Blink usa su mecanismo de zoom a fin de modificar la escala del contenido para el factor de escalas del dispositivo.</translation> <translation id="4220865787605972627">Permite la calibración del color de la pantalla si la pantalla admite la función.</translation> +<translation id="4232692576734035989">Modo de rendimiento muy experimental donde los iframes entre sitios se mantienen en un proceso separado del documento superior. En este modo, los iframes de diferentes sitios de terceros pueden compartir un proceso.</translation> <translation id="4235200303672858594">Toda la pantalla</translation> <translation id="4235813040357936597">Agregar cuenta para <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> no se puede mostrar en este idioma</translation> @@ -2432,6 +2445,7 @@ <translation id="4509017836361568632">Descartar foto</translation> <translation id="4509345063551561634">Ubicación:</translation> <translation id="4514542542275172126">Configurar un nuevo usuario supervisado</translation> +<translation id="4514914692061505365">Fuerza el uso del traductor rápido Subzero de PNaCl para todos los archivos pexe.</translation> <translation id="4518677423782794009">¿Se producen fallos en Chrome, se muestran páginas de inicio o barras de herramientas inusuales, aparecen anuncios inesperados que no puedes cerrar, o la experiencia de navegación cambia de alguna manera? Puedes solucionar el problema con la Herramienta para limpiar Chrome.</translation> <translation id="452039078290142656">dispositivos desconocidos de <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalles</translation> @@ -2480,6 +2494,7 @@ <translation id="4595560905247879544">Solo el administrador (<ph name="CUSTODIAN_NAME" />) puede modificar las apps y extensiones.</translation> <translation id="4601242977939794209">Convertidor de EMF</translation> <translation id="4602466770786743961">Siempre permitir que <ph name="HOST" /> acceda a la cámara y al micrófono</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">El dispositivo no está conectado a Internet.</translation> <translation id="4608500690299898628">&Buscar</translation> <translation id="4610637590575890427">¿Tal vez quieres ir a <ph name="SITE" />?</translation> @@ -2783,6 +2798,7 @@ <translation id="5062930723426326933">Se produjo un error al acceder. Conéctate a Internet y vuelve a intentarlo.</translation> <translation id="5063180925553000800">Nuevo PIN:</translation> <translation id="5067867186035333991">Preguntar si <ph name="HOST" /> quiere acceder al micrófono</translation> +<translation id="5068918910148307423">No permitir que los sitios cerrados recientemente terminen de enviar y recibir datos</translation> <translation id="507075806566596212">Estás a punto de registrar tu <ph name="DEVICE_TYPE" /> en Google para habilitar la función que permite localizar el dispositivo, bloquearlo y borrar sus datos de forma remota. Para esto, debes reiniciar el dispositivo. ¿Quieres continuar?</translation> <translation id="5072836811783999860">Mostrar marcadores administrados</translation> <translation id="5074318175948309511">Es posible que debas actualizar la página para que se aplique la nueva configuración.</translation> @@ -2892,6 +2908,7 @@ <translation id="5227808808023563348">Buscar el texto anterior</translation> <translation id="5228076606934445476">Se produjo un error con el dispositivo. Para solucionar este error, deberás reiniciar el dispositivo y volver a intentarlo.</translation> <translation id="5228962187251412618">Verificación en línea únicamente</translation> +<translation id="5229622432348746578">Inhabilitar el uso compartido de audio para escritorio</translation> <translation id="5230516054153933099">Ventana</translation> <translation id="5232178406098309195">Cuando utilizas los comandos de activación de audio, como "Ok Google" o la opción de tocar el ícono del micrófono, la actividad de voz y audio almacena algo de voz y audio en la cuenta. Se almacenará una grabación de lo próximo que digas o el próximo audio y el sonido de lo que haya unos segundos antes.</translation> <translation id="523299859570409035">Excepciones de notificaciones </translation> @@ -3146,6 +3163,7 @@ <translation id="5557991081552967863">Mantener el Wi-Fi encendido durante la suspensión</translation> <translation id="5558129378926964177">Acercar</translation> <translation id="556042886152191864">Botón</translation> +<translation id="5562781907504170924">Esta pestaña está conectada con un dispositivo Bluetooth.</translation> <translation id="5565871407246142825">Tarjetas de crédito</translation> <translation id="5567989639534621706">Cachés de aplicación</translation> <translation id="5568069709869097550">No puedo acceder</translation> @@ -3305,6 +3323,7 @@ <translation id="5803531701633845775">Elige frases de la parte posterior sin mover el cursor</translation> <translation id="5804241973901381774">Permisos</translation> <translation id="580571955903695899">Reordenar por título</translation> +<translation id="5808982448801399019">Se produjo un error en la autorización</translation> <translation id="580961539202306967">Preguntarme cuando un sitio quiera enviarme mensajes de inserción (recomendado)</translation> <translation id="5815645614496570556">Dirección X 400</translation> <translation id="5817397429773072584">Chino tradicional</translation> @@ -3574,6 +3593,7 @@ <translation id="6243774244933267674">Servidor no disponible</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Actualización lista</translation> +<translation id="6248400709929739064">Habilitar subtítulos</translation> <translation id="6248988683584659830">Buscar en configuración</translation> <translation id="6251870443722440887">A cargo de GDI</translation> <translation id="6251889282623539337">Condiciones del servicio de <ph name="DOMAIN" /></translation> @@ -3598,6 +3618,7 @@ <translation id="6277105963844135994">Tiempo de espera de red agotado</translation> <translation id="6277518330158259200">Tomar captura de pantalla</translation> <translation id="6279183038361895380">Presiona |<ph name="ACCELERATOR" />| para mostrar tu cursor</translation> +<translation id="6280215091796946657">Acceder con otra cuenta</translation> <translation id="6281743458679673853">Experimenta para que todas las API reflejen la ventana gráfica de diseño. De esta forma, las propiedades window.scroll estarán relacionadas con la ventana gráfica de diseño.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nueva impresora en la red}other{Nuevas impresoras en la red}}</translation> <translation id="6285395082104474418">La bandeja de estado te muestra el estado actual de la red y de la batería, entre otras cosas.</translation> @@ -3679,6 +3700,9 @@ <translation id="6418160186546245112">Revirtiendo a la versión de <ph name="IDS_SHORT_PRODUCT_NAME" /> instalada previamente</translation> <translation id="6418481728190846787">Eliminar el acceso para todas las aplicaciones de forma permanente</translation> <translation id="6418505248408153264">Habilitar el historial de Material Design</translation> +<translation id="6419288379019356534"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> administra este dispositivo. + <ph name="LINE_BREAK" /> + Haz clic en "Siguiente" para continuar con el acceso a tu cuenta de <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Europa Central</translation> <translation id="6420676428473580225">Agregar al escritorio</translation> <translation id="6422329785618833949">Foto girada</translation> @@ -3839,7 +3863,6 @@ <translation id="6662016084451426657">Error de sincronización: comunícate con el administrador para habilitar la sincronización.</translation> <translation id="6663792236418322902">La contraseña que selecciones se te pedirá para restablecer este archivo más tarde. Guárdalo en un lugar seguro.</translation> <translation id="6664237456442406323">Desafortunadamente, la computadora está configurada con un identificador de hardware incorrecto. Esto impide que el Sistema operativo Chrome se actualice con las últimas correcciones de seguridad, y la computadora <ph name="BEGIN_BOLD" />puede quedar vulnerable a ataques maliciosos<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduce la prioridad de carga de los recursos de iframe.</translation> <translation id="6666647326143344290">con tu Cuenta de Google</translation> <translation id="6675665718701918026">Dispositivo señalador conectado</translation> <translation id="6677037229676347494">Se esperaba un ID "<ph name="EXPECTED_ID" />", pero el ID fue "<ph name="NEW_ID" />".</translation> @@ -3932,6 +3955,7 @@ <translation id="6825883775269213504">Ruso</translation> <translation id="6827236167376090743">Este video seguirá reproduciéndose sin parar.</translation> <translation id="6828153365543658583">Restringir el inicio de sesión a los siguientes usuarios:</translation> +<translation id="6828434191343384461">Los datos seleccionados se quitaron de Chrome y los dispositivos sincronizados. Es posible que tu cuenta de Google tenga otros formularios del historial de navegación, como las búsquedas y la actividad de otros servicios de Google en <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">No se pudieron configurar actualizaciones automáticas para todos los usuarios (error de ejecución preliminar: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Obtén ayuda con tu <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registro en tu organización</translation> @@ -4012,6 +4036,7 @@ <translation id="6965382102122355670">Aceptar</translation> <translation id="6965648386495488594">Puerto</translation> <translation id="6965978654500191972">Dispositivo</translation> +<translation id="6969104364835835175">Forzar Subzero de PNaCl</translation> <translation id="6970230597523682626">Búlgaro</translation> <translation id="6970480684834282392">Tipo de inicio</translation> <translation id="6970856801391541997">Imprimir páginas específicas</translation> @@ -4094,10 +4119,12 @@ <translation id="7057058088140140610">Tarjetas de crédito y direcciones que utilizan Google Payments</translation> <translation id="7059858479264779982">Permitir inicio automático</translation> <translation id="7061692898138851896">Guardar contraseñas automáticamente</translation> +<translation id="7062222374113411376">Permitir que los sitios cerrados recientemente terminen de enviar y recibir datos (recomendado)</translation> <translation id="7063129466199351735">Procesando accesos directos…</translation> <translation id="7065223852455347715">Este dispositivo está bloqueado en un modo que evita el registro empresarial. Si deseas registrar este dispositivo, primero debes llevar a cabo su recuperación.</translation> <translation id="7065534935986314333">Acerca del sistema</translation> <translation id="7066944511817949584">Error al conectar con "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">No volver a mostrar.</translation> <translation id="7070804685954057874">Ingreso directo</translation> <translation id="7072010813301522126">Nombre del acceso directo</translation> <translation id="7072025625456903686">Permitir todo o personalizar</translation> @@ -4370,6 +4397,7 @@ <translation id="7489605380874780575">Comprobar disponibilidad</translation> <translation id="749028671485790643">Persona <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">Es posible que la extensión <ph name="EXTENSION_NAME" /> recopile todo el texto que escribas, lo que incluye datos personales como contraseñas y número de tarjetas de crédito. ¿Deseas usar esta extensión?</translation> <translation id="7495778526395737099">¿Olvidaste tu contraseña anterior?</translation> <translation id="7503191893372251637">Tipo de certificado Netscape</translation> <translation id="7503821294401948377">No se pudo cargar el ícono '<ph name="ICON" />' para las acciones del navegador.</translation> @@ -4421,6 +4449,7 @@ <translation id="756445078718366910">Abrir la ventana del navegador</translation> <translation id="7564847347806291057">Finalizar proceso</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Datos de Chrome borrados</translation> <translation id="7568790562536448087">Actualizando</translation> <translation id="7573172247376861652">Carga de batería</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4550,6 +4579,7 @@ <translation id="7786207843293321886">Salir de la sesión de invitado</translation> <translation id="7786889348652477777">&Volver a cargar la aplicación</translation> <translation id="7787129790495067395">Actualmente estás usando una frase de contraseña. Si has olvidado tu frase de contraseña, puedes restablecer la sincronización para eliminar tus datos de los servidores de Google utilizando el panel de Google.</translation> +<translation id="7787308148023287649">Mostrar en otra pantalla</translation> <translation id="7788080748068240085">Para guardar "<ph name="FILE_NAME" />" sin conexión, debes liberar un espacio adicional de <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" />. <ph name="MARKUP_2" />Desancla archivos a los que ya no necesites acceder sin conexión.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Elimina archivos de la carpeta de descargas.<ph name="MARKUP_5" /></translation> @@ -4618,6 +4648,7 @@ <translation id="7878999881405658917">Google envió una notificación a este teléfono. Ten en cuenta que, con la conexión Bluetooth activada, el teléfono puede mantener tu <ph name="DEVICE_TYPE" /> desbloqueado a una distancia de más de 30.5 m. Si hay ocasiones donde esto podría representar un problema, puedes <a>inhabilitar temporalmente esta función</a>.</translation> <translation id="7879478708475862060">Seguir el modo de entrada de texto</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" agrega las siguientes aplicaciones y excepciones:</translation> +<translation id="7881969471599061635">Inhabilitar subtítulos</translation> <translation id="7884988936047469945">Funciones de accesibilidad experimentales</translation> <translation id="7885253890047913815">Destinos recientes</translation> <translation id="7885283703487484916">muy breve</translation> @@ -4981,6 +5012,7 @@ <translation id="839736845446313156">Registrarse</translation> <translation id="8398790343843005537">Buscar teléfono</translation> <translation id="8398877366907290961">Continuar de todos modos</translation> +<translation id="8399276228600040370">Acceder con tu cuenta guardada con <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Desmarca la casilla de verificación</translation> <translation id="8408402540408758445">Enviar una solicitud previa de los resultados de búsqueda</translation> <translation id="8410073653152358832">Utilizar este teléfono</translation> @@ -5067,6 +5099,7 @@ <translation id="8545211332741562162">Permite habilitar las páginas que utilizan funciones de JavaScript experimentales.</translation> <translation id="8545575359873600875">No se pudo verificar la contraseña. Es posible que el administrador de este usuario supervisado haya cambiado la contraseña recientemente. De ser así, la nueva contraseña se aplicará la próxima vez que accedas. Intenta utilizar la contraseña antigua.</translation> <translation id="8546306075665861288">Caché de imagen</translation> +<translation id="854653344619327455">Cuando esta opción está marcada, la ventana con el selector para compartir escritorio le permitirá al usuario elegir si desea compartir el audio.</translation> <translation id="8546541260734613940">[*.]ejemplo.com</translation> <translation id="8548973727659841685">Carácter</translation> <translation id="855081842937141170">Fijar pestaña</translation> @@ -5097,6 +5130,7 @@ <translation id="8589311641140863898">Extensión experimental API</translation> <translation id="8590375307970699841">Configurar actualizaciones automáticas</translation> <translation id="8592071947729879125">Restringe los permisos de iframe.</translation> +<translation id="8592125506633137593">Aislamiento del documento superior</translation> <translation id="8594787581355215556">Accediste como <ph name="USER_EMAIL_ADDRESS" />. Administra tus datos sincronizados en el <ph name="BEGIN_LINK" />panel de control de Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Archivos personalizados</translation> <translation id="8596785155158796745">El micrófono no está disponible en este momento. <ph name="BEGIN_LINK" />Administrar micrófono<ph name="END_LINK" /></translation> @@ -5169,6 +5203,7 @@ <translation id="8688579245973331962">¿No aparece tu nombre?</translation> <translation id="8688644143607459122">Al hacer clic en Continuar, aceptas usar Google Payments. Para protegerte contra fraudes, se compartirá con Google Payments la información de la computadora que usas (incluida la ubicación).</translation> <translation id="8689102680909215706">La extensión "<ph name="EXTENSION_NAME" />" se instaló de forma remota.</translation> +<translation id="868926756781121513">Compartir escritorio con fuente de pestaña</translation> <translation id="8689341121182997459">Caduca:</translation> <translation id="8690754533598178758">Las excepciones del micrófono de Adobe Flash Player son diferentes.</translation> <translation id="8691686986795184760">(Activado por la política de empresa)</translation> @@ -5212,6 +5247,7 @@ <translation id="8737685506611670901">Abrir vínculos de <ph name="PROTOCOL" /> en lugar de <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Define mejor la posición de un gesto táctil para compensar la baja resolución de los toques con respecto a un mouse.</translation> +<translation id="8741995161408053644">Es posible que tu cuenta de Google tenga otros formularios del historial de navegación en <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Mostrar opciones de entrada expandidas en la biblioteca</translation> <translation id="874420130893181774">Método de entrada de pinyin tradicional</translation> <translation id="8744525654891896746">Seleccionar un avatar para este usuario supervisado</translation> @@ -5225,6 +5261,7 @@ <translation id="8757640015637159332">Acceder a la sesión pública</translation> <translation id="8757742102600829832">Selecciona una Chromebox para establecer conexión</translation> <translation id="8757803915342932642">Dispositivo en Google Cloud Devices</translation> +<translation id="8758895886513993540">Esta opción controla si los usuarios pueden usar una pestaña para compartir el escritorio.</translation> <translation id="8759408218731716181">No se puede configurar el acceso múltiple.</translation> <translation id="8759753423332885148">Más información</translation> <translation id="8761567432415473239">La navegación segura de Google <ph name="BEGIN_LINK" />encontró programas peligrosos<ph name="END_LINK" /> recientemente en <ph name="SITE" />.</translation> @@ -5435,6 +5472,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Mouse USB conectado</translation> <translation id="9076523132036239772">Lo sentimos, no pudimos verificar tu correo electrónico o contraseña. Intenta conectándote a una red.</translation> +<translation id="9077132661879924646">Inhabilita el canal de contenido multimedia unificado en Android.</translation> <translation id="907841381057066561">Error al crear el archivo zip temporal durante el empaquetado.</translation> <translation id="9083147368019416919">No se pudo anular el registro</translation> <translation id="9084064520949870008">Abrir como ventana</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 914059fa..ca6ba78 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Mayús</translation> <translation id="1697068104427956555">Selecciona una zona cuadrada de la imagen.</translation> <translation id="1697532407822776718">¡Listo!</translation> +<translation id="1697988819212986149">Muestra el icono de Google junto a los elementos del menú contextual con la tecnología de los Servicios de Google.</translation> <translation id="1699274548822076330">Se debe utilizar junto con el indicador trace-upload-url. ADVERTENCIA: Si se habilita, Chrome registrará los datos de rendimiento de cada navegación y los subirá a la URL que especifique el indicador trace-upload-url. Entre los datos que se pueden rastrear, se incluye información de identificación personal, como los títulos y las URL de los sitios web que visitas.</translation> <translation id="1699395855685456105">Revisión de hardware:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Actualiza tu frase de contraseña de sincronización.</translation> <translation id="1788636309517085411">Utilizar valores predeterminados</translation> <translation id="1789575671122666129">Pop-ups</translation> -<translation id="1790550373387225389">Entrar en modo de presentación</translation> <translation id="1792705092719258158">Habilitar modo de pantalla duplicada.</translation> <translation id="1793119619663054394">¿Seguro que quieres eliminar "<ph name="PROFILE_NAME" />" y todos los datos de Chrome asociados de este ordenador? Esta acción no se puede deshacer.</translation> <translation id="179767530217573436">hace cuatro semanas</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Cambia la configuración específica de tu dispositivo y de los periféricos.</translation> <translation id="2673135533890720193">Leer tu historial de navegación</translation> <translation id="2673589024369449924">Crear un acceso directo en el escritorio para este usuario</translation> +<translation id="2675358154061544447">Compatibilidad altamente experimental para representar marcos flotantes entre sitios en procesos distintos. En este modo, los documentos compartirán un proceso de renderización únicamente si pertenecen al mismo sitio web.</translation> <translation id="2676946222714718093">Reproduciendo en</translation> <translation id="2678063897982469759">Volver a habilitar</translation> <translation id="2678246812096664977">Todos los complementos</translation> @@ -1383,6 +1384,7 @@ <translation id="2960393411257968125">Establece cómo gestiona el administrador de contraseñas la introducción automática de las credenciales de sincronización.</translation> <translation id="29611076221683977">Los actuales atacantes del sitio <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podrían intentar instalar programas peligrosos en tu Mac para robar o eliminar tu información (por ejemplo, fotos, contraseñas, mensajes y tarjetas de crédito).</translation> <translation id="2961695502793809356">Haz clic para avanzar una página o pulsa unos segundos para ver el historial</translation> +<translation id="296216853343927883">Marcas de Google en el menú contextual</translation> <translation id="2963151496262057773">El complemento <ph name="PLUGIN_NAME" /> no responde. ¿Quieres detenerlo?</translation> <translation id="2963783323012015985">Teclado turco</translation> <translation id="2964193600955408481">Inhabilitar Wi-Fi</translation> @@ -1432,6 +1434,16 @@ <translation id="3025729795978504041">Haz clic con el botón derecho en el botón de arriba para ver a otras personas.</translation> <translation id="3026050830483105579">Lo tienes todo aquí.</translation> <translation id="302620147503052030">Mostrar botón</translation> +<translation id="302781076327338683">Volver a cargar la caché omitida</translation> +<translation id="3030243755303701754">Un usuario supervisado puede explorar la Web con tu ayuda. Como administrador de un usuario supervisado en Chrome, puedes: + + • permitir o prohibir determinados sitios web, + • consultar sitios web que haya visitado el usuario supervisado, + • administrar otras opciones. + +Al crear un usuario supervisado, no se crea una cuenta de Google, y sus marcadores, su historial de navegación y otras preferencias no estarán disponibles en otros dispositivos con la sincronización de Chrome. Una vez que hayas creado un nuevo usuario supervisado, podrás administrar su configuración en cualquier momento y desde cualquier dispositivo en la página <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Para obtener más información accede a nuestro <ph name="BEGIN_LINK" />Centro de Ayuda<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agente X</translation> <translation id="3031557471081358569">Selecciona los elementos que quieres importar:</translation> <translation id="3033332627063280038">Habilita la implementación experimental de la directiva de control de caché stale_while_revalidate, que permite que los servidores especifiquen que se puedan revalidar algunos recursos en segundo plano para mejorar la latencia.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">¿Es esta la página de búsqueda que esperabas?</translation> <translation id="3324684065575061611">(Inhabilitado por la política de empresa)</translation> <translation id="3326821416087822643">Comprimiendo <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Salir del modo de presentación</translation> <translation id="3330686263988132416">Encabezado de origen de mensajes Stun de WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Habilita el modo de pantalla duplicada. Este modo permite dar la vuelta a la imagen de la pantalla horizontalmente.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Recuperar archivo malicioso</translation> <translation id="3394150261239285340"><ph name="HOST" /> quiere utilizar tu cámara y tu micrófono.</translation> <translation id="3394279550557729862">Habilita la posibilidad de utilizar las notificaciones nativas y el centro de notificaciones en las plataformas donde estén disponibles.</translation> +<translation id="3394862755749546286">Inhabilita el flujo unificado de contenidos multimedia (Android y ordenador) en Android.</translation> <translation id="3396331542604645348">La impresora seleccionada no se encuentra disponible o no está instalada correctamente. Comprueba tu impresora o prueba a seleccionar otra.</translation> <translation id="3399597614303179694">Teclado macedonio</translation> <translation id="3401130144947259741">Si se habilita, los eventos de rastreo se exportarán al Seguimiento de eventos para Windows (ETW) y se podrán capturar con herramientas como UIForETW o Xperf.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">deja este campo vacío si quieres establecer la contraseña raíz en el valor de la imagen de prueba predeterminada</translation> <translation id="3678156199662914018">Extensión: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Teclado maltés</translation> -<translation id="3680173818488851340">iframes de baja prioridad.</translation> <translation id="3683524264665795342">Solicitud de <ph name="APP_NAME" /> para compartir pantalla</translation> <translation id="3685122418104378273">La sincronización con Google Drive está inhabilitada de forma predeterminada en redes de datos móviles.</translation> <translation id="3685387984467886507">Se recordarán las decisiones relacionadas con los errores de SSL durante el período de tiempo especificado.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> aparecerá ahora en la Consola del administrador</translation> <translation id="3741243925913727067">Realiza una copia de seguridad en Google Drive de los vídeos y de las fotos de tu dispositivo multimedia.</translation> <translation id="3743492083222969745">Habilita o inhabilita la opción de escritura gestual en la página de configuración del teclado virtual.</translation> +<translation id="3744111561329211289">Sincronización en segundo plano</translation> <translation id="3749289110408117711">Nombre del archivo</translation> <translation id="3751427701788899101">Se ha perdido la conexión</translation> <translation id="3751522270321808809">Este sitio podría intentar engañarte para robar tu información (por ejemplo, contraseñas, mensajes o tarjetas de crédito).</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">Iniciar sesión con otra cuenta</translation> <translation id="4219614746733932747">Si se habilita esta opción, Blink utilizará su mecanismo de zoom para escalar contenido al implementar el factor de escala del dispositivo.</translation> <translation id="4220865787605972627">Permite calibrar el color de la pantalla si esta admite la función.</translation> +<translation id="4232692576734035989">Modo de rendimiento altamente experimental en el que los iframes entre sitios web se mantienen en un proceso separado con respecto al documento principal. En este modo, se permite que los iframes de los distintos sitios web de terceros compartan un proceso.</translation> <translation id="4235200303672858594">Toda la pantalla</translation> <translation id="4235813040357936597">Añadir cuenta de <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> no se puede mostrar en este idioma.</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">Descartar foto</translation> <translation id="4509345063551561634">Ubicación:</translation> <translation id="4514542542275172126">Configurar nuevo usuario supervisado</translation> +<translation id="4514914692061505365">Fuerza el uso del rápido traductor Subzero de PNaCl para todos los archivos de formato Portable Executable.</translation> <translation id="4518677423782794009">¿Chrome se bloquea, se muestran barras de herramientas o páginas de inicio inusuales, aparecen anuncios inesperados que no se pueden cerrar o cambia la experiencia de navegación de cualquier otra forma? Es posible que puedas solucionar el problema ejecutando el Limpiador de Chrome.</translation> <translation id="452039078290142656">dispositivos desconocidos de <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalles</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">Únicamente el administrador (<ph name="CUSTODIAN_NAME" />) puede modificar las aplicaciones y las extensiones.</translation> <translation id="4601242977939794209">Conversor a EMF</translation> <translation id="4602466770786743961">Permitir que <ph name="HOST" /> acceda siempre a la cámara y al micrófono</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">El dispositivo no está conectado a Internet.</translation> <translation id="4608500690299898628">&Buscar...</translation> <translation id="4610637590575890427">¿Tal vez quieres ir a <ph name="SITE" />?</translation> @@ -2784,6 +2799,7 @@ <translation id="5062930723426326933">Se ha producido un error al iniciar sesión. Conéctate a Internet y vuelve a intentarlo.</translation> <translation id="5063180925553000800">Nuevo PIN:</translation> <translation id="5067867186035333991">Preguntar si <ph name="HOST" /> quiere acceder al micrófono</translation> +<translation id="5068918910148307423">No permitir que los sitios web cerrados recientemente terminen de enviar y recibir datos</translation> <translation id="507075806566596212">Vas a registrar este <ph name="DEVICE_TYPE" /> en Google para habilitar la función que permite localizar, borrar y bloquear el dispositivo de forma remota. Para hacerlo, debes reiniciar el dispositivo. ¿Quieres continuar?</translation> <translation id="5072836811783999860">Mostrar marcadores administrados</translation> <translation id="5074318175948309511">Es posible que debas actualizar la página para que se aplique la nueva configuración.</translation> @@ -2891,6 +2907,7 @@ <translation id="5227808808023563348">Buscar texto anterior</translation> <translation id="5228076606934445476">Se ha producido un problema con el dispositivo. Para solucionar este error, deberás reiniciar el dispositivo y volver a intentarlo.</translation> <translation id="5228962187251412618">Solo comprobación online</translation> +<translation id="5229622432348746578">Inhabilitar la función de compartir audio en el escritorio remoto</translation> <translation id="5230516054153933099">Ventana</translation> <translation id="5232178406098309195">Al utilizar comandos de activación de audio, como decir "Ok Google" o tocar el icono de micrófono, tu Actividad de Voz y Audio privada almacena tu voz y otros audios en tu cuenta. Se almacenará una grabación de la voz o el audio, además de los segundos previos.</translation> <translation id="523299859570409035">Excepciones de notificaciones </translation> @@ -3145,6 +3162,7 @@ <translation id="5557991081552967863">Mantener Wi-Fi encendida en suspensión</translation> <translation id="5558129378926964177">Ampliar &zoom</translation> <translation id="556042886152191864">Botón</translation> +<translation id="5562781907504170924">Esta pestaña está conectada a un dispositivo Bluetooth.</translation> <translation id="5565871407246142825">Tarjetas de crédito</translation> <translation id="5567989639534621706">Cachés de aplicación</translation> <translation id="5568069709869097550">No puedo iniciar sesión</translation> @@ -3304,6 +3322,7 @@ <translation id="5803531701633845775">Seleccionar frases anteriores, sin mover el cursor</translation> <translation id="5804241973901381774">Permisos</translation> <translation id="580571955903695899">Reordenar por título</translation> +<translation id="5808982448801399019">Error de autorización</translation> <translation id="580961539202306967">Preguntarme cuando un sitio quiera enviarme mensajes push (recomendado)</translation> <translation id="5815645614496570556">Dirección X.400</translation> <translation id="5817397429773072584">Chino tradicional</translation> @@ -3575,6 +3594,7 @@ <translation id="6243774244933267674">Servidor no disponible</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Actualización lista</translation> +<translation id="6248400709929739064">Habilitar subtítulos</translation> <translation id="6248988683584659830">Buscar ajustes</translation> <translation id="6251870443722440887">GDI administra</translation> <translation id="6251889282623539337">Condiciones de servicio de <ph name="DOMAIN" /></translation> @@ -3599,6 +3619,7 @@ <translation id="6277105963844135994">Tiempo de espera de red agotado</translation> <translation id="6277518330158259200">H&acer captura de pantalla</translation> <translation id="6279183038361895380">Pulsa |<ph name="ACCELERATOR" />| para mostrar el cursor</translation> +<translation id="6280215091796946657">Iniciar sesión con otra cuenta</translation> <translation id="6281743458679673853">Experimento que permite que todas las API reflejen la ventana gráfica de diseño. De esta forma, las propiedades window.scroll estarán relacionadas con la ventana gráfica de diseño.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nueva impresora en tu red}other{Nuevas impresoras en tu red}}</translation> <translation id="6285395082104474418">La bandeja de estado te muestra el estado actual de la red y de la batería, entre otra información.</translation> @@ -3680,6 +3701,9 @@ <translation id="6418160186546245112">Restaurando versión de <ph name="IDS_SHORT_PRODUCT_NAME" /> instalada previamente</translation> <translation id="6418481728190846787">Eliminar el acceso de todas las aplicaciones de forma permanente</translation> <translation id="6418505248408153264">Habilitar el historial de Material Design</translation> +<translation id="6419288379019356534">Este dispositivo está gestionado por <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Haz clic en "Siguiente" para continuar iniciando sesión en tu cuenta de <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Europa Central</translation> <translation id="6420676428473580225">Añadir al escritorio</translation> <translation id="6422329785618833949">Foto girada</translation> @@ -3839,7 +3863,6 @@ <translation id="6662016084451426657">Error de sincronización: ponte en contacto con el administrador para habilitar la sincronización.</translation> <translation id="6663792236418322902">La contraseña que selecciones será necesaria para restablecer este archivo más adelante, por lo que debes guardarla en una ubicación segura.</translation> <translation id="6664237456442406323">Lamentablemente, tu ordenador está configurado con un identificador de hardware incorrecto. Esto impide que Chrome OS se actualice con los últimos parches de seguridad y hace que el ordenador <ph name="BEGIN_BOLD" />pueda ser vulnerable a ataques maliciosos<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduce la prioridad de carga de los recursos de iframe.</translation> <translation id="6666647326143344290">con tu cuenta de Google</translation> <translation id="6675665718701918026">Dispositivo señalador conectado</translation> <translation id="6677037229676347494">Se esperaba un ID "<ph name="EXPECTED_ID" />", pero el ID fue "<ph name="NEW_ID" />".</translation> @@ -3932,6 +3955,7 @@ <translation id="6825883775269213504">Ruso</translation> <translation id="6827236167376090743">Este vídeo seguirá reproduciéndose sin parar.</translation> <translation id="6828153365543658583">Restringir el inicio de sesión a los siguientes usuarios:</translation> +<translation id="6828434191343384461">Los datos seleccionados se han eliminado de Chrome y de los dispositivos sincronizados. Es posible que tu cuenta de Google tenga otras formas del historial de navegación, como las búsquedas o la actividad de otros servicios de Google en la página <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Se ha producido un error al configurar las actualizaciones automáticas para todos los usuarios (error de ejecución preliminar: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Recibe ayuda para tu <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registro en tu organización</translation> @@ -4011,6 +4035,7 @@ <translation id="6965382102122355670">Aceptar</translation> <translation id="6965648386495488594">Puerto</translation> <translation id="6965978654500191972">Dispositivo</translation> +<translation id="6969104364835835175">Forzar Subzero de PNaCl</translation> <translation id="6970230597523682626">Búlgaro</translation> <translation id="6970480684834282392">Tipo de inicio</translation> <translation id="6970856801391541997">Imprimir páginas específicas</translation> @@ -4095,10 +4120,12 @@ <translation id="7057058088140140610">Tarjetas de crédito y direcciones con Google Payments</translation> <translation id="7059858479264779982">Establecer inicio automático</translation> <translation id="7061692898138851896">Guardar contraseñas automáticamente</translation> +<translation id="7062222374113411376">Permitir que los sitios web cerrados recientemente terminen de enviar y recibir datos (recomendado)</translation> <translation id="7063129466199351735">Procesando accesos directos...</translation> <translation id="7065223852455347715">Este dispositivo está bloqueado en un modo que evita la inscripción corporativa. Si quieres registrar el dispositivo, primero debes pasar por el proceso de recuperación del dispositivo.</translation> <translation id="7065534935986314333">Acerca del sistema</translation> <translation id="7066944511817949584">Error al conectar con "<ph name="DEVICE_NAME" />"</translation> +<translation id="7067725467529581407">No volver a mostrar.</translation> <translation id="7070804685954057874">Entrada directa</translation> <translation id="7072010813301522126">Nombre del acceso directo</translation> <translation id="7072025625456903686">Permitir todo o personalizar</translation> @@ -4370,6 +4397,7 @@ <translation id="7489605380874780575">Comprobar elegibilidad</translation> <translation id="749028671485790643">Persona <ph name="VALUE" /></translation> <translation id="7491962110804786152">tabulador</translation> +<translation id="7493386493263658176">Es posible que la extensión <ph name="EXTENSION_NAME" /> recopile todo el texto que escribes, como las contraseñas o los números de las tarjetas de crédito. ¿Quieres utilizar esta extensión?</translation> <translation id="7495778526395737099">¿Has olvidado tu antigua contraseña?</translation> <translation id="7503191893372251637">Tipo de certificado de Netscape</translation> <translation id="7503821294401948377">No se ha podido cargar el icono "<ph name="ICON" />" para la acción del navegador.</translation> @@ -4421,6 +4449,7 @@ <translation id="756445078718366910">Abrir ventana del navegador</translation> <translation id="7564847347806291057">Finalizar proceso</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Datos de Chrome borrados</translation> <translation id="7568790562536448087">Actualización</translation> <translation id="7573172247376861652">Carga de batería</translation> <translation id="7576032389798113292">6x4</translation> @@ -4550,6 +4579,7 @@ <translation id="7786207843293321886">Salir de la sesión de invitado</translation> <translation id="7786889348652477777">&Volver a cargar aplicación</translation> <translation id="7787129790495067395">Actualmente estás utilizando una frase de contraseña. Si la has olvidado, puedes restablecer la sincronización para borrar los datos de los servidores de Google a través del panel de control de Google.</translation> +<translation id="7787308148023287649">Se muestra en otra pantalla</translation> <translation id="7788080748068240085">Para guardar "<ph name="FILE_NAME" />" sin conexión, debes liberar <ph name="TOTAL_FILE_SIZE" /> de espacio adicional:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Elimina archivos a los que ya no necesites acceder sin conexión.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Borra archivos de la carpeta de descargas.<ph name="MARKUP_5" /></translation> @@ -4618,6 +4648,7 @@ <translation id="7878999881405658917">Google envió una notificación a este teléfono. Ten en cuenta que tu teléfono puede mantener tu <ph name="DEVICE_TYPE" /> desbloqueado a través de Bluetooth desde una distancia de más de 9 m. En aquellos casos en los que esto pueda suponer un problema, puedes <a>inhabilitar esta función temporalmente</a>.</translation> <translation id="7879478708475862060">Seguir modo de entrada</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" añade estas aplicaciones y extensiones:</translation> +<translation id="7881969471599061635">Inhabilitar subtítulos</translation> <translation id="7884988936047469945">Funciones de accesibilidad experimentales</translation> <translation id="7885253890047913815">Destinos recientes</translation> <translation id="7885283703487484916">muy breve</translation> @@ -4983,6 +5014,7 @@ <translation id="839736845446313156">Registrar</translation> <translation id="8398790343843005537">Buscar tu teléfono</translation> <translation id="8398877366907290961">Continuar de todos modos</translation> +<translation id="8399276228600040370">Inicia sesión con tu cuenta guardada con <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Casilla de verificación sin seleccionar</translation> <translation id="8408402540408758445">Enviar una solicitud previa de resultados de búsqueda</translation> <translation id="8410073653152358832">Utilizar este teléfono</translation> @@ -5069,6 +5101,7 @@ <translation id="8545211332741562162">Permite que las páginas web utilicen funciones experimentales de JavaScript.</translation> <translation id="8545575359873600875">Tu contraseña no se ha podido verificar. El administrador de este usuario supervisado puede haber cambiado la contraseña recientemente. Si es así, la nueva contraseña se aplicará la próxima vez que inicies sesión. Prueba a utilizar la contraseña antigua.</translation> <translation id="8546306075665861288">Caché de imagen</translation> +<translation id="854653344619327455">Con esta marca activada, la ventana selectora para compartir escritorio no permite al usuario elegir si quiere compartir el audio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Carácter</translation> <translation id="855081842937141170">Fijar pestaña</translation> @@ -5099,6 +5132,7 @@ <translation id="8589311641140863898">API de extensiones experimentales</translation> <translation id="8590375307970699841">Configurar actualizaciones automáticas</translation> <translation id="8592071947729879125">Restringir los permisos de iframe.</translation> +<translation id="8592125506633137593">Aislamiento del documento principal</translation> <translation id="8594787581355215556">Has iniciado sesión como <ph name="USER_EMAIL_ADDRESS" />. Administra tus datos sincronizados a través del <ph name="BEGIN_LINK" />panel de control de Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Archivos personalizados</translation> <translation id="8596785155158796745">El micrófono no está disponible en este momento. <ph name="BEGIN_LINK" />Administrar micrófono<ph name="END_LINK" /></translation> @@ -5171,6 +5205,7 @@ <translation id="8688579245973331962">¿No aparece tu nombre?</translation> <translation id="8688644143607459122">Al hacer clic en Continuar, aceptas utilizar Google Payments. Para protegerte de posibles fraudes, se compartirá con Google Payments la información de tu ordenador (incluida su ubicación).</translation> <translation id="8689102680909215706">La extensión "<ph name="EXTENSION_NAME" />" se ha instalado de forma remota.</translation> +<translation id="868926756781121513">Escritorio remoto con pestaña</translation> <translation id="8689341121182997459">Caduca:</translation> <translation id="8690754533598178758">Las excepciones del micrófono de Adobe Flash Player son diferentes.</translation> <translation id="8691686986795184760">(Habilitado por política de empresa)</translation> @@ -5214,6 +5249,7 @@ <translation id="8737685506611670901">Abrir enlaces de <ph name="PROTOCOL" /> en lugar de <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Ajusta la posición de un gesto táctil para compensar la baja resolución de los toques con respecto a un ratón.</translation> +<translation id="8741995161408053644">Es posible que tu cuenta de Google tenga otras formas del historial de navegación en la página <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Mostrar opciones de entrada ampliadas en la estantería.</translation> <translation id="874420130893181774">Método de entrada de pinyin tradicional</translation> <translation id="8744525654891896746">Seleccionar un avatar para este usuario supervisado</translation> @@ -5227,6 +5263,7 @@ <translation id="8757640015637159332">Entrar en sesión pública</translation> <translation id="8757742102600829832">Selecciona un Chromebox para establecer conexión</translation> <translation id="8757803915342932642">Dispositivo en Google Cloud Devices</translation> +<translation id="8758895886513993540">Esta marca controla si los usuarios pueden elegir una pestaña para el escritorio remoto.</translation> <translation id="8759408218731716181">No se puede configurar el inicio de sesión múltiple</translation> <translation id="8759753423332885148">Más información</translation> <translation id="8761567432415473239">La función de navegación segura de Google <ph name="BEGIN_LINK" />encontró programas dañinos<ph name="END_LINK" /> recientemente en el sitio <ph name="SITE" />.</translation> @@ -5437,6 +5474,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Ratón USB conectado</translation> <translation id="9076523132036239772">Tu dirección de correo electrónico y tu contraseña no se han podido verificar. Intenta conectarte primero a una red.</translation> +<translation id="9077132661879924646">Inhabilitar el flujo unificado de contenidos multimedia en Android.</translation> <translation id="907841381057066561">Se ha producido un error al crear un archivo .zip temporal durante la compresión.</translation> <translation id="9083147368019416919">Error al anular el registro</translation> <translation id="9084064520949870008">Abrir como ventana</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index c80a21b..9c163ca 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Tõstuklahv</translation> <translation id="1697068104427956555">Valige kujutise ruudukujuline osa.</translation> <translation id="1697532407822776718">Kõik on valmis!</translation> +<translation id="1697988819212986149">Google'i ikoon kuvatakse kontekstimenüü üksuste kõrval, mida toetavad Google'i teenused.</translation> <translation id="1699274548822076330">Seda kasutatakse koos märgistusega trace-upload-url. HOIATUS. Kui see on lubatud, salvestab Chrome iga liikumise toimivusandmed ja laadib need üles URL-i, mille määrab märgistus trace-upload-url. Jälg võib sisaldada isiklikku teavet (PII), nagu teie külastatavate veebisaitide pealkirjad ja URL-id.</translation> <translation id="1699395855685456105">Riistvara redaktsioon:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Värskendage sünkroonimise parooli.</translation> <translation id="1788636309517085411">Vaikimisi kasutamine</translation> <translation id="1789575671122666129">Hüpikaknad</translation> -<translation id="1790550373387225389">Sisene esitlusrežiimi</translation> <translation id="1792705092719258158">Peegeldatud ekraani režiimi lubamine.</translation> <translation id="1793119619663054394">Kas soovite kindlasti eemaldada arvutist profiili „<ph name="PROFILE_NAME" />” ja kõik sellega seotud Chrome'i andmed? Seda toimingut ei saa tagasi võtta.</translation> <translation id="179767530217573436">eelmisest 4 nädalast</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Muutke seadme ja välisseadmete seadeid.</translation> <translation id="2673135533890720193">Sirvimisajaloo lugemine</translation> <translation id="2673589024369449924">Loo selle kasutaja jaoks töölaua otsetee</translation> +<translation id="2675358154061544447">Algses katsejärgus olev tugi saitidevaheliste iframe'ide renderdamiseks eraldi protsessides. Selles režiimis jagavad dokumendid renderdaja protsessi ainult siis, kui need pärinevad samalt veebisaidilt.</translation> <translation id="2676946222714718093">Mängib seadmes</translation> <translation id="2678063897982469759">Luba uuesti</translation> <translation id="2678246812096664977">Kõik pistikprogrammid</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">Määrab, kuidas paroolihaldur käsitleb automaattäidet sünkroonimise mandaadi puhul.</translation> <translation id="29611076221683977">Saidil <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> olevad ründajad võivad proovida installida teie Maci ohtlikke programme, mis varastavad teie teavet või kustutavad selle (nt fotod, paroolid, sõnumid ja krediitkaardiandmed).</translation> <translation id="2961695502793809356">Klõpsake edasi minemiseks, hoidke all ajaloo kuvamiseks</translation> +<translation id="296216853343927883">Google'i bränding kontekstimenüüs</translation> <translation id="2963151496262057773">Järgmine pistikprogramm ei reageeri: <ph name="PLUGIN_NAME" />Kas soovite selle peatada?</translation> <translation id="2963783323012015985">Türgi klaviatuur</translation> <translation id="2964193600955408481">Keela WiFi</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">Teiste inimeste vaatamiseks paremklõpsake ülaloleval nupul.</translation> <translation id="3026050830483105579">See kõik on siin.</translation> <translation id="302620147503052030">Nupp Kuva</translation> +<translation id="302781076327338683">Laadib uuesti vahemälu vahele jättes</translation> +<translation id="3030243755303701754">Jälgitav kasutaja saab kasutada veebi teie juhiste järgi. Jälgitava kasutaja haldurina Chrome'is saate teha järgmist: + + • lubada või keelata teatud veebisaite; + • vaadata, milliseid veebisaite jälgitav kasutaja on külastanud; ja + • hallata teisi seadeid. + +Jälgitava kasutaja loomine ei loo Google'i kontot ja Chrome'i sünkroonimine ei sünkrooni kasutaja järjehoidjaid, sirvimisajalugu ega muid eelistusi muude seadmetega. Pärast uue jälgitava kasutaja loomist saate igal ajal ja igas seadmes saidil <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> tema seadeid hallata. + +Lisateabe saamiseks külastage meie <ph name="BEGIN_LINK" />abikeskust<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Valige imporditavad üksused:</translation> <translation id="3033332627063280038">Lubatakse vahemälu juhtimise katseline juurutamine: direktiiv stale-while-revalidate. See lubab serveritel määrata osade ressursside taustal uuesti valideerimise, et parandada latentsust.</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">Kas see on otsinguleht, mida ootasite?</translation> <translation id="3324684065575061611">(Ettevõtte eeskirjad on selle keelanud)</translation> <translation id="3326821416087822643">Faili <ph name="FILE_NAME" /> pakkimine ...</translation> -<translation id="3330206034087160972">Välju esitlusrežiimist</translation> <translation id="3330686263988132416">WebRTC Stuni päritolu päis</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Peegeldatud ekraani režiimi lubamine. See režiim pöörab ekraanikuva horisontaalselt.</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">Pahatahtliku faili taastamine</translation> <translation id="3394150261239285340"><ph name="HOST" /> soovib kasutada teie kaamerat ja mikrofoni.</translation> <translation id="3394279550557729862">Lubatakse tugi omamärguannete teabeakende ja märguandekeskuse kasutamiseks platvormidel, kus need on saadaval.</translation> +<translation id="3394862755749546286">Androidis keelatakse ühendatud (Androidi ja lauaarvutite) meedia konveier.</translation> <translation id="3396331542604645348">Valitud printer pole saadaval või pole õigesti installitud. Kontrollige printerit või valige teine printer.</translation> <translation id="3399597614303179694">Makedooniakeelne klaviatuur</translation> <translation id="3401130144947259741">Kui see on lubatud, eksporditakse jäljesündmused teenusesse Event Tracing for Windows (ETW), kus need saab jäädvustada näiteks tööriistaga UIForETW või Xperf.</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">jätke tühjaks, kui soovite määrata testkujutise vaikeväärtusele juurparooli</translation> <translation id="3678156199662914018">Laiend: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Malta klaviatuur</translation> -<translation id="3680173818488851340">Madala prioriteediga iframe’id.</translation> <translation id="3683524264665795342">Rakenduse <ph name="APP_NAME" /> ekraani jagamise taotlus</translation> <translation id="3685122418104378273">Google Drive'i sünkroonimine on mobiilse andmeside kasutamisel vaikimisi keelatud.</translation> <translation id="3685387984467886507">Otsuste meeldejätmine, et jätkata teatud aja jooksul SSL-i vigadega.</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> kuvatakse nüüd administraatorikonsoolis</translation> <translation id="3741243925913727067">Meediaseadmel olevate fotode ja videote varundamine Google Drive'i.</translation> <translation id="3743492083222969745">Joonistusega sisestamise valik lubatakse/keelatakse virtuaalse klaviatuuri seadete lehel.</translation> +<translation id="3744111561329211289">Taustal sünkroonimine</translation> <translation id="3749289110408117711">Faili nimi</translation> <translation id="3751427701788899101">Ühendus katkes</translation> <translation id="3751522270321808809">See sait võib proovida teid petta, et varastada teie teavet (nt paroole, sõnumeid või krediitkaardiandmeid).</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">Logige sisse teisele kontole</translation> <translation id="4219614746733932747">Kui see on lubatud, kasutab Blink seadme skaleerimisteguri sisu skaleerimiseks suumimehhanismi.</translation> <translation id="4220865787605972627">Lubab ekraani värvide kalibreerimise, kui ekraan toetab seda funktsiooni.</translation> +<translation id="4232692576734035989">Algses katsejärgus olev toimivusrežiim, kus saidiülesed iframe'id hoitakse peamisest dokumendist eraldi protsessis. Selles režiimis lubatakse teiste kolmanda osapoole saitide iframe'idel protsesse jagada.</translation> <translation id="4235200303672858594">Kogu ekraan</translation> <translation id="4235813040357936597">Lisa konto profiilile <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" />-i ei saa selles keeles kuvada</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">Loobu fotost</translation> <translation id="4509345063551561634">Asukoht:</translation> <translation id="4514542542275172126">Uue jälgitava kasutaja seadistamine</translation> +<translation id="4514914692061505365">Kõikide pexe-failide puhul jõustatakse PNaCl-i kiire Subzero tõlkija kasutamine.</translation> <translation id="4518677423782794009">Kas Chrome jookseb kokku, kuvab käivitamisel tavatuid lehti, tööriistaribasid, ootamatuid reklaame, mida ei saa eemaldada, või muudab sirvimiskogemust muul moel? Probleemi lahendamiseks proovige käitada Chrome Cleanup Tooli.</translation> <translation id="452039078290142656">müüja <ph name="VENDOR_NAME" /> tundmatud seadmed</translation> <translation id="4522570452068850558">Üksikasjad</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">Rakendusi ja laiendusi saab muuta ainult haldur (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF-i konverteerija</translation> <translation id="4602466770786743961">Luba hostile <ph name="HOST" /> alati juurdepääs kaamerale ja mikrofonile</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Interneti-ühendus puudub</translation> <translation id="4608500690299898628">&Otsi...</translation> <translation id="4610637590575890427">Kas soovisite minna aadressile <ph name="SITE" />?</translation> @@ -2787,6 +2802,7 @@ <translation id="5062930723426326933">Sisselogimine ebaõnnestus. Looge ühendus Internetiga ja proovige uuesti.</translation> <translation id="5063180925553000800">Uus PIN-kood:</translation> <translation id="5067867186035333991">Küsi, kui sait <ph name="HOST" /> soovib juurdepääsu mikrofonile</translation> +<translation id="5068918910148307423">Ära luba hiljuti suletud saitidel lõpetada andmete saatmist ega vastuvõtmist</translation> <translation id="507075806566596212">Soovite registreerida seadme <ph name="DEVICE_TYPE" /> Google'is, et lubada kaughalduse abil asukoha tuvastamine, andmete kustutamine ja seadme lukustamine. See nõuab seadme taaskäivitamist. Kas soovite jätkata?</translation> <translation id="5072836811783999860">Kuva hallatud järjehoidjad</translation> <translation id="5074318175948309511">Uute seadete jõustamiseks peate lehe võib-olla uuesti laadima.</translation> @@ -2896,6 +2912,7 @@ <translation id="5227808808023563348">Eelmise teksti otsimine</translation> <translation id="5228076606934445476">Seadmega on midagi valesti. Vea kõrvaldamiseks peate seadme taaskäivitama ja uuesti proovima.</translation> <translation id="5228962187251412618">Ainult võrgus kontrollimine</translation> +<translation id="5229622432348746578">Heli keelamine töölaua jagamisel</translation> <translation id="5230516054153933099">Aken</translation> <translation id="5232178406098309195">Kui kasutate heli aktiveerimise käskusid, nagu „Ok Google” või mikrofoniikooni puudutamine, salvestab privaatne funktsioon Hääl- ja helitoimingud häält ja muud heli teie kontole. Salvestatakse käsule järgnenud kõne/heli ja mõni sekund sellele eelnenud heli.</translation> <translation id="523299859570409035">Märguannete erandid</translation> @@ -3150,6 +3167,7 @@ <translation id="5557991081552967863">Hoia WiFi unerežiimis sisselülitatuna</translation> <translation id="5558129378926964177">Suum&i</translation> <translation id="556042886152191864">Nupp</translation> +<translation id="5562781907504170924">See vaheleht on ühendatud Bluetoothi seadmega.</translation> <translation id="5565871407246142825">Krediitkaardid</translation> <translation id="5567989639534621706">Rakenduste vahemälud</translation> <translation id="5568069709869097550">Ei saa sisse logida</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">Valige tagant fraasid kursorit liigutamata</translation> <translation id="5804241973901381774">Load</translation> <translation id="580571955903695899">Järjesta pealkirja alusel uuesti</translation> +<translation id="5808982448801399019">Volitamine ebaõnnestus</translation> <translation id="580961539202306967">Küsi, kui sait tahab saata tõukesõnumeid (soovitatav)</translation> <translation id="5815645614496570556">X.400 aadress</translation> <translation id="5817397429773072584">hiina (traditsiooniline)</translation> @@ -3580,6 +3599,7 @@ <translation id="6243774244933267674">Server ei ole saadaval</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Värskendus on valmis</translation> +<translation id="6248400709929739064">Luba subtiitrid</translation> <translation id="6248988683584659830">Otsinguseaded</translation> <translation id="6251870443722440887">GDI nimed</translation> <translation id="6251889282623539337">Domeeni <ph name="DOMAIN" /> teenusetingimused</translation> @@ -3604,6 +3624,7 @@ <translation id="6277105963844135994">Võrgu ajalõpp</translation> <translation id="6277518330158259200">J&äädvusta ekraanipilt</translation> <translation id="6279183038361895380">Kursori kuvamiseks vajutage klahvi |<ph name="ACCELERATOR" />|</translation> +<translation id="6280215091796946657">Logige sisse teise kontoga</translation> <translation id="6281743458679673853">Eksperiment selleks, et kõik API-d kajastaksid küljenduse vaateakent. See muudab window.scroll-i atribuudid küljenduse vaateakna suhtes suhteliseks.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Teie võrgus on uus printer}other{Teie võrgus on uued printerid}}</translation> <translation id="6285395082104474418">Olekuala kuvab võrgu ja aku praeguse oleku ning muu teabe.</translation> @@ -3685,6 +3706,9 @@ <translation id="6418160186546245112">Toote <ph name="IDS_SHORT_PRODUCT_NAME" /> varem installitud versiooni ennistamine</translation> <translation id="6418481728190846787">Kõikide rakenduste juurdepääsu jääv eemaldamine</translation> <translation id="6418505248408153264">Materiaalse disaini ajaloo lubamine</translation> +<translation id="6419288379019356534">Seda seadet haldab <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Domeeni <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> kontole sisselogimise jätkamiseks klõpsake valikul „Järgmine”.</translation> <translation id="6419902127459849040">Kesk-Euroopa</translation> <translation id="6420676428473580225">Töölauale lisamine</translation> <translation id="6422329785618833949">Foto on ümber pööratud</translation> @@ -3845,7 +3869,6 @@ <translation id="6662016084451426657">Sünkroonimisviga: sünkroonimise lubamiseks võtke ühendust ülemaga.</translation> <translation id="6663792236418322902">Teie valitavat parooli on vaja selle faili hilisemaks taastamiseks. Salvestage see turvalisse asukohta.</translation> <translation id="6664237456442406323">Kahjuks on teie arvuti seadistatud vigase riistvara ID-ga. See ei lase Chrome OS-i värskendada uusimate turvaparandustega ja teie arvuti <ph name="BEGIN_BOLD" />võib pahatahtlike rünnakute osas haavatav olla<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Vähendab iframe’i ressursside laadimise prioriteeti.</translation> <translation id="6666647326143344290">oma Google'i kontoga</translation> <translation id="6675665718701918026">Ühendati kursoriseade</translation> <translation id="6677037229676347494">Eeldatav ID oli „<ph name="EXPECTED_ID" />”, kuid ID oli „<ph name="NEW_ID" />”.</translation> @@ -3938,6 +3961,7 @@ <translation id="6825883775269213504">vene keel</translation> <translation id="6827236167376090743">Seda videot esitatakse seni, kuni lehmad koju jõuavad.</translation> <translation id="6828153365543658583">Piira järgmiste kasutajate sisselogimist:</translation> +<translation id="6828434191343384461">Valitud andmed eemaldati Chrome'ist ja sünkroonitud seadmetest. Aadressil <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu, nt otsingud ja muudes Google'i teenustes toimunud tegevused.</translation> <translation id="6828860976882136098">Automaatvärskenduste seadistamine kõikidele kasutajatele ebaõnnestus (esituseelne käivitamisviga: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Abi hankimine seadme <ph name="DEVICE_TYPE" /> puhul.</translation> <translation id="6829270497922309893">Registreerumine teie organisatsioonis</translation> @@ -4018,6 +4042,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Seade</translation> +<translation id="6969104364835835175">Funktsiooni PNaCl Subzero jõustamine</translation> <translation id="6970230597523682626">bulgaaria keel</translation> <translation id="6970480684834282392">Käivitamistüüp</translation> <translation id="6970856801391541997">Prindi valitud leheküljed</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Krediitkaardid ja aadressid, mis kasutavad Google Paymentsi</translation> <translation id="7059858479264779982">Määra automaatsele käivitamisele</translation> <translation id="7061692898138851896">Paroolide automaatne salvestamine</translation> +<translation id="7062222374113411376">Luba hiljuti suletud saitidel lõpetada andmete saatmine ja vastuvõtmine (soovitatav)</translation> <translation id="7063129466199351735">Otseteede töötlemine ...</translation> <translation id="7065223852455347715">See seade on lukustatud režiimi, mis takistab ettevõtte registreerimist. Kui soovite seadme registreerida, peate esmalt seadme taastama.</translation> <translation id="7065534935986314333">Teave süsteemi kohta</translation> <translation id="7066944511817949584">Seadmega „<ph name="DEVICE_NAME" />” ei saanud ühendust luua.</translation> +<translation id="7067725467529581407">Ära seda kunagi enam näita.</translation> <translation id="7070804685954057874">Otsesisestus</translation> <translation id="7072010813301522126">Otsetee nimi</translation> <translation id="7072025625456903686">Luba kõik või kohanda</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">Kontrolli sobilikkust</translation> <translation id="749028671485790643">Isik <ph name="VALUE" /></translation> <translation id="7491962110804786152">Tabulaator</translation> +<translation id="7493386493263658176">Laiendus <ph name="EXTENSION_NAME" /> võib koguda kogu sisestatud teksti, sh isiklikud andmed, nagu paroolid ja krediitkaardinumbrid. Kas soovite seda laiendust kasutada?</translation> <translation id="7495778526395737099">Kas unustasite oma vana parooli?</translation> <translation id="7503191893372251637">Netscape'i sertifikaadi tüüp</translation> <translation id="7503821294401948377">Brauseri toimingu jaoks ei õnnestunud laadida ikooni <ph name="ICON" />.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">Ava brauseri aken</translation> <translation id="7564847347806291057">Lõpeta toiming</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome'i andmed kustutati</translation> <translation id="7568790562536448087">Värskendamine</translation> <translation id="7573172247376861652">Aku laadimine</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">Välju külastajaseansist</translation> <translation id="7786889348652477777">&Laadi rakendus uuesti</translation> <translation id="7787129790495067395">Kasutate praegu parooli. Kui olete parooli unustanud, saate sünkrooni lähtestada kõigist Google'i serveritest andmeid kustutama, kasutades Google'i juhtpaneeli.</translation> +<translation id="7787308148023287649">Kuvage teisel ekraanil</translation> <translation id="7788080748068240085">Kui soovite salvestada faili „<ph name="FILE_NAME" />” võrguühenduseta kasutamiseks, peate vabastama veel <ph name="TOTAL_FILE_SIZE" /> ruumi:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />vabastage failid, millele teil ei ole enam vaja võrguühenduseta juurde pääseda;<ph name="MARKUP_3" /> <ph name="MARKUP_4" />kustutage kaustas Allalaadimised olevaid faile.<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google saatis sellele telefonile märguande. Pange tähele, et Bluetoothiga võib teie telefon hoida teie seadme <ph name="DEVICE_TYPE" /> avatuna enam kui 9 m kaugusel. Kui see on probleem, saate <a>selle funktsiooni ajutiselt keelata</a>.</translation> <translation id="7879478708475862060">Sisestusmeetodi jälgimine</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" lisab järgmised rakendused ja laiendused.</translation> +<translation id="7881969471599061635">Keela subtiitrid</translation> <translation id="7884988936047469945">Katselised juurdepääsetavuse funktsioonid</translation> <translation id="7885253890047913815">Hiljutised sihtkohad</translation> <translation id="7885283703487484916">väga lühike</translation> @@ -4990,6 +5021,7 @@ <translation id="839736845446313156">Registreerumine</translation> <translation id="8398790343843005537">Otsi telefoni</translation> <translation id="8398877366907290961">Jätka ikkagi</translation> +<translation id="8399276228600040370">Logige sisse oma kontoga, mis on salvestatud teenuses <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Tühjendamata märkeruut</translation> <translation id="8408402540408758445">Eellaadi otsingutulemused</translation> <translation id="8410073653152358832">Kasuta seda telefoni</translation> @@ -5076,6 +5108,7 @@ <translation id="8545211332741562162">Lubab veebilehtedel kasutada JavaScripti katselisi funktsioone.</translation> <translation id="8545575359873600875">Vabandust, teie parooli ei saanud kinnitada. Jälgitava kasutaja haldur on võib-olla hiljuti parooli muutnud. Kui nii, rakendatakse uut parooli järgmisel korral, kui sisse logite. Proovige kasutada oma vana parooli.</translation> <translation id="8546306075665861288">Kujutise vahemälu</translation> +<translation id="854653344619327455">Selle märgistusega ei võimalda lauaarvuti jagamise valimisaken kasutajal valida, kas ta soovib heli jagada.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Tähemärk</translation> <translation id="855081842937141170">Kinnita vaheleht</translation> @@ -5106,6 +5139,7 @@ <translation id="8589311641140863898">Katseline laiend-APIs</translation> <translation id="8590375307970699841">Automaatsete värskenduste seadistamine</translation> <translation id="8592071947729879125">Piira iframe'i lube.</translation> +<translation id="8592125506633137593">Peamise dokumendi isoleerimine</translation> <translation id="8594787581355215556">Olete sisse logitud kasutajana <ph name="USER_EMAIL_ADDRESS" />. Hallake oma sünkroonitud andmeid teenuses <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" /></translation> <translation id="8596540852772265699">Kohandatud failid</translation> <translation id="8596785155158796745">Mikrofon pole praegu saadaval. <ph name="BEGIN_LINK" />Mikrofoni haldamine<ph name="END_LINK" /></translation> @@ -5178,6 +5212,7 @@ <translation id="8688579245973331962">Kas te ei näe oma nime?</translation> <translation id="8688644143607459122">Klõpsates nupul Jätka, nõustute kasutama teenust Google Payments. Teie kaitsmiseks pettuste eest jagatakse teenusega Google Payments teavet teie arvuti kohta (sh selle asukoht).</translation> <translation id="8689102680909215706">Laiendus „<ph name="EXTENSION_NAME" />” installiti eemalt.</translation> +<translation id="868926756781121513">Töölaua jagamine vahelehe allikaga</translation> <translation id="8689341121182997459">Aegub:</translation> <translation id="8690754533598178758">Adobe Flash Playeri mikrofonierandid on erinevad.</translation> <translation id="8691686986795184760">(Ettevõtte eeskirjadega lubatud)</translation> @@ -5221,6 +5256,7 @@ <translation id="8737685506611670901">Ava protokolli <ph name="PROTOCOL" /> lingid teenuse <ph name="REPLACED_HANDLER_TITLE" /> asemel</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Saate täpsustada puuteliigutuse positsiooni, mis kompenseerib puudutuste väikest eraldusvõimet võrreldes hiirega.</translation> +<translation id="8741995161408053644">Aadressil <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu.</translation> <translation id="8743712320294854924">Kuva riiulil laiendatud sisestusvalikud.</translation> <translation id="874420130893181774">Traditsiooniline pinyini sisestusmeetod</translation> <translation id="8744525654891896746">Valige sellele jälgitavale kasutajale avatar.</translation> @@ -5234,6 +5270,7 @@ <translation id="8757640015637159332">Sisenemine avalikku seanssi</translation> <translation id="8757742102600829832">Valige Chromebox, millega ühendus luua</translation> <translation id="8757803915342932642">Seade Google'i pilvseadmetes</translation> +<translation id="8758895886513993540">See märgistus juhib, kas kasutaja saab töölaua jagamiseks vahelehe valida.</translation> <translation id="8759408218731716181">Mitmesse kontosse sisselogimist ei saa häälestada</translation> <translation id="8759753423332885148">Lisateave.</translation> <translation id="8761567432415473239">Google'i ohutu sirvimine <ph name="BEGIN_LINK" />tuvastas hiljuti kahjulikud programmid<ph name="END_LINK" /> saidil <ph name="SITE" />.</translation> @@ -5444,6 +5481,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-hiir on ühendatud</translation> <translation id="9076523132036239772">Kahjuks ei õnnestunud teie e-posti aadressi või parooli kinnitada. Proovige kõigepealt luua ühendus võrguga.</translation> +<translation id="9077132661879924646">Androidis keelatakse ühendatud meedia konveier.</translation> <translation id="907841381057066561">Pakkimisel ei õnnestunud luua ajutist ZIP-faili.</translation> <translation id="9083147368019416919">Väljaregistreerimine ebaõnnestus</translation> <translation id="9084064520949870008">Ava aknana</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index e639247..cb7655af 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -500,6 +500,7 @@ <translation id="169515659049020177">تبدیل</translation> <translation id="1697068104427956555">یک ناحیه مربع شکل از تصویر را انتخاب کنید.</translation> <translation id="1697532407822776718">آمادهاید!</translation> +<translation id="1697988819212986149">در کنار موارد منوی بافت ارائهشده توسط خدمات Google، نماد Google نشان میدهد.</translation> <translation id="1699274548822076330">این پرچم در ارتباط با پرچم trace-upload-url استفاده میشود. هشدار: اگر فعال باشد، Chrome دادههای عملکرد را برای هر پیمایشی ضبط میکند و آن را به نشانی وب مشخصشده توسط پرچم trace-upload-url آپلود میکند. ممکن است این رد حاوی اطلاعات قابلشناسایی شخصی (PII) مانند عناوین و نشانیهای وب سایتهایی که دیدن میکنید، باشد.</translation> <translation id="1699395855685456105">بازبینی سختافزار:</translation> @@ -560,7 +561,6 @@ <translation id="1783075131180517613">لطفاً «رمز عبارتی همگامسازی» خود را بهروزرسانی کنید.</translation> <translation id="1788636309517085411">استفاده از پیشفرض</translation> <translation id="1789575671122666129">پنجرههای بازشو</translation> -<translation id="1790550373387225389">ورود به حالت ارائه</translation> <translation id="1792705092719258158">حالت بازتاب صفحه را فعال کنید.</translation> <translation id="1793119619663054394">مطمئنید میخواهید "<ph name="PROFILE_NAME" />" و همه دادههای Chrome مربوط به آن را از این رایانه حذف کنید؟ این عمل قابل واگرد نیست.</translation> <translation id="179767530217573436">۴ هفته گذشته</translation> @@ -1151,6 +1151,7 @@ <translation id="267285457822962309">تنظیمات خاص دستگاه و لوازم جانبی خود را تغییر دهید.</translation> <translation id="2673135533890720193">خواندن سابقه مرور شما</translation> <translation id="2673589024369449924">ایجاد میانبر میز کار برای این کاربر</translation> +<translation id="2675358154061544447">پشتیبانی کاملاً آزمایشی از پرداز زدن iframes بین سایتی در فرآیندهای جداگانه. در این حالت، اسناد فقط زمانی روندِ پردازی را به اشتراک میگذارند که از یک سایت مشابه باشند.</translation> <translation id="2676946222714718093">در حال پخش در</translation> <translation id="2678063897982469759">فعال کردن مجدد</translation> <translation id="2678246812096664977">همه افزایهها</translation> @@ -1377,6 +1378,7 @@ <translation id="2960393411257968125">نحوه تکمیل خودکار اعتبارنامه همگامسازی توسط مدیریت گذرواژه.</translation> <translation id="29611076221683977">ممکن است مهاجمین حاضر در <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> تلاش کنند تا برنامههای مخربی در Mac شما نصب کنند تا اطلاعات شما (مانند عکسها، گذرواژهها، پیامها و کارتهای اعتباری) را سرقت یا حذف کنند.</translation> <translation id="2961695502793809356">برای رفتن به جلو کلیک کنید، برای دیدن سابقه نگه دارید</translation> +<translation id="296216853343927883">نام تجاری Google در منوی بافت</translation> <translation id="2963151496262057773">این افزایه جواب نمیدهد: <ph name="PLUGIN_NAME" />آیا میخواهید متوقف شود؟</translation> <translation id="2963783323012015985">صفحهکلید ترکی</translation> <translation id="2964193600955408481">غیرفعال کردن Wi-Fi</translation> @@ -1426,6 +1428,16 @@ <translation id="3025729795978504041">روی دکمه بالا راست کلیک کنید تا افراد دیگر را ببینید.</translation> <translation id="3026050830483105579">همه چیز در اینجاست.</translation> <translation id="302620147503052030">دکمه نمایش</translation> +<translation id="302781076327338683">تازهسازی دور زدن حافظه پنهان</translation> +<translation id="3030243755303701754">کاربر تحت نظارت میتواند تحت هدایت شما وب را مرور کنند. بهعنوان مدیر کاربر تحت نظارت در Chrome، میتوانید: + + • وبسایتهای خاصی را مجاز کنید یا آنها را منع کنید، + • وبسایتهایی را که کاربر تحت نظارت دیدن کرده است مرور کنید و + • تنظیمات دیگر را مدیریت کنید. + +با ایجاد کاربر تحت نظارت، حساب Google ایجاد نمیشود و با «همگامسازی Chrome» نشانکها، سابقه مرور و سایر تنظیمات ترجیحی آن کاربر به دستگاههای دیگر منتقل نمیشود. بعد از ایجاد کاربر تحت نظارت جدید، میتوانید در <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />، تنظیمات او را در هر زمانی و از هر دستگاهی مدیریت کنید. + +برای اطلاعات بیشتر، از <ph name="BEGIN_LINK" />مرکز راهنمایی<ph name="END_LINK" /> دیدن کنید.</translation> <translation id="3031417829280473749">مأمور X</translation> <translation id="3031557471081358569">مواردی را برای وارد کردن انتخاب کنید:</translation> <translation id="3033332627063280038">فعال کردن پیادهسازی آزمایشی «کنترل حافظه پنهان: دایرکتیو غیرفعال-هنگام-تأیید مجدد. این کار به سرور اجازه میدهد تعیین کند بعضی از منابع میتوانند برای بهبود زمان تأخیر، در پسزمینه دوباره تأیید شوند.</translation> @@ -1646,7 +1658,6 @@ <translation id="3324301154597925148">آیا این همان صفحه جستجویی است که انتظار داشتید؟</translation> <translation id="3324684065575061611">(توسط خطمشی شرکتی غیر فعال شد)</translation> <translation id="3326821416087822643">در حال فشردهسازی <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">خروج از حالت ارائه</translation> <translation id="3330686263988132416">سربرگ اصلی WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">حالت تصویر آینهای صفحه را فعال کنید. این حالت تصویر صفحه را افقی میچرخاند.</translation> @@ -1691,6 +1702,7 @@ <translation id="3392020134425442298">بازیابی فایل مخرب</translation> <translation id="3394150261239285340"><ph name="HOST" /> میخواهد از دوربین و میکروفن شما استفاده کند.</translation> <translation id="3394279550557729862">پشتیبانی استفاده از اعلانهای خرابی بومی و مرکز اعلان را در پلتفورمی که قرار دارند فعال میکند.</translation> +<translation id="3394862755749546286">پایپ لاین رسانه یکپارچه (Android و رایانه) را در Android غیرفعال میکند.</translation> <translation id="3396331542604645348">چاپگر انتخابی موجود نیست یا به درستی نصب نشده است. چاپگر خود را بررسی کرده یا چاپگر دیگری را انتخاب کنید.</translation> <translation id="3399597614303179694">صفحهکلید مقدونی</translation> <translation id="3401130144947259741">اگر فعال شود، رویدادهای ردیابی به «ردیاب رویداد برای Windows» (ETW) صادر میشوند و میتوانند با ابزاری مانند UIF یا ETW یا Xperf ضبط شوند.</translation> @@ -1901,7 +1913,6 @@ <translation id="367645871420407123">اگر میخواهید گذرواژه ریشه را روی مقدار تصویر آرمایشی پیشفرض تنظیم کنید، خالی بگذارید</translation> <translation id="3678156199662914018">برنامهٔ افزودنی: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">صفحهکلید مالتی</translation> -<translation id="3680173818488851340">iframeهای با اولویت پایین.</translation> <translation id="3683524264665795342">درخواست اشتراکگذاری صفحه <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">هنگام استفاده از دادههای شبکه همراه، همگامسازی Google Drive به صورت پیشفرض غیرفعال است.</translation> <translation id="3685387984467886507">تصمیمات راجع به اقدامات مربوط به خطاهای SSL را برای مدت زمان مشخص شده به یاد داشته باش.</translation> @@ -1950,6 +1961,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> اکنون در Admin Console نمایش داده خواهد شد</translation> <translation id="3741243925913727067">از عکسها و ویدیوهای دستگاه رسانهتان در Google Drive پشتیبان بگیرید.</translation> <translation id="3743492083222969745">فعال/غیرفعال کردن گزینه ورودی اشارهای در صفحه تنظیمات برای صفحهکلید مجازی.</translation> +<translation id="3744111561329211289">همگامسازی پسزمینه</translation> <translation id="3749289110408117711">نام فایل</translation> <translation id="3751427701788899101">اتصال قطع شد</translation> <translation id="3751522270321808809">این سایت ممکن است سعی کند برای سرقت اطلاعات شما (مانند گذرواژهها، پیامها یا کارتهای اعتباری) شما را فریب دهد.</translation> @@ -2267,6 +2279,7 @@ <translation id="4218259925454408822">ورود به سیستم حسابی دیگر</translation> <translation id="4219614746733932747">اگر فعال شود، Blink از مکانیسم بزرگنمایی خود برای مقیاس کردن محتوا برای فاکتور مقیاس دستگاه استفاده میکند.</translation> <translation id="4220865787605972627">کالیبراسیون نمایشگر را فعال میکند (اگر نمایشگر از این قابلیت پشتیبانی کند).</translation> +<translation id="4232692576734035989">حالت عملکرد کاملاً آزمایشی جایی که iframes بین سایتی در فرآیند جداگانهای از سند رأس نگهداشته میشود. در این حالت، به iframes از سایتهای شخص ثالث متفاوت اجازه داده میشود فرآیندی را به اشتراک بگذارند.</translation> <translation id="4235200303672858594">کل صفحه</translation> <translation id="4235813040357936597">افزودن حساب برای <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> به این زبان قابل نمایش نیست.</translation> @@ -2432,6 +2445,7 @@ <translation id="4509017836361568632">رد کردن تصویر</translation> <translation id="4509345063551561634">مکان:</translation> <translation id="4514542542275172126">تنظیم کاربر نظارت شده جدید</translation> +<translation id="4514914692061505365">اجبار استفاده از مترجم Subzero سریع PNaCl برای همه فایلهای pexe.</translation> <translation id="4518677423782794009">آیا Chrome خراب میشود، صفحات شروع، نوارابزار غیرمعمول یا آگهیهای ناخواستهای نشان میدهد که نمیتوانید از شرشان خلاص شوید یا به روش دیگری تجربه مرور شما را تغییر میدهد؟ ممکن است با اجرای «ابزار پاکسازی Chrome»، بتوانید این مشکل را رفع کنید.</translation> <translation id="452039078290142656">دستگاههای ناشناس از <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">جزئیات</translation> @@ -2480,6 +2494,7 @@ <translation id="4595560905247879544">برنامهها و افزونهها فقط توسط مدیر (<ph name="CUSTODIAN_NAME" />) قابل تغییر هستند.</translation> <translation id="4601242977939794209">مبدل EMF</translation> <translation id="4602466770786743961">همیشه به <ph name="HOST" /> اجازه داده شود به دوربین و میکروفون شما دسترسی داشته باشد</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">اینترنت وصل نیست</translation> <translation id="4608500690299898628">&یافتن...</translation> <translation id="4610637590575890427">آیا میخواستید به <ph name="SITE" /> بروید؟</translation> @@ -2782,6 +2797,7 @@ <translation id="5062930723426326933">ورود به سیستم انجام نشد، لطفاً به اینترنت متصل شوید و دوباره امتحان کنید.</translation> <translation id="5063180925553000800">پین جدید:</translation> <translation id="5067867186035333991">اگر <ph name="HOST" /> میخواهد به میکروفن شما دسترسی داشته باشد از من سوال شود</translation> +<translation id="5068918910148307423">به سایتهای اخیراً بستهشده امکان داده نشود ارسال و دریافت داده را تکمیل کنند</translation> <translation id="507075806566596212">در حال ثبت این <ph name="DEVICE_TYPE" /> در Google هستید تا قابلیت پاککردن، قفلکردن و تعیین مکان دستگاه را از راه دور فعال کنید. این کار به راهاندازی مجدد نیاز دارد. میخواهید ادامه دهید؟</translation> <translation id="5072836811783999860">نمایش نشانکهای مدیریت شده</translation> <translation id="5074318175948309511">شاید لازم باشد که این صفحه قبل از اعمال شدن تنظیمات جدید، بارگذاری مجدد شود.</translation> @@ -2892,6 +2908,7 @@ <translation id="5227808808023563348">یافتن متن قبلی</translation> <translation id="5228076606934445476">اشکالی در دستگاه وجود دارد. برای رفع این خطا باید دستگاه را راهاندازی مجدد کرده، دوباره امتحان کنید.</translation> <translation id="5228962187251412618">فقط بررسی آنلاین</translation> +<translation id="5229622432348746578">غیرفعال کردن صوت برای اشتراکگذاری میزکار</translation> <translation id="5230516054153933099">پنجره</translation> <translation id="5232178406098309195">وقتی از فرمانهای فعالسازی صوتی مانند «Ok Google» یا لمس نماد میکروفون استفاده میکنید، فعالیت گفتاری و شنیداری خصوصی شما برخی از گفتارها و شنیدارهای دیگر را در حسابتان ذخیره میکند. مورد ضبط شدهای از گفتار/صدای بعد از آن به علاوه چند ثانیه قبل از آن، ذخیره میشود.</translation> <translation id="523299859570409035">موارد استثنای اعلام</translation> @@ -3146,6 +3163,7 @@ <translation id="5557991081552967863">روشن نگهداشتن Wi-Fi در حالت خواب</translation> <translation id="5558129378926964177">&بزرگنمایی</translation> <translation id="556042886152191864">دکمه</translation> +<translation id="5562781907504170924">این برگه به دستگاه بلوتوث متصل است.</translation> <translation id="5565871407246142825">کارتهای اعتباری</translation> <translation id="5567989639534621706">حافظههای پنهان برنامه</translation> <translation id="5568069709869097550">ورود به سیستم ممکن نیست</translation> @@ -3305,6 +3323,7 @@ <translation id="5803531701633845775">انتخاب عباراتی از برگشت، بدون حرکت دادن مکان نما</translation> <translation id="5804241973901381774">مجوزها</translation> <translation id="580571955903695899">ترتیب مجدد براساس عنوان</translation> +<translation id="5808982448801399019">احراز هویت ناموفق بود</translation> <translation id="580961539202306967">وقتی سایتی میخواهد پیامهای فشاری برایم ارسال کند، از من سؤال شود (توصیه میشود)</translation> <translation id="5815645614496570556">آدرس X.400</translation> <translation id="5817397429773072584">چینی سنتی</translation> @@ -3574,6 +3593,7 @@ <translation id="6243774244933267674">سرور در دسترس نیست</translation> <translation id="6247708409970142803">%<ph name="PERCENTAGE" /></translation> <translation id="624789221780392884">بهروزرسانی آماده است</translation> +<translation id="6248400709929739064">فعال کردن زیرنویس</translation> <translation id="6248988683584659830">تنظیمات جستجو</translation> <translation id="6251870443722440887">کنترلکنندههای GDI</translation> <translation id="6251889282623539337">شرایط خدمات <ph name="DOMAIN" /></translation> @@ -3598,6 +3618,7 @@ <translation id="6277105963844135994">مهلت زمانی شبکه</translation> <translation id="6277518330158259200">گرفتن عکس صفحهنمایش</translation> <translation id="6279183038361895380">برای نمایش نشانگر |<ph name="ACCELERATOR" />| را فشار دهید</translation> +<translation id="6280215091796946657">ورود به سیستم با حساب دیگر</translation> <translation id="6281743458679673853">آزمایشی برای انعکاس بخش قابل مشاهده طرحبندی همه فایلهای API. این کار ویژگیهای window.scroll را به بخش قابل مشاهده طرحبندی مربوط میکند.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{چاپگر جدید در شبکه شما}one{چاپگر جدید در شبکه شما}other{چاپگر جدید در شبکه شما}}</translation> <translation id="6285395082104474418">سینی وضعیت، وضعیت فعلی شبکه، باتری و موارد دیگر را به شما نشان میدهد.</translation> @@ -3679,6 +3700,9 @@ <translation id="6418160186546245112">بازگرداندن به نسخه نصب شده قبلی <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">حذف دائم دسترسی برای تمام برنامهها</translation> <translation id="6418505248408153264">فعال کردن سابقه طراحی سهبعدی</translation> +<translation id="6419288379019356534">این دستگاه توسط <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> مدیریت میشود. + <ph name="LINE_BREAK" /> + برای ادامه ورود به سیستم در حساب <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> خود، لطفاً روی «بعدی» کلیک کنید.</translation> <translation id="6419902127459849040">اروپای مرکزی</translation> <translation id="6420676428473580225">افزودن به میز کار</translation> <translation id="6422329785618833949">عکس وارونه شده</translation> @@ -3839,7 +3863,6 @@ <translation id="6662016084451426657">خطای همگامسازی: برای فعال کردن همگامسازی با سرپرست خود تماس بگیرید.</translation> <translation id="6663792236418322902">برای بازیابی این فایل در فرصتی دیگر به گذرواژه انتخابی شما لازم است. لطفاً آن را در مکانی امن نگهداری کنید.</translation> <translation id="6664237456442406323">متأسفانه، رایانه شما با یک شناسه سختافزار ناقص پیکربندی شده است. این موضوح سیستم عامل Chrome را از بهروزرسانی با جدیدترین اصلاحات امنیتی باز میدارد که <ph name="BEGIN_BOLD" />میتواند رایانه شما را در برابر حملات مخرب آسیبپذیر نماید<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">اولویت بار منابع iframe را کاهش میدهد.</translation> <translation id="6666647326143344290">با حساب Google خود</translation> <translation id="6675665718701918026">دستگاه نشانگر متصل شد</translation> <translation id="6677037229676347494">شناسه مورد انتظار «<ph name="EXPECTED_ID" />» است، اما شناسه «<ph name="NEW_ID" />» بود.</translation> @@ -3932,6 +3955,7 @@ <translation id="6825883775269213504">روسی</translation> <translation id="6827236167376090743">پخش این ویدیو ادامه مییابد و تکرار میشود.</translation> <translation id="6828153365543658583">محدود کردن ورود به سیستم برای کاربران زیر:</translation> +<translation id="6828434191343384461">دادههای انتخابشده از Chrome و دستگاههای همگامسازیشده حذف شده است. ممکن است حساب Google شما در <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> اشکال دیگری از سابقه مرور (مانند جستجوها و فعالیت از سایر خدمات Google) داشته باشد.</translation> <translation id="6828860976882136098">راهاندازی بهروزرسانیهای خودکار برای همه کاربران انجام نشد (خطای اجرای پیش از تولید: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">برای <ph name="DEVICE_TYPE" /> راهنمایی دریافت کنید.</translation> <translation id="6829270497922309893">ثبتنام در سازمان شما</translation> @@ -4012,6 +4036,7 @@ <translation id="6965382102122355670">تأیید</translation> <translation id="6965648386495488594">درگاه</translation> <translation id="6965978654500191972">دستگاه</translation> +<translation id="6969104364835835175">اجبار کردن PNaCl Subzero</translation> <translation id="6970230597523682626">بلغاری</translation> <translation id="6970480684834282392">نوع راهاندازی</translation> <translation id="6970856801391541997">صفحات خاص چاپ</translation> @@ -4094,10 +4119,12 @@ <translation id="7057058088140140610">کارتهای اعتباری و آدرسهای مورد استفاده در Google Payments</translation> <translation id="7059858479264779982">تنظیم روی اجرای خودکار</translation> <translation id="7061692898138851896">ذخیره خودکار گذرواژهها</translation> +<translation id="7062222374113411376">به سایتهای اخیراً بستهشده امکان داده شود ارسال و دریافت داده را تکمیل کند (توصیه میشود)</translation> <translation id="7063129466199351735">در حال پردازش میانبرها...</translation> <translation id="7065223852455347715">این دستگاه در حالتی قفل شده است که از ثبتنام شرکتی جلوگیری میکند. اگر میخواهید دستگاه را ثبتنام کنید ابتدا باید دستگاه را بازیابی کنید.</translation> <translation id="7065534935986314333">درباره سیستم</translation> <translation id="7066944511817949584">اتصاله به "<ph name="DEVICE_NAME" />" ناموفق بود.</translation> +<translation id="7067725467529581407">هرگز دوباره نشان داده نشود.</translation> <translation id="7070804685954057874">ورود مستقیم</translation> <translation id="7072010813301522126">نام میانبر</translation> <translation id="7072025625456903686">مجاز کردن همه یا سفارشی کردن</translation> @@ -4372,6 +4399,7 @@ <translation id="7489605380874780575">بررسی وجود شرایط لازم</translation> <translation id="749028671485790643">نفر <ph name="VALUE" /></translation> <translation id="7491962110804786152">برگه</translation> +<translation id="7493386493263658176">ممکن است افزونه <ph name="EXTENSION_NAME" /> همه نوشتاری را که تایپ میکنید (از جمله دادههای شخصی مانند گذرواژهها و شماره کارتهای اعتباری) جمعآوری کند. میخواهید از این افزونه استفاده کنید؟</translation> <translation id="7495778526395737099">گذرواژه قدیمیتان را فراموش کردید؟</translation> <translation id="7503191893372251637">نوع گواهی Netscape</translation> <translation id="7503821294401948377">بارگیری نماد "<ph name="ICON" />" برای عملکرد مرورگر ممکن نیست.</translation> @@ -4423,6 +4451,7 @@ <translation id="756445078718366910">باز کردن پنجرهٔ مرورگر</translation> <translation id="7564847347806291057">پایان دادن به فرایند</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">دادههای Chrome پاک شد</translation> <translation id="7568790562536448087">در حال بهروزرسانی</translation> <translation id="7573172247376861652">شارژ باتری</translation> <translation id="7576032389798113292">۶x۴</translation> @@ -4551,6 +4580,7 @@ <translation id="7786207843293321886">خروج مهمان</translation> <translation id="7786889348652477777">&تازهسازی برنامه</translation> <translation id="7787129790495067395">شما در حال حاضر از یک رمز عبارتی استفاده میکنید. درصورتیکه رمز عبارتی خود را فراموش کردهاید، میتوانید جهت پاک کردن دادههای خود از سرورهای Google با استفاده از Google Dashboard همگامسازی را بازنشانی کنید.</translation> +<translation id="7787308148023287649">نمایش در صفحه دیگر</translation> <translation id="7788080748068240085">برای ذخیره «<ph name="FILE_NAME" />» بهصورت آفلاین باید <ph name="TOTAL_FILE_SIZE" /> فضای دیگر خالی کنید:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />فایلهایی را که دیگر نمیخواهید به آنها دسترسی آفلاین داشته باشید٬ لغو پین کنید<ph name="MARKUP_3" /> <ph name="MARKUP_4" />فایلها را از پوشه دانلودهایتان حذف کنید<ph name="MARKUP_5" /></translation> @@ -4619,6 +4649,7 @@ <translation id="7878999881405658917">Google اعلانی برای این تلفن ارسال کرد. توجه داشته باشید که تلفن شما میتواند قفل <ph name="DEVICE_TYPE" /> را تا بیش از ۹ متر باز نگه دارد. در مواردی که این موضوع میتواند مشکل آفرین باشد، میتوانید <a>به صورت موقت این قابلیت را غیرفعال کنید</a>.</translation> <translation id="7879478708475862060">پیروی از روش ورودی</translation> <translation id="7880836220014399562">«<ph name="BUNDLE_NAME" />» این برنامهها و افزونهها را اضافه میکند:</translation> +<translation id="7881969471599061635">غیرفعال کردن زیرنویس</translation> <translation id="7884988936047469945">قابلیتهای دسترسی آزمایشی</translation> <translation id="7885253890047913815">مقصدهای اخیر</translation> <translation id="7885283703487484916">بسیار کوتاه</translation> @@ -4982,6 +5013,7 @@ <translation id="839736845446313156">ثبت نام</translation> <translation id="8398790343843005537">یافتن تلفن خودتان</translation> <translation id="8398877366907290961">در هر حال ادامه داده شود</translation> +<translation id="8399276228600040370">ورود به سیستم با حساب ذخیرهشده با <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">کادر انتخاب بدون علامت</translation> <translation id="8408402540408758445">نتایج جستجوی واکشی اولیه</translation> <translation id="8410073653152358832">استفاده از این تلفن</translation> @@ -5068,6 +5100,7 @@ <translation id="8545211332741562162">به صفحات وب امکان میدهد از ویژگیهای آزمایشی جاوا اسکریپت استفاده کنند.</translation> <translation id="8545575359873600875">متأسفیم، گذرواژهتان تأیید نشد. مدیر این کاربر نظارت شده ممکن است به تازگی گذرواژه را تغییر داده باشد. در این صورت، بار دیگر که به سیستم وارد میشوید، گذرواژه جدید اعمال میشود. گذرواژه قدیمیتان را امتحان کنید.</translation> <translation id="8546306075665861288">حافظهٔ پنهان تصویر</translation> +<translation id="854653344619327455">وقتی این پرچم روشن است، پنجره انتخابگر اشتراکگذاری میزکار به کاربر امکان نمیدهد انتخاب کند صوت به اشتراک گذاشته شود یا نه.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">نویسه</translation> <translation id="855081842937141170">پین کردن برگه</translation> @@ -5098,6 +5131,7 @@ <translation id="8589311641140863898">APIهای برنامهٔ افزودنی آزمایشی</translation> <translation id="8590375307970699841">راهاندازی بهروزرسانیهای خودکار</translation> <translation id="8592071947729879125">مجوزهای iframe را محدود میکند.</translation> +<translation id="8592125506633137593">ایزوله کردن سند رأس</translation> <translation id="8594787581355215556">ورود به سیستم بهعنوان <ph name="USER_EMAIL_ADDRESS" />. دادههای همگامسازی شده خود را در <ph name="BEGIN_LINK" />داشبورد Google<ph name="END_LINK" /> مدیریت کنید.</translation> <translation id="8596540852772265699">فایلهای سفارشی</translation> <translation id="8596785155158796745">میکروفن در حال حاضر در دسترس نیست. <ph name="BEGIN_LINK" />مدیریت میکروفن<ph name="END_LINK" /></translation> @@ -5170,6 +5204,7 @@ <translation id="8688579245973331962">نامتان را مشاهده نمیکنید؟</translation> <translation id="8688644143607459122">با کلیک کردن روی ادامه، با استفاده از Google Payments موافقت میکنید. برای محافظت شما در برابر تقلب، اطلاعات مربوط به رایانهتان (از جمله مکان آن) با Google Payments بهاشتراک گذاشته میشود.</translation> <translation id="8689102680909215706">برنامه افزودنی «<ph name="EXTENSION_NAME" />» از راه دور نصب شد.</translation> +<translation id="868926756781121513">اشتراکگذاری میزکار با منبع برگه</translation> <translation id="8689341121182997459">تاریخ انقضا:</translation> <translation id="8690754533598178758">استثناهای میکروفون Adobe Flash Player فرق میکند.</translation> <translation id="8691686986795184760">(توسط خطمشی سازمانی فعال شده است)</translation> @@ -5213,6 +5248,7 @@ <translation id="8737685506611670901">باز کردن پیوندهای <ph name="PROTOCOL" /> به جای <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">اصلاح موقعیت اشاره لمسی بهمنظور جبران لمسهایی که در مقایسه با موشواره، وضوح ضعیفتری دارند.</translation> +<translation id="8741995161408053644">ممکن است حساب Google شما اشکال سابقه مرور دیگری در <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> داشته باشد.</translation> <translation id="8743712320294854924">نمایش گزینههای ورودی بزرگشده در قفسه.</translation> <translation id="874420130893181774">روش ورودی پینیین سنتی</translation> <translation id="8744525654891896746">یک چهرهنما برای این کاربر نظارتشده انتخاب کنید</translation> @@ -5226,6 +5262,7 @@ <translation id="8757640015637159332">ورود به جلسه عمومی</translation> <translation id="8757742102600829832">یک Chromebox برای ارتباط با این دستگاه انتخاب کنید</translation> <translation id="8757803915342932642">دستگاه در Google Cloud Devices</translation> +<translation id="8758895886513993540">این پرچم کنترل میکند کاربران میتوانند برگهای برای اشتراکگذاری میزکار انتخاب کنند یا نه.</translation> <translation id="8759408218731716181">تنظیم ورود چندگانه به سیستم ممکن نیست</translation> <translation id="8759753423332885148">بیشتر بیاموزید.</translation> <translation id="8761567432415473239">مرور ایمن Google اخیراً <ph name="BEGIN_LINK" />برنامههای خطرناک<ph name="END_LINK" /> را در <ph name="SITE" /> پیدا کرده است.</translation> @@ -5436,6 +5473,7 @@ <translation id="9074739597929991885">بلوتوث</translation> <translation id="9074836595010225693">موشواره USB متصل شد</translation> <translation id="9076523132036239772">متأسفم، ایمیل و گذرواژه شما تأیید نشد. ابتدا به یک شبکه متصل شوید.</translation> +<translation id="9077132661879924646">پایپ لاین رسانه یکپارچه را در Android غیرفعال میکند.</translation> <translation id="907841381057066561">ایجاد فایل فشرده موقت هنگام بسته بندی ناموفق بود.</translation> <translation id="9083147368019416919">لغو ثبت نام ناموفق بود</translation> <translation id="9084064520949870008">بازکردن بهعنوان پنجره</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index dc6cedd..85ca301 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Valitse kuvasta neliön muotoinen alue.</translation> <translation id="1697532407822776718">Kaikki on valmista.</translation> +<translation id="1697988819212986149">Näyttää Google-kuvakkeen Google-palveluiden tarjoamien kontekstivalikon kohteiden vieressä.</translation> <translation id="1699274548822076330">Tämän käytännön kanssa käytetään määritettä trace-upload-url flag. VAROITUS: Kun tämä käytäntö on käytössä, Chrome tallentaa jokaisen siirtymisen suorituskykytiedot ja lähettää ne trace-upload-url-määritteellä ilmoitettuun URL-osoitteeseen. Jäljitystiedot voivat sisältää henkilökohtaisia tunnistetietoja, kuten avattujen sivustojen otsikoita ja URL-osoitteita.</translation> <translation id="1699395855685456105">Laitteiston laajennus: </translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Päivitä synkronoinnin tunnuslause.</translation> <translation id="1788636309517085411">Käytä oletusta</translation> <translation id="1789575671122666129">Ponnahdusikkunat</translation> -<translation id="1790550373387225389">Siirry esitystilaan</translation> <translation id="1792705092719258158">Ota käyttöön peilatun näytön tila.</translation> <translation id="1793119619663054394">Haluatko varmasti poistaa profiilin <ph name="PROFILE_NAME" /> ja kaikki siihen liittyvät Chrome-tiedot tältä tietokoneelta? Tätä ei voi perua.</translation> <translation id="179767530217573436">viimeiset 4 viikkoa</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Muuta laite- ja lisälaitekohtaisia asetuksia.</translation> <translation id="2673135533890720193">Tarkastella selaushistoriaasi</translation> <translation id="2673589024369449924">Luo tälle käyttäjälle työpöydän pikakuvake</translation> +<translation id="2675358154061544447">Hyvin kokeellinen tuki eri sivustoilla olevien iframe-kehysten hahmontamiselle erillisissä prosesseissa. Tässä tilassa dokumentit jakavat hahmontamisprosessin vain, jos ne ovat samalta verkkosivulta.</translation> <translation id="2676946222714718093">Toistetaan Chromecastilla</translation> <translation id="2678063897982469759">Ota uudelleen käyttöön</translation> <translation id="2678246812096664977">Kaikki laajennukset</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">Kuinka salasanan hallinta käsittelee synkronointitunnusten automaattista täyttöä.</translation> <translation id="29611076221683977">Sivustoon <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> hyökännyt taho voi yrittää asentaa Maciisi vaarallisia ohjelmia, jotka varastavat tai poistavat tietojasi, kuten kuviasi, salasanojasi, viestejäsi ja luottokorttiesi tietoja.</translation> <translation id="2961695502793809356">Siirry eteenpäin klikkaamalla, tarkastele historiaa pitämällä alhaalla</translation> +<translation id="296216853343927883">Google-brändi kontekstivalikossa</translation> <translation id="2963151496262057773">Seuraava laajennus ei vastaa: <ph name="PLUGIN_NAME" />. Haluatko pysäyttää sen?</translation> <translation id="2963783323012015985">Näppäimistö: turkki</translation> <translation id="2964193600955408481">Wi-Fi pois käytöstä</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">Voit katsoa muita ihmisiä klikkaamalla yllä olevaa painiketta hiiren kakkospainikkeella.</translation> <translation id="3026050830483105579">Kaikki löytyy täältä.</translation> <translation id="302620147503052030">Näytä painike</translation> +<translation id="302781076327338683">Päivitä sivu ohittamalla välimuisti</translation> +<translation id="3030243755303701754">Valvottu käyttäjä voi käyttää internetiä sinun valvonnassasi. Valvotun Chrome-käyttäjän hallinnoijana voit + + • sallia tai estää tiettyjä verkkosivustoja + • tarkastella verkkosivustoja, joilla valvottu käyttäjä on vieraillut + • hallinnoida muita asetuksia. + +Valvotun käyttäjän luominen ei luo Google-tiliä, eikä hänen kirjanmerkkejään, selaushistoriaansa ja muita asetuksiaan siirretä muille laitteille Chromen synkronoinnin yhteydessä. Kun olet luonut uuden valvotun käyttäjän, voit hallinnoida hänen asetuksiaan milloin tahansa ja miltä tahansa laitteelta osoitteessa <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Lisätietoja saat <ph name="BEGIN_LINK" />ohjekeskuksestamme<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agentti X</translation> <translation id="3031557471081358569">Valitse tuotavat kohteet:</translation> <translation id="3033332627063280038">Ottaa käyttöön välimuistin hallinnan komennon stale-while-revalidate kokeellisen version. Tämä antaa palvelimille luvan määrittää jotkin resurssit todentumaan uudelleen taustalla, mikä vähentää viivettä.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">Onko tämä haluamasi hakusivu?</translation> <translation id="3324684065575061611">(Poistettu käytöstä yrityskäytännön mukaisesti)</translation> <translation id="3326821416087822643">Pakataan tiedostoa <ph name="FILE_NAME" />…</translation> -<translation id="3330206034087160972">Poistu esitystilasta</translation> <translation id="3330686263988132416">WebRTC Stun -viestien alkuperäotsikoiden tuki</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Ota käyttöön peilatun näytön tila. Tämä tila kääntää näytön kuvan vaakasuuntaan.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Palauta haitallinen tiedosto</translation> <translation id="3394150261239285340"><ph name="HOST" /> haluaa käyttää kameraa ja mikrofonia.</translation> <translation id="3394279550557729862">Ota käyttöön natiivi-ilmoitusten tietoikkunoiden ja ilmoituskeskusten tuki alustoilla, joilla ne ovat käytettävissä.</translation> +<translation id="3394862755749546286">Poista käytöstä yhdistetyn (Androidin ja tietokoneet sisältävän) mediaympäristön Androidilla.</translation> <translation id="3396331542604645348">Valittu tulostin ei ole käytettävissä tai oikein asennettu. Varmista, että tulostin on kunnossa, tai valitse toinen tulostin.</translation> <translation id="3399597614303179694">Näppäimistö: makedonia</translation> <translation id="3401130144947259741">Jos tämä asetus on käytössä, jäljitystapahtumat viedään ETW:hen (Event Tracing for Windows), ja ne voidaan tallentaa muun muassa UIForETW:lla tai Xperfilla.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">Jätä tyhjäksi, jos haluat asettaa pääkäyttäjän salasanaksi oletustestikuvan arvon.</translation> <translation id="3678156199662914018">Laajennus: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Näppäimistö: malta</translation> -<translation id="3680173818488851340">Vähemmän tärkeät iframet</translation> <translation id="3683524264665795342">Ruudunjakopyyntö sovellukselta <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Google Driven synkronointi on oletuksena pois käytöstä käyttäessäsi mobiilitiedonsiirtoa.</translation> <translation id="3685387984467886507">Muista SSL-virheet ohittava asetus määritetyn ajan verran.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> näkyy nyt hallintakonsolissa</translation> <translation id="3741243925913727067">Varmuuskopioi medialaitteesi valokuvat ja videot Google Driveen.</translation> <translation id="3743492083222969745">Ota piirtokirjoitus käyttöön tai poista se käytöstä virtuaalisen näppäimistön asetussivulla.</translation> +<translation id="3744111561329211289">Taustasynkronointi</translation> <translation id="3749289110408117711">Tiedostonimi</translation> <translation id="3751427701788899101">Yhteys katkesi</translation> <translation id="3751522270321808809">Sivusto voi yrittää varastaa tietojasi (esimerkiksi salasanoja, viestejä tai luottokorttien tietoja) huijaamalla sinua.</translation> @@ -2267,6 +2279,7 @@ <translation id="4218259925454408822">Kirjaudu sisään toiseen tiliin</translation> <translation id="4219614746733932747">Jos tämä on käytössä, Blink skaalaa zoomausjärjestelmänsä avulla sisältöä laiteskaalauskertoimen mukaisesti.</translation> <translation id="4220865787605972627">Sallii näytön värien kalibroinnin, jos näyttö tukee sitä.</translation> +<translation id="4232692576734035989">Hyvin kokeellinen tila, jossa eri sivustoilla olevat iframe-kehykset pidetään ylätason dokumentista erillisessä prosessissa. Tässä tilassa eri kolmannen osapuolten sivustojen iframe-kehyksillä on oikeus jakaa prosesseja.</translation> <translation id="4235200303672858594">Koko ruutu</translation> <translation id="4235813040357936597">Lisää tili henkilölle <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ei voi näyttää tällä kielellä.</translation> @@ -2431,6 +2444,7 @@ <translation id="4509017836361568632">Hylkää kuva</translation> <translation id="4509345063551561634">Sijainti:</translation> <translation id="4514542542275172126">Luo uusi valvottu käyttäjä</translation> +<translation id="4514914692061505365">Pakota PNaCl's fast Subzero ‑kääntäjän käyttö kaikille pexe-tiedostoille.</translation> <translation id="4518677423782794009">Kaatuileeko Chrome? Näyttääkö se epätavallisia aloitussivuja, työkalupalkkeja tai mainoksia, joista et pääse eroon? Onko selaimen käyttökokemus muuttunut jollakin muulla tavalla? Ongelmien korjaaminen voi onnistua Chrome Cleanup Toolin avulla.</translation> <translation id="452039078290142656">myyjän <ph name="VENDOR_NAME" /> tuntemattomat laitteet</translation> <translation id="4522570452068850558">Tiedot</translation> @@ -2479,6 +2493,7 @@ <translation id="4595560905247879544">Vain ylläpitäjä (<ph name="CUSTODIAN_NAME" />) voi muokata sovelluksia ja laajennuksia.</translation> <translation id="4601242977939794209">EMF-muuntaja</translation> <translation id="4602466770786743961">Anna sivuston <ph name="HOST" /> aina käyttää kameraasi ja mikrofoniasi</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Internetyhteys ei käytössä</translation> <translation id="4608500690299898628">&Haku...</translation> <translation id="4610637590575890427">Halusitko siirtyä osoitteeseen <ph name="SITE" />?</translation> @@ -2778,6 +2793,7 @@ <translation id="5062930723426326933">Kirjautuminen epäonnistui. Muodosta verkkoyhteys ja yritä uudelleen.</translation> <translation id="5063180925553000800">Uusi PIN-koodi:</translation> <translation id="5067867186035333991">Kysy, jos <ph name="HOST" /> haluaa käyttää mikrofoniasi</translation> +<translation id="5068918910148307423">Älä anna äskettäin suljettujen sivustojen suorittaa tietojen lähettämista ja vastaanottamista loppuun</translation> <translation id="507075806566596212">Olet rekisteröimässä laitetta <ph name="DEVICE_TYPE" /> Googleen. Tämän jälkeen voit paikantaa, tyhjentää ja lukita laitteen etäyhteyden kautta. Laite täytyy käynnistää uudelleen. Haluatko jatkaa?</translation> <translation id="5072836811783999860">Näytä hallinnoidut kirjanmerkit</translation> <translation id="5074318175948309511">Tämä sivu on ehkä ladattava uudelleen, ennen kuin uudet asetukset tulevat voimaan.</translation> @@ -2885,6 +2901,7 @@ <translation id="5227808808023563348">Etsi aiempaa tekstiä</translation> <translation id="5228076606934445476">Tässä laitteessa on jotain vialla. Korjataksesi tämän virheen sinun on käynnistettävä laite uudelleen ja yritettävä sitten uudelleen.</translation> <translation id="5228962187251412618">Vain verkkotarkistus</translation> +<translation id="5229622432348746578">Poista äänen jakaminen käytöstä jaetun työpöydän tilassa</translation> <translation id="5230516054153933099">Ikkuna</translation> <translation id="5232178406098309195">Kun käytät äänellä aktivoitavia komentoja, kuten ”Ok Google”, tai kosketat mikrofonikuvaketta, yksityinen puhe- ja äänitoimintasi tallentaa puhetta ja muuta ääntä tilillesi. Tallennukseen sisältyy sitä seuraava puhe/ääni sekä sitä edeltävät muutama sekunti.</translation> <translation id="523299859570409035">Ilmoituspoikkeukset</translation> @@ -3139,6 +3156,7 @@ <translation id="5557991081552967863">Pidä Wi-Fi päällä lepotilassa</translation> <translation id="5558129378926964177">&Lähennä</translation> <translation id="556042886152191864">Painike</translation> +<translation id="5562781907504170924">Tämä välilehti on yhdistetty Bluetooth-laitteeseen.</translation> <translation id="5565871407246142825">Luottokortit</translation> <translation id="5567989639534621706">Sovellusvälimuistit</translation> <translation id="5568069709869097550">Ei voi kirjautua sisään</translation> @@ -3298,6 +3316,7 @@ <translation id="5803531701633845775">Valitse lausekkeita takaa liikuttamatta osoitinta</translation> <translation id="5804241973901381774">Käyttöluvat</translation> <translation id="580571955903695899">Järjestä otsikon mukaan</translation> +<translation id="5808982448801399019">Valtuutus epäonnistui.</translation> <translation id="580961539202306967">Kysy minulta sivuston halutessa lähettää push-viestejä (suositus)</translation> <translation id="5815645614496570556">X.400-osoite</translation> <translation id="5817397429773072584">perinteinen kiina</translation> @@ -3569,6 +3588,7 @@ <translation id="6243774244933267674">Palvelin ei ole käytettävissä</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Päivitys on valmis</translation> +<translation id="6248400709929739064">Ota tekstitykset käyttöön</translation> <translation id="6248988683584659830">Hakuasetukset</translation> <translation id="6251870443722440887">GDI-kahvat</translation> <translation id="6251889282623539337">Verkkotunnuksen <ph name="DOMAIN" /> käyttöehdot</translation> @@ -3593,6 +3613,7 @@ <translation id="6277105963844135994">Verkon aikakatkaisu</translation> <translation id="6277518330158259200">Ot&a kuvakaappaus</translation> <translation id="6279183038361895380">Näytä kursori painamalla |<ph name="ACCELERATOR" />|.</translation> +<translation id="6280215091796946657">Kirjaudu sisään toisella tilillä</translation> <translation id="6281743458679673853">Kokeilu, jolla kaikki sovellusliittymät saadaan sisällytettyä asettelunäkymään. Tällöin window.scroll-vieritysominaisuudet toteutetaan suhteessa asettelunäkymään.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Verkossasi on uusi tulostin}other{Verkossasi on uusia tulostimia}}</translation> <translation id="6285395082104474418">Tila-alueella näkyy verkon ja akun nykyinen tila sekä muita tietoja.</translation> @@ -3674,6 +3695,9 @@ <translation id="6418160186546245112">Palataan tuotteen <ph name="IDS_SHORT_PRODUCT_NAME" /> aiemmin asennettuun versioon</translation> <translation id="6418481728190846787">Estä pysyvästi pääsy kaikkiin sovelluksiin</translation> <translation id="6418505248408153264">Ota Material design -historia käyttöön</translation> +<translation id="6419288379019356534">Tätä tiliä hallinnoi <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Jatka tilillesi (<ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />) kirjautumista valitsemalla Seuraava.</translation> <translation id="6419902127459849040">keskieurooppalainen</translation> <translation id="6420676428473580225">Lisää työpöydälle</translation> <translation id="6422329785618833949">Kuva käännettiin</translation> @@ -3834,7 +3858,6 @@ <translation id="6662016084451426657">Synkronointivirhe: ota yhteyttä järjestelmänvalvojaan synkronoinnin ottamiseksi käyttöön.</translation> <translation id="6663792236418322902">Valitsemasi salasana vaaditaan tämän tiedoston palauttamiseen myöhemmin. Tallenna se varmaan paikkaan.</translation> <translation id="6664237456442406323">Tietokoneesi on valitettavasti määritetty virheellisellä laitetunnuksella. Siksi Chrome-käyttöjärjestelmä ei voi asentaa uusimpia tietoturvapäivityksiä ja tietokoneesi <ph name="BEGIN_BOLD" />voi altistua hyökkäyksille<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Laskee iframe-resurssien lataustärkeyttä.</translation> <translation id="6666647326143344290">Google-tilisi avulla</translation> <translation id="6675665718701918026">Osoitinlaite yhdistetty.</translation> <translation id="6677037229676347494">Odotettiin tunnusta <ph name="EXPECTED_ID" />, mutta tunnus oli <ph name="NEW_ID" />.</translation> @@ -3927,6 +3950,7 @@ <translation id="6825883775269213504">venäjä</translation> <translation id="6827236167376090743">Tätä videota näytetään niin kauan, kunnes lehmät tulevat kotiin.</translation> <translation id="6828153365543658583">Rajaa kirjautuminen vain seuraaville käyttäjille:</translation> +<translation id="6828434191343384461">Valitut tiedot on poistettu Chromesta ja synkronoiduilta laitteilta. Google-tililläsi voi olla muita selaushistoriatietoja, kuten hakuja ja toimintaa muista Google-palveluista, osoitteessa <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Automaattisten päivitysten käyttöönotto kaikille käyttäjille epäonnistui (suoritusvirhe valmistelun aikana: <ph name="ERROR_NUMBER" />).</translation> <translation id="6829250331733125857">Lue ohjeita laitteen <ph name="DEVICE_TYPE" /> käyttöön.</translation> <translation id="6829270497922309893">Ilmoittaudu organisaatioosi</translation> @@ -4006,6 +4030,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Portti</translation> <translation id="6965978654500191972">Laite</translation> +<translation id="6969104364835835175">Pakota PNaCl Subzero</translation> <translation id="6970230597523682626">bulgaria</translation> <translation id="6970480684834282392">Käynnistystyyppi</translation> <translation id="6970856801391541997">Tulosta tietyt sivut</translation> @@ -4088,10 +4113,12 @@ <translation id="7057058088140140610">Google Paymentsia käyttävät luottokortit ja osoitteet</translation> <translation id="7059858479264779982">Aseta käynnistymään automaattisesti</translation> <translation id="7061692898138851896">Tallenna salasanat automaattisesti</translation> +<translation id="7062222374113411376">Salli äskettäin suljettujen sivustojen suorittaa tietojen lähettäminen ja vastaanottaminen loppuun (suositus)</translation> <translation id="7063129466199351735">Pikakuvakkeita käsitellään…</translation> <translation id="7065223852455347715">Laite on lukittu tilaan, jossa yrityskäyttö on estetty. Jos haluat ottaa yrityskäyttötilan käyttöön, sinun täytyy suorittaa laitteen palautus.</translation> <translation id="7065534935986314333">Tietoja järjestelmästä</translation> <translation id="7066944511817949584">Yhdistäminen laitteeseen <ph name="DEVICE_NAME" /> epäonnistui.</translation> +<translation id="7067725467529581407">Älä näytä tätä uudelleen</translation> <translation id="7070804685954057874">Suora syöttö</translation> <translation id="7072010813301522126">Pikanäppäimen nimi</translation> <translation id="7072025625456903686">Salli kaikki tai muokkaa</translation> @@ -4363,6 +4390,7 @@ <translation id="7489605380874780575">Tarkista kelpoisuus</translation> <translation id="749028671485790643">Henkilö <ph name="VALUE" /></translation> <translation id="7491962110804786152">sarkain</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> voi kerätä kaiken kirjoittamasi tekstin, myös henkilökohtaiset tiedot, kuten salasanat ja luottokorttien numerot. Haluatko käyttää tätä laajennusta?</translation> <translation id="7495778526395737099">Unohtuiko vanha salasana?</translation> <translation id="7503191893372251637">Netscape-varmennetyyppi</translation> <translation id="7503821294401948377">Kuvakkeen <ph name="ICON" /> lataaminen selaintoimintoa varten epäonnistui.</translation> @@ -4414,6 +4442,7 @@ <translation id="756445078718366910">Avaa selainikkuna</translation> <translation id="7564847347806291057">Lopeta prosessi</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome-tiedot tyhjennetty</translation> <translation id="7568790562536448087">Päivitetään</translation> <translation id="7573172247376861652">Akun varaus</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4543,6 +4572,7 @@ <translation id="7786207843293321886">Lopeta vierailijakäyttö</translation> <translation id="7786889348652477777">&Lataa sovellus uudelleen</translation> <translation id="7787129790495067395">Käytät tällä hetkellä tunnuslausetta. Jos olet unohtanut sen, voit nollata synkronoinnin Googlen hallintakeskuksen avulla. Tällöin kaikki tietosi poistetaan Googlen palvelimilta.</translation> +<translation id="7787308148023287649">Näytä toisella näytöllä</translation> <translation id="7788080748068240085">Jos haluat tallentaa tiedoston <ph name="FILE_NAME" /> offline-version, vapauta vielä <ph name="TOTAL_FILE_SIZE" /> levytilaa:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />irrota tiedostoja, joita et enää tarvitse offline-tilassa<ph name="MARKUP_3" /> <ph name="MARKUP_4" />poista tiedostoja Lataukset-kansiosta.<ph name="MARKUP_5" /></translation> @@ -4611,6 +4641,7 @@ <translation id="7878999881405658917">Google lähetti puhelimeen ilmoituksen. Huomaa, että puhelimesi voi pitää <ph name="DEVICE_TYPE" />-laitteesi lukitsemattomana Bluetooth-yhteyden kautta yli 30 metrin päästä. Jos tämä saattaa aiheuttaa ongelmia, voit <a>poistaa ominaisuuden käytöstä väliaikaisesti</a>.</translation> <translation id="7879478708475862060">Seuraa syöttötapaa</translation> <translation id="7880836220014399562"><ph name="BUNDLE_NAME" /> lisää seuraavat sovellukset ja laajennukset:</translation> +<translation id="7881969471599061635">Poista tekstitykset käytöstä</translation> <translation id="7884988936047469945">Kokeelliset esteettömyysominaisuudet</translation> <translation id="7885253890047913815">Uusimmat kohteet</translation> <translation id="7885283703487484916">hyvin lyhyt</translation> @@ -4974,6 +5005,7 @@ <translation id="839736845446313156">Rekisteröidy</translation> <translation id="8398790343843005537">Etsi puhelimesi</translation> <translation id="8398877366907290961">Jatka silti</translation> +<translation id="8399276228600040370">Kirjaudu sisään sovelluksella <ph name="PASSWORD_MANAGER_BRAND" /> tallennetulla tilillä</translation> <translation id="8401363965527883709">Ei-valittu valintaruutu</translation> <translation id="8408402540408758445">Esihae hakutulokset</translation> <translation id="8410073653152358832">Käytä tätä puhelinta</translation> @@ -5060,6 +5092,7 @@ <translation id="8545211332741562162">Anna verkkosivujen käyttää kokeellisia JavaScript-ominaisuuksia.</translation> <translation id="8545575359873600875">Salasanaasi ei voi vahvistaa. Tämän valvotun käyttäjän valvoja on saattanut vaihtaa salasanan äskettäin. Jos näin on, uusi salasana otetaan käyttöön seuraavan sisäänkirjautumisen yhteydessä. Yritä käyttää vanhaa salasanaa.</translation> <translation id="8546306075665861288">Kuvavälimuisti</translation> +<translation id="854653344619327455">Kun tämä merkintä on käytössä, käyttäjä ei voi valita jaetun työpöydän valitsinikkunassa, jaetaanko myös ääni.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Merkki</translation> <translation id="855081842937141170">Kiinnitä välilehti</translation> @@ -5090,6 +5123,7 @@ <translation id="8589311641140863898">Kokeelliset laajennussovellusliittymät</translation> <translation id="8590375307970699841">Ota käyttöön automaattiset päivitykset</translation> <translation id="8592071947729879125">Rajoita iframe-kehysten käyttöoikeuksia.</translation> +<translation id="8592125506633137593">Ylätason dokumentin eristäminen</translation> <translation id="8594787581355215556">Kirjautunut käyttäjänä <ph name="USER_EMAIL_ADDRESS" />. Hallinnoi synkronoituja tietojasi <ph name="BEGIN_LINK" />Google-hallintapaneelissa<ph name="END_LINK" /></translation> <translation id="8596540852772265699">Muokatut tiedostot</translation> <translation id="8596785155158796745">Mikrofoni ei ole tällä hetkellä käytettävissä. <ph name="BEGIN_LINK" />Hallinnoi mikrofonia<ph name="END_LINK" /></translation> @@ -5162,6 +5196,7 @@ <translation id="8688579245973331962">Eikö nimeäsi näy?</translation> <translation id="8688644143607459122">Klikkaamalla Jatka hyväksyt Google Paymentsin käytön. Petosten estämiseksi tietokonettasi koskevia tietoja (kuten sen sijainti) jaetaan Google Paymentsin kanssa.</translation> <translation id="8689102680909215706">Laajennus <ph name="EXTENSION_NAME" /> asennettiin etäyhteyden kautta.</translation> +<translation id="868926756781121513">Työpöydän jakaminen välilehdeltä</translation> <translation id="8689341121182997459">Vanhentuu:</translation> <translation id="8690754533598178758">Adobe Flash Player käyttää eri poikkeuksia mikrofonille.</translation> <translation id="8691686986795184760">(Yrityskäytännön käyttöön ottama)</translation> @@ -5205,6 +5240,7 @@ <translation id="8737685506611670901">Avata <ph name="PROTOCOL" />-linkit palvelun <ph name="REPLACED_HANDLER_TITLE" /> sijaan.</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Tarkentaa kosketuseleen sijaintia ja kompensoi kosketuksen epätarkkuutta hiireen verrattuna.</translation> +<translation id="8741995161408053644">Google-tililläsi voi olla muita selaushistoriatietoja osoitteessa <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Näytä laajennetut syöttöasetukset hyllyssä</translation> <translation id="874420130893181774">Perinteinen pinyin-syöttötapa</translation> <translation id="8744525654891896746">Valitse avatar tälle valvotulle käyttäjälle</translation> @@ -5218,6 +5254,7 @@ <translation id="8757640015637159332">Aloita julkinen istunto</translation> <translation id="8757742102600829832">Valitse Chromebox, johon haluat yhdistää</translation> <translation id="8757803915342932642">Google Cloud Devices -laite</translation> +<translation id="8758895886513993540">Tämä merkintä hallinnoi, voivatko käyttäjät valita välilehden työpöydän jakamista varten.</translation> <translation id="8759408218731716181">Useisiin tileihin kirjautumista ei sallita</translation> <translation id="8759753423332885148">Lisätietoja</translation> <translation id="8761567432415473239">Google-selaussuoja <ph name="BEGIN_LINK" />löysi hiljattain haitallisia ohjelmia<ph name="END_LINK" /> sivustolta <ph name="SITE" />.</translation> @@ -5428,6 +5465,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-hiiri yhdistetty</translation> <translation id="9076523132036239772">Sähköpostiosoitettasi tai salasanaasi ei voi vahvistaa. Muodosta ensin verkkoyhteys.</translation> +<translation id="9077132661879924646">Poistaa käytöstä yhdistetyn mediaympäristön Androidilla</translation> <translation id="907841381057066561">Väliaikaisen zip-tiedoston luominen pakkauksen aikana epäonnistui.</translation> <translation id="9083147368019416919">Rekisteröinnin peruuttaminen epäonnistui</translation> <translation id="9084064520949870008">Avaa ikkunassa</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index 360064e..1de8b72 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -564,7 +564,6 @@ <translation id="1783075131180517613">Mangyaring i-update ang iyong passphrase ng pag-sync.</translation> <translation id="1788636309517085411">Gamitin ang default</translation> <translation id="1789575671122666129">Mga Popup</translation> -<translation id="1790550373387225389">Pumasok sa Mode na Presentation</translation> <translation id="1792705092719258158">I-enable ang mirrored screen mode.</translation> <translation id="1793119619663054394">Sigurado ka bang gusto mong alisin si "<ph name="PROFILE_NAME" />" at lahat ng nauugnay na data ng Chrome mula sa computer na ito? Hindi na ito maa-undo.</translation> <translation id="179767530217573436">ang nakaraang 4 na linggo</translation> @@ -1665,7 +1664,6 @@ <translation id="3324301154597925148">Ito Ba ang Inaasahan Mong Pahina sa Paghahanap?</translation> <translation id="3324684065575061611">(Di-pinagana ng patakaran ng enterprise)</translation> <translation id="3326821416087822643">Sini-zip ang <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Lumabas sa Mode na Presentation</translation> <translation id="3330686263988132416">WebRTC Stun origin header</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">I-enable ang mirrored screen mode. Binabaligtad ng mode na ito ang larawan sa screen nang pa-horizontal.</translation> @@ -1921,7 +1919,6 @@ <translation id="367645871420407123">iwanang blangko kung gusto mong itakda ang root password sa default na value ng pansubok na larawan</translation> <translation id="3678156199662914018">Extension: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltese keyboard</translation> -<translation id="3680173818488851340">Mga iframe na mababa ang priyoridad.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> Kahilingan sa Pagbabahagi ng Screen</translation> <translation id="3685122418104378273">Naka-disable ang Google Drive bilang default, kapag gumagamit ng mobile data.</translation> <translation id="3685387984467886507">Tandaan ang mga pasya na magpatuloy sa mga error sa SSL sa loob ng tinukoy na haba ng panahon.</translation> @@ -3876,7 +3873,6 @@ <translation id="6662016084451426657">Error sa Pag-sync: Mangyaring makipag-ugnay sa administrator upang paganahin ang pag-sync.</translation> <translation id="6663792236418322902">Kakailanganin ang pipiliin mong password upang ibalik ang file na ito sa ibang pagkakataon. Pakitala ito sa isang ligtas na lokasyon.</translation> <translation id="6664237456442406323">Sa kasamaang-palad, na-configure ang iyong computer gamit ang isang hardware ID na mali ang pagkakabuo. Pinipigilan nitong mag-update ang Chrome OS upang magkaroon ng mga pinakabagong pag-aayos sa seguridad at <ph name="BEGIN_BOLD" />maaaring mawalan ng proteksyon laban sa mga nakakahamak na pag-atake<ph name="END_BOLD" /> ang iyong computer.</translation> -<translation id="666541661050183336">Binabawasan ang priyoridad sa load ng mga mapagkukunan ng iframe.</translation> <translation id="6666647326143344290">gamit ang iyong Google Account</translation> <translation id="6675665718701918026">May nakakonektang pointing device</translation> <translation id="6677037229676347494">"<ph name="EXPECTED_ID" />" ang inaasahang ID, ngunit "<ph name="NEW_ID" />" ang ID.</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 7baa9cf6..df27f15 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Maj</translation> <translation id="1697068104427956555">Sélectionner un carré dans l'image</translation> <translation id="1697532407822776718">Vous êtes prêt !</translation> +<translation id="1697988819212986149">Affiche une icône Google à côté des éléments de menu contextuel fournis par Google.</translation> <translation id="1699274548822076330">À utiliser avec le drapeau "trace-upload-url". AVERTISSEMENT : En cas d'activation, Chrome enregistre les données de performances de chaque session de navigation et les transfère vers l'URL spécifiée par le drapeau "trace-upload-url". La trace peut inclure des informations personnelles, telles que les titres et les URL des sites Web que vous consultez.</translation> <translation id="1699395855685456105">Version du matériel :</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Mettre à jour votre phrase secrète de synchronisation</translation> <translation id="1788636309517085411">Utiliser les valeurs par défaut</translation> <translation id="1789575671122666129">Fenêtres pop-up</translation> -<translation id="1790550373387225389">Activer le mode Présentation</translation> <translation id="1792705092719258158">Activer le mode d'écran de mise en miroir</translation> <translation id="1793119619663054394">Voulez-vous vraiment supprimer le profil "<ph name="PROFILE_NAME" />" et toutes les données Chrome associées de cet ordinateur ? Il est impossible d'annuler cette action.</translation> <translation id="179767530217573436">des 4 dernières semaines</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Cette option permet de modifier les paramètres spécifiques à votre appareil et aux périphériques.</translation> <translation id="2673135533890720193">Consulter votre historique de navigation</translation> <translation id="2673589024369449924">Créer un raccourci sur le Bureau pour cet utilisateur</translation> +<translation id="2675358154061544447">Fonctionnalité hautement expérimentale de rendu des cadres iFrame inter-sites dans des processus distincts. Si ce mode est activé, seuls les documents venant d'un même site Web partageront le même processus du moteur de rendu.</translation> <translation id="2676946222714718093">Lecture en cours sur</translation> <translation id="2678063897982469759">Réactiver</translation> <translation id="2678246812096664977">Tous les plug-ins</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">Méthode de saisie automatique utilisée par le gestionnaire de mots de passe dans le cas des identifiants de synchronisation</translation> <translation id="29611076221683977">Les individus malveillants actuellement à l'œuvre sur le site <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> pourraient tenter d'installer des programmes dangereux sur votre Mac, de manière à récupérer vos informations (par exemple des photos, des mots de passe, des messages et des numéros de carte de paiement) sans votre autorisation, ou à les supprimer.</translation> <translation id="2961695502793809356">Cliquer pour avancer, maintenir pour voir l'historique</translation> +<translation id="296216853343927883">Affichage de la marque Google dans le menu contextuel.</translation> <translation id="2963151496262057773">Le plug-in "<ph name="PLUGIN_NAME" />" ne répond pas. Voulez-vous l'interrompre ?</translation> <translation id="2963783323012015985">Clavier turc</translation> <translation id="2964193600955408481">Désactiver le réseau Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Faites un clic droit sur le bouton ci-dessus pour afficher d'autres utilisateurs.</translation> <translation id="3026050830483105579">Tout est là.</translation> <translation id="302620147503052030">Afficher le bouton</translation> +<translation id="302781076327338683">Actualiser en ignorant le cache</translation> +<translation id="3030243755303701754">Un utilisateur supervisé peut naviguer sur le Web sous votre contrôle. En tant que gestionnaire d'un tel utilisateur dans Chrome, vous pouvez : + + • autoriser ou interdire certains sites Web, + • consulter les sites Web visités par l'utilisateur supervisé, et + • gérer d'autres paramètres. + +La création d'un utilisateur supervisé n'entraîne pas la création d'un compte Google. Chrome Sync ne permettra pas à cet utilisateur de retrouver ses favoris, son historique de navigation et ses autres préférences sur d'autres appareils. Une fois que vous avez créé un nouvel utilisateur supervisé, vous pouvez modifier les paramètres le concernant à tout moment, à partir de n'importe quel appareil sur <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Pour en savoir plus, consultez notre <ph name="BEGIN_LINK" />Centre d'aide<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Sélectionnez les éléments à importer :</translation> <translation id="3033332627063280038">Activer l'implémentation expérimentale de la directive "Cache-Control: stale-while-revalidate" (elle permet aux serveurs d'exiger la revalidation de certaines ressources en arrière-plan pour optimiser la latence)</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">Est-ce la page de recherche que vous attendiez ?</translation> <translation id="3324684065575061611">(Désactivé par une stratégie d'entreprise)</translation> <translation id="3326821416087822643">Compression du fichier <ph name="FILE_NAME" /> en cours…</translation> -<translation id="3330206034087160972">Quitter le mode Présentation</translation> <translation id="3330686263988132416">En-tête d'origine des messages STUN WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Active le mode d'écran de mise en miroir. Ce mode retourne l'image de l'écran horizontalement.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Récupérer le fichier malveillant</translation> <translation id="3394150261239285340"><ph name="HOST" /> veut utiliser votre appareil photo et votre micro.</translation> <translation id="3394279550557729862">Activer l'utilisation des notifications toast et du centre de notifications natifs sur les plates-formes pour lesquelles ils dont disponibles.</translation> +<translation id="3394862755749546286">Désactive le pipeline unifié (Android et bureau) pour les médias sur Android.</translation> <translation id="3396331542604645348">L'imprimante sélectionnée n'est pas disponible ou n'est pas installée correctement. Veuillez vérifier votre imprimante ou en sélectionner une autre.</translation> <translation id="3399597614303179694">Clavier macédonien</translation> <translation id="3401130144947259741">Si cette option est activée, les événements de suivi sont exportés vers Event Tracing for Windows (ETW). Ils peuvent ensuite être capturés par des outils comme UIForETW ou Xperf.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">N'indiquez rien si vous voulez définir le mot de passe racine sur la valeur d'image test par défaut.</translation> <translation id="3678156199662914018">Extension : <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Clavier maltais</translation> -<translation id="3680173818488851340">Cadres iFrame de basse priorité</translation> <translation id="3683524264665795342">Partage de l'écran demandé par <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Par défaut, la synchronisation Google Drive est désactivée lors de l'utilisation des données mobiles.</translation> <translation id="3685387984467886507">Mémoriser les décisions d'ignorer les erreurs SSL pour une période définie</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> va s'afficher dans la console d'administration.</translation> <translation id="3741243925913727067">Sauvegardez les photos et les vidéos de votre périphérique multimédia sur Google Drive.</translation> <translation id="3743492083222969745">Activer/désactiver l'option de saisie gestuelle sur la page des paramètres du clavier virtuel.</translation> +<translation id="3744111561329211289">Synchronisation en arrière-plan</translation> <translation id="3749289110408117711">Nom du fichier</translation> <translation id="3751427701788899101">Connexion perdue</translation> <translation id="3751522270321808809">Ce site pourrait tenter de récupérer vos informations, telles que vos mots de passe, messages ou numéros de cartes de paiement.</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">Se connecter avec un autre compte</translation> <translation id="4219614746733932747">Si cette option est activée, Blink utilise son mécanisme de zoom pour adapter le contenu dans le cadre du facteur d'adaptation de l'appareil.</translation> <translation id="4220865787605972627">Cette option autorise l'étalonnage de la couleur de l'écran, si ce dernier est compatible avec cette fonctionnalité.</translation> +<translation id="4232692576734035989">Mode de fonctionnement hautement expérimental où les cadres iFrame inter-sites sont conservés dans des processus distincts du document principal. Si ce mode est activé, les cadres iFrame provenant de différents sites tiers pourront partager un processus.</translation> <translation id="4235200303672858594">Plein écran</translation> <translation id="4235813040357936597">Ajouter un compte pour <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ne peut pas être affiché dans cette langue.</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">Supprimer la photo</translation> <translation id="4509345063551561634">Emplacement :</translation> <translation id="4514542542275172126">Configurer un nouvel utilisateur supervisé</translation> +<translation id="4514914692061505365">Forcer l'utilisation du traducteur rapide Subzero de PNaCl pour tous les fichiers .pexe.</translation> <translation id="4518677423782794009">Chrome plante, affiche des pages de démarrage inhabituelles, des barres d'outils ou des annonces inattendues dont vous n'arrivez pas à vous débarrasser, ou votre confort de navigation est modifié de toute autre manière ? Vous pourrez peut-être résoudre le problème en exécutant l'outil de nettoyage Chrome.</translation> <translation id="452039078290142656">appareils inconnus de <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Détails</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">Seul l'administrateur (<ph name="CUSTODIAN_NAME" />) est autorisé à modifier les applications et les extensions.</translation> <translation id="4601242977939794209">Conversion au format EMF</translation> <translation id="4602466770786743961">Toujours autoriser <ph name="HOST" /> à accéder à votre caméra et à votre micro</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Non connecté à Internet.</translation> <translation id="4608500690299898628">&Rechercher...</translation> <translation id="4610637590575890427">Vouliez-vous accéder à <ph name="SITE" /> ?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">Échec de la connexion. Veuillez vous connecter à Internet, puis réessayer.</translation> <translation id="5063180925553000800">Nouveau code PIN :</translation> <translation id="5067867186035333991">Demander si l'accès à votre micro est requis sur <ph name="HOST" /></translation> +<translation id="5068918910148307423">Ne pas autoriser les sites fermés récemment à terminer l'envoi et la réception de données</translation> <translation id="507075806566596212">Vous allez enregistrer ce <ph name="DEVICE_TYPE" /> auprès de Google afin d'activer la possibilité de localiser l'appareil, de le verrouiller et d'effacer les données qu'il contient à distance. Cette opération requiert un redémarrage. Souhaitez-vous continuer ?</translation> <translation id="5072836811783999860">Afficher les favoris gérés</translation> <translation id="5074318175948309511">Vous devrez peut-être actualiser cette page pour que les nouveaux paramètres soient appliqués.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">Retrouver le texte précédent</translation> <translation id="5228076606934445476">Une erreur s'est produite sur cet appareil. Pour résoudre ce problème, veuillez redémarrer votre appareil, puis réessayer.</translation> <translation id="5228962187251412618">Vérification en ligne uniquement</translation> +<translation id="5229622432348746578">Désactiver l'audio lors du partage du Bureau</translation> <translation id="5230516054153933099">Fenêtre</translation> <translation id="5232178406098309195">Lorsque vous utilisez des commandes d'activation audio, telles que "Ok Google", ou appuyez sur l'icône du micro, vos activités vocales et audio privées stockent des données vocales et du contenu audio dans votre compte. Un enregistrement du contenu vocal/audio est stocké, plus les quelques secondes qui précèdent.</translation> <translation id="523299859570409035">Exceptions liées aux notifications</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">Wi-Fi actif en veille</translation> <translation id="5558129378926964177">Zoom &avant</translation> <translation id="556042886152191864">Bouton</translation> +<translation id="5562781907504170924">Cet onglet est associé à un appareil Bluetooth.</translation> <translation id="5565871407246142825">Cartes de paiement</translation> <translation id="5567989639534621706">Caches des applications</translation> <translation id="5568069709869097550">Impossible de se connecter</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">Choisir les expressions en arrière-plan, sans déplacer le pointeur</translation> <translation id="5804241973901381774">Autorisations</translation> <translation id="580571955903695899">Trier par nom</translation> +<translation id="5808982448801399019">Échec de l'autorisation</translation> <translation id="580961539202306967">Me demander lorsqu'un site requiert l'envoi de messages Push (recommandé)</translation> <translation id="5815645614496570556">Adresse X.400</translation> <translation id="5817397429773072584">Chinois traditionnel</translation> @@ -3580,6 +3599,7 @@ <translation id="6243774244933267674">Serveur indisponible.</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Mise à jour prête</translation> +<translation id="6248400709929739064">Activer les sous-titres</translation> <translation id="6248988683584659830">Rechercher</translation> <translation id="6251870443722440887">Handles GDI</translation> <translation id="6251889282623539337">Conditions d'utilisation du domaine "<ph name="DOMAIN" />"</translation> @@ -3604,6 +3624,7 @@ <translation id="6277105963844135994">Délai d'expiration du réseau dépassé.</translation> <translation id="6277518330158259200">F&aire une capture d'écran</translation> <translation id="6279183038361895380">Appuyez sur |<ph name="ACCELERATOR" />| pour afficher le curseur.</translation> +<translation id="6280215091796946657">Se connecter avec un autre compte</translation> <translation id="6281743458679673853">Faites en sorte que toutes les API représentent la fenêtre d'affichage de mise en page. De ce fait, les propriétés "window.scroll" seront définies par rapport à la fenêtre d'affichage de mise en page.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nouvelle imprimante sur le réseau}one{Nouvelle imprimante sur le réseau}other{Nouvelles imprimantes sur le réseau}}</translation> <translation id="6285395082104474418">La barre d'état vous indique, entre autres, l'état actuel de votre réseau et de votre batterie.</translation> @@ -3685,6 +3706,9 @@ <translation id="6418160186546245112">Retour à la version précédemment installée de <ph name="IDS_SHORT_PRODUCT_NAME" />…</translation> <translation id="6418481728190846787">Supprimer l'accès à toutes les applications de manière définitive</translation> <translation id="6418505248408153264">Activer l'historique Material Design</translation> +<translation id="6419288379019356534">Cet appareil est géré par <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Veuillez cliquer sur "Suivant" pour poursuivre la connexion à votre <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> compte.</translation> <translation id="6419902127459849040">Europe centrale</translation> <translation id="6420676428473580225">Ajouter au bureau</translation> <translation id="6422329785618833949">Photo retournée.</translation> @@ -3845,7 +3869,6 @@ <translation id="6662016084451426657">Erreur de synchronisation. Veuillez contacter l'administrateur pour activer la synchronisation.</translation> <translation id="6663792236418322902">Le mot de passe choisi vous sera demandé pour restaurer le fichier. Veillez à le conserver en lieu sûr.</translation> <translation id="6664237456442406323">Malheureusement, votre ordinateur est configuré avec un ID matériel incorrect. Cette défaillance empêche l'installation des derniers correctifs de sécurité sur Chrome OS et rend votre ordinateur <ph name="BEGIN_BOLD" />potentiellement vulnérable aux attaques malveillantes<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Réduit la priorité de chargement des ressources iFrame.</translation> <translation id="6666647326143344290">avec votre compte Google</translation> <translation id="6675665718701918026">Dispositif de pointage connecté</translation> <translation id="6677037229676347494">Identifiant "<ph name="NEW_ID" />" reçu au lieu de l'identifiant "<ph name="EXPECTED_ID" />" attendu.</translation> @@ -3938,6 +3961,7 @@ <translation id="6825883775269213504">Russe</translation> <translation id="6827236167376090743">Cette vidéo va être lue en boucle.</translation> <translation id="6828153365543658583">Autoriser uniquement les utilisateurs suivants à se connecter :</translation> +<translation id="6828434191343384461">Les données sélectionnées ont été supprimées de Chrome et des appareils synchronisés. Votre compte Google conserve peut-être d'autres formes d'historique de navigation sur la page <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Échec de la configuration des mises à jour automatiques pour tous les utilisateurs (erreur d'exécution avant la période de diffusion : <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Obtenir de l'aide pour votre <ph name="DEVICE_TYPE" /></translation> <translation id="6829270497922309893">Inscrivez-vous à votre organisation</translation> @@ -4018,6 +4042,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Périphérique</translation> +<translation id="6969104364835835175">Forcer l'utilisation de Subzero de PNaCl</translation> <translation id="6970230597523682626">Bulgare</translation> <translation id="6970480684834282392">Type de démarrage</translation> <translation id="6970856801391541997">Imprimer des pages spécifiques</translation> @@ -4100,10 +4125,12 @@ <translation id="7057058088140140610">Cartes de paiement et adresses utilisant Google Payments</translation> <translation id="7059858479264779982">Lancement automatique</translation> <translation id="7061692898138851896">Enregistrer automatiquement les mots de passe</translation> +<translation id="7062222374113411376">Autoriser les sites fermés récemment à terminer l'envoi et la réception de données (recommandé)</translation> <translation id="7063129466199351735">Traitement des raccourcis en cours…</translation> <translation id="7065223852455347715">Vous ne pouvez pas inscrire cet appareil en vue de le gérer en tant qu'entreprise, car il est verrouillé dans un mode qui ne permet pas une telle configuration. Pour inscrire l'appareil, veuillez au préalable procéder à une restauration.</translation> <translation id="7065534935986314333">À propos du système</translation> <translation id="7066944511817949584">Impossible de se connecter à "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Ne plus afficher</translation> <translation id="7070804685954057874">Entrée directe</translation> <translation id="7072010813301522126">Nom du raccourci</translation> <translation id="7072025625456903686">Tout autoriser ou personnaliser</translation> @@ -4376,6 +4403,7 @@ <translation id="7489605380874780575">Vérifier l'éligibilité</translation> <translation id="749028671485790643">Personne <ph name="VALUE" /></translation> <translation id="7491962110804786152">tabulation</translation> +<translation id="7493386493263658176">L'extension <ph name="EXTENSION_NAME" /> peut récupérer tout le texte que vous saisissez, y compris des données personnelles telles que des mots de passe et des numéros de carte de paiement. Souhaitez-vous utiliser cette extension ?</translation> <translation id="7495778526395737099">Vous avez oublié votre ancien mot de passe ?</translation> <translation id="7503191893372251637">Type de certificat Netscape</translation> <translation id="7503821294401948377">Impossible de charger l'icône "<ph name="ICON" />" d'action du navigateur.</translation> @@ -4427,6 +4455,7 @@ <translation id="756445078718366910">Ouvrir une fenêtre du navigateur</translation> <translation id="7564847347806291057">Arrêter le processus</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Données de Chrome effacées</translation> <translation id="7568790562536448087">Mise à jour en cours</translation> <translation id="7573172247376861652">Charge de la batterie</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4556,6 +4585,7 @@ <translation id="7786207843293321886">Fermer la session d'invité</translation> <translation id="7786889348652477777">&Actualiser l'application</translation> <translation id="7787129790495067395">Vous utilisez actuellement une phrase secrète. Si vous l'oubliez, vous pouvez réinitialiser la synchronisation afin de supprimer vos données des serveurs Google à l'aide de Google Dashboard.</translation> +<translation id="7787308148023287649">Afficher sur un autre écran</translation> <translation id="7788080748068240085">Pour enregistrer le fichier <ph name="FILE_NAME" /> hors connexion, vous devez libérer <ph name="TOTAL_FILE_SIZE" /> d'espace supplémentaire :<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Annulez l'épinglage des fichiers auxquels vous n'avez plus besoin d'accéder hors connexion.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Supprimez les fichiers du dossier "Téléchargements".<ph name="MARKUP_5" /></translation> @@ -4624,6 +4654,7 @@ <translation id="7878999881405658917">Nous avons envoyé une notification à ce téléphone. Grâce au Bluetooth, votre téléphone peut maintenir votre <ph name="DEVICE_TYPE" /> déverrouillé dans un rayon de plus de 10 mètres. Si cela risque de poser problème, vous pouvez <a>désactiver provisoirement cette fonctionnalité</a>.</translation> <translation id="7879478708475862060">Suivre le mode de saisie</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" permet d'ajouter les applications et les extensions suivantes :</translation> +<translation id="7881969471599061635">Désactiver les sous-titres</translation> <translation id="7884988936047469945">Fonctionnalités d'accessibilité expérimentales</translation> <translation id="7885253890047913815">Emplacements de destination récents</translation> <translation id="7885283703487484916">très court</translation> @@ -4988,6 +5019,7 @@ <translation id="839736845446313156">S'inscrire</translation> <translation id="8398790343843005537">Rechercher votre téléphone</translation> <translation id="8398877366907290961">Poursuivre quand même</translation> +<translation id="8399276228600040370">Connectez-vous avec votre compte enregistré dans <ph name="PASSWORD_MANAGER_BRAND" />.</translation> <translation id="8401363965527883709">Case décochée</translation> <translation id="8408402540408758445">Procéder à la prélecture des résultats de la recherche</translation> <translation id="8410073653152358832">Utiliser ce téléphone</translation> @@ -5074,6 +5106,7 @@ <translation id="8545211332741562162">Permettre aux pages Web d'utiliser les fonctionnalités expérimentales JavaScript</translation> <translation id="8545575359873600875">Impossible de vérifier votre mot de passe. Il est possible que l'administrateur de cet utilisateur supervisé ait récemment modifié le mot de passe. Si c'est le cas, le nouveau mot de passe sera appliqué lors de la prochaine connexion. Essayez de vous connecter à l'aide de votre ancien mot de passe.</translation> <translation id="8546306075665861288">Cache des images</translation> +<translation id="854653344619327455">Lorsque cet indicateur est activé, la fenêtre de l'outil de sélection du partage du Bureau ne permet pas à l'utilisateur de choisir s'il souhaite partager le contenu audio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Caractère</translation> <translation id="855081842937141170">Épingler l'onglet</translation> @@ -5104,6 +5137,7 @@ <translation id="8589311641140863898">API des extensions expérimentales</translation> <translation id="8590375307970699841">Configurer les mises à jour automatiques</translation> <translation id="8592071947729879125">Limiter les autorisations iFrame</translation> +<translation id="8592125506633137593">Isolation du document principal</translation> <translation id="8594787581355215556">Connecté en tant que <ph name="USER_EMAIL_ADDRESS" />. Gérez vos données synchronisées sur <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Fichiers personnalisés</translation> <translation id="8596785155158796745">Le micro n'est pas disponible actuellement. <ph name="BEGIN_LINK" />Gérer le micro<ph name="END_LINK" /></translation> @@ -5176,6 +5210,7 @@ <translation id="8688579245973331962">Vous ne trouvez pas votre nom ?</translation> <translation id="8688644143607459122">En cliquant sur "Continuer", vous acceptez d'utiliser Google Payments. Afin de vous protéger contre la fraude, les informations relatives à votre ordinateur, y compris sa localisation, sont partagées avec Google Payments.</translation> <translation id="8689102680909215706">L'extension "<ph name="EXTENSION_NAME" />" a été installée à distance.</translation> +<translation id="868926756781121513">Partage du Bureau à partir d’un onglet</translation> <translation id="8689341121182997459">Date d'expiration :</translation> <translation id="8690754533598178758">Les exceptions Adobe Flash Player utilisées pour le micro sont différentes.</translation> <translation id="8691686986795184760">(Activé par une stratégie d'entreprise)</translation> @@ -5219,6 +5254,7 @@ <translation id="8737685506611670901">Ouvrir les liens "<ph name="PROTOCOL" />" à la place de "<ph name="REPLACED_HANDLER_TITLE" />"</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Cette option permet d'affiner la position des gestes pour compenser le fait qu'ils sont moins précis, par rapport à la souris.</translation> +<translation id="8741995161408053644">Votre compte Google conserve peut- être d'autres formes d'historique de navigation sur la page <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Afficher les options de saisie développées sur l'étagère.</translation> <translation id="874420130893181774">Mode de saisie pinyin traditionnel</translation> <translation id="8744525654891896746">Sélectionner un avatar pour cet utilisateur supervisé</translation> @@ -5232,6 +5268,7 @@ <translation id="8757640015637159332">Ouvrir une session publique</translation> <translation id="8757742102600829832">Sélectionnez une Chromebox à laquelle vous connecter</translation> <translation id="8757803915342932642">Appareil Google Cloud Devices</translation> +<translation id="8758895886513993540">Cet indicateur détermine si les utilisateurs peuvent sélectionner un onglet lors du partage du Bureau.</translation> <translation id="8759408218731716181">Impossible de configurer la connexion multicompte.</translation> <translation id="8759753423332885148">En savoir plus</translation> <translation id="8761567432415473239">La fonctionnalité de navigation sécurisée a récemment permis de <ph name="BEGIN_LINK" />détecter des programmes dangereux<ph name="END_LINK" /> sur le site <ph name="SITE" />.</translation> @@ -5442,6 +5479,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Souris USB connectée.</translation> <translation id="9076523132036239772">Adresse e-mail ou mot de passe incorrect. Essayez tout d'abord de vous connecter à un réseau.</translation> +<translation id="9077132661879924646">Désactive le pipeline unifié pour les médias sur Android.</translation> <translation id="907841381057066561">Échec de création du fichier zip temporaire lors de la création du pack</translation> <translation id="9083147368019416919">Échec de la désinscription</translation> <translation id="9084064520949870008">Ouvrir dans une fenêtre</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index ffda277f..299ff16 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -498,6 +498,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">છબીના વર્ગ ક્ષેત્રને પસંદ કરો.</translation> <translation id="1697532407822776718">તમારું બધું સેટ છે!</translation> +<translation id="1697988819212986149">Google સેવાઓ દ્વારા સંચાલિત સંદર્ભ મેનૂ આઇટમ્સની બાજુમાં એક Google આઇકન બતાવે છે.</translation> <translation id="1699274548822076330">આનો ઉપયોગ ટ્રેસ-અપલોડ-url ફ્લેગના જોડાણમાં કરવામાં આવે છે. ચેતવણી: જ્યારે સક્ષમ કરવામાં આવે, ત્યારે Chrome પ્રત્યેક નેવિગેશન માટે પ્રદર્શન ડેટાને રેકોર્ડ કરશે અને તેને ટ્રેસ-અપલોડ-url ફ્લેગ દ્વારા ઉલેખિત URL પર અપલોડ કરશે. ટ્રેસમાં તમે મુલાકાત લો છો તે વેબસાઇટ્સના URL અને શીર્ષકો જેવી વ્યક્તિગત રૂપે ઓળખવા યોગ્ય માહિતી (PII) શામેલ હોઈ શકે છે.</translation> <translation id="1699395855685456105">હાર્ડવેર પુનરાવર્તન:</translation> @@ -558,7 +559,6 @@ <translation id="1783075131180517613">કૃપા કરી તમારા સમન્વયન પાસફ્રેઝને અપડેટ કરો.</translation> <translation id="1788636309517085411">ડિફૉલ્ટનો ઉપયોગ કરો</translation> <translation id="1789575671122666129">પૉપઅપ્સ</translation> -<translation id="1790550373387225389">પ્રસ્તુતિ મોડમાં દાખલ થાઓ </translation> <translation id="1792705092719258158">પ્રતિબિંબિત સ્ક્રીન મોડ સક્ષમ કરો.</translation> <translation id="1793119619663054394">શું તમે ખરેખર આ કમ્પ્યુટર પરથી "<ph name="PROFILE_NAME" />" અને તમામ સંકળાયેલા Chrome ડેટાને દૂર કરવા માગો છો. આ પૂર્વવત્ કરી શકાતું નથી.</translation> <translation id="179767530217573436">છેલ્લા 4 અઠવાડિયા</translation> @@ -1151,6 +1151,7 @@ <translation id="267285457822962309">તમારા ઉપકરણ અને પેરિફેરલ્સથી સંબંધિત સેટિંગ્સ બદલો.</translation> <translation id="2673135533890720193">તમારો બ્રાઉઝિંગ ઇતિહાસ વાંચો</translation> <translation id="2673589024369449924">આ વપરાશકર્તા માટે ડેસ્કટૉપ શોર્ટકટ બનાવો</translation> +<translation id="2675358154061544447">અલગ પ્રક્રિયાઓમાં ક્રોસ-સાઇટ iframes રેન્ડર કરવા માટે ઉચ્ચ પ્રયોગાત્મક સમર્થન. આ મોડમાં, જો દસ્તાવેજો સમાન વેબસાઇટ પરથી હોય માત્ર તો જ તેઓ એક રેન્ડરર પ્રક્રિયા શેર કરશે.</translation> <translation id="2676946222714718093">આ પર ચલાવી રહ્યાં છે</translation> <translation id="2678063897982469759">ફરી સક્ષમ કરો</translation> <translation id="2678246812096664977">તમામ પ્લગ-ઇન્સ</translation> @@ -1377,6 +1378,7 @@ <translation id="2960393411257968125">સમન્વયન ઓળખાણપત્ર માટે સ્વતઃભરણને પાસવર્ડ સંચાલક કેવી રીતે હેન્ડલ કરે છે.</translation> <translation id="29611076221683977">હુમલાખોરો હાલમાં <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> પર છે તે તમારા Mac પર તમારી માહિતી (ઉદાહરણ તરીકે, ફોટા, પાસવર્ડ્સ, સંદેશા અને ક્રેડિટ કાર્ડ્સ) ને ચોરી શકે કે કાઢી નાખે તેવા જોખમી પ્રોગ્રામ્સને ઇન્સ્ટોલ કરવાનો પ્રયાસ કરી શકે છે.</translation> <translation id="2961695502793809356">આગળ જવા માટે ક્લિક કરો, ઇતિહાસ જોવા માટે હોલ્ડ કરો</translation> +<translation id="296216853343927883">સંદર્ભ મેનૂમાં Google બ્રાંડિંગ</translation> <translation id="2963151496262057773">નીચેના પ્લગિન પ્રતિભાવવિહીન છે: <ph name="PLUGIN_NAME" />તમે તેને રોકવા માંગશો?</translation> <translation id="2963783323012015985">ટર્કિશ કીબોર્ડ</translation> <translation id="2964193600955408481">Wi-Fi ને અક્ષમ કરો</translation> @@ -1426,6 +1428,16 @@ <translation id="3025729795978504041">અન્ય લોકોને જોવા માટે ઉપરના બટન પર રાઇટ-ક્લિક કરો.</translation> <translation id="3026050830483105579">તે બધું અહીં છે.</translation> <translation id="302620147503052030">બતાવો બટન</translation> +<translation id="302781076327338683">બાયપાસ થતી કૅશ ફરીથી લોડ કરો</translation> +<translation id="3030243755303701754">એક નિરીક્ષિત વપરાશકર્તા તમારા માર્ગદર્શન હેઠળ વેબનું અન્વેષણ કરી શકે છે. Chrome માં નિરીક્ષિત વપરાશકર્તાના સંચાલક તરીકે, તમે: + + • અમુક વેબસાઇટ્સને મંજૂર અથવા પ્રતિબંધિત કરી શકો છો, + • નિરીક્ષિત વપરાશકર્તાએ મુલાકાત લીધેલી વેબસાઇટ્સની સમીક્ષા કરી શકો છો, અને + • અન્ય સેટિંગ્સનું સંચાલન કરી શકો છો. + +નિરીક્ષિત વપરાશકર્તા બનાવવાથી Google એકાઉન્ટ બનતું નથી અને તેમના બુકમાર્ક્સ, બ્રાઉઝિંગ ઇતિહાસ અને અન્ય પસંદગીઓ Chrome સમન્વયન સાથેના અન્ય ઉપકરણો પર તેમને અનુસરશે નહીં. તમે એક નવો નિરીક્ષિત વપરાશકર્તા બનાવી લો તે પછી, તમે તેમની સેટિંગ્સને કોઈપણ સમયે, કોઈપણ ઉપકરણ પરથી <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> ખાતેથી સંચાલિત કરી શકો છો. + +વધુ માહિતી માટે, અમારા <ph name="BEGIN_LINK" />સહાય કેન્દ્ર<ph name="END_LINK" />ની મુલાકાત લો.</translation> <translation id="3031417829280473749">એજંટ X</translation> <translation id="3031557471081358569">આયાત કરવા માટે આઇટમ્સ પસંદ કરો:</translation> <translation id="3033332627063280038">કૅશ-કંટ્રોલ: stale-while-revalidate નિર્દેશનું પ્રાયોગિક અમલીકરણ સક્ષમ કરો. આ લેટન્સી સુધારવા પૃષ્ઠભૂમિમાં પુનઃમાન્ય કરીને કેટલાક સંસાધનોને ઉલ્લેખિત કરવાની સર્વર્સને પરવાનગી આપે છે.</translation> @@ -1646,7 +1658,6 @@ <translation id="3324301154597925148">શું આ તમારી અપેક્ષા મુજબનું શોધ પૃષ્ઠ છે?</translation> <translation id="3324684065575061611">(ઉદ્યોગ નીતિ દ્વારા અક્ષમ)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> ને ઝિપ કરી રહ્યું છે...</translation> -<translation id="3330206034087160972">પ્રસ્તુતિ મોડમાંથી બહાર નીકળો</translation> <translation id="3330686263988132416">WebRTC સ્ટન મૂળ હેડર</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">મિરર કરેલ સ્ક્રીન મોડ સક્ષમ કરો. આ મોડ સ્ક્રીન છબીને આડી રીતે ફ્લિપ કરે છે.</translation> @@ -1691,6 +1702,7 @@ <translation id="3392020134425442298">દૂષિત ફાઇલ પુનઃપ્રાપ્ત કરો</translation> <translation id="3394150261239285340"><ph name="HOST" /> તમારા કૅમેરા અને માઇક્રોફોનનો ઉપયોગ કરવાનું ઇચ્છે છે.</translation> <translation id="3394279550557729862">તે પ્લેટફોર્મ્સ પર કે જ્યાં આ ઉપલબ્ધ હોય ત્યાં મૂળ સૂચના ટોસ્ટ્સ અને સૂચના કેન્દ્રને ઉપયોગમાં લેવા માટે સમર્થનને સક્ષમ કરો.</translation> +<translation id="3394862755749546286">Android પર એકીકૃત (Android અને ડેસ્કટૉપ) મીડિયા પાઇપલાઇનને અક્ષમ કરે છે.</translation> <translation id="3396331542604645348">પસંદ કરેલું પ્રિંટર ઉપલબ્ધ નથી અથવા ઠીકથી ઇન્સ્ટોલ કરેલું નથી. તમારા પ્રિંટરને તપાસો અથવા બીજા પ્રિંટરને પસંદ કરી જુઓ.</translation> <translation id="3399597614303179694">મેસેડોનિયન કીબોર્ડ</translation> <translation id="3401130144947259741">જો સક્ષમ હોય, તો ટ્રેસ ઇવેન્ટ્સને Windows માટે ઇવેન્ટ ટ્રેસિંગ (ETW) પર નિકાસ કરવામાં આવશે અને પછી તે UIForETW અથવા Xperf જેવા સાધનો દ્વારા કેપ્ચર કરી શકાય છે.</translation> @@ -1901,7 +1913,6 @@ <translation id="367645871420407123">જો તમે રૂટ પાસવર્ડને ડિફૉલ્ટ પરીક્ષણ છબી મૂલ્ય પર સેટ કરવા માંગતા હો તો ખાલી છોડો</translation> <translation id="3678156199662914018">એક્સ્ટેંશન: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">માલ્ટિઝ કીબોર્ડ</translation> -<translation id="3680173818488851340">ઓછી પ્રાધાન્યતાવાળી iframes.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> સ્ક્રીન શેરિંગ વિનંતી</translation> <translation id="3685122418104378273">મોબાઇલ ડેટાનો ઉપયોગ કરી રહ્યાં હોય ત્યારે, Google ડ્રાઇવ સમન્વયન ડિફોલ્ટ રૂપે અક્ષમ છે.</translation> <translation id="3685387984467886507">સમયની કોઈ ચોક્કસ અવધિ માટે SSL ભૂલો મારફતે આગળ વધવાના નિર્ણયોને યાદ કરો.</translation> @@ -1950,6 +1961,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> હવે Admin Console માં દેખાશે</translation> <translation id="3741243925913727067">Google ડ્રાઇવ પર તમારા મીડિયા ઉપકરણના ફોટા અને વિડિઓઝનો બેક અપ લો.</translation> <translation id="3743492083222969745">વર્ચ્યુઅલ કીબોર્ડ માટે સેટિંગ્સ પૃષ્ઠમાં હાવભાવથી ટાઇપિંગ કરવાનો વિકલ્પ સક્ષમ/અક્ષમ કરો.</translation> +<translation id="3744111561329211289">પૃષ્ઠભૂમિ સમન્વયન</translation> <translation id="3749289110408117711">ફાઇલનું નામ</translation> <translation id="3751427701788899101">કનેક્શન કપાઇ ગયું હતું</translation> <translation id="3751522270321808809">આ સાઇટ તમારી માહિતી (ઉદાહરણો: પાસવર્ડ્સ, સંદેશા અથવા ક્રેડિટ કાર્ડ્સ) ચોરવા માટે તમને છેતરવાનો પ્રયાસ કરી શકે છે.</translation> @@ -2267,6 +2279,7 @@ <translation id="4218259925454408822">બીજા એકાઉન્ટમાં સાઇન ઇન કરો</translation> <translation id="4219614746733932747">જો સક્ષમ કરેલ હોય, તો ઉપકરણ માપ પરિબળ માટે સામગ્રીને માપવા Blink તેની ઝૂમિંગ કાર્યપદ્ધતિનો ઉપયોગ કરે છે.</translation> <translation id="4220865787605972627">ડિસ્પ્લે આ સુવિધાને સમર્થન કરતી હોય તો ડિસ્પ્લેના રંગના માપાંકનને મંજૂરી આપે છે.</translation> +<translation id="4232692576734035989">ઉચ્ચ પ્રાયોગિક કામગીરી મોડ કે જ્યાં ટોચના દસ્તાવેજોમાંથી ક્રોસ-સાઇટ iframes ને અલગ પ્રક્રિયામાં રાખવામાં આવે છે. આ મોડમાં, અલગ તૃતિય પક્ષ સાઇટ્સમાંથી iframes ને પ્રક્રિયા શેર કરવાની પરવાનગી આપવામાં આવશે.</translation> <translation id="4235200303672858594">સમગ્ર સ્ક્રીન</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> માટે એકાઉન્ટ ઉમેરો</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" />ને આ ભાષામાં પ્રદર્શિત કરી શકાતું નથી.</translation> @@ -2432,6 +2445,7 @@ <translation id="4509017836361568632">ફોટો કાઢી નાખો</translation> <translation id="4509345063551561634">સ્થાન:</translation> <translation id="4514542542275172126">નવો નિરીક્ષિત વપરાશકર્તા સેટ કરો</translation> +<translation id="4514914692061505365">તમામ pexe ફાઇલો માટે PNaCl ના ઝડપી Subzero અનુવાદનો ઉપયોગ કરવાની ફરજ પાડે છે.</translation> <translation id="4518677423782794009">શું Chrome અસામાન્ય સ્ટાર્ટઅપ પૃષ્ઠો, ટુલબાર્સ અથવા જેનાથી તમે છૂટકારો મેળવી શકતાં નથી તેવી અનપેક્ષિત જાહેરાતો દર્શાવીને અથવા અન્યથા તમારા બ્રાઉઝિંગ અનુભવમાં ફેરફાર કરીને ક્રેશ થઇ રહ્યું છે? તમે Chrome સફાઈ સાઘન ચલાવીને આ સમસ્યાને ઠીક કરવામાં સમર્થ થઈ શકો છો.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> થી અજાણ્યા ઉપકરણો</translation> <translation id="4522570452068850558">વિગતો</translation> @@ -2480,6 +2494,7 @@ <translation id="4595560905247879544">ઍપ્લિકેશન્સ અને એક્સટેન્શન્સને માત્ર સંચાલક (<ph name="CUSTODIAN_NAME" />) દ્વારા જ સંશોધિત કરી શકાય છે.</translation> <translation id="4601242977939794209">EMF કન્વર્ટર</translation> <translation id="4602466770786743961">તમારા કૅમેરા અને માઇક્રોફોનને ઍક્સેસ કરવા માટે હંમેશાં <ph name="HOST" /> ને મંજૂરી આપો</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">ઇન્ટરનેટ કનેક્ટ નથી</translation> <translation id="4608500690299898628">&શોધો...</translation> <translation id="4610637590575890427">શું તમારી ઈચ્છા <ph name="SITE" /> પર જવાની હતી?</translation> @@ -2783,6 +2798,7 @@ <translation id="5062930723426326933">સાઇન-ઇન નિષ્ફળ થયું, કૃપા કરીને ઇન્ટરનેટથી કનેક્ટ કરો અને ફરી પ્રયાસ કરો.</translation> <translation id="5063180925553000800">નવું PIN:</translation> <translation id="5067867186035333991"><ph name="HOST" /> તમારા માઇક્રોફોનને ઍક્સેસ કરવા માંગે છે કે કેમ તે પૂછો</translation> +<translation id="5068918910148307423">ડેટા મોકલવાનું અને પ્રાપ્ત કરવાનું સમાપ્ત કરવા માટે તાજેતરમાં બંધ કરેલ સાઇટ્સને મંજૂરી આપશો નહીં</translation> <translation id="507075806566596212">ઉપકરણને રિમોટલી સ્થિત કરવા, વાઇપ કરવા અને લૉક કરવાની ક્ષમતાને સક્ષમ કરવા માટે Google સાથે આ <ph name="DEVICE_TYPE" /> ની નોંધણી કરવાના છો. આને રીબૂટની જરૂર પડશે. શું તમે ચાલુ રાખવા માગો છો?</translation> <translation id="5072836811783999860">સંચાલિત બુકમાર્ક્સ દર્શાવો</translation> <translation id="5074318175948309511">નવી સેટિંગ્સ પ્રભાવમાં આવે તે પહેલાં આ પૃષ્ઠને ફરીથી લોડ કરવાની જરૂર પડી શકે છે.</translation> @@ -2890,6 +2906,7 @@ <translation id="5227808808023563348">પાછલો ટેક્સ્ટ શોધો</translation> <translation id="5228076606934445476">ઉપકરણમાં કંઈક ખોટું થયું છે. આ ભૂલથી પુનઃપ્રાપ્ત કરવા માટે તમારે ઉપકરણને રીબૂટ કરી અને ફરી પ્રયાસ કરવાની જરૂર પડશે.</translation> <translation id="5228962187251412618">માત્ર ઓનલાઇન તપાસ</translation> +<translation id="5229622432348746578">ડેસ્કટૉપ શેર માટે ઑડિઓ અક્ષમ કરો</translation> <translation id="5230516054153933099">વિંડો</translation> <translation id="5232178406098309195">જ્યારે તમે "Ok Google" અથવા માઇક્રોફોન આયકન ટચ કરવા જેવા ઑડિઓ સક્રિયકરણ આદેશોનો ઉપયોગ કરો, ત્યારે તમારી ગોપનીય વૉઇસ અને ઑડિઓ પ્રવૃત્તિ તમારા એકાઉન્ટ માટે કેટલોક અવાજ અને અન્ય ઑડિઓ સંગ્રહે છે. નીચેના અવાજ/ઑડિઓનું એક રેકોર્ડિગ, ઉપરાંત થોડી સેકન્ડ્સ પહેલાની, સંગ્રહવામાં આવશે.</translation> <translation id="523299859570409035">સૂચનો અપવાદો</translation> @@ -3144,6 +3161,7 @@ <translation id="5557991081552967863">નિષ્ક્રિયતા દરમિયાન Wi-Fi ચાલુ રાખો</translation> <translation id="5558129378926964177">Zoom &In</translation> <translation id="556042886152191864">બટન</translation> +<translation id="5562781907504170924">આ ટૅબ Bluetooth ઉપકરણ સાથે કનેક્ટ થયેલ છે.</translation> <translation id="5565871407246142825">ક્રેડિટ કાર્ડ્સ</translation> <translation id="5567989639534621706">એપ્લિકેશન કૅશેસ</translation> <translation id="5568069709869097550">સાઇન ઇન કરી શકાતું નથી</translation> @@ -3304,6 +3322,7 @@ <translation id="5803531701633845775">કર્સરને ખસેડ્યા વગર, પાછળથી શબ્દસમૂહ પસંદ કરો</translation> <translation id="5804241973901381774">પરવાનગીઓ</translation> <translation id="580571955903695899">શીર્ષકથી પુનઃક્રમાંકિત કરો</translation> +<translation id="5808982448801399019">પ્રમાણીકરણ નિષ્ફળ થયું</translation> <translation id="580961539202306967">જ્યારે સાઇટ મને પુશ સંદેશાઓ મોકલવાનું ઇચ્છે ત્યારે મને પૂછો (ભલામણ કરેલ)</translation> <translation id="5815645614496570556">X.400 સરનામું</translation> <translation id="5817397429773072584">પરંપરાગત ચાઇનીઝ</translation> @@ -3573,6 +3592,7 @@ <translation id="6243774244933267674">સર્વર અનુપલબ્ધ</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">અપડેટ તૈયાર</translation> +<translation id="6248400709929739064">ઉપશીર્ષકો સક્ષમ કરો</translation> <translation id="6248988683584659830">શોધ સેટિંગ્સ</translation> <translation id="6251870443722440887">GDI હેન્ડલ્સ</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> સેવાની શરતો</translation> @@ -3597,6 +3617,7 @@ <translation id="6277105963844135994">નેટવર્ક ટાઇમઆઉટ</translation> <translation id="6277518330158259200">સ્ક્રીનશોટ &લો</translation> <translation id="6279183038361895380">તમારા કર્સરને બતાવવા માટે |<ph name="ACCELERATOR" />| દબાવો</translation> +<translation id="6280215091796946657">એક અલગ એકાઉન્ટ સાથે સાઇન ઇન કરો</translation> <translation id="6281743458679673853">તમામ API, લેઆઉટ વ્યૂપોર્ટને પ્રતિબિંબિત કરે તે માટેનો પ્રયોગ. આ window.scroll પ્રોપર્ટીઝને લેઆઉટ વ્યૂપોર્ટથી સંબંધિત બનાવશે.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{તમારા નેટવર્ક પર નવું પ્રિન્ટર}one{તમારા નેટવર્ક પર નવા પ્રિન્ટર્સ}other{તમારા નેટવર્ક પર નવા પ્રિન્ટર્સ}}</translation> <translation id="6285395082104474418">સ્થિતિ ટ્રે તમને તમારા નેટવર્ક, બેટરી અને વધુની વર્તમાન સ્થિતિ બતાવે છે.</translation> @@ -3678,6 +3699,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> ના પૂર્વમાં ઇન્સ્ટોલ કરેલા સંસ્કરણ પર પાછું ફરી રહ્યાં છે</translation> <translation id="6418481728190846787">બધી એપ્લિકેશનો માટે કાયમીરૂપે ઍક્સેસ દૂર કરો</translation> <translation id="6418505248408153264">સામગ્રી ડિઝાઇન ઇતિહાસ સક્ષમ કરો</translation> +<translation id="6419288379019356534">આ ઉપકરણ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> દ્વારા સંચાલિત છે. + <ph name="LINE_BREAK" /> + તમારા <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> એકાઉન્ટમાં સાઇન ઇન કરવાનું ચાલુ રાખવા માટે કૃપા કરીને "આગલું" ક્લિક કરો.</translation> <translation id="6419902127459849040">મધ્ય યુરોપિયન</translation> <translation id="6420676428473580225">ડેસ્કટૉપ પર ઉમેરો</translation> <translation id="6422329785618833949">ફોટો ફ્લિપ કર્યો</translation> @@ -3839,7 +3863,6 @@ <translation id="6662016084451426657">સમન્વયન ભૂલ: કૃપા કરી સમન્વયનને સક્ષમ કરવા માટે વ્યવસ્થાપકનો સંપર્ક કરો.</translation> <translation id="6663792236418322902">પછીથી આ ફાઇલની પુનઃપ્રાપ્તિ માટે તમે પસંદ કરો છો તે પાસવર્ડની જરૂર પડશે. કૃપા કરીને તેને સુરક્ષિત સ્થાન પર નોંધો.</translation> <translation id="6664237456442406323">દુર્ભાગ્યપણે, તમારું કમ્પ્યુટર દૂષિત હાર્ડવેર ID સાથે ગોઠવવમાં આવેલું છે. આ Chrome OS ને નવીનતમ સુરક્ષા સુધારાથી અપડેટ થવાથી અટકાવે છે અને તમારું કમ્પ્યુટર <ph name="BEGIN_BOLD" />દુર્ભાવનાપૂર્ણ હુમલાઓ માટે ભેદ્ય<ph name="END_BOLD" /> હોઈ શકે છે.</translation> -<translation id="666541661050183336">iframe સાધનોની લોડ પ્રાધાન્યતા ઘટાડે છે.</translation> <translation id="6666647326143344290">તમારા Google એકાઉન્ટથી </translation> <translation id="6675665718701918026">પોઇંટિંગ ઉપકરણ કનેક્ટ કર્યું</translation> <translation id="6677037229676347494">અપેક્ષિત ID "<ph name="EXPECTED_ID" />", પરંતુ ID "<ph name="NEW_ID" />" હતો.</translation> @@ -3932,6 +3955,7 @@ <translation id="6825883775269213504">રશિયન</translation> <translation id="6827236167376090743">આ વિડિઓ સમીસાંજ સુધી ચાલુ રહેશે.</translation> <translation id="6828153365543658583">નીચેના વપરાશકર્તાઓ માટે સાઇન-ઇન નિયંત્રિત કરો:</translation> +<translation id="6828434191343384461">પસંદ કરેલ ડેટા Chrome અને સમન્વયિત ઉપકરણોમાંથી દૂર કરવામાં આવ્યો છે. તમારું Google એકાઉન્ટ બ્રાઉઝિંગ ઇતિહાસના અન્ય સ્વરૂપો જેવા કે શોધ અને <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> પરની અન્ય Google સેવાઓમાંથી પ્રવૃત્તિઓ ધરાવતો હોઇ શકે છે.</translation> <translation id="6828860976882136098">તમામ વપરાશકર્તાઓ માટે સ્વચલિત અપડેટ્સને સેટ કરવામાં નિષ્ફળ થયાં (પ્રીફ્લાઇટ અમલીકરણની ભૂલ: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">તમારા <ph name="DEVICE_TYPE" /> સાથે સહાય મેળવો.</translation> <translation id="6829270497922309893">તમારા સંગઠનમાં નોંધણી કરો</translation> @@ -4012,6 +4036,7 @@ <translation id="6965382102122355670">ઓકે</translation> <translation id="6965648386495488594">પોર્ટ</translation> <translation id="6965978654500191972">ઉપકરણ</translation> +<translation id="6969104364835835175">PNaCl Subzero ની ફરજ પાડો</translation> <translation id="6970230597523682626">બલ્ગેરિયન</translation> <translation id="6970480684834282392">સ્ટાર્ટઅપ પ્રકાર</translation> <translation id="6970856801391541997">વિશિષ્ટ પૃષ્ઠો છાપો</translation> @@ -4095,10 +4120,12 @@ <translation id="7057058088140140610">Google Payments નો ઉપયોગ કરતાં ક્રેડિટ કાર્ડ્સ અને સરનામાં</translation> <translation id="7059858479264779982">સ્વતઃ-લોંચ સેટ કરો</translation> <translation id="7061692898138851896">પાસવર્ડ્સને આપમેળે સાચવો</translation> +<translation id="7062222374113411376">ડેટા મોકલવાનું અને પ્રાપ્ત કરવાનું સમાપ્ત કરવા માટે તાજેતરમાં બંધ કરેલ સાઇટ્સને મંજૂરી આપો (ભલામણ કરેલ)</translation> <translation id="7063129466199351735">શોર્ટકટ્સની પ્રક્રિયા કરી રહ્યું છે...</translation> <translation id="7065223852455347715">આ ઉપકરણ એન્ટરપ્રાઇઝ નોંધણી અટકાવતા મોડ પર લોક કરવામાં આવેલ છે. જો તમે ઉપકરણની નોંધણી કરવા માંગતા હોય તો તમારે પહેલાં ઉપકરણ પુનઃપ્રાપ્તિ પર જવાની જરૂર છે.</translation> <translation id="7065534935986314333">સિસ્ટમ વિષે</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" થી કનેક્ટ કરવામાં નિષ્ફળ થયું.</translation> +<translation id="7067725467529581407">આ ફરી ક્યારેય બતાવશો નહીં.</translation> <translation id="7070804685954057874">પ્રત્યક્ષ ઇનપુટ</translation> <translation id="7072010813301522126">શોર્ટકટ નામ</translation> <translation id="7072025625456903686">તમામને મંજૂરી આપો અથવા કસ્ટમાઇઝ કરો</translation> @@ -4371,6 +4398,7 @@ <translation id="7489605380874780575">યોગ્યતા તપાસો</translation> <translation id="749028671485790643">વ્યક્તિ <ph name="VALUE" /></translation> <translation id="7491962110804786152">ટેબ</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> એક્સટેન્શન પાસવર્ડ્સ અને ક્રેડિટ કાર્ડ નંબર્સ સહિત, તમે ટાઇપ કરો તે બધી ટેક્સ્ટને એકત્રિત કરી શકે છે. શું તમે આ એક્સટેન્શનનો ઉપયોગ કરવા માંગો છો?</translation> <translation id="7495778526395737099">તમારો જૂનો પાસવર્ડ ભૂલી ગયા છો?</translation> <translation id="7503191893372251637">નેટસ્કેપ પ્રમાણપત્રનો પ્રકાર</translation> <translation id="7503821294401948377">બ્રાઉઝર ક્રિયા માટે આયકન '<ph name="ICON" />' લોડ કરી શકાયું નથી.</translation> @@ -4422,6 +4450,7 @@ <translation id="756445078718366910">બ્રાઉઝર વિંડો ખોલો</translation> <translation id="7564847347806291057">પ્રક્રિયાનો અંત કરો</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome ડેટા સાફ કર્યો</translation> <translation id="7568790562536448087">અપડેટ થઈ રહ્યું છે</translation> <translation id="7573172247376861652">બેટરી ચાર્જ</translation> <translation id="7576032389798113292">6x4</translation> @@ -4551,6 +4580,7 @@ <translation id="7786207843293321886">અતિથિને બહાર નીકાળો</translation> <translation id="7786889348652477777">એપ્લિકેશન &ફરીથી લોડ કરો</translation> <translation id="7787129790495067395">તમે હાલમાં એક પાસફ્રેઝનો ઉપયોગ કરી રહ્યા છો. જો તમે તમારો પાસફ્રેઝ ભૂલી ગયા છો, તો તમે Google Dashboard નો ઉપયોગ કરીને Googleના સર્વર્સ પરથી તમારા ડેટાને સાફ કરવા માટે સમન્વયનને ફરીથી સેટ કરી શકો છો.</translation> +<translation id="7787308148023287649">અન્ય સ્ક્રીન પર પ્રદર્શિત કરો</translation> <translation id="7788080748068240085">"<ph name="FILE_NAME" />" ને ઑફલાઇન સાચવવા માટે તમારે વધુ <ph name="TOTAL_FILE_SIZE" /> સ્થાન ખાલી કરવું આવશ્યક છે:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />તમને હવે ઑફલાઇન ઍક્સેસ કરવાની જરૂર ન હોય તેવી ફાઇલોને અનપિન કરો<ph name="MARKUP_3" /> <ph name="MARKUP_4" />તમારા ડાઉનલોડ્સ ફોલ્ડરમાંથી ફાઇલો કાઢી નાખો<ph name="MARKUP_5" /></translation> @@ -4619,6 +4649,7 @@ <translation id="7878999881405658917">Google એ આ ફોન પર એક સૂચના મોકલી છે. નોંધ લો કે બ્લુટૂથ વડે, તમારો ફોન 100 કરતાં વધુ ફીટ દૂરથી તમારા <ph name="DEVICE_TYPE" /> ને અનલૉક રાખી શકે છે. જ્યાં આ કોઈ સમસ્યા હોઈ શકે તેવા કિસ્સાઓમાં, તમે <a>આ સુવિધાને અસ્થાયી રૂપે અક્ષમ કરી</a> શકો છો.</translation> <translation id="7879478708475862060">ઇનપુટ મોડને અનુસરો</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" આ એપ્લિકેશનો અને એક્સટેન્શન્સ ઉમેરે છે:</translation> +<translation id="7881969471599061635">ઉપશીર્ષકો અક્ષમ કરો</translation> <translation id="7884988936047469945">પ્રાયોગિક અૅક્સેસિબિલિટી સુવિધાઓ</translation> <translation id="7885253890047913815">તાજેતરનાં ગંતવ્યો</translation> <translation id="7885283703487484916">ખૂબ જ ટૂંકો</translation> @@ -4980,6 +5011,7 @@ <translation id="839736845446313156">નોંધણી કરો</translation> <translation id="8398790343843005537">તમારો ફોન શોધો</translation> <translation id="8398877366907290961">કોઈપણ રીતે આગળ વધારો</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> સાથે સાચવવામાં આવેલ તમારા એકાઉન્ટ સાથે સાઇન ઇન કરો</translation> <translation id="8401363965527883709">અનચેક કરેલા ચેક બૉક્સ</translation> <translation id="8408402540408758445">શોધ પરિણામો લાવો</translation> <translation id="8410073653152358832">આ ફોનનો ઉપયોગ કરો</translation> @@ -5066,6 +5098,7 @@ <translation id="8545211332741562162">પ્રાયોગિક JavaScript સુવિધાઓનો ઉપયોગ કરવા માટે વેબ પૃષ્ઠોને સક્ષમ કરો.</translation> <translation id="8545575359873600875">માફ કરશો, તમારો પાસવર્ડ ચકાસી શક્યાં નથી. આ નિરીક્ષિત વપરાશકર્તાના સંચાલકે તાજેતરમાં પાસવર્ડ બદલાવ્યો હોઇ શકે છે. જો આમ હોય, તો નવો પાસવર્ડ તમે આગલી વખતે સાઇન ઇન કરો ત્યારે લાગુ થશે. તમારા જૂના પાસવર્ડનો ઉપયોગ કરીને પ્રયાસ કરો.</translation> <translation id="8546306075665861288">છબી કેશ</translation> +<translation id="854653344619327455">આ ચિહ્ન ચાલુ હોવા પર, ડેસ્કટૉપ શેર પીકર વિંડો વપરાશકર્તાને ઑડિઓ શેર કરવો કે નહીં તે પસંદ કરવા દેશે નહીં.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">અક્ષર</translation> <translation id="855081842937141170">ટૅબ પિન કરો</translation> @@ -5096,6 +5129,7 @@ <translation id="8589311641140863898">પ્રાયોગિક એક્સ્ટેંશન API</translation> <translation id="8590375307970699841">સ્વચાલિત અપડેટ્સ સેટ કરો</translation> <translation id="8592071947729879125">Iframe પરવાનગીઓ પ્રતિબંધિત કરો.</translation> +<translation id="8592125506633137593">ટોચના દસ્તાવેજ આઇસોલેશન</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> તરીકે સાઇન ઇન કર્યું છે. <ph name="BEGIN_LINK" />Google ડેશબોર્ડ<ph name="END_LINK" /> પર તમારો સમન્વયિત ડેટા મેનેજ કરો.</translation> <translation id="8596540852772265699">કસ્ટમ ફાઇલો</translation> <translation id="8596785155158796745">માઇક્રોફોન હાલમાં અનુપલબ્ધ છે. <ph name="BEGIN_LINK" />માઇક્રોફોન સંચાલિત કરો<ph name="END_LINK" /></translation> @@ -5168,6 +5202,7 @@ <translation id="8688579245973331962">તમારું નામ દેખાતું નથી?</translation> <translation id="8688644143607459122">ચાલુ રાખો પર ક્લિક કરીને તમે Google Payments નો ઉપયોગ કરવા માટે સંમત થાઓ છો. તમને કપટથી સુરક્ષિત કરવા માટે, તમારા કમ્પ્યુટર વિશેની માહિતી (તેના સ્થાન સહિત) Google Payments સાથે શેર કરવામાં આવશે.</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" એક્સ્ટેન્શન રિમોટ્લી ઇન્સ્ટોલ કર્યું હતું.</translation> +<translation id="868926756781121513">ટૅબ સ્રોત સાથે ડેસ્કટોપ શેર</translation> <translation id="8689341121182997459">સમાપ્તિ:</translation> <translation id="8690754533598178758">Adobe Flash Player માઇક્રોફોન અપવાદો અલગ છે.</translation> <translation id="8691686986795184760">(સંગઠન નીતિ દ્વારા સક્ષમ)</translation> @@ -5211,6 +5246,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> ને બદલે <ph name="PROTOCOL" /> લિંક્સ ખોલો</translation> <translation id="8737709691285775803">શિલ</translation> <translation id="8741881454555234096">માઉસની તુલનામાં ખરાબ રિઝોલ્યુશન ધરાવતાં ટચને સરભર કરવા માટે ટચ હાવભાવની સ્થિતિને સુધારો.</translation> +<translation id="8741995161408053644">તમારા Google એકાઉન્ટમાં <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> પર બ્રાઉઝિંગ ઇતિહાસના અન્ય સ્વરૂપો હોઇ શકે છે.</translation> <translation id="8743712320294854924">શેલ્ફમાં વિસ્તૃત ઇનપુટ વિકલ્પો બતાવો.</translation> <translation id="874420130893181774">પરંપરાગત પિનયિન ઇનપુટ પદ્ધતિ</translation> <translation id="8744525654891896746">આ નિરીક્ષિત વપરાશકર્તા માટે એક અવતાર પસંદ કરો</translation> @@ -5224,6 +5260,7 @@ <translation id="8757640015637159332">સાર્વજનિક સત્ર દાખલ કરો</translation> <translation id="8757742102600829832">કનેક્ટ કરવા માટે Chromebox પસંદ કરો</translation> <translation id="8757803915342932642">Google મેઘ ઉપકરણો પરનું ઉપકરણ</translation> +<translation id="8758895886513993540">વપરાશકર્તાઓ ડેસ્કટૉપ શેર માટે ટૅબ પસંદ કરી શકે કે કેમ તેનું આ ચિહ્ન નિયંત્રણ કરે છે.</translation> <translation id="8759408218731716181">બહુવિધ સાઇન-ઇન સેટ કરી શકતાં નથી</translation> <translation id="8759753423332885148">વધુ જાણો.</translation> <translation id="8761567432415473239">Google Safe Browsing ને તાજેતરમાં <ph name="SITE" /> પર <ph name="BEGIN_LINK" />હાનિકારક પ્રોગ્રામ્સ મળ્યાં<ph name="END_LINK" />.</translation> @@ -5434,6 +5471,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB માઉસ કનેક્ટ કર્યું</translation> <translation id="9076523132036239772">માફ કરશો, તમારો ઇમેઇલ અથવા પાસવર્ડ માન્ય કરી શકાયો નથી. સૌ પ્રથમ નેટવર્કથી કનેક્ટ કરવાનો પ્રયાસ કરો. </translation> +<translation id="9077132661879924646">Android પર એકીકૃત મીડિયા પાઇપલાઇનને અક્ષમ કરે છે.</translation> <translation id="907841381057066561">પૅકેજીંગ દરમિયાન અસ્થાયી ઝિપ ફાઇલ બનાવવામાં નિષ્ફળ.</translation> <translation id="9083147368019416919">નોંધણી રદ કરવામાં નિષ્ફળ રહ્યાં</translation> <translation id="9084064520949870008">વિંડો તરીકે ખોલો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 1ff0301..0272f5e 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">चित्र के एक वर्गाकार क्षेत्र को चुनें.</translation> <translation id="1697532407822776718">आप बिल्कुल तैयार हैं!</translation> +<translation id="1697988819212986149">Google सेवाओं द्वारा सशक्तिकृत प्रसंग मेनू आइटम के पास Google आइकन दिखाता है.</translation> <translation id="1699274548822076330">इसका उपयोग ट्रेस-अपलोड-url फ़्लैग के साथ मिलकर किया जाना है. चेतावनी: सक्षम किए जाने पर, Chrome प्रत्येक मार्गदर्शक के लिए प्रदर्शन डेटा को रिकॉर्ड करेगा और उसे ट्रेस-अपलोड-url फ़्लैग के द्वारा निर्दिष्ट URL पर अपलोड करेगा. ट्रेस में आपके द्वारा देखी जाने वाली वेबसाइटों के शीर्षक और URL जैसी व्यक्तिगत रूप से पहचान योग्य जानकारी (PII) शामिल हो सकती है.</translation> <translation id="1699395855685456105">हार्डवेयर पुनरीक्षण:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">कृपया अपना समन्वयन पासफ्रेज़ अपडेट करें.</translation> <translation id="1788636309517085411">डिफ़ॉल्ट का उपयोग करें</translation> <translation id="1789575671122666129">पॉपअप</translation> -<translation id="1790550373387225389">प्रस्तुतिकरण मोड दर्ज करें</translation> <translation id="1792705092719258158">मिरर किया गया स्क्रीन मोड सक्षम करें.</translation> <translation id="1793119619663054394">क्या आप वाकई "<ph name="PROFILE_NAME" />" को और सभी संबद्ध Chrome डेटा को इस कंप्यूटर से निकालना चाहते हैं? इसे पूर्ववत नहीं किया जा सकता.</translation> <translation id="179767530217573436">पिछले 4 सप्ताह</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">आपके डिवाइस और सहायक डिवाइस की विशिष्ट सेटिंग बदलें.</translation> <translation id="2673135533890720193">अपना ब्राउज़िंग इतिहास पढ़ें</translation> <translation id="2673589024369449924">इस उपयोगकर्ता के लिए डेस्कटॉप शार्टकट बनाएं</translation> +<translation id="2675358154061544447">क्रॉस-साइट iframes को अलग-अलग प्रक्रियाओं में रेंडर करने के लिए उच्च प्रयोगात्मक सहायता. इस मोड में, दस्तावेज़ रेंडरर प्रक्रिया को केवल तभी साझा करेंगे, जब वे समान वेब साइट से हों.</translation> <translation id="2676946222714718093">इस पर चलाया जा रहा है:</translation> <translation id="2678063897982469759">फिर से-सक्षम करें</translation> <translation id="2678246812096664977">सभी प्लग इन</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">पासवर्ड प्रबंधक समन्वयन प्रमाणिकता के लिए स्वत:-भरण को कैसे प्रबंधित करता है.</translation> <translation id="29611076221683977">वर्तमान में <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> पर मौजूद हमलावर आपके Mac पर ऐसे खतरनाक प्रोग्राम इंस्टॉल करने का प्रयास कर सकते हैं जो आपकी जानकारी (उदाहरण के लिए, फ़ोटो, पासवर्ड, संदेश और क्रेडिट कार्ड) को चुराते हैं या उसे हटा देते हैं.</translation> <translation id="2961695502793809356">आगे जाने के लिए क्लिक करें, इतिहास देखने के लिए दबाए रखें</translation> +<translation id="296216853343927883">प्रसंग मेनू में Google ब्रांडिंग</translation> <translation id="2963151496262057773">निम्न प्लग इन प्रतिसाद नहीं दे रहा है: <ph name="PLUGIN_NAME" />क्या उसे रोकना चाहते हैं?</translation> <translation id="2963783323012015985">तुर्की कीबोर्ड</translation> <translation id="2964193600955408481">वाई-फ़ाई अक्षम करें</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">अन्य लोगों को देखने के लिए उपरोक्त बटन पर राइट क्लिक करें.</translation> <translation id="3026050830483105579">सब कुछ यहीं है.</translation> <translation id="302620147503052030">दिखाएं बटन</translation> +<translation id="302781076327338683">बायपास होने वाले संचय को पुनः लोड करें</translation> +<translation id="3030243755303701754">पर्यवेक्षित उपयोगकर्ता, आपके मार्गदर्शन में वेब को एक्सप्लोर कर सकता है. Chrome में पर्यवेक्षित उपयोगकर्ता के प्रबंधक के रूप में, आप: + + • कुछ वेबसाइट को अनुमति दे सकते हैं या प्रतिबंधित कर सकते हैं, + • पर्यवेक्षित उपयोगकर्ता द्वारा देखी गई वेबसाइट की समीक्षा कर सकते हैं, और + • अन्य सेटिंग प्रबंधित कर सकते हैं. + +पर्यवेक्षित उपयोगकर्ता बनाने से Google खाता नहीं बनता और उसके बुकमार्क, ब्राउज़िंग इतिहास और अन्य प्राथमिकताएं Chrome समन्वयन के साथ अन्य डिवाइस पर उसका अनुसरण नहीं करेंगी. आपके द्वारा नया पर्यवेक्षित उपयोगकर्ता बनाए जाने के बाद, आप <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> पर कभी भी किसी भी डिवाइस से सेटिंग प्रबंधित कर सकते हैं. + +अधिक जानकारी के लिए, हमारे <ph name="BEGIN_LINK" />सहायता केंद्र<ph name="END_LINK" /> पर जाएं.</translation> <translation id="3031417829280473749">एजेंट X</translation> <translation id="3031557471081358569">आयात करने के लिए आइटम को चुनें:</translation> <translation id="3033332627063280038">संचय-नियंत्रण: पुनर्सत्यापन के दौरान पुरानी जानकारी डाइरेक्टिव को प्रयोगात्मक रूप से लागू किया जाना सक्षम करें. इससे सर्वर यह निर्दिष्ट कर सकते हैं कि कुछ स्रोत विलंब को बेहतर बनाने के लिए पृष्ठभूमि में पुनर्सत्यापित किए जा सकते हैं.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">क्या यह वही खोज पृष्ठ है जिसकी आप अपेक्षा कर रहे थे?</translation> <translation id="3324684065575061611">(एंटरप्राइज़ नीति द्वारा अक्षम)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> ज़िप कर रहा है...</translation> -<translation id="3330206034087160972">प्रस्तुतिकरण मोड से बाहर निकलें</translation> <translation id="3330686263988132416">WebRTC Stun मूल शीर्षक</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">मिरर किया गया स्क्रीन मोड सक्षम करें. यह मोड स्क्रीन के चित्र को क्षैतिज रूप से पलट देता है.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">दुर्भावनापूर्ण फ़ाइल को पुनर्प्राप्त करें</translation> <translation id="3394150261239285340"><ph name="HOST" /> आपके कैमरा और माइक्रोफ़ोन का उपयोग करना चाहता है.</translation> <translation id="3394279550557729862">उन प्लेटफ़ॉर्म पर मूल नोटिफिकेशन टोस्ट और नोटिफिकेशन केंद्र का उपयोग करने के लिए समर्थन सक्षम करें जहां ये उपलब्ध हैं.</translation> +<translation id="3394862755749546286">Android पर एकीकृत (Android और डेस्कटॉप) मीडिया पाइपलाइन अक्षम करता है.</translation> <translation id="3396331542604645348">चयनित प्रिंटर उपलब्ध नहीं है या ठीक से इंस्टॉल नहीं किया गया है. अपना प्रिंटर जांचें या किसी अन्य प्रिंटर का चयन करने का प्रयास करें.</translation> <translation id="3399597614303179694">मकदूनियाई कीबोर्ड</translation> <translation id="3401130144947259741">यदि सक्षम हो, तो ट्रेस ईवेंट Windows के लिए ईवेंट ट्रेसिंग (ETW) पर निर्यात किए जाते हैं और उसके बाद UIForETW या Xperf जैसे टूल द्वारा कैप्चर किए जा सकते हैं.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">यदि आप रूट पासवर्ड को डिफ़ॉल्ट परीक्षण चित्र मान पर सेट करना चाहते हैं तो खाली छोड़ दें</translation> <translation id="3678156199662914018">एक्सटेंशन: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">माल्टीज़ कीबोर्ड</translation> -<translation id="3680173818488851340">निम्न वरीयता वाले iframe.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> स्क्रीन साझाकरण अनुरोध</translation> <translation id="3685122418104378273">मोबाइल डेटा का उपयोग करते समय, Google डिस्क समन्वयन डिफ़ॉल्ट रूप से अक्षम रहता है.</translation> <translation id="3685387984467886507">SSL के माध्यम से आगे बढ़ने के निर्णयों को एक निर्दिष्ट समयावधि के लिए याद रखें.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> अब Admin Console में दिखाई देगा</translation> <translation id="3741243925913727067">अपने मीडिया डिवाइस की फ़ोटो और वीडियो का Google डिस्क पर बैकअप लें.</translation> <translation id="3743492083222969745">वर्चुअल कीबोर्ड के सेटिंग पृष्ठ में हावभाव लेखन विकल्प को सक्षम/अक्षम करें.</translation> +<translation id="3744111561329211289">पृष्ठभूमि समन्वयन</translation> <translation id="3749289110408117711">फ़ाइल नाम</translation> <translation id="3751427701788899101">कनेक्शन चला गया था</translation> <translation id="3751522270321808809">हो सकता है यह साइट आपकी जानकारी (उदाहरण: पासवर्ड, संदेश या क्रेडिट कार्ड) चुराने के लिए आपको भ्रमित करे.</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">अन्य खाते में प्रवेश करें</translation> <translation id="4219614746733932747">यदि सक्षम किया गया हो, तो Blink अपने ज़ूमिंग तंत्र का उपयोग करता है ताकि डिवाइस माप कारक की सामग्री मापी जा सके.</translation> <translation id="4220865787605972627">यदि स्क्रीन सुविधा का समर्थन करती है तो स्क्रीन के रंग अंशांकन की अनुमति दें.</translation> +<translation id="4232692576734035989">उच्च प्रयोगात्मक प्रदर्शन मोड जहां क्रॉस-साइट iframe को शीर्ष दस्तावेज़ से अलग प्रक्रिया में रखा जाता है. इस मोड में, अलग-अलग तृतीय-पक्ष साइट के iframe को किसी प्रक्रिया को साझा करने की अनुमति दी जाएगी.</translation> <translation id="4235200303672858594">संपूर्ण स्क्रीन</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> के लिए खाता जोड़ें</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> को इस भाषा में प्रदर्शित नहीं किया जा सकता</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">फ़ोटो छोड़ें</translation> <translation id="4509345063551561634">स्थानः</translation> <translation id="4514542542275172126">नया पर्यवेक्षित उपयोगकर्ता सेट करें</translation> +<translation id="4514914692061505365">सभी pexe फ़ाइलों के लिए PNaCl के तेज़ Subzero अनुवादक के उपयोग को लागू करें.</translation> <translation id="4518677423782794009">क्या Chrome क्रैश हो रहा है, असामान्य स्टार्टअप पृष्ठ, टूलबार या ऐसे अनपेक्षित विज्ञापन दिखा रहा है जिनसे आपको छुटकारा नहीं मिल रहा है या आपके ब्राउज़िंग अनुभव में अन्यथा बदलाव आ रहा है? तो हो सकता है कि आप Chrome क्लीनअप यंत्र को चलाकर समस्या को ठीक कर पाएं.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> के अज्ञात डिवाइस</translation> <translation id="4522570452068850558">विवरण</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">ऐप्स और एक्सटेंशन केवल प्रबंधक (<ph name="CUSTODIAN_NAME" />) के द्वारा बदले जा सकते हैं.</translation> <translation id="4601242977939794209">EMF कन्वर्टर</translation> <translation id="4602466770786743961"><ph name="HOST" /> को अपना कैमरा और माइक्रोफ़ोन हमेशा एक्सेस करने दें</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">इंटरनेट कनेक्ट नहीं है</translation> <translation id="4608500690299898628">&ढूंढें...</translation> <translation id="4610637590575890427">क्या आपका मतलब <ph name="SITE" /> पर जाने से है ?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">प्रवेश विफल रहा, कृपया इंटरनेट से कनेक्ट करें और पुन: प्रयास करें.</translation> <translation id="5063180925553000800">नया पिन:</translation> <translation id="5067867186035333991">यदि <ph name="HOST" /> आपका कैमरा एक्सेस करना चाहे, तो पूछें</translation> +<translation id="5068918910148307423">हाल ही में बंद की गई साइट को डेटा भेजने और प्राप्त करने की प्रकिया को पूरा करने की अनुमति ना दें</translation> <translation id="507075806566596212">डिवाइस का दूरस्थ रूप से पता लगाने, वाइप करने और उसे लॉक करने की क्षमता को सक्षम करने के लिए आप Google के साथ इस <ph name="DEVICE_TYPE" /> का नामांकन करने वाले हैं. इसके लिए पुन: बूट करने की आवश्यकता होगी. क्या आप जारी रखना चाहते हैं?</translation> <translation id="5072836811783999860">प्रबंधित बुकमार्क दिखाएं</translation> <translation id="5074318175948309511">नई सेटिंग के प्रभावी होने से पहले इस पृष्ठ को रीलोड करने की आवश्यकता हो सकती है.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">पिछला टेक्स्ट ढूंढें</translation> <translation id="5228076606934445476">इस डिवाइस में कुछ गलत है. इस त्रुटि को ठीक के लिए आपको डिवाइस को रीबूट करना होगा और फिर से प्रयास करना होगा.</translation> <translation id="5228962187251412618">केवल ऑनलाइन चेक</translation> +<translation id="5229622432348746578">डेस्कटॉप साझा करने के लिए ऑडियो अक्षम करें</translation> <translation id="5230516054153933099">विंडो</translation> <translation id="5232178406098309195">जब आप "Ok Google" या माइक्रोफ़ोन आइकन स्पर्श करने जैसे ऑडियो सक्रियण कमांड का उपयोग करते हैं, तो आपकी निजी ध्वनि और ऑडियो गतिविधि कुछ ध्वनि और अन्य ऑडियो को आपके खाते में संग्रहीत कर लेती है. उसके बाद की तथा कुछ सेकंड पहले की बोली/ऑडियो की रिकॉर्डिंग संग्रहीत की जाएगी.</translation> <translation id="523299859570409035">सूचनाएं अपवाद</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">प्रयोग में नहीं रहने के दौरान वाई-फ़ाई चालू रखें</translation> <translation id="5558129378926964177">ज़ूम &इन करें</translation> <translation id="556042886152191864">बटन</translation> +<translation id="5562781907504170924">यह टैब किसी ब्लूटूथ डिवाइस से कनेक्ट है.</translation> <translation id="5565871407246142825">क्रेडिट कार्ड</translation> <translation id="5567989639534621706">ऐप्स संचय</translation> <translation id="5568069709869097550">प्रवेश नहीं कर सकता</translation> @@ -3308,6 +3326,7 @@ <translation id="5803531701633845775">कर्सर ले जाए बिना, पीछे से वाक्यांश चुनें</translation> <translation id="5804241973901381774">अनुमतियां</translation> <translation id="580571955903695899">शीर्षक द्वारा फिर से क्रमित करें</translation> +<translation id="5808982448801399019">प्रमाणीकरण विफल रहा</translation> <translation id="580961539202306967">जब कोई साइट मुझे पुश संदेश भेजना चाहे तो मुझसे पूछें (सुझाए गए)</translation> <translation id="5815645614496570556">X.400 पता</translation> <translation id="5817397429773072584">पारंपरिक चीनी</translation> @@ -3579,6 +3598,7 @@ <translation id="6243774244933267674">सर्वर अनुपलब्ध है</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">अपडेट तैयार है</translation> +<translation id="6248400709929739064">उपशीर्षक सक्षम करें</translation> <translation id="6248988683584659830">खोज सेटिंग</translation> <translation id="6251870443722440887">GDI हैंडल</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> सेवा की शर्तों</translation> @@ -3603,6 +3623,7 @@ <translation id="6277105963844135994">नेटवर्क समय समाप्त</translation> <translation id="6277518330158259200">स्क्री&नशॉट लें</translation> <translation id="6279183038361895380">अपना कर्सर दिखाने के लिए |<ph name="ACCELERATOR" />| दबाएं</translation> +<translation id="6280215091796946657">किसी दूसरे खाते से प्रवेश करें</translation> <translation id="6281743458679673853">सभी के द्वारा लेआउट व्यूपोर्ट प्रदर्शित किए जाने के लिए प्रयोग करें. इससे window.scroll प्रॉपर्टी, लेआउट व्यूपोर्ट से संबंधित हो जाएंगी.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{आपके नेटवर्क पर नया प्रिंटर}one{आपके नेटवर्क पर नए प्रिंटर}other{आपके नेटवर्क पर नए प्रिंटर}}</translation> <translation id="6285395082104474418">स्थिति ट्रे आपको आपके नेटवर्क, बैटरी आदि की वर्तमान स्थिति दिखाती है.</translation> @@ -3684,6 +3705,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> के पहले से इंस्टॉल किए गए संस्करण पर वापस लाना</translation> <translation id="6418481728190846787">सभी ऐप्स की एक्सेस स्थायी रूप से निकालें</translation> <translation id="6418505248408153264">मटीरियल डिज़ाइन इतिहास सक्षम करें</translation> +<translation id="6419288379019356534">यह डिवाइस <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> के द्वारा प्रबंधित है. + <ph name="LINE_BREAK" /> + कृपया अपने <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> खाते में प्रवेश करना जारी रखने के लिए "अगला" क्लिक करें.</translation> <translation id="6419902127459849040">मध्य यूरोपीय</translation> <translation id="6420676428473580225">डेस्कटॉप पर जोड़ें</translation> <translation id="6422329785618833949">फ़ोटो फ़्लिप किया गया</translation> @@ -3844,7 +3868,6 @@ <translation id="6662016084451426657">समन्वयन त्रुटि: समन्वयन सक्षम करने के लिए कृपया व्यवस्थापक से संपर्क करें.</translation> <translation id="6663792236418322902">आपके द्वारा चुने गए पासवर्ड की आवश्यकता इस फ़ाइल को बाद में पुनर्स्थापित करने के लिए होगी. कृपया इसे किसी सुरक्षित स्थान पर रिकॉर्ड करें.</translation> <translation id="6664237456442406323">दुर्भाग्यवश, आपका कंप्यूटर किसी विकृत हार्डवेयर आईडी द्वारा कॉन्फ़िगर किया हुआ है. इससे Chrome OS को नवीनतम सुरक्षा सुधारों से अपडेट होने में बाधा आ रही है और आपका कंप्यूटर <ph name="BEGIN_BOLD" />दुर्भावनापूर्ण हमलों की चपेट में आ सकता है<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">iframe संसाधनों की लोड प्राथमिकता को कम करता है.</translation> <translation id="6666647326143344290">अपने Google खाते के साथ</translation> <translation id="6675665718701918026">सूचक डिवाइस कनेक्ट किया गया</translation> <translation id="6677037229676347494">अपेक्षित आईडी "<ph name="EXPECTED_ID" />" है, लेकिन आईडी "<ph name="NEW_ID" />" थी.</translation> @@ -3937,6 +3960,7 @@ <translation id="6825883775269213504">रूसी</translation> <translation id="6827236167376090743">यह वीडियो शाम होने तक चलता रहेगा.</translation> <translation id="6828153365543658583">निम्नलिखित उपयोगर्ताओं के लिए साइन-इन प्रतिबंधित करें:</translation> +<translation id="6828434191343384461">चयनित डेटा Chrome और समन्वयित डिवाइस से निकाल दिया गया है. हो सकता है कि आपके Google खाते में अन्य प्रकार के ब्राउज़िंग इतिहास जैसे खोज और <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> पर अन्य Google सेवाओं की गतिविधि हो.</translation> <translation id="6828860976882136098">सभी उपयोगकर्ताओं के लिए स्वचालित अपडेट सेट करने में विफल (प्रीफ़्लाइट निष्पादन त्रुटि: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">अपने <ph name="DEVICE_TYPE" /> के साथ सहायता प्राप्त करें.</translation> <translation id="6829270497922309893">अपने संगठन में नामांकित करें</translation> @@ -4017,6 +4041,7 @@ <translation id="6965382102122355670">ठीक</translation> <translation id="6965648386495488594">पोर्ट</translation> <translation id="6965978654500191972">डिवाइस</translation> +<translation id="6969104364835835175">PNaCl Subzero लागू करें</translation> <translation id="6970230597523682626">बल्गारियाई</translation> <translation id="6970480684834282392">स्टार्टअप प्रकार</translation> <translation id="6970856801391541997">विशेष पृष्ठ प्रिंट करें</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Google पेमेंट्स का उपयोग करने वाले क्रेडिट कार्ड और पते</translation> <translation id="7059858479264779982">स्वत:-लॉन्च पर सेट करें</translation> <translation id="7061692898138851896">अपने आप पासवर्ड सहेजें</translation> +<translation id="7062222374113411376">हाल ही में बंद की गई साइट को डेटा भेजने और प्राप्त करने की प्रकिया को पूरा करने की अनुमति दें (अनुशंसित)</translation> <translation id="7063129466199351735">शॉर्टकट प्रोसेस हो रहे हैं...</translation> <translation id="7065223852455347715">इस डिवाइस को ऐसे मोड में लॉक किया गया है जो एंटरप्राइज़ नामांकन को रोकता है. यदि आप इस डिवाइस का नामांकन करना चाहते हैं, तो आपको पहले डिवाइस पुनर्प्राप्ति से गुज़रना होगा.</translation> <translation id="7065534935986314333">सिस्टम के बारे में</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" से कनेक्ट करने में विफल.</translation> +<translation id="7067725467529581407">इसे फिर से कभी ना दिखाएं.</translation> <translation id="7070804685954057874">प्रत्यक्ष इनपुट</translation> <translation id="7072010813301522126">शॉर्टकट का नाम</translation> <translation id="7072025625456903686">सभी को अनुमति दें या कस्टमाइज़ करें</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">योग्यता जांचें</translation> <translation id="749028671485790643">व्यक्ति <ph name="VALUE" /></translation> <translation id="7491962110804786152">टैब</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> एक्सटेंशन, आपके द्वारा लिखे जाने वाले सभी लेख को एकत्र कर सकता है, जिसमें पासवर्ड और क्रेडिट कार्ड नंबर जैसा व्यक्तिगत डेटा भी शामिल है. क्या आप इस एक्सटेंशन का उपयोग करना चाहते हैं?</translation> <translation id="7495778526395737099">क्या आप अपना पुराना पासवर्ड भूल गए हैं?</translation> <translation id="7503191893372251637">Netscape प्रमाणपत्र प्रकार</translation> <translation id="7503821294401948377">ब्राउज़र कार्य के लिए '<ph name="ICON" />' आइकन लोड नहीं कर सका.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">ब्राउज़र विंडो खोलें</translation> <translation id="7564847347806291057">प्रक्रिया समाप्त करें</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">साफ़ किया गया Chrome डेटा</translation> <translation id="7568790562536448087">अपडेट कर रहा है</translation> <translation id="7573172247376861652">बैटरी चार्ज</translation> <translation id="7576032389798113292">6x4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">अतिथि सत्र से बाहर निकलें</translation> <translation id="7786889348652477777">&ऐप पुन: लोड करें</translation> <translation id="7787129790495067395">आप वर्तमान में एक पासफ़्रेज़ का उपयोग कर रहे हैं. यदि आप अपना पासफ़्रेज़ भूल गए हैं, तो आप Google डैशबोर्ड का उपयोग करके Google के सर्वर से अपना डेटा साफ़ करने के लिए समन्वयन रीसेट कर सकते हैं.</translation> +<translation id="7787308148023287649">किसी अन्य स्क्रीन पर दिखाएं</translation> <translation id="7788080748068240085">"<ph name="FILE_NAME" />" को ऑफ़लाइन सहेजने के लिए आपको <ph name="TOTAL_FILE_SIZE" /> का अतिखाली स्थान खाली करना होगा:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />उन फ़ाइलों को अनपिन करें जिन्हें अब आप ऑफ़लाइन एक्सेस नहीं करना चाहते हैं<ph name="MARKUP_3" /> <ph name="MARKUP_4" />अपने डाउनलोड फ़ोल्डर से फ़ाइलें हटाएं<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google ने इस फ़ोन पर एक नोटिफिकेशन भेजा है. ध्यान रखें कि ब्लूटूथ के साथ, आपका फ़ोन 30 फ़ीट से अधिक दूरी से आपके <ph name="DEVICE_TYPE" /> को अनलॉक बनाए रख सकता है. ऐसी स्थितियों में, जहां इसके कारण समस्या हो सकती है, आप <a>इस सुविधा को अस्थायी रूप से अक्षम कर सकते हैं</a>.</translation> <translation id="7879478708475862060">इनपुट मोड का अनुसरण करें</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" इन ऐप्स और एक्सटेंशन को जोड़ता है:</translation> +<translation id="7881969471599061635">उपशीर्षक अक्षम करें</translation> <translation id="7884988936047469945">प्रयोगात्मक सरल-योग्यता सुविधाएं</translation> <translation id="7885253890047913815">हाल ही के गंतव्य</translation> <translation id="7885283703487484916">बहुत कम</translation> @@ -4989,6 +5020,7 @@ <translation id="839736845446313156">पंजीकृत करें</translation> <translation id="8398790343843005537">अपना फ़ोन ढूंढें</translation> <translation id="8398877366907290961">फिर भी आगे बढ़ें</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> के साथ सहेजे गए अपने खाते से प्रवेश करें</translation> <translation id="8401363965527883709">अचयनित चेक बॉक्स</translation> <translation id="8408402540408758445">खोज परिणामों को प्रीफ़ेच करें</translation> <translation id="8410073653152358832">इस फ़ोन का उपयोग करें</translation> @@ -5075,6 +5107,7 @@ <translation id="8545211332741562162">प्रयोगात्मक JavaScript सुविधाओं का उपयोग करने के लिए वेब पृष्ठ सक्षम करें.</translation> <translation id="8545575359873600875">क्षमा करें, आपका पासवर्ड सत्यापित नहीं किया जा सका. हो सकता है इस पर्यवेक्षित उपयोगकर्ता के प्रबंधक ने हाल ही में पासवर्ड बदल दिया हाे. यदि ऐसा है, तो आपके द्वारा अगली बार प्रवेश करने पर नया पासवर्ड लागू होगा. अपने पुराने पासवर्ड का उपयोग करके देखें.</translation> <translation id="8546306075665861288">चित्र संचय</translation> +<translation id="854653344619327455">इस फ़्लैग के चालू होने पर, डेस्कटॉप साझा पिकर विंडो उपयोगकर्ता को यह नहीं चुनने देती है कि ऑडियो साझा करें या नहीं.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">अक्षर</translation> <translation id="855081842937141170">टैब पिन करें</translation> @@ -5105,6 +5138,7 @@ <translation id="8589311641140863898">प्रायोगिक एक्सटेंशन API</translation> <translation id="8590375307970699841">स्वचालित अपडेट सेट अप करें</translation> <translation id="8592071947729879125">iframe अनुमतियों को प्रतिबंधित करें.</translation> +<translation id="8592125506633137593">शीर्ष दस्तावेज़ आइसोलेशन</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> के रूप में प्रवेश हैं. <ph name="BEGIN_LINK" />Google डैशबोर्ड<ph name="END_LINK" /> पर अपना समन्वयित डेटा प्रबंधित करें.</translation> <translation id="8596540852772265699">अनुकूलित फ़ाइलें</translation> <translation id="8596785155158796745">माइक्रोफ़ोन वर्तमान में अनुपलब्ध है. <ph name="BEGIN_LINK" />माइक्रोफ़ोन प्रबंधित करें<ph name="END_LINK" /></translation> @@ -5177,6 +5211,7 @@ <translation id="8688579245973331962">आपका नाम दिखाई नहीं दे रहा?</translation> <translation id="8688644143607459122">जारी रखें क्लिक करके आप Google पेमेंट्स का उपयोग करने के लिए सहमत होते हैं. धोखाधड़ी से आपकी सुरक्षा करने के लिए, आपके कंप्यूटर के बारे में जानकारी को (उसके स्थान सहित) Google पेमेंट्स के साथ साझा किया जाएगा.</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" एक्सटेंशन को दूरस्थ रूप से इंस्टॉल किया गया था.</translation> +<translation id="868926756781121513">टैब स्रोत के साथ डेस्कटॉप साझा</translation> <translation id="8689341121182997459">समय समाप्ति:</translation> <translation id="8690754533598178758">Adobe Flash Player के माइक्रोफ़ोन अपवाद अलग हैं.</translation> <translation id="8691686986795184760">(एंटरप्राइज़ नीति द्वारा सक्षम)</translation> @@ -5220,6 +5255,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> के बजाय <ph name="PROTOCOL" /> लिंक खोलें</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">माउस की तुलना में कमज़ोर रिज़ॉल्यूशन वाले स्पर्शों की पूर्ति करने के लिए हावभाव की स्थिति को परिष्कृत करें.</translation> +<translation id="8741995161408053644">आपके Google खाते में <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> पर ब्राउज़िंग इतिहास के अन्य प्रकार हो सकते हैं.</translation> <translation id="8743712320294854924">शेल्फ़ में विस्तृत इनपुट विकल्प दिखाएं.</translation> <translation id="874420130893181774">पारंपरिक पिनयिन इनपुट पद्धति</translation> <translation id="8744525654891896746">इस पर्यवेक्षित उपयोगकर्ता के लिए कोई अवतार चुनें</translation> @@ -5233,6 +5269,7 @@ <translation id="8757640015637159332">सार्वजनिक सत्र में प्रवेश करें</translation> <translation id="8757742102600829832">कनेक्ट होने के लिए कोई Chromebox चुनें</translation> <translation id="8757803915342932642">Google क्लाउड डिवाइस पर मौजूद डिवाइस</translation> +<translation id="8758895886513993540">यह फ़्लैग नियंत्रित करता है कि उपयोगकर्ता डेस्कटॉप साझा के लिए टैब चुन सकते हैं या नहीं.</translation> <translation id="8759408218731716181">एकाधिक प्रवेश सेट नहीं किया जा सकता</translation> <translation id="8759753423332885148">अधिक जानें.</translation> <translation id="8761567432415473239">Google सुरक्षित ब्राउज़िंग को <ph name="SITE" /> पर हाल ही में <ph name="BEGIN_LINK" />हानिकारक प्रोग्राम मिले हैं<ph name="END_LINK" />.</translation> @@ -5443,6 +5480,7 @@ <translation id="9074739597929991885">ब्लूटूथ</translation> <translation id="9074836595010225693">USB माउस कनेक्ट किया गया</translation> <translation id="9076523132036239772">क्षमा करें, आपके ईमेल या पासवर्ड का सत्यापन नहीं किया जा सका. पहले किसी नेटवर्क से कनेक्ट करने का प्रयास करें.</translation> +<translation id="9077132661879924646">Android पर एकीकृत मीडिया पाइपलाइन अक्षम करता है.</translation> <translation id="907841381057066561">पैकेजिंग के दौरान अस्थायी ज़िप फ़ाइल बनाने में विफल.</translation> <translation id="9083147368019416919">नामांकन हटाने में विफल रहा</translation> <translation id="9084064520949870008">विंडो के रूप में खोलें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 1a41f34..4f2604b 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Odaberite kvadratno područje slike.</translation> <translation id="1697532407822776718">Potpuno ste spremni!</translation> +<translation id="1697988819212986149">Prikazuje Googleovu ikonu pored stavki kontekstnog izbornika koje pokreću Googleove usluge.</translation> <translation id="1699274548822076330">Treba se koristiti zajedno s oznakom "trace-upload-url". UPOZORENJE: kada je omogućeno, Chrome će zapisivati podatke o izvedbi za svako kretanje i prenijeti ih na URL naveden oznakom "trace-upload-url". Praćenje može uključivati podatke koji otkrivaju identitet, primjerice, naslove i URL-ove web-lokacija koje posjećujete.</translation> <translation id="1699395855685456105">Hardverska revizija:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Ažurirajte zaporku za sinkronizaciju.</translation> <translation id="1788636309517085411">Upotrijebi zadano</translation> <translation id="1789575671122666129">Skočni prozori</translation> -<translation id="1790550373387225389">Otvori prezentacijski način</translation> <translation id="1792705092719258158">Omogući zrcalni način zaslona.</translation> <translation id="1793119619663054394">Jeste li sigurni da želite ukloniti "<ph name="PROFILE_NAME" />" i sve povezane Chrome podatke s ovog računala? To nije moguće poništiti.</translation> <translation id="179767530217573436">protekla 4 tjedna</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Promijenite postavke specifične za svoj uređaj i periferne uređaje.</translation> <translation id="2673135533890720193">čitati vašu povijest pregledavanja</translation> <translation id="2673589024369449924">Stvori prečac na radnoj površini za ovog korisnika</translation> +<translation id="2675358154061544447">Vrlo eksperimentalna podrška za generiranje iframeova za više web-lokacija u zasebnim procesima. U tom načinu dokumenti dijele proces generiranja samo ako potječu s iste web-lokacije.</translation> <translation id="2676946222714718093">Reprodukcija na uređaju</translation> <translation id="2678063897982469759">Ponovo omogući</translation> <translation id="2678246812096664977">Svi dodaci</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">Kako upravitelj zaporki upravlja automatskim popunjavanjem za vjerodajnicu sinkronizacije.</translation> <translation id="29611076221683977">Napadači koji se trenutačno nalaze na <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogu pokušati instalirati opasne programe na vaš Mac radi krađe ili brisanja vaših podataka (na primjer, fotografija, zaporki, poruka i brojeva kreditnih kartica).</translation> <translation id="2961695502793809356">Kliknite za kretanje prema naprijed, zadržite da biste vidjeli povijest</translation> +<translation id="296216853343927883">Upotreba robne marke Google u kontekstnom izborniku</translation> <translation id="2963151496262057773">Sljedeći dodatak ne reagira: <ph name="PLUGIN_NAME" />. Želite li ga zaustaviti?</translation> <translation id="2963783323012015985">Turska tipkovnica</translation> <translation id="2964193600955408481">Onemogući Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Kliknite prethodni gumb desnom tipkom da biste vidjeli ostale osobe.</translation> <translation id="3026050830483105579">Sve je tu.</translation> <translation id="302620147503052030">Prikaži gumb</translation> +<translation id="302781076327338683">Ponovno učitavanje predmemorije sa zaobilaženjem</translation> +<translation id="3030243755303701754">Nadzirani korisnik može istraživati web prema vašim smjernicama. Kao voditelj nadziranog korisnika u Chromeu možete sljedeće: + + • dopustiti ili zabraniti određene web-lokacije + • pregledati web-lokacije koje je nadzirani korisnik posjetio + • upravljati ostalim postavkama. + +Izradom nadziranog korisnika ne izrađuje se Google račun, a korisnikove oznake, povijest pregledavanja i ostale postavke neće mu biti dostupne na drugim uređajima putem Chrome sinkronizacije. Kad izradite novog nadziranog korisnika, možete upravljati njegovim postavkama u bilo kojem trenutku putem bilo kojeg uređaja na stranici <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Više informacija potražite u našem <ph name="BEGIN_LINK" />centru za pomoć<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agentica X</translation> <translation id="3031557471081358569">Odaberi stavke za uvoz:</translation> <translation id="3033332627063280038">Omogućuje eksperimentalnu implementaciju upravljanja predmemorijom (Cache-Control): direktiva za davanje odgovora iz neaktivne predmemorije tijekom ponovne potvrde. Njome se dopušta poslužiteljima da odrede resurse koji se mogu ponovo potvrditi u pozadini radi poboljšanja latencije.</translation> @@ -1648,7 +1660,6 @@ <translation id="3324301154597925148">Je li to stranica pretraživanja koju ste očekivali?</translation> <translation id="3324684065575061611">(Onemogućeno pravilom tvrtke)</translation> <translation id="3326821416087822643">Komprimiranje datoteke <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Izađi iz prezentacijskog načina</translation> <translation id="3330686263988132416">Izvorno STUN zaglavlje WebRTC-a</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Omogući zrcalni način zaslona. Taj zaslon preokreće sliku na zaslonu vodoravno.</translation> @@ -1693,6 +1704,7 @@ <translation id="3392020134425442298">Oporavi zlonamjernu datoteku</translation> <translation id="3394150261239285340">Host <ph name="HOST" /> želi upotrijebiti vaš fotoaparat i mikrofon.</translation> <translation id="3394279550557729862">Omogućuje podršku za upotrebu izvornih obavijesti i centra obavijesti na platformama na kojima su dostupni.</translation> +<translation id="3394862755749546286">Onemogućuje objedinjeni medijski kanal na Androidu (za Android i računala).</translation> <translation id="3396331542604645348">Odabrani pisač nije dostupan ili nije ispravno instaliran. Provjerite pisač ili pokušajte odabrati neki drugi.</translation> <translation id="3399597614303179694">Makedonska tipkovnica</translation> <translation id="3401130144947259741">Ako je omogućeno, događaji praćenja izvozit će se u Praćenje događaja u sustavu Windows (ETW), a tada ih mogu snimati alati kao što su UIForETW ili Xperf.</translation> @@ -1903,7 +1915,6 @@ <translation id="367645871420407123">ostavite prazno ako želite postaviti korijensku zaporku na zadanu vrijednost testne slike</translation> <translation id="3678156199662914018">Proširenje: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Malteška tipkovnica</translation> -<translation id="3680173818488851340">Iframeovi niskog prioriteta.</translation> <translation id="3683524264665795342">Zahtjev aplikacije <ph name="APP_NAME" /> za dijeljenje zaslona</translation> <translation id="3685122418104378273">Sinkronizacija Google diska onemogućena je prema zadanim postavkama kada se upotrebljavaju mobilni podaci.</translation> <translation id="3685387984467886507">Zapamti određeno vrijeme odluke da se nastavi s postupkom iako se pojave SSL pogreške</translation> @@ -1952,6 +1963,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> sada će se pojaviti na konzoli administratora</translation> <translation id="3741243925913727067">Izrada sigurnosnih kopija fotografija i videozapisa s medijskog uređaja na Google disku.</translation> <translation id="3743492083222969745">Omogućivanje/onemogućivanje opcije pisanja kretnjama na stranici postavki za virtualnu tipkovnicu.</translation> +<translation id="3744111561329211289">Sinkronizacija u pozadini</translation> <translation id="3749289110408117711">Naziv datoteke</translation> <translation id="3751427701788899101">Veza je prekinuta</translation> <translation id="3751522270321808809">Ta web-lokacija može pokušati na prijevaru ukrasti vaše podatke (primjeri: zaporke, poruke ili brojeve kreditnih kartica).</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">Prijavi još jedan račun</translation> <translation id="4219614746733932747">Ako je omogućeno, Blink upotrebljava svoje mehanizme zumiranja kako bi skalirao sadržaj na temelju faktora skaliranja za uređaj.</translation> <translation id="4220865787605972627">Dopušta kalibraciju boja na zaslonu ako zaslon podržava tu značajku.</translation> +<translation id="4232692576734035989">Vrlo eksperimentalni način izvedbe u kojem se iframeovi za više web-lokacija zadržavaju u zasebnom procesu od glavnog dokumenta. U tom je načinu iframeovima s različitih web-lokacija trećih strana dopušteno dijeljenje procesa.</translation> <translation id="4235200303672858594">Cijeli zaslon</translation> <translation id="4235813040357936597">Dodaj račun za profil <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ne može se prikazati na ovom jeziku</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">Odbaci fotografiju</translation> <translation id="4509345063551561634">Lokacija:</translation> <translation id="4514542542275172126">Postavite novog nadziranog korisnika</translation> +<translation id="4514914692061505365">Nametni upotrebu PNaClovog brzog prevoditelja Subzero za sve pexe datoteke.</translation> <translation id="4518677423782794009">Ruši li se Chrome, prikazuje li neuobičajene polazne stranice, alatne trake ili neočekivane oglase koje ne možete isključiti ili na neki drugi način utječe na pregledavanje? Možda možete riješiti taj problem pomoću Chromeova alata za čišćenje.</translation> <translation id="452039078290142656">nepoznati uređaji dobavljača <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalji</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">Aplikacije i proširenja može mijenjati samo voditelj (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Pretvaranje u EMF</translation> <translation id="4602466770786743961">Uvijek dopusti hostu <ph name="HOST" /> pristup kameri i mikrofonu</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Nema veze s internetom</translation> <translation id="4608500690299898628">&Traži...</translation> <translation id="4610637590575890427">Jeste li mislili <ph name="SITE" /></translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">Prijava nije uspjela. Povežite se s internetom i pokušajte ponovo.</translation> <translation id="5063180925553000800">Novi PIN:</translation> <translation id="5067867186035333991">Pitaj ako <ph name="HOST" /> želi pristupiti mikrofonu</translation> +<translation id="5068918910148307423">Ne dopuštaj nedavno zatvorenim web-lokacijama dovršetak slanja i primanja podataka</translation> <translation id="507075806566596212">Registrirat ćete ovaj uređaj <ph name="DEVICE_TYPE" /> na Googleu kako biste omogućili njegovo daljinsko lociranje, brisanje i zaključavanje. Uređaj će se morati ponovo pokrenuti. Želite li nastaviti?</translation> <translation id="5072836811783999860">Prikaži upravljane oznake</translation> <translation id="5074318175948309511">Ovu stranicu možda će biti potrebno ponovo učitati kako bi nove postavke stupile na snagu.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">Nađi prethodni tekst</translation> <translation id="5228076606934445476">Nešto nije u redu s uređajem. Da biste uklonili tu pogrešku, morat ćete ponovo pokrenuti uređaj i pokušati još jednom.</translation> <translation id="5228962187251412618">Samo provjera na mreži</translation> +<translation id="5229622432348746578">Onemogući audio za dijeljenje radne površine</translation> <translation id="5230516054153933099">Prozor</translation> <translation id="5232178406098309195">Kada upotrebljavate zvučne aktivacijske naredbe kao što je "OK Google" ili dodirivanje ikone mikrofona, vaša privatna Glasovna i audioaktivnost pohranjuje neke glasovne i ostale zvučne podatke na vaš račun. Pohranit će se snimka govora i zvuka koji će uslijediti i nekoliko sekundi prije toga.</translation> <translation id="523299859570409035">Iznimke za obavijesti</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">Zadrži Wi-Fi tijekom mirovanja</translation> <translation id="5558129378926964177">Zoom &In (Povećaj)</translation> <translation id="556042886152191864">Gumb</translation> +<translation id="5562781907504170924">Kartica je povezana s Bluetooth uređajem.</translation> <translation id="5565871407246142825">Kreditne kartice</translation> <translation id="5567989639534621706">Predmemorije aplikacije</translation> <translation id="5568069709869097550">Ne mogu se prijaviti</translation> @@ -3308,6 +3326,7 @@ <translation id="5803531701633845775">Odaberite rečenice iz pozadine, bez pomicanja pokazivača</translation> <translation id="5804241973901381774">Dozvoljeno</translation> <translation id="580571955903695899">Poredaj ponovo po naslovu</translation> +<translation id="5808982448801399019">Autorizacija nije uspjela</translation> <translation id="580961539202306967">Pitaj me kada mi web-lokacija želi slati push poruke (preporučeno)</translation> <translation id="5815645614496570556">X.400 adresa</translation> <translation id="5817397429773072584">tradicionalni kineski</translation> @@ -3577,6 +3596,7 @@ <translation id="6243774244933267674">Poslužitelj nije dostupan</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Ažuriranje je spremno</translation> +<translation id="6248400709929739064">Omogući titlove</translation> <translation id="6248988683584659830">Pretraživanje postavki</translation> <translation id="6251870443722440887">Rukuje GDI</translation> <translation id="6251889282623539337">Uvjeti pružanja usluge domene <ph name="DOMAIN" /></translation> @@ -3601,6 +3621,7 @@ <translation id="6277105963844135994">Privremeni prekid mreže</translation> <translation id="6277518330158259200">I&zradi snimku zaslona</translation> <translation id="6279183038361895380">Pritisnite |<ph name="ACCELERATOR" />| da bi se prikazao pokazivač</translation> +<translation id="6280215091796946657">Prijavite se drugim računom</translation> <translation id="6281743458679673853">Eksperiment kojim svi API-ji odražavaju vidljivi dio izgleda. Time će svojstva "window.scroll" postati razmjerna vidljivom dijelu izgleda.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Novi pisač na vašoj mreži}one{Novi pisači na vašoj mreži}few{Novi pisači na vašoj mreži}other{Novi pisači na vašoj mreži}}</translation> <translation id="6285395082104474418">Traka statusa prikazuje trenutačno stanje vaše mreže, baterije i ostalog.</translation> @@ -3682,6 +3703,9 @@ <translation id="6418160186546245112">Vraćanje na prethodno instaliranu verziju proizvoda <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Trajno ukloni pristup za sve aplikacije</translation> <translation id="6418505248408153264">Omogući povijest materijalnog dizajna</translation> +<translation id="6419288379019356534">Uređajem upravlja <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Kliknite "Dalje" da biste se nastavili prijavljivati na <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> račun.</translation> <translation id="6419902127459849040">srednjeeuropski</translation> <translation id="6420676428473580225">Dodavanje na radnu površinu</translation> <translation id="6422329785618833949">Fotografija je okrenuta</translation> @@ -3842,7 +3866,6 @@ <translation id="6662016084451426657">Pogreška u sinkronizaciji: obratite se administratoru radi omogućivanja sinkronizacije.</translation> <translation id="6663792236418322902">Zaporka koju odaberete bit će potrebna za kasnije vraćanje ove datoteke. Sačuvajte je na sigurnom mjestu.</translation> <translation id="6664237456442406323">Nažalost, vaše je računalo konfigurirano pogrešno oblikovanim ID-om hardvera. To sprječava ažuriranje OS-a Chrome najnovijim sigurnosnim popravcima pa bi vaše računalo <ph name="BEGIN_BOLD" />moglo biti ranjivo na zlonamjerne napade<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Smanjuje prioritet učitavanja resursa iframea.</translation> <translation id="6666647326143344290">sa svojim Google Računom</translation> <translation id="6675665718701918026">Pokazivački je uređaj povezan</translation> <translation id="6677037229676347494">Očekivan je ID "<ph name="EXPECTED_ID" />", ali je ID bio "<ph name="NEW_ID" />".</translation> @@ -3935,6 +3958,7 @@ <translation id="6825883775269213504">Ruski</translation> <translation id="6827236167376090743">Videozapis će se reproducirati unedogled.</translation> <translation id="6828153365543658583">Ograniči prijavu na sljedeće korisnike:</translation> +<translation id="6828434191343384461">Odabrani podaci uklonjeni su iz Chromea i sa sinkroniziranih uređaja. Na Google računu možda postoje drugi oblici povijesti pregledavanja, primjerice pretraživanja i aktivnosti s drugih Googleovih usluga, na stranici <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Postavljanje automatskih ažuriranja za sve korisnike nije uspjelo (pogreška prilikom izvršavanja pripremne provjere: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Pomoć za uređaj <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Prijavite u svoju organizaciju</translation> @@ -4014,6 +4038,7 @@ <translation id="6965382102122355670">U redu</translation> <translation id="6965648386495488594">Priključak</translation> <translation id="6965978654500191972">Uređaj</translation> +<translation id="6969104364835835175">Nametni PNaCl Subzero</translation> <translation id="6970230597523682626">Bugarski</translation> <translation id="6970480684834282392">Vrsta pokretanja</translation> <translation id="6970856801391541997">Ispis određenih stranica</translation> @@ -4096,10 +4121,12 @@ <translation id="7057058088140140610">Kreditne kartice i adrese s Google Paymentsa</translation> <translation id="7059858479264779982">Postavi na automatsko pokretanje</translation> <translation id="7061692898138851896">Automatski spremi zaporke</translation> +<translation id="7062222374113411376">Dopusti nedavno zatovrenim web-lokacijama dovršetak slanja i primanja podataka</translation> <translation id="7063129466199351735">Obrada prečaca...</translation> <translation id="7065223852455347715">Ovaj je uređaj zaključan u načinu koji sprječava registraciju u organizaciji. Ako želite registrirati uređaj, prvo morate izvršiti njegov oporavak.</translation> <translation id="7065534935986314333">O sustavu</translation> <translation id="7066944511817949584">Povezivanje s uređajem "<ph name="DEVICE_NAME" />" nije uspjelo.</translation> +<translation id="7067725467529581407">Ne prikazuj mi to više.</translation> <translation id="7070804685954057874">Izravni unos</translation> <translation id="7072010813301522126">Naziv prečaca</translation> <translation id="7072025625456903686">Dopusti sve ili prilagodi</translation> @@ -4371,6 +4398,7 @@ <translation id="7489605380874780575">Provjera prikladnosti</translation> <translation id="749028671485790643">Osoba <ph name="VALUE" /></translation> <translation id="7491962110804786152">kart</translation> +<translation id="7493386493263658176">Proširenje <ph name="EXTENSION_NAME" /> možda prikuplja cjelokupni tekst koji unesete, uključujući osobne podatke kao što su zaporke i brojevi kreditnih kartica. Želite li koristiti to proširenje?</translation> <translation id="7495778526395737099">Jeste li zaboravili staru zaporku?</translation> <translation id="7503191893372251637">Vrsta Netscape certifikata</translation> <translation id="7503821294401948377">Nije uspjelo učitavanje ikone "<ph name="ICON" />" za radnju preglednika.</translation> @@ -4422,6 +4450,7 @@ <translation id="756445078718366910">Otvori prozor preglednika</translation> <translation id="7564847347806291057">Završi proces</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chromeovi su podaci izbrisani</translation> <translation id="7568790562536448087">Ažuriranje stavke</translation> <translation id="7573172247376861652">Punjenje baterije</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4551,6 +4580,7 @@ <translation id="7786207843293321886">Izlazak iz sesije gosta</translation> <translation id="7786889348652477777">&Ponovo učitaj aplikaciju</translation> <translation id="7787129790495067395">Trenutno upotrebljavate zaporku. Ako ste zaboravili svoju zaporku, možete poništiti sinkronizaciju kako biste pomoću Google Nadzorne ploče izbrisali svoje podatke iz Google poslužitelja.</translation> +<translation id="7787308148023287649">Prikaz na drugom zaslonu</translation> <translation id="7788080748068240085">Da biste izvenmrežno spremili datoteku "<ph name="FILE_NAME" />", morate osloboditi još <ph name="TOTAL_FILE_SIZE" /> prostora:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />otkvačite datoteke kojima više ne morate izvanmrežno pristupati<ph name="MARKUP_3" /> <ph name="MARKUP_4" />izbrišite datoteke iz mape Preuzimanja.<ph name="MARKUP_5" /></translation> @@ -4619,6 +4649,7 @@ <translation id="7878999881405658917">Google je poslao obavijest na taj telefon. Napominjemo da uz Bluetooth vaš telefon može držati vaš <ph name="DEVICE_TYPE" /> otključanim s udaljenosti veće od 9 metara. U slučajevima kada to može predstavljati problem, možete <a>privremeno onemogućiti tu značajku</a>.</translation> <translation id="7879478708475862060">Praćenje načina unosa</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" dodaje sljedeće aplikacije i proširenja:</translation> +<translation id="7881969471599061635">Onemogući titlove</translation> <translation id="7884988936047469945">Eksperimentalne značajke pristupačnosti</translation> <translation id="7885253890047913815">Nedavna odredišta</translation> <translation id="7885283703487484916">Vrlo kratka</translation> @@ -4982,6 +5013,7 @@ <translation id="839736845446313156">Prijava</translation> <translation id="8398790343843005537">Pronađite svoj telefon</translation> <translation id="8398877366907290961">Svejedno nastavi</translation> +<translation id="8399276228600040370">Prijavite se računom spremljenim uz <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Neoznačen okvir za izbor</translation> <translation id="8408402540408758445">Prethodno dohvati rezultate pretraživanja</translation> <translation id="8410073653152358832">Upotrijebi ovaj telefon</translation> @@ -5068,6 +5100,7 @@ <translation id="8545211332741562162">Omogućavanje web-stranica za upotrebu eksperimentalnih značajki JavaScripta.</translation> <translation id="8545575359873600875">Nažalost, vaša zaporka nije potvrđena. Upravitelj ovog nadziranog korisnika možda je nedavno promijenio zaporku. U tom slučaju nova zaporka primjenjivat će se od sljedeće prijave. Pokušajte upotrijebiti staru zaporku.</translation> <translation id="8546306075665861288">Predmemorija slike</translation> +<translation id="854653344619327455">Kad je ta oznaka uključena, prozor alata za odabir dijeljenja radne površine neće dopustiti korisniku da odabere hoće li dijeliti audio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Znak</translation> <translation id="855081842937141170">Označi karticu</translation> @@ -5098,6 +5131,7 @@ <translation id="8589311641140863898">API-ji eksperimentalnih proširenja</translation> <translation id="8590375307970699841">Postavi automatsko ažuriranje</translation> <translation id="8592071947729879125">Ograniči dopuštenja iframea.</translation> +<translation id="8592125506633137593">Izoliranje glavnog dokumenta</translation> <translation id="8594787581355215556">Prijavljeni ste e-adresom <ph name="USER_EMAIL_ADDRESS" />. Upravljajte svojim sinkroniziranim podacima na <ph name="BEGIN_LINK" />Google nadzornoj ploči<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Prilagođene datoteke</translation> <translation id="8596785155158796745">Mikrofon trenutačno nije dostupan. <ph name="BEGIN_LINK" />Upravljanje mikrofonom<ph name="END_LINK" /></translation> @@ -5170,6 +5204,7 @@ <translation id="8688579245973331962">Ne vidite svoje ime?</translation> <translation id="8688644143607459122">Klikom na Nastavi prihvaćate upotrebu Google Paymentsa. Informacije o vašem računalu (uključujući njegovu lokaciju) dijelit će se s Google Paymentsom radi zaštite od prijevare.</translation> <translation id="8689102680909215706">Proširenje "<ph name="EXTENSION_NAME" />" instalirano je daljinski.</translation> +<translation id="868926756781121513">Dijeljenje radne površine s izvorom kartice</translation> <translation id="8689341121182997459">Ističe:</translation> <translation id="8690754533598178758">Adobe Flash Player upotrebljava različite iznimke za mikrofon.</translation> <translation id="8691686986795184760">(Omogućeno pravilom tvrtke)</translation> @@ -5213,6 +5248,7 @@ <translation id="8737685506611670901">otvoriti veze za protokol <ph name="PROTOCOL" /> umjesto <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Precizira položaj pokreta dodira radi nadomještanja dodira čija je razlučivost u usporedbi s mišem slaba.</translation> +<translation id="8741995161408053644">Na Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Prikaži proširene opcije unosa na polici.</translation> <translation id="874420130893181774">tradicionalni pinyin način unosa</translation> <translation id="8744525654891896746">Odaberite avatar za tog zaštićenog korisnika</translation> @@ -5226,6 +5262,7 @@ <translation id="8757640015637159332">Ulazak u javnu sesiju</translation> <translation id="8757742102600829832">Odaberi Chromebox za povezivanje</translation> <translation id="8757803915342932642">Uređaj na usluzi Google Cloud Devices</translation> +<translation id="8758895886513993540">Ta oznaka upravlja time mogu li korisnici odabrati karticu za dijeljenje radne površine.</translation> <translation id="8759408218731716181">Nije moguće postaviti višestruku prijavu</translation> <translation id="8759753423332885148">Saznajte više.</translation> <translation id="8761567432415473239">Googleovo Sigurno pregledavanje nedavno je <ph name="BEGIN_LINK" />pronašlo štetne programe<ph name="END_LINK" /> na web-lokaciji <ph name="SITE" />.</translation> @@ -5436,6 +5473,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB miš povezan</translation> <translation id="9076523132036239772">Nažalost, nismo uspjeli provjeriti vašu e-poštu ili zaporku. Pokušajte se prvo povezati s mrežom.</translation> +<translation id="9077132661879924646">Onemogući objedinjeni medijski kanal na Androidu.</translation> <translation id="907841381057066561">Nije uspjelo stvaranje privremene sažete datoteke tijekom sažimanja.</translation> <translation id="9083147368019416919">Poništavanje registracije nije uspjelo</translation> <translation id="9084064520949870008">Otvori kao prozor</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index cc52db9e..e719976 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Válasszon ki a képen egy négyszög alakú tartományt.</translation> <translation id="1697532407822776718">Máris elkészült!</translation> +<translation id="1697988819212986149">Megjelenít egy Google ikont a helyi menü mellett a Google szolgáltatásaival.</translation> <translation id="1699274548822076330">A trace-upload-url jelölővel együtt kell használni. FIGYELEM: Ha engedélyezve van, a Chrome minden navigációs teljesítményadatot rögzít, és feltölti a trace-upload-url jelölő által meghatározott URL-re. A nyom személyazonosításra alkalmas adatokat is tartalmazhat, így például a felkeresett webhelyek címét és URL-jét.</translation> <translation id="1699395855685456105">Hardver ellenőrzése:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Kérjük, frissítse szinkronizálási összetett jelszavát.</translation> <translation id="1788636309517085411">Alapbeállítás használata</translation> <translation id="1789575671122666129">Előugró ablakok</translation> -<translation id="1790550373387225389">Belépés a prezentáció módba</translation> <translation id="1792705092719258158">Tükrözött képernyő mód bekapcsolása.</translation> <translation id="1793119619663054394">Biztosan törli a(z) „<ph name="PROFILE_NAME" />” profilt és annak összes Chrome-adatát erről a számítógépről? A művelet nem vonható vissza.</translation> <translation id="179767530217573436">elmúlt 4 hét</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Az eszközére és perifériáira érvényes beállítások módosítása.</translation> <translation id="2673135533890720193">A böngészési előzmények olvasása</translation> <translation id="2673589024369449924">Asztali parancsikon létrehozása ehhez a felhasználóhoz</translation> +<translation id="2675358154061544447">Erősen kísérleti támogatás webhelyek közti iframe-ek megjelenítéséhez külön folyamatban. Ebben a módban csak akkor osztják meg a dokumentumok a megjelenítő folyamatot, ha ugyanarról a webhelyről származnak.</translation> <translation id="2676946222714718093">Lejátszás folyamatban a következőn:</translation> <translation id="2678063897982469759">Újraengedélyezés</translation> <translation id="2678246812096664977">Minden beépülő modul</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">Hogyan szabályozza a jelszókezelő a szinkronizálási hitelesítő adatok automatikus kitöltését.</translation> <translation id="29611076221683977">Előfordulhat, hogy a(z) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> webhely támadói veszélyes programokat kísérelnek meg telepíteni Mac számítógépére, amelyek ellopják vagy törlik adatait (például fotóit, jelszavait, üzeneteit és hitelkártyaadatait).</translation> <translation id="2961695502793809356">Kattintson, ha tovább szeretne lépni; tartsa lenyomva, ha látni szeretné az előzményeket</translation> +<translation id="296216853343927883">Google-márkajegyek a helyi menüben</translation> <translation id="2963151496262057773">Az alábbi beépülő modulok nem válaszolnak: <ph name="PLUGIN_NAME" />. Szeretné leállítani?</translation> <translation id="2963783323012015985">Török billentyűzet</translation> <translation id="2964193600955408481">Wi-Fi letiltása</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">A többi felhasználó megtekintéséhez kattintson a fenti gombra az egér jobb gombjával.</translation> <translation id="3026050830483105579">Itt mindent megtalálhat.</translation> <translation id="302620147503052030">Gomb megjelenítése</translation> +<translation id="302781076327338683">Újratöltés a gyorsítótár megkerülésével</translation> +<translation id="3030243755303701754">A felügyelt felhasználók az Ön felügyelete mellett fedezhetik fel az internetet. A felügyelt felhasználó kezelőjeként a Chrome-ban a következőkre nyílik lehetősége: + + • bizonyos webhelyek engedélyezése vagy tiltása, + • a felügyelt felhasználó által felkeresett webhelyek áttekintése, valamint + • egyéb beállítások kezelése. + +A felügyelt felhasználó létrehozása nem jelenti Google-fiók létrehozását is, és a felügyelt felhasználók könyvjelzői, böngészési előzményei és más beállításai nem lesznek szinkronizálva a többi eszközükön a Chrome-szinkronizálás funkció segítségével. Miután létrehozott egy új felügyelt felhasználót, bármikor, bármely eszközről kezelheti beállításait a következő címen: <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Ha további információt szeretne, látogasson el a <ph name="BEGIN_LINK" />Súgóba<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">X ügynök</translation> <translation id="3031557471081358569">Válassza ki az importálandó elemeket:</translation> <translation id="3033332627063280038">A Cache-Control „újraérvényesítés közben elévült” direktíva kísérleti megvalósításának engedélyezése. Ez lehetővé teszi, hogy a szerverek meghatározzák, hogy egyes források érvényesítése a háttérben folyjon a várakozási idő javításának érdekében.</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">Erre a keresési oldalra számított?</translation> <translation id="3324684065575061611">(Központilag meghatározott irányelv által letiltva)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> tömörítése...</translation> -<translation id="3330206034087160972">Kilépés a prezentáció módból</translation> <translation id="3330686263988132416">WebRTC Stun eredetfejléc</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">A tükrözött képernyő mód bekapcsolása. Ez a mód vízszintesen tükrözi a képernyőn megjelenő képet.</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">Rosszindulatú fájl helyreállítása</translation> <translation id="3394150261239285340">A(z) <ph name="HOST" /> weboldal használni kívánja a kamerát és a mikrofont.</translation> <translation id="3394279550557729862">Natív értesítések és értesítési központ használatához biztosított támogatás engedélyezése azokon a platformokon, ahol ezek rendelkezésre állnak.</translation> +<translation id="3394862755749546286">Letiltja az egyesített (androidos és asztali) média-adatcsatornát Androidon.</translation> <translation id="3396331542604645348">A kiválasztott nyomtató nem érhető el, vagy nincs megfelelően telepítve. Ellenőrizze a nyomtatót, vagy válasszon egy másikat.</translation> <translation id="3399597614303179694">Macedón billentyűzet</translation> <translation id="3401130144947259741">Ha engedélyezi, a követett eseményeket a rendszer az ETW-be (Event Tracing for Windows) exportálja, és a UIForETW vagy az Xperf segítségével rögzíthetők.</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">hagyja üresen, ha a root jelszót az alapértelmezett tesztkép értékére szeretné állítani</translation> <translation id="3678156199662914018">Bővítmény: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Máltai billentyűzet</translation> -<translation id="3680173818488851340">Alacsony prioritású iframe-ek.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> – Képernyő-megosztási kérés</translation> <translation id="3685122418104378273">A Google Drive szinkronizálása alapértelmezés szerint le van tiltva mobiladat-kapcsolat használatakor.</translation> <translation id="3685387984467886507">Az SSL-hibák esetén történő folytatásra vonatkozó döntések megjegyzése adott időtartamra.</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859">A(z) <ph name="DEVICE_NAME" /> mostantól megjelenik a Kezelői konzolban</translation> <translation id="3741243925913727067">Biztonsági másolat készítése az adathordozón lévő fotókról és videókról a Google Drive-on.</translation> <translation id="3743492083222969745">A kézmozdulatokkal való gépelés engedélyezése/letiltása a virtuális billentyűzet beállításainak oldalán.</translation> +<translation id="3744111561329211289">Szinkronizálás a háttérben</translation> <translation id="3749289110408117711">Fájlnév</translation> <translation id="3751427701788899101">A kapcsolat megszakadt</translation> <translation id="3751522270321808809">Ez a webhely megpróbálhatja becsapni Önt, hogy ellopja adatait (például jelszavait, üzeneteit vagy hitelkártya-adatait).</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">Bejelentkezés másik fiókba</translation> <translation id="4219614746733932747">Ha engedélyezve van, a Blink a saját nagyítási módszerét használja az eszköz skálázási tényezőjéhez igazodó tartalomméretezésre.</translation> <translation id="4220865787605972627">A kijelző színkalibrálásának engedélyezése, ha a kijelző támogatja a funkciót.</translation> +<translation id="4232692576734035989">Erősen kísérleti mód, amelyben a különböző webhelyekről származó iframe-eket a felső dokumentumtól elkülönített folyamatban tárolja a rendszer. Ebben a módban a különböző webhelyekről származó iframe-ek számára engedélyezett a folyamatmegosztás.</translation> <translation id="4235200303672858594">Teljes képernyő</translation> <translation id="4235813040357936597">Fiók hozzáadása a következőhöz: <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">A <ph name="PRODUCT_NAME" /> nem jeleníthető meg ezen a nyelven</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">Fotó elvetése</translation> <translation id="4509345063551561634">Hely:</translation> <translation id="4514542542275172126">Új felügyelt felhasználó beállítása</translation> +<translation id="4514914692061505365">A PNaCl gyors Subzero fordítójának kényszerített használata minden pexe-fájlnál.</translation> <translation id="4518677423782794009">Összeomlott a Chrome, szokatlan kezdőlapokat, eszköztárat mutat, vagy váratlan hirdetéseket jelenít meg, amelyektől nem tud megszabadulni, esetleg bármilyen más módon befolyásolja a böngészési élményt? Megoldhatja ezeket a problémákat a Chrome Szoftvereltávolító eszköz futtatásával.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> szolgáltatótól származó ismeretlen eszközök</translation> <translation id="4522570452068850558">Részletek</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">Az alkalmazásokat és bővítményeket csak a kezelő (<ph name="CUSTODIAN_NAME" />) módosíthatja.</translation> <translation id="4601242977939794209">EMF-konvertáló</translation> <translation id="4602466770786743961">A(z) <ph name="HOST" /> mindig hozzáférhet a kamerához és mikrofonhoz</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Nincs internetkapcsolat</translation> <translation id="4608500690299898628">&Keresés...</translation> <translation id="4610637590575890427">Valójában ide szeretett volna menni: <ph name="SITE" />?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">A bejelentkezés nem sikerült. Kérjük, kapcsolódjon az internethez, majd próbálja újra.</translation> <translation id="5063180925553000800">Új PIN-kód:</translation> <translation id="5067867186035333991">Kérdezzen rá, ha a(z) <ph name="HOST" /> hozzá szeretne férni a mikrofonhoz</translation> +<translation id="5068918910148307423">Ne engedélyezze a nemrég bezárt webhelyek számára az adatküldés és -fogadás befejezését</translation> <translation id="507075806566596212">A <ph name="DEVICE_TYPE" /> Google-regisztrációjára készül, amivel engedélyezi az eszköz távoli helymeghatározásának, törlésének és zárolásának lehetőségét. A művelet végrehajtásához újra kell indítania az eszközt. Folytatja?</translation> <translation id="5072836811783999860">Kezelt könyvjelzők megjelenítése</translation> <translation id="5074318175948309511">Előfordulhat, hogy az új beállítások életbe lépéséhez az oldal újratöltése szükséges.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">Előző szöveg keresése</translation> <translation id="5228076606934445476">Valami gond van az eszközzel. A hiba javításához indítsa újra az eszközt, majd próbálja újra.</translation> <translation id="5228962187251412618">Csak internetes ellenőrzés</translation> +<translation id="5229622432348746578">Hang letiltása az asztal megosztásánál</translation> <translation id="5230516054153933099">Ablak</translation> <translation id="5232178406098309195">Ha hangos parancsokat (például az „Ok Google” funkciót) használ, vagy ha megérinti a mikrofon ikont, akkor privát Hang- és audiotevékenység funkciója tárolja a hang- és audiojelek egy részét a fiókjában. A következő beszédet/hangot, valamint az előtte szereplő néhány másodpercet rögzíti a rendszer.</translation> <translation id="523299859570409035">Értesítések kivételei</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">Maradjon bekapcsolva a Wi-Fi alvó üzemmódban is</translation> <translation id="5558129378926964177">&Nagyítás</translation> <translation id="556042886152191864">Gomb</translation> +<translation id="5562781907504170924">Ez a lap Bluetooth-eszközhöz csatlakozik.</translation> <translation id="5565871407246142825">Hitelkártyák</translation> <translation id="5567989639534621706">Alkalmazás-gyorsítótárak</translation> <translation id="5568069709869097550">Nem sikerült a bejelentkezés</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">Kifejezések kiválasztása hátulról, a kurzor mozgatása nélkül</translation> <translation id="5804241973901381774">Engedélyek</translation> <translation id="580571955903695899">Rendezés cím alapján</translation> +<translation id="5808982448801399019">A hitelesítés sikertelen</translation> <translation id="580961539202306967">Kérdezzen meg, amikor egy webhely push üzeneteket szeretne küldeni nekem (ajánlott)</translation> <translation id="5815645614496570556">X.400 cím</translation> <translation id="5817397429773072584">Hagyományos kínai</translation> @@ -3578,6 +3597,7 @@ <translation id="6243774244933267674">A szerver nem érhető el</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">A frissítés készen áll</translation> +<translation id="6248400709929739064">Feliratok engedélyezése</translation> <translation id="6248988683584659830">Keresési beállítások</translation> <translation id="6251870443722440887">GDI azonosítók</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> – Általános szerződési feltételek</translation> @@ -3602,6 +3622,7 @@ <translation id="6277105963844135994">Hálózati időtúllépés</translation> <translation id="6277518330158259200">&Képernyőkép készítése</translation> <translation id="6279183038361895380">Az egérmutató megjelenítéséhez nyomja meg a következő billentyűt: |<ph name="ACCELERATOR" />|</translation> +<translation id="6280215091796946657">Bejelentkezés másik fiókkal</translation> <translation id="6281743458679673853">Arra irányuló kísérlet, hogy valamennyi API az elrendezés látható területét tükrözze – ennek hatására a window.scroll tulajdonságok az elrendezés látható területéhez fognak viszonyulni.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Új nyomtató a hálózaton}other{Új nyomtatók a hálózaton}}</translation> <translation id="6285395082104474418">Az állapottálca megjeleníti a hálózat, az akkumulátor és egyebek aktuális állapotát.</translation> @@ -3683,6 +3704,9 @@ <translation id="6418160186546245112">Visszatérés a(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> korábban telepített verziójához</translation> <translation id="6418481728190846787">Az összes alkalmazás hozzáférésének végleges eltávolítása</translation> <translation id="6418505248408153264">A Material Design előzményeinek engedélyezése</translation> +<translation id="6419288379019356534">Ezt az eszközt a következő kezeli: <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Kérjük, kattintson a „Tovább” lehetőségre a(z) <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> fiókba való bejelentkezés folytatásához.</translation> <translation id="6419902127459849040">Közép-európai</translation> <translation id="6420676428473580225">Hozzáadás az asztalhoz</translation> <translation id="6422329785618833949">Fénykép megfordítva</translation> @@ -3843,7 +3867,6 @@ <translation id="6662016084451426657">Szinkronizálási hiba: kérjük, forduljon rendszergazdájához a szinkronizálás engedélyezésével kapcsolatban.</translation> <translation id="6663792236418322902">A most választott jelszó ahhoz szükséges, hogy ezt a fájlt később visszaállíthassa. Tárolja biztonságos helyen.</translation> <translation id="6664237456442406323">Sajnos számítógépe nem megfelelő formátumú hardverazonosítóval van konfigurálva. Emiatt a Chrome OS nem tud frissülni a legújabb biztonsági javításokkal, és számítógépét <ph name="BEGIN_BOLD" />rosszindulatú támadások érhetik<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Csökkenti az iframe-források betöltési prioritását</translation> <translation id="6666647326143344290">Google Fiókjával</translation> <translation id="6675665718701918026">Mutatóeszköz csatlakoztatva</translation> <translation id="6677037229676347494">A várt azonosító "<ph name="EXPECTED_ID" />", de a kapott azonosító "<ph name="NEW_ID" />".</translation> @@ -3936,6 +3959,7 @@ <translation id="6825883775269213504">orosz</translation> <translation id="6827236167376090743">A videó lejátszása a végtelenségig folytatódik.</translation> <translation id="6828153365543658583">Bejelentkezés korlátozása a következő felhasználókra:</translation> +<translation id="6828434191343384461">A kiválasztott adatokat eltávolítottuk a Chrome-ból és a szinkronizált eszközökről. Előfordulhat, hogy Google-fiókjában (a <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> címen) még szerepelnek a böngészési előzmények egyéb formái, így például az egyéb Google-szolgáltatások keresései és tevékenységei.</translation> <translation id="6828860976882136098">Nem sikerült beállítani az automatikus frissítéseket az összes felhasználó számára (előzetes lekérdezés végrehajtási hibája: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Kérjen segítséget <ph name="DEVICE_TYPE" /> eszközéhez.</translation> <translation id="6829270497922309893">Csatlakozás a szervezetén belül</translation> @@ -4016,6 +4040,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Készülék</translation> +<translation id="6969104364835835175">A PNaCl Subzero kényszerítése</translation> <translation id="6970230597523682626">bolgár</translation> <translation id="6970480684834282392">Kezdési típus</translation> <translation id="6970856801391541997">Adott oldalak nyomtatása</translation> @@ -4098,10 +4123,12 @@ <translation id="7057058088140140610">Google Payments szolgáltatást használó hitelkártyák és címek</translation> <translation id="7059858479264779982">Beállítás automatikus indításra</translation> <translation id="7061692898138851896">Jelszavak automatikus mentése</translation> +<translation id="7062222374113411376">Annak engedélyezése, hogy a nemrégiben bezárt webhelyek befejezhessék az adatok küldését és fogadását (ajánlott)</translation> <translation id="7063129466199351735">Parancsikonok feldolgozása...</translation> <translation id="7065223852455347715">Ez az eszköz olyan módban van rögzítve, amely megakadályozza a vállalati regisztrációt. Ha szeretné regisztrálni azt, először vissza kell állítania az eszköz beállításait.</translation> <translation id="7065534935986314333">A rendszerről</translation> <translation id="7066944511817949584">Nem sikerült csatlakozni a(z) "<ph name="DEVICE_NAME" />" eszközhöz.</translation> +<translation id="7067725467529581407">Ne jelenjen meg többé.</translation> <translation id="7070804685954057874">Közvetlen bevitel</translation> <translation id="7072010813301522126">Gyorsparancs neve</translation> <translation id="7072025625456903686">Az összes engedélyezése vagy személyre szabás</translation> @@ -4374,6 +4401,7 @@ <translation id="7489605380874780575">Jogosultság ellenőrzése</translation> <translation id="749028671485790643">Személy: <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">A(z) <ph name="EXTENSION_NAME" /> bővítmény begyűjtheti az összes Ön által beírt szöveget, így például a személyes adatokat (jelszavakat, hitelkártyaszámokat stb.). Biztosan használni szeretné ezt a bővítményt?</translation> <translation id="7495778526395737099">Elfelejtette régi jelszavát?</translation> <translation id="7503191893372251637">Netscape-tanúsítvány típusa</translation> <translation id="7503821294401948377">Nem sikerült a(z) '<ph name="ICON" />' ikon betöltése a böngészőművelethez.</translation> @@ -4425,6 +4453,7 @@ <translation id="756445078718366910">Böngészőablak megnyitása</translation> <translation id="7564847347806291057">Folyamat leállítása</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome-adatok törölve</translation> <translation id="7568790562536448087"> frissítése</translation> <translation id="7573172247376861652">Akkumulátor töltése</translation> <translation id="7576032389798113292">6×4</translation> @@ -4554,6 +4583,7 @@ <translation id="7786207843293321886">Kilépés a Vendég munkamenetből</translation> <translation id="7786889348652477777">Alkalmazás új&ratöltése</translation> <translation id="7787129790495067395">Jelenleg összetett jelszót használ. Ha elfelejtette ezt, akkor a Google Irányítópulton visszaállíthatja a szinkronizálást, törölve az adatokat a Google szervereiről.</translation> +<translation id="7787308148023287649">Megjelenítés másik képernyőn</translation> <translation id="7788080748068240085">A(z) „<ph name="FILE_NAME" />” offline mentéséhez fel kell szabadítania további <ph name="TOTAL_FILE_SIZE" /> helyet:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />szüntesse meg azoknak a fájloknak a rögzítését, amelyek offline elérésére már nincs szüksége<ph name="MARKUP_3" /> <ph name="MARKUP_4" />töröljön fájlokat a Letöltések mappából<ph name="MARKUP_5" /></translation> @@ -4622,6 +4652,7 @@ <translation id="7878999881405658917">A Google értesítést küldött erre a telefonra. Felhívjuk figyelmét arra, hogy Bluetooth segítségével telefonja akár 10 méterről is feloldva tarthatja a következő eszközt: <ph name="DEVICE_TYPE" />. Ha ez problémát jelent, <a>átmenetileg kikapcsolhatja a funkciót</a>.</translation> <translation id="7879478708475862060">Beviteli mód követése</translation> <translation id="7880836220014399562">A(z) „<ph name="BUNDLE_NAME" />” a következő alkalmazásokat és bővítményeket adja hozzá:</translation> +<translation id="7881969471599061635">Feliratok letiltása</translation> <translation id="7884988936047469945">Kísérleti kisegítő funkciók</translation> <translation id="7885253890047913815">Legutóbbi célhelyek</translation> <translation id="7885283703487484916">nagyon rövid</translation> @@ -4985,6 +5016,7 @@ <translation id="839736845446313156">Regisztrálás</translation> <translation id="8398790343843005537">A telefonja megkeresése</translation> <translation id="8398877366907290961">Továbblépés</translation> +<translation id="8399276228600040370">Bejelentkezés a(z) <ph name="PASSWORD_MANAGER_BRAND" /> szolgáltatásban mentett fiókkal.</translation> <translation id="8401363965527883709">Üres jelölőnégyzet</translation> <translation id="8408402540408758445">Keresési találatok előzetes lehívása</translation> <translation id="8410073653152358832">E telefon használata</translation> @@ -5072,6 +5104,7 @@ <translation id="8545211332741562162">Engedély a weboldalak számára, hogy kísérleti JavaScript-funkciókat használjanak.</translation> <translation id="8545575359873600875">Sajnáljuk, de jelszavát nem sikerült ellenőrizni. Előfordulhat, hogy a felügyelt felhasználó kezelője nemrégiben módosította a jelszót. Ha így van, akkor az új jelszó a legközelebbi bejelentkezéskor lép érvénybe. Próbálkozzon régi jelszavával.</translation> <translation id="8546306075665861288">Képek gyorsítótára</translation> +<translation id="854653344619327455">A jelölő bekapcsolása esetén a felhasználó az asztal megosztásának kiválasztására szolgáló ablakban kiválaszthatja, hogy meg szeretné-e osztani a hangot.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Karakter</translation> <translation id="855081842937141170">Lap rögzítése</translation> @@ -5102,6 +5135,7 @@ <translation id="8589311641140863898">Kísérleti Bővítmények API-jai</translation> <translation id="8590375307970699841">Automatikus frissítések beállítása</translation> <translation id="8592071947729879125">Iframe-engedélyek korlátozása.</translation> +<translation id="8592125506633137593">Felső dokumentum elkülönítése</translation> <translation id="8594787581355215556">A(z) <ph name="USER_EMAIL_ADDRESS" /> címmel jelentkezett be. Szinkronizált adatait a <ph name="BEGIN_LINK" />Google Irányítópulton<ph name="END_LINK" /> kezelheti.</translation> <translation id="8596540852772265699">Egyéni fájlok</translation> <translation id="8596785155158796745">A mikrofon jelenleg nem érhető el. <ph name="BEGIN_LINK" />Mikrofon kezelése<ph name="END_LINK" /></translation> @@ -5174,6 +5208,7 @@ <translation id="8688579245973331962">Nem látja a nevét?</translation> <translation id="8688644143607459122">A Folytatás lehetőségre kattintva elfogadja a Google Payments használatát. Annak érdekében, hogy megvédjük Önt a csalástól, a számítógépével kapcsolatos információkat (beleértve annak helyét) megosztjuk a Google Payments szolgáltatással.</translation> <translation id="8689102680909215706">A(z) „<ph name="EXTENSION_NAME" />” bővítményt távolról telepítették.</translation> +<translation id="868926756781121513">Asztal megosztása lapforrással</translation> <translation id="8689341121182997459">Lejár:</translation> <translation id="8690754533598178758">Az Adobe Flash Player mikrofonnal kapcsolatos kivételei eltérőek.</translation> <translation id="8691686986795184760">(A vállalat bekapcsolta)</translation> @@ -5217,6 +5252,7 @@ <translation id="8737685506611670901"><ph name="PROTOCOL" /> linkek megnyitása a(z) <ph name="REPLACED_HANDLER_TITLE" /> helyett</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Finomítja az érintési kézmozdulatok helyzetét, ellensúlyozva az érintések egérmozdulatokhoz viszonyított gyengébb pontosságát.</translation> +<translation id="8741995161408053644">Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> címen.</translation> <translation id="8743712320294854924">Kibővített beviteli lehetőségek megjelenítése a polcon.</translation> <translation id="874420130893181774">Hagyományos pinjin beviteli mód</translation> <translation id="8744525654891896746">Válasszon egy avatart a felügyelt felhasználó számára</translation> @@ -5230,6 +5266,7 @@ <translation id="8757640015637159332">Nyilvános munkamenet megkezdése</translation> <translation id="8757742102600829832">Válasszon Chromebox eszközt a következőhöz való csatlakozáshoz:</translation> <translation id="8757803915342932642">A Google Cloud Devices szolgáltatásban elérhető eszköz</translation> +<translation id="8758895886513993540">Ez a jelölő határozza meg, hogy a felhasználók kiválaszthatnak-e egy lapot az asztal megosztására.</translation> <translation id="8759408218731716181">Nem lehet beállítani a többfiókos bejelentkezést</translation> <translation id="8759753423332885148">További információ.</translation> <translation id="8761567432415473239">A Google Biztonságos Böngészés nemrég <ph name="BEGIN_LINK" />ártalmas programokat talált<ph name="END_LINK" /> a következő webhelyen: <ph name="SITE" />.</translation> @@ -5440,6 +5477,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-egér csatlakoztatva</translation> <translation id="9076523132036239772">Elnézést kérünk, de e-mail címének vagy jelszavának ellenőrzése sikertelen volt. Próbáljon csatlakozni egy hálózathoz.</translation> +<translation id="9077132661879924646">Letiltja az egyesített média-adatcsatornát Androidon.</translation> <translation id="907841381057066561">Nem sikerült az ideiglenes .zip fájl létrehozása a tömörítés során.</translation> <translation id="9083147368019416919">A regisztráció visszavonása nem sikerült</translation> <translation id="9084064520949870008">Megnyitás ablakként</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 1e2a13e..1c75c74 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Pilih area kotak pada gambar.</translation> <translation id="1697532407822776718">Anda sudah siap!</translation> +<translation id="1697988819212986149">Menampilkan ikon Google di sebelah item menu konteks yang diberdayakan oleh layanan Google.</translation> <translation id="1699274548822076330">Ini harus digunakan bersama tanda trace-upload-url. PERINGATAN: Jika diaktifkan, Chrome akan merekam data performa untuk setiap navigasi dan mengunggahnya ke URL yang ditentukan oleh tanda trace-upload-url. Pelacakan dapat menyertakan informasi indentitas pribadi (PII) seperti judul and URL situs web yang Anda kunjungi.</translation> <translation id="1699395855685456105">Revisi perangkat keras:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Perbarui frasa sandi sinkronisasi Anda.</translation> <translation id="1788636309517085411">Gunakan default</translation> <translation id="1789575671122666129">Munculan</translation> -<translation id="1790550373387225389">Masuk ke Mode Presentasi</translation> <translation id="1792705092719258158">Aktifkan mode layar yang dicerminkan.</translation> <translation id="1793119619663054394">Yakin ingin menghapus "<ph name="PROFILE_NAME" />" dan semua data Chrome yang terkait dari komputer ini? Tindakan ini tidak dapat diurungkan.</translation> <translation id="179767530217573436">4 minggu terakhir</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Mengubah setelan tertentu pada perangkat Anda dan sekitarnya.</translation> <translation id="2673135533890720193">Membaca riwayat penjelajahan Anda</translation> <translation id="2673589024369449924">Buat pintasan desktop untuk pengguna ini</translation> +<translation id="2675358154061544447">Dukungan yang sangat eksperimental untuk merender iframe antarsitus dalam proses terpisah. Dalam mode ini, dokumen akan membagikan proses perender hanya jika berasal dari situs web yang sama.</translation> <translation id="2676946222714718093">Diputar di</translation> <translation id="2678063897982469759">Aktifkan ulang</translation> <translation id="2678246812096664977">Semua plugin</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">Cara pengelola sandi menangani IsiOtomatis untuk kredensial sinkronisasi.</translation> <translation id="29611076221683977">Saat ini penyerang yang berada pada <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mungkin berusaha memasang program berbahaya di Mac yang dapat mencuri atau menghapus informasi Anda (misalnya, foto, sandi, pesan, dan kartu kredit).</translation> <translation id="2961695502793809356">Klik untuk maju, tahan untuk melihat riwayat</translation> +<translation id="296216853343927883">Merek Google dalam menu konteks</translation> <translation id="2963151496262057773">Plugin berikut tidak merespons: <ph name="PLUGIN_NAME" />Ingin menghentikannya?</translation> <translation id="2963783323012015985">Keyboard untuk bahasa Turki</translation> <translation id="2964193600955408481">Nonaktifkan Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Klik kanan tombol di atas untuk melihat orang lain.</translation> <translation id="3026050830483105579">Semuanya ada di sini.</translation> <translation id="302620147503052030">Tampilkan tombol</translation> +<translation id="302781076327338683">Muat ulang cache yang terlewati</translation> +<translation id="3030243755303701754">Pengguna yang dilindungi dapat menjelajahi web dengan panduan Anda. Sebagai pengelola pengguna yang dilindungi di Chrome, Anda dapat: + + • mengizinkan atau melarang situs web tertentu, + • meninjau situs web yang telah dikunjungi pengguna yang dilindungi, dan + • mengelola setelan lainnya. + +Membuat pengguna yang dilindungi tidak akan membuat Akun Google, dan bookmark, riwayat penjelajahan, serta preferensi lainnya tidak akan ditampilkan di perangkat lainnya dengan Sinkronisasi Chrome. Setelah membuat pengguna baru yang dilindungi, Anda dapat mengelola setelannya kapan saja, dari perangkat apa saja, di <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Untuk informasi selengkapnya, kunjungi <ph name="BEGIN_LINK" />Pusat Bantuan<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agen X</translation> <translation id="3031557471081358569">Pilih item yang akan diimpor:</translation> <translation id="3033332627063280038">Mengaktifkan penerapan eksperimental Cache-Control: perintah usang saat validasi ulang. Hal ini memungkinkan server menentukan bahwa beberapa sumber daya dapat divalidasi ulang di latar belakang guna meningkatkan latensi.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">Apakah Ini Laman Penelusuran Yang Anda Harapkan?</translation> <translation id="3324684065575061611">(Dinonaktifkan oleh kebijakan perusahaan)</translation> <translation id="3326821416087822643">Membuat file zip <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Keluar dari Mode Presentasi</translation> <translation id="3330686263988132416">Header asal WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Mengaktifkan mode layar yang dicerminkan. Mode ini akan membalik gambar layar secara horizontal.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Pulihkan file berbahaya</translation> <translation id="3394150261239285340"><ph name="HOST" /> ingin menggunakan kamera dan mikrofon Anda.</translation> <translation id="3394279550557729862">Aktifkan dukungan untuk menggunakan pusat notifikasi dan notifikasi toast asli di platform tempat semua ini tersedia.</translation> +<translation id="3394862755749546286">Menonaktifkan saluran pipa media terpadu (Android dan desktop) di Android.</translation> <translation id="3396331542604645348">Printer yang dipilih tidak tersedia atau tidak dipasang dengan semestinya. Periksa printer Anda atau coba pilih printer lainnya.</translation> <translation id="3399597614303179694">Keyboard Makedonia</translation> <translation id="3401130144947259741">Jika diaktifkan, peristiwa pelacakan akan diekspor ke Event Tracing for Windows (ETW) dan dapat diambil oleh alat seperti UIForETW atau Xperf.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">biarkan kosong jika Anda ingin menyetel sandi akar ke nilai gambar uji default</translation> <translation id="3678156199662914018">Ekstensi: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Keyboard Malta</translation> -<translation id="3680173818488851340">Iframe prioritas rendah.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> Permintaan Berbagi Layar</translation> <translation id="3685122418104378273">Sinkronisasi Google Drive dinonaktifkan secara default saat menggunakan data seluler.</translation> <translation id="3685387984467886507">Ingat keputusan untuk melanjutkan melalui kesalahan SSL selama jangka waktu yang ditentukan.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859">Kini <ph name="DEVICE_NAME" /> akan ditampilkan di Konsol Admin</translation> <translation id="3741243925913727067">Mencadangkan foto dan video perangkat media ke Google Drive.</translation> <translation id="3743492083222969745">Mengaktifkan/Menonaktifkan opsi ketikan isyarat di laman setelan untuk keyboard virtual.</translation> +<translation id="3744111561329211289">Sinkronisasi latar belakang</translation> <translation id="3749289110408117711">Nama file</translation> <translation id="3751427701788899101">Sambungan terputus</translation> <translation id="3751522270321808809">Situs ini mungkin mencoba mengelabui Anda untuk mencuri informasi (misalnya: sandi, pesan, atau kartu kredit).</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">Masuk ke akun lain</translation> <translation id="4219614746733932747">Jika diaktifkan, Blink akan menggunakan mekanisme perbesar/perkecil untuk menskalakan konten untuk faktor skala perangkat.</translation> <translation id="4220865787605972627">Memungkinkan kalibrasi warna layar jika layar mendukung fitur tersebut.</translation> +<translation id="4232692576734035989">Mode performa yang sangat eksperimental dengan iframe antarsitus yang disimpan dalam proses yang terpisah dari dokumen teratas. Dalam mode ini, iframe dari situs pihak ketiga yang berbeda akan diizinkan untuk membagikan proses.</translation> <translation id="4235200303672858594">Seluruh layar</translation> <translation id="4235813040357936597">Tambahkan Akun untuk <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> tidak dapat ditampilkan dalam bahasa ini</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">Hapus foto</translation> <translation id="4509345063551561634">Lokasi:</translation> <translation id="4514542542275172126">Menyiapkan pengguna yang dilindungi yang baru</translation> +<translation id="4514914692061505365">Memaksa penggunaan penerjemah Subzero yang cepat dari PNaCl untuk semua file pexe.</translation> <translation id="4518677423782794009">Apakah Chrome mogok, menampilkan laman mulai, bilah alat yang tidak biasanya, iklan munculan yang tidak dapat ditutup, atau mengubah pengalaman penjelajahan? Anda dapat memperbaiki masalah ini dengan menjalankan Alat Pembersih Chrome.</translation> <translation id="452039078290142656">perangkat tak dikenal dari <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detail</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">Aplikasi dan ekstensi hanya dapat diubah oleh pengelola (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Pengonversi EMF</translation> <translation id="4602466770786743961">Selelu izinkan <ph name="HOST" /> mengakses kamera dan mikrofon Anda</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Internet tidak tersambung</translation> <translation id="4608500690299898628">&Temukan...</translation> <translation id="4610637590575890427">Apakah maksud Anda ingin mengunjungi <ph name="SITE" />?</translation> @@ -2787,6 +2802,7 @@ <translation id="5062930723426326933">Gagal masuk, sambungkan ke internet lalu coba lagi.</translation> <translation id="5063180925553000800">PIN baru:</translation> <translation id="5067867186035333991">Tanyakan jika <ph name="HOST" /> ingin mengakses mikrofon Anda</translation> +<translation id="5068918910148307423">Jangan izinkan situs yang baru ditutup untuk menyelesaikan pengiriman dan penerimaan data</translation> <translation id="507075806566596212">Anda akan mendaftarkan <ph name="DEVICE_TYPE" /> ini dengan Google untuk mengaktifkan kemampuan menemukan, menghapus, dan mengunci perangkat dari jarak jauh. Tindakan ini memerlukan booting ulang. Ingin melanjutkan?</translation> <translation id="5072836811783999860">Tampilkan bookmark yang dikelola</translation> <translation id="5074318175948309511">Laman ini mungkin perlu dimuat ulang sebelum setelan baru berpengaruh.</translation> @@ -2896,6 +2912,7 @@ <translation id="5227808808023563348">Cari teks sebelumnya</translation> <translation id="5228076606934445476">Ada yang salah dengan perangkat. Untuk memperbaikinya, Anda harus memulai ulang perangkat dan mencoba lagi.</translation> <translation id="5228962187251412618">Khusus pemeriksaan online</translation> +<translation id="5229622432348746578">Nonaktifkan Audio untuk Berbagi Desktop</translation> <translation id="5230516054153933099">Jendela</translation> <translation id="5232178406098309195">Saat Anda menggunakan perintah aktivasi audio, misalnya "Ok Google" atau menyentuh ikon mikrofon, fitur Aktivitas Suara & Audio pribadi akan menyimpan sebagian suara dan audio lainnya ke akun Anda. Rekaman ucapan/audio berikutnya, serta beberapa detik sebelumnya, akan disimpan.</translation> <translation id="523299859570409035">Pengecualian pemberitahuan</translation> @@ -3150,6 +3167,7 @@ <translation id="5557991081552967863">Tetap aktifkan Wi-Fi saat dalam mode tidur</translation> <translation id="5558129378926964177">Per&besar</translation> <translation id="556042886152191864">Tombol</translation> +<translation id="5562781907504170924">Tab ini terhubung ke Perangkat Bluetooth.</translation> <translation id="5565871407246142825">Kartu kredit</translation> <translation id="5567989639534621706">Cache aplikasi</translation> <translation id="5568069709869097550">Tidak dapat sign in</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">Pilih frasa dari belakang, tanpa memindahkan kursor</translation> <translation id="5804241973901381774">Izin</translation> <translation id="580571955903695899">Susun Ulang menurut Judul</translation> +<translation id="5808982448801399019">Otorisasi gagal</translation> <translation id="580961539202306967">Tanyakan kepada saya saat situs ingin mengirim pesan push (disarankan)</translation> <translation id="5815645614496570556">X.400 Address</translation> <translation id="5817397429773072584">China Aksara Tradisional</translation> @@ -3578,6 +3597,7 @@ <translation id="6243774244933267674">Server tidak tersedia</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Pembaruan siap</translation> +<translation id="6248400709929739064">Aktifkan subtitel</translation> <translation id="6248988683584659830">Telusuri setelan</translation> <translation id="6251870443722440887">Penanganan GDI</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> Persyaratan Layanan</translation> @@ -3602,6 +3622,7 @@ <translation id="6277105963844135994">Waktu tunggu jaringan habis</translation> <translation id="6277518330158259200">Ambil Tangkapan Layar</translation> <translation id="6279183038361895380">Tekan |<ph name="ACCELERATOR" />| untuk menampilkan kursor</translation> +<translation id="6280215091796946657">Masuk dengan akun lain</translation> <translation id="6281743458679673853">Melakukan eksperimen agar semua API merefleksikan area pandang tata letak. Ini akan membuat properti jendela gulir relatif dengan area pandang tata letak.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Printer baru di jaringan Anda}other{Printer baru di jaringan Anda}}</translation> <translation id="6285395082104474418">Baki status menampilkan status saat ini atas jaringan, baterai, dan yang lainnya kepada Anda.</translation> @@ -3683,6 +3704,9 @@ <translation id="6418160186546245112">Mengembalikan ke versi <ph name="IDS_SHORT_PRODUCT_NAME" /> yang terpasang sebelumnya</translation> <translation id="6418481728190846787">Hapus akses untuk semua aplikasi secara permanen</translation> <translation id="6418505248408153264">Aktifkan riwayat Desain Material</translation> +<translation id="6419288379019356534">Perangkat ini dikelola oleh <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Klik "Berikutnya" untuk melanjutkan masuk ke akun <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> Anda.</translation> <translation id="6419902127459849040">Eropa Tengah</translation> <translation id="6420676428473580225">Tambahkan ke Desktop</translation> <translation id="6422329785618833949">Foto dibalik</translation> @@ -3843,7 +3867,6 @@ <translation id="6662016084451426657">Kesalahan Sinkronisasi: Hubungi administrator untuk mengaktifkan sinkronisasi.</translation> <translation id="6663792236418322902">Sandi yang Anda pilih akan dibutuhkan untuk mengembalikan file ini nanti. Harap catat sandi di lokasi yang aman.</translation> <translation id="6664237456442406323">Sayangnya, komputer Anda dikonfigurasi dengan ID perangkat keras yang rusak. Hal ini mencegah Chrome OS memperbarui dengan perbaikan keamanan terbaru dan komputer Anda <ph name="BEGIN_BOLD" />mungkin rentan terhadap serangan berbahaya<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Mengurangi prioritas beban sumber daya iframe.</translation> <translation id="6666647326143344290">dengan Akun Google Anda</translation> <translation id="6675665718701918026">Perangkat penunjuk telah tersambung</translation> <translation id="6677037229676347494">ID yang diharapkan "<ph name="EXPECTED_ID" />", tapi ID-nya adalah "<ph name="NEW_ID" />".</translation> @@ -3936,6 +3959,7 @@ <translation id="6825883775269213504">Rusia</translation> <translation id="6827236167376090743">Video ini akan terus berputar sampai sapinya pulang.</translation> <translation id="6828153365543658583">Batasi akses masuk hanya untuk pengguna berikut:</translation> +<translation id="6828434191343384461">Data yang dipilih telah dihapus dari Chrome dan perangkat yang disinkronkan. Akun Google Anda mungkin memiliki bentuk riwayat penjelajahan lain seperti penelusuran dan aktivitas dari layanan Google lainnya di <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Gagal menyiapkan pembaruan otomatis bagi semua pengguna (terjadi kesalahan saat mengeksekusi preflight: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Dapatkan bantuan terkait <ph name="DEVICE_TYPE" /> Anda.</translation> <translation id="6829270497922309893">Mendaftar ke organisasi Anda</translation> @@ -4016,6 +4040,7 @@ <translation id="6965382102122355670">Oke</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Perangkat</translation> +<translation id="6969104364835835175">Paksa Subzero PNaCl</translation> <translation id="6970230597523682626">Bulgaria</translation> <translation id="6970480684834282392">Tipe rintisan</translation> <translation id="6970856801391541997">Cetak Halaman Khusus</translation> @@ -4098,10 +4123,12 @@ <translation id="7057058088140140610">Kartu kredit dan alamat menggunakan Google Payments</translation> <translation id="7059858479264779982">Setel ke luncurkan otomatis</translation> <translation id="7061692898138851896">Otomatis simpan sandi</translation> +<translation id="7062222374113411376">Izinkan situs yang baru ditutup menyelesaikan pengiriman dan penerimaan data (disarankan)</translation> <translation id="7063129466199351735">Memproses pintasan...</translation> <translation id="7065223852455347715">Perangkat ini terkunci dalam mode yang mencegah pendaftaran perusahaan. Jika ingin mendaftarkan perangkat, Anda perlu memulihkan perangkat terlebih dahulu.</translation> <translation id="7065534935986314333">Tentang Sistem</translation> <translation id="7066944511817949584">Gagal tersambung ke "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Jangan tampilkan ini lagi.</translation> <translation id="7070804685954057874">Masukan langsung</translation> <translation id="7072010813301522126">Nama pintasan</translation> <translation id="7072025625456903686">Izinkan semua atau sesuaikan</translation> @@ -4374,6 +4401,7 @@ <translation id="7489605380874780575">Periksa kelayakan</translation> <translation id="749028671485790643">Orang <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">Ekstensi <ph name="EXTENSION_NAME" /> mungkin mengumpulkan semua teks yang Anda ketik, termasuk data pribadi seperti sandi dan nomor kartu kredit. Ingin menggunakan ekstensi ini?</translation> <translation id="7495778526395737099">Lupa password lama?</translation> <translation id="7503191893372251637">Netscape Certificate Type</translation> <translation id="7503821294401948377">Tidak dapat memuat ikon '<ph name="ICON" />' untuk tindakan browser.</translation> @@ -4425,6 +4453,7 @@ <translation id="756445078718366910">Buka Jendela Browser</translation> <translation id="7564847347806291057">Akhiri proses</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Data Chrome telah dihapus</translation> <translation id="7568790562536448087">Memperbarui</translation> <translation id="7573172247376861652">Pengisian Daya Beterai</translation> <translation id="7576032389798113292">6x4</translation> @@ -4554,6 +4583,7 @@ <translation id="7786207843293321886">Keluar dari Sesi Tamu</translation> <translation id="7786889348652477777">&Muat Ulang Aplikasi</translation> <translation id="7787129790495067395">Saat ini Anda sedang menggunakan sebuah frasa sandi. Jika lupa frasa sandi Anda, Anda dapat menyetel ulang sinkronisasi untuk membersihkan data dari server Google melalui Google Dasbor.</translation> +<translation id="7787308148023287649">Tampilan di layar lain</translation> <translation id="7788080748068240085">Untuk menyimpan "<ph name="FILE_NAME" />" secara offline, Anda harus mengosongkan ruang tambahan sebesar <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />lepas sematan file yang tidak lagi Anda gunakan untuk mengakses secara offline<ph name="MARKUP_3" /> <ph name="MARKUP_4" />hapus file dari folder Unduhan Anda<ph name="MARKUP_5" /></translation> @@ -4622,6 +4652,7 @@ <translation id="7878999881405658917">Google telah mengirim pemberitahuan ke ponsel ini. Perhatikan bahwa jika Bluetooth diaktifkan, ponsel dapat membuat <ph name="DEVICE_TYPE" /> tetap terbuka dari jarak lebih dari 9 meter. Jika hal ini dapat menyebabkan masalah, <a>nonaktifkan fitur ini untuk sementara</a>.</translation> <translation id="7879478708475862060">Ikuti mode masukan</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" menambahkan ekstensi dan aplikasi ini:</translation> +<translation id="7881969471599061635">Nonaktifkan subtitel</translation> <translation id="7884988936047469945">Fitur aksesibilitas eksperimental</translation> <translation id="7885253890047913815">Tujuan Saat Ini</translation> <translation id="7885283703487484916">terlalu singkat</translation> @@ -4985,6 +5016,7 @@ <translation id="839736845446313156">Daftar</translation> <translation id="8398790343843005537">Temukan ponsel Anda</translation> <translation id="8398877366907290961">Tetap lanjutkan</translation> +<translation id="8399276228600040370">Masuk dengan akun Anda yang tersimpan di <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Hapus centang pada kotak centang</translation> <translation id="8408402540408758445">Sangga hasil penelusuran</translation> <translation id="8410073653152358832">Gunakan ponsel ini</translation> @@ -5071,6 +5103,7 @@ <translation id="8545211332741562162">Mengaktifkan laman web untuk menggunakan fitur JavaScript eksperimental.</translation> <translation id="8545575359873600875">Maaf, sandi tidak dapat diverifikasi. Pengelola pengguna yang dilindungi ini mungkin mengubah sandi baru-baru ini. Jika demikian, sandi baru akan diterapkan saat Anda masuk lagi. Coba gunakan sandi lama.</translation> <translation id="8546306075665861288">Cache gambar</translation> +<translation id="854653344619327455">Jika tanda ini aktif, jendela pemilih berbagi dekstop tidak akan mengizinkan pengguna memilih apakah akan membagikan audio atau tidak.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Karakter</translation> <translation id="855081842937141170">Sematkan tab</translation> @@ -5101,6 +5134,7 @@ <translation id="8589311641140863898">API Ekstensi Eksperimental</translation> <translation id="8590375307970699841">Siapkan pembaruan otomatis</translation> <translation id="8592071947729879125">Batasi izin iframe.</translation> +<translation id="8592125506633137593">Isolasi dokumen teratas</translation> <translation id="8594787581355215556">Masuk sebagai <ph name="USER_EMAIL_ADDRESS" />. Kelola data hasil sinkronisasi Anda di <ph name="BEGIN_LINK" />Google Dasbor<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">File Khusus</translation> <translation id="8596785155158796745">Saat ini mikrofon tidak tersedia. <ph name="BEGIN_LINK" />Kelola mikrofon<ph name="END_LINK" /></translation> @@ -5173,6 +5207,7 @@ <translation id="8688579245973331962">Tidak melihat nama Anda?</translation> <translation id="8688644143607459122">Dengan mengeklik Lanjutkan, Anda setuju untuk menggunakan Google Payments. Untuk melindungi Anda dari penipuan, informasi tentang komputer (termasuk lokasi) akan dibagikan dengan Google Payments.</translation> <translation id="8689102680909215706">Ekstensi "<ph name="EXTENSION_NAME" />" dipasang dari jarak jauh.</translation> +<translation id="868926756781121513">Berbagi Desktop dengan sumber tab</translation> <translation id="8689341121182997459">Kedaluwarsa:</translation> <translation id="8690754533598178758">Pengecualian untuk mikrofon Adobe Flash Player dapat berbeda.</translation> <translation id="8691686986795184760">(Diaktifkan oleh kebijakan perusahaan)</translation> @@ -5216,6 +5251,7 @@ <translation id="8737685506611670901">Membuka tautan <ph name="PROTOCOL" /> sebagai ganti <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Menyempurnakan posisi isyarat sentuh untuk mengompensasi sentuhan yang memiliki resolusi yang buruk dibandingkan dengan mouse.</translation> +<translation id="8741995161408053644">Akun Google Anda mungkin memiliki bentuk riwayat penjelajahan lainnya di <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Tampilkan opsi masukan yang diluaskan di rak.</translation> <translation id="874420130893181774">Metode masukan Pinyin Tradisional</translation> <translation id="8744525654891896746">Pilih avatar untuk pengguna yang dilindungi ini</translation> @@ -5229,6 +5265,7 @@ <translation id="8757640015637159332">Masukkan sesi publik</translation> <translation id="8757742102600829832">Pilih Chromebox untuk disambungkan</translation> <translation id="8757803915342932642">Perangkat di Perangkat Google Cloud</translation> +<translation id="8758895886513993540">Tanda ini mengontrol apakah pengguna dapat memilih tab untuk berbagi desktop atau tidak.</translation> <translation id="8759408218731716181">Tidak dapat menyiapkan fitur masuk banyak akun</translation> <translation id="8759753423332885148">Pelajari lebih lanjut.</translation> <translation id="8761567432415473239">Google Penjelajahan Aman baru-baru ini <ph name="BEGIN_LINK" />menemukan program berbahaya<ph name="END_LINK" /> di <ph name="SITE" />.</translation> @@ -5439,6 +5476,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Mouse USB tersambung</translation> <translation id="9076523132036239772">Maaf, email atau sandi Anda tidak dapat diverifikasi. Coba sambungkan ke jaringan terlebih dulu.</translation> +<translation id="9077132661879924646">Menonaktifkan saluran pipa media terpadu di Android.</translation> <translation id="907841381057066561">Gagal membuat file zip sementara selama pengemasan</translation> <translation id="9083147368019416919">Gagal membatalkan pendaftaran</translation> <translation id="9084064520949870008">Buka sebagai Jendela</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index fe89a60..9303a7e8 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -563,7 +563,6 @@ <translation id="1783075131180517613">Aggiorna la tua passphrase di sincronizzazione.</translation> <translation id="1788636309517085411">Usa posizione predefinita</translation> <translation id="1789575671122666129">Popup</translation> -<translation id="1790550373387225389">Passa a modalità Presentazione</translation> <translation id="1792705092719258158">Attiva modalità schermo con mirroring.</translation> <translation id="1793119619663054394">Vuoi rimuovere "<ph name="PROFILE_NAME" />" e tutti i dati di Chrome associati da questo computer? L'operazione non può essere annullata.</translation> <translation id="179767530217573436">ultime quattro settimane</translation> @@ -1658,7 +1657,6 @@ <translation id="3324301154597925148">È la pagina di ricerca prevista?</translation> <translation id="3324684065575061611">(Disattivato per norma aziendale)</translation> <translation id="3326821416087822643">Compressione di <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Esci da modalità Presentazione</translation> <translation id="3330686263988132416">Intestazione Origin nei messaggi Stun WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Consente di attivare la modalità a schermo speculare, che consente di capovolgere l'immagine dello schermo in orizzontale.</translation> @@ -1914,7 +1912,6 @@ <translation id="367645871420407123">lascia vuoto questo campo se desideri impostare la password root sul valore dell'immagine di test predefinita</translation> <translation id="3678156199662914018">Estensione: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Tastiera Maltese</translation> -<translation id="3680173818488851340">Iframe con priorità bassa.</translation> <translation id="3683524264665795342">Richiesta di condivisione dello schermo da parte di <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">La sincronizzazione con Google Drive è disattivata per impostazione predefinita quando vengono utilizzati i dati mobili.</translation> <translation id="3685387984467886507">Memorizza le decisioni relative a come procedere con gli errori SSL per un periodo di tempo specifico.</translation> @@ -3863,7 +3860,6 @@ <translation id="6662016084451426657">Errore di sincronizzazione. Contatta l'amministratore per richiedere l'attivazione della sincronizzazione.</translation> <translation id="6663792236418322902">La password scelta sarà necessaria per recuperare il file in un secondo momento. Registrala in una posizione sicura.</translation> <translation id="6664237456442406323">Purtroppo il tuo computer è configurato con un ID hardware non valido. Ciò impedisce a Chrome OS di aggiornarsi con le ultime correzioni relative alla sicurezza e il tuo computer <ph name="BEGIN_BOLD" />potrebbe essere vulnerabile ad attacchi dannosi<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Consente di ridurre la priorità di caricamento delle risorse di iframe.</translation> <translation id="6666647326143344290">con il tuo account Google</translation> <translation id="6675665718701918026">Dispositivo di puntamento collegato</translation> <translation id="6677037229676347494">L'ID previsto era "<ph name="EXPECTED_ID" />", ma in realtà era "<ph name="NEW_ID" />".</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 240a60b..26784f1 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -498,6 +498,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">בחר ריבוע מתוך התמונה.</translation> <translation id="1697532407822776718">הכל מוכן!</translation> +<translation id="1697988819212986149">הצג כסמל Google לצד פריטי תפריט הקשר המופעלים על-ידי שירותי Google.</translation> <translation id="1699274548822076330">סימון זה מיועד לשימוש בשילוב עם סימון trace-upload-url. אזהרה: כאשר הסימון מופעל, Chrome יתעד נתוני ביצועים לכל ניווט ויעלה אותם לכתובת האתר שצוינה בסימון trace-upload-url. המעקב עשוי לכלול פרטים אישיים מזהים כמו כותרות וכתובות של אתרים שבהם אתה מבקר.</translation> <translation id="1699395855685456105">בקרת חומרה:</translation> @@ -558,7 +559,6 @@ <translation id="1783075131180517613">עדכן את משפט-הסיסמה של הסינכרון.</translation> <translation id="1788636309517085411">השתמש בברירת המחדל</translation> <translation id="1789575671122666129">חלונות קופצים</translation> -<translation id="1790550373387225389">היכנס למצב מצגת</translation> <translation id="1792705092719258158">הפעל מצב מסך משוקף.</translation> <translation id="1793119619663054394">האם אתה בטוח שברצונך להסיר את "<ph name="PROFILE_NAME" />" ואת כל הנתונים הקשורים ל-Chrome ממחשב זה? לא ניתן לבטל פעולה זו.</translation> <translation id="179767530217573436">מ-4 השבועות האחרונים</translation> @@ -1145,6 +1145,7 @@ <translation id="267285457822962309">שנה את ההגדרות הספציפיות למכשיר ולציוד ההיקפי.</translation> <translation id="2673135533890720193">לקרוא את היסטוריית הגלישה שלך</translation> <translation id="2673589024369449924">צור קיצור דרך בשולחן העבודה למשתמש זה.</translation> +<translation id="2675358154061544447">תמיכה ניסיונית מאוד בעיבוד iframes חוצי-אתרים בתהליכים נפרדים. במצב זה, מסמכים יחלקו תהליך של מעבד רק אם הם מאותו אתר.</translation> <translation id="2676946222714718093">מופעל ב-</translation> <translation id="2678063897982469759">הפוך מחדש לפעיל</translation> <translation id="2678246812096664977">כל יישומי הפלאגין</translation> @@ -1371,6 +1372,7 @@ <translation id="2960393411257968125">כיצד מנהל הסיסמאות מטפל במילוי אוטומטי עבור פרטי הכניסה המשמשים לסנכרון.</translation> <translation id="29611076221683977">תוקפים הנמצאים כעת ב-<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> עשויים לנסות להתקין ב-Mac שלך תכניות מסוכנות שגונבות או מוחקות מידע (לדוגמה, תמונות, סיסמאות, הודעות וכרטיסי אשראי).</translation> <translation id="2961695502793809356">לחץ כדי לעבור קדימה, לחץ והחזק כדי לראות את ההיסטוריה</translation> +<translation id="296216853343927883">מיתוג של Google בתפריט ההקשר</translation> <translation id="2963151496262057773">הפלאגין הבא אינו מגיב: <ph name="PLUGIN_NAME" /> האם ברצונך לכבות אותו?</translation> <translation id="2963783323012015985">מקלדת טורקית</translation> <translation id="2964193600955408481">השבת Wi-Fi</translation> @@ -1420,6 +1422,16 @@ <translation id="3025729795978504041">לחץ לחיצה ימנית על הלחצן שלמעלה כדי להציג משתמשים אחרים.</translation> <translation id="3026050830483105579">הכל כאן.</translation> <translation id="302620147503052030">לחצן הצג</translation> +<translation id="302781076327338683">טען מחדש קובץ שמור עוקף</translation> +<translation id="3030243755303701754">משתמש בפיקוח יכול לגלוש באינטרנט בהשגחתך. כמנהל של משתמש בפיקוח ב-Chrome תוכל: + + • להתיר או לחסום אתרים + • להציג את האתרים שבהם ביקר המשתמש בפיקוח + • לנהל הגדרות אחרות + +יצירה של משתמש בפיקוח אינה יוצרת חשבון Google, והסימניות, היסטוריית הגלישה וההעדפות האחרות שלו לא יהיו זמינות לו במכשירים אחרים בעזרת סינכרון Chrome. לאחר שתיצור משתמש חדש בפיקוח, תוכל לנהל את ההגדרות שלו בכל עת ומכל מכשיר בכתובת <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +תוכל למצוא מידע נוסף <ph name="BEGIN_LINK" />במרכז העזרה<ph name="END_LINK" /> שלנו.</translation> <translation id="3031417829280473749">סוכנת X</translation> <translation id="3031557471081358569">בחר פריטים לייבוא:</translation> <translation id="3033332627063280038">הפעל את היישום הניסיוני של Cache-Control: הנחיית 'לא פעיל בזמן אימות מחדש'. הדבר מאפשר לשרתים לציין שייתכן שמתבצע אימות מחדש של משאבים מסוימים ברקע על מנת לשפר את זמן האחזור.</translation> @@ -1639,7 +1651,6 @@ <translation id="3324301154597925148">האם זהו דף החיפוש שציפית לראות?</translation> <translation id="3324684065575061611">(מושבת על ידי מדיניות של ארגון)</translation> <translation id="3326821416087822643">מכווץ את <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">צא ממצב מצגת</translation> <translation id="3330686263988132416">כותרת מקור של WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">הפעל את מצב המסך המשוקף. מצב זה הופך את תמונת המסך בצורה אופקית.</translation> @@ -1684,6 +1695,7 @@ <translation id="3392020134425442298">שחזר קובץ זדוני</translation> <translation id="3394150261239285340"><ph name="HOST" /> מעוניין להשתמש במצלמה ובמיקרופון שלך.</translation> <translation id="3394279550557729862">הפעל תמיכה בהודעות המקוריות ובמרכז ההודעות, בפלטפורמות שבהן השירותים זמינים.</translation> +<translation id="3394862755749546286">משבית את צינור המדיה המאוחד (Android ומחשב שולחני) ב-Android.</translation> <translation id="3396331542604645348">המדפסת שנבחרה אינה זמינה או שאינה מותקנת כראוי. בדוק את המדפסת או נסה לבחור מדפסת אחרת.</translation> <translation id="3399597614303179694">מקלדת מקדונית</translation> <translation id="3401130144947259741">אם התכונה מופעלת, מתבצע יצוא של אירועי מעקב אל 'מעקב אירועים עבור Windows' (ETW). לאחר היצוא ניתן לתעד אותם באמצעות כלים כמו UIForETW או Xperf.</translation> @@ -1894,7 +1906,6 @@ <translation id="367645871420407123">השאר ריק אם ברצונך להגדיר את סיסמת root לערך תמונת בדיקת ברירת המחדל</translation> <translation id="3678156199662914018">תוסף: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">מקלדת מלטית</translation> -<translation id="3680173818488851340">משאבי iframe בעדיפות נמוכה.</translation> <translation id="3683524264665795342">בקשה לשיתוף מסך של <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">הסנכרון של Google Drive מושבת כברירת מחדל בעת שימוש בנתונים לנייד.</translation> <translation id="3685387984467886507">זכור את ההחלטות להמשיך למרות שגיאות SSL למשך פרק זמן שצוין.</translation> @@ -1943,6 +1954,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> יופיע כעת במסוף הניהול</translation> <translation id="3741243925913727067">גבה ב-Google Drive את התמונות והסרטונים שבמכשיר המדיה.</translation> <translation id="3743492083222969745">הפעל/השבת את האפשרות להקלדה רציפה בדף ההגדרות בשביל המקלדת הווירטואלית.</translation> +<translation id="3744111561329211289">סינכרון ברקע</translation> <translation id="3749289110408117711">שם קובץ</translation> <translation id="3751427701788899101">החיבור נותק</translation> <translation id="3751522270321808809">תוקפים באתר הזה עשויים לנסות להטעות אותך כדי לגנוב את המידע שלך (לדוגמה: סיסמאות, הודעות או כרטיסי אשראי).</translation> @@ -2260,6 +2272,7 @@ <translation id="4218259925454408822">היכנס לחשבון אחר</translation> <translation id="4219614746733932747">אם מופעל, Blink משתמש במנגנון שינוי המרחק מהתצוגה כדי לשנות את גודל התוכן בהתאם לגודל המסך של המכשיר.</translation> <translation id="4220865787605972627">אפשר כיול צבע של המסך, אם המסך תומך בתכונה הזו.</translation> +<translation id="4232692576734035989">מצב ביצועים ניסיוני מאוד שבו iframes חוצי-אתרים נשמרים בתהליכים נפרדים מהמסמך העליון. במצב זה, iframes מאתרים שונים של צד שלישי יורשו לחלוק תהליך.</translation> <translation id="4235200303672858594">כל המסך</translation> <translation id="4235813040357936597">הוסף חשבון עבור <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">לא ניתן להציג את <ph name="PRODUCT_NAME" /> בשפה זו</translation> @@ -2425,6 +2438,7 @@ <translation id="4509017836361568632">מחק תמונה</translation> <translation id="4509345063551561634">מיקום:</translation> <translation id="4514542542275172126">הגדר משתמש חדש בפיקוח</translation> +<translation id="4514914692061505365">אלץ את השימוש במתרגם Subzero מהיר של PNaCl בכל קובצי pexe.</translation> <translation id="4518677423782794009">האם Chrome קורס, מציג דפי פתיחה חריגים, מודעות לא צפויות או סרגלי כלים שאי אפשר להיפטר מהם או שמשנים באופן כלשהו את חוויית הגלישה? ייתכן שתוכל לפתור את הבעיה באמצעות הפעלה של Chrome Cleanup Tool.</translation> <translation id="452039078290142656">מכשירים בלתי ידועים של <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">פרטים</translation> @@ -2473,6 +2487,7 @@ <translation id="4595560905247879544">רק המנהל (<ph name="CUSTODIAN_NAME" />) יכול לשנות יישומים ותוספים.</translation> <translation id="4601242977939794209">ממיר EMF</translation> <translation id="4602466770786743961">התר תמיד ל-<ph name="HOST" /> לגשת למצלמה ולמיקרופון</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">אין חיבור לאינטרנט</translation> <translation id="4608500690299898628">&מצא...</translation> <translation id="4610637590575890427">האם התכוונת לעבור אל <ph name="SITE" />?</translation> @@ -2777,6 +2792,7 @@ <translation id="5062930723426326933">הכניסה נכשלה. התחבר לאינטרנט ונסה שוב.</translation> <translation id="5063180925553000800">PIN חדש:</translation> <translation id="5067867186035333991">שאל אם <ph name="HOST" /> רוצה לגשת למיקרופון שלך</translation> +<translation id="5068918910148307423">אל תתיר לאתרים שנסגרו לאחרונה לסיים שליחה וקבלה של נתונים</translation> <translation id="507075806566596212">אתה עומד לרשום את ה-<ph name="DEVICE_TYPE" /> הזה ב-Google כדי להפעיל את היכולת לאיתור, מחיקה ונעילה של המכשיר מרחוק. לשם כך נדרש אתחול. האם ברצונך להמשיך?</translation> <translation id="5072836811783999860">הצג סימניות מנוהלות</translation> <translation id="5074318175948309511">ייתכן שיהיה צורך לטעון מחדש דף זה על מנת שההגדרות החדשות ייכנסו לתוקף.</translation> @@ -2886,6 +2902,7 @@ <translation id="5227808808023563348">חפש את הטקסט הקודם</translation> <translation id="5228076606934445476">משהו השתבש במכשיר. כדי להתאושש משגיאה זו יהיה עליך לאתחל את המכשיר ולנסות שוב.</translation> <translation id="5228962187251412618">בדיקה מקוונת בלבד</translation> +<translation id="5229622432348746578">השבתת אודיו לשיתוף שולחן עבודה</translation> <translation id="5230516054153933099">חלון</translation> <translation id="5232178406098309195">כאשר אתה משתמש בפקודות אודיו להפעלה, כגון 'Ok Google', או נוגע בסמל של מיקרופון, פעילות הקול והאודיו הפרטית שלך מאחסנת קטע קול וצלילים נוספים בחשבון שלך. תישמר הקלטה של קטע הדיבור/אודיו הבא, וכן של מספר שניות שקדמו לו. </translation> <translation id="523299859570409035">חריגים של התראות</translation> @@ -3140,6 +3157,7 @@ <translation id="5557991081552967863">השאר את Wi-Fi פועל בזמן שינה</translation> <translation id="5558129378926964177">הת&קרב</translation> <translation id="556042886152191864">לחצן</translation> +<translation id="5562781907504170924">הכרטיסייה הזו מחוברת להתקן Bluetooth.</translation> <translation id="5565871407246142825">כרטיסי אשראי</translation> <translation id="5567989639534621706">קבצים שמורים של יישום</translation> <translation id="5568069709869097550">אי אפשר להיכנס</translation> @@ -3299,6 +3317,7 @@ <translation id="5803531701633845775">בחר ביטויים מהסוף, מבלי להזיז את הסמן</translation> <translation id="5804241973901381774">הרשאות</translation> <translation id="580571955903695899">סדר מחדש לפי כותרת</translation> +<translation id="5808982448801399019">ההרשאה נכשלה</translation> <translation id="580961539202306967">שאל אותי כאשר אתר רוצה לשלוח לי הודעות בדחיפה (מומלץ)</translation> <translation id="5815645614496570556">כתובת X.400</translation> <translation id="5817397429773072584">סינית מסורתית</translation> @@ -3568,6 +3587,7 @@ <translation id="6243774244933267674">השרת אינו זמין</translation> <translation id="6247708409970142803">%<ph name="PERCENTAGE" /></translation> <translation id="624789221780392884">העדכון מוכן</translation> +<translation id="6248400709929739064">הפעל כתוביות</translation> <translation id="6248988683584659830">חפש בהגדרות</translation> <translation id="6251870443722440887">מזהים ייחודיים של GDI</translation> <translation id="6251889282623539337">תנאים והגבלות של <ph name="DOMAIN" /></translation> @@ -3592,6 +3612,7 @@ <translation id="6277105963844135994">תם הזמן הקצוב לתפוגה של הרשת</translation> <translation id="6277518330158259200">צלם מסך</translation> <translation id="6279183038361895380">הקש על |<ph name="ACCELERATOR" />| כדי להציג את הסמן</translation> +<translation id="6280215091796946657">היכנס עם חשבון אחר</translation> <translation id="6281743458679673853">ניסוי שמטרתו לגרום לכך שכל ממשקי ה-API ישקפו את אזור התצוגה של הפריסה. פעולה זו תהפוך את מאפייני window.scroll ליחסיים לאזור התצוגה של הפריסה.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{מדפסת חדשה ברשת שלך}two{מדפסות חדשות ברשת שלך}many{מדפסות חדשות ברשת שלך}other{מדפסות חדשות ברשת שלך}}</translation> <translation id="6285395082104474418">מגש הסטטוס מציג לך את המצב הנוכחי של הרשת, הסוללה ועוד.</translation> @@ -3673,6 +3694,9 @@ <translation id="6418160186546245112">חוזר לגרסה המותקנת הקודמת של <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">הסר לצמיתות גישה עבור כל היישומים</translation> <translation id="6418505248408153264">הפעל היסטוריה בעיצוב חדשני תלת-ממדי</translation> +<translation id="6419288379019356534">המכשיר הזה מנוהל על-ידי <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + לחץ על 'הבא' כדי להמשיך בכניסה אל חשבון <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> שלך.</translation> <translation id="6419902127459849040">מרכז אירופאית</translation> <translation id="6420676428473580225">הוספה לשולחן העבודה</translation> <translation id="6422329785618833949">התמונה סובבה</translation> @@ -3833,7 +3857,6 @@ <translation id="6662016084451426657">שגיאת סנכרון: צור קשר עם מנהל המערכת כדי לאפשר סנכרון.</translation> <translation id="6663792236418322902">הסיסמה שבחרת תידרש כדי לשחזר את הקובץ מאוחר יותר. תעד אותה במקום בטוח.</translation> <translation id="6664237456442406323">לצערנו, המחשב שלך מוגדר עם זיהוי חומרה פגום. המצב הזה מונע ממערכת ההפעלה של Chrome להתקין את עדכוני האבטחה האחרונים, וייתכן שהמחשב שלך יהיה <ph name="BEGIN_BOLD" />חשוף להתקפות זדוניות<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">מפחית את העדיפות של טעינת משאבי iframe.</translation> <translation id="6666647326143344290">עם חשבון Google שלך</translation> <translation id="6675665718701918026">התקן הצבעה מחובר</translation> <translation id="6677037229676347494">המזהה הצפוי הוא "<ph name="EXPECTED_ID" />", אך המזהה היה "<ph name="NEW_ID" />".</translation> @@ -3926,6 +3949,7 @@ <translation id="6825883775269213504">רוסית</translation> <translation id="6827236167376090743">סרטון זה ימשיך לפעול ללא הפסקה.</translation> <translation id="6828153365543658583">הגבל כניסה של המשתמשים הבאים:</translation> +<translation id="6828434191343384461">הנתונים שבחרת הוסרו מ-Chrome והמכשירים המסונכרנים. ייתכן שעדיין תוכל לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google שלך בכתובת <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />, כמו חיפושים ופעילות משירותי Google אחרים.</translation> <translation id="6828860976882136098">הגדרת עדכונים אוטומטיים לכל המשתמשים נכשלה (שגיאת קדם-הפעלה: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">קבל עזרה בשביל ה-<ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">הירשם לארגון שלך</translation> @@ -4005,6 +4029,7 @@ <translation id="6965382102122355670">אישור</translation> <translation id="6965648386495488594">יציאה</translation> <translation id="6965978654500191972">התקן</translation> +<translation id="6969104364835835175">Force PNaCl Subzero</translation> <translation id="6970230597523682626">בולגרית</translation> <translation id="6970480684834282392">סוג הפעלה</translation> <translation id="6970856801391541997">הדפסת דפים ספציפיים</translation> @@ -4087,10 +4112,12 @@ <translation id="7057058088140140610">שימוש בכרטיסי אשראי ובכתובות באמצעות Google Payments</translation> <translation id="7059858479264779982">הגדר להפעלה אוטומטית</translation> <translation id="7061692898138851896">שמור סיסמאות באופן אוטומטי</translation> +<translation id="7062222374113411376">התר לאתרים שנסגרו לאחרונה לסיים שליחה וקבלה של נתונים (מומלץ)</translation> <translation id="7063129466199351735">מעבד קיצורי דרך...</translation> <translation id="7065223852455347715">מכשיר זה נעול במצב שמונע הרשמה של ארגונים. אם ברצונך לרשום את המכשיר, עליך לעבור תחילה להגדרות של גילוי מכשירים.</translation> <translation id="7065534935986314333">על המערכת</translation> <translation id="7066944511817949584">נכשלה ההתחברות אל "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">לעולם אל תציג זאת שוב.</translation> <translation id="7070804685954057874">קלט ישיר</translation> <translation id="7072010813301522126">שם קיצור הדרך</translation> <translation id="7072025625456903686">התר הכל או התאם אישית</translation> @@ -4357,6 +4384,7 @@ <translation id="7489605380874780575">בדוק כשירות</translation> <translation id="749028671485790643">אדם <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">תוספי <ph name="EXTENSION_NAME" /> עשויים לתעד את כל הטקסט שאתה מקליד, כולל נתונים אישיים, כמו סיסמאות ומספרי כרטיס אשראי. האם ברצונך להשתמש בתוסף הזה?</translation> <translation id="7495778526395737099">שכחת את הסיסמה הקודמת?</translation> <translation id="7503191893372251637">סוג אישור Netscape</translation> <translation id="7503821294401948377">לא היתה אפשרות לטעון את האייקון '<ph name="ICON" />' עבור פעולת דפדפן.</translation> @@ -4406,6 +4434,7 @@ <translation id="756445078718366910">פתח חלון דפדפן</translation> <translation id="7564847347806291057">סיים תהליך</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">נתוני Chrome נוקו</translation> <translation id="7568790562536448087">מעדכן</translation> <translation id="7573172247376861652">טעינת סוללה</translation> <translation id="7576032389798113292">6x4</translation> @@ -4535,6 +4564,7 @@ <translation id="7786207843293321886">צא מהפעלת אורח</translation> <translation id="7786889348652477777">&טען אפליקציה מחדש</translation> <translation id="7787129790495067395">אתה משתמש כרגע במשפט סיסמה. אם שכחת את משפט הסיסמה שלך, תוכל לאפס את הסינכרון כדי לנקות את הנתונים שלך משרתי Google באמצעות לוח הבקרה של Google.</translation> +<translation id="7787308148023287649">הצג במסך אחר</translation> <translation id="7788080748068240085">כדי לשמור את "<ph name="FILE_NAME" />" באופן לא מקוון, עליך לפנות נפח נוסף של <ph name="TOTAL_FILE_SIZE" /> :<ph name="MARKUP_1" /> <ph name="MARKUP_2" />בטל הצמדה של קבצים שאינך צריך לגשת אליהם יותר במצב לא מקוון<ph name="MARKUP_3" /> <ph name="MARKUP_4" />מחק קבצים מהתיקיה 'הורדות'<ph name="MARKUP_5" /></translation> @@ -4603,6 +4633,7 @@ <translation id="7878999881405658917">Google שלחה הודעה לטלפון הזה. לידיעתך, עם Bluetooth, הטלפון שלך עשוי להשאיר את <ph name="DEVICE_TYPE" /> לא נעול במרחק של מעל 3 מטרים. אם הדבר מהווה בעיה מבחינתך, תוכל <a>להשבית זמנית את התכונה הזו</a>.</translation> <translation id="7879478708475862060">עקוב אחר שיטת הקלט</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" מוסיף את היישומים והתוספים הבאים:</translation> +<translation id="7881969471599061635">השבת כתוביות</translation> <translation id="7884988936047469945">תכונות נגישות ניסיוניות</translation> <translation id="7885253890047913815">יעדים אחרונים</translation> <translation id="7885283703487484916">קצרה מאוד</translation> @@ -4966,6 +4997,7 @@ <translation id="839736845446313156">הירשם</translation> <translation id="8398790343843005537">אתר את הטלפון שלך</translation> <translation id="8398877366907290961">המשך בכל זאת</translation> +<translation id="8399276228600040370">היכנס באמצעות החשבון שלך שנשמר ב-<ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">תיבת סימון שלא סומנה</translation> <translation id="8408402540408758445">אחזר מראש תוצאות חיפוש</translation> <translation id="8410073653152358832">השתמש בטלפון הזה</translation> @@ -5052,6 +5084,7 @@ <translation id="8545211332741562162">מאפשר לדפי אינטרנט להשתמש בתכונות ניסיוניות של JavaScript.</translation> <translation id="8545575359873600875">מצטערים, לא ניתן לאמת את הסיסמה שלך. ייתכן שהמנהל של המשתמש בפיקוח שינה את הסיסמה לאחרונה. במצב כזה הסיסמה החדשה תחול בפעם הבאה שתבצע כניסה. נסה להשתמש בסיסמה הישנה שלך.</translation> <translation id="8546306075665861288">קובץ תמונה שמור</translation> +<translation id="854653344619327455">כשהסימון הזה פועל, החלון לבחירה של שיתוף שולחן העבודה לא יאפשר למשתמש לבחור האם לשתף אודיו.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">תו</translation> <translation id="855081842937141170">הצמד כרטיסייה</translation> @@ -5082,6 +5115,7 @@ <translation id="8589311641140863898">ממשקי API ניסיוניים של תוספים</translation> <translation id="8590375307970699841">הגדר עדכונים אוטומטיים</translation> <translation id="8592071947729879125">הגבל הרשאות iframe.</translation> +<translation id="8592125506633137593">בידוד של המסמך העליון</translation> <translation id="8594787581355215556">מחובר כ-<ph name="USER_EMAIL_ADDRESS" />. נהל את הנתונים המסונכרנים שלך ב<ph name="BEGIN_LINK" />מרכז השליטה של Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">קבצים מותאמים אישית</translation> <translation id="8596785155158796745">המיקרופון לא זמין כעת. <ph name="BEGIN_LINK" />נהל את המיקרופון<ph name="END_LINK" /></translation> @@ -5154,6 +5188,7 @@ <translation id="8688579245973331962">לא רואה את השם שלך?</translation> <translation id="8688644143607459122">בלחיצה על 'המשך', אתה מביע הסכמה להשתמש ב-Google Payments. כדי להגן עליך מפני הונאה, מידע בנוגע למחשב שלך (כולל המיקום שלו) ישותף עם Google Payments.</translation> <translation id="8689102680909215706">התוסף "<ph name="EXTENSION_NAME" />" הותקן מרחוק.</translation> +<translation id="868926756781121513">שיתוף שולחן עבודה עם מקור כרטיסיות</translation> <translation id="8689341121182997459">בתוקף עד:</translation> <translation id="8690754533598178758">חריגי המיקרופון בשביל Adobe Flash Player הם שונים.</translation> <translation id="8691686986795184760">(מופעל על ידי מדיניות הארגון)</translation> @@ -5197,6 +5232,7 @@ <translation id="8737685506611670901">פתיחת קישורי <ph name="PROTOCOL" /> במקום <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">צמצם את המיקום של תנועת מגע כדי לפצות על כך שדיוק המגע נמוך בהשוואה לעכבר.</translation> +<translation id="8741995161408053644">ייתכן שתוכל לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google בכתובת <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">אפשרויות להצגת קלט מורחב במדף.</translation> <translation id="874420130893181774">שיטת קלט Traditional Pinyin</translation> <translation id="8744525654891896746">בחירת דמות עבור משתמש בפיקוח זה</translation> @@ -5210,6 +5246,7 @@ <translation id="8757640015637159332">היכנס לפעילות ציבורית באתר</translation> <translation id="8757742102600829832">מחר Chromebox שאליו ברצונך להתחבר</translation> <translation id="8757803915342932642">מכשיר ב-Google Cloud Devices</translation> +<translation id="8758895886513993540">הסימון הזה קובע האם משתמשים יכולים לבחור כרטיסייה בשיתוף של שולחן עבודה.</translation> <translation id="8759408218731716181">לא ניתן להגדיר כניסה עם מספר חשבונות</translation> <translation id="8759753423332885148">למידע נוסף</translation> <translation id="8761567432415473239">גלישה בטוחה של Google <ph name="BEGIN_LINK" />איתרה לאחרונה תוכניות מזיקות<ph name="END_LINK" /> באתר <ph name="SITE" />.</translation> @@ -5420,6 +5457,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">עכבר USB מחובר</translation> <translation id="9076523132036239772">מצטערים, לא ניתן לאמת את האימייל או הסיסמה שלך. נסה תחילה להתחבר לרשת.</translation> +<translation id="9077132661879924646">משבית את צינור המדיה המאוחד ב-Android.</translation> <translation id="907841381057066561">נכשל ביצירת קובץ zip זמני במהלך האריזה.</translation> <translation id="9083147368019416919">ביטול ההרשמה נכשל</translation> <translation id="9084064520949870008">פתח כחלון</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 8e83f54f..6668bf55 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">画像の切り取り範囲を指定してください。</translation> <translation id="1697532407822776718">設定が完了しました。</translation> +<translation id="1697988819212986149">Google サービスによるコンテキスト メニュー項目の横に Google アイコンを表示します。</translation> <translation id="1699274548822076330">trace-upload-url フラグと組み合わせて使用します。 警告: このフラグが有効な場合、Chrome ではあらゆるナビゲーション操作のパフォーマンス データが記録され、trace-upload-url フラグで指定された URL にアップロードされます。追跡結果データには、アクセスしたウェブサイトのタイトルや URL といった個人情報(PII)が含まれる場合があります。</translation> <translation id="1699395855685456105">ハードウェア リビジョン:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">同期パスフレーズを更新してください。</translation> <translation id="1788636309517085411">デフォルトを使用</translation> <translation id="1789575671122666129">ポップアップ</translation> -<translation id="1790550373387225389">プレゼンテーション モードを開始</translation> <translation id="1792705092719258158">ミラー画面モードを有効にする。</translation> <translation id="1793119619663054394">このパソコンから「<ph name="PROFILE_NAME" />」とそれに関連付けられているすべての Chrome データを削除してもよろしいですか?この操作は元に戻せません。</translation> <translation id="179767530217573436">過去 4 週間</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">お使いの端末や周辺機器に固有の設定を変更します。</translation> <translation id="2673135533890720193">閲覧履歴の読み取り</translation> <translation id="2673589024369449924">このユーザーのデスクトップ ショートカットを作成</translation> +<translation id="2675358154061544447">別プロセスでのクロスサイト iframe のレンダリングを試験的にサポートします。このモードでは、同じウェブサイトのドキュメント間でのみレンダラ プロセスが共有されます。</translation> <translation id="2676946222714718093">再生中:</translation> <translation id="2678063897982469759">再度有効にする</translation> <translation id="2678246812096664977">すべてのプラグイン</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">パスワード マネージャで同期の認証情報の自動入力をどのように扱うかを指定します。</translation> <translation id="29611076221683977">現在、<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> では、悪意のあるユーザーがご利用の Mac に危険なプログラム(写真、パスワード、メッセージ、クレジット カード番号などを盗み取るか削除するプログラム)をインストールしようとしている可能性があります。</translation> <translation id="2961695502793809356">クリックすると次に進みます。押したまま待つと履歴が表示されます。</translation> +<translation id="296216853343927883">コンテキスト メニューに Google ブランドを表示する</translation> <translation id="2963151496262057773">プラグイン(<ph name="PLUGIN_NAME" />)は応答していません。強制終了しますか?</translation> <translation id="2963783323012015985">トルコ語のキーボード</translation> <translation id="2964193600955408481">Wi-Fi を無効にする</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">他のユーザーを表示するには上のボタンを右クリックします。</translation> <translation id="3026050830483105579">ダウンロードしたアプリもすべてここから起動できます。</translation> <translation id="302620147503052030">ボタンを表示する</translation> +<translation id="302781076327338683">キャッシュを回避して再読み込み</translation> +<translation id="3030243755303701754">監視対象ユーザーは管理者の監視のもとでウェブを利用できます。Chrome の監視対象ユーザーの管理者ができることは次のとおりです。 + + • 特定のウェブサイトへのアクセスを許可または禁止する + • 監視対象ユーザーがアクセスしたウェブサイトを確認する + • その他の設定を管理する + +監視対象ユーザーを作成しても Google アカウントが作成されるわけではありません。監視対象ユーザーのブックマーク、閲覧履歴などの設定は、Chrome 同期機能によって他の端末にコピーされることはありません。新しい監視対象ユーザーを作成した後は、いつでも任意の端末から <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> にアクセスして監視対象ユーザーの設定を管理できます。 + +詳しくは、<ph name="BEGIN_LINK" />ヘルプセンター<ph name="END_LINK" />をご覧ください。</translation> <translation id="3031417829280473749">エージェント X</translation> <translation id="3031557471081358569">インポートするデータを選択:</translation> <translation id="3033332627063280038">キャッシュ制御: stale-while-revalidate 指令の試験運用を有効にします。有効にすると、サーバーでは待ち時間短縮のため一部リソースの再確認をバックグラウンドで行うことを指定できるようになります。</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">この検索ページでよろしいですか?</translation> <translation id="3324684065575061611">(会社のポリシーにより無効になっています)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> を圧縮しています...</translation> -<translation id="3330206034087160972">プレゼンテーション モードを終了</translation> <translation id="3330686263988132416">WebRTC Stun オリジン ヘッダー</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />)<ph name="LONGTZNAME" />(<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">ミラー画面モードを有効にします。このモードにすると、画面の画像が横方向に反転します。</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">不正なファイルを復元</translation> <translation id="3394150261239285340"><ph name="HOST" /> がカメラとマイクへのアクセスを求めています。</translation> <translation id="3394279550557729862">ネイティブ通知のトーストと通知センターが使用可能なプラットフォームでこれらの機能を使用できるようにします。</translation> +<translation id="3394862755749546286">Android で統合(Android とパソコン)メディア パイプラインを無効にします。</translation> <translation id="3396331542604645348">選択したプリンタは利用できないか、正しくインストールされていません。プリンタを確認するか、別のプリンタを選択してみてください。</translation> <translation id="3399597614303179694">マケドニア語キーボード</translation> <translation id="3401130144947259741">有効にすると、トレース イベントは Event Tracing for Windows(ETW)にエクスポートされ、UIForETW や XperfIf などのツールで捕捉できるようになります。</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">既定のテストイメージの値にルート パスワードを設定する場合は、空欄のままにします</translation> <translation id="3678156199662914018">拡張機能: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">マルタ語キーボード</translation> -<translation id="3680173818488851340">iframe の優先度を下げる</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 画面共有リクエスト</translation> <translation id="3685122418104378273">Google ドライブの同期は既定で無効になっています(モバイルデータを使用する場合)。</translation> <translation id="3685387984467886507">SSL エラーにどの方法で対応したかを一定期間記憶します。</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> は管理コンソールに表示されます</translation> <translation id="3741243925913727067">メディア デバイスの写真や動画を Google ドライブにバックアップします。</translation> <translation id="3743492083222969745">仮想キーボードの設定ページのジェスチャー入力機能を有効または無効にします。</translation> +<translation id="3744111561329211289">バックグラウンド同期</translation> <translation id="3749289110408117711">ファイル名</translation> <translation id="3751427701788899101">接続が切断されました</translation> <translation id="3751522270321808809">このサイトでは、パスワード、メッセージ、クレジット カード番号などの情報を盗み取ろうとしている可能性があります。</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">別のアカウントにログイン</translation> <translation id="4219614746733932747">有効の場合、Blink はズーム メカニズムを使ってコンテンツをデバイス倍率に合わせて拡大 / 縮小します。</translation> <translation id="4220865787605972627">ディスプレイで色補正機能がサポートされている場合に、ディスプレイの色補正を許可します。</translation> +<translation id="4232692576734035989">クロスサイト iframe と上位ドキュメントのプロセスを分ける試験的なパフォーマンス モードです。このモードでは、異なる第三者サイトの iframe 間でプロセスを共有できます。</translation> <translation id="4235200303672858594">画面全体</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> のアカウントを追加</translation> <translation id="4240069395079660403">この言語で <ph name="PRODUCT_NAME" /> を表示することはできません</translation> @@ -2436,6 +2449,7 @@ <translation id="4509017836361568632">写真を破棄</translation> <translation id="4509345063551561634">場所:</translation> <translation id="4514542542275172126">新しい監視対象ユーザーを設定します</translation> +<translation id="4514914692061505365">すべての pexe ファイルに PNaCl の高速 Subzero トランスレータを使用するよう強制します。</translation> <translation id="4518677423782794009">クラッシュが発生する、通常とは異なる起動ページやツールバーが表示される、突然表示される広告を消せないなど、Chrome の動作が普段と異なる場合は、Chrome クリーンアップ ツールを実行すると問題を解決できる可能性があります。</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> の不明なデバイス</translation> <translation id="4522570452068850558">詳細</translation> @@ -2484,6 +2498,7 @@ <translation id="4595560905247879544">アプリと拡張機能は管理者(<ph name="CUSTODIAN_NAME" />)だけが変更できます。</translation> <translation id="4601242977939794209">EMF 変換機能</translation> <translation id="4602466770786743961"><ph name="HOST" /> によるカメラとマイクへのアクセスを常に許可する</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">インターネットに接続していません</translation> <translation id="4608500690299898628">検索(&F)...</translation> <translation id="4610637590575890427">もしかして: <ph name="SITE" /></translation> @@ -2788,6 +2803,7 @@ <translation id="5062930723426326933">ログインできませんでした。インターネットに接続してもう一度お試しください。</translation> <translation id="5063180925553000800">新しい PIN:</translation> <translation id="5067867186035333991"><ph name="HOST" /> がマイクへのアクセスを必要としているときは確認画面を表示する</translation> +<translation id="5068918910148307423">最近閉じたサイトがデータの送受信を完了できないようにする</translation> <translation id="507075806566596212">この <ph name="DEVICE_TYPE" /> を Google に登録しようとしています。登録すると、リモートからのデバイスの検出、データ消去、ロックが行えるようになります。登録を完了するには再起動が必要です。続行しますか?</translation> <translation id="5072836811783999860">管理対象のブックマークを表示</translation> <translation id="5074318175948309511">新しい設定を有効にするには、ページの再読み込みが必要な可能性があります。</translation> @@ -2897,6 +2913,7 @@ <translation id="5227808808023563348">1 つ前のテキストを表示する</translation> <translation id="5228076606934445476">デバイスに問題があります。このエラーから回復するには、デバイスを再起動して、もう一度お試しください。</translation> <translation id="5228962187251412618">オンライン チェックのみ</translation> +<translation id="5229622432348746578">デスクトップ共有で音声を無効にする</translation> <translation id="5230516054153933099">ウインドウ</translation> <translation id="5232178406098309195">「OK Google」やマイクアイコンのタップといった音声有効化コマンドを使用すると、音声が個人用の音声アクティビティとしてアカウントに保存されます。保存されるのは、コマンドの前の数秒間と、コマンドに続く音声です。</translation> <translation id="523299859570409035">通知の例外</translation> @@ -3151,6 +3168,7 @@ <translation id="5557991081552967863">スリープ中に Wi-Fi 接続を維持する</translation> <translation id="5558129378926964177">拡大(&I)</translation> <translation id="556042886152191864">ボタン</translation> +<translation id="5562781907504170924">このタブは Bluetooth デバイスに接続しています。</translation> <translation id="5565871407246142825">クレジットカード</translation> <translation id="5567989639534621706">アプリケーション キャッシュ</translation> <translation id="5568069709869097550">ログインできない</translation> @@ -3310,6 +3328,7 @@ <translation id="5803531701633845775">カーソルを動かさずに後ろからフレーズを選択する</translation> <translation id="5804241973901381774">権限</translation> <translation id="580571955903695899">タイトルで並べ替え</translation> +<translation id="5808982448801399019">認証できませんでした</translation> <translation id="580961539202306967">サイトがプッシュ メッセージを送信しようとする際に確認する(推奨)</translation> <translation id="5815645614496570556">X.400 アドレス</translation> <translation id="5817397429773072584">中国語(繁体字)</translation> @@ -3579,6 +3598,7 @@ <translation id="6243774244933267674">サーバーを使用できません</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">アップデート準備完了</translation> +<translation id="6248400709929739064">字幕を有効にする</translation> <translation id="6248988683584659830">設定項目を検索</translation> <translation id="6251870443722440887">GDI ハンドル</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> 利用規約</translation> @@ -3603,6 +3623,7 @@ <translation id="6277105963844135994">ネットワークがタイムアウトしました</translation> <translation id="6277518330158259200">スクリーンショットを撮る(&A)</translation> <translation id="6279183038361895380">カーソルを表示するには |<ph name="ACCELERATOR" />| を押します</translation> +<translation id="6280215091796946657">別のアカウントでログイン</translation> <translation id="6281743458679673853">すべての API でレイアウト ビューポートを反映するようにした試験運用版の機能です。この場合、window.scroll プロパティはレイアウト ビューポートを基準とした相対的な値に設定されます。</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{ネットワーク上の新しいプリンタ}other{ネットワーク上の新しいプリンタ}}</translation> <translation id="6285395082104474418">ステータス トレイには、ネットワーク、バッテリーなどの現在の状態が表示されます。</translation> @@ -3684,6 +3705,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> の以前のインストール バージョンに戻しています</translation> <translation id="6418481728190846787">すべてのアプリのアクセスを完全に削除する</translation> <translation id="6418505248408153264">マテリアル デザインの履歴を有効にする</translation> +<translation id="6419288379019356534">この端末は <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> によって管理されています。 + <ph name="LINE_BREAK" /> + このまま <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> アカウントにログインするには [次へ] をクリックしてください。</translation> <translation id="6419902127459849040">中欧</translation> <translation id="6420676428473580225">デスクトップに追加</translation> <translation id="6422329785618833949">写真を反転しました</translation> @@ -3844,7 +3868,6 @@ <translation id="6662016084451426657">同期エラー: 同期を有効にするには、管理者にお問い合わせください。</translation> <translation id="6663792236418322902">選択したパスワードは、このファイルを後で復元するときに必要です。安全な場所に記録しておいてください。</translation> <translation id="6664237456442406323">パソコンに設定されているハードウェア ID の形式が正しくありません。このため、Chrome OS に最新のセキュリティ修正を適用することができません。お使いのパソコンは、<ph name="BEGIN_BOLD" />悪意のある攻撃を受けやすくなる可能性があります<ph name="END_BOLD" />。</translation> -<translation id="666541661050183336">iframe リソースの読み込み優先度を下げます。</translation> <translation id="6666647326143344290">Google アカウントを使用</translation> <translation id="6675665718701918026">ポインティング デバイスが接続されました</translation> <translation id="6677037229676347494">期待される ID は「<ph name="EXPECTED_ID" />」ですが、「<ph name="NEW_ID" />」になっています。</translation> @@ -3937,6 +3960,7 @@ <translation id="6825883775269213504">ロシア語</translation> <translation id="6827236167376090743">この動画は繰り返し再生されます。</translation> <translation id="6828153365543658583">ログインを以下のユーザーに制限する:</translation> +<translation id="6828434191343384461">選択したデータが Chrome から削除され、同期された端末からも削除されました。他の Google サービスでの検索や操作など、Google アカウントの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> に残ることがあります。</translation> <translation id="6828860976882136098">すべてのユーザーで自動更新を行うよう設定できませんでした(プリフライト実行エラー: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857"><ph name="DEVICE_TYPE" /> に関するヘルプを表示します。</translation> <translation id="6829270497922309893">組織への登録</translation> @@ -4017,6 +4041,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">ポート</translation> <translation id="6965978654500191972">デバイス</translation> +<translation id="6969104364835835175">PNaCl Subzero を強制する</translation> <translation id="6970230597523682626">ブルガリア語</translation> <translation id="6970480684834282392">起動タイプ</translation> <translation id="6970856801391541997">指定したページを印刷</translation> @@ -4100,10 +4125,12 @@ <translation id="7057058088140140610">Google ペイメントのクレジット カードと住所</translation> <translation id="7059858479264779982">自動起動に設定する</translation> <translation id="7061692898138851896">パスワードを自動的に保存する</translation> +<translation id="7062222374113411376">最近閉じたサイトがデータの送受信を完了できるようにする(推奨)</translation> <translation id="7063129466199351735">ショートカットを処理しています...</translation> <translation id="7065223852455347715">このデバイスは企業の登録を防止するモードでロックされています。このデバイスを登録するにはまずデバイスの復元を行ってください。</translation> <translation id="7065534935986314333">システムについて</translation> <translation id="7066944511817949584">「<ph name="DEVICE_NAME" />」に接続できませんでした。</translation> +<translation id="7067725467529581407">今後このメッセージを表示しない。</translation> <translation id="7070804685954057874">直接入力</translation> <translation id="7072010813301522126">ショートカット名</translation> <translation id="7072025625456903686">すべて許可する、またはカスタマイズする</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">対象かどうかチェック</translation> <translation id="749028671485790643">ユーザー <ph name="VALUE" /></translation> <translation id="7491962110804786152">タブ</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> 拡張機能では、パスワードやクレジット カード番号などの個人データを含むすべての入力テキストが収集される可能性があります。この拡張機能を使用しますか?</translation> <translation id="7495778526395737099">パスワードを忘れた場合</translation> <translation id="7503191893372251637">Netscape 証明書タイプ</translation> <translation id="7503821294401948377">ブラウザ操作のアイコン「<ph name="ICON" />」を読み込むことができませんでした。</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">ブラウザ ウィンドウを開く</translation> <translation id="7564847347806291057">プロセスを終了</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome データの消去完了</translation> <translation id="7568790562536448087">更新中:</translation> <translation id="7573172247376861652">バッテリー充電</translation> <translation id="7576032389798113292">6×4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">ゲスト セッションを終了</translation> <translation id="7786889348652477777">アプリを再読み込み(&R)</translation> <translation id="7787129790495067395">パスフレーズを使用しています。パスフレーズを忘れた場合は、Google ダッシュボードで同期をリセットすると Google サーバーからデータを削除できます。</translation> +<translation id="7787308148023287649">別の画面で表示</translation> <translation id="7788080748068240085">「<ph name="FILE_NAME" />」をオフラインで保存するには、あと <ph name="TOTAL_FILE_SIZE" /> の空き領域が必要です。次をお試しください:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />オフライン アクセスが不要になったファイルの固定を解除する<ph name="MARKUP_3" /> <ph name="MARKUP_4" />ダウンロード フォルダからファイルを削除する<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google からこのスマートフォンに通知を送信しました。Bluetooth を使用している場合、スマートフォンと 9 m 以上離れていても <ph name="DEVICE_TYPE" /> がロック解除のままになる可能性があります。これが問題となる場合は、<a>この機能を一時的に無効にする</a>ことができます。</translation> <translation id="7879478708475862060">入力モードのとおり</translation> <translation id="7880836220014399562">「<ph name="BUNDLE_NAME" />」で追加されるアプリと拡張機能:</translation> +<translation id="7881969471599061635">字幕を無効にする</translation> <translation id="7884988936047469945">試験運用版のユーザー補助機能</translation> <translation id="7885253890047913815">最近使用した送信先</translation> <translation id="7885283703487484916">非常に短い</translation> @@ -4989,6 +5020,7 @@ <translation id="839736845446313156">登録</translation> <translation id="8398790343843005537">スマートフォンを検出</translation> <translation id="8398877366907290961">このまま続行</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> で保存したアカウントを使ってログイン</translation> <translation id="8401363965527883709">チェックボックスがオフ</translation> <translation id="8408402540408758445">検索結果を先読みする</translation> <translation id="8410073653152358832">このスマートフォンを使用</translation> @@ -5075,6 +5107,7 @@ <translation id="8545211332741562162">ウェブページで JavaScript の試験運用機能を使用できるようにします。</translation> <translation id="8545575359873600875">パスワードを確認できませんでした。この監視対象ユーザーの管理者によって最近パスワードが変更された可能性があります。パスワードが変更されている場合、新しいパスワードは次回のログインから適用されます。古いパスワードでログインをお試しください。</translation> <translation id="8546306075665861288">画像キャッシュ</translation> +<translation id="854653344619327455">このフラグがオンの場合、ユーザーはデスクトップ共有の選択ウィンドウで音声の共有を指定できません。</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">文字</translation> <translation id="855081842937141170">タブを固定</translation> @@ -5105,6 +5138,7 @@ <translation id="8589311641140863898">試験運用版の拡張機能 API</translation> <translation id="8590375307970699841">自動更新を設定</translation> <translation id="8592071947729879125">iframe の権限を制限する。</translation> +<translation id="8592125506633137593">上位ドキュメントを分離する</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> としてログインしています。<ph name="BEGIN_LINK" />Google ダッシュボード<ph name="END_LINK" />で同期データを管理します。</translation> <translation id="8596540852772265699">カスタム ファイル</translation> <translation id="8596785155158796745">現在、マイクを使用できません。<ph name="BEGIN_LINK" />マイクを管理<ph name="END_LINK" /></translation> @@ -5177,6 +5211,7 @@ <translation id="8688579245973331962">名前が見つからない場合</translation> <translation id="8688644143607459122">[続行] をクリックすると、Google ペイメントの使用に同意したことになります。不正行為からの保護のため、このパソコンに関する情報(位置情報など)が Google ペイメントと共有されます。</translation> <translation id="8689102680909215706">拡張機能「<ph name="EXTENSION_NAME" />」がリモートでインストールされました。</translation> +<translation id="868926756781121513">タブソースでのデスクトップ共有</translation> <translation id="8689341121182997459">有効期限:</translation> <translation id="8690754533598178758">Adobe Flash Player のマイクの例外が異なります。</translation> <translation id="8691686986795184760">(会社のポリシーにより有効)</translation> @@ -5220,6 +5255,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> の代わりに「<ph name="PROTOCOL" />」リンクを開く</translation> <translation id="8737709691285775803">サクラ</translation> <translation id="8741881454555234096">マウスポインタの精度に近づけるためにタップ操作の位置を微調整します。</translation> +<translation id="8741995161408053644">Google アカウントでの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> に残ることがあります。</translation> <translation id="8743712320294854924">シェルフで入力オプションを展開して表示</translation> <translation id="874420130893181774">繁体字ピンイン入力方法</translation> <translation id="8744525654891896746">この監視対象ユーザーのアバターを選択してください</translation> @@ -5233,6 +5269,7 @@ <translation id="8757640015637159332">公開セッションを開始します</translation> <translation id="8757742102600829832">接続する Chromebox を選択</translation> <translation id="8757803915342932642">Google クラウド デバイス上のデバイス</translation> +<translation id="8758895886513993540">デスクトップ共有用のタブをユーザーが選択できるかどうかを制御するフラグです。</translation> <translation id="8759408218731716181">マルチ ログインを設定できません</translation> <translation id="8759753423332885148">詳細</translation> <translation id="8761567432415473239"><ph name="SITE" /> では最近、Google セーフ ブラウジングにより<ph name="BEGIN_LINK" />有害なプログラムが検出<ph name="END_LINK" />されました。</translation> @@ -5443,6 +5480,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB マウスが接続されました</translation> <translation id="9076523132036239772">メール アドレスまたはパスワードを確認できませんでした。まずネットワークに接続してください。</translation> +<translation id="9077132661879924646">Android で統合メディア パイプラインを無効にする。</translation> <translation id="907841381057066561">パッケージ化の処理中に一時的な zip ファイルを作成できませんでした。</translation> <translation id="9083147368019416919">登録解除できませんでした</translation> <translation id="9084064520949870008">ウィンドウとして開く</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index e2efdd0..9e33745 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">ಚಿತ್ರದಲ್ಲಿನ ಚೌಕಾಕಾರದ ಪ್ರದೇಶವೊಂದನ್ನು ಆಯ್ಕೆಮಾಡಿ.</translation> <translation id="1697532407822776718">ನೀವು ಎಲ್ಲ ರೀತಿಯಲ್ಲಿಯೂ ಸಿದ್ಧರಾಗಿರುವಿರಿ!</translation> +<translation id="1697988819212986149">Google ಸಾಧನಗಳಿಂದ ಸಾಮರ್ಥ್ಯಪಡೆದ ಸಂದರ್ಭದ ಮೆನು ಐಟಂಗಳ ಪಕ್ಕದಲ್ಲಿ Google ಐಕಾನ್ ತೋರಿಸುತ್ತದೆ.</translation> <translation id="1699274548822076330">ಇದನ್ನು ಟ್ರೇಸ್-ಅಪ್ಲೋಡ್-url ಫ್ಲ್ಯಾಗ್ ಜೊತೆಗೆ ಸಂಯೋಜನೆಯಲ್ಲಿ ಬಳಸಬೇಕಾಗುತ್ತದೆ. ಎಚ್ಚರಿಕೆ: ಸಕ್ರಿಯಗೊಳಿಸಿದಾಗ, ಪ್ರತಿ ನ್ಯಾವಿಗೇಶನ್ಗೆ ಕಾರ್ಯನಿರ್ವಹಣೆ ಡೇಟಾವನ್ನು Chrome ರೆಕಾರ್ಡ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಟ್ರೇಸ್-ಅಪ್ಲೋಡ್-url ಫ್ಲ್ಯಾಗ್ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ URL ಗೆ ಅಪ್ಲೋಡ್ ಮಾಡುತ್ತದೆ. ನೀವು ಭೇಟಿ ನೀಡುವ ವೆಬ್ಸೈಟ್ಗಳ ಶೀರ್ಷಿಕೆಗಳು ಮತ್ತು URL ಗಳಂತಹ ವೈಯಕ್ತಿಕವಾಗಿ ಗುರುತಿಸಬಹುದಾದ ಮಾಹಿತಿಯನ್ನು (PII) ಟ್ರೇಸ್ ಒಳಗೊಂಡಿರಬಹುದು.</translation> <translation id="1699395855685456105">ಹಾರ್ಡ್ವೇರ್ ಪರಿಷ್ಕರಣೆ:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ನವೀಕರಿಸಿ.</translation> <translation id="1788636309517085411">ಡೀಫಾಲ್ಟ್ ಬಳಸಿ</translation> <translation id="1789575671122666129">ಪಾಪ್ಅಪ್ಗಳು</translation> -<translation id="1790550373387225389">ಪ್ರಸ್ತುತಿ ಮೋಡ್ ಅನ್ನು ನಮೂದಿಸಿ</translation> <translation id="1792705092719258158">ಪ್ರತಿಬಿಂಬಿತ ಪರದೆ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation> <translation id="1793119619663054394">"<ph name="PROFILE_NAME" />" ಮತ್ತು ಈ ಕಂಪ್ಯೂಟರ್ನೊಂದಿಗೆ ಸಂಯೋಜಿತವಾಗಿರವ ಎಲ್ಲ Chrome ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ? ಇದನ್ನು ರದ್ದು ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation> <translation id="179767530217573436">ಹಿಂದಿನ 4 ವಾರಗಳಿಂದ</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಬಾಹ್ಯೋಪಕರಣಗಳಿಗೆ ನಿರ್ದಿಷ್ಟ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಬದಲಾಯಿಸಿ.</translation> <translation id="2673135533890720193">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸವನ್ನು ಓದಿ</translation> <translation id="2673589024369449924">ಈ ಬಳಕೆದಾರರಿಗಾಗಿ ಡೆಸ್ಕ್ಟಾಪ್ ಕಿರುಹಾದಿಯನ್ನು ರಚಿಸಿ</translation> +<translation id="2675358154061544447">ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಗಳಲ್ಲಿ ಕ್ರಾಸ್-ಸೈಟ್ iframe ಗಳನ್ನು ರೆಂಡರ್ ಮಾಡಲು ಹೆಚ್ಚು ಪ್ರಾಯೋಗಿಕ ಬೆಂಬಲ. ಈ ಮೋಡ್ನಲ್ಲಿ, ಡಾಕ್ಯುಮೆಂಟ್ಗಳು ಒಂದು ವೇಳೆ ಅದೇ ವೆಬ್ ಸೈಟ್ನಿಂದ ಆಗಿದ್ದರೆ ಮಾತ್ರ ರೆಂಡರರ್ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತವೆ.</translation> <translation id="2676946222714718093">ಪ್ಲೇ ಆಗುತ್ತಿದೆ</translation> <translation id="2678063897982469759">ಮರು-ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="2678246812096664977">ಎಲ್ಲಾ ಪ್ಲಗಿನ್ಗಳು</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">ಸಿಂಕ್ ರುಜುವಾತುಗಾಗಿ ಸ್ವಯಂ ತುಂಬುವಿಕೆಯನ್ನು ಪಾಸ್ವರ್ಡ್ ನಿರ್ವಾಹಕರು ಹೇಗೆ ನಿಭಾಯಿಸುತ್ತಾರೆ.</translation> <translation id="29611076221683977"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ನ ದಾಳಿಕೋರರು ನಿಮ್ಮ Mac ಸಾಧನದಲ್ಲಿ ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು (ಉದಾಹರಣೆಗೆ, ಫೋಟೋಗಳು, ಪಾಸ್ವರ್ಡ್ಗಳು, ಸಂದೇಶಗಳು ಮತ್ತು ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಮಾಹಿತಿಗಳು) ಕದಿಯಲು ಅಥವಾ ಅಳಿಸುವ ಸಲುವಾಗಿ ಅಪಾಯಕಾರಿ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರಬಹುದು.</translation> <translation id="2961695502793809356">ಮುಂದಕ್ಕೆ ಹೋಗಲು ಕ್ಲಿಕ್ ಮಾಡಿ, ಇತಿಹಾಸ ನೋಡಲು ಒತ್ತಿಹಿಡಿಯಿರಿ</translation> +<translation id="296216853343927883">ಸಂದರ್ಭದ ಮೆನುವಿನಲ್ಲಿ Google ಬ್ರಾಂಡಿಂಗ್</translation> <translation id="2963151496262057773">ಕೆಳಗಿನ ಪ್ಲಗ್-ಇನ್ ಪ್ರತಿಕ್ರಿಯಿಸದಂತದ್ದು: <ph name="PLUGIN_NAME" />ನೀವು ಇದನ್ನು ನಿಲ್ಲಿಸಲು ಬಯಸುವಿರಾ?</translation> <translation id="2963783323012015985">ಟರ್ಕಿಶ್ ಕೀಬೋರ್ಡ್</translation> <translation id="2964193600955408481">Wi-Fi ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">ಇತರ ವ್ಯಕ್ತಿಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಮೇಲಿರುವ ಬಟನ್ ಮೇಲೆ ರೈಟ್ ಕ್ಲಿಕ್ ಮಾಡಿ.</translation> <translation id="3026050830483105579">ಅದೆಲ್ಲವೂ ಇಲ್ಲಿದೆ.</translation> <translation id="302620147503052030"> ಬಟನ್ ಅನ್ನು ತೋರಿಸು</translation> +<translation id="302781076327338683">ಸಂಗ್ರಹವನ್ನು ಬೈಪಾಸ್ ಮಾಡಿ ಪುನಃ ಲೋಡ್ ಮಾಡಿ</translation> +<translation id="3030243755303701754">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರು ನಿಮ್ಮ ಮಾರ್ಗದರ್ಶನದ ಜೊತೆಗೆ ವೆಬ್ ಅನ್ವೇಷಿಸಬಹುದು. Chrome ನಲ್ಲಿ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರ ಮ್ಯಾನೇಜರ್ ಆಗಿ, ನೀವು ಇವುಗಳನ್ನು ಮಾಡಬಹುದು: + + • ಕೆಲವು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಅನುಮತಿಸುವುದು ಅಥವಾ ನಿಷೇಧಿಸುವುದು, + • ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರು ಭೇಟಿ ನೀಡಿದ ವೆಬ್ಸೈಟ್ಗಳ ಪರಿಶೀಲಿಸುವಿಕೆ ಮತ್ತು + • ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳ ನಿರ್ವಹಣೆ. + +ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ರಚಿಸುವುದರಿಂದ Google ಖಾತೆಯು ರಚಿಸಲ್ಪಡುವುದಿಲ್ಲ ಮತ್ತು ಅವರ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸ ಮತ್ತು ಇತರ ಆದ್ಯತೆಗಳು Chrome ಸಿಂಕ್ ಜೊತೆಗೆ ಇತರ ಸಾಧನಗಳಿಗೆ ಅವರನ್ನು ಅನುಸರಿಸುವುದಿಲ್ಲ. ನೀವು ಹೊಸ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಿದ ನಂತರ, ಅವರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ, ಯಾವುದೇ ಸಾಧನದಿಂದ ನೀವು <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> ನಲ್ಲಿ ನಿರ್ವಹಿಸಬಹುದು. + +ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗೆ, ನಮ್ಮ <ph name="BEGIN_LINK" />ಸಹಾಯ ಕೇಂದ್ರ<ph name="END_LINK" />ಕ್ಕೆ ಭೇಟಿ ನೀಡಿ.</translation> <translation id="3031417829280473749">ಏಜೆಂಟ್ X</translation> <translation id="3031557471081358569">ಆಮದು ಮಾಡಲು ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ:</translation> <translation id="3033332627063280038">ಕ್ಯಾಷ್-ನಿಯಂತ್ರಣದ ಪ್ರಾಯೋಗಿಕ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ: ಮರುಮೌಲ್ಯೀಕರಿಸುವಾಗ ಹಳೆಯ ಕ್ಯಾಷ್ ನಿರ್ದೇಶನ. ವಿಳಂಬವನ್ನು ಸುಧಾರಿಸಲು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಮರುಮೌಲ್ಯಿಕರಿಸಬಹುದಾದ ಕೆಲವು ಸಂಪನ್ಮೂಲಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ಇದು ಸರ್ವರ್ಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ.</translation> @@ -1648,7 +1660,6 @@ <translation id="3324301154597925148">ಇದು ನೀವು ನಿರೀಕ್ಷಿಸುತ್ತಿರುವ ಹುಡುಕಾಟ ಪುಟವೇ?</translation> <translation id="3324684065575061611">(ಎಂಟರ್ಪ್ರೈಸ್ ನೀತಿಗಳಿಂದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> ಅನ್ನು ಜಿಪ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation> -<translation id="3330206034087160972">ಪ್ರಸ್ತುತಿ ಮೋಡ್ನಿಂದ ನಿರ್ಗಮಿಸಿ</translation> <translation id="3330686263988132416">WebRTC ಸ್ಟನ್ ಮೂಲದ ಶಿರೋನಾಮೆ</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">ಪ್ರತಿರರೂಪಗೊಂಡ ಪರದೆ ಮಾದರಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ. ಈ ಮಾದರಿಯು ಪರದೆ ಚಿತ್ರವನ್ನು ಅಡ್ಡಲಾಗಿ ತಿರುಗಿಸುತ್ತದೆ.</translation> @@ -1693,6 +1704,7 @@ <translation id="3392020134425442298">ದುರುದ್ದೇಶಪೂರಿತ ಫೈಲ್ ಮರುಪಡೆಯಿರಿ</translation> <translation id="3394150261239285340">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಬಳಸಲು <ph name="HOST" /> ಬಯಸುತ್ತದೆ.</translation> <translation id="3394279550557729862">ಇವುಗಳು ಲಭ್ಯವಿರುವ ಪ್ಲ್ಯಾಟ್ಫಾರ್ಮ್ಗಳಲ್ಲಿ ಸ್ಥಳೀಯ ಅಧಿಸೂಚನೆಯ ಟೋಸ್ಟ್ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆ ಕೇಂದ್ರವನ್ನು ಬಳಸುವುದಕ್ಕೆ ಬೆಂಬಲವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> +<translation id="3394862755749546286">Android ನಲ್ಲಿ ಏಕೀಕೃತ (Android ಮತ್ತು ಡೆಸ್ಕ್ಟಾಪ್) ಮಾಧ್ಯಮ ಪೈಪ್ಲೈನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="3396331542604645348">ಆಯ್ಕೆಮಾಡಿದ ಮುದ್ರಕವು ಲಭ್ಯವಿಲ್ಲ ಅಥವಾ ಸರಿಯಾಗಿ ಸ್ಥಾಪನೆ ಮಾಡಲಾಗಿಲ್ಲ. ನಿಮ್ಮ ಮುದ್ರಕವನ್ನು ಪರೀಕ್ಷಿಸಿ ಅಥವಾ ಅವಶ್ಯವಿದ್ದರೆ ಬೇರೊಂದು ಮುದ್ರಕವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="3399597614303179694">ಮೆಸಿಡೋನಿಯನ್ ಕೀಬೋರ್ಡ್</translation> <translation id="3401130144947259741">ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಟ್ರೇಸ್ ಈವೆಂಟ್ಗಳನ್ನು Windows (ETW) ಗೆ ಈವೆಂಟ್ ಟ್ರೇಸ್ ಮಾಡಲು ರಫ್ತು ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಅದನ್ನು UIF ಅಥವಾ ETW ಅಥವಾ Xperf ಪರಿಕರಗಳ ಮೂಲಕ ಕ್ಯಾಪ್ಚರ್ ಮಾಡಬಹುದು</translation> @@ -1903,7 +1915,6 @@ <translation id="367645871420407123">ರೂಟ್ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಡೀಫಾಲ್ಟ್ ಪರೀಕ್ಷೆ ಚಿತ್ರ ಮೌಲ್ಯಕ್ಕೆ ಹೊಂದಿಸಲು ನೀವು ಬಯಸಿದರೆ ಖಾಲಿ ಬಿಡಿ</translation> <translation id="3678156199662914018">ವಿಸ್ತರಣೆ: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">ಮಾಲ್ಟೀಸ್ ಕೀಬೋರ್ಡ್</translation> -<translation id="3680173818488851340">ಕಡಿಮೆ ಆದ್ಯತೆಯ ಐಫ್ರೇಮ್ಗಳು.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> ಪರದೆ ಹಂಚಿಕೆ ವಿನಂತಿ</translation> <translation id="3685122418104378273">ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಬಳಸುತ್ತಿರುವಾಗ, Google ಡ್ರೈವ್ ಸಿಂಕ್ ಅನ್ನು ಡೀಫಾಲ್ಟ್ ಮೂಲಕ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.</translation> <translation id="3685387984467886507">ನಿರ್ದಿಷ್ಟ ನಿಗಧಿತ ಸಮಯಕ್ಕೆ SSL ದೋಷಗಳ ಮೂಲಕ ಮುಂದುವರಿಯಲು ನಿರ್ಧಾರಗಳನ್ನು ನೆನಪಿಡಿ.</translation> @@ -1952,6 +1963,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ಈಗ ನಿರ್ವಹಣೆ ಕನ್ಸೋಲ್ನಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ</translation> <translation id="3741243925913727067">ನಿಮ್ಮ ಮಾಧ್ಯಮ ಸಾಧನದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು Google ಡ್ರೈವ್ಗೆ ಬ್ಯಾಕಪ್ ಮಾಡಿ.</translation> <translation id="3743492083222969745">ವರ್ಚ್ಯುಯಲ್ ಕೀಬೋರ್ಡ್ಗೆ ಸೆಟ್ಟಿಂಗ್ಗಳ ಪುಟದಲ್ಲಿ ಗೆಸ್ಚರ್ ಟೈಪಿಂಗ್ ಆಯ್ಕೆಯನ್ನು ಸಕ್ರಿಯ/ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ.</translation> +<translation id="3744111561329211289">ಹಿನ್ನೆಲೆ ಸಿಂಕ್</translation> <translation id="3749289110408117711">ಫೈಲ್ ಹೆಸರು</translation> <translation id="3751427701788899101">ಸಂಪರ್ಕ ತಪ್ಪಿಹೋಗಿದೆ</translation> <translation id="3751522270321808809">ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಕದಿಯಲು ಈ ಸೈಟ್ ತಂತ್ರ ಹೂಡಬಹುದು ( ಉದಾಹರಣೆಗೆ, ಪಾಸ್ವರ್ಡ್ಗಳು, ಸಂದೇಶಗಳು ಅಥವಾ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ಗಳು).</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">ಮತ್ತೊಂದು ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="4219614746733932747">ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಸಾಧನದ ಅಳತೆಯ ಅಂಶಕ್ಕೆ ವಿಷಯವನ್ನು ಅಳತೆಮಾಡಲು ತನ್ನ ಝೂಮ್ ಮಾಡುವಿಕೆಯ ಕಾರ್ಯತಂತ್ರವನ್ನು Blink ಬಳಸುತ್ತದೆ.</translation> <translation id="4220865787605972627">ಪ್ರದರ್ಶನವು ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬೆಂಬಲಿಸಿದರೆ ಪ್ರದರ್ಶನದ ಬಣ್ಣ ಮಾಪನಾಂಕವನ್ನು ಅನುಮತಿಸಿ.</translation> +<translation id="4232692576734035989">ಕ್ರಾಸ್-ಸೈಟ್ iframe ಗಳನ್ನು ಪ್ರಮುಖ ಡಾಕ್ಯುಮೆಂಟ್ಗಿಂತ ಪ್ರತ್ಯೇಕ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಇರಿಸಲಾಗಿರುವ ಹೆಚ್ಚು ಪ್ರಾಯೋಗಿಕ ಕಾರ್ಯನಿರ್ವಹಣೆ ಮೋಡ್. ಈ ಮೋಡ್ನಲ್ಲಿ, ವಿಭಿನ್ನ ಮೂರನೇ-ಪಕ್ಷದ ಸೈಟ್ಗಳ iframe ಗಳಿಗೆ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅನುಮತಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="4235200303672858594">ಸಂಪೂರ್ಣ ಪರದೆ</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> ಗಾಗಿ ಖಾತೆಯನ್ನು ಸೇರಿಸು</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ಈ ಭಾಷೆಯಲ್ಲಿ ಪ್ರರ್ದಶಿತವಾಗುವುದಿಲ್ಲ</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">ಫೋಟೊವನ್ನು ತ್ಯಜಿಸಿ</translation> <translation id="4509345063551561634">ಸ್ಥಳ:</translation> <translation id="4514542542275172126">ಹೊಸ ಮೇಲ್ಚಿಚಾರಣೆ ಬಳಕೆದಾರರನ್ನು ಹೊಂದಿಸಿ</translation> +<translation id="4514914692061505365">ಎಲ್ಲಾ pexe ಫೈಲ್ಗಳಿಗೆ PNaCl ನ ಫಾಸ್ಟ್ ಸಬ್ಜೀರೋ ಅನುವಾದಕದ ಬಳಕೆಗೆ ಬಲವಂತಗೊಳಿಸಿ.</translation> <translation id="4518677423782794009">Chrome ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತಿದೆಯೇ, ಕಿರಿಕಿರಿಯುಂಟುಮಾಡುವ ಸ್ಟಾರ್ಟಪ್ ಪುಟಗಳನ್ನು ತೋರಿಸುತ್ತಿದೆಯೇ, ಪರಿಕರ ಪಟ್ಟಿಗಳು, ತೆಗೆದುಹಾಕಲು ಸಾಧ್ಯವಾಗದಂಥ ಅನಿರೀಕ್ಷಿತ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸುತ್ತಿದೆಯೇ ಅಥವಾ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಅನುಭವವನ್ನು ಬದಲಾಯಿಸುತ್ತಿದೆಯೇ? Chrome ಸ್ವಚ್ಛತಾ ಸಾಧನವನ್ನು ರನ್ ಮಾಡುವ ಮೂಲಕ ಈ ಎಲ್ಲಾ ಸಮಸ್ಯೆಗಳಿಗೆ ನೀವು ಪರಿಹಾರ ಕಂಡುಕೊಳ್ಳಬಹುದು.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> ರಿಂದ ಅಜ್ಞಾತ ಸಾಧನಗಳು</translation> <translation id="4522570452068850558">ವಿವರಗಳು</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳನ್ನು ಮ್ಯಾನೇಜರ್ (<ph name="CUSTODIAN_NAME" />) ರಿಂದ ಮಾತ್ರ ಮಾರ್ಪಡಿಸಬಹುದು.</translation> <translation id="4601242977939794209">EMF ಪರಿವರ್ತಕ</translation> <translation id="4602466770786743961">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಅನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಸಂಪರ್ಕಿಸಿಲ್ಲ</translation> <translation id="4608500690299898628">&ಹುಡುಕು...</translation> <translation id="4610637590575890427"><ph name="SITE" /> ವೆಬ್ಸೈಟ್ಗೆ ಹೋಗುವುದೇ?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">ಸೈನ್-ಇನ್ ವಿಫಲವಾಗಿದೆ, ದಯವಿಟ್ಟು ಇಂಟರ್ನೆಟ್ಗೆ ಸಂಪರ್ಕಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="5063180925553000800">ಹೊಸ PIN:</translation> <translation id="5067867186035333991">ನಿಮ್ಮ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಬಯಸುತ್ತದೆಯೇ ಎಂಬುದನ್ನು ಕೇಳಿ</translation> +<translation id="5068918910148307423">ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಮತ್ತು ಸ್ವೀಕರಿಸುವುದನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಲು ಇತ್ತೀಚಿಗೆ ಮುಚ್ಚಿದ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಬೇಡ</translation> <translation id="507075806566596212">ದೂರದಿಂದ ಗುರುತಿಸಲು, ನಾಶಪಡಿಸಲು, ಮತ್ತು ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನೀವು Google ಜೊತೆಗೆ ಈ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು ಸೇರ್ಪಡೆ ಮಾಡಲಿರುವಿರಿ. ಇದಕ್ಕೆ ರೀಬೂಟ್ ಅಗತ್ಯವಿದೆ. ನೀವು ಮುಂದುವರಿಯಲು ಬಯಸುವಿರಾ?</translation> <translation id="5072836811783999860">ನಿರ್ವಹಿಸಲಾದ ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ತೋರಿಸು</translation> <translation id="5074318175948309511">ಹೊಸ ಸೆಟ್ಟಿಂಗ್ಗಳು ಪರಿಣಾಮಕಾರಿಯಾಗುವುದಕ್ಕೆ ಮೊದಲು ಈ ಪುಟವನ್ನು ರಿಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation> @@ -2898,6 +2914,7 @@ <translation id="5227808808023563348">ಹಿಂದಿನ ಪಠ್ಯವನ್ನು ಹುಡುಕಿರಿ</translation> <translation id="5228076606934445476">ಸಾಧನದಲ್ಲಿ ಏನೋ ತಪ್ಪಾಗಿದೆ. ಈ ದೋಷದಿಂದ ಚೇತರಿಸಿಕೊಳ್ಳಲು ನೀವು ಸಾಧನವನ್ನು ರೀಬೂಟ್ ಮಾಡಬೇಕು ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಬೇಕಾಗುತ್ತದೆ.</translation> <translation id="5228962187251412618">ಆನ್ಲೈನ್ ಪರಿಶೀಲನೆ ಮಾತ್ರ</translation> +<translation id="5229622432348746578">ಡೆಸ್ಕ್ಟಾಪ್ ಹಂಚಿಕೆಗೆ ಆಡಿಯೋ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="5230516054153933099">ವಿಂಡೋ</translation> <translation id="5232178406098309195">"Ok Google" ಅಥವಾ ಮೈಕ್ರೊಫೋನ್ ಐಕಾನ್ ಸ್ಪರ್ಶಿಸುವಿಕೆಯಂತಹ ಆಡಿಯೊ ಸಕ್ರಿಯತೆ ಆದೇಶಗಳನ್ನು ನೀವು ಬಳಸಿದಾಗ, ನಿಮ್ಮ ಖಾಸಗಿ ಧ್ವನಿ ಮತ್ತು ಆಡಿಯೊ ಸಕ್ರಿಯತೆಯು ಕೆಲವು ಧ್ವನಿ ಮತ್ತು ಇತರ ಆಡಿಯೊವನ್ನು ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಈ ಮುಂದಿನ ಧ್ವನಿ/ಆಡಿಯೊದ ರೆಕಾರ್ಡಿಂಗ್ ಮತ್ತು ಕೆಲವು ಸೆಕೆಂಡುಗಳ ಹಿಂದಕ್ಕೆ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="523299859570409035">ಅಧಿಸೂಚನೆಗಳ ವಿನಾಯಿತಿಗಳು</translation> @@ -3152,6 +3169,7 @@ <translation id="5557991081552967863">ನಿದ್ರೆ ಸಮಯದಲ್ಲಿ Wi-Fi ಆನ್ ಇರಿಸಿ</translation> <translation id="5558129378926964177">ಜೂಮ್ &ಇನ್</translation> <translation id="556042886152191864">ಬಟನ್</translation> +<translation id="5562781907504170924">ಈ ಟ್ಯಾಬ್ ಅನ್ನು Bluetooth ಸಾಧನಕ್ಕೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ.</translation> <translation id="5565871407246142825">ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ಗಳು</translation> <translation id="5567989639534621706">ಅಪ್ಲಿಕೇಶನ್ ಸಂಗ್ರಹಗಳು</translation> <translation id="5568069709869097550">ಸೈನ್ ಇನ್ ಆಗಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation> @@ -3312,6 +3330,7 @@ <translation id="5803531701633845775">ಕರ್ಸರ್ ಅನ್ನು ಸರಿಸದೇ, ಹಿಂದಿನಿಂದ ನುಡಿಗಟ್ಟುಗಳನ್ನು ಆರಿಸಿ</translation> <translation id="5804241973901381774">ಅನುಮತಿಗಳು</translation> <translation id="580571955903695899">ಶೀರ್ಷಿಕೆಯಂತೆ ಮರುಕ್ರಮಗೊಳಿಸಿ</translation> +<translation id="5808982448801399019">ದೃಢೀಕರಣ ವಿಫಲವಾಗಿದೆ</translation> <translation id="580961539202306967">ಪುಶ್ ಸಂದೇಶಗಳನ್ನು ಸೈಟ್ಗಳು ನನಗೆ ಕಳುಹಿಸಲು ಬಯಸಿದಾಗ ನನ್ನನ್ನು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation> <translation id="5815645614496570556">X.400 ವಿಳಾಸ</translation> <translation id="5817397429773072584">ಸಾಂಪ್ರದಾಯಿಕ ಚೈನೀಸ್</translation> @@ -3581,6 +3600,7 @@ <translation id="6243774244933267674">ಸರ್ವರ್ ಲಭ್ಯವಿಲ್ಲ</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">ಅಪ್ಡೇಟ್ ಸಿದ್ಧವಾಗಿದೆ</translation> +<translation id="6248400709929739064">ಉಪಶೀರ್ಷಿಕೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು</translation> <translation id="6248988683584659830">ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಹುಡುಕಿ</translation> <translation id="6251870443722440887">GDI ನಿರ್ವಹಣೆಗಳು</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> ಸೇವಾ ನಿಯಮಗಳು</translation> @@ -3605,6 +3625,7 @@ <translation id="6277105963844135994">ನೆಟ್ವರ್ಕ್ ಅವಧಿ ಮುಗಿದಿದೆ</translation> <translation id="6277518330158259200">ಸ್ಕ್ರೀ&ನ್ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಿ</translation> <translation id="6279183038361895380">ನಿಮ್ಮ ಕರ್ಸರ್ ತೋರಿಸಲು |<ph name="ACCELERATOR" />| ಒತ್ತಿ</translation> +<translation id="6280215091796946657">ಬೇರೆ ಖಾತೆಯೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="6281743458679673853">ಎಲ್ಲಾ API ಗಳು ಲೇಔಟ್ ವೀವ್ಪೋರ್ಟ್ ಅನ್ನು ಪ್ರತಿಬಿಂಬಿಸುವಂತೆ ಮಾಡುವ ಪ್ರಯೋಗ. ಇದು window.scroll ಗುಣಲಕ್ಷಣಗಳು ಲೇಔಟ್ ವೀವ್ಪೋರ್ಟ್ಗೆ ಸಂಬಂಧ ಹೊಂದುವಂತೆ ಮಾಡುತ್ತದೆ.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಹೊಸ ಪ್ರಿಂಟರ್}one{ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಹೊಸ ಪ್ರಿಂಟರ್ಗಳು}other{ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಹೊಸ ಪ್ರಿಂಟರ್ಗಳು}}</translation> <translation id="6285395082104474418">ಸ್ಥಿತಿ ಪ್ರಯತ್ನಿಸಿ ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್, ಬ್ಯಾಟರಿ ಮತ್ತು ಹೆಚ್ಚಿನ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯನ್ನು ನಿಮಗೆ ತೋರಿಸುತ್ತದೆ.</translation> @@ -3686,6 +3707,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> ನ ಹಿಂದೆ ಸ್ಥಾಪಿಸಿದ ಆವೃತ್ತಿಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="6418481728190846787">ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಪ್ರವೇಶವನ್ನು ಶಾಶ್ವತವಾಗಿ ತೆಗೆಯಿರಿ</translation> <translation id="6418505248408153264">ವಸ್ತು ವಿನ್ಯಾಸ ಇತಿಹಾಸವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು</translation> +<translation id="6419288379019356534">ಈ ಸಾಧನವನ್ನು <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ನಿರ್ವಹಣೆ ಮಾಡುತ್ತಿದೆ. + <ph name="LINE_BREAK" /> + ನಿಮ್ಮ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ಖಾತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸುವುದಕ್ಕೆ "ಮುಂದೆ" ಕ್ಲಿಕ್ ಮಾಡಿ.</translation> <translation id="6419902127459849040">ಮಧ್ಯ ಯುರೋಪಿಯನ್</translation> <translation id="6420676428473580225">ಡೆಸ್ಕ್ಟಾಪ್ಗೆ ಸೇರಿಸಿ</translation> <translation id="6422329785618833949">ಫೋಟೋ ತಿರುಗಿಸು</translation> @@ -3845,7 +3869,6 @@ <translation id="6662016084451426657">ಸಿಂಕ್ ದೋಷ: ಸಿಂಕ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ದಯವಿಟ್ಟು ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="6663792236418322902">ನಂತರ ಈ ಫೈಲ್ ಅನ್ನು ಮರುಸಂಗ್ರಹಿಸಲು ನೀವು ಆಯ್ಕೆಮಾಡಿದ ಪಾಸ್ವರ್ಡ್ ಅಗತ್ಯವಿದೆ. ದಯವಿಟ್ಟು ಸುರಕ್ಷಿತ ಸ್ಥಳದಲ್ಲಿ ರೆಕಾರ್ಡ್ ಮಾಡಿ.</translation> <translation id="6664237456442406323">ದುರದೃಷ್ಟವಶಾತ್, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ತಪ್ಪಾಗಿ ರಚಿಸಲಾದ ಹಾರ್ಡ್ವೇರ್ ID ಯೊಂದಿಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ. ಇದು Chrome OS ಅನ್ನು ಇತ್ತೀಚಿನ ಭದ್ರತೆ ಸರಿಪಡಿಸುವಿಕೆಗಳೊಂದಿಗೆ ನವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ <ph name="BEGIN_BOLD" />ದುರುದ್ದೇಶದ ದಾಳಿಗಳಿಗೆ ಗುರಿಯಾಗುವ ಸಾಧ್ಯತೆಯಿದೆ<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">ಐಫ್ರೇಮ್ ಸಂಪನ್ಮೂಲಗಳ ಲೋಡ್ ಆದ್ಯತೆಯನ್ನು ಕಡಿಮೆಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="6666647326143344290">ನಿಮ್ಮ Google ಖಾತೆಯೊಂದಿಗೆ </translation> <translation id="6675665718701918026">ಪಾಯಿಂಟಿಂಗ್ ಸಾಧನ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ</translation> <translation id="6677037229676347494">ನಿರೀಕ್ಷಿಸಲಾದ ID "<ph name="EXPECTED_ID" />", ಆದರೆ ID ಯು "<ph name="NEW_ID" />" ಆಗಿದೆ.</translation> @@ -3938,6 +3961,7 @@ <translation id="6825883775269213504">ರಷ್ಯನ್</translation> <translation id="6827236167376090743">ಈ ವೀಡಿಯೊ ಸತತವಾಗಿ ಪ್ಲೇ ಆಗುತ್ತಲೇ ಇರುತ್ತದೆ.</translation> <translation id="6828153365543658583">ಕೆಳಗಿನ ಬಳಕೆದಾರರಿಗೆ ಸೈನ್-ಇನ್ ಮಾಡುವುದನ್ನು ನಿರ್ಬಂಧಿಸು:</translation> +<translation id="6828434191343384461">ಆಯ್ಕೆಮಾಡಲಾದ ಡೇಟಾವನ್ನು Chrome ಮತ್ತು ಸಿಂಕ್ ಮಾಡಲ್ಪಟ್ಟ ಸಾಧನಗಳಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />ನಲ್ಲಿನ ಇತರ Google ಸೇವೆಗಳಲ್ಲಿ ಹುಡುಕಾಟಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಯಂತಹ ಬ್ರೌಸಿಂಗ್ ಹುಡುಕಾಟಗಳ ಇತರ ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿರಬಹುದು.</translation> <translation id="6828860976882136098">ಎಲ್ಲ ಬಳಕೆದಾರರಿಗೆ ಸ್ವಯಂಚಾಲಿತ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಹೊಂದಿಸುವುದು ವಿಫಲವಾಗಿದೆ (ಪ್ರೀಫ್ಲೈಟ್ ಅನುಷ್ಠಾನ ದೋಷ: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಮೂಲಕ ಸಹಾಯವನ್ನು ಪಡೆದುಕೊಳ್ಳಿ.</translation> <translation id="6829270497922309893">ನಿಮ್ಮ ಸಂಸ್ಥೆಯಲ್ಲಿ ದಾಖಲಿಸಿಕೊಳ್ಳಿ</translation> @@ -4019,6 +4043,7 @@ <translation id="6965382102122355670">ಸರಿ</translation> <translation id="6965648386495488594">ಪೋರ್ಟ್</translation> <translation id="6965978654500191972">ಸಾಧನ</translation> +<translation id="6969104364835835175">ಫೋರ್ಸ್ PNaCl ಸಬ್ಜೀರೋ</translation> <translation id="6970230597523682626">ಬಲ್ಗೇರಿಯನ್</translation> <translation id="6970480684834282392">ಸ್ಟಾರ್ಟ್ಅಪ್ ಪ್ರಕಾರ</translation> <translation id="6970856801391541997">ನಿರ್ದಿಷ್ಟ ಪುಟಗಳನ್ನು ಮುದ್ರಿಸಿ</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Google Payments ಬಳಸಿಕೊಂಡು ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ಗಳು ಮತ್ತು ವಿಳಾಸಗಳು</translation> <translation id="7059858479264779982">ಆಟೋ-ಲಾಂಚ್ಗೆ ಹೊಂದಿಸಿ</translation> <translation id="7061692898138851896">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಉಳಿಸಿ</translation> +<translation id="7062222374113411376">ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಮತ್ತು ಸ್ವೀಕರಿಸುವುದನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಲು ಇತ್ತೀಚಿಗೆ ಮುಚ್ಚಿದ ಸೈಟ್ಗಳಿಗೆ ಅನುಮತಿಸಿ (ಶಿಫಾರಸು ಮಾಡಿದೆ)</translation> <translation id="7063129466199351735">ಶಾರ್ಟ್ಕಟ್ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="7065223852455347715">ಈ ಸಾಧನವನ್ನು ಎಂಟರ್ರ್ಪ್ರೈಸ್ ನೋಂದಣಿಯನ್ನು ತಡೆಯುವ ಮೋಡ್ನಲ್ಲಿ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ. ನೀವು ಸಾಧನವನ್ನು ನೋಂದಣಿ ಮಾಡಲು ಬಯಸಿದರೆ ನೀವು ಮೊದಲಿಗೆ ಸಾಧನ ಮರುಪ್ರಾಪ್ತಿಯನ್ನು ಮಾಡಬೇಕಾದ ಅಗತ್ಯವಿರುತ್ತದೆ.</translation> <translation id="7065534935986314333">ಸಿಸ್ಟಂ ಬಗ್ಗೆ</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" ಗೆ ಸಂಪರ್ಕಿಸಲು ವಿಫಲಗೊಂಡಿದೆ.</translation> +<translation id="7067725467529581407">ಇದನ್ನು ಎಂದಿಗೂ ಮತ್ತೊಮ್ಮೆ ತೋರಿಸಬೇಡ.</translation> <translation id="7070804685954057874">ನೇರ ಇನ್ಪುಟ್</translation> <translation id="7072010813301522126">ಶಾರ್ಟ್ಕಟ್ ಹೆಸರು</translation> <translation id="7072025625456903686">ಎಲ್ಲವನ್ನೂ ಅನುಮತಿಸಿ ಅಥವಾ ಕಸ್ಟಮೈಸ್ ಮಾಡಿ</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">ಅರ್ಹತೆಯನ್ನು ಪರಿಶೀಲಿಸಿ</translation> <translation id="749028671485790643">ವ್ಯಕ್ತಿ <ph name="VALUE" /></translation> <translation id="7491962110804786152">ಟ್ಯಾಬ್</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> ವಿಸ್ತರಣೆಯು ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಗಳಂತಹ ವೈಯಕ್ತಿಕ ಡೇಟಾ ಒಳಗೊಂಡಂತೆ ನೀವು ಟೈಪ್ ಮಾಡುವ ಎಲ್ಲಾ ಪಠ್ಯವನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು. ಈ ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸಲು ನೀವು ಬಯಸುವಿರಾ?</translation> <translation id="7495778526395737099">ನಿಮ್ಮ ಹಳೆಯ ಪಾಸ್ವರ್ಡ್ ಮರೆತಿರುವಿರಾ?</translation> <translation id="7503191893372251637">Netscape ಪ್ರಮಾಣಪತ್ರ ಪ್ರಕಾರ</translation> <translation id="7503821294401948377">ಬ್ರೌಸರ್ ಕ್ರಿಯೆಗಾಗಿ '<ph name="ICON" />' ಐಕಾನ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">ಬ್ರೌಸರ್ ವಿಂಡೋವನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="7564847347806291057">ಪ್ರಕ್ರಿಯೆ ಕೊನೆಗೊಳಿಸಿ</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome ಡೇಟಾ ತೆರವುಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="7568790562536448087">ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ</translation> <translation id="7573172247376861652">ಬ್ಯಾಟರಿ ಚಾರ್ಜ್</translation> <translation id="7576032389798113292">6x4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">ಅತಿಥಿ ಸೆಷನ್ನಿಂದ ನಿರ್ಗಮಿಸು</translation> <translation id="7786889348652477777">ಅಪ್ಲಿಕೇಶನ್ &ಮರುಲೋಡ್ ಮಾಡಿ</translation> <translation id="7787129790495067395">ನೀವು ಪ್ರಸ್ತುತ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ನೀವು ಮರೆತು ಹೋದಲ್ಲಿ, ನೀವು Google Dashboard ನಲ್ಲಿ ಬಳಸುತ್ತಿರುವ Google ಸರ್ವರ್ನಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಲು ಸಿಂಕ್ ಅನ್ನು ಮರುಹೊಂದಿಸಬಹುದು.</translation> +<translation id="7787308148023287649">ಮತ್ತೊಂದು ಪರದೆಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಿ</translation> <translation id="7788080748068240085">"<ph name="FILE_NAME" />" ಅನ್ನು ಆಫ್ಲೈನ್ನಲ್ಲಿ ಉಳಿಸಲು ನೀವು ಹೆಚ್ಚುವರಿ <ph name="TOTAL_FILE_SIZE" /> ಸ್ಥಳವನ್ನು ತೆರವುಗೊಳಿಸಬೇಕು:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />ಆಫ್ಲೈನ್ನಲ್ಲಿ ಪ್ರವೇಶಿಸಲು ನಿಮಗೆ ಇನ್ನು ಮುಂದೆ ಅವಶ್ಯಕತೆಯಿಲ್ಲದಂತಹ ಫೈಲ್ಗಳನ್ನು ಅನ್ಪಿನ್ ಮಾಡಿ<ph name="MARKUP_3" /> <ph name="MARKUP_4" />ನಿಮ್ಮ ಡೌನ್ಲೋಡ್ ಫೋಲ್ಡರ್ನ ಫೈಲ್ಗಳನ್ನು ಅಳಿಸಿ<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google ಈ ಫೋನ್ಗೆ ಅಧಿಸೂಚನೆಯನ್ನು ಕಳುಹಿಸಿದೆ. ಬ್ಲೂಟೂತ್ ಜೊತೆಗೆ ನಿಮ್ಮ ಫೋನ್ 100 ಅಡಿ ದೂರದಿಂದ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ ಇರಿಸಿರಬಹುದು ಎಂಬುದನ್ನು ಗಮನಿಸಿ. ಕೆಲವು ಸಂದರ್ಭಗಳಲ್ಲಿ ಇದು ಸಮಸ್ಯೆಯಾದಲ್ಲಿ, ನೀವು <a>ತಾತ್ಕಾಲಿಕವಾಗಿ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು</a>.</translation> <translation id="7879478708475862060">ಇನ್ಪುಟ್ ಮೋಡ್ ಅನುಸರಿಸಿ</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" ಈ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳನ್ನು ಸೇರಿಸುತ್ತದೆ:</translation> +<translation id="7881969471599061635">ಉಪಶೀರ್ಷಿಕೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸು</translation> <translation id="7884988936047469945">ಪ್ರಾಯೋಗಿಕ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯಗಳು</translation> <translation id="7885253890047913815">ಇತ್ತೀಚಿನ ಗಮ್ಯಸ್ಥಾನಗಳು</translation> <translation id="7885283703487484916">ತುಂಬಾ ಚಿಕ್ಕದು</translation> @@ -4986,6 +5017,7 @@ <translation id="839736845446313156">ನೋಂದಾಯಿಸಿ</translation> <translation id="8398790343843005537">ನಿಮ್ಮ ಫೋನ್ ಹುಡುಕಿ</translation> <translation id="8398877366907290961">ಏನಾಗಲಿ ಮುಂದುವರೆಯಿರಿ</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> ಜೊತೆಗೆ ಉಳಿಸಲಾಗಿರುವ ನಿಮ್ಮ ಖಾತೆಯ ಜೊತೆಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation> <translation id="8401363965527883709">ಗುರುತಿಸದೆ ಇರುವ ಚೆಕ್ ಬಾಕ್ಸ್</translation> <translation id="8408402540408758445">ಪೂರ್ವಪಡೆಯುವಿಕೆ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳು</translation> <translation id="8410073653152358832">ಈ ಫೋನ್ ಬಳಸಿ</translation> @@ -5072,6 +5104,7 @@ <translation id="8545211332741562162">ಪ್ರಾಯೋಗಿಕ JavaScript ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಬಳಸಲು ವೆಬ್ ಪುಟಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation> <translation id="8545575359873600875">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಈ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರ ನಿರ್ವಾಹಕರು ಬಹುಃಶ ಇತ್ತೀಚಿಗೆ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಿರಬಹುದು. ಹಾಗಿದ್ದರೆ, ಹೊಸ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ನೀವು ಮುಂದಿನ ಬಾರಿ ಸೈನ್ ಇನ್ ಮಾಡುವಾಗ ಅನ್ವಯವಾಗುತ್ತದೆ. ನಿಮ್ಮ ಹಳೆಯ ಪಾಸ್ವರ್ಡ್ ಬಳಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="8546306075665861288">ಇಮೇಜ್ ಸಂಗ್ರಹ</translation> +<translation id="854653344619327455">ಈ ಫ್ಲ್ಯಾಗ್ ಆನ್ ಆಗಿರುವುದರೊಂದಿಗೆ, ಆಡಿಯೋವನ್ನು ಹಂಚಿಕೊಳ್ಳಬೇಕೇ ಎಂಬ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿಕೊಳ್ಳಲು ಬಳಕೆದಾರರಿಗೆ ಡೆಸ್ಕ್ಟಾಪ್ ಹಂಚಿಕೆ ಪಿಕರ್ ವಿಂಡೋ ಅನುಮತಿಸುವುದಿಲ್ಲ.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">ಅಕ್ಷರ</translation> <translation id="855081842937141170">ಪಿನ್ ಟ್ಯಾಬ್</translation> @@ -5102,6 +5135,7 @@ <translation id="8589311641140863898">ಪ್ರಾಯೋಗಿಕ ವಿಸ್ತರಣೆ APIಗಳು</translation> <translation id="8590375307970699841">ಸ್ವಯಂಚಾಲಿತ ನವೀಕರಣಗಳನ್ನು ಹೊಂದಿಸಿ</translation> <translation id="8592071947729879125">iframe ಅನುಮತಿಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ.</translation> +<translation id="8592125506633137593">ಪ್ರಮುಖ ಡಾಕ್ಯುಮೆಂಟ್ ಪ್ರತ್ಯೇಕತೆ</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> ಹೆಸರಿನಲ್ಲಿ ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಿದೆ. <ph name="BEGIN_LINK" />Google ಡ್ಯಾಶ್ಬೋರ್ಡ್<ph name="END_LINK" />ನಲ್ಲಿ ನಿಮ್ಮ ಸಿಂಕ್ಗೊಳಿಸಿದ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಿ.</translation> <translation id="8596540852772265699">ಕಸ್ಟಮ್ ಫೈಲ್ಗಳು</translation> <translation id="8596785155158796745">ಮೈಕ್ರೊಫೋನ್ ಪ್ರಸ್ತುತ ಲಭ್ಯವಿಲ್ಲ. <ph name="BEGIN_LINK" />ಮೈಕ್ರೊಫೋನ್ ನಿರ್ವಹಿಸಿ<ph name="END_LINK" /></translation> @@ -5174,6 +5208,7 @@ <translation id="8688579245973331962">ನಿಮ್ಮ ಹೆಸರು ಕಾಣಲಿಲ್ಲವೇ?</translation> <translation id="8688644143607459122">ಮುಂದುವರಿಸು ಕ್ಲಿಕ್ ಮಾಡುವುದರ ಮೂಲಕ ನೀವು Google Payments ಬಳಕೆಗೆ ಸಮ್ಮತಿಸುತ್ತೀರಿ. ಮೋಸದಿಂದ ನಿಮ್ಮನ್ನು ರಕ್ಷಿಸಲು, ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಕುರಿತ ಮಾಹಿತಿಯನ್ನು (ಅದರ ಸ್ಥಾನವು ಸೇರಿದಂತೆ) Google Payments ನಲ್ಲಿ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" ವಿಸ್ತರಣೆಯನ್ನು ದೂರಸ್ಥವಾಗಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ.</translation> +<translation id="868926756781121513">ಟ್ಯಾಬ್ ಮೂಲದ ಜೊತೆಗೆ ಡೆಸ್ಕ್ಟಾಪ್ ಹಂಚಿಕೆ</translation> <translation id="8689341121182997459">ಅವಧಿ ಮೀರುವುದು:</translation> <translation id="8690754533598178758">Adobe ಫ್ಲ್ಯಾಶ್ ಪ್ಲೇಯರ್ ಮೈಕ್ರೊಫೋನ್ ವಿನಾಯಿತಿಗಳು ವಿಭಿನ್ನವಾಗಿವೆ.</translation> <translation id="8691686986795184760">(ಎಂಟರ್ಪ್ರೈಸ್ ನೀತಿಗಳಿಂದ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ)</translation> @@ -5217,6 +5252,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> ಬದಲಾಗಿ <ph name="PROTOCOL" /> ಲಿಂಕ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="8737709691285775803">ಶಿಲ್</translation> <translation id="8741881454555234096">ಮೌಸ್ಗೆ ಹೋಲಿಸಿದರೆ ಕಳಪೆ ರೆಸಲ್ಯೂಶನ್ ಅನ್ನು ಹೊಂದಿರುವ ಸ್ಪರ್ಶಗಳಿಗಾಗಿ ಸರಿಹೊಂದಿಸಲು ಸ್ಪರ್ಶ ಗೆಸ್ಚರ್ನ ಸ್ಥಿತಿಯನ್ನು ಸಂಸ್ಕರಿಸಿ.</translation> +<translation id="8741995161408053644">ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸದ ಇತರ ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿರಬಹುದು.</translation> <translation id="8743712320294854924">ಶೆಲ್ಫ್ನಲ್ಲಿ ವಿಸ್ತರಿಸಲಾದ ಇನ್ಪುಟ್ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸಿ.</translation> <translation id="874420130893181774">ಸಾಂಪ್ರದಾಯಿಕ ಪಿನ್ಯಿನ್ ಇನ್ಪುಟ್ ವಿಧಾನ</translation> <translation id="8744525654891896746">ಈ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರಿಗಾಗಿ ಒಂದು ಅವತಾರ್ ಆಯ್ಕೆಮಾಡಿ</translation> @@ -5230,6 +5266,7 @@ <translation id="8757640015637159332">ಸಾರ್ವಜನಿಕ ಸೆಷನ್ ನಮೂದಿಸಿ</translation> <translation id="8757742102600829832">ಇದಕ್ಕೆ ಸಂಪರ್ಕಪಡಿಸಲು Chromebox ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="8757803915342932642">Google ಮೇಘ ಸಾಧನಗಳಲ್ಲಿ ಸಾಧನ</translation> +<translation id="8758895886513993540">ಬಳಕೆದಾರರು ಡೆಸ್ಕ್ಟಾಪ್ ಹಂಚಿಕೆಗೆ ಟ್ಯಾಬ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಬಹುದೇ ಎಂಬುದನ್ನು ಈ ಫ್ಲ್ಯಾಗ್ ನಿಯಂತ್ರಿಸುತ್ತದೆ.</translation> <translation id="8759408218731716181">ಬಹು ಸೈನ್-ಇನ್ ಹೊಂದಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="8759753423332885148">ಮತ್ತಷ್ಟು ತಿಳಿಯಿರಿ.</translation> <translation id="8761567432415473239">Google ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ಇತ್ತೀಚಿಗೆ <ph name="SITE" /> ನಲ್ಲಿ <ph name="BEGIN_LINK" />ಹಾನಿಕಾರಕ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಕಂಡುಹಿಡಿದಿದೆ<ph name="END_LINK" />.</translation> @@ -5440,6 +5477,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB ಮೌಸ್ ಸಂಪರ್ಕಗೊಂಡಿದೆ</translation> <translation id="9076523132036239772">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಇಮೇಲ್ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗಲಿಲ್ಲ. ಮೊದಲು ಯಾವುದಾದರೂ ನೆಟ್ವರ್ಕ್ ಜೊತೆ ಸಂಪರ್ಕ ಸಾಧಿಸಲು ಪ್ರಯತ್ನಿಸಿ.</translation> +<translation id="9077132661879924646">Android ನಲ್ಲಿ ಏಕೀಕೃತ ಮಾಧ್ಯಮ ಪೈಪ್ಲೈನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.</translation> <translation id="907841381057066561">ಪ್ಯಾಕೇಜಿಂಗ್ ಸಮಯದಲ್ಲಿ ತಾತ್ಕಾಲಿಕ ಜಿಪ್ ಫೈಲ್ ರಚಿಸಲು ವಿಫಲವಾಗಿದೆ.</translation> <translation id="9083147368019416919">ನೋಂದಣಿ ರದ್ದುಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ</translation> <translation id="9084064520949870008">ವಿಂಡೊ ಅಂತೆ ತೆರೆಯಿರಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 4416fc8..7067b16 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">이미지의 정사각형 영역을 선택합니다.</translation> <translation id="1697532407822776718">설정 완료</translation> +<translation id="1697988819212986149">Google 서비스에서 제공하는 컨텍스트 메뉴 항목 옆에 Google 아이콘을 표시합니다.</translation> <translation id="1699274548822076330">이 플래그는 trace-upload-url 플래그와 함께 사용해야 합니다. 경고: 사용하도록 설정하면 Chrome에서는 모든 탐색에 대해 성능 데이터를 기록하고 이를 trace-upload-url 플래그에서 지정한 URL로 업로드합니다. 사용자가 방문하는 웹사이트의 제목 및 URL 등 PII(개인 식별 정보)가 추적 내용에 포함될 수 있습니다.</translation> <translation id="1699395855685456105">하드웨어 개정:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">동기화 암호를 업데이트하세요.</translation> <translation id="1788636309517085411">기본값 사용</translation> <translation id="1789575671122666129">팝업</translation> -<translation id="1790550373387225389">프레젠테이션 모드 시작</translation> <translation id="1792705092719258158">미러링된 화면 모드 사용</translation> <translation id="1793119619663054394">'<ph name="PROFILE_NAME" />'님을 삭제하고 관련된 모든 Chrome 데이터를 이 컴퓨터에서 삭제하시겠습니까? 실행 후 취소할 수 없습니다.</translation> <translation id="179767530217573436">지난 4주</translation> @@ -1156,6 +1156,7 @@ <translation id="267285457822962309">사용 중인 기기와 주변 기기에 대한 설정을 변경합니다.</translation> <translation id="2673135533890720193">인터넷 사용 기록 확인</translation> <translation id="2673589024369449924">이 사용자에 대한 바로가기를 바탕화면에 표시합니다.</translation> +<translation id="2675358154061544447">별도의 프로세스에서 교차 사이트 iframe 렌더링에 실험 단계의 지원을 제공합니다. 이 모드에서는 같은 웹사이트의 문서인 경우에만 렌더러 프로세스를 공유합니다.</translation> <translation id="2676946222714718093">재생 중:</translation> <translation id="2678063897982469759">다시 사용</translation> <translation id="2678246812096664977">모든 플러그인</translation> @@ -1382,6 +1383,7 @@ <translation id="2960393411257968125">비밀번호 관리자가 동기화 사용자 인증 정보에 대한 자동완성을 처리하는 방식</translation> <translation id="29611076221683977">현재 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />의 공격자가 사용자 정보(예: 사진, 비밀번호, 메시지, 신용카드)를 도용하거나 삭제하는 위험한 프로그램을 Mac에 설치하려고 시도할 수 있습니다.</translation> <translation id="2961695502793809356">클릭하면 다음 페이지로 가고 누르고 있으면 방문 기록이 나타납니다.</translation> +<translation id="296216853343927883">컨텍스트 메뉴에 Google 브랜드 사용</translation> <translation id="2963151496262057773">다음 플러그인에서 응답이 없습니다. <ph name="PLUGIN_NAME" />을(를) 중단하시겠습니까?</translation> <translation id="2963783323012015985">터키어 키보드</translation> <translation id="2964193600955408481">Wi-Fi 사용 안 함</translation> @@ -1431,6 +1433,16 @@ <translation id="3025729795978504041">다른 사용자를 보려면 위의 버튼을 마우스 오른쪽 버튼 클릭합니다.</translation> <translation id="3026050830483105579">한 곳에서 모든 기능을 이용할 수 있습니다</translation> <translation id="302620147503052030">표시 버튼</translation> +<translation id="302781076327338683">캐시 무시하고 새로고침</translation> +<translation id="3030243755303701754">관리 대상 사용자는 내가 정한 범위 내에서 웹을 탐색할 수 있습니다. 관리 대상 사용자의 관리자는 Chrome에서 다음을 수행할 수 있습니다. + + • 특정 웹사이트 허용 또는 금지 + • 관리 대상 사용자가 방문한 웹사이트 검토 + • 기타 설정 관리 + +관리 대상 사용자를 생성해도 Google 계정이 생성되지 않으며, 사용자의 북마크, 탐색 기록 및 기타 환경설정은 Chrome 동기화를 통해 다른 기기에 동기화되지 않습니다. 새로운 관리 대상 사용자를 만든 후에는 언제 어떤 기기를 사용하든 <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> 페이지에서 설정을 관리할 수 있습니다. + +자세한 내용은 <ph name="BEGIN_LINK" />도움말 센터<ph name="END_LINK" />를 참조하세요.</translation> <translation id="3031417829280473749">X 요원</translation> <translation id="3031557471081358569">가져올 항목 선택:</translation> <translation id="3033332627063280038">캐시 제어 stale-while-revalidate directive의 실험적 구현을 사용할 수 있습니다. 이는 서버가 대기 시간을 개선하기 위해 일부 리소스가 백그라운드에서 재확인될 수 있음을 지정할 수 있도록 허용합니다.</translation> @@ -1651,7 +1663,6 @@ <translation id="3324301154597925148">설정한 검색 페이지가 맞습니까?</translation> <translation id="3324684065575061611">(엔터프라이즈 정책에 의해 사용 중지됨)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> 압축 중...</translation> -<translation id="3330206034087160972">프레젠테이션 모드 종료</translation> <translation id="3330686263988132416">WebRTC Stun origin 헤더</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">미러링된 화면 모드를 사용 설정합니다. 이 모드에서는 화면 이미지를 가로로 대칭 이동합니다.</translation> @@ -1696,6 +1707,7 @@ <translation id="3392020134425442298">악성 파일 복구</translation> <translation id="3394150261239285340"><ph name="HOST" />에서 사용자의 카메라와 마이크를 사용하려고 합니다.</translation> <translation id="3394279550557729862">가능한 경우 플랫폼에 기본 알림 메시지 및 알림 센터를 사용하도록 지원합니다.</translation> +<translation id="3394862755749546286">Android에서 통합(Android 및 데스크톱) 미디어 파이프라인을 사용 중지합니다.</translation> <translation id="3396331542604645348">선택한 프린터가 사용할 수 없거나 올바르게 설치되어 있지 않습니다. 프린터를 확인하거나 다른 프린터를 선택해 보세요.</translation> <translation id="3399597614303179694">마케도니아어 키보드</translation> <translation id="3401130144947259741">사용 설정하면 추적 이벤트를 Windows용 이벤트 추적(ETW)으로 내보내고 UIForETW 또는 Xperf와 같은 도구를 사용하여 캡처할 수 있습니다.</translation> @@ -1906,7 +1918,6 @@ <translation id="367645871420407123">루트 비밀번호를 기본 테스트 이미지 값으로 설정하려면 비워두세요.</translation> <translation id="3678156199662914018">확장 프로그램: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">몰타어 키보드</translation> -<translation id="3680173818488851340">우선순위가 낮은 iframe</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 화면 공유 요청</translation> <translation id="3685122418104378273">모바일 데이터를 사용할 때는 Google 드라이브 동기화가 기본적으로 사용 중지됩니다.</translation> <translation id="3685387984467886507">특정 기간 동안 SSL 오류를 진행하기로 한 결정을 저장합니다.</translation> @@ -1955,6 +1966,7 @@ <translation id="3741158646617793859">이제 <ph name="DEVICE_NAME" />(이)가 관리 콘솔에 표시됩니다.</translation> <translation id="3741243925913727067">Google 드라이브에 미디어 기기의 사진과 동영상을 백업합니다.</translation> <translation id="3743492083222969745">가상 키보드의 설정 페이지에서 제스처 타이핑 옵션을 사용 설정/사용 중지합니다.</translation> +<translation id="3744111561329211289">백그라운드 동기화</translation> <translation id="3749289110408117711">파일 이름</translation> <translation id="3751427701788899101">연결이 끊김</translation> <translation id="3751522270321808809">이 사이트에서 사용자의 정보(예: 비밀번호, 메시지, 신용카드)를 도용하기 위해 사용자를 속일 수 있습니다.</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">다른 계정에 로그인</translation> <translation id="4219614746733932747">사용하도록 설정하면 Blink에서 확대/축소 매커니즘을 사용하여 기기 배율에 맞게 콘텐츠를 조정합니다.</translation> <translation id="4220865787605972627">디스플레이가 디스플레이 색상 보정을 지원하는 경우 기능을 허용합니다.</translation> +<translation id="4232692576734035989">교차 사이트 iframe이 최상위 문서에서 별도의 프로세스로 유지되는 실험 단계의 성능 모드입니다. 이 모드에서는 다른 타사 사이트의 iframe에서 프로세스를 공유할 수 있습니다.</translation> <translation id="4235200303672858594">전체 화면</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" />에 계정 추가</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" />을 이 언어로 사용할 수 없습니다.</translation> @@ -2436,6 +2449,7 @@ <translation id="4509017836361568632">사진 삭제</translation> <translation id="4509345063551561634">위치:</translation> <translation id="4514542542275172126">새로운 관리 대상 사용자 설정</translation> +<translation id="4514914692061505365">모든 pexe 파일에서 PNaCl의 빠른 Subzero 변환기를 강제 사용합니다.</translation> <translation id="4518677423782794009">Chrome 작동이 중단되거나 낯선 시작 페이지나 툴바가 표시되거나 예기치 않은 광고가 삭제되지 않거나 기타 인터넷 사용 환경이 변경되는 경우, Chrome 정리도구를 실행하여 문제를 해결할 수 있습니다.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" />의 알 수 없는 기기</translation> <translation id="4522570452068850558">세부정보</translation> @@ -2484,6 +2498,7 @@ <translation id="4595560905247879544">앱 및 확장 프로그램은 관리자(<ph name="CUSTODIAN_NAME" />)만 수정할 수 있습니다.</translation> <translation id="4601242977939794209">EMF 변환기</translation> <translation id="4602466770786743961"><ph name="HOST" />에서 카메라와 마이크에 액세스하도록 항상 허용</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">인터넷에 연결되지 않았습니다.</translation> <translation id="4608500690299898628">찾기(&F)...</translation> <translation id="4610637590575890427"><ph name="SITE" />(으)로 이동하려고 하셨나요?</translation> @@ -2788,6 +2803,7 @@ <translation id="5062930723426326933">로그인하지 못했습니다. 인터넷에 연결한 후 다시 시도하세요.</translation> <translation id="5063180925553000800">새 PIN:</translation> <translation id="5067867186035333991"><ph name="HOST" />에서 마이크에 액세스하려는 경우 메시지 표시</translation> +<translation id="5068918910148307423">최근에 닫은 사이트에서 데이터 전송 및 수신을 완료하도록 허용하지 않음</translation> <translation id="507075806566596212">Google에 <ph name="DEVICE_TYPE" />을(를) 등록하면 기기를 원격으로 찾고, 기기의 데이터를 삭제하고, 기기를 잠그는 기능을 사용할 수 있습니다. 등록한 후에는 재부팅해야 합니다. 계속하시겠습니까?</translation> <translation id="5072836811783999860">관리 북마크 표시</translation> <translation id="5074318175948309511">새로운 설정을 적용하기 전에 페이지를 다시 로드해야 할 수도 있습니다.</translation> @@ -2897,6 +2913,7 @@ <translation id="5227808808023563348">이전 텍스트 찾기</translation> <translation id="5228076606934445476">기기에 문제가 발생했습니다. 이 오류를 해결하려면 기기를 재부팅하고 다시 시도하세요.</translation> <translation id="5228962187251412618">온라인 확인 전용</translation> +<translation id="5229622432348746578">데스크톱 공유에 오디오 사용 중지</translation> <translation id="5230516054153933099">창</translation> <translation id="5232178406098309195">'Ok Google'과 같은 오디오 활성화 명령을 사용하거나 마이크 아이콘을 터치하면 비공개 음성 및 오디오 활동에서 일부 음성 및 기타 오디오를 내 계정에 저장합니다. 뒤에 이어지는 음성 및 오디오 내용과 몇 초 전의 음성 및 오디오 내용 녹음본이 함께 저장됩니다.</translation> <translation id="523299859570409035">알림 예외</translation> @@ -3151,6 +3168,7 @@ <translation id="5557991081552967863">절전 모드 중에 Wi-Fi 계속 사용</translation> <translation id="5558129378926964177">확대(&I)</translation> <translation id="556042886152191864">버튼</translation> +<translation id="5562781907504170924">이 탭이 블루투스 기기에 연결되었습니다.</translation> <translation id="5565871407246142825">신용카드</translation> <translation id="5567989639534621706">애플리케이션 캐시</translation> <translation id="5568069709869097550">로그인할 수 없음</translation> @@ -3310,6 +3328,7 @@ <translation id="5803531701633845775">커서를 이동하지 않고 안쪽에서 구문 선택</translation> <translation id="5804241973901381774">권한</translation> <translation id="580571955903695899">제목순으로 다시 정렬</translation> +<translation id="5808982448801399019">승인 실패</translation> <translation id="580961539202306967">사이트에서 푸시 메시지를 보내려는 경우 알림(권장)</translation> <translation id="5815645614496570556">X.400 주소</translation> <translation id="5817397429773072584">중국어(번체)</translation> @@ -3581,6 +3600,7 @@ <translation id="6243774244933267674">서버를 사용할 수 없음</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">업데이트 준비 완료</translation> +<translation id="6248400709929739064">자막 사용</translation> <translation id="6248988683584659830">설정 검색</translation> <translation id="6251870443722440887">GDI 핸들</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> 서비스 약관</translation> @@ -3605,6 +3625,7 @@ <translation id="6277105963844135994">네트워크 시간 초과</translation> <translation id="6277518330158259200">스크린샷 캡쳐하기(&A)</translation> <translation id="6279183038361895380">|<ph name="ACCELERATOR" />|을(를) 눌러 커서 표시</translation> +<translation id="6280215091796946657">다른 계정으로 로그인</translation> <translation id="6281743458679673853">모든 API가 레이아웃 표시 영역을 반영하도록 하는 실험입니다. 이를 통해 window.scroll 속성이 레이아웃 표시 영역과 연관됩니다.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{네트워크에 새로운 프린터 있음}other{네트워크에 새로운 프린터 있음}}</translation> <translation id="6285395082104474418">상태 표시줄에 네트워크, 배터리 등의 현재 상태가 표시됩니다.</translation> @@ -3686,6 +3707,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" />의 이전 설치 버전으로 되돌리는 중</translation> <translation id="6418481728190846787">모든 앱에 대한 액세스 완전히 삭제</translation> <translation id="6418505248408153264">머티리얼 디자인 기록 사용</translation> +<translation id="6419288379019356534"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />에서 관리하는 기기입니다. + <ph name="LINE_BREAK" /> + '다음'을 클릭하여 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 계정에 로그인하세요.</translation> <translation id="6419902127459849040">중부 유럽어</translation> <translation id="6420676428473580225">바탕화면에 추가</translation> <translation id="6422329785618833949">사진이 뒤집힘</translation> @@ -3846,7 +3870,6 @@ <translation id="6662016084451426657">동기화 오류: 동기화를 사용하도록 설정하려면 관리자에게 문의하세요.</translation> <translation id="6663792236418322902">선택한 비밀번호는 나중에 이 파일을 복원할 때 필요하므로 안전한 위치에 기록해 두세요.</translation> <translation id="6664237456442406323">컴퓨터가 잘못된 형식의 하드웨어 ID로 구성되어 있습니다. 이렇게 하면 Chrome OS가 최신 보안 수정사항을 업데이트할 수 없으며 컴퓨터가<ph name="BEGIN_BOLD" />악의적인 공격에 취약해 집니다<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">iframe 리소스의 로드 우선순위를 낮춥니다.</translation> <translation id="6666647326143344290" /> <translation id="6675665718701918026">포인팅 기기 연결됨</translation> <translation id="6677037229676347494">ID로 '<ph name="EXPECTED_ID" />'을(를) 예상했으나 '<ph name="NEW_ID" />'이(가) 표시되었습니다.</translation> @@ -3939,6 +3962,7 @@ <translation id="6825883775269213504">러시아어</translation> <translation id="6827236167376090743">이 동영상이 계속 반복 재생됩니다.</translation> <translation id="6828153365543658583">로그인할 수 있는 사용자 설정:</translation> +<translation id="6828434191343384461">선택한 데이터가 Chrome 및 동기화된 기기에서 삭제되었습니다. <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />에서 검색이나 기타 Google 서비스에서의 활동 등 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation> <translation id="6828860976882136098">모든 사용자에 대해 자동 업데이트를 설정하지 못했습니다(프리플라이트 실행 오류: <ph name="ERROR_NUMBER" />).</translation> <translation id="6829250331733125857"><ph name="DEVICE_TYPE" /> 사용과 관련하여 도움을 받으세요.</translation> <translation id="6829270497922309893">조직에 등록</translation> @@ -4019,6 +4043,7 @@ <translation id="6965382102122355670">확인</translation> <translation id="6965648386495488594">포트</translation> <translation id="6965978654500191972">기기</translation> +<translation id="6969104364835835175">Force PNaCl Subzero</translation> <translation id="6970230597523682626">불가리아어</translation> <translation id="6970480684834282392">시작 유형</translation> <translation id="6970856801391541997">특정 페이지 인쇄</translation> @@ -4103,10 +4128,12 @@ <translation id="7057058088140140610">Google Payments를 사용하는 신용카드 및 주소</translation> <translation id="7059858479264779982">자동 실행 설정</translation> <translation id="7061692898138851896">비밀번호 자동 저장</translation> +<translation id="7062222374113411376">최근에 닫은 사이트에서 데이터 전송 및 수신을 완료하도록 허용(권장)</translation> <translation id="7063129466199351735">바로가기 처리 중...</translation> <translation id="7065223852455347715">이 기기는 엔터프라이즈 등록을 방지하는 모드로 잠긴 상태입니다. 기기를 등록하려면 먼저 기기를 복구해야 합니다.</translation> <translation id="7065534935986314333">시스템 정보</translation> <translation id="7066944511817949584">'<ph name="DEVICE_NAME" />'에 연결하지 못했습니다.</translation> +<translation id="7067725467529581407">다시 표시하지 않음</translation> <translation id="7070804685954057874">직접 입력</translation> <translation id="7072010813301522126">바로가기 이름</translation> <translation id="7072025625456903686">모두 허용 또는 사용자 정의</translation> @@ -4379,6 +4406,7 @@ <translation id="7489605380874780575">자격 확인</translation> <translation id="749028671485790643">사용자 이름 <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> 확장 프로그램에서 비밀번호와 신용카드 번호 등의 개인정보를 포함해 입력하는 모든 텍스트를 수집할 수 있습니다. 이 확장 프로그램을 사용하시겠어요?</translation> <translation id="7495778526395737099">이전 암호를 잊으셨나요?</translation> <translation id="7503191893372251637">Netscape Certificate Type</translation> <translation id="7503821294401948377">브라우저 작업의 아이콘('<ph name="ICON" />')을 로드하지 못했습니다.</translation> @@ -4430,6 +4458,7 @@ <translation id="756445078718366910">브라우저 창 열기</translation> <translation id="7564847347806291057">프로세스 종료</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome 데이터 삭제됨</translation> <translation id="7568790562536448087">업데이트</translation> <translation id="7573172247376861652">배터리 충전</translation> <translation id="7576032389798113292">6x4</translation> @@ -4559,6 +4588,7 @@ <translation id="7786207843293321886">손님 세션 종료</translation> <translation id="7786889348652477777">앱 새로고침(&R)</translation> <translation id="7787129790495067395">현재 암호를 사용하고 있습니다. 암호를 잊은 경우 Google 대시보드를 사용하여 동기화를 재설정함으로써 Google 서버에서 데이터를 삭제할 수 있습니다.</translation> +<translation id="7787308148023287649">다른 화면에 표시</translation> <translation id="7788080748068240085">'<ph name="FILE_NAME" />'을(를) 오프라인에 저장하려면 다음 방법을 통해 <ph name="TOTAL_FILE_SIZE" />의 추가 여유 공간을 확보해야 합니다.<ph name="MARKUP_1" /> <ph name="MARKUP_2" />더 이상 오프라인 액세스가 필요하지 않은 파일을 고정 해제합니다.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />다운로드 폴더에서 파일을 삭제합니다.<ph name="MARKUP_5" /></translation> @@ -4627,6 +4657,7 @@ <translation id="7878999881405658917">Google에서 이 휴대전화로 알림을 보냈습니다. 블루투스를 사용하면 휴대전화가 9m 이상 떨어진 곳에 있어도 <ph name="DEVICE_TYPE" />을(를) 잠금 해제 상태로 계속 유지할 수 있습니다. 이 설정이 문제가 될 수 있는 경우에는 <a>임시로 이 기능을 사용 중지</a>할 수 있습니다.</translation> <translation id="7879478708475862060">입력 모드 따라하기</translation> <translation id="7880836220014399562">'<ph name="BUNDLE_NAME" />'을(를) 설치하면 추가되는 앱과 확장 프로그램은 다음과 같습니다.</translation> +<translation id="7881969471599061635">자막 사용 중지</translation> <translation id="7884988936047469945">실험용 접근성 기능</translation> <translation id="7885253890047913815">최근 대상</translation> <translation id="7885283703487484916">매우 짧게</translation> @@ -4992,6 +5023,7 @@ <translation id="839736845446313156">등록</translation> <translation id="8398790343843005537">휴대전화 찾기</translation> <translation id="8398877366907290961">무시하고 계속하기</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" />(으)로 저장된 계정으로 로그인</translation> <translation id="8401363965527883709">확인란 선택 안함</translation> <translation id="8408402540408758445">검색결과 미리 가져오기</translation> <translation id="8410073653152358832">이 휴대전화 사용</translation> @@ -5078,6 +5110,7 @@ <translation id="8545211332741562162">실험용 자바스크립트 기능을 사용하기 위해 웹페이지를 사용하도록 설정합니다.</translation> <translation id="8545575359873600875">비밀번호를 확인할 수 없습니다. 이 관리 대상 사용자의 관리자가 최근에 비밀번호를 변경했을 수 있습니다. 비밀번호를 변경했다면 다음에 로그인할 때 새로운 비밀번호를 사용해야 합니다. 이전 비밀번호를 사용해 보세요.</translation> <translation id="8546306075665861288">이미지 캐시</translation> +<translation id="854653344619327455">이 플래그를 사용 설정하면 사용자가 데스크톱 공유 선택기 창을 통한 오디오 공유 여부를 선택할 수 없습니다.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">문자</translation> <translation id="855081842937141170">탭 고정</translation> @@ -5108,6 +5141,7 @@ <translation id="8589311641140863898">실험실 확장 프로그램 API</translation> <translation id="8590375307970699841">자동 업데이트 설정</translation> <translation id="8592071947729879125">iframe 권한 제한</translation> +<translation id="8592125506633137593">최상위 문서 격리</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" />(으)로 로그인되었습니다. <ph name="BEGIN_LINK" />Google 대시보드<ph name="END_LINK" />에서 동기화된 데이터를 관리합니다.</translation> <translation id="8596540852772265699">사용자 지정 파일</translation> <translation id="8596785155158796745">현재 마이크를 사용할 수 없습니다. <ph name="BEGIN_LINK" />마이크 관리<ph name="END_LINK" /></translation> @@ -5180,6 +5214,7 @@ <translation id="8688579245973331962">이름이 표시되지 않습니까?</translation> <translation id="8688644143607459122">계속을 클릭하면 Google Payments 사용에 동의하게 됩니다. 사용자를 사기로부터 보호하기 위해, 위치를 비롯하여 사용자의 컴퓨터에 관한 정보가 Google Payments와 공유됩니다.</translation> <translation id="8689102680909215706">확장 프로그램 '<ph name="EXTENSION_NAME" />'이(가) 원격으로 설치되었습니다.</translation> +<translation id="868926756781121513">탭 소스로 데스크톱 공유</translation> <translation id="8689341121182997459">만료되는 쿠키:</translation> <translation id="8690754533598178758">Adobe Flash Player 마이크 예외가 다릅니다.</translation> <translation id="8691686986795184760">(엔터프라이즈 정책에 의해 사용하도록 설정)</translation> @@ -5223,6 +5258,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> 대신 <ph name="PROTOCOL" /> 링크 열기</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">터치가 마우스에 비해 해상도가 낮은 것을 보완하기 위해 터치 동작의 위치를 수정합니다.</translation> +<translation id="8741995161408053644"><ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />에서 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation> <translation id="8743712320294854924">실행기에서 확장된 입력 옵션을 표시합니다.</translation> <translation id="874420130893181774">번체 병음 입력 방법</translation> <translation id="8744525654891896746">이 관리 대상 사용자의 아바타 선택</translation> @@ -5236,6 +5272,7 @@ <translation id="8757640015637159332">공개 세션 시작하기</translation> <translation id="8757742102600829832">연결할 Chromebox 선택</translation> <translation id="8757803915342932642">Google 클라우드 기기에서 사용하는 기기</translation> +<translation id="8758895886513993540">이 플래그는 사용자에게 데스크톱 공유를 위해 탭을 선택할 수 있도록 허용할지를 관리합니다.</translation> <translation id="8759408218731716181">멀티 로그인을 설정할 수 없음</translation> <translation id="8759753423332885148">자세히 알아보기</translation> <translation id="8761567432415473239">Google 세이프 브라우징 결과 <ph name="SITE" />에서 최근 <ph name="BEGIN_LINK" />악성 프로그램이 발견<ph name="END_LINK" />되었습니다.</translation> @@ -5446,6 +5483,7 @@ <translation id="9074739597929991885">블루투스</translation> <translation id="9074836595010225693">USB 마우스 연결됨</translation> <translation id="9076523132036239772">이메일이나 비밀번호를 확인할 수 없습니다. 먼저 네트워크에 연결해 주세요.</translation> +<translation id="9077132661879924646">Android에서 통합 미디어 파이프라인을 사용 중지합니다.</translation> <translation id="907841381057066561">압축하는 동안 임시 zip 파일을 만들지 못했습니다.</translation> <translation id="9083147368019416919">등록 취소 실패</translation> <translation id="9084064520949870008">창으로 열기</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index b914d82f..2b2181f 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Antrojo lygio klavišas</translation> <translation id="1697068104427956555">Pasirinkite kvadrato formos vaizdo sritį.</translation> <translation id="1697532407822776718">Viskas nustatyta!</translation> +<translation id="1697988819212986149">„Google“ piktograma rodoma šalia kontekstinio meniu elementų, kuriuos teikia „Google“ paslaugos.</translation> <translation id="1699274548822076330">Tai reikia naudoti su pėdsakų įkėlimo URL žyme. ĮSPĖJIMAS: įgalinus „Chrome“ įrašys kiekvieno naršymo našumo duomenis ir įkels į pėdsakų įkėlimo URL žymės nurodytą URL. Į pėdsakus gali būti įtraukta asmens identifikavimo informacijos (AII), pvz., svetainių, kuriose lankotės, pavadinimai ir URL.</translation> <translation id="1699395855685456105">Aparatinės įrangos grąžinimas:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Atnaujinkite sinchronizavimo slaptafrazę.</translation> <translation id="1788636309517085411">Naudoti numatytąją</translation> <translation id="1789575671122666129">Iššokantieji langai</translation> -<translation id="1790550373387225389">Įjungti pateikties režimą</translation> <translation id="1792705092719258158">Įgalinti dubliuojamo ekrano režimą.</translation> <translation id="1793119619663054394">Ar tikrai norite pašalinti „<ph name="PROFILE_NAME" />“ ir visus susietus „Chrome“ duomenis iš šio kompiuterio? Šio veiksmo anuliuoti negalėsite.</translation> <translation id="179767530217573436">pastarųjų 4 savaičių</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Keisti konkrečių įrenginių ir išorinių įtaisų nustatymus.</translation> <translation id="2673135533890720193">Skaityti naršymo istoriją</translation> <translation id="2673589024369449924">Kurti šio naudotojo darbalaukio šaukinį</translation> +<translation id="2675358154061544447">Eksperimentinis skirtingų svetainių „iframe“ atvaizdavimo atskiruose procesuose. Kai veikia šis režimas, dokumentų atvaizdavimo procesas bus toks pat, jei jie yra iš tos pačios svetainės.</translation> <translation id="2676946222714718093">Leidžiama</translation> <translation id="2678063897982469759">Iš naujo įgalinti</translation> <translation id="2678246812096664977">Visi papildiniai</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">Kaip slaptažodžių tvarkytuvė tvarko automatinį sinchronizavimo prisijungimo duomenų pildymą.</translation> <translation id="29611076221683977">Šiuo metu svetainės <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> užpuolėjai gali jūsų „Mac“ įrenginyje bandyti įdiegti pavojingas programas, kurios vagia arba ištrina informaciją (pvz., nuotraukas, slaptažodžius, pranešimus ir kredito kortelių numerius).</translation> <translation id="2961695502793809356">Spustelėkite, kad eitumėte į priekį, palaukite, kad pamatytumėte istoriją</translation> +<translation id="296216853343927883">„Google“ prekės ženklas kontekstiniame meniu</translation> <translation id="2963151496262057773">Šis papildinys neatsako: „<ph name="PLUGIN_NAME" />“ Ar norite jį sustabdyti?</translation> <translation id="2963783323012015985">Turkiška klaviatūra</translation> <translation id="2964193600955408481">Neleisti „Wi-Fi“</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">Kad peržiūrėtumėte kitus žmones, dešiniuoju pelės klavišu spustelėkite anksčiau pateiktą mygtuką.</translation> <translation id="3026050830483105579">Visa tai čia.</translation> <translation id="302620147503052030">Rodyti mygtuką</translation> +<translation id="302781076327338683">Iš naujo įkelti talpyklos apėjimą</translation> +<translation id="3030243755303701754">Prižiūrimas naudotojas gali naršyti žiniatinklį su jūsų priežiūra. Jei esate prižiūrimo naudotojo valdytojas „Chrome“, galite: + + • leisti arba drausti lankytis tam tikrose svetainėse, + • peržiūrėti svetaines, kuriose lankėsi prižiūrimas naudotojas, + • tvarkyti kitus nustatymus. + +Sukūrus prižiūrimą naudotoją „Google“ paskyra nesukuriama. Visos prižiūrimo naudotojos žymės, naršymo istorija ir kitos nuostatos nebus perkeltos į kitus įrenginius naudojant „Chrome“ sinchronizavimo funkciją. Sukūrę prižiūrimą naudotoją, galėsite bet kada bet kokiame įrenginyje tvarkyti jo nustatymus apsilankę adresu <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Jei reikia daugiau informacijos, apsilankykite <ph name="BEGIN_LINK" />Pagalbos centre<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Slaptasis agentas</translation> <translation id="3031557471081358569">Pasirinkite elementus importuoti:</translation> <translation id="3033332627063280038">Įgalinti eksperimentinį talpyklos valdymo: neaktyvios būsenos pakartotinai tvirtinant direktyvos diegimą. Taip leidžiama nurodyti serveriams, kad tam tikrus išteklius galima pakartotinai patvirtinti fone, kad būtų sumažinta delsa.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">Ar tai paieškos puslapis, kurį tikėjotės išvysti?</translation> <translation id="3324684065575061611">(Neleidžiama pagal įmonės politiką)</translation> <translation id="3326821416087822643">Glaudinamas failas „<ph name="FILE_NAME" />“...</translation> -<translation id="3330206034087160972">Išjungti pateikties režimą</translation> <translation id="3330686263988132416">„WebRTC Stun“ šaltinio antraštė</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Įgalinsite dubliuojamo ekrano režimą. Jį įjungus, ekrano vaizdas apverčiamas horizontaliai.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Atkurti kenkėjišką failą</translation> <translation id="3394150261239285340"><ph name="HOST" /> nori naudoti jūsų kamerą ir mikrofoną.</translation> <translation id="3394279550557729862">Įgalinti savųjų pranešimų informacinių langelių ir pranešimų centro naudojimo palaikymą platformose, kuriose jie pasiekiami.</translation> +<translation id="3394862755749546286">„Android“ išjungiama vieninga („Android“ ir stalinių kompiuterių) medijos komandų grandinė.</translation> <translation id="3396331542604645348">Pasirinktas spausdintuvas nepasiekiamas arba netinkamai įdiegtas. Patikrinkite spausdintuvą arba pabandykite pasirinkti kitą spausdintuvą.</translation> <translation id="3399597614303179694">Makedonietiška klaviatūra</translation> <translation id="3401130144947259741">Jei parinktis įgalinta, stebėjimo įvykiai eksportuojami į „Event Tracing for Windows“ (ETW), ir gali būti užfiksuoti naudojant tam tikrus įrankius, pvz., „UIForETW“ arba „Xperf“.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">Jei norite nustatyti numatytojo bandomojo vaizdo vertės pagrindinį slaptažodį, palikite lauką tuščią.</translation> <translation id="3678156199662914018">Plėtinys: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltiečių klaviatūra</translation> -<translation id="3680173818488851340">Žemo prioriteto „iframe“ elementai.</translation> <translation id="3683524264665795342">„<ph name="APP_NAME" />“ ekrano bendrinimo užklausa</translation> <translation id="3685122418104378273">„Google“ disko sinchronizavimas pagal numatytuosius nustatymus yra išjungtas, kai naudojami mobiliojo ryšio duomenys.</translation> <translation id="3685387984467886507">Tam tikrą laikotarpį atsiminti sprendimus tęsti, net jei rodomos SSL klaidos.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859">Dabar „<ph name="DEVICE_NAME" />“ bus rodomas „Admin Console“</translation> <translation id="3741243925913727067">Kurkite atsargines medijos įrenginio nuotraukų ir vaizdo įrašų kopijas „Google“ diske.</translation> <translation id="3743492083222969745">Įgalinama / išjungiama įvesties gestais parinktis virtualiosios klaviatūros nustatymų puslapyje.</translation> +<translation id="3744111561329211289">Fono sinchronizavimas</translation> <translation id="3749289110408117711">Failo pavadinimas</translation> <translation id="3751427701788899101">Ryšys nutrūko</translation> <translation id="3751522270321808809">Šioje svetainėje gali būti bandoma pavogti jūsų informaciją (pvz., slaptažodžius, pranešimus ar kredito kortelės duomenis).</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">Prisijungti prie kitos paskyros</translation> <translation id="4219614746733932747">Jei įgalinta, „Blink“ naudoja savo mastelio keitimo mechanizmą, kad pritaikytų turinio mastelį pagal įrenginio mastelį.</translation> <translation id="4220865787605972627">Leisti kalibruoti ekrano spalvas, jei ekrane funkcija palaikoma.</translation> +<translation id="4232692576734035989">Eksperimentinis našumo režimas, kuriam veikiant atskirų svetainių „iframe“ elementai apdorojami taikant kitokį procesą nei apdorojant pagrindinį dokumentą. Kai veikia šis režimas, „iframe“ elementai iš skirtingų trečiųjų šalių svetainių galės būti apdorojami vykdant tą patį procesą.</translation> <translation id="4235200303672858594">Visas ekranas</translation> <translation id="4235813040357936597">Pridėti paskyrą, skirtą <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">„<ph name="PRODUCT_NAME" />“ negalima rodyti šia kalba</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">Atmesti nuotrauką</translation> <translation id="4509345063551561634">Vieta:</translation> <translation id="4514542542275172126">Nustatyti naują prižiūrimą naudotoją</translation> +<translation id="4514914692061505365">Priverstinai naudoti „PNaCl“ greitą „Subzero“ vertimo programą visuose perkeliamuose vykdomuosiuose failuose.</translation> <translation id="4518677423782794009">Ar „Chrome“ užstringa, rodo neįprastus paleidimo puslapius, įrankių juostas ar netikėtus skelbimus, kurių negalite atsisakyti, ar kitaip pakeičia naršymo funkcijas? Problemą gali pavykti išspręsti paleidus „Chrome“ valymo įrankį.</translation> <translation id="452039078290142656">nežinomi „<ph name="VENDOR_NAME" />“ įrenginiai</translation> <translation id="4522570452068850558">Išsami informacija</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">Programas ir plėtinius gali keisti tik valdytojas (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF keitiklis</translation> <translation id="4602466770786743961">Visada leisti <ph name="HOST" /> pasiekti fotoaparatą ir mikrofoną</translation> +<translation id="4603234488640507661">(„Android“)</translation> <translation id="4605399136610325267">Neprisijungta prie interneto</translation> <translation id="4608500690299898628">Rasti...</translation> <translation id="4610637590575890427">Ar norėjote eiti į <ph name="SITE" />?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">Prisijungiant įvyko klaida. Prisijunkite prie interneto ir bandykite dar kartą.</translation> <translation id="5063180925553000800">Naujas PIN kodas:</translation> <translation id="5067867186035333991">Klausti, jei <ph name="HOST" /> nori pasiekti mikrofoną</translation> +<translation id="5068918910148307423">Neleisti pastaruoju metu uždarytoms svetainėms baigti duomenų siuntimo ir gavimo</translation> <translation id="507075806566596212">Ketinate užregistruoti šį „<ph name="DEVICE_TYPE" />“ sistemoje „Google“. Tai atlikus bus galima nuotoliniu būdu rasti ir užrakinti įrenginį bei ištrinti jo duomenis. Reikės iš naujo paleisti įrenginį. Ar norite tęsti?</translation> <translation id="5072836811783999860">Rodyti tvarkomas žymes</translation> <translation id="5074318175948309511">Kad nauji nustatymai įsigaliotų, šį puslapį gali tekti įkelti iš naujo.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">Rasti ankstesnį tekstą</translation> <translation id="5228076606934445476">Kažkas negerai su įrenginiu. Kad išspręstumėte šią problemą, reikės įkelti operacinę sistemą iš naujo ir bandyti dar kartą.</translation> <translation id="5228962187251412618">Tik patikra internetu</translation> +<translation id="5229622432348746578">Išjungti darbalaukio bendrinimo garsą</translation> <translation id="5230516054153933099">Langas</translation> <translation id="5232178406098309195">Kai naudojate aktyvinimo balsu komandas, pvz., „Ok Google“, arba paliečiate mikrofono piktogramą, jūsų paskyroje išsaugomas privačios veiksmų balsu ir garso veiksmų balso fragmentas ir kitas garso įrašas. Bus išsaugotas toliau nurodytos kalbos ar garso įrašas ir kelios sekundės prieš jį.</translation> <translation id="523299859570409035">Pranešimų išimtys</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">Neišjungti „Wi-Fi“ miego būsenoje</translation> <translation id="5558129378926964177">Artin&ti</translation> <translation id="556042886152191864">Mygtukas</translation> +<translation id="5562781907504170924">Šis skirtukas susietas su „Bluetooth“ įrenginiu.</translation> <translation id="5565871407246142825">Kredito kortelės</translation> <translation id="5567989639534621706">Programos talpyklos</translation> <translation id="5568069709869097550">Nepavyksta prisijungti</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">Pasirinkti frazes iš galo neperkeliant žymiklio</translation> <translation id="5804241973901381774">Leidimai</translation> <translation id="580571955903695899">Pertvarkyti pagal pavadinimą</translation> +<translation id="5808982448801399019">Nepavyko autorizuoti</translation> <translation id="580961539202306967">Paklausti, kai svetainė nori siųsti „Push“ pranešimus (rekomenduojama)</translation> <translation id="5815645614496570556">X.400 adresas</translation> <translation id="5817397429773072584">Tradicinė kinų k.</translation> @@ -3580,6 +3599,7 @@ <translation id="6243774244933267674">Serveris negalimas</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Naujinys paruoštas</translation> +<translation id="6248400709929739064">Įgalinti subtitrus</translation> <translation id="6248988683584659830">Ieškoti nustatymų</translation> <translation id="6251870443722440887">GDI tvarkomi elementai</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> paslaugų teikimo sąlygos</translation> @@ -3604,6 +3624,7 @@ <translation id="6277105963844135994">Baigėsi tinklo skirtasis laikas</translation> <translation id="6277518330158259200">S&ukurti ekrano kopiją</translation> <translation id="6279183038361895380">Paspauskite |<ph name="ACCELERATOR" />|, kad būtų rodomas žymeklis</translation> +<translation id="6280215091796946657">Prisijunkite naudodami kitą paskyrą</translation> <translation id="6281743458679673853">Eksperimentuokite, kad visos API atspindėtų išdėstymo peržiūros sritį. Tada nuosavybės window.scroll bus susijusios su išdėstymo peržiūros sritimi.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Naujas spausdintuvas tinkle}one{Nauji spausdintuvai tinkle}few{Nauji spausdintuvai tinkle}many{Nauji spausdintuvai tinkle}other{Nauji spausdintuvai tinkle}}</translation> <translation id="6285395082104474418">Būsenos dėkle rodoma dabartinė tinklo, akumuliatoriaus ir kitų elementų būsena.</translation> @@ -3685,6 +3706,9 @@ <translation id="6418160186546245112">Atkuriama anksčiau įdiegta „<ph name="IDS_SHORT_PRODUCT_NAME" />“ versija</translation> <translation id="6418481728190846787">Visam laikui pašalinti visų programų prieigą</translation> <translation id="6418505248408153264">Įgalinti trimačių objektų dizaino istoriją</translation> +<translation id="6419288379019356534">Šį įrenginį tvarko domenas <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Spustelėkite „Toliau“, kad tęstumėte prisijungimą prie <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> paskyros.</translation> <translation id="6419902127459849040">Centrinės Europos</translation> <translation id="6420676428473580225">Pridėti prie darbalaukio</translation> <translation id="6422329785618833949">Nuotrauka apversta</translation> @@ -3845,7 +3869,6 @@ <translation id="6662016084451426657">Sinchronizavimo klaida: jei norite įgalinti sinchronizavimą, susisiekite su administratoriumi.</translation> <translation id="6663792236418322902">Pasirenkamas slaptažodis vėliau bus reikalingas atkuriant šį failą. Įrašykite jį saugioje vietoje.</translation> <translation id="6664237456442406323">Deja, jūsų kompiuteris yra sukonfigūruotas naudojant netinkamai suformuotą aparatinės įrangos ID. Tai neleidžia „Chrome“ OS atnaujinti naujausiais saugos pataisymais ir jūsų kompiuteris <ph name="BEGIN_BOLD" />gali būti neatsparus kenkėjiškoms programoms<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Sumažinamas „iframe“ išteklių įkėlimo prioritetas.</translation> <translation id="6666647326143344290">naudodami „Google“ paskyrą</translation> <translation id="6675665718701918026">Manipuliatorius prijungtas</translation> <translation id="6677037229676347494">ID turėjo būti <ph name="EXPECTED_ID" />, o buvo pateiktas – <ph name="NEW_ID" />.</translation> @@ -3938,6 +3961,7 @@ <translation id="6825883775269213504">Rusų</translation> <translation id="6827236167376090743">Šis vaizdo įrašas bus grojamas neribotą laiką.</translation> <translation id="6828153365543658583">Apriboti prisijungimą šiems naudotojams:</translation> +<translation id="6828434191343384461">Pasirinkti duomenys pašalinti iš „Chrome“ ir sinchronizuojamų įrenginių. Adresu <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> gali būti pateikta kitų formų jūsų „Google“ paskyros istorija, pvz., paieškos ir veikla kitose „Google“ paslaugose.</translation> <translation id="6828860976882136098">Nepavyko nustatyti automatinių naujinių visiems naudotojams (išankstinio vykdymo klaida: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Gaukite pagalbos dėl „<ph name="DEVICE_TYPE" />“.</translation> <translation id="6829270497922309893">Užregistruoti organizacijoje</translation> @@ -4019,6 +4043,7 @@ <translation id="6965382102122355670">Gerai</translation> <translation id="6965648386495488594">Prievadas</translation> <translation id="6965978654500191972">Įrenginys</translation> +<translation id="6969104364835835175">Priverstinai vykdyti „PNaCl“ „Subzero“</translation> <translation id="6970230597523682626">Bulgarų</translation> <translation id="6970480684834282392">Paleisties tipas</translation> <translation id="6970856801391541997">Spausdinti konkrečius puslapius</translation> @@ -4104,10 +4129,12 @@ <translation id="7057058088140140610">„Google Payments“ naudojamos kredito kortelės ir adresai</translation> <translation id="7059858479264779982">Nustatyti automatinį paleidimą</translation> <translation id="7061692898138851896">Automatiškai išsaugoti slaptažodžius</translation> +<translation id="7062222374113411376">Leisti pastaruoju metu uždarytoms svetainėms baigti duomenų siuntimą ir gavimą (rekomenduojama)</translation> <translation id="7063129466199351735">Apdorojami spartieji klavišai...</translation> <translation id="7065223852455347715">Įrenginys užrakintas įjungus režimą, dėl kurio neleidžiama jo užregistruoti įmonėje. Jei norite užregistruoti įrenginį, pirmiausia turite atkurti nustatymus.</translation> <translation id="7065534935986314333">Apie sistemą</translation> <translation id="7066944511817949584">Nepavyko prisijungti prie „<ph name="DEVICE_NAME" />“.</translation> +<translation id="7067725467529581407">Niekada daugiau nerodyti.</translation> <translation id="7070804685954057874">Tiesioginė įvestis</translation> <translation id="7072010813301522126">Sparčiojo klavišo pavadinimas</translation> <translation id="7072025625456903686">Leisti viską arba tinkinti</translation> @@ -4380,6 +4407,7 @@ <translation id="7489605380874780575">Tikrinti tinkamumą</translation> <translation id="749028671485790643">Asmuo <ph name="VALUE" /></translation> <translation id="7491962110804786152">Tabuliavimo klavišas</translation> +<translation id="7493386493263658176">Plėtinys „<ph name="EXTENSION_NAME" />“ gali rinkti visą įvedamą tekstą, įskaitant asmeninius duomenis, pvz., slaptažodžius ir kredito kortelės numerius. Ar norite naudoti šį plėtinį?</translation> <translation id="7495778526395737099">Pamiršote seną slaptažodį?</translation> <translation id="7503191893372251637">„Netscape“ sertifikato tipas</translation> <translation id="7503821294401948377">Naršyklės veiksmui įkelti „<ph name="ICON" />“ piktogramos nepavyko.</translation> @@ -4431,6 +4459,7 @@ <translation id="756445078718366910">Atidaryti naršyklės langą</translation> <translation id="7564847347806291057">Baigti procesą</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Išvalyti „Chrome“ duomenys</translation> <translation id="7568790562536448087">Atnaujinama</translation> <translation id="7573172247376861652">Akumuliatoriaus įkrovimas</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4560,6 +4589,7 @@ <translation id="7786207843293321886">Išeiti iš svečio režimo</translation> <translation id="7786889348652477777">&Įkelti programą iš naujo</translation> <translation id="7787129790495067395">Šiuo metu naudojate slaptafrazę. Jei ją pamiršote, galite iš naujo nustatyti sinchronizavimą, kad išvalytumėte duomenis iš „Google“ serverių, naudodami „Google“ prietaisų skydelį.</translation> +<translation id="7787308148023287649">Rodyti kitame ekrane</translation> <translation id="7788080748068240085">Jei norite išsaugoti „<ph name="FILE_NAME" />“ neprisijungę, turite atlaisvinti papildomai <ph name="TOTAL_FILE_SIZE" /> vietos:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />atsekite failus, kurių nebenorite pasiekti neprisijungę<ph name="MARKUP_3" /> <ph name="MARKUP_4" />ištrinkite failus iš atsisiuntimų aplanko<ph name="MARKUP_5" /></translation> @@ -4628,6 +4658,7 @@ <translation id="7878999881405658917">„Google“ išsiuntė pranešimą į šį telefoną. Atminkite, kad naudojant „Bluetooth“ telefonu galima atrakinti „<ph name="DEVICE_TYPE" />“ esant daugiau nei 30 metrų atstumu. Jei tai gali kelti problemų, galite <a>laikinai išjungti šią funkciją</a>.</translation> <translation id="7879478708475862060">Stebėti įvesties režimą</translation> <translation id="7880836220014399562">Įdiegus „<ph name="BUNDLE_NAME" />“ bus pridėtos šios programos ir plėtiniai:</translation> +<translation id="7881969471599061635">Išjungti subtitrus</translation> <translation id="7884988936047469945">Eksperimentinės pritaikymo neįgaliesiems funkcijos</translation> <translation id="7885253890047913815">Naujausios paskirties vietos</translation> <translation id="7885283703487484916">labai trumpa</translation> @@ -4993,6 +5024,7 @@ <translation id="839736845446313156">Registruotis</translation> <translation id="8398790343843005537">Suraskite savo telefoną</translation> <translation id="8398877366907290961">Vis tiek tęsti</translation> +<translation id="8399276228600040370">Prisijungti su paskyra, išsaugota „<ph name="PASSWORD_MANAGER_BRAND" />“</translation> <translation id="8401363965527883709">Nepažymėtas žymimasis laukelis</translation> <translation id="8408402540408758445">Iš anksto pateikti paieškos rezultatus</translation> <translation id="8410073653152358832">Naudoti šį telefoną</translation> @@ -5079,6 +5111,7 @@ <translation id="8545211332741562162">Įgalinti tinklalapius naudoti bandomosios „JavaScript“ funkcijas.</translation> <translation id="8545575359873600875">Apgailestaujame, nepavyko patvirtinti jūsų slaptažodžio. Galbūt šio prižiūrimo naudotojo valdytojas neseniai pakeitė slaptažodį. Jei taip, naujas slaptažodis bus pritaikytas, kai kitą kartą prisijungsite. Pabandykite naudoti seną slaptažodį.</translation> <translation id="8546306075665861288">Vaizdo talpykla</translation> +<translation id="854653344619327455">Įjungus šią žymą, darbalaukio bendrinimo rinkiklio lange naudotojas negalės pasirinkti, ar bendrinti garsą.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Simbolis</translation> <translation id="855081842937141170">Pažymėti skirtuką</translation> @@ -5109,6 +5142,7 @@ <translation id="8589311641140863898">Bandomųjų plėtinių API</translation> <translation id="8590375307970699841">Nustatyti automatinius naujinius</translation> <translation id="8592071947729879125">Apriboti „iframe“ leidimus.</translation> +<translation id="8592125506633137593">Pagrindinio dokumento izoliavimas</translation> <translation id="8594787581355215556">Prisijungėte kaip <ph name="USER_EMAIL_ADDRESS" />. Tvarkykite sinchronizuojamus duomenis <ph name="BEGIN_LINK" />„Google“ informacijos suvestinėje<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Priskirti failai</translation> <translation id="8596785155158796745">Mikrofonas šiuo metu nepasiekiamas. <ph name="BEGIN_LINK" />Tvarkyti mikrofoną<ph name="END_LINK" /></translation> @@ -5181,6 +5215,7 @@ <translation id="8688579245973331962">Nematote savo vardo?</translation> <translation id="8688644143607459122">Spustelėdami „Tęsti“ sutinkate naudoti „Google Payments“. Siekiant apsaugoti jus nuo apgaulės, informacija apie kompiuterį (įskaitant jo vietovę) bus bendrinama su „Google Payments“.</translation> <translation id="8689102680909215706">Plėtinys „<ph name="EXTENSION_NAME" />“ įdiegtas nuotoliniu būdu.</translation> +<translation id="868926756781121513">Darbalaukio bendrinimas su skirtuko šaltiniu</translation> <translation id="8689341121182997459">Galiojimas baigiasi:</translation> <translation id="8690754533598178758">„Adobe Flash Player“ mikrofono išimtys skiriasi.</translation> <translation id="8691686986795184760">(Įgalinta pagal įmonės politiką)</translation> @@ -5224,6 +5259,7 @@ <translation id="8737685506611670901">Atidaryti „<ph name="PROTOCOL" />“ nuorodas vietoje „<ph name="REPLACED_HANDLER_TITLE" />“</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Patikslinti liečiamojo gesto padėtį, siekiant kompensuoti prastą palietimų raišką, palyginti su pele.</translation> +<translation id="8741995161408053644">Adresu <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> gali būti pateikta kitų formų jūsų „Google“ paskyros istorija.</translation> <translation id="8743712320294854924">Rodyti išskleistas įvesties parinktis lentynoje.</translation> <translation id="874420130893181774">Tradicinis „Pinyin“ įvesties metodas</translation> <translation id="8744525654891896746">Pasirinkti šio prižiūrimo naudotojo pseudoportretą</translation> @@ -5237,6 +5273,7 @@ <translation id="8757640015637159332">Pradėti viešą sesiją</translation> <translation id="8757742102600829832">Pasirinkite „Chromebox“, prie kurio reikia prisijungti</translation> <translation id="8757803915342932642">Įrenginys „Google“ debesies įrenginiuose</translation> +<translation id="8758895886513993540">Ši žyma valdo, ar naudotojas gali pasirinkti darbalaukio bendrinimo skirtuką.</translation> <translation id="8759408218731716181">Negalima nustatyti kelių paskyrų</translation> <translation id="8759753423332885148">Sužinokite daugiau.</translation> <translation id="8761567432415473239">„Google“ saugaus naršymo funkcija neseniai <ph name="BEGIN_LINK" />rado kenkėjiškų programų<ph name="END_LINK" /> <ph name="SITE" />.</translation> @@ -5447,6 +5484,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB pelė prijungta</translation> <translation id="9076523132036239772">Apgailestaujame, nepavyko patvirtinti jūsų el. pašto ir slaptažodžio. Pabandykite pirmiausia prisijungti prie tinklo.</translation> +<translation id="9077132661879924646">„Android“ išjungiama vieninga medijos komandų grandinė.</translation> <translation id="907841381057066561">Pakuojant nepavyko sukurti laikino talpiojo („zip“) failo.</translation> <translation id="9083147368019416919">Nepavyko išregistruoti</translation> <translation id="9084064520949870008">Atidaryti kaip langą</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 1612c691..90d84d9b 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Atlasīt attēla laukuma reģionu</translation> <translation id="1697532407822776718">Gatavs!</translation> +<translation id="1697988819212986149">Attēlo Google ikonu blakus tiem kontekstizvēlnes vienumiem, kas tiek nodrošināti Google pakalpojumos.</translation> <translation id="1699274548822076330">Tas ir jāizmanto kopā ar karodziņu “trace-upload-url”. BRĪDINĀJUMS: ja opcija būs iespējota, Chrome reģistrēs veiktspējas datus par katru navigācijas darbību un augšupielādēs to karodziņā “trace-upload-url” norādītajā URL. Šajā trasējumā var būt ietverta personu identificējoša informācija (PII), piemēram, jūsu apmeklēto vietņu nosaukumi un vietrāži URL.</translation> <translation id="1699395855685456105">Aparatūras pārskatījums:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Atjauniniet savu sinhronizācijas ieejas frāzi.</translation> <translation id="1788636309517085411">Izmantot noklusējumu</translation> <translation id="1789575671122666129">Uznirstošie logi</translation> -<translation id="1790550373387225389">Atvērt prezentācijas režīmu</translation> <translation id="1792705092719258158">Iespējot spoguļotā ekrāna režīmu.</translation> <translation id="1793119619663054394">Vai tiešām vēlaties noņemt profilu “<ph name="PROFILE_NAME" />” un visus saistītos Chrome datus no šī datora? Šo darbību nevar atsaukt.</translation> <translation id="179767530217573436">pēdējām četrām nedēļām</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Mainiet savai ierīcei un perifērajām ierīcēm raksturīgos iestatījumus.</translation> <translation id="2673135533890720193">Skatīt jūsu pārlūkošanas vēsturi</translation> <translation id="2673589024369449924">Izveidot darbvirsmas saīsni šim lietotājam</translation> +<translation id="2675358154061544447">Eksperimentāls atbalsts iframe tagu renderēšanai vairākās vietnēs, izmantojot atsevišķus procesus. Šajā režīmā dokumentiem tiks izmantots renderēts process tikai tad, ja tie ir no vienas vietnes.</translation> <translation id="2676946222714718093">Tiek atskaņots šeit:</translation> <translation id="2678063897982469759">Atkārtoti iespējot</translation> <translation id="2678246812096664977">Visi spraudņi</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">Veids, kā paroļu pārvaldnieks izmanto sinhronizācijas akreditācijas datu automātiskās aizpildes funkciju.</translation> <translation id="29611076221683977">Pašlaik vietnē <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> esošie uzbrucēji jūsu Mac datorā var mēģināt instalēt bīstamas programmas, kuras var nozagt vai dzēst jūsu informāciju (piemēram, fotoattēlus, paroles, ziņojumus un informāciju par kredītkartēm).</translation> <translation id="2961695502793809356">Nospiediet, lai dotos uz priekšu, paturiet, lai redzētu vēsturi</translation> +<translation id="296216853343927883">Google zīmols kontekstizvēlnē</translation> <translation id="2963151496262057773">Šis spraudnis neatbild: <ph name="PLUGIN_NAME" />. Vai vēlaties to apturēt?</translation> <translation id="2963783323012015985">Turku valodas tastatūra</translation> <translation id="2964193600955408481">Atspējot Wi-Fi</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">Lai skatītu citus lietotājus, ar peles labo pogu noklikšķiniet uz iepriekš esošās pogas.</translation> <translation id="3026050830483105579">Tas viss ir pieejams šeit!</translation> <translation id="302620147503052030">Rādīt pogu</translation> +<translation id="302781076327338683">Atkārtoti ielādēt, ignorējot kešatmiņu</translation> +<translation id="3030243755303701754">Uzraudzīts lietotājs var pārlūkot tīmekli jūsu vadībā. Kā uzraudzīta lietotāja pārzinis pārlūkā Chrome jūs varat: + + • atļaut vai aizliegt noteiktas vietnes;, + • pārskatīt vietnes, kuras apmeklējis uzraudzītais lietotājs; + • pārvaldīt citus iestatījumus. + +Izveidojot uzraudzīta lietotāja profilu, netiek izveidots Google konts, un uzraudzīta lietotāja grāmatzīmes, pārlūkošanas vēsture un citas preferences nebūs pieejamas citās ierīcēs, kurās tiek izmantota Chrome sinhronizācija. Kad esat izveidojis uzraudzītu lietotāju, varat pārvaldīt tā iestatījumus jebkurā brīdī un jebkurā ierīcē, apmeklējot vietni <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Plašāku informāciju skatiet mūsu <ph name="BEGIN_LINK" />palīdzības centrā<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Aģente X</translation> <translation id="3031557471081358569">Izvēlieties importējamos vienumus:</translation> <translation id="3033332627063280038">Iespējojiet eksperimentālu kešatmiņas pārvaldību — direktīvu “stale-while-revalidate”. Tā ļauj serveriem norādīt, ka dažus resursus var atkārtoti pārbaudīt fonā, lai uzlabotu latentumu.</translation> @@ -1651,7 +1663,6 @@ <translation id="3324301154597925148">Vai šī ir meklēšanas lapa, ko bijāt gaidījis?</translation> <translation id="3324684065575061611">(Atspējots atbilstoši uzņēmuma politikai)</translation> <translation id="3326821416087822643">Notiek faila “<ph name="FILE_NAME" />” tilpsaspiešana...</translation> -<translation id="3330206034087160972">Aizvērt prezentācijas režīmu</translation> <translation id="3330686263988132416">WebRTC Stun avota virsraksts</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Iespējot spoguļotā ekrāna režīmu. Izmantojot šo režīmu, ekrāna attēls tiek pagriezts horizontāli.</translation> @@ -1696,6 +1707,7 @@ <translation id="3392020134425442298">Atgūt ļaunprātīgu failu</translation> <translation id="3394150261239285340"><ph name="HOST" /> vēlas lietot jūsu kameru un mikrofonu.</translation> <translation id="3394279550557729862">Tiek iespējots atbalsts lokālo paziņojumu logu un paziņojumu centra izmantošanai platformās, kur tie ir pieejami.</translation> +<translation id="3394862755749546286">Operētājsistēmā Android atspējo vienoto (Android un datora) multivides konveijeru.</translation> <translation id="3396331542604645348">Atlasītais printeris nav pieejams vai nav instalēts pareizi. Pārbaudiet savu printeri vai pamēģiniet atlasīt citu printeri.</translation> <translation id="3399597614303179694">Maķedoniešu tastatūra</translation> <translation id="3401130144947259741">Ja šī funkcija ir iespējota, trasēšanas notikumi tiek eksportēti rīkā Event Tracing for Windows (ETW), un pēc tam tos var uztvert tādi rīki kā UIForETW vai Xperf.</translation> @@ -1906,7 +1918,6 @@ <translation id="367645871420407123">Atstājiet tukšu, ja vēlaties iestatīt saknes paroli kā noklusējuma testa attēla vērtību.</translation> <translation id="3678156199662914018">Paplašinājums: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltiešu tastatūra</translation> -<translation id="3680173818488851340">Zemas prioritātes iFrame tagi.</translation> <translation id="3683524264665795342">Lietotnes <ph name="APP_NAME" /> nosūtītais ekrāna kopīgošanas pieprasījums</translation> <translation id="3685122418104378273">Izmantojot mobilos datus, Google diska sinhronizācija pēc noklusējuma ir atspējota.</translation> <translation id="3685387984467886507">Atcerēties lēmumus, lai noteiktā laika periodā turpinātu darbību pēc SSL kļūdu parādīšanas.</translation> @@ -1955,6 +1966,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ierīce tagad tiks rādīta administratora konsolē</translation> <translation id="3741243925913727067">Dublējiet savas multivides ierīces fotoattēlus un videoklipus Google diskā.</translation> <translation id="3743492083222969745">Iespējot/atspējot ievadi ar žestiem virtuālās tastatūras iestatījumu lapā</translation> +<translation id="3744111561329211289">Sinhronizācija fonā</translation> <translation id="3749289110408117711">Faila nosaukums</translation> <translation id="3751427701788899101">Savienojums tika zaudēts</translation> <translation id="3751522270321808809">Šī vietne var mēģināt jūs maldināt, lai izkrāptu jūsu informāciju (piemēram, paroles, ziņojumus vai kredītkaršu datus).</translation> @@ -2272,6 +2284,7 @@ <translation id="4218259925454408822">Pierakstīties citā kontā</translation> <translation id="4219614746733932747">Ja opcija ir iespējota, Blink izmanto tālummaiņas mehānismu, lai mērogotu saturu atbilstoši ierīces mērogošanas koeficientam.</translation> <translation id="4220865787605972627">Tiek atļauta displeja krāsu kalibrācija, ja displejs atbalsta šo funkciju.</translation> +<translation id="4232692576734035989">Eksperimentāls veiktspējas uzlabošanas režīms, kurā dažādu vietņu iframe tagi darbojas atsevišķi no galvenā dokumenta. Šajā režīmā iframe tagiem no dažādām trešās puses vietnēm ir atļauts koplietot procesu.</translation> <translation id="4235200303672858594">Viss ekrāns</translation> <translation id="4235813040357936597">Pievienot kontu šim lietotājam: <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> nevar parādīt šajā valodā</translation> @@ -2437,6 +2450,7 @@ <translation id="4509017836361568632">Atmest fotoattēlu</translation> <translation id="4509345063551561634">Atraans vieta:</translation> <translation id="4514542542275172126">Izveidot jaunu uzraudzītā lietotāja profilu</translation> +<translation id="4514914692061505365">Piespiedu kārtā izmantot ātro PNaCl tulkotāju Subzero visiem PEXE failiem.</translation> <translation id="4518677423782794009">Vai pārlūkprogrammā Chrome notiek avārijas, tiek rādītas neparastas sākumlapas, rīkjoslas, neparedzētas reklāmas, kuras nevarat noņemt, vai kā citādi tiek ietekmēta pārlūkošana? Iespējams, varat novērst problēmu, izmantojot Chrome tīrīšanas rīku.</translation> <translation id="452039078290142656">nezināmas ierīces, ko piedāvā <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Informācija</translation> @@ -2485,6 +2499,7 @@ <translation id="4595560905247879544">Lietotnes un paplašinājumus var pārveidot tikai pārvaldnieks (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF pārveidotājs</translation> <translation id="4602466770786743961">Vienmēr atļaut vietnei <ph name="HOST" /> piekļūt kamerai un mikrofonam</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Nav interneta savienojuma</translation> <translation id="4608500690299898628">&Atrast...</translation> <translation id="4610637590575890427">Vai jūs vēlējāties doties uz <ph name="SITE" />?</translation> @@ -2789,6 +2804,7 @@ <translation id="5062930723426326933">Pierakstīšanās neizdevās. Lūdzu, izveidojiet savienojumu ar internetu un mēģiniet vēlreiz.</translation> <translation id="5063180925553000800">Jauns PIN:</translation> <translation id="5067867186035333991">Vaicāt, vai vietne <ph name="HOST" /> vēlas piekļūt mikrofonam</translation> +<translation id="5068918910148307423">Neļaut nesen aizvērtajām vietnēm pabeigt datu sūtīšanu un saņemšanu</translation> <translation id="507075806566596212">Jūs gatavojaties reģistrēt šo <ph name="DEVICE_TYPE" /> ierīci Google tīklā, lai varētu attālināti atrast un bloķēt ierīci, kā arī attālināti dzēst ierīces datus. Lai veiktu reģistrēšanu, ierīce būs jārestartē. Vai vēlaties turpināt?</translation> <translation id="5072836811783999860">Rādīt pārvaldītās grāmatzīmes</translation> <translation id="5074318175948309511">Lai jaunie iestatījumi tiktu piemēroti, iespējams, šī lapa būs jāielādē atkārtoti.</translation> @@ -2898,6 +2914,7 @@ <translation id="5227808808023563348">Atrast iepriekšējo tekstu</translation> <translation id="5228076606934445476">Ierīcē radās kļūda. Lai to novērstu, jums ir atkārtoti jāpalaiž ierīce un jāmēģina vēlreiz.</translation> <translation id="5228962187251412618">Tikai tiešsaistes pārbaude</translation> +<translation id="5229622432348746578">Atspējot audio darbvirsmas kopīgošanai</translation> <translation id="5230516054153933099">Logs</translation> <translation id="5232178406098309195">Kad izmantojat aktivizēšanas audio komandas, piemēram, frāzi “Ok Google”, vai pieskaraties mikrofona ikonai, jūsu kontā tiek saglabāti balss un citi audio ieraksti, izmantojot jūsu iestatījumu “Balss un audio darbības”. Tiks saglabāts ierunātā audio materiāla ieraksts, kā arī dažu iepriekšējo sekunžu ieraksts.</translation> <translation id="523299859570409035">Paziņojumu izņēmumi</translation> @@ -3152,6 +3169,7 @@ <translation id="5557991081552967863">Neizslēgt Wi-Fi, kamēr ierīce darbojas miega režīmā</translation> <translation id="5558129378926964177">Tuvināt</translation> <translation id="556042886152191864">Poga</translation> +<translation id="5562781907504170924">Šī cilne ir piesaistīta Bluetooth ierīcei.</translation> <translation id="5565871407246142825">Kredītkartes</translation> <translation id="5567989639534621706">Lietojumprogrammu kešatmiņas</translation> <translation id="5568069709869097550">Nevarat pieteikties</translation> @@ -3311,6 +3329,7 @@ <translation id="5803531701633845775">Izvēlieties frāzes no aizmugures, nepārvietojot kursoru</translation> <translation id="5804241973901381774">Atļaujas</translation> <translation id="580571955903695899">Pārkārtot pēc nosaukuma</translation> +<translation id="5808982448801399019">Neizdevās autorizēt</translation> <translation id="580961539202306967">Jautāt, ja vietne vēlas sūtīt pašpiegādes ziņojumus (ieteicams)</translation> <translation id="5815645614496570556">X.400 adrese</translation> <translation id="5817397429773072584">Ķīniešu (tradicionālā)</translation> @@ -3582,6 +3601,7 @@ <translation id="6243774244933267674">Serveris nav pieejams.</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Var veikt atjaunināšanu</translation> +<translation id="6248400709929739064">Iespējot subtitrus</translation> <translation id="6248988683584659830">Meklēt iestatījumus</translation> <translation id="6251870443722440887">GDI apstrādātāji</translation> <translation id="6251889282623539337">Vietnes <ph name="DOMAIN" /> pakalpojumu sniegšanas noteikumi</translation> @@ -3606,6 +3626,7 @@ <translation id="6277105963844135994">Radās tīkla noildze.</translation> <translation id="6277518330158259200">I&egūt ekrānuzņēmumu</translation> <translation id="6279183038361895380">Lai tiktu parādīts kursors, nospiediet |<ph name="ACCELERATOR" />|</translation> +<translation id="6280215091796946657">Pierakstīties ar citu kontu</translation> <translation id="6281743458679673853">Eksperiments, kurā visas saskarnes API atspoguļo izkārtojuma skatvietu. Tādējādi window.scroll rekvizīti būs atkarīgi no izkārtojuma skatvietas.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Jauns printeris jūsu tīklā}zero{Jauni printeri jūsu tīklā}one{Jauni printeri jūsu tīklā}other{Jauni printeri jūsu tīklā}}</translation> <translation id="6285395082104474418">Statusa teknē tiek rādīts jūsu tīkla, akumulatora un citu vienumu pašreizējais statuss.</translation> @@ -3687,6 +3708,9 @@ <translation id="6418160186546245112">Notiek iepriekš instalētās <ph name="IDS_SHORT_PRODUCT_NAME" /> versijas atjaunošana</translation> <translation id="6418481728190846787">Neatgriezeniski noņemt piekļuvi visām lietotnēm</translation> <translation id="6418505248408153264">Iespējot materiāla dizaina vēsturi</translation> +<translation id="6419288379019356534">Šo ierīci pārvalda <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Lai turpinātu pierakstīšanos <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> kontā, noklikšķiniet uz Tālāk.</translation> <translation id="6419902127459849040">Centrāleiropiešu</translation> <translation id="6420676428473580225">Pievienošana darbvirsmai</translation> <translation id="6422329785618833949">Fotoattēls apvērsts</translation> @@ -3847,7 +3871,6 @@ <translation id="6662016084451426657">Sinhronizācijas kļūda: sazinieties ar administratoru, lai iespējotu sinhronizāciju.</translation> <translation id="6663792236418322902">Izvēlētā parole būs nepieciešama faila atjaunošanai nākotnē. Lūdzu, pierakstiet to drošā vietā.</translation> <translation id="6664237456442406323">Diemžēl jūsu datora konfigurācijā tika izmantots nepareizi veidots aparatūras ID. Šī iemesla dēļ operētājsistēmu Chrome OS nevarēja atjaunināt, izmantojot jaunākos drošības labojumus, un jūsu dators, iespējams, <ph name="BEGIN_BOLD" />nebūs aizsargāts pret ļaunprātīgiem uzbrukumiem<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Pazemina iFrame resursu ielādes prioritāti.</translation> <translation id="6666647326143344290">Google kontā</translation> <translation id="6675665718701918026">Rādītājierīce ir pievienota.</translation> <translation id="6677037229676347494">Paredzētais ID bija <ph name="EXPECTED_ID" />, bet faktiskais ID ir <ph name="NEW_ID" />.</translation> @@ -3940,6 +3963,7 @@ <translation id="6825883775269213504">Krievu valoda</translation> <translation id="6827236167376090743">Šis videoklips tiks atkārtoti atskaņots.</translation> <translation id="6828153365543658583">Ierobežot pierakstīšanos, izņemot šādiem lietotājiem:</translation> +<translation id="6828434191343384461">Atlasītie dati ir noņemti no pārlūka Chrome un sinhronizētajām ierīcēm. Jūsu Google kontam vietnē <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> var būt cita veida pārlūkošanas vēstures dati, piemēram, meklēšanas vaicājumi un darbības citos Google pakalpojumos.</translation> <translation id="6828860976882136098">Neizdevās iestatīt automātiskos atjauninājumus visiem lietotājiem (pirmslidojuma izpildes kļūda: <ph name="ERROR_NUMBER" />).</translation> <translation id="6829250331733125857">Saņemiet palīdzību savai <ph name="DEVICE_TYPE" /> ierīcei.</translation> <translation id="6829270497922309893">Reģistrēšanās savā organizācijā</translation> @@ -4021,6 +4045,7 @@ <translation id="6965382102122355670">Labi</translation> <translation id="6965648386495488594">Ports</translation> <translation id="6965978654500191972">Ierīce</translation> +<translation id="6969104364835835175">Piespiedu kārtā izmantot PNaCl Subzero</translation> <translation id="6970230597523682626">Bulgāru valoda</translation> <translation id="6970480684834282392">Startēšanas veids</translation> <translation id="6970856801391541997">Drukāt konkrētas lapas</translation> @@ -4105,10 +4130,12 @@ <translation id="7057058088140140610">Kredītkartes un adreses, izmantojot Google Payments</translation> <translation id="7059858479264779982">Iestatīt automātisku palaišanu</translation> <translation id="7061692898138851896">Automātiska paroļu saglabāšana</translation> +<translation id="7062222374113411376">Atļaut nesen aizvērtajām vietnēm pabeigt datu sūtīšanu un saņemšanu</translation> <translation id="7063129466199351735">Notiek saīšņu apstrāde...</translation> <translation id="7065223852455347715">Šī ierīce ir fiksēta režīmā, kas neļauj veikt uzņēmuma reģistrēšanu. Ja vēlaties reģistrēt šo ierīci, vispirms ir jāveic tās atkopšana.</translation> <translation id="7065534935986314333">Par sistēmu</translation> <translation id="7066944511817949584">Neizdevās izveidot savienojumu ar ierīci <ph name="DEVICE_NAME" />.</translation> +<translation id="7067725467529581407">Nekad vairs nerādīt šo informāciju.</translation> <translation id="7070804685954057874">Tiešā ievade</translation> <translation id="7072010813301522126">Saīsnes nosaukums</translation> <translation id="7072025625456903686">Atļaut visu vai pielāgot</translation> @@ -4381,6 +4408,7 @@ <translation id="7489605380874780575">Pārbaudīt piemērotību</translation> <translation id="749028671485790643"><ph name="VALUE" />. persona</translation> <translation id="7491962110804786152">cilne</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> var apkopot visu ievadīto tekstu, tostarp privātus datus, piemēram, paroles un kredītkaršu numurus. Vai vēlaties izmantot šo paplašinājumu?</translation> <translation id="7495778526395737099">Vai aizmirsāt savu iepriekšējo paroli?</translation> <translation id="7503191893372251637">Netscape sertifikāta veids</translation> <translation id="7503821294401948377">Nevarēja ielādēt pārlūka darbības ikonu “<ph name="ICON" />”.</translation> @@ -4432,6 +4460,7 @@ <translation id="756445078718366910">Atvērt pārlūkprogrammas logu</translation> <translation id="7564847347806291057">Pārtraukt procesu</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome dati tika notīrīti</translation> <translation id="7568790562536448087">Notiek atjaunināšana</translation> <translation id="7573172247376861652">Akumulatora uzlāde</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4561,6 +4590,7 @@ <translation id="7786207843293321886">Aizvērt viesa sesiju</translation> <translation id="7786889348652477777">&Atkārtoti ielādēt lietotni</translation> <translation id="7787129790495067395">Šobrīd jūs izmantojat ieejas frāzi. Ja esat aizmirsis savu ieejas frāzi, varat atiestatīt sinhronizāciju, izmantojot Google informācijas paneli, lai dzēstu datus no Google serveriem.</translation> +<translation id="7787308148023287649">Attēlot citā ekrānā</translation> <translation id="7788080748068240085">Lai failu “<ph name="FILE_NAME" />” saglabātu bezsaistē, jums ir jāatbrīvo <ph name="TOTAL_FILE_SIZE" /> vietas.<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Atspraudiet failus, kuriem vairs nav jāpiekļūst bezsaistē.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Dzēsiet failus no mapes Lejupielādes.<ph name="MARKUP_5" /></translation> @@ -4629,6 +4659,7 @@ <translation id="7878999881405658917">Google nosūtīja paziņojumu uz šo tālruni. Ņemiet vērā: izmantojot Bluetooth, tālrunis var uzturēt atbloķētu <ph name="DEVICE_TYPE" /> ierīci, kas atrodas pat 30 metru attālumā. Gadījumos, kad tas nav vēlams, varat <a>īslaicīgi atspējot šo funkciju</a>.</translation> <translation id="7879478708475862060">Sekot ievades režīmam</translation> <translation id="7880836220014399562">“<ph name="BUNDLE_NAME" />” pievienos šādas lietotnes un paplašinājumus:</translation> +<translation id="7881969471599061635">Atspējot subtitrus</translation> <translation id="7884988936047469945">Eksperimentālas pieejamības funkcijas</translation> <translation id="7885253890047913815">Nesenie printeri</translation> <translation id="7885283703487484916">ļoti īss</translation> @@ -4994,6 +5025,7 @@ <translation id="839736845446313156">Reģistrējiet</translation> <translation id="8398790343843005537">Atrast tālruni</translation> <translation id="8398877366907290961">Turpināt jebkurā gadījumā</translation> +<translation id="8399276228600040370">Pierakstieties kontā, kas saglabāts <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Izvēles rūtiņa ar noņemtu atzīmi</translation> <translation id="8408402540408758445">Iepriekš ienest meklēšanas rezultātus</translation> <translation id="8410073653152358832">Izmantot šo tālruni</translation> @@ -5080,6 +5112,7 @@ <translation id="8545211332741562162">Iespējot tīmekļa lapas izmantot eksperimentālās JavaScript funkcijas.</translation> <translation id="8545575359873600875">Diemžēl jūsu paroli nevarēja verificēt. Iespējams, šī uzraudzītā lietotāja pārzinis nesen ir mainījis paroli. Šādā gadījumā jaunā parole tiks lietota nākamajā pierakstīšanās reizē. Mēģiniet lietot iepriekšējo paroli.</translation> <translation id="8546306075665861288">Attēlu kešatmiņa</translation> +<translation id="854653344619327455">Ja šis karodziņš ir iespējots, darbvirsmas kopīgošanas atlasītāja logā lietotājs nevarēs izvēlēties, vai kopīgot audio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Rakstzīme</translation> <translation id="855081842937141170">Piespraust cilni</translation> @@ -5110,6 +5143,7 @@ <translation id="8589311641140863898">Eksperimentālie paplašinājumu API</translation> <translation id="8590375307970699841">Iestatīt automātiskos atjauninājumus</translation> <translation id="8592071947729879125">Ierobežot iFrame atļaujas.</translation> +<translation id="8592125506633137593">Galvenā dokumenta izolēšana</translation> <translation id="8594787581355215556">Esat pierakstījies kā <ph name="USER_EMAIL_ADDRESS" />. Pārvaldiet savus sinhronizētos datus <ph name="BEGIN_LINK" />Google vadības panelī<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Pielāgotie faili</translation> <translation id="8596785155158796745">Mikrofons pašlaik nav pieejams. <ph name="BEGIN_LINK" />Pārvaldīt mikrofonu<ph name="END_LINK" /></translation> @@ -5182,6 +5216,7 @@ <translation id="8688579245973331962">Vai neredzat savu vārdu?</translation> <translation id="8688644143607459122">Noklikšķinot uz “Turpināt”, jūs piekrītat izmantot pakalpojumu Google Payments. Lai nodrošinātu aizsardzību pret krāpšanu, informācija par jūsu datoru (tostarp tā atrašanās vieta) tiks kopīgota ar pakalpojumu Google Payments.</translation> <translation id="8689102680909215706">Paplašinājums “<ph name="EXTENSION_NAME" />” tika instalēts attāli.</translation> +<translation id="868926756781121513">Darbvirsmas koplietošana, atļauts cilnes avots</translation> <translation id="8689341121182997459">Beigsies:</translation> <translation id="8690754533598178758">Adobe Flash Player mikrofona izņēmumi atšķiras.</translation> <translation id="8691686986795184760">(Iespējots saskaņā ar uzņēmuma politiku.)</translation> @@ -5225,6 +5260,7 @@ <translation id="8737685506611670901">atvērt <ph name="PROTOCOL" /> saites, nevis <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Tiek precizēta skāriena žesta pozīcija, lai kompensētu skārienus, kuriem ir slikta precizitāte, salīdzinot ar peli.</translation> +<translation id="8741995161408053644">Jūsu Google kontam var būt cita veida pārlūkošanas vēstures dati vietnē <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Rādīt izvērstās ievades iespējas plauktā</translation> <translation id="874420130893181774">Tradicionālā piņjiņa ievades metode</translation> <translation id="8744525654891896746">Atveida atlasīšana uzraudzītajam lietotājam</translation> @@ -5238,6 +5274,7 @@ <translation id="8757640015637159332">Pievienoties publiskai sesijai</translation> <translation id="8757742102600829832">Ierīces, ar kurām ir jāsavieno Chromebox dators</translation> <translation id="8757803915342932642">Ierīce Google mākoņa ierīcēs</translation> +<translation id="8758895886513993540">Šis karodziņš nosaka, vai lietotāji var izvēlēties cilni darbvirsmas koplietošanai.</translation> <translation id="8759408218731716181">Nevar iestatīt vairākkārtēju pierakstīšanos.</translation> <translation id="8759753423332885148">Uzziniet vairāk.</translation> <translation id="8761567432415473239">Google drošās pārlūkošanas tehnoloģija nesen vietnē <ph name="SITE" /> <ph name="BEGIN_LINK" />atklāja kaitīgas programmas<ph name="END_LINK" />.</translation> @@ -5448,6 +5485,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB pele ir pievienota.</translation> <translation id="9076523132036239772">Diemžēl jūsu e-pasta adresi vai paroli nevarēja verificēt. Vispirms mēģiniet izveidot savienojumu ar tīklu.</translation> +<translation id="9077132661879924646">Operētājsistēmā Android atspējo vienoto multivides konveijeru.</translation> <translation id="907841381057066561">Pakošanas laikā neizdevās izveidot pagaidu zip failu.</translation> <translation id="9083147368019416919">Neizdevās atcelt reģistrāciju</translation> <translation id="9084064520949870008">Atvērt kā logu</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 3532916..779b3b6 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -500,6 +500,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">ചിത്രത്തിന്റെ ഒരു പൂര്ണ്ണമായ ഭാഗം തിരഞ്ഞെടുക്കുക.</translation> <translation id="1697532407822776718">എല്ലാം സജ്ജമായിക്കഴിഞ്ഞു!</translation> +<translation id="1697988819212986149">Google സേവനങ്ങൾ നൽകുന്ന സന്ദർഭ മെനു ഇനങ്ങൾക്ക് അടുത്തായി ഒരു Google ഐക്കൺ കാണിക്കുന്നു.</translation> <translation id="1699274548822076330">ഇത് trace-upload-url flag എന്നതുമായുള്ള സംയോജനമായി ഉപയോഗിക്കേണ്ടതാണ്. മുന്നറിയിപ്പ്: പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുമ്പോൾ, എല്ലാ നാവിഗേഷന്റെയും പ്രകടന ഡാറ്റ Chrome റെക്കോർഡ് ചെയ്ത ശേഷം trace-upload-url flag വ്യക്തമാക്കിയ URL- ലേക്ക് അത് അപ്ലോഡ് ചെയ്യും. നിങ്ങൾ സന്ദർശിക്കുന്ന വെബ്സൈറ്റുകളുടെ പേരുകൾ, URL- കൾ എന്നിവ പോലുള്ള വ്യക്തിഗത തിരിച്ചറിയൽ വിവരം (PII) ട്രെയ്സിൽ ഉൾപ്പെടുത്തിയേക്കാം.</translation> <translation id="1699395855685456105">ഹാര്ഡ്വെയര് അവലോകനം:</translation> @@ -560,7 +561,6 @@ <translation id="1783075131180517613">നിങ്ങളുടെ സമന്വയ പാസ്ഫ്രേസ് ദയവായി അപ്ഡേറ്റ് ചെയ്യുക.</translation> <translation id="1788636309517085411">സ്ഥിരസ്ഥിതി ഉപയോഗിക്കുക</translation> <translation id="1789575671122666129">പോപ്പ്അപ്പുകൾ</translation> -<translation id="1790550373387225389">അവതരണ മോഡ് നൽകുക</translation> <translation id="1792705092719258158">മിററിംഗ് ചെയ്ത സ്ക്രീൻ മോഡ് പ്രവർത്തനക്ഷമമാക്കുക.</translation> <translation id="1793119619663054394">ഈ കമ്പ്യൂട്ടറിൽ നിന്ന് "<ph name="PROFILE_NAME" />" എന്നതും അതുമായി ബന്ധപ്പെട്ട എല്ലാ Chrome ഡാറ്റയും നീക്കംചെയ്യണമെന്ന് തീർച്ചയാണോ? ഇത് പഴയപടിയാക്കാനാകില്ല.</translation> <translation id="179767530217573436">കഴിഞ്ഞ 4 ആഴ്ച</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">നിങ്ങളുടെ ഉപകരണത്തിലേക്കും ബാഹ്യ ഘടകങ്ങളിലേക്കും നിർദ്ദിഷ്ടമാക്കിയിരിക്കുന്ന ക്രമീകരണങ്ങൾ മാറ്റുക.</translation> <translation id="2673135533890720193">നിങ്ങളുടെ ബ്രൗസിംഗ് ചരിത്രം വായിക്കുക</translation> <translation id="2673589024369449924">ഈ ഉപയോക്താവിനായി ഒരു ഡെസ്ക്ടോപ്പ് കുറുക്കുവഴി സൃഷ്ടിക്കുക</translation> +<translation id="2675358154061544447">വെവ്വേറേ പ്രോസസ്സുകളിലൂടെ ക്രോസ്-സൈറ്റ് iframes റെൻഡർ ചെയ്യുന്നതിനുള്ള ഉയർന്ന പരീക്ഷണാത്മക പിന്തുണ. ഈ മോഡിൽ, ഡോക്യുമെന്റുകൾ സമാന വെബ്സൈറ്റിൽ നിന്നാണെങ്കിൽ മാത്രമേ ഒരു റെൻഡറർ പ്രോസസ്സ് പങ്കിടുകയുള്ളൂ.</translation> <translation id="2676946222714718093">ഇതിൽ പ്ലേ ചെയ്യുന്നു</translation> <translation id="2678063897982469759">പുനഃപ്രാപ്തമാക്കുക</translation> <translation id="2678246812096664977">എല്ലാ പ്ലഗിന്നുകളും</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">സമന്വയ ക്രെഡൻഷ്യലിനായി, പാസ്വേഡ് മാനേജർ ഓട്ടോഫിൽ കൈകാര്യം ചെയ്യുന്നതെങ്ങനെയാണ്.</translation> <translation id="29611076221683977"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> എന്നതിലെ നിലവിലുള്ള അക്രമകാരികൾ നിങ്ങളുടെ വിവരങ്ങൾ ഇല്ലാതാക്കാനോ മോഷ്ടിക്കാനോ ഇടയുള്ള (ഉദാഹരണത്തിന്, ഫോട്ടോകൾ, പാസ്വേഡുകൾ, സന്ദേശങ്ങൾ, ക്രെഡിറ്റ് കാർഡുകൾ മുതലായവ) അപകടകരമായ പ്രോഗ്രാമുകൾ Mac-ൽ ഇൻസ്റ്റാളുചെയ്യാൻ ശ്രമിച്ചേക്കാം.</translation> <translation id="2961695502793809356">മുന്നോട്ട് പോകാൻ ക്ലിക്കുചെയ്യുക, ചരിത്രം കാണാന് ഹോള്ഡ് ചെയ്യുക</translation> +<translation id="296216853343927883">സന്ദർഭ മെനുവിലെ Google ബ്രാൻഡിംഗ്</translation> <translation id="2963151496262057773">ഇനിപ്പറയുന്ന പ്ലഗിൻ പ്രതികരിക്കാത്തതാണ്: <ph name="PLUGIN_NAME" />അത് നിർത്തണോ?</translation> <translation id="2963783323012015985">ടര്ക്കിഷ് കീബോര്ഡ്</translation> <translation id="2964193600955408481">Wi-Fi അപ്രാപ്തമാക്കുക</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">മറ്റുള്ളവരെ കാണാൻ മുകളിലുള്ള ബട്ടണിൽ വലത് ക്ലിക്കുചെയ്യുക.</translation> <translation id="3026050830483105579">ഇതെല്ലാം ഇവിടെയുണ്ട്.</translation> <translation id="302620147503052030">ബട്ടണ് കാണിക്കുക</translation> +<translation id="302781076327338683">കാഷെ ബൈപാസുചെയ്യുന്നത് റീലോഡുചെയ്യുക</translation> +<translation id="3030243755303701754">ഒരു സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിന് നിങ്ങളുടെ മാർഗ്ഗനിർദ്ദേശത്തോടെ വെബിനെ അടുത്തറിയാനാകും. Chrome-ലെ സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിന്റെ മാനേജർ എന്ന നിലയിൽ, നിങ്ങൾക്ക് ഇനിപ്പറയുന്നവ ചെയ്യാനാകും: + + • ചില വെബ്സൈറ്റുകളെ അനുവദിക്കുകയോ നിരോധിക്കുകയോ ചെയ്യാം, + • സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവ് സന്ദർശിച്ചിട്ടുള്ള വെബ്സൈറ്റുകൾ അവലോകനം ചെയ്യാനും ഒപ്പം + • മറ്റ് ക്രമീകരണം മാനേജുചെയ്യാനുമാകും. + +സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിനെ സൃഷ്ടിക്കുന്നതിലൂടെ ഒരു Google അക്കൗണ്ട് സൃഷ്ടിക്കപ്പെടില്ല, ഒപ്പം Chrome സമന്വയത്തിനൊപ്പം അവരുടെ ബുക്ക്മാർക്കുകൾ, ബ്രൗസിംഗ് ചരിത്രം, മറ്റ് മുൻഗണനകൾ എന്നിവ മറ്റ് ഉപകരണങ്ങളിൽ ലഭിക്കുകയുമില്ല. സൂപ്പർവൈസുചെയ്ത ഒരു പുതിയ ഉപയോക്താവിനെ സൃഷ്ടിച്ചതിന് ശേഷം, <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> എന്നതിൽ ഏത് ഉപകരണത്തിൽ നിന്നും എപ്പോൾ വേണമെങ്കിലും നിങ്ങൾക്ക് അവരുടെ ക്രമീകരണം മാനേജുചെയ്യാനാകും. + +കൂടുതൽ വിവരങ്ങൾക്ക്, ഞങ്ങളുടെ <ph name="BEGIN_LINK" />സഹായ കേന്ദ്രം<ph name="END_LINK" /> സന്ദർശിക്കുക.</translation> <translation id="3031417829280473749">ഏജന്റ് X</translation> <translation id="3031557471081358569">ഇറക്കുമതി ചെയ്യുന്നതിനായി ഇനങ്ങള് തിരഞ്ഞെടുക്കുക:</translation> <translation id="3033332627063280038">കാഷെ നിയന്ത്രണം: stale-while-revalidate ഡയറക്റ്റീവിന്റെ പരീക്ഷണാത്മക നിർവ്വഹണം പ്രവർത്തനക്ഷമമാക്കുക . ലേറ്റൻസി മെച്ചപ്പെടുത്തുന്നതിന്, പശ്ചാത്തലത്തിൽ ചില ഉറവിടങ്ങൾ മൂല്യനിർണ്ണയം ചെയ്യാനിടയുണ്ടെന്ന് വ്യക്തമാക്കാൻ ഇത് സെർവറുകളെ അനുവദിക്കുന്നു.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">നിങ്ങൾ പ്രതീക്ഷിച്ച തിരയൽ പേജ് ഇതാണോ?</translation> <translation id="3324684065575061611">(എന്റര്പ്രൈസ് നയത്താല് അപ്രാപ്തമാക്കിയിരിക്കുന്നു)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> zip ചെയ്യുന്നു...</translation> -<translation id="3330206034087160972">പ്രസന്റേഷൻ മോഡിന് പുറത്ത് കടക്കുക</translation> <translation id="3330686263988132416">WebRTC സ്റ്റൺ ആരംഭ ഹെഡ്ഡർ</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">മിറർ ചെയ്ത സ്ക്രീൻ മോഡ് പ്രവർത്തനക്ഷമമാക്കുക. ഈ മോഡ് സ്ക്രീൻ ചിത്രത്തെ തിരശ്ചീനമായി ഫ്ലിപ്പ് ചെയ്യുന്നു.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">ക്ഷുദ്രകരമായ ഫയൽ വീണ്ടെടുക്കുക</translation> <translation id="3394150261239285340"><ph name="HOST" /> നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്നു.</translation> <translation id="3394279550557729862">പ്രദേശിക അറിയിപ്പ് ടോസ്റ്റുകളും അറിയിപ്പ് കേന്ദ്രവും ലഭ്യമായ പ്ലാറ്റ്ഫോമുകളിൽ ഉപയോഗിക്കുന്നതിനുള്ള പിന്തുണ പ്രവർത്തനക്ഷമമാക്കുക.</translation> +<translation id="3394862755749546286">Android-ൽ ഏകീകൃത (Android, ഡെസ്ക്ടോപ്പ് എന്നിവ) മീഡിയ പൈപ്പ്ലൈൻ പ്രവർത്തനരഹിതമാക്കുന്നു.</translation> <translation id="3396331542604645348">തിരഞ്ഞെടുത്ത പ്രിന്റർ ലഭ്യമല്ല അല്ലെങ്കിൽ ശരിയായി ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. നിങ്ങളുടെ പ്രിന്റർ പരിശോധിക്കുകയോ മറ്റൊരു പ്രിന്റർ തിരഞ്ഞെടുക്കാൻ ശ്രമിക്കുകയോ ചെയ്യുക</translation> <translation id="3399597614303179694">മാസിഡോണിയൻ കീബോർഡ്</translation> <translation id="3401130144947259741">പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ ട്രെയ്സ് ഇവന്റുകൾ, Windows-നായുള്ള ഇവന്റ് ട്രെയ്സിംഗിലേക്ക് (ETW) എക്സ്പോർട്ടുചെയ്യും ഒപ്പം അത് UIForETW അല്ലെങ്കിൽ Xperf എന്നീ ടൂളുകൾ ഉപയോഗിച്ച് ക്യാപ്ച്ചർ ചെയ്യാനുമാകും.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">സ്ഥിരം പരീക്ഷണ ചിത്ര മൂല്യത്തിലേക്ക് റൂട്ട് പാസ്വേഡ് സജ്ജീകരിക്കണമെങ്കിൽ ശൂന്യമായിടുക</translation> <translation id="3678156199662914018">വിപുലീകരണം: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">മാൾട്ടീസ് കീബോർഡ്</translation> -<translation id="3680173818488851340">മുൻഗണന കുറഞ്ഞ iframes.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> സ്ക്രീൻ പങ്കിടൽ അഭ്യർത്ഥന</translation> <translation id="3685122418104378273">മൊബൈൽ ഡാറ്റ ഉപയോഗിക്കുമ്പോൾ, സാധാരണയായി Google ഡ്രൈവ് സമന്വയം പ്രവർത്തനരഹിതമാകുന്നു.</translation> <translation id="3685387984467886507">ഒരു നിശ്ചിത സമയത്തേയ്ക്ക് SSL പിശകുകളിലൂടെ മുന്നോട്ടുപോകാനുള്ള തീരുമാനങ്ങൾ ഓർക്കുക.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" />, ഇപ്പോൾ അഡ്മിൻ കൺസോളിൽ ദൃശ്യമാകും</translation> <translation id="3741243925913727067">Google ഡ്രൈവിലേക്ക് നിങ്ങളുടെ മീഡിയ ഉപകരണത്തിന്റെ ഫോട്ടോകളും വീഡിയോകളും ബാക്കപ്പുചെയ്യുക.</translation> <translation id="3743492083222969745">വെർച്വൽ കീബോർഡിനായി ക്രമീകരണ പേജിൽ ജെസ്റ്റർ ടൈപ്പിംഗ് ഓപ്ഷൻ പ്രവർത്തനക്ഷമമാക്കുക/പ്രവർത്തനരഹിതമാക്കുക.</translation> +<translation id="3744111561329211289">പശ്ചാത്തല സമന്വയിപ്പിക്കൽ</translation> <translation id="3749289110408117711">ഫയല് നാമം</translation> <translation id="3751427701788899101">കണക്ഷൻ പോയി</translation> <translation id="3751522270321808809">നിങ്ങളുടെ വിവരങ്ങൾ മോഷ്ടിക്കാനായി ഈ സൈറ്റ് നിങ്ങളെ കബളിപ്പിക്കാൻ ശ്രമിച്ചേക്കാം (ഉദാഹരണത്തിന്, പാസ്വേഡുകൾ, സന്ദേശങ്ങൾ, ക്രെഡിറ്റ് കാർഡുകൾ പോലുള്ളവ).</translation> @@ -2268,6 +2280,7 @@ <translation id="4218259925454408822">മറ്റൊരു അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="4219614746733932747">പ്രവർത്തനക്ഷമമാക്കിയെങ്കിൽ, ഉപകരണ സ്കെയിൽ ഘടകത്തിനായി ഉള്ളടക്കം സ്കെയിൽ ചെയ്യാൻ Blink അതിന്റെ സൂമിംഗ് മെക്കാനിസം ഉപയോഗിക്കുന്നു.</translation> <translation id="4220865787605972627">ഫീച്ചറിനെ ഡിസ്പ്ലേ പിന്തുണയ്ക്കുന്നുണ്ടെങ്കിൽ ഡിസ്പ്ലേയുടെ വർണ്ണ കാലിബറേഷൻ അനുവദിക്കുക.</translation> +<translation id="4232692576734035989">ഉയർന്ന പരീക്ഷണാത്മക പ്രകടന മോഡിൽ, പ്രധാന ഡോക്യുമെന്റിൽ നിന്നുള്ള ഒരു പ്രത്യേക പ്രോസസ്സിലാണ് ക്രോസ്-സൈറ്റ് iframes സൂക്ഷിച്ചിരിക്കുന്നത്. ഈ മോഡിൽ, ഒരു പ്രോസസ്സ് പങ്കിടുന്നതിന്, മറ്റ് മൂന്നാം കക്ഷി സൈറ്റുകളിൽ നിന്നുള്ള iframes-നെ അനുവദിക്കും.</translation> <translation id="4235200303672858594">പൂർണ്ണ സ്ക്രീൻ</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> എന്നയാൾക്കായി അക്കൗണ്ട് ചേർക്കുക</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ഈ ഭാഷയില് പ്രദര്ശിപ്പിക്കാന് കഴിയില്ല</translation> @@ -2433,6 +2446,7 @@ <translation id="4509017836361568632">ഫോട്ടോ നിരസിക്കുക</translation> <translation id="4509345063551561634">സ്ഥാനം:</translation> <translation id="4514542542275172126">സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിനെ സജ്ജീകരിക്കുക</translation> +<translation id="4514914692061505365">എല്ലാ pexe ഫയലുകളിലും PNaCl-ന്റെ വേഗതയാർന്ന സബ്സീറോ ട്രാൻസ്ലേറ്റർ ഉപയോഗിക്കാൻ പ്രേരിപ്പിക്കുക.</translation> <translation id="4518677423782794009">Chrome ക്രാഷാകുന്നുണ്ടോ, അസാധാരണമായ സ്റ്റാർട്ടപ്പ് പേജുകളോ ടൂൾബാറുകളോ കാണുന്നുണ്ടോ, നിങ്ങൾക്ക് ഒഴിവാക്കാനാവാത്ത അപ്രതീക്ഷിത പരസ്യങ്ങൾ വരുന്നുണ്ടോ, അതുമല്ലെങ്കിൽ നിങ്ങളുടെ ബ്രൗസിംഗ് അനുഭവത്തെത്തന്നെ വ്യത്യാസപ്പെടുത്തുന്നുണ്ടോ? Chrome ക്ലീനർ പ്രവർത്തിപ്പിക്കുന്നതുവഴി നിങ്ങൾക്ക് ഈ പ്രശ്നം പരിഹരിക്കാനായേക്കും.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> എന്നതിൽ നിന്നുള്ള അജ്ഞാത ഉപകരണം</translation> <translation id="4522570452068850558">വിശദാംശങ്ങൾ</translation> @@ -2481,6 +2495,7 @@ <translation id="4595560905247879544">മാനേജർക്ക് (<ph name="CUSTODIAN_NAME" />) മാത്രമേ ആപ്സും വിപുലീകരണങ്ങളും പരിഷ്ക്കരിക്കാനാകൂ.</translation> <translation id="4601242977939794209">EMF കൺവേർട്ടർ</translation> <translation id="4602466770786743961">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്സസ്സുചെയ്യുന്നതിന് <ph name="HOST" /> എന്നതിനെ എല്ലായ്പ്പോഴും അനുവദിക്കുക</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">ഇന്റര്നെറ്റിലേക്ക് ബന്ധിപ്പിച്ചിട്ടില്ല</translation> <translation id="4608500690299898628">&കണ്ടെത്തുക...</translation> <translation id="4610637590575890427"><ph name="SITE" /> -ലേക്ക് പോകണമെന്നാണോ ഉദ്ദേശിച്ചത്?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">സൈൻ ഇൻ പരാജയപ്പെട്ടു, ഇന്റർനെറ്റിൽ കണക്റ്റുചെയ്തതിനുശേഷം വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="5063180925553000800">പുതിയ പിന്:</translation> <translation id="5067867186035333991"><ph name="HOST" />-ന് നിങ്ങളുടെ മൈക്രോഫോൺ ആക്സസ്സുചെയ്യണോ എന്ന് ചോദിക്കുക</translation> +<translation id="5068918910148307423">അടുത്തിടെ അടച്ച സൈറ്റുകളെ, ഡാറ്റ അയയ്ക്കുന്നതും സ്വീകരിക്കുന്നതും പൂർത്തിയാക്കാൻ അനുവദിക്കരുത്</translation> <translation id="507075806566596212">ഉപകരണം വിദൂരമായി കണ്ടെത്താനും മായ്ക്കാനും ലോക്കുചെയ്യാനുമുള്ള കഴിവ് പ്രവർത്തനക്ഷമമാക്കുന്നതിന്, നിങ്ങൾ Google-ൽ ഈ <ph name="DEVICE_TYPE" /> എൻറോൾ ചെയ്യാൻ പോകുന്നു. ഇതിന് റീബൂട്ട് ചെയ്യേണ്ടിവരും. തുടരണോ?</translation> <translation id="5072836811783999860">നിയന്ത്രിത ബുക്ക്മാർക്കുകൾ കാണിക്കുക</translation> <translation id="5074318175948309511">പുതിയ ക്രമീകരണങ്ങൾ പ്രയോഗത്തിൽ വരുന്നതിന് മുമ്പ് ഈ പേജ് വീണ്ടും ലോഡുചെയ്യേണ്ടതായി വരാം.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">മുൻ വാചകം കണ്ടെത്തുക</translation> <translation id="5228076606934445476">ഉപകരണത്തിൽ എന്തോ പിശക് സംഭവിച്ചു. ഈ പിശക് പരിഹരിക്കുന്നതിന് ഉപകരണം നിങ്ങൾക്ക് റീബൂട്ട് ചെയ്ത് വീണ്ടും ശ്രമിക്കേണ്ടിവരും.</translation> <translation id="5228962187251412618">ഓൺലൈൻ പരിശോധന മാത്രം</translation> +<translation id="5229622432348746578">ഡെസ്ക്ടോപ്പ് പങ്കിടലിനുള്ള ഓഡിയോ പ്രവർത്തനരഹിതമാക്കുക</translation> <translation id="5230516054153933099">വിന്ഡോ</translation> <translation id="5232178406098309195">"Ok Google" അല്ലെങ്കിൽ മൈക്രോഫോൺ ഐക്കൺ സ്പർശിക്കുക പോലുള്ള ഓഡിയോ സജീവമാക്കൽ കമാൻഡുകൾ ഉപയോഗിക്കുമ്പോൾ, നിങ്ങളുടെ അക്കൗണ്ടിലേക്ക് സ്വകാര്യ വോയ്സ്, ഓഡിയോ പ്രവർത്തനം ചില വോയ്സും മറ്റ് ഓഡിയോയും സംഭരിക്കുന്നു. തുടർന്നുള്ള സംഭാഷണ/ഓഡിയോ റെക്കോർഡുചെയ്യുന്നതിനോടൊപ്പം കുറച്ചു സെക്കൻഡുകൾ മുമ്പുള്ളതും സംഭരിക്കും.</translation> <translation id="523299859570409035">അറിയിപ്പുകൾ ഒഴിവാക്കലുകൾ</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">സുഷുപ്തിയിലായിരിക്കുമ്പോൾ Wi-Fi ഓണാക്കി നിലനിർത്തുക</translation> <translation id="5558129378926964177">സൂം &ഇന് ചെയ്യുക</translation> <translation id="556042886152191864">ബട്ടണ്</translation> +<translation id="5562781907504170924">ഈ ടാബ് ഒരു Bluetooth ഉപകരണവുമായി കണക്റ്റുചെയ്തിരിക്കുന്നു.</translation> <translation id="5565871407246142825">ക്രെഡിറ്റ് കാര്ഡുകള്</translation> <translation id="5567989639534621706">അപ്ലിക്കേഷന് കാഷെകള്</translation> <translation id="5568069709869097550">പ്രവേശിക്കാന് കഴിയില്ല</translation> @@ -3308,6 +3326,7 @@ <translation id="5803531701633845775">കഴ്സര് നീക്കാതെതന്നെ, പദസമുച്ചയങ്ങള് പിന്നില് നിന്ന് തിരഞ്ഞെടുക്കുക</translation> <translation id="5804241973901381774">അനുമതികൾ</translation> <translation id="580571955903695899">ശീര്ഷക പ്രകാരം പുനഃക്രമീകരിക്കുക</translation> +<translation id="5808982448801399019">അംഗീകരിക്കാനായില്ല</translation> <translation id="580961539202306967">എനിക്ക് പുഷ് സന്ദേശങ്ങൾ അയയ്ക്കാൻ ഒരു സൈറ്റ് താൽപ്പര്യപ്പെടുമ്പോൾ എന്നോട് ചോദിക്കുക (ശുപാർശ ചെയ്യുന്നത്)</translation> <translation id="5815645614496570556">X.400 വിലാസം</translation> <translation id="5817397429773072584">ചൈനീസ് പരമ്പരാഗതം</translation> @@ -3579,6 +3598,7 @@ <translation id="6243774244933267674">സെർവർ ലഭ്യമല്ല</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">അപ്ഡേറ്റ് തയ്യാറാണ്</translation> +<translation id="6248400709929739064">സബ്ടൈറ്റിലുകൾ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="6248988683584659830">തിരയൽ സജ്ജീകരണങ്ങള്</translation> <translation id="6251870443722440887">GDI കൈകാര്യംചെയ്യുന്നവ</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> സേവന നിബന്ധനകൾ</translation> @@ -3603,6 +3623,7 @@ <translation id="6277105963844135994">നെറ്റ്വർക്കിന്റെ സമയപരിധി കഴിഞ്ഞു</translation> <translation id="6277518330158259200">സ്ക്രീൻഷോട്ടെടുക്കുക</translation> <translation id="6279183038361895380">നിങ്ങളുടെ കഴ്സർ കാണിക്കാൻ |<ph name="ACCELERATOR" />| അമർത്തുക</translation> +<translation id="6280215091796946657">മറ്റൊരു അക്കൗണ്ട് ഉപയോഗിച്ച് സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="6281743458679673853">ലേഔട്ട് വ്യൂപോർട്ട് പ്രതിഫലിപ്പിക്കുന്ന എല്ലാ API-കളും സ്വന്തമാക്കുന്നതിനുള്ള പരീക്ഷണം. ഇത് ലേഔട്ട് വ്യൂപോർട്ടുമായി ബന്ധപ്പെട്ട് window.scroll പ്രോപ്പർട്ടികൾ സൃഷ്ടിക്കും.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{നിങ്ങളുടെ നെറ്റ്വർക്കിലെ പുതിയ പ്രിന്റർ}other{നിങ്ങളുടെ നെറ്റ്വർക്കിലെ പുതിയ പ്രിന്ററുകൾ}}</translation> <translation id="6285395082104474418">സ്റ്റാറ്റസ് ട്രേ നിങ്ങളുടെ നെറ്റ്വർക്കിന്റെയും ബാറ്ററിയുടെയും മറ്റ് കാര്യങ്ങളുടെയും നിലവിലെ നില ദൃശ്യമാക്കുന്നു.</translation> @@ -3684,6 +3705,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> എന്നതിന്റെ മുമ്പ് ഇൻസ്റ്റാളുചെയ്ത പതിപ്പിലേക്ക് പഴയപടിയാക്കുന്നു</translation> <translation id="6418481728190846787">എല്ലാ അപ്ലിക്കേഷനുകൾക്കുമായുള്ള ആക്സസ്സ് ശാശ്വതമായി നീക്കംചെയ്യുക</translation> <translation id="6418505248408153264">മെറ്റീരിയൽ ഡിസൈൻ ചരിത്രം പ്രവർത്തനക്ഷമമാക്കുക</translation> +<translation id="6419288379019356534">ഈ ഉപകരണം മാനേജുചെയ്യുന്നത് <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ആണ്. + <ph name="LINE_BREAK" /> + നിങ്ങളുടെ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> അക്കൗണ്ടിലേക്ക് സൈൻ ഇൻ ചെയ്യുന്നത് തുടരാൻ "അടുത്തത്" ക്ലിക്കുചെയ്യുക.</translation> <translation id="6419902127459849040">മദ്ധ്യ യുറോപ്യന്</translation> <translation id="6420676428473580225">ഡെസ്ക്ടോപ്പിലേക്ക് ചേർക്കുക</translation> <translation id="6422329785618833949">ഫോട്ടോ ഫ്ലിപ്പ് ചെയ്തു</translation> @@ -3844,7 +3868,6 @@ <translation id="6662016084451426657">സമന്വയിപ്പിക്കൽ പിശക്: സമന്വയിപ്പിക്കൽ പ്രാപ്തമാക്കുന്നതിന് അഡ്മിനിസ്ട്രേറ്ററുമായി ദയവായി ബന്ധപ്പെടുക.</translation> <translation id="6663792236418322902">ഈ ഫയല് പിന്നീട് പുനസംഭരിക്കുന്നതിന് നിങ്ങള് തിരഞ്ഞെടുത്ത പാസ്വേഡ് ആവശ്യമായിവരും. അത് സുരക്ഷിത സ്ഥലത്ത് ദയവായി രേഖപ്പെടുത്തുക.</translation> <translation id="6664237456442406323">നിർഭാഗ്യവശാൽ, കേടായ ഒരു ഹാർഡ്വെയർ ID ഉപയോഗിച്ചാണ് നിങ്ങളുടെ കമ്പ്യൂട്ടർ കോൺഫിഗർ ചെയ്തിരിക്കുന്നത്. ഇത് ഏറ്റവും പുതിയ സുരക്ഷാ പരിഹാരങ്ങൾ അപ്ഡേറ്റുചെയ്യുന്നതിൽ നിന്നും Chrome OS-നെ തടയുന്നു, ഒപ്പം നിങ്ങളുടെ കമ്പ്യൂട്ടർ <ph name="BEGIN_BOLD" />ക്ഷുദ്രകരമായ ആക്രമണങ്ങളാൽ കേടാകാനുമിടയുണ്ട്<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">iframe ഉറവിടങ്ങളുടെ ലോഡ് മുൻഗണന കുറയ്ക്കുന്നു.</translation> <translation id="6666647326143344290">നിങ്ങളുടെ Google അക്കൗണ്ട് ഉപയോഗിച്ച്</translation> <translation id="6675665718701918026">പോയിന്റുചെയ്യുന്ന ഉപകരണം കണക്റ്റുചെയ്തു</translation> <translation id="6677037229676347494">പ്രതീക്ഷിച്ച ID "<ph name="EXPECTED_ID" />" ആണ്, എന്നാൽ ലഭിച്ച ID "<ph name="NEW_ID" />" ആണ്.</translation> @@ -3937,6 +3960,7 @@ <translation id="6825883775269213504">റഷ്യന്</translation> <translation id="6827236167376090743">ഈ വീഡിയോ ദീർഘ നേരം പ്ലേ ചെയ്യും.</translation> <translation id="6828153365543658583">ഇനിപ്പറയുന്ന ഉപയോക്താക്കള്ക്കായി പ്രവേശനം നിയന്ത്രിക്കുക:</translation> +<translation id="6828434191343384461">തിരഞ്ഞെടുത്ത ഡാറ്റയെ Chrome-ൽ നിന്നും സമന്വയിപ്പിച്ച ഉപകരണങ്ങളിൽ നിന്നും നീക്കംചെയ്തു. നിങ്ങളുടെ Google അക്കൗണ്ടിൽ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> എന്നതിലെ മറ്റ് Google സേവനങ്ങളിൽ നിന്നുള്ള തിരയലുകൾ, പ്രവൃത്തി എന്നിങ്ങനെ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation> <translation id="6828860976882136098">എല്ലാ ഉപയോക്താക്കൾക്കുമായി സ്വയമേയുള്ള അപ്ഡേറ്റുകൾ സജ്ജമാക്കാനായില്ല (പ്രീഫ്ലൈറ്റ് എക്സിക്യൂഷൻ പിശക്: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857"><ph name="DEVICE_TYPE" /> ഉപയോഗിച്ച് സഹായം സ്വന്തമാക്കുക.</translation> <translation id="6829270497922309893">നിങ്ങളുടെ ഓർഗനൈസേഷനിൽ എൻറോൾ ചെയ്യുക</translation> @@ -4017,6 +4041,7 @@ <translation id="6965382102122355670">ശരി</translation> <translation id="6965648386495488594">പോര്ട്ട്</translation> <translation id="6965978654500191972">ഉപാധി</translation> +<translation id="6969104364835835175">ഫോഴ്സ് PNaCl സബ്സീറോ</translation> <translation id="6970230597523682626">ബള്ഗേറിയന്</translation> <translation id="6970480684834282392">സ്റ്റാർട്ടപ്പ് തരം</translation> <translation id="6970856801391541997">പ്രിന്റ് പ്രത്യേക പേജുകൾ</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Google പേയ്മെന്റിൽ ഉപയോഗിക്കുന്ന ക്രെഡിറ്റ് കാർഡുകളും വിലാസങ്ങളും</translation> <translation id="7059858479264779982">യാന്ത്രിക-സമാരംഭത്തിലേക്ക് സജ്ജമാക്കുക</translation> <translation id="7061692898138851896">സ്വയമേവ പാസ്വേഡുകൾ സംരക്ഷിക്കുക</translation> +<translation id="7062222374113411376">അടുത്തിടെ അടച്ച സൈറ്റുകളെ, ഡാറ്റ അയയ്ക്കുന്നതും സ്വീകരിക്കുന്നതും പൂർത്തിയാക്കാൻ അനുവദിക്കുക (ശുപാർശചെയ്തിരിക്കുന്നു)</translation> <translation id="7063129466199351735">കുറുക്കുവഴികൾ പ്രോസസ്സുചെയ്യുന്നു...</translation> <translation id="7065223852455347715">എന്റർപ്രൈസ് എൻറോൾമെന്റിനെ തടയുന്ന മോഡിൽ ഈ ഉപകരണം ലോക്കുചെയ്തു. നിങ്ങൾക്ക് ഉപകരണം എൻറോൾ ചെയ്യണമെങ്കിൽ, ആദ്യം ഉപകരണ വീണ്ടെടുക്കൽ എന്നതിലൂടെ പോകേണ്ടതുണ്ട്.</translation> <translation id="7065534935986314333">സിസ്റ്റത്തെക്കുറിച്ച്</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" എന്നതിലേക്ക് കണക്റ്റുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു.</translation> +<translation id="7067725467529581407">ഇത് വീണ്ടും കണിക്കരുത്.</translation> <translation id="7070804685954057874">ഡയറക്ട് ഇന്പുട്ട്</translation> <translation id="7072010813301522126">കുറുക്കുവഴിയുടെ പേര്</translation> <translation id="7072025625456903686">എല്ലാം അനുവദിക്കുക അല്ലെങ്കിൽ ഇഷ്ടാനുസൃതമാക്കുക</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">യോഗ്യത പരിശോധിക്കുക</translation> <translation id="749028671485790643">വ്യക്തി <ph name="VALUE" /></translation> <translation id="7491962110804786152">ടാബ്</translation> +<translation id="7493386493263658176">പാസ്വേഡുകൾ, ക്രെഡിറ്റ് കാർഡ് നമ്പറുകൾ എന്നിവ പോലുള്ള വ്യക്തിപരമായ വിവരങ്ങൾ ഉൾപ്പെടെ നിങ്ങൾ ടൈപ്പുചെയ്യുന്ന എല്ലാ ടെക്സ്റ്റും <ph name="EXTENSION_NAME" /> വിപുലീകരണം ശേഖരിച്ചേക്കാം. നിങ്ങൾക്ക് ഈ വിപുലീകരണം ഉപയോഗിക്കണോ?</translation> <translation id="7495778526395737099">നിങ്ങളുടെ പഴയ പാസ്വേഡ് മറന്നോ?</translation> <translation id="7503191893372251637">നെറ്റ്സ്കേപ്പ് സര്ട്ടിഫിക്കറ്റ് തരം</translation> <translation id="7503821294401948377">ബ്രൌസര് പ്രവര്ത്തനത്തിനായി '<ph name="ICON" />' ഐക്കണ് ലോഡുചെയ്യാനായില്ല.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">ബ്രൌസര് വിന്ഡോ തുറക്കുക</translation> <translation id="7564847347806291057">പ്രക്രിയയുടെ അവസാനം</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome ഡാറ്റ മായ്ച്ചു</translation> <translation id="7568790562536448087">അപ്ഡേറ്റുചെയ്യുന്നു</translation> <translation id="7573172247376861652">ബാറ്ററി ചാർജ്ജ്</translation> <translation id="7576032389798113292">6x4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">അതിഥി സെഷനിൽ നിന്നും പുറത്തുകടക്കുക</translation> <translation id="7786889348652477777">അപ്ലിക്കേഷൻ &വീണ്ടും ലോഡുചെയ്യുക</translation> <translation id="7787129790495067395">നിങ്ങള് നിലവില് ഒരു പാസ്ഫ്രെയ്സ് ഉപയോഗിക്കുന്നു. നിങ്ങള് പാസ്ഫ്രെയ്സ് മറന്നുപോയെങ്കില്, Google ന്റെ സെര്വറുകളില് നിന്നും ഡാറ്റ മായ്ക്കുന്നതിന് Google ഡാഷ്ബോര്ഡ് ഉപയോഗിച്ച് സമന്വയം പുനഃസജ്ജമാക്കാന് നിങ്ങള്ക്ക് കഴിയും.</translation> +<translation id="7787308148023287649">മറ്റൊരു സ്ക്രീനിൽ പ്രദർശിപ്പിക്കുക</translation> <translation id="7788080748068240085">"<ph name="FILE_NAME" />" ഓഫ്ലൈനിൽ സംരക്ഷിക്കുന്നതിന് നിങ്ങൾ അധികമായി <ph name="TOTAL_FILE_SIZE" /> ഇടം ശൂന്യമാക്കണം:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />ഓഫ്ലൈനിൽ ഇനി ആക്സസ്സുചെയ്യേണ്ടതില്ലാത്ത ഫയലുകൾ അൺപിൻ ചെയ്യുക<ph name="MARKUP_3" /> <ph name="MARKUP_4" />നിങ്ങളുടെ ഡൗൺലോഡുകളുടെ ഫോൾഡറിൽ നിന്നും ഫയലുകൾ ഇല്ലാതാക്കുക<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">ഈ ഫോണിലേക്ക് Google ഒരു അറിയിപ്പ് അയച്ചു. Bluetooth ഉപയോഗിച്ചുകൊണ്ട്, നിങ്ങളുടെ ഫോണിന് 100 അടി അകലെ നിന്നുപോലും <ph name="DEVICE_TYPE" /> അൺലോക്കുചെയ്ത് നിലനിർത്താനാകുമെന്ന് ശ്രദ്ധിക്കുക. ഇത് പ്രശ്നമാകാനിടയുള്ള സാഹചര്യത്തിൽ, <a>ഈ സവിശേഷത താൽക്കാലികമായി ഓഫാക്കാനാവും</a>.</translation> <translation id="7879478708475862060">ഇൻപുട്ട് മോഡ് പിന്തുടരുക</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" ഈ അപ്ലിക്കേഷനുകളും വിപുലീകരണങ്ങളും ചേർക്കുന്നു:</translation> +<translation id="7881969471599061635">സബ്ടൈറ്റിലുകൾ പ്രവർത്തനരഹിതമാക്കുക</translation> <translation id="7884988936047469945">പരീക്ഷണാത്മക ആക്സസിബിലിറ്റി ഫീച്ചറുകൾ</translation> <translation id="7885253890047913815">സമീപകാല ലക്ഷ്യസ്ഥാനങ്ങൾ</translation> <translation id="7885283703487484916">വളരെ ഹ്രസ്വമായത്</translation> @@ -4991,6 +5022,7 @@ <translation id="839736845446313156">രജിസ്റ്റര്</translation> <translation id="8398790343843005537">നിങ്ങളുടെ ഫോൺ കണ്ടെത്തുക</translation> <translation id="8398877366907290961">എങ്ങനെയാണെങ്കിലും മുന്നോട്ട് പോകുക</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> ഉപയോഗിച്ച് സംരക്ഷിച്ച നിങ്ങളുടെ അക്കൗണ്ടിൽ സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="8401363965527883709">ചെക്കടയാളമിടാത്ത ചെക്ക് ബോക്സ്</translation> <translation id="8408402540408758445">തിരയൽ ഫലങ്ങൾ പ്രീഫെച്ചുചെയ്യുക</translation> <translation id="8410073653152358832">ഈ ഫോൺ ഉപയോഗിക്കുക</translation> @@ -5077,6 +5109,7 @@ <translation id="8545211332741562162">പരീക്ഷണാത്മക JavaScript സവിശേഷതകൾ ഉപയോഗിക്കാൻ വെബ് പേജുകൾ പ്രാപ്തമാക്കുക.</translation> <translation id="8545575359873600875">ക്ഷമിക്കണം, നിങ്ങളുടെ പാസ്വേഡ് പരിശോധിച്ചുറപ്പിക്കാനായില്ല. ഈ സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിന്റെ മാനേജർ അടുത്തിടെ പാസ്വേഡ് മാറ്റിയിരിക്കാം. അങ്ങനെയാണെങ്കിൽ അടുത്ത തവണ നിങ്ങൾ സൈൻ ഇൻ ചെയ്യുമ്പോൾ പുതിയ പാസ്വേഡ് ബാധകമാകും. നിങ്ങളുടെ പഴയ പാസ്വേഡ് ഉപയോഗിക്കുന്നത് പരീക്ഷിച്ചുനോക്കൂ.</translation> <translation id="8546306075665861288">ചിത്ര കാഷേ</translation> +<translation id="854653344619327455">ഈ ഓണായിരിക്കുന്ന ഫ്ലാഗ് ഉപയോഗിച്ച്, ഓഡിയോ പങ്കിടണോ എന്ന് തിരഞ്ഞെടുക്കാൻ ഉപയോക്താവിനെ ഡെസ്ക്ടോപ്പ് പങ്കിടൽ പിക്കർ വിൻഡോ അനുവദിക്കില്ല.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">പ്രതീകം</translation> <translation id="855081842937141170">ടാബ് പിൻ ചെയ്യുക</translation> @@ -5107,6 +5140,7 @@ <translation id="8589311641140863898">പരീക്ഷണ വിപുലീകരണ APIകള്</translation> <translation id="8590375307970699841">ഓട്ടോമാറ്റിക്ക് അപ്ഡേറ്റുകള് ക്രമീകരിക്കുക</translation> <translation id="8592071947729879125">ഐഫ്രെയിം അനുമതികൾ നിയന്ത്രിക്കുക.</translation> +<translation id="8592125506633137593">മികച്ച ഡോക്യുമെന്റ് ഐസൊലേഷൻ</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> എന്നായി സൈൻ ഇൻ ചെയ്തു. <ph name="BEGIN_LINK" />Google ഡാഷ്ബോർഡിൽ<ph name="END_LINK" /> നിങ്ങളുടെ സമന്വയിപ്പിച്ച ഡാറ്റ നിയന്ത്രിക്കുക.</translation> <translation id="8596540852772265699">ഇഷ്ടാനുസൃത ഫയലുകള്</translation> <translation id="8596785155158796745">മൈക്രോഫോൺ നിലവിൽ ലഭ്യമല്ല. <ph name="BEGIN_LINK" />മൈക്രോഫോൺ നിയന്ത്രിക്കുക<ph name="END_LINK" /></translation> @@ -5179,6 +5213,7 @@ <translation id="8688579245973331962">നിങ്ങളുടെ പേര് കണ്ടില്ലേ?</translation> <translation id="8688644143607459122">തുടരുക ക്ലിക്കുചെയ്യുന്നതിലൂടെ Google പേയ്മെന്റ് ഉപയോഗിക്കുന്നത് നിങ്ങൾ അംഗീകരിക്കുന്നു. വഞ്ചനയിൽ നിന്നും നിങ്ങളെ പരിരക്ഷിക്കുന്നതിന്, കമ്പ്യൂട്ടറിനെക്കുറിച്ചുള്ള വിവരങ്ങൾ (അതിന്റെ ലൊക്കേഷനുൾപ്പെടെ) Google പേയ്മെന്റുമായി പങ്കിടും.</translation> <translation id="8689102680909215706">വിപുലീകരണം "<ph name="EXTENSION_NAME" />", വിദൂരമായി ഇൻസ്റ്റാളുചെയ്തു.</translation> +<translation id="868926756781121513">ടാബ് ഉറവിടം ഉപയോഗിച്ചുള്ള ഡെസ്ക്ടോപ്പ് പങ്കിടൽ</translation> <translation id="8689341121182997459">അവസാനിക്കുന്നു:</translation> <translation id="8690754533598178758">Adobe Flash Player മൈക്രോഫോൺ ഒഴിവാക്കലുകൾ വ്യത്യസ്തമാണ്.</translation> <translation id="8691686986795184760">(എന്റര്പ്രൈസ് നയം ഉപയോഗിച്ച് അപ്രാപ്തമാക്കി)</translation> @@ -5222,6 +5257,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> എന്നതിന് പകരം <ph name="PROTOCOL" /> ലിങ്കുകൾ തുറക്കുക</translation> <translation id="8737709691285775803">ഷിൽ</translation> <translation id="8741881454555234096">മൗസുമായി താരതമ്യം ചെയ്യുമ്പോൾ സ്പർശനങ്ങൾക്കുള്ള മോശം മിഴിവ് പരിഹരിക്കുന്നതിനായി സ്പർശന ജെസ്റ്ററിന്റെ സ്ഥാനം പരിഷ്ക്കരിക്കുക.</translation> +<translation id="8741995161408053644">നിങ്ങളുടെ Google അക്കൗണ്ടിന് <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> എന്നതിൽ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation> <translation id="8743712320294854924">വിപുലീകൃത ഇൻപുട്ട് ഓപ്ഷനുകളെ ഷെൽഫിൽ കാണിക്കുക.</translation> <translation id="874420130893181774">പരമ്പരാഗത പിൻയിൻ ടൈപ്പുചെയ്യൽ രീതി</translation> <translation id="8744525654891896746">ഈ സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിനായി ഒരു അവതാർ തിരഞ്ഞെടുക്കുക</translation> @@ -5234,6 +5270,7 @@ <translation id="8757640015637159332">എല്ലാവർക്കുമുള്ള സെഷൻ നൽകുക</translation> <translation id="8757742102600829832">ഇതിലേക്ക് കണക്റ്റുചെയ്യാൻ ഒരു Chromebox തിരഞ്ഞെടുക്കുക</translation> <translation id="8757803915342932642">Google ക്ലൗഡ് ഉപകരണങ്ങളിലെ ഉപകരണം</translation> +<translation id="8758895886513993540">ഡെസ്ക്ടോപ്പ് പങ്കിടലിന് ഉപയോക്താക്കൾക്ക് ഒരു ടാബ് തിരഞ്ഞെടുക്കാനാകുമോ എന്നതിനെ ഈ ഫ്ലാഗ് നിയന്ത്രിക്കുന്നു.</translation> <translation id="8759408218731716181">ഒന്നിലധികം സൈൻ ഇൻ സജ്ജമാക്കാനാവില്ല</translation> <translation id="8759753423332885148">കൂടുതലറിയുക.</translation> <translation id="8761567432415473239">Google സുരക്ഷിത ബ്രൗസിംഗ് <ph name="SITE" /> എന്നതിൽ ഈയിടെ <ph name="BEGIN_LINK" />ദോഷകരമായ പ്രോഗ്രാമുകൾ കണ്ടെത്തി<ph name="END_LINK" />.</translation> @@ -5444,6 +5481,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB മൗസ് കണക്റ്റുചെയ്തു</translation> <translation id="9076523132036239772">ക്ഷമിക്കൂ, നിങ്ങളുടെ ഇമെയിലോ പാസ്വേഡോ സ്ഥിരീകരിക്കാന് കഴിഞ്ഞില്ല. ആദ്യം ഒരു നെറ്റ്വര്ക്കിലേക്ക് ബന്ധിപ്പിച്ചുകൊണ്ട് ശ്രമിക്കുക.</translation> +<translation id="9077132661879924646">Android-ൽ ഏകീകൃത മീഡിയ പൈപ്പ്ലൈൻ പ്രവർത്തനരഹിതമാക്കുന്നു.</translation> <translation id="907841381057066561">പാക്കേജിംഗ് സമയത്ത് താല്ക്കാലിക zip ഫയല് സൃഷ്ടിക്കുന്നതിന് പരാജയപ്പെട്ടു. </translation> <translation id="9083147368019416919">എൻറോൾ ചെയ്തത് മാറ്റാനായില്ല</translation> <translation id="9084064520949870008">വിന്ഡോ ആയി തുറക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index d58bd19a..39aa11d 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -562,7 +562,6 @@ <translation id="1783075131180517613">कृपया आपले समक्रमित सांकेतिक वाक्यांश अद्यतनित करा.</translation> <translation id="1788636309517085411">डीफॉल्ट वापरा</translation> <translation id="1789575671122666129">पॉपअप</translation> -<translation id="1790550373387225389">सादरीकरण मोडमध्ये प्रवेश करा</translation> <translation id="1792705092719258158">मिरर केलेला स्क्रीन मोड सक्षम करा.</translation> <translation id="1793119619663054394">आपल्याला खात्री आहे की आपण या संगणकावरून "<ph name="PROFILE_NAME" />" आणि सर्व संबंधित Chrome डेटा काढू इच्छिता? हे पूर्ववत केले जाऊ शकत नाही.</translation> <translation id="179767530217573436">गेल्या 4 आठवड्यात</translation> @@ -1657,7 +1656,6 @@ <translation id="3324301154597925148">आपण अपेक्षा करत होता हे तेच शोध पृष्ठ आहे?</translation> <translation id="3324684065575061611">(enterprise धोरणाद्वारे अक्षम) </translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> झिप करत आहे...</translation> -<translation id="3330206034087160972">सादरीकरण मोडमधून बाहेर या</translation> <translation id="3330686263988132416">WebRTC Stun मूळ शीर्षलेख</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">मिरर केलेला स्क्रीन मोड सक्षम करा. हा मोड स्क्रीन प्रतिमा अनुलंबरित्या पलटवतो.</translation> @@ -1913,7 +1911,6 @@ <translation id="367645871420407123">आपण डीफॉल्ट चाचणी प्रतिमा मूल्यामध्ये मूळ संकेतशब्द सेट करू इच्छित असल्यास रिक्त सोडा</translation> <translation id="3678156199662914018">विस्तारः <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">माल्टीज कीबोर्ड</translation> -<translation id="3680173818488851340">कमी प्राधान्याच्या iframes.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> स्क्रीन सामायिकरण विनंती</translation> <translation id="3685122418104378273">मोबाईल डेटा वापरला जातो, तेव्हा Google ड्राइव्ह संकालन डीफॉल्टनुसार अक्षम केले जाते.</translation> <translation id="3685387984467886507">निर्दिष्ट केलेल्या वेळेसाठी SSL त्रुटींमधून पुढे जाण्यासाठी निर्णय लक्षात ठेवा.</translation> @@ -3865,7 +3862,6 @@ <translation id="6662016084451426657">समक्रमण त्रुटी: कृपया समक्रमण सक्षम करण्यासाठी प्रशासकाशी संपर्क साधा.</translation> <translation id="6663792236418322902">आपण निवडलेल्या संकेतशब्दाला या फाइलमध्ये नंतर पुनर्संचयित करणे आवश्यक आहे. कृपया एखाद्या सुरक्षित स्थानावर त्याचे रेकॉर्ड ठेवा.</translation> <translation id="6664237456442406323">दुर्दैवाने, आपला संगणक एका विकृत हार्डवेअर ID सह कॉन्फिगर केला आहे. हे नवीनतम सुरक्षितता निराकरणे अद्यतनित करण्यापासून Chrome OS ला प्रतिबंध करते आणि आपल्या संगणकावर <ph name="BEGIN_BOLD" />दुर्भावनापूर्ण आक्रमणांमुळे सहज परिणाम होऊ शकतो<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">iframe संसाधनांची लोड प्राधान्यता कमी करेल.</translation> <translation id="6666647326143344290">आपल्या Google खात्यासह</translation> <translation id="6675665718701918026">निर्देशित करणारे डिव्हाइस कनेक्ट केले</translation> <translation id="6677037229676347494">अपेक्षित ID "<ph name="EXPECTED_ID" />",परंतु ID "<ph name="NEW_ID" />" होता.</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index b4328ae..1349a24 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -563,7 +563,6 @@ <translation id="1783075131180517613">Sila kemas kini frasa laluan segerak anda.</translation> <translation id="1788636309517085411">Gunakan lalai</translation> <translation id="1789575671122666129">Pop timbul</translation> -<translation id="1790550373387225389">Masukkan Mod Persembahan</translation> <translation id="1792705092719258158">Dayakan mod skrin cermin.</translation> <translation id="1793119619663054394">Adakah anda pasti mahu mengalih keluar "<ph name="PROFILE_NAME" />" dan semua data Chrome yang berkaitan dari komputer ini? Tindakan ini tidak boleh dibuat asal.</translation> <translation id="179767530217573436">4 minggu yang lalu</translation> @@ -1663,7 +1662,6 @@ <translation id="3324301154597925148">Adakah Ini Halaman Carian Yang Anda Jangkakan?</translation> <translation id="3324684065575061611">(Dilumpuhkan oleh dasar perusahaan)</translation> <translation id="3326821416087822643">Mengezip <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Exit Presentation Mode</translation> <translation id="3330686263988132416">Pengepala asal WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Dayakan mod skrin cermin. Mod ini menterbalikkan imej skrin secara mendatar.</translation> @@ -1919,7 +1917,6 @@ <translation id="367645871420407123">biarkan kosong jika anda ingin menetapkan kata laluan akar kepada nilai imej ujian lalai</translation> <translation id="3678156199662914018">Sambungan: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Papan kekunci Malta</translation> -<translation id="3680173818488851340">iframes keutamaan rendah.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> Permintaan Perkongsian Skrin</translation> <translation id="3685122418104378273">Penyegerakan Google Drive dilumpuhkan secara lalai, apabila menggunakan data mudah alih.</translation> <translation id="3685387984467886507">Ingat keputusan untuk meneruskan melalui ralat-ralat SSL untuk tempoh masa ditentukan.</translation> @@ -3871,7 +3868,6 @@ <translation id="6662016084451426657">Ralat Segerak: Sila hubungi pentadbir untuk mendayakan segerak.</translation> <translation id="6663792236418322902">Kata laluan yang anda pilih akan diperlukan untuk memulihkan fail ini kemudian. Sila catatnya dalam lokasi selamat.</translation> <translation id="6664237456442406323">Malangnya, komputer anda dikonfigurasi dengan ID perkakasan tidak sempurna. Hal ini menghalang OS Chrome daripada mengemas kini kepada pembetulan keselamatan terbaharu dan komputer anda <ph name="BEGIN_BOLD" />mungkin terdedah kepada serangan berniat jahat<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Kurangkan keutamaan beban sumber iframe.</translation> <translation id="6666647326143344290">dengan Akaun Google anda</translation> <translation id="6675665718701918026">Peranti penuding disambung</translation> <translation id="6677037229676347494">ID dijangkakan "<ph name="EXPECTED_ID" />", tetapi ID sebenar ialah "<ph name="NEW_ID" />".</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index aa15f0b..0dc2a46a 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Selecteer een vierkant gedeelte van de afbeelding.</translation> <translation id="1697532407822776718">Je bent nu klaar!</translation> +<translation id="1697988819212986149">Hiermee wordt een Google-pictogram weergegeven naast contextmenu-items die mogelijk worden gemaakt door Google-services.</translation> <translation id="1699274548822076330">Dit moet worden gebruikt in combinatie met de markering trace-upload-url. WAARSCHUWING: Als deze optie is ingeschakeld, registreert Chrome de prestatiegegevens voor elke navigatie en worden deze geüpload naar de URL die is opgegeven door de markering trace-upload-url. De tracering kan persoonlijke gegevens (PII; Personally Identifiable Information) bevatten, zoals de titels en URL's van de websites die je bezoekt.</translation> <translation id="1699395855685456105">Hardwareaanpassing:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Update je wachtwoordzin voor synchronisatie.</translation> <translation id="1788636309517085411">Standaard gebruiken</translation> <translation id="1789575671122666129">Pop-ups</translation> -<translation id="1790550373387225389">Presentatiemodus starten</translation> <translation id="1792705092719258158">Modus voor gespiegeld scherm inschakelen.</translation> <translation id="1793119619663054394">Weet je zeker dat je '<ph name="PROFILE_NAME" />' en alle gekoppelde Chrome-gegevens van deze computer wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.</translation> <translation id="179767530217573436">de afgelopen 4 weken</translation> @@ -707,7 +707,7 @@ <translation id="204622017488417136">Je apparaat wordt hersteld naar de vorige geïnstalleerde versie van Chrome. Alle gebruikersaccounts en lokale gegevens worden verwijderd. Dit kan niet ongedaan worden gemaakt.</translation> <translation id="2048182445208425546">Toegang tot je netwerkverkeer</translation> <translation id="2049137146490122801">Toegang tot lokale bestanden op je computer is door je beheerder uitgeschakeld.</translation> -<translation id="204914487372604757">Snelkoppeling maken</translation> +<translation id="204914487372604757">Snelle link maken</translation> <translation id="2049639323467105390">Dit apparaat wordt beheerd door <ph name="DOMAIN" />.</translation> <translation id="2050339315714019657">Staand</translation> <translation id="2052610617971448509">Je sandbox is niet correct.</translation> @@ -1108,7 +1108,7 @@ <translation id="2607991137469694339">Invoermethode voor Tamil (fonetisch)</translation> <translation id="2608770217409477136">Standaardinstellingen gebruiken</translation> <translation id="2609371827041010694">Altijd uitvoeren op deze site</translation> -<translation id="2609896558069604090">Snelkoppelingen maken...</translation> +<translation id="2609896558069604090">Snelle links maken...</translation> <translation id="2610260699262139870">We&rkelijke grootte</translation> <translation id="2610780100389066815">Microsoft-vertrouwenslijsthandtekening</translation> <translation id="2612676031748830579">Kaartnummer</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Instellingen wijzigen die specifiek zijn voor je apparaat en randapparatuur.</translation> <translation id="2673135533890720193">Je browsegeschiedenis lezen</translation> <translation id="2673589024369449924">Een snelkoppeling voor deze gebruiker maken</translation> +<translation id="2675358154061544447">Zeer experimentele ondersteuning voor het weergeven van iframes op verschillende sites in afzonderlijke processen. In deze modus delen documenten alleen een proces van het weergaveprogramma als ze afkomstig zijn van dezelfde website.</translation> <translation id="2676946222714718093">Wordt afgespeeld op</translation> <translation id="2678063897982469759">Opnieuw inschakelen</translation> <translation id="2678246812096664977">Alle plug-ins</translation> @@ -1222,7 +1223,7 @@ <translation id="2781645665747935084">Belgisch</translation> <translation id="2782688068604007519">Iframes die buiten het proces worden uitgevoerd</translation> <translation id="2783298271312924866">Gedownload</translation> -<translation id="2783321960289401138">Snelkoppeling maken…</translation> +<translation id="2783321960289401138">Snelle link maken…</translation> <translation id="2783661497142353826">Kiosk-apps beheren</translation> <translation id="2784407158394623927">Je mobiele netwerk activeren</translation> <translation id="2784556410206159845">Smart Lock voor Chromebook vereist schermvergrendeling op je telefoon om je <ph name="DEVICE_TYPE" /> te beveiligen.</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">De manier waarop wachtwoordbeheer omgaat met automatisch aanvullen voor de inloggegevens voor synchronisatie.</translation> <translation id="29611076221683977">Cybercriminelen op <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> proberen mogelijk gevaarlijke programma's op je Mac te installeren waarmee je gegevens kunnen worden gestolen of verwijderd (bijvoorbeeld foto's, wachtwoorden, berichten en creditcarddetails).</translation> <translation id="2961695502793809356">Klik om verder te gaan, houd ingedrukt om de geschiedenis weer te geven</translation> +<translation id="296216853343927883">Google-branding in het contextmenu</translation> <translation id="2963151496262057773">De volgende plug-in reageert niet meer: <ph name="PLUGIN_NAME" />Wil je deze beëindigen?</translation> <translation id="2963783323012015985">Turks toetsenbord</translation> <translation id="2964193600955408481">Wifi uitschakelen</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">Klik met de rechtermuisknop op de bovenstaande knop om andere mensen te bekijken.</translation> <translation id="3026050830483105579">Je kunt alles hier vinden.</translation> <translation id="302620147503052030">Knop 'Weergeven'</translation> +<translation id="302781076327338683">Opnieuw laden en cachegeheugen omzeilen</translation> +<translation id="3030243755303701754">Een gebruiker met beperkte rechten kan onder jouw toezicht browsen op internet. Als beheerder van een gebruiker met beperkte rechten in Chrome kun je: + + • de toegang tot bepaalde websites toestaan of blokkeren, + • website controleren die de gebruiker met beperkte rechten heeft bezocht, en + • andere instellingen beheren. + +Als je een gebruiker met beperkte rechten toevoegt, wordt er geen Google-account gemaakt, en worden de bladwijzers, browsegeschiedenis en andere voorkeuren van de gebruiker met beperkte rechten niet via Chrome-synchronisatie overgezet naar andere apparaten. Nadat je een nieuwe gebruiker met beperkte rechten hebt toegevoegd, kun je de instellingen van deze gebruiker op elk gewenst moment en vanaf elk apparaat beheren op <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Ga naar ons <ph name="BEGIN_LINK" />Helpcentrum<ph name="END_LINK" /> voor meer informatie.</translation> <translation id="3031417829280473749">Agente X</translation> <translation id="3031557471081358569">Selecteer items die je wilt importeren:</translation> <translation id="3033332627063280038">Schakel de experimentele implementatie van Cache-Control in: de instructie stale-while-revalidate. Servers kunnen zodoende specificeren dat bepaalde bronnen op de achtergrond opnieuw kunnen worden gevalideerd om de wachttijd te verbeteren.</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">Is dit de zoekpagina die je had verwacht?</translation> <translation id="3324684065575061611">(Uitgeschakeld door bedrijfsbeleid)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> inpakken...</translation> -<translation id="3330206034087160972">Presentatiemodus sluiten</translation> <translation id="3330686263988132416">Origin-header van WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">De gespiegelde schermmodus inschakelen. In deze modus wordt het schermbeeld horizontaal gespiegeld.</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">Schadelijk bestand herstellen</translation> <translation id="3394150261239285340"><ph name="HOST" /> wil gebruikmaken van je camera en microfoon.</translation> <translation id="3394279550557729862">Ondersteuning inschakelen voor het gebruik van de systeemeigen meldingstoasts en het systeemeigen meldingscentrum op platforms waar deze beschikbaar zijn.</translation> +<translation id="3394862755749546286">Hiermee wordt de samengevoegde mediapijplijn (voor Android en desktop) uitgeschakeld voor Android.</translation> <translation id="3396331542604645348">De geselecteerde printer is niet beschikbaar of niet correct geïnstalleerd. Controleer de printer of probeer een andere printer te selecteren.</translation> <translation id="3399597614303179694">Macedonisch toetsenbord</translation> <translation id="3401130144947259741">Als traceringsgebeurtenissen zijn ingeschakeld, worden ze geëxporteerd naar ETW (Event Tracing for Windows) en kunnen ze worden geregistreerd door tools als UIForETW of Xperf.</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">laat dit leeg als je het rootwachtwoord wilt instellen op de waarde van de standaard testimage</translation> <translation id="3678156199662914018">Extensie: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltees toetsenbord</translation> -<translation id="3680173818488851340">Iframes met lage prioriteit.</translation> <translation id="3683524264665795342">Verzoek voor scherm delen van <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">De synchronisatie van Google Drive is bij het gebruik van mobiele gegevens standaard uitgeschakeld.</translation> <translation id="3685387984467886507">Onthoud keuzes om voor een bepaalde periode via SSL-fouten verder te gaan.</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> wordt nu weergegeven in de beheerdersconsole</translation> <translation id="3741243925913727067">Maak een back-up van de foto's en video's op je media-apparaat in Google Drive.</translation> <translation id="3743492083222969745">De optie voor Invoer met bewegingen in-/uitschakelen op de pagina met instellingen voor het virtuele toetsenbord.</translation> +<translation id="3744111561329211289">Synchronisatie op de achtergrond</translation> <translation id="3749289110408117711">Bestandsnaam</translation> <translation id="3751427701788899101">Verbinding is verbroken</translation> <translation id="3751522270321808809">Deze site probeert je mogelijk te misleiden om je gegevens te stelen (bijvoorbeeld wachtwoorden, berichten of creditcardgegevens).</translation> @@ -1984,7 +1996,7 @@ <translation id="3778740492972734840">&Hulpprogramma's voor ontwikkelaars</translation> <translation id="378312418865624974">Een unieke ID voor deze computer lezen</translation> <translation id="3783640748446814672">alt</translation> -<translation id="3785308913036335955">Snelkoppeling voor apps weergeven</translation> +<translation id="3785308913036335955">Snelle link voor apps weergeven</translation> <translation id="3785852283863272759">Verstuur paginalocatie</translation> <translation id="3786301125658655746">Je bent offline</translation> <translation id="3788401245189148511">De apps/extensies zouden nu het volgende kunnen doen:</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">Inloggen op een ander account</translation> <translation id="4219614746733932747">Als deze optie is ingeschakeld, gebruikt Blink het zoommechanisme om content te schalen voor de apparaatschaalfactor.</translation> <translation id="4220865787605972627">Kalibratie van de kleur van de display toestaan, zelfs als de display de functie ondersteunt.</translation> +<translation id="4232692576734035989">Zeer experimentele prestatiemodus waarin iframes van verschillende sites zich bevinden in een proces dat losstaat van het hoofddocument. In deze modus mogen iframes van verschillende sites van derden een proces delen.</translation> <translation id="4235200303672858594">Volledig scherm</translation> <translation id="4235813040357936597">Account toevoegen voor <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> kan niet worden weergegeven in deze taal</translation> @@ -2436,6 +2449,7 @@ <translation id="4509017836361568632">Foto weggooien</translation> <translation id="4509345063551561634">Locatie:</translation> <translation id="4514542542275172126">Nieuwe gebruiker met beperkte rechten instellen</translation> +<translation id="4514914692061505365">Het gebruik van de snelle Subzero-vertaler van PNaCl afdwingen voor alle pexe-bestanden.</translation> <translation id="4518677423782794009">Heb je bijvoorbeeld last van crashes in Chrome, vreemde opstartpagina's, werkbalken of ongewenste advertenties waar je niet vanaf komt of andere wijzigingen in je browser? Je kunt het probleem mogelijk oplossen door de Chrome Cleanup Tool uit te voeren.</translation> <translation id="452039078290142656">onbekende apparaten van <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Details</translation> @@ -2484,6 +2498,7 @@ <translation id="4595560905247879544">Apps en extensies kunnen alleen worden aangepast door de beheerder (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF Convertor</translation> <translation id="4602466770786743961"><ph name="HOST" /> altijd toegang geven tot je camera en microfoon</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Geen internetverbinding</translation> <translation id="4608500690299898628">&Zoeken...</translation> <translation id="4610637590575890427">Wilde je naar <ph name="SITE" /> gaan?</translation> @@ -2787,6 +2802,7 @@ <translation id="5062930723426326933">Inloggen is mislukt. Maak verbinding met internet en probeer het opnieuw.</translation> <translation id="5063180925553000800">Nieuwe pincode:</translation> <translation id="5067867186035333991">Vragen of <ph name="HOST" /> toegang wil tot je microfoon</translation> +<translation id="5068918910148307423">Niet toestaan dat onlangs gesloten sites het verzenden en ontvangen van gegevens voltooien</translation> <translation id="507075806566596212">Je staat op het punt deze <ph name="DEVICE_TYPE" /> in te schrijven bij Google om het apparaat op afstand te kunnen lokaliseren, wissen en vergrendelen. Hiervoor moet het apparaat opnieuw worden opgestart. Wil je doorgaan?</translation> <translation id="5072836811783999860">Beheerde bladwijzers weergeven</translation> <translation id="5074318175948309511">Deze pagina moet eventueel opnieuw worden geladen voordat de nieuwe instellingen van kracht zijn.</translation> @@ -2890,11 +2906,12 @@ <translation id="5218766986344577658">Pop-up voor ondubbelzinnige links</translation> <translation id="5220992698394817380">Aanmelding voor IME-menu inschakelen</translation> <translation id="5222676887888702881">Uitloggen</translation> -<translation id="5225324770654022472">Snelkoppeling voor apps weergeven</translation> +<translation id="5225324770654022472">Snelle link voor apps weergeven</translation> <translation id="5227536357203429560">Privénetwerk toevoegen...</translation> <translation id="5227808808023563348">Vorige tekst vinden</translation> <translation id="5228076606934445476">Er is iets fout met dit apparaat. Als je deze fout wilt verhelpen, moet je het apparaat opnieuw opstarten en het opnieuw proberen.</translation> <translation id="5228962187251412618">Alleen online controle</translation> +<translation id="5229622432348746578">Audio uitschakelen voor bureaublad delen</translation> <translation id="5230516054153933099">Venster</translation> <translation id="5232178406098309195">Wanneer je audioactiveringsopdrachten zoals "Ok Google" gebruikt of op een microfoonpictogram tikt, slaat je eigen versie van Spraak- en audioactiviteit wat gesproken tekst en andere audio op in je account. Er wordt een opname opgeslagen van de spraak/audio die op de opdracht volgt, plus een aantal seconden daarvoor.</translation> <translation id="523299859570409035">Uitzonderingen voor meldingen</translation> @@ -3058,7 +3075,7 @@ <translation id="5436492226391861498">Wachten op proxytunnel...</translation> <translation id="5436510242972373446">Zoeken op <ph name="SITE_NAME" />:</translation> <translation id="5438430601586617544">(Uitgepakt)</translation> -<translation id="544083962418256601">Snelkoppelingen maken...</translation> +<translation id="544083962418256601">Snelle links maken...</translation> <translation id="5441100684135434593">Bedraad netwerk</translation> <translation id="5448293924669608770">Er is een fout opgetreden tijdens het inloggen</translation> <translation id="5449588825071916739">Bladwijzer toevoegen aan alle tabbladen</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">Wifi ingeschakeld houden tijdens slaapstand</translation> <translation id="5558129378926964177">&Inzoomen</translation> <translation id="556042886152191864">Knop</translation> +<translation id="5562781907504170924">Dit tabblad is gekoppeld aan een Bluetooth-apparaat.</translation> <translation id="5565871407246142825">Creditcards</translation> <translation id="5567989639534621706">Applicatiecaches</translation> <translation id="5568069709869097550">Kan niet aanmelden</translation> @@ -3308,6 +3326,7 @@ <translation id="5803531701633845775">Selecteer woordgroepen achteraan zonder de cursor te verplaatsen</translation> <translation id="5804241973901381774">Rechten</translation> <translation id="580571955903695899">Sorteren op titel</translation> +<translation id="5808982448801399019">Autorisatie mislukt</translation> <translation id="580961539202306967">Vragen als een site mij pushberichten wil sturen (aanbevolen)</translation> <translation id="5815645614496570556">X.400-adres</translation> <translation id="5817397429773072584">Traditioneel Chinees</translation> @@ -3579,6 +3598,7 @@ <translation id="6243774244933267674">Server is niet beschikbaar</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Update gereed</translation> +<translation id="6248400709929739064">Ondertiteling inschakelen</translation> <translation id="6248988683584659830">Zoeken in de instellingen</translation> <translation id="6251870443722440887">GDI-handles</translation> <translation id="6251889282623539337">Servicevoorwaarden voor <ph name="DOMAIN" /></translation> @@ -3603,6 +3623,7 @@ <translation id="6277105963844135994">Time-out van netwerk</translation> <translation id="6277518330158259200">&Screenshot maken</translation> <translation id="6279183038361895380">Druk op |<ph name="ACCELERATOR" />| om je cursor weer te geven</translation> +<translation id="6280215091796946657">Inloggen met een ander account</translation> <translation id="6281743458679673853">Experimenteer om ervoor te zorgen dat alle API's het opmaakkijkvenster reflecteren. Hiermee maak je de window.scroll-eigenschappen relatief ten opzichte van het opmaakkijkvenster.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nieuwe printer in je netwerk}other{Nieuwe printers in je netwerk}}</translation> <translation id="6285395082104474418">Het statusvak bevat de huidige status van je netwerk, accu en meer.</translation> @@ -3684,6 +3705,9 @@ <translation id="6418160186546245112">Terugzetten naar de vorige geïnstalleerde versie van <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Toegang permanent verwijderen voor alle apps</translation> <translation id="6418505248408153264">Material Design-geschiedenis inschakelen</translation> +<translation id="6419288379019356534">Dit apparaat wordt beheerd door <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Klik op Volgende om door te gaan met inloggen op je <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />-account.</translation> <translation id="6419902127459849040">Centraal-Europees</translation> <translation id="6420676428473580225">Toevoegen aan bureaublad</translation> <translation id="6422329785618833949">Foto gedraaid</translation> @@ -3844,7 +3868,6 @@ <translation id="6662016084451426657">Synchronisatiefout: neem contact op met de beheerder om synchronisatie in te schakelen.</translation> <translation id="6663792236418322902">Het wachtwoord dat je kiest, is later vereist voor het herstellen van dit bestand. Sla het wachtwoord op een veilige locatie op.</translation> <translation id="6664237456442406323">Je computer is geconfigureerd met een hardware-ID met een onjuiste notatie. Dit zorgt ervoor dat Chrome OS niet kan worden bijgewerkt met de nieuwste beveiligingsoplossingen, waardoor je computer <ph name="BEGIN_BOLD" />kwetsbaar kan zijn voor schadelijke aanvallen<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Vermindert de laadprioriteit van iframe-bronnen.</translation> <translation id="6666647326143344290">met je Google-account</translation> <translation id="6675665718701918026">Aanwijsapparaat verbonden</translation> <translation id="6677037229676347494">Verwachte ID '<ph name="EXPECTED_ID" />', maar ID is '<ph name="NEW_ID" />'.</translation> @@ -3937,6 +3960,7 @@ <translation id="6825883775269213504">Russisch</translation> <translation id="6827236167376090743">Deze video wordt eindeloos afgespeeld.</translation> <translation id="6828153365543658583">Inloggen beperken tot de volgende gebruikers:</translation> +<translation id="6828434191343384461">De geselecteerde gegevens zijn verwijderd uit Chrome en van gesynchroniseerde gegevens. Voor je Google-account kunnen andere vormen van browsegeschiedenis (zoals zoekopdrachten en activiteit uit andere Google-services) beschikbaar zijn via <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Kan automatische updates niet instellen voor alle gebruikers (uitvoeringsfout bij pre-flight-procedure: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Ontvang hulp bij je <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Inschrijven in je organisatie</translation> @@ -4017,6 +4041,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Poort</translation> <translation id="6965978654500191972">Apparaat</translation> +<translation id="6969104364835835175">Gebruik van PNaCl Subzero afdwingen</translation> <translation id="6970230597523682626">Bulgaars</translation> <translation id="6970480684834282392">Opstarttype</translation> <translation id="6970856801391541997">Specifieke pagina's afdrukken</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Creditcards en adressen die Google Payments gebruiken</translation> <translation id="7059858479264779982">Instellen op automatisch starten</translation> <translation id="7061692898138851896">Wachtwoorden automatisch opslaan</translation> -<translation id="7063129466199351735">Snelkoppelingen verwerken...</translation> +<translation id="7062222374113411376">Toestaan dat onlangs gesloten sites het verzenden en ontvangen van gegevens voltooien (aanbevolen)</translation> +<translation id="7063129466199351735">Snelle links verwerken...</translation> <translation id="7065223852455347715">Dit apparaat is vergrendeld in een modus waarin zakelijke aanmelding niet mogelijk is. Als je het apparaat wilt aanmelden, moet je eerst apparaatherstel uitvoeren.</translation> <translation id="7065534935986314333">Over dit systeem</translation> <translation id="7066944511817949584">Verbinding maken met '<ph name="DEVICE_NAME" />' mislukt.</translation> +<translation id="7067725467529581407">Nooit meer weergeven.</translation> <translation id="7070804685954057874">Directe invoer</translation> <translation id="7072010813301522126">Naam van snelkoppeling</translation> <translation id="7072025625456903686">Alle toestaan of aanpassen</translation> @@ -4316,7 +4343,7 @@ <translation id="7396845648024431313"><ph name="APP_NAME" /> wordt gestart zodra je het systeem opstart en blijft zelfs op de achtergrond actief als je alle andere vensters van <ph name="PRODUCT_NAME" /> sluit.</translation> <translation id="7396863776022882342">Alle sites toestaan de functie voor het genereren van sleutels te gebruiken in formulieren.</translation> <translation id="740083207982962331">Wacht tot je Chromebox opnieuw is opgestart...</translation> -<translation id="7401543881546089382">Snelkoppeling verwijderen</translation> +<translation id="7401543881546089382">Snelle link verwijderen</translation> <translation id="7405422715075171617">Scannen van een nieuw creditcardnummer inschakelen bij het invullen van een creditcardformulier.</translation> <translation id="740624631517654988">Pop-up geblokkeerd</translation> <translation id="7409233648990234464">Opnieuw starten en Powerwash uitvoeren</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">Geschiktheid controleren</translation> <translation id="749028671485790643">Persoon <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">De extensie <ph name="EXTENSION_NAME" /> kan alle tekst verzamelen die je typt, waaronder persoonlijke gegevens zoals wachtwoorden en creditcardnummers. Wil je deze extensie gebruiken?</translation> <translation id="7495778526395737099">Je oude wachtwoord vergeten?</translation> <translation id="7503191893372251637">Type Netscape-certificaat</translation> <translation id="7503821294401948377">Kan pictogram '<ph name="ICON" />' voor browseractie niet laden.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">Browservenster openen</translation> <translation id="7564847347806291057">Proces beëindigen</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome-gegevens gewist</translation> <translation id="7568790562536448087">Bijwerken</translation> <translation id="7573172247376861652">Acculading</translation> <translation id="7576032389798113292">6x4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">Gastsessie sluiten</translation> <translation id="7786889348652477777">App opnieuw &laden</translation> <translation id="7787129790495067395">Je gebruikt momenteel een wachtwoordzin. Als je je wachtwoordzin bent vergeten, kun je de synchronisatie opnieuw instellen, zodat je je gegevens van de servers van Google kunt verwijderen met Google Dashboard.</translation> +<translation id="7787308148023287649">Weergeven op een ander scherm</translation> <translation id="7788080748068240085">Als je '<ph name="FILE_NAME" />' offline wilt opslaan, moet je <ph name="TOTAL_FILE_SIZE" /> extra ruimte vrijmaken:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Maak bestanden los die je niet meer offline hoeft weer te geven<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Verwijder bestanden uit je map 'Downloads'<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google heeft een melding naar deze telefoon verstuurd. Houd er rekening mee dat wanneer je Bluetooth hebt ingeschakeld, je telefoon je <ph name="DEVICE_TYPE" /> tot een afstand van 9 m ontgrendeld kan houden. Wanneer dit een probleem is, kun je <a>deze functie tijdelijk uitschakelen</a>.</translation> <translation id="7879478708475862060">Invoermodus volgen</translation> <translation id="7880836220014399562">Met '<ph name="BUNDLE_NAME" />' worden deze apps en extensies toegevoegd:</translation> +<translation id="7881969471599061635">Ondertiteling uitschakelen</translation> <translation id="7884988936047469945">Experimentele toegankelijkheidsfuncties</translation> <translation id="7885253890047913815">Recente bestemmingen</translation> <translation id="7885283703487484916">zeer kort</translation> @@ -4707,7 +4738,7 @@ <translation id="7988930390477596403">De volgende keer dat je deze <ph name="DEVICE_TYPE" /> ontgrendeld, wordt deze geactiveerd. Met Smart Lock wordt dit apparaat door je telefoon ontgrendeld, zonder wachtwoord. Bluetooth wordt ingeschakeld om Smart Lock in te schakelen.</translation> <translation id="7989023212944932320">Google Safe Browsing heeft onlangs <ph name="BEGIN_LINK" />malware gedetecteerd<ph name="END_LINK" /> op <ph name="SITE" />. Websites die normaal gesproken veilig zijn, worden soms geïnfecteerd met malware. De schadelijke inhoud is afkomstig van <ph name="SUBRESOURCE_HOST" />, een bekende distributeur van malware. Kom over een paar uur nog eens terug.</translation> <translation id="7994370417837006925">Toegang tot meerdere accounts</translation> -<translation id="799547531016638432">Snelkoppeling verwijderen</translation> +<translation id="799547531016638432">Snelle link verwijderen</translation> <translation id="79962507603257656">Downloadstatus in meldingscentrum</translation> <translation id="7997089631332811254">(|opnieuw starten| van Chrome is vereist)</translation> <translation id="7997479212858899587">Identiteit:</translation> @@ -4991,6 +5022,7 @@ <translation id="839736845446313156">Registreren</translation> <translation id="8398790343843005537">Je telefoon zoeken</translation> <translation id="8398877366907290961">Toch doorgaan</translation> +<translation id="8399276228600040370">Log in met je account dat is opgeslagen met <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Niet-aangevinkt selectievakje</translation> <translation id="8408402540408758445">Prefetching gebruiken bij zoekresultaten</translation> <translation id="8410073653152358832">Deze telefoon gebruiken</translation> @@ -5077,6 +5109,7 @@ <translation id="8545211332741562162">Webpagina's toestaan experimentele JavaScript-functies te gebruiken.</translation> <translation id="8545575359873600875">Je wachtwoord kan niet worden geverifieerd. De beheerder van deze gebruiker met beperkte rechten heeft het wachtwoord misschien recent gewijzigd. Als dit het geval is, wordt het nieuwe wachtwoord toegepast wanneer je weer inlogt. Probeer je oude wachtwoord te gebruiken.</translation> <translation id="8546306075665861288">Cachegeheugen met afbeeldingen</translation> +<translation id="854653344619327455">Als deze markering is ingeschakeld, kan de gebruiker in het keuzevenster voor bureaublad delen niet kiezen of de audio moet worden gedeeld.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Teken</translation> <translation id="855081842937141170">Tabblad vastzetten</translation> @@ -5107,6 +5140,7 @@ <translation id="8589311641140863898">Experimental Extension APIs</translation> <translation id="8590375307970699841">Automatische updates instellen</translation> <translation id="8592071947729879125">Iframe-rechten beperken.</translation> +<translation id="8592125506633137593">Isolatie van hoofddocument</translation> <translation id="8594787581355215556">Ingelogd als <ph name="USER_EMAIL_ADDRESS" />. Beheer je gesynchroniseerde gegevens via <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Aangepaste bestanden</translation> <translation id="8596785155158796745">Microfoon is tijdelijk niet beschikbaar. <ph name="BEGIN_LINK" />Microfoon beheren<ph name="END_LINK" /></translation> @@ -5179,6 +5213,7 @@ <translation id="8688579245973331962">Staat je naam er niet bij?</translation> <translation id="8688644143607459122">Als je op 'Doorgaan' klikt, ga je ermee akkoord Google Payments te gebruiken. Informatie over je computer (inclusief de locatie) wordt gedeeld met Google Payments om je tegen fraude te beschermen.</translation> <translation id="8689102680909215706">De extensie <ph name="EXTENSION_NAME" /> is op afstand geïnstalleerd.</translation> +<translation id="868926756781121513">Bureaublad delen met tabbladbron</translation> <translation id="8689341121182997459">Verloopt op</translation> <translation id="8690754533598178758">Voor Adobe Flash Player worden afzonderlijke microfoonuitzonderingen gebruikt.</translation> <translation id="8691686986795184760">(Ingeschakeld door bedrijfsbeleid)</translation> @@ -5222,6 +5257,7 @@ <translation id="8737685506611670901">Links voor <ph name="PROTOCOL" /> openen in plaats van <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">De positie van een aanraakgebaar verfijnen om aanrakingen met slechte resolutie te compenseren, in vergelijking met een muis.</translation> +<translation id="8741995161408053644">Voor je Google-account kunnen andere vormen van browsegeschiedenis beschikbaar zijn via <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Uitgebreide invoeropties weergeven op de plank.</translation> <translation id="874420130893181774">Traditionele Pinyin-invoermethode</translation> <translation id="8744525654891896746">Een avatar selecteren voor deze gebruiker met beperkte rechten</translation> @@ -5236,6 +5272,7 @@ <translation id="8757640015637159332">Openbare sessie openen</translation> <translation id="8757742102600829832">Selecteer een Chromebox om verbinding mee te maken</translation> <translation id="8757803915342932642">Apparaat op Google Cloud-apparaten</translation> +<translation id="8758895886513993540">Deze markering bepaalt of gebruikers een tabblad kunnen kiezen voor bureaublad delen.</translation> <translation id="8759408218731716181">Kan toegang tot meerdere accounts niet instellen</translation> <translation id="8759753423332885148">Meer informatie.</translation> <translation id="8761567432415473239">Google Safe Browsing heeft onlangs <ph name="BEGIN_LINK" />schadelijke programma's gevonden<ph name="END_LINK" /> op <ph name="SITE" />.</translation> @@ -5257,7 +5294,7 @@ <translation id="8787254343425541995">Proxy's voor gedeelde netwerken toestaan</translation> <translation id="878763818693997570">Deze naam is te lang</translation> <translation id="8787865569533773240">Gewijzigde instellingen voor <ph name="IDS_SHORT_PRODUCT_NAME" /> opnieuw instellen</translation> -<translation id="8791534160414513928">Een verzoek voor niet-bijhouden met je browseverkeer verzenden</translation> +<translation id="8791534160414513928">Een verzoek voor niet bijhouden met je browseverkeer verzenden</translation> <translation id="8795668016723474529">Een creditcard toevoegen</translation> <translation id="8795916974678578410">Nieuw venster</translation> <translation id="8798099450830957504">Standaard</translation> @@ -5446,6 +5483,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-muis aangesloten</translation> <translation id="9076523132036239772">Je e-mailadres of wachtwoord kan niet worden geverifieerd. Probeer eerst verbinding met een netwerk te maken.</translation> +<translation id="9077132661879924646">Hiermee wordt de samengevoegde mediapijplijn uitgeschakeld voor Android.</translation> <translation id="907841381057066561">Geen tijdelijk zipbestand gemaakt tijdens inpakken.</translation> <translation id="9083147368019416919">Uitschrijven mislukt</translation> <translation id="9084064520949870008">Openen als venster</translation> @@ -5486,7 +5524,7 @@ <translation id="9137356749601179867">Vink het selectievakje aan om de mogelijkheid te krijgen een creditcard die van de server is gedownload, lokaal op te slaan.</translation> <translation id="913758436357682283">Myanmar MyanSan-toetsenbord</translation> <translation id="9137916601698928395">Link openen als <ph name="USER" /></translation> -<translation id="9138978632494473300">Snelkoppelingen toevoegen op de volgende locaties:</translation> +<translation id="9138978632494473300">Snelle links toevoegen op de volgende locaties:</translation> <translation id="9145718805518496796">Extensies inpakken…</translation> <translation id="9147392381910171771">&Opties</translation> <translation id="9148058034647219655">Sluiten</translation> @@ -5499,7 +5537,7 @@ <translation id="9153934054460603056">Identiteit en wachtwoord opslaan</translation> <translation id="9154194610265714752">Bijgewerkt</translation> <translation id="9154418932169119429">Deze afbeelding is offline niet beschikbaar.</translation> -<translation id="91568222606626347">Snelkoppeling maken…</translation> +<translation id="91568222606626347">Snelle link maken…</translation> <translation id="9157697743260533322">Kan automatische updates niet instellen voor alle gebruikers (lanceringsfout bij pre-flight-procedure: <ph name="ERROR_NUMBER" />)</translation> <translation id="9158715103698450907">Er is een netwerkcommunicatieprobleem opgetreden tijdens de verificatie. Controleer je netwerkverbinding en probeer het opnieuw.</translation> <translation id="9159562891634783594">Schakel het registreren van niet-geregistreerde cloudprinters via het afdrukvoorbeeld in.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index b30b9a7..5136ac1 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Velg en kvadratisk del av bildet.</translation> <translation id="1697532407822776718">Da er alt klart!</translation> +<translation id="1697988819212986149">Viser et Google-ikon ved siden av elementer som er levert av Googles tjenester, i den kontekstuelle menyen.</translation> <translation id="1699274548822076330">Dette skal brukes sammen med «Spor nettadresser for opplastinger»-flagget. ADVARSEL: Når dette er slått på, registrerer Chrome ytelsesdata for all navigasjon og laster dem opp til den nettadressen som er spesifisert i trace-upload-url-flagget. Det kan hende sporet inneholder personlig identifiserende informasjon (PII), for eksempel titlene og nettadressene til nettstedene du besøker.</translation> <translation id="1699395855685456105">Maskinvareversjon:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">Oppdater passordfrasen for synkronisering.</translation> <translation id="1788636309517085411">Bruk standard</translation> <translation id="1789575671122666129">Forgrunnsvinduer</translation> -<translation id="1790550373387225389">Start presentasjonsmodus</translation> <translation id="1792705092719258158">Slå på speilet skjermmodus.</translation> <translation id="1793119619663054394">Er du sikker på at du vil fjerne «<ph name="PROFILE_NAME" />» og alle tilhørende Chrome-data fra denne datamaskinen? Dette kan ikke angres.</translation> <translation id="179767530217573436">de fire siste ukene</translation> @@ -1150,6 +1150,7 @@ <translation id="267285457822962309">Endre innstillinger som er spesifikke for enheten din og eksterne enheter.</translation> <translation id="2673135533890720193">lese nettleserloggen din</translation> <translation id="2673589024369449924">Opprett en skrivebordssnarvei for denne brukeren</translation> +<translation id="2675358154061544447">Svært eksperimentell støtte for gjengivelse av iframes med koblinger til andre nettsteder i separate prosesser. I denne modusen deler dokumenter en gjengivelsesprosess, men bare hvis de er fra samme nettsted.</translation> <translation id="2676946222714718093">Spilles av på</translation> <translation id="2678063897982469759">Aktiver på nytt</translation> <translation id="2678246812096664977">Alle programtillegg</translation> @@ -1376,6 +1377,7 @@ <translation id="2960393411257968125">Hvordan passordbehandleren håndterer autofyll for påloggingsinformasjonen for synkronisering.</translation> <translation id="29611076221683977">Hackere som for øyeblikket er på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> prøver kanskje å installere farlige programmer på Mac-en din. Disse programmene kan stjele eller slette informasjonen din (for eksempel bilder, passord, e-post og kredittkortinformasjon).</translation> <translation id="2961695502793809356">Klikk for å gå fremover – hold for å se logg</translation> +<translation id="296216853343927883">Google-merking i den kontekstuelle menyen</translation> <translation id="2963151496262057773">Følgende programtillegg svarer ikke: <ph name="PLUGIN_NAME" />Vil du stoppe det?</translation> <translation id="2963783323012015985">Tyrkisk tastatur</translation> <translation id="2964193600955408481">Deaktiver Wi-Fi</translation> @@ -1425,6 +1427,16 @@ <translation id="3025729795978504041">Høyreklikk på knappen ovenfor for å se andre personer.</translation> <translation id="3026050830483105579">Alt er her.</translation> <translation id="302620147503052030">Vis knapp</translation> +<translation id="302781076327338683">Last inn omgåelsesbufferen på nytt</translation> +<translation id="3030243755303701754">Administrerte brukere kan surfe på nettet med veiledning fra deg. Som administrator for administrerte brukere i Chrome kan du: + + • tillate eller forby spesifikke nettsteder, + • gå gjennom nettstedene de administrerte brukerne har besøkt, og + • administrere andre innstillinger. + +Det opprettes ikke noen Google-kontoer når du oppretter administrerte brukere, og bokmerkene, nettlesingsloggen og de andre preferansene til disse brukerne blir ikke overført til andre enheter med Chrome-synkroniseringen. Når du har opprettet en ny administrert bruker, kan du når som helst administrere vedkommendes innstillinger – fra alle slags enheter – ved å gå til <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Du finner mer informasjon i <ph name="BEGIN_LINK" />brukerstøtten<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Velg elementer som skal importeres:</translation> <translation id="3033332627063280038">Aktivér eksperimentell implementering av Cache-Control: «stale-while-revalidate»-direktivet. Dette gjør at servere kan spesifisere at noen ressurser kan forlenges i bakgrunnen for å bedre tidsforsinkelser.</translation> @@ -1643,7 +1655,6 @@ <translation id="3324301154597925148">Er dette søkesiden du forventet?</translation> <translation id="3324684065575061611">(Deaktivert av virksomhetens retningslinjer)</translation> <translation id="3326821416087822643">Til zip: <ph name="FILE_NAME" /> ...</translation> -<translation id="3330206034087160972">Avslutt presentasjonsmodus</translation> <translation id="3330686263988132416">Origin-topptekst for WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Slå på speilet skjermmodus. Denne modusen snur skjermbildet horisontalt.</translation> @@ -1688,6 +1699,7 @@ <translation id="3392020134425442298">Last ned den skadelige filen allikevel</translation> <translation id="3394150261239285340"><ph name="HOST" /> ønsker å bruke kameraet og mikrofonen din.</translation> <translation id="3394279550557729862">Slå på støtte for bruk av de innebygde varselmeldingene og varselsenteret på plattformer der disse er tilgjengelige.</translation> +<translation id="3394862755749546286">Slår av den enhetlige medieprosessen (for Android og datamaskiner) på Android.</translation> <translation id="3396331542604645348">Den valgte skriveren er ikke tilgjengelig, eller har ikke blitt installert på riktig måte. Kontrollér skriveren din, eller prøv å velge en annen skriver.</translation> <translation id="3399597614303179694">Makedonsk tastatur</translation> <translation id="3401130144947259741">Hvis dette er slått på, blir sporingshendelsene eksportert til Hendelsessporing for Windows (ETW), og de kan registreres av enten UIForETW eller Xperf.</translation> @@ -1898,7 +1910,6 @@ <translation id="367645871420407123">la stå tomt hvis du ønsker å sette rot-passordet til standard testbildeverdi</translation> <translation id="3678156199662914018">Utvidelse: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltesisk tastatur</translation> -<translation id="3680173818488851340">iframes med lav prioritet.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" />-forespørsel om skjermdeling</translation> <translation id="3685122418104378273">Google Disk-synkronisering er deaktivert som standard ved bruk av mobile data.</translation> <translation id="3685387984467886507">Husk beslutninger om å fortsette på tross av SSL-feil i en bestemt tidsperiode.</translation> @@ -1947,6 +1958,7 @@ <translation id="3741158646617793859">Nå vises <ph name="DEVICE_NAME" /> i administrasjonskonsollen</translation> <translation id="3741243925913727067">Sikkerhetskopiér bilder og videoer på medieenheten din til Google Disk.</translation> <translation id="3743492083222969745">Slår alternativet for ordføring på/av på innstillingssiden for det virtuelle tastaturet.</translation> +<translation id="3744111561329211289">Bakgrunnssynkronisering</translation> <translation id="3749289110408117711">Filnavn</translation> <translation id="3751427701788899101">Tilkoblingen ble brutt</translation> <translation id="3751522270321808809">Det kan hende at dette nettstedet prøver å lure deg for å stjele informasjonen din (for eksempel passord, meldinger eller kredittkort).</translation> @@ -2262,6 +2274,7 @@ <translation id="4218259925454408822">Logg på en annen konto</translation> <translation id="4219614746733932747">Hvis dette alternativet er slått på, bruker Blink zoomemekanismen sin for å skalere innhold til enhetens skaleringsfaktor.</translation> <translation id="4220865787605972627">Tillater kalibrering av fargene på skjermen hvis skjermen støtter denne funksjonen.</translation> +<translation id="4232692576734035989">Svært eksperimentell ytelsesmodus hvor iframes med koblinger til andre nettsteder holdes i en egen prosess som er adskilt fra toppdokumentet. I denne modusen kan iframes fra andre tredjeparters nettsteder dele prosesser.</translation> <translation id="4235200303672858594">Hele skjermen</translation> <translation id="4235813040357936597">Legg til konto for <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> kan ikke vises på dette språket</translation> @@ -2427,6 +2440,7 @@ <translation id="4509017836361568632">Slett bilde</translation> <translation id="4509345063551561634">Plassering:</translation> <translation id="4514542542275172126">Konfigurer en ny administrert bruker</translation> +<translation id="4514914692061505365">Tving bruk av PNaCls raske Subzero-oversetter for alle pexe-filer.</translation> <translation id="4518677423782794009">Krasjer Chrome? Ser du uvanlige oppstartssider, verktøyrader eller uventede annonser du ikke blir kvitt? Eller blir nettleserbruken endret på annen måte? Det kan hende du kan løse problemet ved å kjøre opprydningsverktøyet for Chrome.</translation> <translation id="452039078290142656">ukjente enheter fra <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detaljer</translation> @@ -2475,6 +2489,7 @@ <translation id="4595560905247879544">Apper og utvidelser kan bare endres av administratoren (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF Convertor</translation> <translation id="4602466770786743961">Tillat alltid at <ph name="HOST" /> bruker kameraet og mikrofonen</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Internett er ikke tilkoblet</translation> <translation id="4608500690299898628">&Finn</translation> <translation id="4610637590575890427">Vil du gå til <ph name="SITE" />?</translation> @@ -2777,6 +2792,7 @@ <translation id="5062930723426326933">Påloggingen mislyktes. Koble til Internett og prøv på nytt.</translation> <translation id="5063180925553000800">Ny personlig kode:</translation> <translation id="5067867186035333991">Spør om <ph name="HOST" /> vil bruke mikrofonen din</translation> +<translation id="5068918910148307423">Ikke tillat at nylig lukkede nettsteder fullfører sending og mottak av data</translation> <translation id="507075806566596212">Du er i ferd med å registrere denne <ph name="DEVICE_TYPE" />en hos Google for å slå på muligheten til å finne, slette innholdet på og låse enheten fra en ekstern plassering. Dette krever at du starter enheten på nytt. Vil du fortsette?</translation> <translation id="5072836811783999860">Vis administrerte bokmerker</translation> <translation id="5074318175948309511">Du må kanskje laste inn denne siden på nytt for at innstillingene skal bli gjeldende.</translation> @@ -2884,6 +2900,7 @@ <translation id="5227808808023563348">Finn forrige tekst</translation> <translation id="5228076606934445476">Noe er galt med enheten. For å rette opp i denne feilen må du starte enheten på nytt og prøve igjen.</translation> <translation id="5228962187251412618">Sjekker bare på nettet</translation> +<translation id="5229622432348746578">Slå av muligheten for å dele lyd ved deling av skrivebord</translation> <translation id="5230516054153933099">Vindu</translation> <translation id="5232178406098309195">Når du bruker lydaktiveringskommandoer som «Ok Google» eller trykker på et mikrofonikon, lagrer funksjonen for tale- og lydaktivitet noe av talen og annen lyd på kontoen din. Et opptak av den etterfølgende talen/lyden, pluss et par sekunder før, blir lagret.</translation> <translation id="523299859570409035">Unntak for varsler</translation> @@ -3138,6 +3155,7 @@ <translation id="5557991081552967863">Hold Wi-Fi på under hvilemodus</translation> <translation id="5558129378926964177">Zoom &inn</translation> <translation id="556042886152191864">Knapp</translation> +<translation id="5562781907504170924">Denne fanen er koblet til en Bluetooth-enhet.</translation> <translation id="5565871407246142825">Kredittkort</translation> <translation id="5567989639534621706">Programbuffere</translation> <translation id="5568069709869097550">Kan ikke logge på</translation> @@ -3297,6 +3315,7 @@ <translation id="5803531701633845775">Velg fraser fra baksiden, uten å bevege markøren</translation> <translation id="5804241973901381774">Tillatelser</translation> <translation id="580571955903695899">Sortér etter tittel</translation> +<translation id="5808982448801399019">Autorisasjonen mislyktes</translation> <translation id="580961539202306967">Spør meg når et nettsted vil sende meg pushmeldinger (anbefales)</translation> <translation id="5815645614496570556">X.400-adresse</translation> <translation id="5817397429773072584">Kinesisk (tradisjonell)</translation> @@ -3566,6 +3585,7 @@ <translation id="6243774244933267674">Tjeneren er ikke tilgjengelig</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Oppdateringen er klar</translation> +<translation id="6248400709929739064">Slå på undertekster</translation> <translation id="6248988683584659830">Søk i innstillingene</translation> <translation id="6251870443722440887">GDI håndterer</translation> <translation id="6251889282623539337"><ph name="DOMAIN" />-vilkår</translation> @@ -3590,6 +3610,7 @@ <translation id="6277105963844135994">Tidsavbrudd for nettverket</translation> <translation id="6277518330158259200">Ta en skjermdump</translation> <translation id="6279183038361895380">Trykk på |<ph name="ACCELERATOR" />| for å se markøren</translation> +<translation id="6280215091796946657">Logg på med en annen konto</translation> <translation id="6281743458679673853">Eksperiment der alle API-ene gjenspeiler layout-visningsområdet. Dette gjør at vinduets rulleegenskaper fungerer relativt til layout-visningsområdet.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ny skriver på nettverket}other{Nye skrivere på nettverket}}</translation> <translation id="6285395082104474418">Statusfeltet viser deg status for nettverket, batteriet og mer.</translation> @@ -3671,6 +3692,9 @@ <translation id="6418160186546245112">Tilbakestiller til den forrige installerte versjonen av <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Fjern tilgangen for alle apper permanent</translation> <translation id="6418505248408153264">Slå på loggen for Material Design</translation> +<translation id="6419288379019356534">Denne enheten administreres av <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Klikk på «Neste» for å fortsette å logge på <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />-kontoen din.</translation> <translation id="6419902127459849040">Sentraleuropeisk</translation> <translation id="6420676428473580225">Legg til på skrivebordet</translation> <translation id="6422329785618833949">Bildet er snudd</translation> @@ -3830,7 +3854,6 @@ <translation id="6662016084451426657">Synkroniseringsfeil: Kontakt administrator for å aktivere synkronisering.</translation> <translation id="6663792236418322902">Passordet du velger, er nødvendig for å gjenopprette denne filen på et senere tidspunkt. Oppbevar den på et sikkert sted.</translation> <translation id="6664237456442406323">Dessverre er datamaskinen konfigurert med en feilformatert maskinvare-ID. Dette hindrer Chrome OS fra å oppdatere til de siste sikkerhetsoppdateringene, og datamaskinen din <ph name="BEGIN_BOLD" />kan utsettes for skadelige angrep<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduserer innlastingsprioriteten til iframe-ressursene.</translation> <translation id="6666647326143344290">med Google-kontoen din</translation> <translation id="6675665718701918026">En pekeenhet er koblet til</translation> <translation id="6677037229676347494">Den forventede ID-en var «<ph name="EXPECTED_ID" />», men den faktiske ID-en var «<ph name="NEW_ID" />».</translation> @@ -3923,6 +3946,7 @@ <translation id="6825883775269213504">Russisk</translation> <translation id="6827236167376090743">Denne videoen fortsetter å spilles av til Dovre faller.</translation> <translation id="6828153365543658583">Begrens pålogging til følgende brukere:</translation> +<translation id="6828434191343384461">De merkede dataene er fjernet fra Chrome og alle synkroniserte enheter. Det kan hende at Google-kontoen din har andre typer nettlesingslogger, for eksempel for søk og aktivitet fra andre Google-tjenester, på <ph name="BEGIN_LINK" /> history.google.com <ph name="END_LINK" /> .</translation> <translation id="6828860976882136098">Kunne ikke konfigurere automatiske oppdateringer for alle brukerne (feil ved kjøring av forhåndskontroll: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Få hjelp med <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registrer deg for organisasjonen din</translation> @@ -4002,6 +4026,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Enhet</translation> +<translation id="6969104364835835175">Tving bruk av PNaCl Subzero</translation> <translation id="6970230597523682626">Bulgarsk</translation> <translation id="6970480684834282392">Oppstartstype</translation> <translation id="6970856801391541997">Skriv ut bestemte sider</translation> @@ -4086,10 +4111,12 @@ <translation id="7057058088140140610">Kredittkort og adresser ved bruk av Google Payments</translation> <translation id="7059858479264779982">Angi automatisk oppstart</translation> <translation id="7061692898138851896">Lagre passord automatisk</translation> +<translation id="7062222374113411376">Tillat at nylig lukkede nettsteder fullfører sending og mottak av data</translation> <translation id="7063129466199351735">Behandler snarveier …</translation> <translation id="7065223852455347715">Denne enheten er låst i en modus som forhindrer bedriftsregistrering. Hvis du vil registrere enheten, må du du gjenopprette enheten først.</translation> <translation id="7065534935986314333">Om systemet</translation> <translation id="7066944511817949584">Kunne ikke tilknytte «<ph name="DEVICE_NAME" />».</translation> +<translation id="7067725467529581407">Ikke vis dette igjen.</translation> <translation id="7070804685954057874">Direkte inndata</translation> <translation id="7072010813301522126">Snarveisnavn</translation> <translation id="7072025625456903686">Tillat alle eller tilpass</translation> @@ -4356,6 +4383,7 @@ <translation id="7489605380874780575">Sjekk støtte</translation> <translation id="749028671485790643">Person <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">Det kan hende at utvidelsen <ph name="EXTENSION_NAME" /> registrerer all tekst du skriver inn, deriblant personlige data som passord og kredittkortnumre. Vil du bruke denne utvidelsen?</translation> <translation id="7495778526395737099">Har du glemt det gamle passordet?</translation> <translation id="7503191893372251637">Netscape sertifikattype</translation> <translation id="7503821294401948377">Kan ikke laste inn ikonet «<ph name="ICON" />» for nettleserhandling.</translation> @@ -4405,6 +4433,7 @@ <translation id="756445078718366910">Åpne nettleservindu</translation> <translation id="7564847347806291057">Avslutt prosessen</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome-dataene er slettet</translation> <translation id="7568790562536448087">Oppdaterer</translation> <translation id="7573172247376861652">Batterilading</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4534,6 +4563,7 @@ <translation id="7786207843293321886">Avslutt gjesteøkten</translation> <translation id="7786889348652477777">&Last inn appen på nytt</translation> <translation id="7787129790495067395">Du bruker en passordfrase for øyeblikket. Hvis du har glemt passordfrasen din, kan du tilbakestille synkroniseringen for å slette dataene dine fra Googles tjenere gjennom Google-oversikten.</translation> +<translation id="7787308148023287649">Vis på en annen skjerm</translation> <translation id="7788080748068240085">Hvis du vil lagre <ph name="FILE_NAME" /> for bruk uten nett, må du frigjøre ytterligere <ph name="TOTAL_FILE_SIZE" /> lagringsplass:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />Løsne filer du ikke trenger å bruke uten nett lenger.<ph name="MARKUP_3" /> <ph name="MARKUP_4" />Slett filer du har i Nedlastinger-mappen.<ph name="MARKUP_5" /></translation> @@ -4602,6 +4632,7 @@ <translation id="7878999881405658917">Google sendte et varsel til denne telefonen. Merk: Med Bluetooth kan det hende telefonen din holder <ph name="DEVICE_TYPE" />-enheten ulåst på en avstand på over 30 meter. Hvis dette er et problem for deg, kan du <a>slå av denne funksjonen midlertidig</a>.</translation> <translation id="7879478708475862060">Følg inndatamodus</translation> <translation id="7880836220014399562">«<ph name="BUNDLE_NAME" />» legger til disse programmene og utvidelsene:</translation> +<translation id="7881969471599061635">Slå av undertekstene</translation> <translation id="7884988936047469945">Eksperimentelle tilgjengelighetsfunksjoner</translation> <translation id="7885253890047913815">Nylige destinasjoner</translation> <translation id="7885283703487484916">meget kort</translation> @@ -4965,6 +4996,7 @@ <translation id="839736845446313156">Registrer</translation> <translation id="8398790343843005537">Finn telefonen din</translation> <translation id="8398877366907290961">Fortsett likevel</translation> +<translation id="8399276228600040370">Logg på med kontoen som er lagret med <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Ikke avmerket avmerkingsboks</translation> <translation id="8408402540408758445">Forhåndshent søkeresultater</translation> <translation id="8410073653152358832">Bruk denne telefonen</translation> @@ -5051,6 +5083,7 @@ <translation id="8545211332741562162">La nettsider bruke eksperimentelle JavaScript-funksjoner.</translation> <translation id="8545575359873600875">Beklager, men vi fikk ikke bekreftet passordet ditt. Administratoren for den administrerte brukeren kan ha endret passordet nå nylig. Hvis dette er tilfelle, blir det nye passordet gjeldende fra neste gang du logger på. Prøv å bruke det gamle passordet.</translation> <translation id="8546306075665861288">Bildebuffer</translation> +<translation id="854653344619327455">Når dette flagget er på, kan ikke brukeren velge om lyden skal deles, i valgvinduet for deling av skrivebord.</translation> <translation id="8546541260734613940">[*.]eteksempel.no</translation> <translation id="8548973727659841685">Tegn</translation> <translation id="855081842937141170">Fest fanen</translation> @@ -5081,6 +5114,7 @@ <translation id="8589311641140863898">Grensesnitt for eksperimentelle utvidelser</translation> <translation id="8590375307970699841">Valg av automatiske oppdateringer</translation> <translation id="8592071947729879125">Begrens iframe-tillatelsene.</translation> +<translation id="8592125506633137593">Isolering av toppdokumenter</translation> <translation id="8594787581355215556">Pålogget som <ph name="USER_EMAIL_ADDRESS" />. Administrer de synkroniserte dataene dine i <ph name="BEGIN_LINK" />Google Oversikt<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Egendefinerte filer</translation> <translation id="8596785155158796745">Mikrofonen er ikke tilgjengelig for øyeblikket. <ph name="BEGIN_LINK" />Sjekk mikrofoninnstillingene.<ph name="END_LINK" /></translation> @@ -5153,6 +5187,7 @@ <translation id="8688579245973331962">Ser du ikke navnet ditt?</translation> <translation id="8688644143607459122">Ved å klikke «Fortsett» samtykker du i å bruke Google Payments. For å beskytte deg mot svindel blir informasjon om datamaskinen din (deriblant hvor den befinner seg) delt med Google Payments.</translation> <translation id="8689102680909215706">Utvidelsen <ph name="EXTENSION_NAME" /> ble installert eksternt.</translation> +<translation id="868926756781121513">Deling av skrivebord med fanekilde</translation> <translation id="8689341121182997459">Utløper:</translation> <translation id="8690754533598178758">Mikrofonunntakene er annerledes for Adobe Flash Player.</translation> <translation id="8691686986795184760">(Aktivert av virksomhetens retningslinjer)</translation> @@ -5196,6 +5231,7 @@ <translation id="8737685506611670901">åpne linker til <ph name="PROTOCOL" /> i stedet for <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Finstem posisjonen til trykkbevegelser for å kompensare for trykk som har lav oppløsning sammenlignet med en mus.</translation> +<translation id="8741995161408053644">Google-kontoen din kan ha andre typer nettlesingslogger på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Vis utvidede inndataalternativer i hyllen.</translation> <translation id="874420130893181774">Inndatametode for tradisjonell pinyin</translation> <translation id="8744525654891896746">Velg et brukerbilde for denne administrerte brukeren</translation> @@ -5209,6 +5245,7 @@ <translation id="8757640015637159332">Start en offentlig økt</translation> <translation id="8757742102600829832">Velg en Chromebox du vil koble til</translation> <translation id="8757803915342932642">Enhet på Google Cloud Devices</translation> +<translation id="8758895886513993540">Dette flagget kontrollerer om brukere kan velge faner for deling av skrivebord.</translation> <translation id="8759408218731716181">Kan ikke konfigurere multipålogging</translation> <translation id="8759753423332885148">Finn ut mer</translation> <translation id="8761567432415473239">Google Safe Browsing oppdaget nylig <ph name="BEGIN_LINK" />skadelige programmer<ph name="END_LINK" /> på <ph name="SITE" />.</translation> @@ -5419,6 +5456,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-mus er tilkoblet</translation> <translation id="9076523132036239772">Beklager, men angitt e-postadresse eller passord kunne ikke bekreftes. Prøv å koble deg til et nettverk først.</translation> +<translation id="9077132661879924646">Slår av den enhetlige medieprosessen på Android.</translation> <translation id="907841381057066561">Oppretting av midlertidig komprimert fil under pakkingen mislyktes.</translation> <translation id="9083147368019416919">Avregistreringen mislyktes</translation> <translation id="9084064520949870008">Åpne som vindu</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 5942b71..43a647f 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Wybierz kwadratowy obszar zdjęcia.</translation> <translation id="1697532407822776718">Wszystko gotowe.</translation> +<translation id="1697988819212986149">Wyświetla ikonę Google obok pozycji menu kontekstowych korzystających z usług Google.</translation> <translation id="1699274548822076330">Musi być używana razem z flagą trace-upload-url. OSTRZEŻENIE: gdy ta flaga jest włączona, Chrome będzie rejestrować dane o wydajności dla każdej operacji nawigacji i wysyłać je na adres URL ustawiony we fladze trace-upload-url. Te dane mogą zawierać informacje umożliwiające identyfikację osoby, takie jak tytuły i adresy URL odwiedzanych stron.</translation> <translation id="1699395855685456105">Wersja sprzętu:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Zaktualizuj swoje hasło synchronizacji.</translation> <translation id="1788636309517085411">Użyj wartości domyślnej</translation> <translation id="1789575671122666129">Wyskakujące okienka</translation> -<translation id="1790550373387225389">Włącz tryb prezentacji</translation> <translation id="1792705092719258158">Włącz tryb lustrzanego odbicia ekranu.</translation> <translation id="1793119619663054394">Na pewno chcesz usunąć profil „<ph name="PROFILE_NAME" />” i wszystkie powiązane z nim dane Chrome z tego komputera? Tej czynności nie można cofnąć.</translation> <translation id="179767530217573436">ostatnie 4 tygodnie</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Zmień ustawienia dla tego urządzenia i urządzeń peryferyjnych.</translation> <translation id="2673135533890720193">Odczytywanie historii przeglądania</translation> <translation id="2673589024369449924">Utwórz dla tego użytkownika skrót na pulpicie</translation> +<translation id="2675358154061544447">Bardzo eksperymentalna obsługa renderowania elementów iframe z różnych witryn w osobnych procesach. W tym trybie jeden proces będzie renderować tylko dokumenty pochodzące z tej samej witryny.</translation> <translation id="2676946222714718093">Odtwarzane na</translation> <translation id="2678063897982469759">Włącz ponownie</translation> <translation id="2678246812096664977">Wszystkie wtyczki</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">Jak menedżer haseł obsługuje autouzupełnianie danych uwierzytelniających synchronizacji.</translation> <translation id="29611076221683977">Osoby atakujące stronę <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogą spróbować zainstalować na Twoim Macu niebezpieczne programy, których celem jest wykradzenie lub usunięcie Twoich danych (na przykład zdjęć, haseł, wiadomości czy numerów kart kredytowych).</translation> <translation id="2961695502793809356">Kliknij, aby przejść dalej. Przytrzymaj, aby wyświetlić historię</translation> +<translation id="296216853343927883">Oznaczenie Google w menu kontekstowym</translation> <translation id="2963151496262057773">Ta wtyczka nie odpowiada: <ph name="PLUGIN_NAME" />Chcesz ją zatrzymać?</translation> <translation id="2963783323012015985">Klawiatura turecka</translation> <translation id="2964193600955408481">Wyłącz Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Kliknij powyższy przycisk prawym przyciskiem myszy, by zobaczyć inne osoby.</translation> <translation id="3026050830483105579">Wszystko w jednym miejscu.</translation> <translation id="302620147503052030">Pokaż przycisk</translation> +<translation id="302781076327338683">Załaduj ponownie, pomijając pamięć podręczną</translation> +<translation id="3030243755303701754">Nadzorowany użytkownik może przeglądać strony internetowe pod Twoją kontrolą. Jako jego menedżer w Chrome możesz: + + • zezwalać na dostęp do określonych witryn lub blokować go; + • sprawdzać, jakie strony odwiedzał nadzorowany użytkownik; + • zarządzać innymi ustawieniami. + +Utworzenie nadzorowanego użytkownika nie powoduje utworzenia konta Google, a zakładki, historia przeglądania i inne ustawienia tego użytkownika nie będą dostępne na innych urządzeniach za pośrednictwem Synchronizacji Chrome. Po utworzeniu nadzorowanego użytkownika dostęp do jego ustawień będziesz mieć zawsze z dowolnego urządzenia na <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Więcej informacji znajduje się w naszym <ph name="BEGIN_LINK" />Centrum pomocy<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agentka X</translation> <translation id="3031557471081358569">Wybierz elementy do zaimportowania:</translation> <translation id="3033332627063280038">Włącz eksperymentalną implementację dyrektywy stale-while-revalidate funkcji Cache-Control. Pozwala to serwerom na określenie, że w tle może być przeprowadzane przywracanie ważności w przypadku niektórych zasobów, by zmniejszyć czas oczekiwania.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">Czy to oczekiwana strona wyszukiwania?</translation> <translation id="3324684065575061611">(Wyłączona na podstawie zasad przedsiębiorstwa)</translation> <translation id="3326821416087822643">Pakuję <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Zakończ tryb prezentacji</translation> <translation id="3330686263988132416">Nagłówek źródła STUN w WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Włącz tryb lustrzanego odbicia ekranu. W tym trybie obraz na ekranie jest odwracany w poziomie.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Odzyskaj złośliwy plik</translation> <translation id="3394150261239285340">Strona <ph name="HOST" /> chce korzystać z kamery i mikrofonu.</translation> <translation id="3394279550557729862">Włącz obsługę natywnych powiadomień i centrum powiadomień w systemach operacyjnych, w których są one dostępne.</translation> +<translation id="3394862755749546286">Wyłącza jednolity strumień multimediów (na urządzenia z Androidem i komputery) na urządzeniu z Androidem.</translation> <translation id="3396331542604645348">Wybrana drukarka jest niedostępna lub nieprawidłowo zainstalowana. Sprawdź ją lub wybierz inną.</translation> <translation id="3399597614303179694">Klawiatura macedońska</translation> <translation id="3401130144947259741">Jeśli ta opcja jest włączona, zdarzenia śledzenia są eksportowane do ETW (Event Tracing for Windows) i mogą być przechwytywane przez takie narzędzia jak UIForETW czy Xperf.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">pozostaw puste, jeśli chcesz ustawić hasło główne na domyślną wartość obrazu testowego</translation> <translation id="3678156199662914018">Rozszerzenie: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Klawiatura maltańska</translation> -<translation id="3680173818488851340">Elementy iframe niskiego priorytetu.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> – żądanie udostępnienia ekranu</translation> <translation id="3685122418104378273">Gdy komórkowa transmisja danych jest włączona, synchronizacja z Dyskiem Google jest domyślnie wyłączona.</translation> <translation id="3685387984467886507">Zapamiętaj decyzje dotyczące obsługi problemów z SSL przez określony czas.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> pojawi się teraz w konsoli administracyjnej</translation> <translation id="3741243925913727067">Tworzy na Dysku Google kopie zapasowe zdjęć i filmów z nośnika danych.</translation> <translation id="3743492083222969745">Włącz/wyłącz opcję pisania gestami na stronie ustawień klawiatury wirtualnej.</translation> +<translation id="3744111561329211289">Synchronizacja w tle</translation> <translation id="3749289110408117711">Nazwa pliku</translation> <translation id="3751427701788899101">Połączenie zostało utracone</translation> <translation id="3751522270321808809">Ta strona może próbować wprowadzić Cię w błąd, by wykraść Twoje informacje (np. hasła, wiadomości lub dane kart kredytowych).</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">Zaloguj się na kolejne konto</translation> <translation id="4219614746733932747">Jeśli opcja jest włączona, Blink wykorzystuje mechanizm powiększenia, by skalować zawartość odpowiednio do współczynnika skali urządzenia.</translation> <translation id="4220865787605972627">Zezwalaj na kalibrację kolorów, jeśli ekran ją obsługuje.</translation> +<translation id="4232692576734035989">Bardzo eksperymentalny tryb pracy, w którym elementy iframe z innych witryn są obsługiwane przez inny proces niż dokument bazowy. W tym trybie elementy iframe z różnych witryn zewnętrznych mogą być obsługiwane przez jeden proces.</translation> <translation id="4235200303672858594">Cały ekran</translation> <translation id="4235813040357936597">Dodaj konto dla <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Program <ph name="PRODUCT_NAME" /> nie może być wyświetlany w tym języku</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">Odrzuć zdjęcie</translation> <translation id="4509345063551561634">Lokalizacja:</translation> <translation id="4514542542275172126">Skonfiguruj nowego nadzorowanego użytkownika</translation> +<translation id="4514914692061505365">Wymuś używanie szybkiego translatora PNaCl Subzero dla wszystkich plików pexe.</translation> <translation id="4518677423782794009">Czy masz w Chrome problemy z awariami, nietypowymi stronami startowymi, paskami narzędzi, nieoczekiwanymi reklamami, których nie możesz się pozbyć, lub innymi elementami, które utrudniają przeglądanie? Możesz to rozwiązać, korzystając z Narzędzia do czyszczenia Chrome.</translation> <translation id="452039078290142656">nieznane urządzenia od <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Szczegóły</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">Aplikacje i rozszerzenia może zmieniać tylko menedżer (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Konwerter EMF</translation> <translation id="4602466770786743961">Zawsze zezwalaj witrynie <ph name="HOST" /> na dostęp do kamery i mikrofonu</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Brak połączenia z internetem</translation> <translation id="4608500690299898628">&Znajdź</translation> <translation id="4610637590575890427">Czy chodziło o przejście do witryny <ph name="SITE" />?</translation> @@ -2784,6 +2799,7 @@ <translation id="5062930723426326933">Logowanie nieudane. Połącz się z internetem i spróbuj ponownie.</translation> <translation id="5063180925553000800">Nowy kod PIN:</translation> <translation id="5067867186035333991">Pytaj, gdy witryna <ph name="HOST" /> chce mieć dostęp do mikrofonu</translation> +<translation id="5068918910148307423">Nie zezwalaj niedawno zamkniętym stronom na dokończenie wysyłania i odbierania danych</translation> <translation id="507075806566596212">Za chwilę zarejestrujesz to urządzenie <ph name="DEVICE_TYPE" /> w Google, by włączyć funkcję zdalnego lokalizowania, wymazywania i blokowania. To wymaga ponownego uruchomienia. Chcesz kontynuować?</translation> <translation id="5072836811783999860">Pokaż zakładki zarządzane</translation> <translation id="5074318175948309511">Aby nowe ustawienia zaczęły działać, być może trzeba odświeżyć tę stronę.</translation> @@ -2894,6 +2910,7 @@ <translation id="5227808808023563348">Znajdź poprzedni tekst</translation> <translation id="5228076606934445476">Coś jest nie tak z urządzeniem. Aby usunąć skutki tego błędu, musisz ponownie uruchomić urządzenie i spróbować jeszcze raz.</translation> <translation id="5228962187251412618">Tylko kontrola online</translation> +<translation id="5229622432348746578">Wyłącz dźwięk przy udostępnianiu pulpitu</translation> <translation id="5230516054153933099">Okno</translation> <translation id="5232178406098309195">Gdy używasz dźwiękowych komend aktywacyjnych, takich jak „Ok Google”, lub klikniesz ikonę mikrofonu, prywatna Aktywność związana z głosem i dźwiękiem zapisuje niektóre wypowiedzi i dźwięki na Twoim koncie. Zapisywane jest nagranie wypowiedzi lub dźwięku wraz z dołączonymi kilkoma wcześniejszymi sekundami.</translation> <translation id="523299859570409035">Wyjątki dla powiadomień</translation> @@ -3148,6 +3165,7 @@ <translation id="5557991081552967863">Nie wyłączaj Wi-Fi w trybie uśpienia</translation> <translation id="5558129378926964177">Po&większ</translation> <translation id="556042886152191864">Przycisk</translation> +<translation id="5562781907504170924">Ta karta jest połączona z urządzeniem Bluetooth.</translation> <translation id="5565871407246142825">Karty kredytowe</translation> <translation id="5567989639534621706">Pamięci podręczne aplikacji</translation> <translation id="5568069709869097550">Nie można się zalogować</translation> @@ -3307,6 +3325,7 @@ <translation id="5803531701633845775">Wybierz wyrażenia z tyłu, bez przesuwania kursora</translation> <translation id="5804241973901381774">Uprawnienia</translation> <translation id="580571955903695899">Uporządkuj według tytułu</translation> +<translation id="5808982448801399019">Autoryzacja nie udała się</translation> <translation id="580961539202306967">Pytaj mnie, gdy strona chce wysyłać mi wiadomości push (zalecane)</translation> <translation id="5815645614496570556">Adres X.400</translation> <translation id="5817397429773072584">chiński tradycyjny</translation> @@ -3576,6 +3595,7 @@ <translation id="6243774244933267674">Serwer niedostępny</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Aktualizacja jest gotowa</translation> +<translation id="6248400709929739064">Włącz napisy</translation> <translation id="6248988683584659830">Przeszukaj ustawienia</translation> <translation id="6251870443722440887">Uchwyty GDI</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> – warunki korzystania</translation> @@ -3600,6 +3620,7 @@ <translation id="6277105963844135994">Przekroczono czas oczekiwania na sieć</translation> <translation id="6277518330158259200">Wykon&aj zrzut ekranu</translation> <translation id="6279183038361895380">Naciśnij |<ph name="ACCELERATOR" />|, by wyświetlić kursor</translation> +<translation id="6280215091796946657">Zaloguj się na inne konto</translation> <translation id="6281743458679673853">Eksperyment, w którym wszystkie interfejsy API odzwierciedlają widoczny obszar układu. Powoduje to, że właściwości window.scroll są zależne od widocznego obszaru układu.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nowa drukarka w Twojej sieci}few{Nowe drukarki w Twojej sieci}many{Nowe drukarki w Twojej sieci}other{Nowe drukarki w Twojej sieci}}</translation> <translation id="6285395082104474418">W zasobniku stanu możesz sprawdzić aktualny stan swojej sieci, baterii i innych rzeczy.</translation> @@ -3681,6 +3702,9 @@ <translation id="6418160186546245112">Przywracam poprzednio zainstalowaną wersję <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Na stałe wyłącz dostęp wszystkich aplikacji</translation> <translation id="6418505248408153264">Włącz historię interfejsu Material Design</translation> +<translation id="6419288379019356534">Tym urządzeniem zarządza domena <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Kliknij „Dalej”, by kontynuować logowanie się na konto w domenie <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Środkowoeuropejski</translation> <translation id="6420676428473580225">Dodaj do pulpitu</translation> <translation id="6422329785618833949">Zdjęcie odwrócone</translation> @@ -3841,7 +3865,6 @@ <translation id="6662016084451426657">Błąd synchronizacji: aby włączyć synchronizację, skontaktuj się z administratorem.</translation> <translation id="6663792236418322902">Wybrane hasło będzie wymagane później do odtworzenia tego pliku. Zapisz je w bezpiecznym miejscu.</translation> <translation id="6664237456442406323">Twój komputer jest skonfigurowany przy użyciu błędnie sformatowanego identyfikatora sprzętu. Ta sytuacja uniemożliwia zaktualizowanie systemu operacyjnego Chrome za pomocą najnowszych poprawek zabezpieczeń, a komputer <ph name="BEGIN_BOLD" />może być narażony na złośliwe ataki<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Zmniejsza priorytet obciążenia zasobów iframe.</translation> <translation id="6666647326143344290">za pomocą konta Google</translation> <translation id="6675665718701918026">Podłączono urządzenie wskazujące</translation> <translation id="6677037229676347494">Oczekiwano identyfikatora „<ph name="EXPECTED_ID" />”, identyfikator: „<ph name="NEW_ID" />”.</translation> @@ -3934,6 +3957,7 @@ <translation id="6825883775269213504">Rosyjski</translation> <translation id="6827236167376090743">Ten film będzie odtwarzany bez końca.</translation> <translation id="6828153365543658583">Ogranicz logowanie do następujących użytkowników:</translation> +<translation id="6828434191343384461">Wybrane dane zostały usunięte z Chrome i synchronizowanych urządzeń. Inne rodzaje historii przeglądania, takie jak wyszukiwania i aktywność w innych usługach Google, mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Nie można skonfigurować automatycznych aktualizacji dla wszystkich użytkowników (błąd wykonania procesu wstępnego: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Uzyskaj pomoc związaną z urządzeniem <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Zarejestruj się w organizacji</translation> @@ -4013,6 +4037,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Urządzenie</translation> +<translation id="6969104364835835175">Wymuś stosowanie PNaCl Subzero</translation> <translation id="6970230597523682626">Bułgarski</translation> <translation id="6970480684834282392">Typ uruchamiania</translation> <translation id="6970856801391541997">Drukuj wybrane strony</translation> @@ -4095,10 +4120,12 @@ <translation id="7057058088140140610">Karty kredytowe i adresy z Google Payments</translation> <translation id="7059858479264779982">Ustaw automatyczne uruchamianie</translation> <translation id="7061692898138851896">Automatycznie zapisuj hasła</translation> +<translation id="7062222374113411376">Zezwól niedawno zamkniętym stronom na dokończenie wysyłania i odbierania danych (zalecane)</translation> <translation id="7063129466199351735">Przetwarzam skróty...</translation> <translation id="7065223852455347715">To urządzenie jest zablokowane w trybie, który uniemożliwia rejestrację w firmie. Jeśli chcesz je zarejestrować, najpierw musisz je odzyskać.</translation> <translation id="7065534935986314333">Informacje o systemie</translation> <translation id="7066944511817949584">Nie można połączyć z urządzeniem „<ph name="DEVICE_NAME" />”.</translation> +<translation id="7067725467529581407">Nie pokazuj tego ponownie.</translation> <translation id="7070804685954057874">Wprowadzanie bezpośrednie</translation> <translation id="7072010813301522126">Nazwa skrótu</translation> <translation id="7072025625456903686">Zezwalaj na wszystkie lub dostosuj</translation> @@ -4364,6 +4391,7 @@ <translation id="7489605380874780575">Sprawdź uprawnienia</translation> <translation id="749028671485790643">Osoba <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">Rozszerzenie <ph name="EXTENSION_NAME" /> może rejestrować wszystko, co wpisujesz, w tym poufne informacje takie jak hasła i numery kart kredytowych. Czy chcesz używać tego rozszerzenia?</translation> <translation id="7495778526395737099">Nie pamiętasz starego hasła?</translation> <translation id="7503191893372251637">Typ certyfikatu firmy Netscape</translation> <translation id="7503821294401948377">Nie można wczytać ikony „<ph name="ICON" />” dla czynności wykonywanej w przeglądarce.</translation> @@ -4415,6 +4443,7 @@ <translation id="756445078718366910">Otwórz okno przeglądarki</translation> <translation id="7564847347806291057">Zakończ proces</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Wyczyszczono dane Chrome</translation> <translation id="7568790562536448087">Aktualizowanie</translation> <translation id="7573172247376861652">Poziom naładowania akumulatora</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4544,6 +4573,7 @@ <translation id="7786207843293321886">Zakończ sesję gościa</translation> <translation id="7786889348652477777">P&rzeładuj aplikację</translation> <translation id="7787129790495067395">Korzystasz obecnie z hasła. Jeśli go nie pamiętasz, możesz zresetować synchronizację za pomocą Pulpitu nawigacyjnego Google, aby usunąć swoje dane z serwerów Google.</translation> +<translation id="7787308148023287649">Wyświetl na innym ekranie</translation> <translation id="7788080748068240085">Aby zapisać „<ph name="FILE_NAME" />” offline, musisz zwolnić dodatkowe <ph name="TOTAL_FILE_SIZE" /> miejsca:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />odepnij pliki, do których nie potrzebujesz już uzyskiwać dostępu offline<ph name="MARKUP_3" /> <ph name="MARKUP_4" />usuń pliki z folderu Pobrane pliki<ph name="MARKUP_5" /></translation> @@ -4612,6 +4642,7 @@ <translation id="7878999881405658917">Na ten telefon zostało wysłane powiadomienie z Google. Pamiętaj, że gdy korzystasz z Bluetooth, Twój telefon może utrzymywać odblokowanie urządzenia <ph name="DEVICE_TYPE" /> nawet z odległości większej niż 9 metrów. Gdy sprawia to problem, możesz <a>tymczasowo wyłączyć tę funkcję</a>.</translation> <translation id="7879478708475862060">Zgodnie z trybem wprowadzania</translation> <translation id="7880836220014399562">„<ph name="BUNDLE_NAME" />” dodaje te aplikacje i rozszerzenia:</translation> +<translation id="7881969471599061635">Wyłącz napisy</translation> <translation id="7884988936047469945">Eksperymentalne ułatwienia dostępu</translation> <translation id="7885253890047913815">Ostatnie urządzenia docelowe</translation> <translation id="7885283703487484916">bardzo krótkie</translation> @@ -4975,6 +5006,7 @@ <translation id="839736845446313156">Zarejestruj</translation> <translation id="8398790343843005537">Znajdź swój telefon</translation> <translation id="8398877366907290961">Kontynuuj mimo wszystko</translation> +<translation id="8399276228600040370">Zaloguj się na konto zapisane w <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Niezaznaczone pole wyboru</translation> <translation id="8408402540408758445">Wstępnie pobierz wyniki wyszukiwania</translation> <translation id="8410073653152358832">Użyj tego telefonu</translation> @@ -5061,6 +5093,7 @@ <translation id="8545211332741562162">Włącz eksperymentalne funkcje języka JavaScript na stronach internetowych.</translation> <translation id="8545575359873600875">Nie udało się zweryfikować Twojego hasła. Menedżer tego nadzorowanego użytkownika mógł ostatnio je zmienić. Jeśli tak się stało, nowe hasło zostanie zastosowane przy następnym logowaniu. Użyj swojego starego hasła.</translation> <translation id="8546306075665861288">Pamięć podręczna grafiki</translation> +<translation id="854653344619327455">Gdy ta flaga jest włączona, w oknie selektora udostępniania pulpitu nie jest dostępna opcja udostępniania dźwięku.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Znak</translation> <translation id="855081842937141170">Przypnij kartę</translation> @@ -5091,6 +5124,7 @@ <translation id="8589311641140863898">Eksperymentalne interfejsy API rozszerzeń</translation> <translation id="8590375307970699841">Skonfiguruj aktualizacje automatyczne</translation> <translation id="8592071947729879125">Ogranicz uprawnienia elementów iframe.</translation> +<translation id="8592125506633137593">Izolacja dokumentu bazowego</translation> <translation id="8594787581355215556">Jesteś zalogowany(a) jako <ph name="USER_EMAIL_ADDRESS" />. Dane, które mają być synchronizowane, możesz wybrać w <ph name="BEGIN_LINK" />Panelu Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Pliki niestandardowe</translation> <translation id="8596785155158796745">Mikrofon jest teraz niedostępny. <ph name="BEGIN_LINK" />Zarządzaj nim<ph name="END_LINK" /></translation> @@ -5163,6 +5197,7 @@ <translation id="8688579245973331962">Nie widzisz swojej nazwy?</translation> <translation id="8688644143607459122">Klikając Kontynuuj, zgadzasz się na używanie Google Payments. Aby chronić Cię przed oszustwami, usłudze zostaną udostępnione informacje o Twoim komputerze (w tym o jego lokalizacji).</translation> <translation id="8689102680909215706">Rozszerzenie „<ph name="EXTENSION_NAME" />” zostało zainstalowane zdalnie.</translation> +<translation id="868926756781121513">Udostępnianie pulpitu z kartą źródłową</translation> <translation id="8689341121182997459">Data ważności:</translation> <translation id="8690754533598178758">Wyjątki Adobe Flash Playera dotyczące mikrofonu są inne.</translation> <translation id="8691686986795184760">(Włączona na podstawie zasad przedsiębiorstwa)</translation> @@ -5206,6 +5241,7 @@ <translation id="8737685506611670901">Otwierać linki protokołu <ph name="PROTOCOL" /> zamiast modułu <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Menedżer połączeń</translation> <translation id="8741881454555234096">Doprecyzuj pozycję gestu dotykowego w celu zrekompensowania mniejszej rozdzielczości dotyku w porównaniu z myszą.</translation> +<translation id="8741995161408053644">Inne rodzaje historii przeglądania mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Pokaż rozwinięte opcje wprowadzania na półce.</translation> <translation id="874420130893181774">Tradycyjna metoda wprowadzania Pinyin</translation> <translation id="8744525654891896746">Wybierz awatar dla tego użytkownika nadzorowanego.</translation> @@ -5219,6 +5255,7 @@ <translation id="8757640015637159332">Rozpocznij sesję publiczną</translation> <translation id="8757742102600829832">Wybierz Chromeboksa, z którym chcesz się połączyć</translation> <translation id="8757803915342932642">Urządzenie w chmurze Google</translation> +<translation id="8758895886513993540">Ta flaga określa, czy użytkownicy mogą wybrać kartę przy udostępnianiu pulpitu.</translation> <translation id="8759408218731716181">Nie można skonfigurować wielokrotnego logowania</translation> <translation id="8759753423332885148">Więcej informacji.</translation> <translation id="8761567432415473239">Funkcja Bezpieczne przeglądanie Google ostatnio <ph name="BEGIN_LINK" />znalazła szkodliwe<ph name="END_LINK" /> programy na <ph name="SITE" />.</translation> @@ -5429,6 +5466,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Podłączono mysz USB</translation> <translation id="9076523132036239772">Niestety, nie udało się zweryfikować Twojego adresu e-mail lub hasła. Najpierw nawiąż połączenie z siecią.</translation> +<translation id="9077132661879924646">Wyłącza jednolity strumień multimediów na urządzeniu z Androidem.</translation> <translation id="907841381057066561">Nie można utworzyć tymczasowego pliku zip podczas pakowania.</translation> <translation id="9083147368019416919">Nie udało się wyrejestrować</translation> <translation id="9084064520949870008">Otwórz jako okno</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index abd9b7c7..5d81d44a 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Selecione uma área quadrada da imagem.</translation> <translation id="1697532407822776718">Pronto.</translation> +<translation id="1697988819212986149">Exibe um ícone do Google ao lado dos itens do menu de contexto fornecidos pelos serviços do Google.</translation> <translation id="1699274548822076330">Isto deve ser usado em conjunto com o sinalizador trace-upload-url. AVISO: quando este recurso está ativado, o Chrome grava dados de desempenho para cada navegação e os envia ao URL especificado pelo sinalizador trace-upload-url. O rastreamento pode incluir informações de identificação pessoal (PII, na sigla em inglês), tais como os títulos e URLs de websites que você visita.</translation> <translation id="1699395855685456105">Revisão do hardware:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Favor atualizar sua senha de sincronização.</translation> <translation id="1788636309517085411">Usar padrão</translation> <translation id="1789575671122666129">Pop-ups</translation> -<translation id="1790550373387225389">Entrar no Modo de apresentação</translation> <translation id="1792705092719258158">Ativar o modo de tela espelhada.</translation> <translation id="1793119619663054394">Tem certeza de que deseja remover o perfil "<ph name="PROFILE_NAME" />" e todos os dados associados do Chrome deste computador? Esta ação não pode ser desfeita.</translation> <translation id="179767530217573436">as últimas quatro semanas</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Alterar as configurações específicas de seu dispositivo e periféricos.</translation> <translation id="2673135533890720193">Ler seu histórico de navegação</translation> <translation id="2673589024369449924">Criar um atalho na área de trabalho para este usuário</translation> +<translation id="2675358154061544447">Compatibilidade altamente experimental para renderização de iframes entre sites em processos separados. Neste modo, os documentos compartilham um processo do renderizador apenas se eles são do mesmo website.</translation> <translation id="2676946222714718093">Reproduzindo em</translation> <translation id="2678063897982469759">Reativar</translation> <translation id="2678246812096664977">Todos os plug-ins</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">A forma como o gerenciador de senhas lida com o preenchimento automático da credencial de sincronização.</translation> <translation id="29611076221683977">Os invasores que estão atualmente em <ph name="BEGIN_BOLD" /> <ph name="SITE" /> <ph name="END_BOLD" /> podem tentar instalar programas perigosos no seu Mac para roubar ou excluir suas informações (por exemplo, fotos, senhas, mensagens e cartões de crédito).</translation> <translation id="2961695502793809356">Clique para avançar, mantenha pressionado para ver o histórico</translation> +<translation id="296216853343927883">Marca do Google no menu de contexto</translation> <translation id="2963151496262057773">Este plug-in não responde: <ph name="PLUGIN_NAME" />. Deseja interrompê-lo?</translation> <translation id="2963783323012015985">Teclado turco</translation> <translation id="2964193600955408481">Desativar Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Com o botão direito do mouse, clique sobre o botão acima para ver outras pessoas.</translation> <translation id="3026050830483105579">Está tudo aqui.</translation> <translation id="302620147503052030">Mostrar botão</translation> +<translation id="302781076327338683">Atualizar ignorando o cache</translation> +<translation id="3030243755303701754">Um usuário supervisionado pode explorar a Web com sua orientação. Por ser o administrador de um usuário supervisionado no Chrome, você pode: + + • permitir ou proibir determinados websites; + • analisar os websites que o usuário supervisionado visitou; e + • gerenciar outras configurações. + +A criação de um usuário supervisionado não cria uma Conta do Google. Os favoritos, histórico de navegação e outras preferências desse usuário não são sincronizados com outros dispositivos com a Sincronização do Chrome. Depois de criar um novo usuário supervisionado, você pode gerenciar as configurações dele a qualquer momento, a partir de qualquer dispositivo, em <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Para ver mais informações, visite nossa <ph name="BEGIN_LINK" />Central de Ajuda<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agente X</translation> <translation id="3031557471081358569">Selecione os itens que serão importados:</translation> <translation id="3033332627063280038">Ativar a implementação experimental do Cache-Control: diretiva stale-while-revalidate. Esta opção permite aos servidores especificar que alguns recursos podem ser revalidados no segundo plano para melhorar a latência.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">Esta é a página de pesquisa que você esperava?</translation> <translation id="3324684065575061611">Desativado pela política empresarial</translation> <translation id="3326821416087822643">Compactando <ph name="FILE_NAME" /></translation> -<translation id="3330206034087160972">Sair do Modo de apresentação</translation> <translation id="3330686263988132416">Cabeçalho de origem do WebRTC Stun.</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Ativar o modo de tela espelhada. Este modo inverte a imagem da tela horizontalmente.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">Recuperar arquivo malicioso</translation> <translation id="3394150261239285340"><ph name="HOST" /> deseja utilizar sua câmera e microfone.</translation> <translation id="3394279550557729862">Ativar a compatibilidade com o uso de avisos de notificações nativas e da central de notificação em plataformas nas quais esses recursos estejam disponíveis.</translation> +<translation id="3394862755749546286">Desativa o canal de mídia unificado (Android e desktop) no Android.</translation> <translation id="3396331542604645348">A impressora selecionada não está disponível ou não foi instalada corretamente. Verifique sua impressora ou selecione outra.</translation> <translation id="3399597614303179694">Teclado macedônio</translation> <translation id="3401130144947259741">Se esse recurso estiver ativado, os eventos de acompanhamento serão exportados para o Acompanhamento de eventos para Windows (ETW, na sigla em inglês) e poderão ser captados por ferramentas como UIForETW ou XPerf.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">deixe em branco se você deseja definir a senha raiz como o valor da imagem de teste padrão</translation> <translation id="3678156199662914018">Extensão: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Teclado maltês</translation> -<translation id="3680173818488851340">Iframes de baixa prioridade.</translation> <translation id="3683524264665795342">Solicitação de compartilhamento da tela do <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">A sincronização do Google Drive é desativada por padrão durante o uso de dados móveis.</translation> <translation id="3685387984467886507">Lembrar decisão de ignorar os erros de SSL por um determinado período de tempo.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> agora é exibido no Admin Console</translation> <translation id="3741243925913727067">Backup de fotos e vídeos do seu dispositivo de mídia para o Google Drive.</translation> <translation id="3743492083222969745">Ativar/desativar opção de escrita com gestos na página de configurações para o teclado virtual.</translation> +<translation id="3744111561329211289">Sincronização em segundo plano</translation> <translation id="3749289110408117711">Nome do arquivo</translation> <translation id="3751427701788899101">A conexão foi perdida</translation> <translation id="3751522270321808809">Este site pode tentar enganar você para roubar suas informações, como senhas, mensagens ou cartões de crédito.</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">Fazer login em outra conta</translation> <translation id="4219614746733932747">Caso ativado, o Blink usa seu mecanismo de zoom para dimensionar o conteúdo para o fator de escala do dispositivo.</translation> <translation id="4220865787605972627">Permitir a calibragem da cor da tela, se compatível com o recurso.</translation> +<translation id="4232692576734035989">Modo de desempenho altamente experimental no qual os iframes entre sites são mantidos em um processo separado do documento principal. Neste modo, os iframes de diferentes sites de terceiros têm autorização para compartilhar um processo.</translation> <translation id="4235200303672858594">Tela cheia</translation> <translation id="4235813040357936597">Adicionar conta para <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> não pode ser exibido neste idioma</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">Descartar foto</translation> <translation id="4509345063551561634">Local:</translation> <translation id="4514542542275172126">Configurar um novo usuário supervisionado</translation> +<translation id="4514914692061505365">Força o uso de tradutor Subzero rápido do PNaCl para todos os arquivos pexe.</translation> <translation id="4518677423782794009">O Chrome apresenta falhas, mostrando páginas de inicialização ou barras de ferramentas incomuns ou anúncios indesejados dos quais você não consegue se livrar ou fazendo alguma outra alteração na sua experiência de navegação? Talvez seja possível corrigir o problema executando a Ferramenta de limpeza do Chrome.</translation> <translation id="452039078290142656">dispositivos desconhecidos do <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalhes</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">Apps e extensões só podem ser modificadas pelo gerente (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Conversor de EMF</translation> <translation id="4602466770786743961">Sempre permitir que <ph name="HOST" /> acesse sua câmera e seu microfone</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Sem conexão à Internet</translation> <translation id="4608500690299898628">&Buscar...</translation> <translation id="4610637590575890427">Você quis ir a <ph name="SITE" />?</translation> @@ -2784,6 +2799,7 @@ <translation id="5062930723426326933">Falha no login. Conecte-se à Internet e tente novamente.</translation> <translation id="5063180925553000800">Novo PIN:</translation> <translation id="5067867186035333991">Perguntar se <ph name="HOST" /> deseja acessar seu microfone</translation> +<translation id="5068918910148307423">Não permitir que sites fechados recentemente concluam o envio e o recebimento de dados</translation> <translation id="507075806566596212">Você está prestes a inscrever este <ph name="DEVICE_TYPE" /> no Google para ativar a capacidade de localizar, limpar e bloquear o dispositivo remotamente. Essa ação exige uma reinicialização. Deseja continuar?</translation> <translation id="5072836811783999860">Mostrar favoritos gerenciados</translation> <translation id="5074318175948309511">Esta página pode precisar ser recarregada para que as novas configurações tenham efeito.</translation> @@ -2893,6 +2909,7 @@ <translation id="5227808808023563348">Busca texto anterior</translation> <translation id="5228076606934445476">Algo está errado com o dispositivo. Para se recuperar desse erro, será preciso reiniciar o dispositivo e tentar novamente.</translation> <translation id="5228962187251412618">Apenas verificação on-line</translation> +<translation id="5229622432348746578">Desativar o compartilhamento de áudio para área de trabalho</translation> <translation id="5230516054153933099">Janela</translation> <translation id="5232178406098309195">Quando você usa comandos de ativação de áudio, como "Ok Google" ou o toque no ícone do microfone, sua Atividade de áudio e voz privada armazena um pouco da voz e outros áudios na sua conta. Uma gravação da fala/áudio subsequente, mais alguns segundos antes, será armazenada.</translation> <translation id="523299859570409035">Exceções de notificações</translation> @@ -3147,6 +3164,7 @@ <translation id="5557991081552967863">Manter Wi-Fi ativado durante a suspensão.</translation> <translation id="5558129378926964177">Aumentar z&oom</translation> <translation id="556042886152191864">Botão</translation> +<translation id="5562781907504170924">Esta guia está conectada a um dispositivo Bluetooth.</translation> <translation id="5565871407246142825">Cartões de crédito</translation> <translation id="5567989639534621706">Caches de aplicativos</translation> <translation id="5568069709869097550">Não consigo acessar</translation> @@ -3307,6 +3325,7 @@ <translation id="5803531701633845775">Escolher frases do fundo, sem mover o cursor</translation> <translation id="5804241973901381774">Permissões</translation> <translation id="580571955903695899">Reordenar por título</translation> +<translation id="5808982448801399019">Falha na autorização</translation> <translation id="580961539202306967">Perguntar quando um site quiser me enviar mensagens push (recomendado)</translation> <translation id="5815645614496570556">Endereço X.400</translation> <translation id="5817397429773072584">Chinês tradicional</translation> @@ -3577,6 +3596,7 @@ <translation id="6243774244933267674">Servidor não disponível</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Atualização pronta</translation> +<translation id="6248400709929739064">Ativar legendas</translation> <translation id="6248988683584659830">Pesq. nas configurações</translation> <translation id="6251870443722440887">Processamentos de GDI</translation> <translation id="6251889282623539337">Termos de Serviço de <ph name="DOMAIN" /></translation> @@ -3601,6 +3621,7 @@ <translation id="6277105963844135994">Tempo limite de rede</translation> <translation id="6277518330158259200">T&irar captura de tela</translation> <translation id="6279183038361895380">Pressione |<ph name="ACCELERATOR" />| para exibir seu cursor</translation> +<translation id="6280215091796946657">Fazer login com outra conta</translation> <translation id="6281743458679673853">Tenta fazer com que todas as APIs espelhem a janela de visualização de layout. Isso faz com que as propriedades window.scroll correspondam à janela de visualização de layout.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nova impressora na sua rede}one{Novas impressoras na sua rede}other{Novas impressoras na sua rede}}</translation> <translation id="6285395082104474418">A bandeja de status mostra o estado atual da rede e da bateria, dentre outros.</translation> @@ -3682,6 +3703,9 @@ <translation id="6418160186546245112">Revertendo para a versão anteriormente instalada de <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Remover permanentemente o acesso a todos os aplicativos</translation> <translation id="6418505248408153264">Ativar histórico do material design</translation> +<translation id="6419288379019356534">Este dispositivo é gerenciado por <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Clique em "Próxima" para continuar e fazer login na sua conta <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Europa Central</translation> <translation id="6420676428473580225">Adicionar à área de trabalho</translation> <translation id="6422329785618833949">Foto virada</translation> @@ -3842,7 +3866,6 @@ <translation id="6662016084451426657">Erro de sincronização: entre em contato com o administrador para ativar a sincronização.</translation> <translation id="6663792236418322902">A senha escolhida será solicitada para restaurar este arquivo mais tarde. Guarde-a em um local seguro.</translation> <translation id="6664237456442406323">Infelizmente, seu computador está configurado com um ID de hardware mal formado. Isso impede que o Chrome OS seja atualizado com as correções de segurança mais recentes e, por isso, seu computador <ph name="BEGIN_BOLD" />pode ficar vulnerável a ataques maliciosos<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduz a prioridade de carregamento dos recursos de iframe.</translation> <translation id="6666647326143344290">com sua Conta do Google</translation> <translation id="6675665718701918026">Dispositivo apontador conectado</translation> <translation id="6677037229676347494">ID esperado "<ph name="EXPECTED_ID" />", mas era "<ph name="NEW_ID" />".</translation> @@ -3935,6 +3958,7 @@ <translation id="6825883775269213504">Russo</translation> <translation id="6827236167376090743">Este vídeo continuará sendo reproduzido indefinidamente.</translation> <translation id="6828153365543658583">Restringir o login para os seguintes usuários:</translation> +<translation id="6828434191343384461">Os dados selecionados foram removidos do Chrome e dos dispositivos sincronizados. É possível que sua Conta do Google tenha outras formas de histórico de navegação, como pesquisas e atividades de outros serviços do Google em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Falha ao configurar atualizações automáticas para todos os usuários (erro de execução de simulação: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Receber ajuda para o <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registrar na sua organização</translation> @@ -4016,6 +4040,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Porta</translation> <translation id="6965978654500191972">Dispositivo</translation> +<translation id="6969104364835835175">Forçar PNaCl Subzero</translation> <translation id="6970230597523682626">Búlgaro</translation> <translation id="6970480684834282392">Tipo de inicialização</translation> <translation id="6970856801391541997">Imprimir páginas específicas</translation> @@ -4098,10 +4123,12 @@ <translation id="7057058088140140610">Cartões de crédito e endereços que usam o Google Payments</translation> <translation id="7059858479264779982">Definir para abertura automática</translation> <translation id="7061692898138851896">Salvar senhas automaticamente</translation> +<translation id="7062222374113411376">Permitir que sites fechados recentemente concluam o envio e o recebimento de dados (recomendado)</translation> <translation id="7063129466199351735">Processando atalhos...</translation> <translation id="7065223852455347715">Este dispositivo está bloqueado de tal modo que impede a inscrição de empresas. Se desejar inscrever o dispositivo, primeiro é necessário executar a recuperação dele.</translation> <translation id="7065534935986314333">Sobre o sistema</translation> <translation id="7066944511817949584">Falha ao conectar-se a "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Nunca mostrar isso novamente.</translation> <translation id="7070804685954057874">Entrada direta</translation> <translation id="7072010813301522126">Nome do atalho</translation> <translation id="7072025625456903686">Permitir tudo ou personalizar</translation> @@ -4375,6 +4402,7 @@ <translation id="7489605380874780575">Verificar elegibilidade</translation> <translation id="749028671485790643">Pessoa <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">A extensão <ph name="EXTENSION_NAME" /> pode coletar todo o texto que você digita, incluindo dados pessoais, como senhas e números de cartão de crédito. Deseja usar essa extensão?</translation> <translation id="7495778526395737099">Esqueceu sua senha antiga?</translation> <translation id="7503191893372251637">Tipo de certificado do Netscape</translation> <translation id="7503821294401948377">Não foi possível carregar o ícone "<ph name="ICON" />" para a ação do navegador.</translation> @@ -4426,6 +4454,7 @@ <translation id="756445078718366910">Abrir janela do navegador</translation> <translation id="7564847347806291057">Encerrar processo</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Dados do Chrome apagados</translation> <translation id="7568790562536448087">Atualização</translation> <translation id="7573172247376861652">Carga da bateria</translation> <translation id="7576032389798113292">6x4</translation> @@ -4555,6 +4584,7 @@ <translation id="7786207843293321886">Sair da sessão de visitante</translation> <translation id="7786889348652477777">&Recarregar aplicativo</translation> <translation id="7787129790495067395">Você está usando uma senha. Caso tenha esquecido sua senha, você poderá redefinir a sincronização para limpar seus dados dos servidores do Google usando o Painel de Controle do Google.</translation> +<translation id="7787308148023287649">Exibir em outra tela</translation> <translation id="7788080748068240085">Para salvar "<ph name="FILE_NAME" />" off-line, é necessário liberar um espaço adicional de mais <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />libere arquivos que você não precisa mais acessar off-line<ph name="MARKUP_3" /> <ph name="MARKUP_4" />exclua arquivos da sua pasta "Downloads"<ph name="MARKUP_5" /></translation> @@ -4623,6 +4653,7 @@ <translation id="7878999881405658917">O Google enviou uma notificação para este smartphone. Observe que, com o Bluetooth, seu smartphone pode manter o <ph name="DEVICE_TYPE" /> desbloqueado a mais de 30 metros de distância. Nos casos em que isso possa vir a ser um problema, você poderá <a>desativar esse recurso temporariamente</a>.</translation> <translation id="7879478708475862060">Seguir modo de entrada</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" adiciona estes aplicativos e estas extensões</translation> +<translation id="7881969471599061635">Desativar legendas</translation> <translation id="7884988936047469945">Recursos de acessibilidade experimentais</translation> <translation id="7885253890047913815">Destinos recentes</translation> <translation id="7885283703487484916">muito curto</translation> @@ -4986,6 +5017,7 @@ <translation id="839736845446313156">Inscrição</translation> <translation id="8398790343843005537">Encontrar seu smartphone</translation> <translation id="8398877366907290961">Continuar mesmo assim</translation> +<translation id="8399276228600040370">Fazer login com sua conta salva com o <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Caixa de seleção desmarcada</translation> <translation id="8408402540408758445">Realizar a pré-busca dos resultados da pesquisa</translation> <translation id="8410073653152358832">Usar este smartphone</translation> @@ -5072,6 +5104,7 @@ <translation id="8545211332741562162">Permite que as páginas da web usem recursos experimentais do JavaScript.</translation> <translation id="8545575359873600875">Não foi possível confirmar a senha. O gerente desse usuário supervisionado pode ter alterado a senha recentemente. Nesse caso, a nova senha será aplicada da próxima vez que você fizer login. Tente usar a senha antiga.</translation> <translation id="8546306075665861288">Cache da imagem</translation> +<translation id="854653344619327455">Quando essa sinalização está ativada, a janela seletora de compartilhamento para área de trabalho não permite que o usuário escolha se deseja compartilhar o áudio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Caractere</translation> <translation id="855081842937141170">Fixar guia</translation> @@ -5102,6 +5135,7 @@ <translation id="8589311641140863898">APIs de extensões experimentais</translation> <translation id="8590375307970699841">Configurar atualizações automáticas</translation> <translation id="8592071947729879125">Restringir permissões iframe.</translation> +<translation id="8592125506633137593">Isolamento do documento principal</translation> <translation id="8594787581355215556">Conectado como <ph name="USER_EMAIL_ADDRESS" />. Gerencie seus dados sincronizados no <ph name="BEGIN_LINK" />Painel do Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Arquivos personalizados</translation> <translation id="8596785155158796745">O microfone está indisponível no momento. <ph name="BEGIN_LINK" />Gerenciar microfone<ph name="END_LINK" /></translation> @@ -5174,6 +5208,7 @@ <translation id="8688579245973331962">Não encontra seu nome?</translation> <translation id="8688644143607459122">Ao clicar em "Continuar", você concorda em usar o Google Payments. Para proteger você contra fraudes, as informações sobre seu computador (incluindo seu local) serão compartilhadas com o Google Payments.</translation> <translation id="8689102680909215706">A extensão "<ph name="EXTENSION_NAME" />" foi instalada remotamente.</translation> +<translation id="868926756781121513">Fonte de compartilhamento da área de trabalho com a guia</translation> <translation id="8689341121182997459">Expira em:</translation> <translation id="8690754533598178758">As exceções do microfone do Adobe Flash Player são diferentes.</translation> <translation id="8691686986795184760">Ativado pela política empresarial</translation> @@ -5217,6 +5252,7 @@ <translation id="8737685506611670901">Abrir links de <ph name="PROTOCOL" /> em vez de <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Refinar a posição de um gesto de toque a fim de compensar toques com baixa resolução em comparação a um mouse.</translation> +<translation id="8741995161408053644">Sua Conta do Google pode ter outras formas de histórico de navegação em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Mostrar opções de entrada expandidas na estante.</translation> <translation id="874420130893181774">Método de entrada Pinyin tradicional</translation> <translation id="8744525654891896746">Selecione um avatar para este usuário supervisionado</translation> @@ -5230,6 +5266,7 @@ <translation id="8757640015637159332">Entrar na sessão pública</translation> <translation id="8757742102600829832">Selecionar um Chromebox para se conectar</translation> <translation id="8757803915342932642">Dispositivo no Google Cloud Devices</translation> +<translation id="8758895886513993540">Este sinalizador controla se os usuários podem escolher uma guia para compartilhar a área de trabalho.</translation> <translation id="8759408218731716181">Não é possível configurar o login múltiplo</translation> <translation id="8759753423332885148">Saiba mais.</translation> <translation id="8761567432415473239">Recentemente, a Navegação Segura do Google <ph name="BEGIN_LINK" />encontrou programas nocivos<ph name="END_LINK" /> no site <ph name="SITE" />.</translation> @@ -5440,6 +5477,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Mouse USB conectado</translation> <translation id="9076523132036239772">Seu e-mail ou sua senha não pode ser verificado. Tente conectar-se a uma rede.</translation> +<translation id="9077132661879924646">Desativa o canal de mídia unificada no Android.</translation> <translation id="907841381057066561">Falha ao criar arquivo zip temporário durante a compactação.</translation> <translation id="9083147368019416919">Falha ao cancelar inscrição</translation> <translation id="9084064520949870008">Abrir como janela</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index 97f5ddb..1e0d8bc 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Selecione um quadrado da imagem.</translation> <translation id="1697532407822776718">O processo está concluído!</translation> +<translation id="1697988819212986149">Mostra um ícone da Google junto aos itens do menu de contexto com tecnologia dos serviços Google.</translation> <translation id="1699274548822076330">Destina-se a ser utilizado em conjunto com o sinalizador trace-upload-url. AVISO: quando está ativado, o Chrome regista dados de desempenho de todas as navegações e carrega-os para o URL especificado pelo sinalizador trace-upload-url. O rastreio pode incluir informações de identificação pessoal (PII) como os títulos e os URLs dos Websites visitados por si.</translation> <translation id="1699395855685456105">Revisão do hardware:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">Atualize a frase de acesso de sincronização.</translation> <translation id="1788636309517085411">Utilizar predefinição</translation> <translation id="1789575671122666129">Pop-ups</translation> -<translation id="1790550373387225389">Entrar no Modo de Apresentação</translation> <translation id="1792705092719258158">Ativar o modo de ecrã espelhado.</translation> <translation id="1793119619663054394">Tem a certeza de que pretende remover "<ph name="PROFILE_NAME" />" e todos os dados associados do Chrome deste computador? Não é possível anular esta ação.</translation> <translation id="179767530217573436">últimas 4 semanas</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Alterar as definições específicas para o seu dispositivo e periféricos.</translation> <translation id="2673135533890720193">Ler o seu histórico de navegação</translation> <translation id="2673589024369449924">Criar atalho no ambiente de trabalho para este perfil</translation> +<translation id="2675358154061544447">Suporte altamente experimental para processar iframes entre sites em processos separados. Neste modo, os documentos partilham um processo de renderização apenas se forem provenientes do mesmo Website.</translation> <translation id="2676946222714718093">A reproduzir em</translation> <translation id="2678063897982469759">Reactivar</translation> <translation id="2678246812096664977">Todos os plug-ins</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">A forma como o gestor de palavras-passe processa o preenchimento automático da credencial de sincronização.</translation> <translation id="29611076221683977">Os hackers que atualmente se encontram em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem tentar instalar programas perigosos no seu Mac que roubam ou eliminam as suas informações (por exemplo, fotografias, palavras-passe, mensagens e cartões de crédito).</translation> <translation id="2961695502793809356">Clique para avançar, mantenha premido para ver o histórico</translation> +<translation id="296216853343927883">Branding da Google no menu de contexto</translation> <translation id="2963151496262057773">O seguinte plug-in está sem resposta: <ph name="PLUGIN_NAME" /> Pretende pará-lo?</translation> <translation id="2963783323012015985">Teclado turco </translation> @@ -1431,6 +1433,16 @@ <translation id="3025729795978504041">Clique com o botão direito do rato no botão acima para ver outras pessoas.</translation> <translation id="3026050830483105579">Está tudo aqui.</translation> <translation id="302620147503052030">Mostrar botão</translation> +<translation id="302781076327338683">Atualizar processo para ignorar a cache</translation> +<translation id="3030243755303701754">Um utilizador supervisionado pode explorar a Web com a sua orientação. Como gestor de um utilizador supervisionado no Chrome, pode: + + • permitir ou proibir determinados Websites, + • rever os Websites visitados pelo utilizador supervisionado, e + • gerir outras definições. + +A criação de um utilizador supervisionado não cria uma Conta Google, pelo que os marcadores, o histórico de navegação e outras preferências de um utilizador supervisionado não o seguem para outros dispositivos com a Sincronização do Chrome. Depois de criar um novo utilizador supervisionado, pode gerir as respetivas definições a qualquer momento, a partir de qualquer dispositivo, em <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Para obter mais informações, aceda ao nosso <ph name="BEGIN_LINK" />Centro de Ajuda<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agente X</translation> <translation id="3031557471081358569">Seleccione os itens a importar:</translation> <translation id="3033332627063280038">Ative a implementação experimental de cache-control: diretiva "stale-while-revalidate". Esta ação permite que os servidores especifiquem que alguns recursos podem ser revalidados em segundo plano para melhorar a latência.</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">É Esta a Página de Pesquisa de Que Estava à Espera?</translation> <translation id="3324684065575061611">(Desativado por política da empresa)</translation> <translation id="3326821416087822643">A criar zip de <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Sair do Modo de Apresentação</translation> <translation id="3330686263988132416">Cabeçalhos de origem WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Ativar o modo de ecrã espelhado. Este modo inverte a imagem do ecrã na horizontal.</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">Recuperar ficheiro malicioso</translation> <translation id="3394150261239285340"><ph name="HOST" /> pretende utilizar a câmara e o microfone.</translation> <translation id="3394279550557729862">Ativar o suporte para a utilização de alertas de notificações nativas e do centro de notificações nas plataformas onde estes estão disponíveis.</translation> +<translation id="3394862755749546286">Desativa o pipeline multimédia unificado (Android e computador) no Android.</translation> <translation id="3396331542604645348">A impressora selecionada não está disponível ou não está instalada corretamente. Verifique a impressora ou tente selecionar outra impressora.</translation> <translation id="3399597614303179694">Teclado macedónio</translation> <translation id="3401130144947259741">Se a opção estiver ativada, os eventos de rastreio são exportados para o Rastreio de Eventos para o Windows (ETW) e podem ser capturados por ferramentas como o UIForETW ou o Xperf.</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">deixe em branco se pretender definir a palavra-passe de raiz como o valor da imagem de teste predefinido.</translation> <translation id="3678156199662914018">Extensão: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Teclado maltês</translation> -<translation id="3680173818488851340">Iframes com prioridade baixa.</translation> <translation id="3683524264665795342">Pedido de Partilha de Ecrã de <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Quando utiliza dados móveis, a sincronização do Google Drive é desativada por predefinição.</translation> <translation id="3685387984467886507">Lembrar decisões para proceder em caso de erros SSL durante um período de tempo especificado.</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> será agora apresentado na Consola do administrador.</translation> <translation id="3741243925913727067">Faça uma cópia de segurança das fotografias e dos vídeos do seu dispositivo multimédia no Google Drive.</translation> <translation id="3743492083222969745">Ativar/desativar a opção Escrita com gestos na página de definições para o teclado virtual.</translation> +<translation id="3744111561329211289">Sincronização em segundo plano</translation> <translation id="3749289110408117711">Nome do ficheiro</translation> <translation id="3751427701788899101">Perda de ligação</translation> <translation id="3751522270321808809">Este site pode tentar enganá-lo para roubar as suas informações (exemplos: palavras-passe, mensagens ou cartões de crédito)</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">Iniciar sessão com outra conta</translation> <translation id="4219614746733932747">Se ativado, o Blink utiliza o respetivo mecanismo de zoom para redimensionar o conteúdo para o fator de escala do dispositivo.</translation> <translation id="4220865787605972627">Permitir a calibração de cores do ecrã se o ecrã suportar a funcionalidade.</translation> +<translation id="4232692576734035989">Modo de desempenho altamente experimental em que os iframes entre sites são mantidos num processo separado do documento principal. Neste modo, os iframes de sites de terceiros diferentes estão autorizados a partilhar um processo.</translation> <translation id="4235200303672858594">Ecrã inteiro</translation> <translation id="4235813040357936597">Adicionar conta para <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Não é possível apresentar o <ph name="PRODUCT_NAME" /> neste idioma</translation> @@ -2436,6 +2449,7 @@ <translation id="4509017836361568632">Rejeitar fotografia</translation> <translation id="4509345063551561634">Localização:</translation> <translation id="4514542542275172126">Configurar novo utilizador supervisionado</translation> +<translation id="4514914692061505365">Forçar a utilização do tradutor Subzero rápido de PNaCl para todos os ficheiros pexe.</translation> <translation id="4518677423782794009">O Chrome falha, surgem páginas iniciais pouco habituais, barras de ferramentas ou anúncios inesperados dos quais não se consegue livrar ou outros elementos que alteram a sua experiência de navegação? Pode conseguir corrigir o problema ao executar a Ferramenta de limpeza do Chrome.</translation> <translation id="452039078290142656">dispositivos desconhecidos de <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalhes</translation> @@ -2484,6 +2498,7 @@ <translation id="4595560905247879544">Apenas o gestor (<ph name="CUSTODIAN_NAME" />) pode modificar as aplicações e as extensões.</translation> <translation id="4601242977939794209">Conversor EMF</translation> <translation id="4602466770786743961">Permitir sempre que <ph name="HOST" /> aceda à sua câmara e microfone</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">A internet não está ligada</translation> <translation id="4608500690299898628">&Localizar...</translation> <translation id="4610637590575890427">Pretendia aceder a <ph name="SITE" />?</translation> @@ -2787,6 +2802,7 @@ <translation id="5062930723426326933">O início de sessão falhou. Ligue-se à Internet e tente novamente.</translation> <translation id="5063180925553000800">PIN novo:</translation> <translation id="5067867186035333991">Perguntar se <ph name="HOST" /> pretende aceder ao seu microfone</translation> +<translation id="5068918910148307423">Não permitir que os sites fechados recentemente concluam o envio e a receção de dados</translation> <translation id="507075806566596212">Está prestes a inscrever este <ph name="DEVICE_TYPE" /> no Google para ativar a capacidade de localizar, apagar e bloquear remotamente o dispositivo. Para efetuar esta ação, é necessário reiniciar. Pretende continuar?</translation> <translation id="5072836811783999860">Mostrar marcadores geridos</translation> <translation id="5074318175948309511">Poderá ser necessário voltar a atualizar esta página antes de aplicar as novas definições.</translation> @@ -2896,6 +2912,7 @@ <translation id="5227808808023563348">Localizar texto anterior</translation> <translation id="5228076606934445476">Há algo de errado com o dispositivo. Para recuperar deste erro, terá de reiniciar o dispositivo e tentar novamente.</translation> <translation id="5228962187251412618">Apenas verificação online</translation> +<translation id="5229622432348746578">Desativar áudio para partilha do ambiente de trabalho</translation> <translation id="5230516054153933099">Janela</translation> <translation id="5232178406098309195">Ao utilizar comandos de ativação áudio, como "Ok Google" ou tocar num ícone de microfone, a sua Atividade de voz e áudio privada armazena algumas informações de voz e outro áudio na sua conta. É armazenada uma gravação da fala/áudio seguinte, bem como de alguns segundos antes.</translation> <translation id="523299859570409035">Exceções de notificações</translation> @@ -3150,6 +3167,7 @@ <translation id="5557991081552967863">Manter Wi-Fi durante a suspensão</translation> <translation id="5558129378926964177">Amp&liar</translation> <translation id="556042886152191864">Botão</translation> +<translation id="5562781907504170924">Este separador está ligado a um dispositivo Bluetooth.</translation> <translation id="5565871407246142825">Cartões de crédito</translation> <translation id="5567989639534621706">Caches de aplicações</translation> <translation id="5568069709869097550">Não é possível iniciar sessão</translation> @@ -3310,6 +3328,7 @@ <translation id="5803531701633845775">Escolher expressões anteriores, sem mover o cursor</translation> <translation id="5804241973901381774">Permissões</translation> <translation id="580571955903695899">Reordenar por título</translation> +<translation id="5808982448801399019">Falha na autorização</translation> <translation id="580961539202306967">Perguntar-me quando um site pretender enviar-me mensagens push (recomendado)</translation> <translation id="5815645614496570556">Endereço X.400</translation> <translation id="5817397429773072584">Chinês Tradicional</translation> @@ -3579,6 +3598,7 @@ <translation id="6243774244933267674">Servidor indisponível</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Atualização pronta</translation> +<translation id="6248400709929739064">Ativar legendas</translation> <translation id="6248988683584659830">Pesquisar definições</translation> <translation id="6251870443722440887">Identificadores de GDI</translation> <translation id="6251889282623539337">Termos de Utilização de <ph name="DOMAIN" /></translation> @@ -3603,6 +3623,7 @@ <translation id="6277105963844135994">Limite de tempo da rede</translation> <translation id="6277518330158259200">C&riar captura de ecrã</translation> <translation id="6279183038361895380">Premir |<ph name="ACCELERATOR" />| para mostrar o cursor</translation> +<translation id="6280215091796946657">Iniciar sessão com uma conta diferente</translation> <translation id="6281743458679673853">Experiência para que todas as APIs reflitam a área visível do esquema. Esta opção torna as propriedades window.scroll relativas à área visível do esquema.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nova impressora na rede}other{Novas impressoras na rede}}</translation> <translation id="6285395082104474418">O tabuleiro de estado mostra o estado atual da rede e da bateria, entre outros.</translation> @@ -3684,6 +3705,9 @@ <translation id="6418160186546245112">Reversão para a versão anteriormente instalada do <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Remover permanentemente o acesso para todas as aplicações</translation> <translation id="6418505248408153264">Ativar histórico de material design</translation> +<translation id="6419288379019356534">Este dispositivo é gerido por <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Clique em "Seguinte" para continuar a iniciar sessão na sua conta de <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Europa Central</translation> <translation id="6420676428473580225">Adicionar ao ambiente de trabalho</translation> <translation id="6422329785618833949">Fotografia virada</translation> @@ -3844,7 +3868,6 @@ <translation id="6662016084451426657">Erro de Sincronização: contacte o administrador para ativar a sincronização.</translation> <translation id="6663792236418322902">A palavra-passe que escolher será necessária para restaurar este ficheiro mais tarde. registe-a num local seguro.</translation> <translation id="6664237456442406323">Infelizmente, o seu computador está configurado com um ID de hardware formatado incorretamente. Este facto impede que o SO Chrome faça a atualização das últimas correções de segurança e o seu computador <ph name="BEGIN_BOLD" />pode estar vulnerável a ataques maliciosos<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduz a prioridade de carregamento dos recursos iframe.</translation> <translation id="6666647326143344290">com a sua Conta Google</translation> <translation id="6675665718701918026">Dispositivo apontador ligado</translation> <translation id="6677037229676347494">O ID esperado era "<ph name="EXPECTED_ID" />", mas o ID foi "<ph name="NEW_ID" />".</translation> @@ -3937,6 +3960,7 @@ <translation id="6825883775269213504">Russo</translation> <translation id="6827236167376090743">Este vídeo continuará a ser reproduzido durante um tempo indefinido.</translation> <translation id="6828153365543658583">Restringir início de sessão para os seguintes utilizadores:</translation> +<translation id="6828434191343384461">Os dados selecionados foram removidos do Chrome e dos dispositivos sincronizados. A sua Conta Google pode ter outras formas do histórico de navegação, como pesquisas e atividade doutros serviços Google, em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Falha ao configurar atualizações automáticas para todos os utilizadores (erro de execução da verificação prévia: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Obtenha ajuda com o <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Inscrever-se na sua entidade</translation> @@ -4017,6 +4041,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Porta</translation> <translation id="6965978654500191972">Dispositivo</translation> +<translation id="6969104364835835175">Forçar Subzero de PNaCl</translation> <translation id="6970230597523682626">Búlgaro</translation> <translation id="6970480684834282392">Tipo de arranque</translation> <translation id="6970856801391541997">Imprimir Páginas Específicas</translation> @@ -4099,10 +4124,12 @@ <translation id="7057058088140140610">Cartões de crédito e endereços com o Google Payments</translation> <translation id="7059858479264779982">Definir para iniciação automática</translation> <translation id="7061692898138851896">Guardar palavras-passe automaticamente</translation> +<translation id="7062222374113411376">Permitir que os sites fechados recentemente concluam o envio e a receção de dados (recomendado)</translation> <translation id="7063129466199351735">A processar atalhos...</translation> <translation id="7065223852455347715">Este dispositivo está bloqueado num modo que impede a inscrição empresarial. Se pretende inscrever o dispositivo, tem primeiro de efetuar a recuperação do dispositivo.</translation> <translation id="7065534935986314333">Acerca do sistema</translation> <translation id="7066944511817949584">Falha ao ligar a "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Não voltar a mostrar.</translation> <translation id="7070804685954057874">Introdução directa</translation> <translation id="7072010813301522126">Nome do atalho</translation> <translation id="7072025625456903686">Permitir tudo ou personalizar</translation> @@ -4375,6 +4402,7 @@ <translation id="7489605380874780575">Verificar elegibilidade</translation> <translation id="749028671485790643">Pessoa <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">A extensão <ph name="EXTENSION_NAME" /> pode recolher todo o texto que escrever, incluindo dados pessoais como palavras-passe e números de cartões de crédito. Pretende utilizar esta extensão?</translation> <translation id="7495778526395737099">Esqueceu-se da sua palavra-passe antiga?</translation> <translation id="7503191893372251637">Tipo de certificado Netscape</translation> <translation id="7503821294401948377">Não foi possível carregar o ícone "<ph name="ICON" />" para a acção do navegador.</translation> @@ -4426,6 +4454,7 @@ <translation id="756445078718366910">Abrir janela do navegador</translation> <translation id="7564847347806291057">Concluir processo</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Dados do Chrome limpos</translation> <translation id="7568790562536448087">A atualizar</translation> <translation id="7573172247376861652">Carga da bateria</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4555,6 +4584,7 @@ <translation id="7786207843293321886">Sair da Sessão de Convidado</translation> <translation id="7786889348652477777">&Recarregar aplicação</translation> <translation id="7787129790495067395">Atualmente, está a utilizar uma frase de acesso. Se se tiver esquecido da sua frase de acesso, pode repor a sincronização para limpar os dados dos servidores da Google utilizando o Painel de controlo do Google.</translation> +<translation id="7787308148023287649">Apresentar noutro ecrã</translation> <translation id="7788080748068240085">Para guardar "<ph name="FILE_NAME" />" offline, tem de libertar mais <ph name="TOTAL_FILE_SIZE" /> de espaço:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />solte os ficheiros aos quais já não precisa de aceder offline<ph name="MARKUP_3" /> <ph name="MARKUP_4" />elimine ficheiros da pasta Transferências<ph name="MARKUP_5" /></translation> @@ -4623,6 +4653,7 @@ <translation id="7878999881405658917">O Google enviou uma notificação para este telemóvel. Tenha em atenção que com a tecnologia Bluetooth, o telemóvel pode manter o <ph name="DEVICE_TYPE" /> desbloqueado a partir de uma distância superior a 30 metros. Nos casos em que tal possa representar um problema, é possível <a>desativar temporariamente esta funcionalidade</a>.</translation> <translation id="7879478708475862060">Seguir método de introdução</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" adiciona as seguintes aplicações e extensões:</translation> +<translation id="7881969471599061635">Desativar legendas</translation> <translation id="7884988936047469945">Funcionalidades de acessibilidade experimentais</translation> <translation id="7885253890047913815">Destinos recentes</translation> <translation id="7885283703487484916">muito curto</translation> @@ -4986,6 +5017,7 @@ <translation id="839736845446313156">Registar-se</translation> <translation id="8398790343843005537">Localizar o seu telemóvel</translation> <translation id="8398877366907290961">Prosseguir</translation> +<translation id="8399276228600040370">Inicie sessão com a conta guardada com o <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Caixa de verificação desmarcada</translation> <translation id="8408402540408758445">Resultados da pesquisa com registo prévio</translation> <translation id="8410073653152358832">Utilizar este telemóvel</translation> @@ -5072,6 +5104,7 @@ <translation id="8545211332741562162">Permitir que as páginas Web utilizem as funcionalidades de JavaScript experimentais.</translation> <translation id="8545575359873600875">Lamentamos, mas não foi possível confirmar a sua palavra-passe. O gestor deste utilizador supervisionado pode ter alterado a palavra-passe recentemente. Se for o caso, a nova palavra-passe será aplicada na próxima vez que iniciar sessão. Experimente utilizar a palavra-passe antiga.</translation> <translation id="8546306075665861288">Cache de imagem</translation> +<translation id="854653344619327455">Quando este sinalizador está ativado, a janela do selecionador da partilha do ambiente de trabalho não permite que o utilizador escolha se pretende partilhar o áudio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Caráter</translation> <translation id="855081842937141170">Fixar separador</translation> @@ -5102,6 +5135,7 @@ <translation id="8589311641140863898">APIs de extensões experimentais</translation> <translation id="8590375307970699841">Configurar actualizações automáticas</translation> <translation id="8592071947729879125">Restringir autorizações de iframe.</translation> +<translation id="8592125506633137593">Isolamento do documento principal</translation> <translation id="8594787581355215556">Sessão iniciada como <ph name="USER_EMAIL_ADDRESS" />. Faça a gestão dos seus dados sincronizados no <ph name="BEGIN_LINK" />Painel de controlo do Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Ficheiros personalizados</translation> <translation id="8596785155158796745">O microfone está atualmente indisponível. <ph name="BEGIN_LINK" />Gerir o microfone<ph name="END_LINK" /></translation> @@ -5174,6 +5208,7 @@ <translation id="8688579245973331962">Não vê o seu nome?</translation> <translation id="8688644143607459122">Ao clicar em Continuar, aceita utilizar o Google Payments. Para o proteger de fraudes, são partilhadas informações sobre o seu computador (incluindo a respetiva localização) com o Google Payments.</translation> <translation id="8689102680909215706">A extensão "<ph name="EXTENSION_NAME" />" foi instalada remotamente.</translation> +<translation id="868926756781121513">Partilha do ambiente de trabalho com origem de separador</translation> <translation id="8689341121182997459">Expira:</translation> <translation id="8690754533598178758">As exceções de microfone do Adobe Flash Player são diferentes.</translation> <translation id="8691686986795184760">(Ativado pela política da empresa)</translation> @@ -5217,6 +5252,7 @@ <translation id="8737685506611670901">Abrir links de <ph name="PROTOCOL" /> em vez de <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Refinar a posição de um gesto de toque para compensar os toques de fraca resolução em comparação com os de um rato.</translation> +<translation id="8741995161408053644">A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Mostrar opções de introdução expandidas na prateleira.</translation> <translation id="874420130893181774">Método de introdução pinyin tradicional</translation> <translation id="8744525654891896746">Selecionar um avatar para este utilizador supervisionado</translation> @@ -5230,6 +5266,7 @@ <translation id="8757640015637159332">Entrar numa sessão pública</translation> <translation id="8757742102600829832">Selecionar um Chromebox ao qual ligar</translation> <translation id="8757803915342932642">Dispositivo nos dispositivos do Google Cloud</translation> +<translation id="8758895886513993540">Este sinalizador controla se os utilizadores podem selecionar um separador para a partilha do ambiente de trabalho.</translation> <translation id="8759408218731716181">Não é possível configurar o início de sessão integrado</translation> <translation id="8759753423332885148">Saiba mais.</translation> <translation id="8761567432415473239">A Navegação Segura do Google <ph name="BEGIN_LINK" />encontrou programas prejudiciais<ph name="END_LINK" /> recentemente em <ph name="SITE" />.</translation> @@ -5440,6 +5477,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Rato USB ligado</translation> <translation id="9076523132036239772">Não foi possível confirmar o seu email ou a sua palavra-passe. Tente ligar primeiro a uma rede.</translation> +<translation id="9077132661879924646">Desativa o pipeline multimédia unificado no Android.</translation> <translation id="907841381057066561">Falha ao criar ficheiro zip temporário durante o empacotamento.</translation> <translation id="9083147368019416919">Falha ao anular a inscrição</translation> <translation id="9084064520949870008">Abrir como Janela</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index a8ccb1e..f606a76 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Selectează o regiune pătrată a imaginii.</translation> <translation id="1697532407822776718">Ești gata!</translation> +<translation id="1697988819212986149">Afișează o pictogramă Google lângă elementele din meniul contextual oferite de serviciile Google.</translation> <translation id="1699274548822076330">Se folosește în combinație cu semnalizatorul trace-upload-url. AVERTISMENT: când este activat, Chrome va înregistra datele privind performanța pentru fiecare navigare și va încărca înregistrarea la o adresă URL specificată de semnalizatorul trace-upload-url. Este posibil ca urmărirea execuției să includă informații de identificare personală (IIP), cum ar fi numele și adresele URL ale site-urilor pe care le accesezi.</translation> <translation id="1699395855685456105">Versiune hardware:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Actualizează expresia de acces pentru sincronizare.</translation> <translation id="1788636309517085411">Utilizează setările prestabilite</translation> <translation id="1789575671122666129">Ferestre de tip pop-up</translation> -<translation id="1790550373387225389">Intră în modul de prezentare</translation> <translation id="1792705092719258158">Activează modul cu ecran oglindit.</translation> <translation id="1793119619663054394">Sigur dorești să elimini „<ph name="PROFILE_NAME" />” și toate datele Chrome asociate de pe acest computer? Această acțiune nu poate fi anulată.</translation> <translation id="179767530217573436">ultimele 4 săptămâni</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Modificați setările specifice dispozitivului și perifericelor dvs.</translation> <translation id="2673135533890720193">Citește istoricul de navigare</translation> <translation id="2673589024369449924">Creați o comandă rapidă pe desktop pentru acest utilizator</translation> +<translation id="2675358154061544447">Compatibilitate foarte experimentală pentru redarea de cadre iframe între site-uri în procese separate. În acest mod, documentele vor folosi același proces de redare numai dacă provin de pe același site.</translation> <translation id="2676946222714718093">Se redă pe</translation> <translation id="2678063897982469759">Reactivează</translation> <translation id="2678246812096664977">Toate pluginurile</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">Cum gestionează managerul de parole completarea automată în cazul datelor de conectare pentru sincronizare.</translation> <translation id="29611076221683977">Atacatorii de pe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> pot încerca să instaleze programe periculoase pe computerul dvs. Mac, care să vă fure sau să vă șteargă informațiile (de exemplu, fotografiile, parolele, mesajele sau informațiile despre cardurile de credit).</translation> <translation id="2961695502793809356">Dă clic pentru a naviga înainte, ține apăsat pentru a vedea istoricul</translation> +<translation id="296216853343927883">Marca Google în meniul contextual</translation> <translation id="2963151496262057773">Următorul plugin este inactiv: <ph name="PLUGIN_NAME" />. Dorești să îl oprești?</translation> <translation id="2963783323012015985">Tastatură turcă</translation> <translation id="2964193600955408481">Dezactivați Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Dă clic dreapta pe butonul de mai sus pentru a vedea alte persoane.</translation> <translation id="3026050830483105579">Totul este aici.</translation> <translation id="302620147503052030">Afișează butonul</translation> +<translation id="302781076327338683">Reîncarcă ignorând memoria cache</translation> +<translation id="3030243755303701754">Un utilizator monitorizat poate naviga pe web sub îndrumarea ta. În calitate de administrator al unui utilizator monitorizat în Chrome, poți: + + • să permiți sau să restricționezi accesul la anumite site-uri; + • să examinezi site-urile accesate de utilizatorul monitorizat; + • să gestionezi alte setări. + +Prin crearea unui utilizator monitorizat, nu se creează un Cont Google, iar marcajele, istoricul de navigare și alte preferințe nu vor fi preluate pe alte dispozitive cu Sincronizarea Chrome. După ce creezi un nou utilizator monitorizat, poți gestiona setările acestuia oricând și de pe orice dispozitiv, de la <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Pentru mai multe informații, accesează <ph name="BEGIN_LINK" />Centrul de ajutor<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agenta X</translation> <translation id="3031557471081358569">Selectează elementele de importat:</translation> <translation id="3033332627063280038">Activează implementarea experimentală a directivei Cache-Control: stale-while-revalidate. Aceasta permite serverelor să specifice faptul că unele resurse pot fi revalidate în fundal, pentru îmbunătățirea latenței.</translation> @@ -1648,7 +1660,6 @@ <translation id="3324301154597925148">Aceasta este pagina de căutare la care vă așteptați?</translation> <translation id="3324684065575061611">(Dezactivat de politica întreprinderii)</translation> <translation id="3326821416087822643">Se arhivează <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Ieșiți din modul de prezentare</translation> <translation id="3330686263988132416">Antetul Origin pentru WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Activează modul cu ecran oglindit. Acest mod rotește pe orizontală imaginea ecranului.</translation> @@ -1693,6 +1704,7 @@ <translation id="3392020134425442298">Recuperați fișierul rău-intenționat</translation> <translation id="3394150261239285340"><ph name="HOST" /> dorește să utilizeze camera foto și microfonul.</translation> <translation id="3394279550557729862">Activează compatibilitatea pentru folosirea notificărilor native și a centrului de notificări pe platformele unde acestea sunt disponibile.</translation> +<translation id="3394862755749546286">Dezactivează canalul media unificat (Android sau desktop) pe Android.</translation> <translation id="3396331542604645348">Imprimanta selectată nu este disponibilă sau nu este instalată corect. Verificați imprimanta sau încercați să selectați altă imprimantă.</translation> <translation id="3399597614303179694">Tastatură macedoneană</translation> <translation id="3401130144947259741">Dacă este activat, evenimentele de urmărire vor fi exportate în Urmărirea evenimentelor Windows (ETW) și pot fi apoi capturate de instrumente cum ar fi UIForETW sau Xperf.</translation> @@ -1903,7 +1915,6 @@ <translation id="367645871420407123">nu completa dacă dorești să setezi parola directorului rădăcină la valoarea prestabilită a imaginii de test</translation> <translation id="3678156199662914018">Extensie: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Tastatură malteză</translation> -<translation id="3680173818488851340">Cadre iframe cu prioritate redusă.</translation> <translation id="3683524264665795342">Solicitare de accesare a ecranului pentru aplicația <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Sincronizarea cu Google Drive este dezactivată în mod prestabilit la folosirea datelor mobile.</translation> <translation id="3685387984467886507">Reține deciziile de procesare a erorilor SSL pentru un interval de timp specificat.</translation> @@ -1952,6 +1963,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> va apărea în Consola de administrare</translation> <translation id="3741243925913727067">Fă backup pentru fotografiile și videoclipurile de pe dispozitivul media pe Google Drive.</translation> <translation id="3743492083222969745">Activează/Dezactivează opțiunea de tastare gestuală din pagina de setări pentru tastatura virtuală.</translation> +<translation id="3744111561329211289">Sincronizare în fundal</translation> <translation id="3749289110408117711">Nume de fișier</translation> <translation id="3751427701788899101">S-a pierdut conexiunea</translation> <translation id="3751522270321808809">Este posibil ca acest site să te înșele pentru a-ți fura informațiile (de exemplu, parolele, mesajele sau informațiile despre cardurile de credit).</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">Conectați-vă la alt cont</translation> <translation id="4219614746733932747">Dacă este activat, Blink folosește propriul mecanism de zoom pentru a redimensiona conținutul la factorul de redimensionare de pe dispozitiv.</translation> <translation id="4220865787605972627">Permite calibrarea culorii pentru afișaj dacă afișajul acceptă această funcție.</translation> +<translation id="4232692576734035989">Mod de performanță foarte experimental prin care cadrele iframe între site-uri sunt păstrate într-un proces separat de documentul din partea de sus. În acest mod, cadrele iframe de pe diferite site-uri terță parte vor avea permisiunea să folosească același proces.</translation> <translation id="4235200303672858594">Întregul ecran</translation> <translation id="4235813040357936597">Adăugați un cont pentru <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> nu poate fi afișat în această limbă</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">Renunțați la fotografie</translation> <translation id="4509345063551561634">Locație:</translation> <translation id="4514542542275172126">Configurați un utilizator monitorizat nou</translation> +<translation id="4514914692061505365">Forțează folosirea instrumentului de traducere rapidă Subzero din PNaCl pentru toate fișierele pexe.</translation> <translation id="4518677423782794009">Chrome se blochează, afișează pagini de pornire neobișnuite, bare de instrumente sau anunțuri neașteptate pe care nu le poți închide sau îți modifică experiența de navigare în altă manieră? Poți încerca să remediezi problema folosind Chrome Cleanup Tool.</translation> <translation id="452039078290142656">dispozitive necunoscute de la <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Detalii</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">Aplicațiile și extensiile pot fi modificate numai de administrator (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Convertor EMF</translation> <translation id="4602466770786743961">Permiteți întotdeauna accesul <ph name="HOST" /> la camera și microfonul dvs.</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Nu te-ai conectat la internet</translation> <translation id="4608500690299898628">&Caută...</translation> <translation id="4610637590575890427">Ai vrut să accesezi <ph name="SITE" />?</translation> @@ -2785,6 +2800,7 @@ <translation id="5062930723426326933">Conectarea nu a reușit, conectați-vă la internet și încercați din nou.</translation> <translation id="5063180925553000800">Cod PIN nou:</translation> <translation id="5067867186035333991">Întreabă dacă <ph name="HOST" /> solicită acces la microfon</translation> +<translation id="5068918910148307423">Nu permite site-urilor închise recent să finalizeze trimiterea sau primirea datelor</translation> <translation id="507075806566596212">Vei înregistra acest dispozitiv <ph name="DEVICE_TYPE" /> la Google pentru a activa funcțiile de localizare, ștergere a datelor și blocare la distanță a dispozitivului. Pentru aceasta, trebuie să îl repornești. Dorești să continui?</translation> <translation id="5072836811783999860">Vezi marcajele gestionate</translation> <translation id="5074318175948309511">Este posibil să fie necesară reîncărcarea acestei pagini înainte ca noile setări să se aplice.</translation> @@ -2894,6 +2910,7 @@ <translation id="5227808808023563348">Găsește textul anterior</translation> <translation id="5228076606934445476">A apărut o problemă legată de dispozitiv. Pentru recuperarea în urma acestei erori, reporniți dispozitivul și încercați din nou.</translation> <translation id="5228962187251412618">Numai verificare online</translation> +<translation id="5229622432348746578">Dezactivează conținutul audio pentru permiterea accesului la desktop</translation> <translation id="5230516054153933099">Fereastră</translation> <translation id="5232178406098309195">Când folosești comenzi de activare audio, cum ar fi „Ok Google” sau atingi pictograma microfon, Activitatea privată vocală și audio stochează vocea ta și alt conținut audio în contul tău. Se va stoca înregistrarea conținutului vocal/audio care urmează, plus câteva secunde de dinainte.</translation> <translation id="523299859570409035">Excepții privind notificările</translation> @@ -3148,6 +3165,7 @@ <translation id="5557991081552967863">Menține Wi-Fi activat în modul inactiv</translation> <translation id="5558129378926964177">Măr&ește</translation> <translation id="556042886152191864">Buton</translation> +<translation id="5562781907504170924">Această filă este conectată la un dispozitiv Bluetooth.</translation> <translation id="5565871407246142825">Carduri de credit</translation> <translation id="5567989639534621706">Memoriile cache ale aplicației</translation> <translation id="5568069709869097550">Nu se poate conecta</translation> @@ -3307,6 +3325,7 @@ <translation id="5803531701633845775">Alege expresii din fundal, fără să miști cursorul</translation> <translation id="5804241973901381774">Permisiuni</translation> <translation id="580571955903695899">Reordonați după titlu</translation> +<translation id="5808982448801399019">Autorizarea nu a reușit</translation> <translation id="580961539202306967">Notifică-mă dacă un site dorește să trimită mesaje push (recomandat)</translation> <translation id="5815645614496570556">Adresă X.400</translation> <translation id="5817397429773072584">Chineză tradițională</translation> @@ -3576,6 +3595,7 @@ <translation id="6243774244933267674">Server indisponibil</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Actualizarea este pregătită</translation> +<translation id="6248400709929739064">Activează subtitrările</translation> <translation id="6248988683584659830">Setări de căutare</translation> <translation id="6251870443722440887">Handle-uri GDI</translation> <translation id="6251889282623539337">Termenii și condițiile <ph name="DOMAIN" /></translation> @@ -3600,6 +3620,7 @@ <translation id="6277105963844135994">Conectarea la rețea a expirat</translation> <translation id="6277518330158259200">F&aceți o captură de ecran</translation> <translation id="6279183038361895380">Apasă pe |<ph name="ACCELERATOR" />| pentru a fi afișat cursorul</translation> +<translation id="6280215091796946657">Conectează-te cu alt cont</translation> <translation id="6281743458679673853">Un experiment prin care toate API-urile reflectă spațiul vizibil înconjurător. Astfel, proprietățile de derulare a ferestrei vor fi definite în raport cu spațiul vizibil înconjurător.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Imprimantă nouă în rețea}few{Imprimante noi în rețea}other{Imprimante noi în rețea}}</translation> <translation id="6285395082104474418">Bara de stare vă arată starea actuală a rețelei, a bateriei și alte informații.</translation> @@ -3681,6 +3702,9 @@ <translation id="6418160186546245112">Se revine la versiunea <ph name="IDS_SHORT_PRODUCT_NAME" /> instalată anterior</translation> <translation id="6418481728190846787">Eliminați definitiv accesul tuturor aplicațiilor</translation> <translation id="6418505248408153264">Activează istoricul designului material</translation> +<translation id="6419288379019356534">Acest dispozitiv este gestionat de <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Dă clic pe „Înainte” pentru a continua conectarea la contul <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Europa Centrală</translation> <translation id="6420676428473580225">Adaugă pe desktop</translation> <translation id="6422329785618833949">Fotografia a fost răsturnată</translation> @@ -3841,7 +3865,6 @@ <translation id="6662016084451426657">Eroare de sincronizare: contactați administratorul pentru a activa sincronizarea.</translation> <translation id="6663792236418322902">Parola pe care o alegi va fi solicitată ulterior pentru a restabili fișierul. Noteaz-o într-un loc sigur.</translation> <translation id="6664237456442406323">Din păcate, computerul dvs. este configurat cu un ID de hardware incorect. Acest lucru împiedică actualizarea sistemului de operare Chrome cu cele mai recente remedieri de securitate. În plus, computerul <ph name="BEGIN_BOLD" />ar putea fi vulnerabil la atacuri ale site-urilor web rău intenționate<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Reduce prioritatea la încărcare a resurselor iframe.</translation> <translation id="6666647326143344290">folosind Contul Google</translation> <translation id="6675665718701918026">Dispozitivul de indicat este conectat</translation> <translation id="6677037229676347494">ID-ul așteptat era „<ph name="EXPECTED_ID" />”, dar ID-ul a fost „<ph name="NEW_ID" />”.</translation> @@ -3934,6 +3957,7 @@ <translation id="6825883775269213504">Rusă</translation> <translation id="6827236167376090743">Videoclipul va fi redat în continuu.</translation> <translation id="6828153365543658583">Restricționează conectarea la următorii utilizatori:</translation> +<translation id="6828434191343384461">Datele selectate au fost eliminate din Chrome și de pe dispozitivele sincronizate. Contul Google poate să ofere alte forme ale istoricului de navigare, cum ar fi căutările și activitatea din alte servicii Google, la <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Actualizările automate nu au putut fi configurate pentru toți utilizatorii (eroare la executarea testării pe dispozitiv: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Primește ajutor în privința <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Înscrie-te în organizație</translation> @@ -4014,6 +4038,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Dispozitiv</translation> +<translation id="6969104364835835175">Forțează Subzero din PNaCl</translation> <translation id="6970230597523682626">Bulgară</translation> <translation id="6970480684834282392">Tip de pornire</translation> <translation id="6970856801391541997">Printează anumite pagini</translation> @@ -4096,10 +4121,12 @@ <translation id="7057058088140140610">Carduri de credit și adrese folosind Google Payments</translation> <translation id="7059858479264779982">Setați pentru lansare automată</translation> <translation id="7061692898138851896">Salvează automat parolele</translation> +<translation id="7062222374113411376">Permite site-urilor închise recent să finalizeze trimiterea sau primirea datelor (recomandat)</translation> <translation id="7063129466199351735">Se procesează comenzile rapide...</translation> <translation id="7065223852455347715">Acest dispozitiv este blocat într-un mod care împiedică înregistrarea în sistemul companiei. Dacă dorești să înregistrezi dispozitivul, trebuie să parcurgi mai întâi procesul de recuperare a dispozitivului.</translation> <translation id="7065534935986314333">Despre sistem</translation> <translation id="7066944511817949584">Conectarea la „<ph name="DEVICE_NAME" />” a eșuat.</translation> +<translation id="7067725467529581407">Nu mai afișa niciodată acest mesaj.</translation> <translation id="7070804685954057874">Introducere directă de text</translation> <translation id="7072010813301522126">Numele comenzii rapide</translation> <translation id="7072025625456903686">Permite tot sau personalizează</translation> @@ -4372,6 +4399,7 @@ <translation id="7489605380874780575">Verificați eligibilitatea</translation> <translation id="749028671485790643">Persoana <ph name="VALUE" /></translation> <translation id="7491962110804786152">filă</translation> +<translation id="7493386493263658176">Extensia <ph name="EXTENSION_NAME" /> poate să culeagă integral textul introdus, inclusiv datele cu caracter personal, cum ar fi parolele și numerele cardurilor de credit. Dorești să folosești această extensie?</translation> <translation id="7495778526395737099">Ai uitat parola anterioară?</translation> <translation id="7503191893372251637">Tip de certificat Netscape</translation> <translation id="7503821294401948377">Nu se poate încărca pictograma „<ph name="ICON" />” pentru acțiunea browserului.</translation> @@ -4423,6 +4451,7 @@ <translation id="756445078718366910">Deschide fereastra de browser</translation> <translation id="7564847347806291057">Oprește procesul</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Datele Chrome au fost șterse</translation> <translation id="7568790562536448087">Se actualizează</translation> <translation id="7573172247376861652">Încărcarea bateriei</translation> <translation id="7576032389798113292">6x4</translation> @@ -4552,6 +4581,7 @@ <translation id="7786207843293321886">Ieșiți din sesiunea pentru invitați</translation> <translation id="7786889348652477777">&Reîncarcă aplicația</translation> <translation id="7787129790495067395">În prezent utilizează o expresie de acces. Dacă ai uitat-o, poți reseta sincronizarea pentru a șterge datele de pe serverele Google utilizând Tabloul de bord Google.</translation> +<translation id="7787308148023287649">Afișează pe alt ecran</translation> <translation id="7788080748068240085">Pentru a salva fișierul „<ph name="FILE_NAME" />” offline, trebuie să eliberați un spațiu suplimentar de <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />anulați fixarea fișierelor de care nu mai aveți nevoie offline;<ph name="MARKUP_3" /> <ph name="MARKUP_4" />ștergeți fișierele din dosarul Descărcări.<ph name="MARKUP_5" /></translation> @@ -4620,6 +4650,7 @@ <translation id="7878999881405658917">Google a trimis o notificare către acest telefon. Reține că utilizând funcția Bluetooth, telefonul poate menține <ph name="DEVICE_TYPE" /> deblocat de la o distanță de peste 30 de metri. În cazul în care acest lucru poate fi o problemă, poți <a>dezactiva temporar această funcție</a>.</translation> <translation id="7879478708475862060">Urmați modul de introducere</translation> <translation id="7880836220014399562">„<ph name="BUNDLE_NAME" />” adaugă aceste aplicații și extensii:</translation> +<translation id="7881969471599061635">Dezactivează subtitrările</translation> <translation id="7884988936047469945">Funcții experimentale de accesibilitate</translation> <translation id="7885253890047913815">Destinații recente</translation> <translation id="7885283703487484916">foarte scurtă</translation> @@ -4983,6 +5014,7 @@ <translation id="839736845446313156">Înregistrează</translation> <translation id="8398790343843005537">Găsește telefonul</translation> <translation id="8398877366907290961">Continuă oricum</translation> +<translation id="8399276228600040370">Conectează-te folosind contul salvat cu <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Casetă de selectare nebifată</translation> <translation id="8408402540408758445">Preluare în avans rezultate de căutare</translation> <translation id="8410073653152358832">Folosește acest telefon</translation> @@ -5069,6 +5101,7 @@ <translation id="8545211332741562162">Activați utilizarea funcțiilor JavaScript experimentale în paginile web.</translation> <translation id="8545575359873600875">Ne pare rău, parola nu a putut fi confirmată. Poate că managerul acestui utilizator monitorizat a schimbat recent parola. Dacă acesta este cazul, noua parolă se va aplica data viitoare când vă conectați. Încercați să folosiți parola veche.</translation> <translation id="8546306075665861288">Memorie cache de imagini</translation> +<translation id="854653344619327455">Dacă acest marcaj este activat, din fereastra cu selectorul pentru permiterea accesului la desktop, utilizatorul nu poate alege să permită accesul la conținutul audio.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Caracter</translation> <translation id="855081842937141170">Fixează fila</translation> @@ -5099,6 +5132,7 @@ <translation id="8589311641140863898">API-uri ale extensiilor experimentale</translation> <translation id="8590375307970699841">Configurează actualizările automate</translation> <translation id="8592071947729879125">Restricționează permisiunile iframe.</translation> +<translation id="8592125506633137593">Izolarea documentului din partea de sus</translation> <translation id="8594787581355215556">Sunteți conectat(ă) ca <ph name="USER_EMAIL_ADDRESS" />. Gestionați datele dvs. sincronizate în <ph name="BEGIN_LINK" />Tabloul de bord Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Fișiere personalizate</translation> <translation id="8596785155158796745">În prezent, microfonul nu este disponibil. <ph name="BEGIN_LINK" />Gestionează microfonul<ph name="END_LINK" /></translation> @@ -5171,6 +5205,7 @@ <translation id="8688579245973331962">Numele dvs. nu apare?</translation> <translation id="8688644143607459122">Dând clic pe Continuă, ești de acord să folosești Google Payments. Pentru a te proteja împotriva fraudei, Google Payments va avea acces la informații despre computer (inclusiv la locația acestuia).</translation> <translation id="8689102680909215706">Extensia „<ph name="EXTENSION_NAME" />” a fost instalată la distanță.</translation> +<translation id="868926756781121513">Permiterea accesului la desktop cu sursa filei</translation> <translation id="8689341121182997459">Expiră în:</translation> <translation id="8690754533598178758">Excepțiile Adobe Flash Player pentru microfon sunt diferite.</translation> <translation id="8691686986795184760">(Activat de politica întreprinderii)</translation> @@ -5214,6 +5249,7 @@ <translation id="8737685506611670901">Deschide linkurile <ph name="PROTOCOL" /> și nu <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Rafinează poziția unui gest de atingere pentru a compensa rezoluția slabă a atingerilor, în comparație cu un mouse.</translation> +<translation id="8741995161408053644">Contul Google poate să ofere alte forme ale istoricului de navigare la <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Afișează pe raft opțiunile extinse de introducere a textului.</translation> <translation id="874420130893181774">Metoda de introducere a textului Pinyin pentru chineză tradițională</translation> <translation id="8744525654891896746">Selectați un avatar pentru utilizatorul monitorizat</translation> @@ -5227,6 +5263,7 @@ <translation id="8757640015637159332">Accesați sesiunea publică</translation> <translation id="8757742102600829832">Alege un Chromebox la care să te conectezi</translation> <translation id="8757803915342932642">Dispozitiv pe Google Cloud Devices</translation> +<translation id="8758895886513993540">Acest marcaj controlează dacă utilizatorii pot să aleagă o filă pentru permiterea accesului la desktop.</translation> <translation id="8759408218731716181">Nu se poate configura conectarea multiplă</translation> <translation id="8759753423332885148">Aflați mai multe.</translation> <translation id="8761567432415473239">Recent, Navigarea sigură Google a <ph name="BEGIN_LINK" />descoperit programe dăunătoare<ph name="END_LINK" /> pe <ph name="SITE" />.</translation> @@ -5437,6 +5474,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Mouse USB conectat</translation> <translation id="9076523132036239772">Din păcate, adresa de e-mail sau parola nu a putut fi verificată. Încearcă să te conectezi mai întâi la o rețea.</translation> +<translation id="9077132661879924646">Dezactivează canalul media unificat pe Android.</translation> <translation id="907841381057066561">Crearea fișierului zip temporar în timpul împachetării nu a reușit.</translation> <translation id="9083147368019416919">Nu s-a putut anula înscrierea</translation> <translation id="9084064520949870008">Deschideți ca fereastră</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 80f7df4..30268a55 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -563,7 +563,6 @@ <translation id="1783075131180517613">Обновите кодовую фразу для синхронизации.</translation> <translation id="1788636309517085411">Использовать по умолчанию</translation> <translation id="1789575671122666129">Всплывающие окна</translation> -<translation id="1790550373387225389">Войти в режим презентации</translation> <translation id="1792705092719258158">Включить зеркальное отображение</translation> <translation id="1793119619663054394">Удалить профиль "<ph name="PROFILE_NAME" />" и все связанные с ним данные Chrome с этого компьютера? Это действие нельзя отменить.</translation> <translation id="179767530217573436">за последние 4 недели</translation> @@ -1663,7 +1662,6 @@ <translation id="3324301154597925148">Другая поисковая система?</translation> <translation id="3324684065575061611">(Запрещено корпоративной политикой)</translation> <translation id="3326821416087822643">Файл "<ph name="FILE_NAME" />" архивируется…</translation> -<translation id="3330206034087160972">Выйти из режима презентации</translation> <translation id="3330686263988132416">Исходный заголовок STUN WebRTC</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Включает режим зеркального отображения, переворачивающий изображение на экране по горизонтали.</translation> @@ -1919,7 +1917,6 @@ <translation id="367645871420407123">оставьте пустым, чтобы установить значение тестового изображения по умолчанию в качестве пароля суперпользователя</translation> <translation id="3678156199662914018">Расширение: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Мальтийская раскладка</translation> -<translation id="3680173818488851340">Низкий приоритет ресурсов iframe</translation> <translation id="3683524264665795342">Запрос доступа к экрану от <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Синхронизация Google Диска по мобильной сети отключена по умолчанию.</translation> <translation id="3685387984467886507">Запомнить решение для использования при ошибках протокола SSL в течение указанного времени.</translation> @@ -3871,7 +3868,6 @@ <translation id="6662016084451426657">Ошибка. Попросите администратора включить синхронизацию.</translation> <translation id="6663792236418322902">Выбранный пароль будет необходим для последующего восстановления этого файла. Сохраните его в безопасном месте.</translation> <translation id="6664237456442406323">К сожалению, в настройках компьютера указан недействительный аппаратный код. Chrome OS не сможет устанавливать обновления для системы безопасности, и ваш компьютер <ph name="BEGIN_BOLD" />может подвергаться атакам вредоносных сайтов<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Уменьшить приоритет загрузки для ресурсов iframe.</translation> <translation id="6666647326143344290">Введите данные своего аккаунта Google</translation> <translation id="6675665718701918026">Подключено дополнительное устройство</translation> <translation id="6677037229676347494">Ожидаемый идентификатор: "<ph name="EXPECTED_ID" />", полученный идентификатор: "<ph name="NEW_ID" />".</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 7b8314f..f1a567b 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Vyberte štvorcovú oblasť obrázka.</translation> <translation id="1697532407822776718">Všetko je nastavené!</translation> +<translation id="1697988819212986149">Umožňuje zobraziť ikonu Google vedľa položiek kontextovej ponuky používajúcu technológiu služieb Google.</translation> <translation id="1699274548822076330">Tento príznak je určený na použitie v spojení s príznakom trace-upload-url. UPOZORNENIE: Keď ho povolíte, Chrome bude zaznamenávať údaje o výkonnosti každej navigácie a nahrá ich na webovú adresu určenú príznakom trace-upload-url. Sledovací záznam môže zahrnovať informácie umožňujúce identifikáciu osôb, ako sú názvy a webové adresy stránok, ktoré navštívite.</translation> <translation id="1699395855685456105">Revízia hardvéru:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Aktualizujte prístupovú frázu na synchronizáciu.</translation> <translation id="1788636309517085411">Použiť predvolenú pozíciu</translation> <translation id="1789575671122666129">Kontextové okná</translation> -<translation id="1790550373387225389">Spustiť režim Prezentácia</translation> <translation id="1792705092719258158">Zapnúť režim zrkadlenia obrazovky.</translation> <translation id="1793119619663054394">Naozaj chcete z tohto počítača odstrániť profil <ph name="PROFILE_NAME" /> a všetky priradené údaje prehliadača Chrome? Túto akciu nie je možné vrátiť späť.</translation> <translation id="179767530217573436">posledné 4 týždne</translation> @@ -1156,6 +1156,7 @@ <translation id="267285457822962309">Zmení nastavenia špecifické pre vaše zariadenie a periférne zariadenia.</translation> <translation id="2673135533890720193">Čítať históriu prehliadania</translation> <translation id="2673589024369449924">Vytvoriť pre tohto používateľa odkaz na pracovnej ploche</translation> +<translation id="2675358154061544447">Vysoko experimentálna podpora pre vykreslenie prvkov iframe na viacerých stránkach v samostatných procesoch. V tomto režime budú dokumenty zdieľať proces vykresľovania iba vtedy, keď pochádzajú z rovnakého webu.</translation> <translation id="2676946222714718093">Prehráva sa na zariadení</translation> <translation id="2678063897982469759">Znova povoliť</translation> <translation id="2678246812096664977">Všetky doplnky</translation> @@ -1382,6 +1383,7 @@ <translation id="2960393411257968125">Ako bude nástroj na správu hesiel narábať s automatickým dopĺňaním v prípade poverení synchronizácie.</translation> <translation id="29611076221683977">Útočníci, ktorý sa momentálne nachádzajú na stránkach <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, sa môžu pokúsiť nainštalovať nebezpečné programy na váš počítač Mac, ktoré ukradnú alebo odstránia vaše informácie (napríklad fotky, heslá, správy alebo kreditné karty).</translation> <translation id="2961695502793809356">Kliknutím prejdete dopredu. Pri dlhšom stlačení sa zobrazí história.</translation> +<translation id="296216853343927883">Obchodné značky Google v kontextovej ponuke</translation> <translation id="2963151496262057773">Nasledujúci doplnok prestal reagovať: <ph name="PLUGIN_NAME" />. Chcete ho zastaviť?</translation> <translation id="2963783323012015985">turecká klávesnica</translation> <translation id="2964193600955408481">Zakázať sieť Wi-Fi</translation> @@ -1431,6 +1433,16 @@ <translation id="3025729795978504041">Ďalších ľudí si zobrazíte kliknutím na tlačidlo vyššie.</translation> <translation id="3026050830483105579">Nájdete tu všetko.</translation> <translation id="302620147503052030">Zobraziť tlačidlo</translation> +<translation id="302781076327338683">Znova načítať vyrovnávaciu pamäť na obídenie</translation> +<translation id="3030243755303701754">Kontrolovaný používateľ môže preskúmavať web pod vaším dohľadom. Ako správca kontrolovaného používateľa v Chrome môžete: + + • povoliť alebo zakázať konkrétne weby; + • kontrolovať weby, ktoré kontrolovaný používateľ navštívil; a + • spravovať ďalšie nastavenia. + +Pri vytvorení kontrolovaného používateľa sa nevytvorí účet Google a jeho záložky, história prehliadania ani ďalšie predvoľby sa neprenesú na ďalšie zariadenia pomocou Synchronizácie Chrome. Po vytvorení nového kontrolovaného používateľa môžete kedykoľvek spravovať nastavenia z akéhokoľvek zariadenia na adrese <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Ďalšie informácie nájdete v našom <ph name="BEGIN_LINK" />centre pomoci<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Vyberte položky na import:</translation> <translation id="3033332627063280038">Povoľte experimentálnu implementáciu funkcie Cache-Control: smernica typu stale-while-revalidate. Umožňuje serverom určiť, ktoré zdroje môžu byť opätovne overené na pozadí s cieľom zlepšiť latenciu.</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">Je toto stránka vyhľadávania, ktorú ste čakali?</translation> <translation id="3324684065575061611">(Zakázané podnikovými pravidlami)</translation> <translation id="3326821416087822643">Prebieha komprimovanie súboru <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Ukončiť režim Prezentácia</translation> <translation id="3330686263988132416">Hlavička pôvodu pre WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Aktivovať režim zrkadlovej obrazovky. Tento režim vodorovne zrkadlovo obráti obsah obrazovky.</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">Obnoviť škodlivý súbor</translation> <translation id="3394150261239285340">Stránka <ph name="HOST" /> chce použiť váš fotoaparát a mikrofón.</translation> <translation id="3394279550557729862">Povolenie podpory pre používanie správ natívnych upozornení a centra upozornení na plaftformách, kde sú k dispozícii.</translation> +<translation id="3394862755749546286">Zakáže jednotný (Android aj stolné počítače) tok médií v systéme Android.</translation> <translation id="3396331542604645348">Vybratá tlačiareň nie je k dispozícii alebo nie je správne nainštalovaná. Skontrolujte ju alebo vyberte inú.</translation> <translation id="3399597614303179694">Macedónska klávesnica</translation> <translation id="3401130144947259741">Ak je toto nastavenie povolené, udalosti sledovania budú exportované do služby ETW (sledovanie udalostí pre systém Windows) a môžu byť zaznamenané nástrojom, ako je UIForETW alebo Xperf.</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">Ak chcete heslo používateľa typu root nastaviť na predvolenú hodnotu testovacieho obrazu, ponechajte toto pole prázdne.</translation> <translation id="3678156199662914018">Rozšírenie: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltézska klávesnica</translation> -<translation id="3680173818488851340">Prvky iframe s nízkou prioritou</translation> <translation id="3683524264665795342">Žiadosť o zdieľanie obrazovky s aplikáciou <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Synchronizácia Disku Google je pri používaní mobilných dát v predvolenom nastavení zakázaná.</translation> <translation id="3685387984467886507">Zapamätať rozhodnutia pokračovať stanovený časový úsek napriek chybám SSL.</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859">Zariadenie <ph name="DEVICE_NAME" /> sa teraz zobrazí v Správcovskej konzole</translation> <translation id="3741243925913727067">Zálohujte si fotky a videá z mediálneho zariadenia na Disk Google.</translation> <translation id="3743492083222969745">Povoľte alebo zakážte možnosť písania gestami pre virtuálnu klávesnicu na stránke Nastavenia.</translation> +<translation id="3744111561329211289">Synchronizácia na pozadí</translation> <translation id="3749289110408117711">Názov súboru</translation> <translation id="3751427701788899101">Pripojenie bolo prerušené</translation> <translation id="3751522270321808809">Tieto stránky sa vás môžu pokúsiť oklamať a ukradnúť vaše údaje (napríklad heslá, správy alebo kreditné karty).</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">Prihlásiť sa do iného účtu</translation> <translation id="4219614746733932747">Ak ho povolíte, Blink použije mechanizmus priblíženia na zväčšenie obsahu pre škálovací faktor zariadenia.</translation> <translation id="4220865787605972627">Povolí kalibráciu farieb obrazovky v prípade, že obrazovka túto funkciu podporuje.</translation> +<translation id="4232692576734035989">Vysoko experimentálny výkonnostný režim, v ktorom sú prvky iframe na viacerých stránkach uchovávané v samostatnom procese oddelenom od hlavného dokumentu. V tomto režime budú mať prvky iframe z webových stránok iných tretích strán povolené zdieľať procesy.</translation> <translation id="4235200303672858594">Celá obrazovka</translation> <translation id="4235813040357936597">Pridať účet k profilu <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Aplikáciu <ph name="PRODUCT_NAME" /> nie je možné zobraziť v tomto jazyku</translation> @@ -2436,6 +2449,7 @@ <translation id="4509017836361568632">Zahodiť fotografiu</translation> <translation id="4509345063551561634">Umiestnenie:</translation> <translation id="4514542542275172126">Nastavenie nového kontrolovaného používateľa</translation> +<translation id="4514914692061505365">Vynútiť používanie rýchleho prekladača Subzero využívajúceho technológiu PNaCl v prípade všetkých súborov pexe.</translation> <translation id="4518677423782794009">Dochádza k zlyhaniam prehliadača Chrome, zobrazujú sa pri spustení nezvyčajné stránky, panely s nástrojmi, prípadne neočakávané reklamy, ktorých sa nemôžete zbaviť alebo ktoré iným spôsobom ovplyvňujú vaše prehliadanie? Tento problém môžete vyriešiť spustením nástroja Chrome Cleanup Tool.</translation> <translation id="452039078290142656">neznáme zariadenia od dodávateľa <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Podrobnosti</translation> @@ -2484,6 +2498,7 @@ <translation id="4595560905247879544">Aplikácie a rozšírenia môže upraviť iba správca (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF Convertor</translation> <translation id="4602466770786743961">Vždy povoliť stránkam <ph name="HOST" /> prístup ku kamere a mikrofónu</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Pripojenie na Internet nie je k dispozícii</translation> <translation id="4608500690299898628">&Nájsť...</translation> <translation id="4610637590575890427">Chceli ste prejsť na adresu <ph name="SITE" />?</translation> @@ -2787,6 +2802,7 @@ <translation id="5062930723426326933">Prihlásenie zlyhalo. Pripojte sa k internetu a skúste to znova.</translation> <translation id="5063180925553000800">Nový kód PIN:</translation> <translation id="5067867186035333991">Opýtať sa, ak chcú stránky <ph name="HOST" /> pristupovať k mikrofónu</translation> +<translation id="5068918910148307423">Nepovoliť nedávno zatvoreným stránkam dokončiť posielanie a prijímanie údajov</translation> <translation id="507075806566596212">Chystáte sa zaregistrovať toto zariadenie <ph name="DEVICE_TYPE" /> do Googlu, čím umožníte vzdialenú lokalizáciu, vymazanie a uzamknutie zariadenia. Táto akcia vyžaduje reštart. Chcete pokračovať?</translation> <translation id="5072836811783999860">Zobraziť spravované záložky</translation> <translation id="5074318175948309511">Na to, aby toto nové nastavenie nadobudlo platnosť, budete možno musieť znova načítať túto stránku.</translation> @@ -2896,6 +2912,7 @@ <translation id="5227808808023563348">Nájsť predchádzajúci text</translation> <translation id="5228076606934445476">V zariadení sa vyskytol problém. Ak chcete opraviť túto chybu, musíte zariadenie reštartovať a skúsiť to znova.</translation> <translation id="5228962187251412618">Iba online kontrola</translation> +<translation id="5229622432348746578">Zakázať zdieľanie zvuku medzi počítačmi</translation> <translation id="5230516054153933099">Okno</translation> <translation id="5232178406098309195">Keď použijete zvukové aktivačné príkazy, ako je „Ok Google“, alebo klepnete na ikonu mikrofónu, vaša súkromná Hlasová a zvuková aktivita uloží do vášho účtu časť vášho hlasu a ďalšej zvukovej aktivity. Uloží sa záznam nasledujúcej reči alebo zvuku a niekoľko sekúnd predtým.</translation> <translation id="523299859570409035">Výnimky upozornení</translation> @@ -3150,6 +3167,7 @@ <translation id="5557991081552967863">Počas spánku ponechať zapnutú sieť Wi-Fi</translation> <translation id="5558129378926964177">Priblíž&iť</translation> <translation id="556042886152191864">Tlačidlo</translation> +<translation id="5562781907504170924">Táto karta je prepojená so zariadením Bluetooth.</translation> <translation id="5565871407246142825">Kreditné karty</translation> <translation id="5567989639534621706">Vyrovnávacie pamäte aplikácií</translation> <translation id="5568069709869097550">Nedá sa prihlásiť</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">Vybrať frázy zozadu bez pohnutia kurzorom</translation> <translation id="5804241973901381774">Povolenia</translation> <translation id="580571955903695899">Zoradiť podľa názvu</translation> +<translation id="5808982448801399019">Autorizácia zlyhala</translation> <translation id="580961539202306967">Opýtať sa, keď mi budú chcieť stránky posielať správy push (odporúčané)</translation> <translation id="5815645614496570556">Adresa X.400</translation> <translation id="5817397429773072584">tradičná čínština</translation> @@ -3580,6 +3599,7 @@ <translation id="6243774244933267674">Server je nedostupný</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Aktualizácia je pripravená</translation> +<translation id="6248400709929739064">Povoliť titulky</translation> <translation id="6248988683584659830">Nastavenia vyhľadávania</translation> <translation id="6251870443722440887">GDI – popisovače</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> – Zmluvné podmienky</translation> @@ -3604,6 +3624,7 @@ <translation id="6277105963844135994">Časový limit siete</translation> <translation id="6277518330158259200">&Vytvoriť snímku obrazovky</translation> <translation id="6279183038361895380">Stlačením klávesa |<ph name="ACCELERATOR" />| zobrazíte kurzor</translation> +<translation id="6280215091796946657">Prihlásiť sa pomocou iného účtu</translation> <translation id="6281743458679673853">Experiment, v ktorom všetky rozhrania API budú odzrkadlovať oblasť zobrazenia rozloženia. Vlastnosti window.scroll sa tak stanú relatívnymi k oblasti zobrazenia rozloženia.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nová tlačiareň v sieti}few{Nové tlačiarne v sieti}many{Nové tlačiarne v sieti}other{Nové tlačiarne v sieti}}</translation> <translation id="6285395082104474418">Na stavovom paneli je zobrazený aktuálny stav siete, batérie a ďalších položiek.</translation> @@ -3685,6 +3706,9 @@ <translation id="6418160186546245112">Prebieha vrátenie späť na predchádzajúcu nainštalovanú verziu produktu <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Natrvalo odstrániť prístup pre všetky aplikácie</translation> <translation id="6418505248408153264">Povoliť vzhľad Material Design pre stránku histórie</translation> +<translation id="6419288379019356534">Toto zariadenie je spravované doménou <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Ak sa chcete prihlásiť do účtu <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, kliknite na tlačidlo Ďalej.</translation> <translation id="6419902127459849040">Stredoeurópske</translation> <translation id="6420676428473580225">Pridať na plochu</translation> <translation id="6422329785618833949">Fotka bola zrkadlovo obrátená</translation> @@ -3845,7 +3869,6 @@ <translation id="6662016084451426657">Chyba synchronizácie: Kontaktujte správcu a požiadajte ho o povolenie synchronizácie.</translation> <translation id="6663792236418322902">Zvolené heslo budete neskôr potrebovať na obnovenie tohto súboru. Zapíšte si ho na bezpečné miesto.</translation> <translation id="6664237456442406323">Váš počítač je žiaľ nakonfigurovaný pomocou poškodeného ID hardvéru. Systému Chrome OS to zabraňuje získať aktualizácie s najnovšími opravami zabezpečenia a váš počítač <ph name="BEGIN_BOLD" />môže byť zraniteľný voči škodlivým útokom<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Zníži priority načítania zdrojov prvkov iframe.</translation> <translation id="6666647326143344290">pomocou účtu Google</translation> <translation id="6675665718701918026">Bolo pripojené ukazovacie zariadenie</translation> <translation id="6677037229676347494">Očakávané ID bolo „<ph name="EXPECTED_ID" />“. Skutočné ID bolo „<ph name="NEW_ID" />“.</translation> @@ -3938,6 +3961,7 @@ <translation id="6825883775269213504">Ruština</translation> <translation id="6827236167376090743">Toto video sa bude prehrávať počas neurčitej doby.</translation> <translation id="6828153365543658583">Obmedziť prihlásenie na nasledujúcich používateľov:</translation> +<translation id="6828434191343384461">Vybraté údaje boli odstránené z Chromu a synchronizovaných zariadení. Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />, ako napríklad vyhľadávania a aktivity v iných službách Google.</translation> <translation id="6828860976882136098">Nepodarilo sa nastaviť automatické aktualizácie pre všetkých používateľov (chyba pri vykonávaní predbežnej kontroly: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Získajte pomoc so zariadením <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registrácia vo vašej organizácii</translation> @@ -4018,6 +4042,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Zariadenie</translation> +<translation id="6969104364835835175">Vynútenie prekladača PNaCl Subzero</translation> <translation id="6970230597523682626">Bulharčina</translation> <translation id="6970480684834282392">Typ spustenia</translation> <translation id="6970856801391541997">Vytlačiť konkrétne stránky</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Kreditné karty a adresy pomocou služby Google Payments</translation> <translation id="7059858479264779982">Nastaviť na automatické spúšťanie</translation> <translation id="7061692898138851896">Automatické ukladanie hesiel</translation> +<translation id="7062222374113411376">Povoliť nedávno zatvoreným stránkam dokončiť posielanie a prijímanie údajov (odporúča sa)</translation> <translation id="7063129466199351735">Prebieha spracovanie odkazov...</translation> <translation id="7065223852455347715">Toto zariadenie je uzamknuté v režime, ktorý zabraňuje firemnej registrácii. Ak chcete zariadenie zaregistrovať, musíte ho najskôr obnoviť.</translation> <translation id="7065534935986314333">O systéme</translation> <translation id="7066944511817949584">Nepodarilo sa pripojiť k zariadeniu „<ph name="DEVICE_NAME" />“.</translation> +<translation id="7067725467529581407">Túto výzvu už nezobrazovať</translation> <translation id="7070804685954057874">Priamy vstup</translation> <translation id="7072010813301522126">Názov skratky</translation> <translation id="7072025625456903686">Povoliť všetky alebo prispôsobiť</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">Skontrolovať spôsobilosť</translation> <translation id="749028671485790643">Osoba <ph name="VALUE" /></translation> <translation id="7491962110804786152">karta</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> môže zhromažďovať všetok text, ktorý zadáte, vrátane osobných údajov, ako sú heslá a čísla kreditných kariet. Chcete použiť toto rozšírenie?</translation> <translation id="7495778526395737099">Zabudli ste svoje staré heslo?</translation> <translation id="7503191893372251637">Netscape – typ certifikátu </translation> <translation id="7503821294401948377">Nepodarilo sa načítať ikonu „<ph name="ICON" />“ akcie prehliadača.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">Otvoriť okno prehliadača</translation> <translation id="7564847347806291057">Ukončiť proces</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Údaje Chromu boli vymazané</translation> <translation id="7568790562536448087">Prebieha aktualizácia</translation> <translation id="7573172247376861652">Nabíjanie batérie</translation> <translation id="7576032389798113292">6x4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">Ukončiť reláciu hosťa</translation> <translation id="7786889348652477777">&Znova načítať aplikáciu</translation> <translation id="7787129790495067395">Momentálne používate prístupovú frázu. Ak ste svoju prístupovú frázu zabudli, môžete pomocou Informačného panela Google obnoviť synchronizáciu a odstrániť tak svoje údaje zo serverov Google.</translation> +<translation id="7787308148023287649">Zobraziť na inej obrazovke</translation> <translation id="7788080748068240085">Ak chcete súbor <ph name="FILE_NAME" /> uložiť v režime offline, musíte uvoľniť ďalšie miesto (celkovo <ph name="TOTAL_FILE_SIZE" />). Postupujte takto: <ph name="MARKUP_1" /> <ph name="MARKUP_2" />zrušte pripnutie súborov, ku ktorým už nepotrebujete pristupovať v režime offline,<ph name="MARKUP_3" /> <ph name="MARKUP_4" />odstráňte súbory z priečinka Stiahnuté súbory.<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google odoslal na tento telefón upozornenie. Vďaka pripojeniu Bluetooth dokáže váš telefón ponechať zariadenie <ph name="DEVICE_TYPE" /> odomknuté až do vzdialenosti 10 metrov. V nevhodných prípadoch môžete <a>túto funkciu dočasne zakázať</a>.</translation> <translation id="7879478708475862060">Nasledovať režim vstupu</translation> <translation id="7880836220014399562">Balík <ph name="BUNDLE_NAME" /> pridá tieto aplikácie a rozšírenia:</translation> +<translation id="7881969471599061635">Zakázať titulky</translation> <translation id="7884988936047469945">Experimentálne funkcie dostupnosti</translation> <translation id="7885253890047913815">Nedávne ciele</translation> <translation id="7885283703487484916">veľmi krátke</translation> @@ -4990,6 +5021,7 @@ <translation id="839736845446313156">Registrovať sa</translation> <translation id="8398790343843005537">Nájsť telefón</translation> <translation id="8398877366907290961">Pokračovať!</translation> +<translation id="8399276228600040370">Prihlásenie pomocou účtu uloženého správcom <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Nezačiarknuté začiarkavacie políčko</translation> <translation id="8408402540408758445">Predbežne načítavať výsledky vyhľadávania</translation> <translation id="8410073653152358832">Použiť tento telefón</translation> @@ -5076,6 +5108,7 @@ <translation id="8545211332741562162">Povolí webovým stránkam používať experimentálne funkcie jazyka JavaScript.</translation> <translation id="8545575359873600875">Je nám to ľúto, ale vaše heslo sa nepodarilo overiť. Dané heslo mohol nedávno zmeniť správca tohto spravovaného používateľa. Ak sa tak stalo, nové heslo sa použije pri najbližšom prihlásení. Skúste použiť svoje staré heslo.</translation> <translation id="8546306075665861288">Vyrovnávacia pamäť obrázkov</translation> +<translation id="854653344619327455">Keď je tento príznak zapnutý, okno s výberom zdieľania pracovnej plochy neumožní používateľovi zvoliť, či sa má zdieľať zvuk.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Znak</translation> <translation id="855081842937141170">Pripnúť kartu</translation> @@ -5106,6 +5139,7 @@ <translation id="8589311641140863898">Experimentálne rozhrania API rozšírení</translation> <translation id="8590375307970699841">Nastaviť automatické aktualizácie</translation> <translation id="8592071947729879125">Obmedziť povolenia prvku iframe</translation> +<translation id="8592125506633137593">Izolácia hlavného dokumentu</translation> <translation id="8594787581355215556">Prihlásený/-á ako používateľ <ph name="USER_EMAIL_ADDRESS" />. Synchronizované údaje môžete spravovať pomocou služby <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Vlastné súbory</translation> <translation id="8596785155158796745">Mikrofón nie je momentálne k dispozícii. <ph name="BEGIN_LINK" />Spravovať mikrofón<ph name="END_LINK" /></translation> @@ -5178,6 +5212,7 @@ <translation id="8688579245973331962">Nezobrazuje sa vaše meno?</translation> <translation id="8688644143607459122">Kliknutím na tlačidlo Pokračovať vyjadrujete súhlas s používaním služby Google Payments. Z dôvodu ochrany pred podvodmi sa budú so službou Google Payments zdieľať informácie o vašom počítači (vrátane jeho polohy).</translation> <translation id="8689102680909215706">Rozšírenie <ph name="EXTENSION_NAME" /> bolo nainštalované vzdialene</translation> +<translation id="868926756781121513">Zdieľanie zdroja karty medzi počítačmi</translation> <translation id="8689341121182997459">Koniec platnosti:</translation> <translation id="8690754533598178758">Výnimky pre mikrofón v prehrávači Adobe Flash Player sú odlišné.</translation> <translation id="8691686986795184760">(Povolené pravidlami pre podniky)</translation> @@ -5221,6 +5256,7 @@ <translation id="8737685506611670901">Otvárať odkazy protokolu <ph name="PROTOCOL" /> a nie aplikáciu <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Spresnenie pozície dotykového gesta s cieľom kompenzácie nižšej kvality rozlíšenia dotyku v porovnaní s myšou.</translation> +<translation id="8741995161408053644">Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Zobraziť rozšírené možnosti vstupu na poličke.</translation> <translation id="874420130893181774">Metóda vstupu tradičnej Pchin-jin</translation> <translation id="8744525654891896746">Vyberte avatar pre tohto kontrolovaného používateľa</translation> @@ -5234,6 +5270,7 @@ <translation id="8757640015637159332">Vstúpiť do verejnej relácie</translation> <translation id="8757742102600829832">Výber zariadenia Chromebox, ku ktorému sa chcete pripojiť</translation> <translation id="8757803915342932642">Zariadenia Google Cloud – zariadenie</translation> +<translation id="8758895886513993540">Tento príznak umožňuje ovládať, či používatelia môžu vyberať karty na zdieľanie medzi počítačmi.</translation> <translation id="8759408218731716181">Nie je možné nastaviť viacnásobné prihlásenie</translation> <translation id="8759753423332885148">Prečítajte si viac informácií.</translation> <translation id="8761567432415473239">Bezpečné prehliadanie Google nedávno <ph name="BEGIN_LINK" />zistilo škodlivé programy<ph name="END_LINK" /> na webe <ph name="SITE" />.</translation> @@ -5444,6 +5481,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Myš s konektorom USB bola pripojená</translation> <translation id="9076523132036239772">Je nám ľúto, e-mailovú adresu alebo heslo sa nepodarilo overiť. Skúste sa najprv pripojiť k sieti.</translation> +<translation id="9077132661879924646">Zakázať jednotný tok médií v systéme Android</translation> <translation id="907841381057066561">Vytvorenie dočasného súboru zip počas balenia zlyhalo.</translation> <translation id="9083147368019416919">Registráciu sa nepodarilo zrušiť</translation> <translation id="9084064520949870008">Otvoriť ako okno</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 6f07423..cfc9dea 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Izberite kvadratno polje na sliki.</translation> <translation id="1697532407822776718">Pripravljeni ste.</translation> +<translation id="1697988819212986149">Prikaže Googlovo ikono zraven elementov v kontekstnih menijih, ki uporabljajo Googlove storitve.</translation> <translation id="1699274548822076330">To se mora uporabljati skupaj z zastavico trace-upload-url. OPOZORILO: če je omogočeno, bo Chrome beležil podatke o učinkovitosti delovanja za vsako krmarjenje in jih naložil na URL, ki je določen v zastavici trace-upload-url. Podatki morda vključujejo podatke, ki omogočajo osebno prepoznavo, na primer naslove in URL-je spletnih mest, ki jih obiščete.</translation> <translation id="1699395855685456105">Različica strojne opreme:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">Posodobite geslo za sinhronizacijo.</translation> <translation id="1788636309517085411">Uporabi privzeto</translation> <translation id="1789575671122666129">Pojavna okna</translation> -<translation id="1790550373387225389">Preklop v način Presentation Mode</translation> <translation id="1792705092719258158">Omogočanje načina zrcaljenega zaslona.</translation> <translation id="1793119619663054394">Ali ste prepričani, da želite iz tega računalnika izbrisati profil »<ph name="PROFILE_NAME" />« in vse povezane podatke v Chromu? Dejanja ni mogoče razveljaviti.</translation> <translation id="179767530217573436">v zadnjih 4 tednih</translation> @@ -1156,6 +1156,7 @@ <translation id="267285457822962309">Spremenite nastavitve naprave in zunanjih naprav.</translation> <translation id="2673135533890720193">Branje zgodovine brskanja</translation> <translation id="2673589024369449924">Na namizju ustvari bližnjico za tega uporabnika</translation> +<translation id="2675358154061544447">Strogo poskusna podpora za upodabljanje elementov iframe na več spletnih mestih v ločenih procesih. Dokumenti bodo v tem načinu souporabljali postopek upodabljalnika, samo če so z istega spletnega mesta.</translation> <translation id="2676946222714718093">Predvajanje v:</translation> <translation id="2678063897982469759">Znova omogoči</translation> <translation id="2678246812096664977">Vsi vtičniki</translation> @@ -1382,6 +1383,7 @@ <translation id="2960393411257968125">Kako upravitelj gesel obravnava samodejno izpolnjevanje poverilnice za sinhronizacijo.</translation> <translation id="29611076221683977">Napadalci, ki so trenutno na spletnem mestu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, lahko poskusijo v vašem računalniku Mac namestiti nevarne programe, ki kradejo ali brišejo podatke (na primer fotografije, gesla, sporočila in podatke kreditnih kartic).</translation> <translation id="2961695502793809356">Kliknite, če želite nadaljevati, za ogled zgodovine pa zadržite</translation> +<translation id="296216853343927883">Blagovna znamka Google v kontekstnem meniju</translation> <translation id="2963151496262057773">Ta vtičnik se ne odziva: <ph name="PLUGIN_NAME" />. Ali ga želite ustaviti?</translation> <translation id="2963783323012015985">Turška tipkovnica</translation> <translation id="2964193600955408481">Onemogoči Wi-Fi</translation> @@ -1431,6 +1433,16 @@ <translation id="3025729795978504041">Z desno tipko miške kliknite zgornji gumb, če želite prikazati druge osebe.</translation> <translation id="3026050830483105579">Vse je tukaj.</translation> <translation id="302620147503052030">Prikaži gumb</translation> +<translation id="302781076327338683">Vnovično nalaganje obide predpomnilnik</translation> +<translation id="3030243755303701754">Zaščiteni uporabnik lahko prek vašega vodenja raziskuje splet. Kot upravitelj zaščitenega uporabnika v Chromu imate te možnosti: + + • omogočanje ali prepoved dostopa do nekaterih spletnih mest, + • pregled spletnih mest, ki jih je obiskal zaščiteni uporabnik, in + • upravljanje drugih nastavitev. + +Z ustvarjanjem zaščitenega uporabnika ne ustvarite Google Računa, njegovi zaznamki, zgodovina brskanja in druge nastavitve pa ne bodo sinhronizirani z drugimi napravami prek funkcije Chrome Sync. Ko ustvarite novega zaščitenega uporabnika, lahko na <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> kadar koli in v poljubni napravi upravljate njegove nastavitve. + +Če želite več informacij, obiščite naš <ph name="BEGIN_LINK" />center za pomoč<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Izberite elemente, ki jih želite uvoziti:</translation> <translation id="3033332627063280038">Omogoči poskusno izvedbo direktive »Cache-Control: stale-while-revalidate«. To strežnikom omogoča določanje, da se lahko nekatera sredstva znova preverijo v ozadju in s tem zmanjšajo zamude.</translation> @@ -1651,7 +1663,6 @@ <translation id="3324301154597925148">Ali je to iskalna stran, ki ste jo pričakovali?</translation> <translation id="3324684065575061611">(Vtičnik je onemogočil pravilnik podjetja)</translation> <translation id="3326821416087822643">Stiskanje datoteke <ph name="FILE_NAME" /> ...</translation> -<translation id="3330206034087160972">Izhod iz načina Presentation Mode</translation> <translation id="3330686263988132416">Glava izvora za WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Omogočanje načina zrcaljenega zaslona. Ta način sliko na zaslonu prezrcali vodoravno.</translation> @@ -1696,6 +1707,7 @@ <translation id="3392020134425442298">Obnovi zlonamerno datoteko</translation> <translation id="3394150261239285340"><ph name="HOST" /> želi uporabiti kamero in mikrofon.</translation> <translation id="3394279550557729862">Omogočanje podpore za uporabo izvornih obvestil in središča za obvestila v okoljih, v katerih so na voljo.</translation> +<translation id="3394862755749546286">Onemogoči enotno komponento (Android in namizni računalniki) za predstavnost v Androidu.</translation> <translation id="3396331542604645348">Izbrani tiskalnik ni na voljo ali ni pravilno nameščen. Preverite tiskalnik ali izberite drugega.</translation> <translation id="3399597614303179694">Makedonska tipkovnica</translation> <translation id="3401130144947259741">Če je zastavica omogočena, so dogodki sledenja izvoženi v ETW (Event Tracing for Windows) in jih je mogoče zajeti z orodji, kot je UIForETW ali Xperf.</translation> @@ -1906,7 +1918,6 @@ <translation id="367645871420407123">pustite prazno, če želite korensko geslo nastaviti na privzeto vrednost preskusne slike</translation> <translation id="3678156199662914018">Razširitev: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Malteška tipkovnica</translation> -<translation id="3680173818488851340">Elementi iframe z nizko stopnjo prednosti.</translation> <translation id="3683524264665795342">Zahteva za skupno rabo zaslona aplikacije <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Sinhronizacija z Googlom Drive je ob uporabi prenosa podatkov v mobilnih omrežjih privzeto onemogočena.</translation> <translation id="3685387984467886507">Zapomni si odločitve za nadaljevanje kljub napakam SSL za določen čas.</translation> @@ -1955,6 +1966,7 @@ <translation id="3741158646617793859">Naprava <ph name="DEVICE_NAME" /> bo zdaj vidna v skrbniški konzoli</translation> <translation id="3741243925913727067">Varnostno kopiranje fotografij in videoposnetkov iz predstavnostne naprave v Google Drive.</translation> <translation id="3743492083222969745">Omogoči/onemogoči možnost pisanja s kretnjami v strani z nastavitvami navidezne tipkovnice.</translation> +<translation id="3744111561329211289">Sinhroniziranje v ozadju</translation> <translation id="3749289110408117711">Ime datoteke</translation> <translation id="3751427701788899101">Povezava je bila prekinjena</translation> <translation id="3751522270321808809">To spletno mesto vam lahko z zavajanjem poskuša ukrasti podatke (na primer gesla, sporočila ali podatke o kreditnih karticah).</translation> @@ -2272,6 +2284,7 @@ <translation id="4218259925454408822">Prijava z drugim računom</translation> <translation id="4219614746733932747">Če je omogočeno, Blink uporablja mehanizem za povečavo/pomanjšavo za spreminjanje velikosti vsebine kot faktor spreminjanja velikosti za napravo.</translation> <translation id="4220865787605972627">Omogočanje umerjanje barv zaslona, če zaslon to funkcijo podpira.</translation> +<translation id="4232692576734035989">Strogo poskusni način učinkovitosti delovanja, v katerem so elementi iframe na več spletnih mestih v procesu, ki je ločen od krovnega dokumenta. Elementi iframe z različnih spletnih mest bodo v tem načinu lahko souporabljali isti proces.</translation> <translation id="4235200303672858594">Celoten zaslon</translation> <translation id="4235813040357936597">Dodaj račun za <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Vmesnika <ph name="PRODUCT_NAME" /> ni mogoče prikazati v tem jeziku</translation> @@ -2437,6 +2450,7 @@ <translation id="4509017836361568632">Zavrzi fotografijo</translation> <translation id="4509345063551561634">Lokacija</translation> <translation id="4514542542275172126">Nastavi novega zaščitenega uporabnika</translation> +<translation id="4514914692061505365">Vsili uporabo PNaCl-jevega hitrega prevajalnika Subzero za vse datoteke pexe.</translation> <translation id="4518677423782794009">Ali se Chrome pogosto zruši, prikazuje nenavadne začetne strani ali orodne vrstice, nepričakovane oglase, ki jih ne morete odstraniti, ali kako drugače spreminja brskanje? Težavo boste morda lahko odpravili z Chromovim orodjem za čiščenje.</translation> <translation id="452039078290142656">neznane naprave prodajalca <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Podrobnosti</translation> @@ -2485,6 +2499,7 @@ <translation id="4595560905247879544">Aplikacije in razširitve lahko spreminja samo skrbnik (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Pretvornik v datoteke EMF</translation> <translation id="4602466770786743961">Vedno omogoči gostitelju <ph name="HOST" /> dostop do kamere in mikrofona</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Internetna povezava ni vzpostavljena</translation> <translation id="4608500690299898628">&Iskanje ...</translation> <translation id="4610637590575890427">Ali ste nameravali obiskati <ph name="SITE" />?</translation> @@ -2789,6 +2804,7 @@ <translation id="5062930723426326933">Prijava ni uspela. Povežite se v internet in poskusite znova.</translation> <translation id="5063180925553000800">Novi PIN:</translation> <translation id="5067867186035333991">Vprašaj, ali <ph name="HOST" /> zahteva dostop do mikrofona</translation> +<translation id="5068918910148307423">Nedavno zaprtim spletnim mestom ne dovoli dokončanje pošiljanja in prejemanja podatkov</translation> <translation id="507075806566596212">Ste pred tem, da to napravo <ph name="DEVICE_TYPE" /> včlanite pri Googlu in s tem omogočite oddaljeno iskanje naprave, izbris podatkov v njej in njeno zaklepanje. Potreben bo vnovični zagon. Ali želite nadaljevati?</translation> <translation id="5072836811783999860">Prikaz upravljanih zaznamkov</translation> <translation id="5074318175948309511">Nove nastavitve bodo morda začele veljati, šele ko znova naložite to stran.</translation> @@ -2898,6 +2914,7 @@ <translation id="5227808808023563348">Iskanje prejšnjega besedila</translation> <translation id="5228076606934445476">Z napravo je nekaj narobe. Napako poskušajte odpraviti tako, da napravo znova zaženete in poskusite še enkrat.</translation> <translation id="5228962187251412618">Samo spletno preverjanje</translation> +<translation id="5229622432348746578">Onemogočanje zvoka za skupno rabo namizja</translation> <translation id="5230516054153933099">Okno</translation> <translation id="5232178406098309195">Ko uporabljate glasovne ukaze za aktiviranje, kot je »Ok Google«, ali se dotaknete ikone mikrofona, vaša zasebna glasovna in zvočna dejavnost v račun shrani nekaj trenutkov glasu in drugih zvokov. Shrani se posnetek govora in zvoka, ki sledi, ter nekaj sekund pred tem.</translation> <translation id="523299859570409035">Izjeme za obvestila</translation> @@ -3152,6 +3169,7 @@ <translation id="5557991081552967863">Omogočanje Wi-Fi-ja v stanju pripravjenosti</translation> <translation id="5558129378926964177">Po&večaj</translation> <translation id="556042886152191864">Gumb</translation> +<translation id="5562781907504170924">Ta zavihek je povezan z napravo Bluetooth.</translation> <translation id="5565871407246142825">Kreditne kartice</translation> <translation id="5567989639534621706">Predpomnilniki aplikacij</translation> <translation id="5568069709869097550">Vpis ni mogoč</translation> @@ -3312,6 +3330,7 @@ <translation id="5803531701633845775">Izberite besedne zveze iz ozadja, ne da bi premikali kazalec</translation> <translation id="5804241973901381774">Dovoljenja</translation> <translation id="580571955903695899">Razvrsti po naslovu</translation> +<translation id="5808982448801399019">Avtorizacija ni uspela.</translation> <translation id="580961539202306967">Vprašaj me, ko mi želi spletno mesto poslati potisna sporočila (priporočeno)</translation> <translation id="5815645614496570556">Naslov X.400</translation> <translation id="5817397429773072584">tradicionalna kitajščina</translation> @@ -3583,6 +3602,7 @@ <translation id="6243774244933267674">Strežnik ni na voljo</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Posodobitev je pripravljena</translation> +<translation id="6248400709929739064">Omogoči podnapise</translation> <translation id="6248988683584659830">Iskanje nastavitev</translation> <translation id="6251870443722440887">Kode za dostop GDI</translation> <translation id="6251889282623539337">Pogoji storitve za <ph name="DOMAIN" /></translation> @@ -3607,6 +3627,7 @@ <translation id="6277105963844135994">Potek časovne omejitve omrežja</translation> <translation id="6277518330158259200">N&aredi posnetek zaslona</translation> <translation id="6279183038361895380">Pritisnite |<ph name="ACCELERATOR" />| za prikaz kazalca</translation> +<translation id="6280215091796946657">Prijava z drugim računom</translation> <translation id="6281743458679673853">Poskus, s katerim vsi API-ji odražajo vidno območje postavitve. Tako so lastnosti window.scroll povezane z vidnim območjem postavitve.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nov tiskalnik v vašem omrežju}one{Novi tiskalniki v vašem omrežju}two{Novi tiskalniki v vašem omrežju}few{Novi tiskalniki v vašem omrežju}other{Novi tiskalniki v vašem omrežju}}</translation> <translation id="6285395082104474418">V vrstici stanja je prikazano trenutno stanje omrežja, akumulatorja in drugo.</translation> @@ -3688,6 +3709,9 @@ <translation id="6418160186546245112">Poteka povrnitev prej nameščene različice izdelka <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> <translation id="6418481728190846787">Trajno odstrani dostop za vse aplikacije</translation> <translation id="6418505248408153264">Omogočanje zgodovine materialnega oblikovanja.</translation> +<translation id="6419288379019356534">To napravo upravlja domena <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Kliknite »Naprej«, če želite nadaljevati prijavo v račun za <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Srednjeevropsko</translation> <translation id="6420676428473580225">Dodajanje na namizje</translation> <translation id="6422329785618833949">Fotografija je zrcaljena</translation> @@ -3847,7 +3871,6 @@ <translation id="6662016084451426657">Napaka pri sinhronizaciji: Obrnite se na skrbnika, ki vam lahko omogoči sinhronizacijo.</translation> <translation id="6663792236418322902">Izbrano geslo boste pozneje potrebovali za obnovitev te datoteke. Zapišite ga na varno mesto.</translation> <translation id="6664237456442406323">Vaš računalnik je konfiguriran s popačenim ID-jem strojne opreme. Zaradi tega Chrome OS ne more namestiti najnovejših varnostnih popravkov in vaš računalnik <ph name="BEGIN_BOLD" />je lahko še bolj izpostavljen zlonamernim napadom<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Zmanjša stopnjo prednostnega nalaganja virov elementov iframe.</translation> <translation id="6666647326143344290">z Google Računom</translation> <translation id="6675665718701918026">Priključena je kazalna naprava</translation> <translation id="6677037229676347494">Pričakovani ID je »<ph name="EXPECTED_ID" />«, toda ID je bil »<ph name="NEW_ID" />«.</translation> @@ -3940,6 +3963,7 @@ <translation id="6825883775269213504">ruščina</translation> <translation id="6827236167376090743">Ta videoposnetek se bo neprekinjeno stalno predvajal.</translation> <translation id="6828153365543658583">Omeji prijavo na te uporabnike:</translation> +<translation id="6828434191343384461">Izbrani podatki so bili odstranjeni iz Chroma in sinhroniziranih naprav. V Google Računu so morda druge vrste zgodovine brskanja, kot so iskanja in dejavnosti iz drugih Googlovih storitev, na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Nastavitev samodejnih posodobitev za vse uporabnike ni uspela (napaka preverjanj pred izvajanjem: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Poiščite pomoč za napravo <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Včlanite se v svojo organizacijo</translation> @@ -4020,6 +4044,7 @@ <translation id="6965382102122355670">V redu</translation> <translation id="6965648386495488594">Vrata</translation> <translation id="6965978654500191972">Naprava</translation> +<translation id="6969104364835835175">Vsili PNaCl Subzero</translation> <translation id="6970230597523682626">bolgarščina</translation> <translation id="6970480684834282392">Vrsta zagona</translation> <translation id="6970856801391541997">Natisni določene strani</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Kreditne kartice in naslovi s storitvijo Google Payments</translation> <translation id="7059858479264779982">Nastavi za samodejni zagon</translation> <translation id="7061692898138851896">Samodejno shranjevanje gesel</translation> +<translation id="7062222374113411376">Nedavno zaprtim spletnim mestom dovoli dokončanje pošiljanja in prejemanja podatkov (priporočeno)</translation> <translation id="7063129466199351735">Obdelava bližnjic ...</translation> <translation id="7065223852455347715">Ta naprava je zaklenjena v načinu, ki onemogoča včlanitev v podjetje. Če želite napravo včlaniti, jo morate najprej obnoviti.</translation> <translation id="7065534935986314333">O sistemu</translation> <translation id="7066944511817949584">Ni bilo mogoče vzpostaviti povezave z napravo »<ph name="DEVICE_NAME" />«.</translation> +<translation id="7067725467529581407">Tega ne prikaži nikoli več</translation> <translation id="7070804685954057874">Neposredni vnos</translation> <translation id="7072010813301522126">Ime bližnjice</translation> <translation id="7072025625456903686">Omogočanje vsega ali prilagajanje</translation> @@ -4378,6 +4405,7 @@ <translation id="7489605380874780575">Preveri primernost</translation> <translation id="749028671485790643">Oseba <ph name="VALUE" /></translation> <translation id="7491962110804786152">tabulatorka</translation> +<translation id="7493386493263658176">Razširitev <ph name="EXTENSION_NAME" /> bo morda lahko beležila vse besedilo, ki ga vnesete, vključno z osebnimi podatki, kot so gesla in številke kreditnih kartic. Ali jo želite uporabiti?</translation> <translation id="7495778526395737099">Ste pozabili staro geslo?</translation> <translation id="7503191893372251637">Vrsta Netscapeovega potrdila</translation> <translation id="7503821294401948377">Ikone »<ph name="ICON" />« za dejanje brskalnika ni bilo mogoče naložiti.</translation> @@ -4429,6 +4457,7 @@ <translation id="756445078718366910">Odpri okno brskalnika</translation> <translation id="7564847347806291057">Končaj proces</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chromovi podatki so izbrisani.</translation> <translation id="7568790562536448087">Posodabljanje</translation> <translation id="7573172247376861652">Napolnjenost akumulatorja</translation> <translation id="7576032389798113292">6 x 4</translation> @@ -4558,6 +4587,7 @@ <translation id="7786207843293321886">Zapusti sejo gosta</translation> <translation id="7786889348652477777">&Znova naloži aplikacijo</translation> <translation id="7787129790495067395">Trenutno uporabljate geslo. Če ste ga pozabili, lahko na Googlovi nadzorni plošči ponastavite sinhronizacijo, da svoje podatke izbrišete iz Googlovih strežnikov.</translation> +<translation id="7787308148023287649">Prikaz na drugem zaslonu</translation> <translation id="7788080748068240085">Če želite datoteko »<ph name="FILE_NAME" />« shraniti brez povezave, morate sprostiti še toliko prostora: <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />odpnite datoteke, do kateri vam ni več treba dostopati brez povezave<ph name="MARKUP_3" /> <ph name="MARKUP_4" />izbrišite datoteke iz mape »Prenosi«<ph name="MARKUP_5" /></translation> @@ -4626,6 +4656,7 @@ <translation id="7878999881405658917">Google je v ta telefon poslal obvestilo. Upoštevajte, da lahko z Bluetoothom naprava <ph name="DEVICE_TYPE" /> ostane odklenjena, tudi če je telefon oddaljen več kot 30 metrov. Če je to lahko težava, lahko <a>to funkcijo začasno onemogočite</a>.</translation> <translation id="7879478708475862060">Upoštevaj način vnosa</translation> <translation id="7880836220014399562">»<ph name="BUNDLE_NAME" />« doda te aplikacije in razširitve</translation> +<translation id="7881969471599061635">Onemogočanje podnapisov</translation> <translation id="7884988936047469945">Poskusne funkcije za ljudi s posebnimi potrebami</translation> <translation id="7885253890047913815">Nedavni cilji</translation> <translation id="7885283703487484916">zelo kratka</translation> @@ -4990,6 +5021,7 @@ <translation id="839736845446313156">Registracija</translation> <translation id="8398790343843005537">Poiščite telefon</translation> <translation id="8398877366907290961">Vseeno nadaljuj</translation> +<translation id="8399276228600040370">Prijava z računom, shranjenim z izdelkom <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Počiščeno potrditveno polje</translation> <translation id="8408402540408758445">Vnaprejšnji prenos rezultatov iskanja</translation> <translation id="8410073653152358832">Uporabi ta telefon</translation> @@ -5077,6 +5109,7 @@ <translation id="8545211332741562162">Omogoči uporabo preskusnih funkcij JavaScripta na spletnih straneh.</translation> <translation id="8545575359873600875">Vašega gesla žal ni bilo mogoče preveriti. Upravitelj tega zaščitenega uporabnika je morda pred kratkim spremenil geslo. V tem primeru bo novo geslo uporabljeno ob naslednji prijavi. Poskusite uporabiti staro geslo.</translation> <translation id="8546306075665861288">Predpomnilnik slik</translation> +<translation id="854653344619327455">Če je ta zastavica omogočena, uporabnik v oknu z izbirnikom namizja ne bo mogel izbrati, ali želi dati v skupno rabo zvok.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Znakovna</translation> <translation id="855081842937141170">Pripni zavihek</translation> @@ -5107,6 +5140,7 @@ <translation id="8589311641140863898">Poskusni API-ji razširitev</translation> <translation id="8590375307970699841">Nastavitev samodejnih posodobitev</translation> <translation id="8592071947729879125">Omejevanje dovoljenj za elemente iframe.</translation> +<translation id="8592125506633137593">Ločevanje krovnega dokumenta</translation> <translation id="8594787581355215556">Prijavljeni ste kot <ph name="USER_EMAIL_ADDRESS" />. Sinhronizirane podatke lahko upravljate na <ph name="BEGIN_LINK" />Google Nadzorni plošči<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Datoteke po meri</translation> <translation id="8596785155158796745">Mikrofon trenutno ni na voljo. <ph name="BEGIN_LINK" />Upravljanje mikrofona<ph name="END_LINK" /></translation> @@ -5179,6 +5213,7 @@ <translation id="8688579245973331962">Ali ne vidite svojega imena?</translation> <translation id="8688644143607459122">Če kliknete »Nadaljuj«, se strinjate z uporabo storitve Google Payments. Ker vas želimo zaščititi pred poneverbami, bomo podatke o vašem računalniku (vključno z njegovo lokacijo) razkrili storitvi Google Payments.</translation> <translation id="8689102680909215706">Razširitev »<ph name="EXTENSION_NAME" />« je bila nameščena na daljavo.</translation> +<translation id="868926756781121513">Skupna raba namizja z virom zavihka</translation> <translation id="8689341121182997459">Velja do:</translation> <translation id="8690754533598178758">Izjeme za kamero za Adobe Flash Player so drugačne.</translation> <translation id="8691686986795184760">(Omogočeno s pravilnikom podjetja)</translation> @@ -5222,6 +5257,7 @@ <translation id="8737685506611670901">Odpiranje povezav za <ph name="PROTOCOL" /> namesto <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Podrobnejše določanje položaja poteze dotika za izboljšanje učinkovitosti dotikov s slabo ločljivostjo v primerjavi z miško.</translation> +<translation id="8741995161408053644">V Google Računu so morda druge vrste zgodovine brskanja na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Prikaz razširjenih možnosti vnosa na polici.</translation> <translation id="874420130893181774">Način vnosa tradicionalni pinjin</translation> <translation id="8744525654891896746">Izberite avatarja za tega zaščitenega uporabnika</translation> @@ -5235,6 +5271,7 @@ <translation id="8757640015637159332">Prijava v javno sejo</translation> <translation id="8757742102600829832">Izberite Chromebox, s katerim želite vzpostaviti povezavo</translation> <translation id="8757803915342932642">Naprava v Googlovih napravah v oblaku</translation> +<translation id="8758895886513993540">Ta zastavica določa, ali lahko uporabniki izberejo zavihek za skupno rabo namizja.</translation> <translation id="8759408218731716181">Prijave z več računi ni mogoče nastaviti</translation> <translation id="8759753423332885148">Več o tem</translation> <translation id="8761567432415473239">Googlova funkcija varnega brskanja je nedavno <ph name="BEGIN_LINK" />odkrila škodljive programe<ph name="END_LINK" /> na spletnem mestu <ph name="SITE" />.</translation> @@ -5445,6 +5482,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Miška USB je povezana</translation> <translation id="9076523132036239772">E-poštnega naslova ali gesla žal ni bilo mogoče preveriti. Poskusite se najprej povezati z omrežjem.</translation> +<translation id="9077132661879924646">Onemogoči enotno komponento za predstavnost v Androidu.</translation> <translation id="907841381057066561">Pri pripravi paketov ni bilo mogoče ustvariti začasne datoteke zip.</translation> <translation id="9083147368019416919">Preklic včlanitve ni uspel</translation> <translation id="9084064520949870008">Odpri v oknu</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 37bbff08..c9ee82e0 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Изаберите квадратну област слике.</translation> <translation id="1697532407822776718">Спремни сте!</translation> +<translation id="1697988819212986149">Приказује Google икону поред ставки контекстуалног менија који Google услуге омогућавају.</translation> <translation id="1699274548822076330">Ово обележје треба да користите у комбинацији са обележјем trace-upload-url. УПОЗОРЕЊЕ: Када омогућите ово обележје, Chrome ће бележити податке о учинку за сваку навигацију и отпремати их на URL који наводи обележје trace-upload-url. Траг може да обухвата информације које могу лично да идентификују (PII), попут наслова и URL-ова веб-сајтова које посећујете.</translation> <translation id="1699395855685456105">Ревизија хардвера:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">Ажурирај приступну фразу за синхронизацију</translation> <translation id="1788636309517085411">Користи подразумевано</translation> <translation id="1789575671122666129">Искачући прозори</translation> -<translation id="1790550373387225389">Enter Presentation Mode (Уђи у режим презентације)</translation> <translation id="1792705092719258158">Омогући режим пресликаног екрана.</translation> <translation id="1793119619663054394">Желите ли стварно да уклоните „<ph name="PROFILE_NAME" />“ и све повезане Chrome податке са овог рачунара? Ова радња не може да се опозове.</translation> <translation id="179767530217573436">последње 4 недеље</translation> @@ -1151,6 +1151,7 @@ <translation id="267285457822962309">Промените посебна подешавања за уређај и периферне уређаје.</translation> <translation id="2673135533890720193">Читање ваше историје прегледања</translation> <translation id="2673589024369449924">Направи пречицу на радној површини за овог корисника</translation> +<translation id="2675358154061544447">Рана експериментална фаза подршке за приказивање iframe-ова на више сајтова у одвојеним процесима. У овом режиму документи ће делити процес приказивача само ако потичу са истог веб-сајта.</translation> <translation id="2676946222714718093">Пуштено на</translation> <translation id="2678063897982469759">Поново омогући</translation> <translation id="2678246812096664977">Све додатне компоненте</translation> @@ -1377,6 +1378,7 @@ <translation id="2960393411257968125">Како менаџер лозинки управља аутоматским попуњавањем за акредитив за синхронизацију.</translation> <translation id="29611076221683977">Нападачи који су тренутно на <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ће можда покушати да инсталирају опасне програме на Mac-у који краду или бришу податке (на пример, слике, лозинке, поруке и бројеве кредитних картица).</translation> <translation id="2961695502793809356">Кликните да бисте отишли напред, задржите да бисте видели историју</translation> +<translation id="296216853343927883">Коришћење бренда Google у контекстуалном менију</translation> <translation id="2963151496262057773">Следећа додатна компонента се не одазива: <ph name="PLUGIN_NAME" /> Желите ли да је зауставите?</translation> <translation id="2963783323012015985">Језик тастатуре: турски</translation> <translation id="2964193600955408481">Онемогући Wi-Fi</translation> @@ -1426,6 +1428,16 @@ <translation id="3025729795978504041">Кликните десним тастером миша на дугме изнад да би се приказале друге особе.</translation> <translation id="3026050830483105579">Све је ту.</translation> <translation id="302620147503052030">Прикажи дугме</translation> +<translation id="302781076327338683">Поновно учитавање уз заобилажење кеша</translation> +<translation id="3030243755303701754">Корисник под надзором може да истражује веб уз вашу помоћ. Као менаџер корисника под надзором у Chrome-у, можете: + + • да дозволите или забраните одређене веб-сајтове, + • да прегледате веб-сајтове које је корисник под надзором посетио и + • да управљате другим подешавањима. + +Прављењем корисника под надзором не отварате Google налог и његови обележивачи, историја прегледања и друга подешавања неће бити синхронизована на другим уређајима помоћу Chrome синхронизације. Када направите новог корисника под надзором, у било ком тренутку и са сваког уређаја можете да управљате његовим подешавањима на <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Више информација потражите у <ph name="BEGIN_LINK" />центру за помоћ<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Агент Икс</translation> <translation id="3031557471081358569">Изаберите ставке за увоз:</translation> <translation id="3033332627063280038">Омогућите експерименталну примену директиве Cache-Control: stale-while-revalidate. На тај начин дозвољавате серверима да наведу да ће неки ресурси можда бити поново проверени у позадини да би се смањило кашњење.</translation> @@ -1646,7 +1658,6 @@ <translation id="3324301154597925148">Је ли ово страница претраге коју сте очекивали?</translation> <translation id="3324684065575061611">(Онемогућено према смерницама за предузећа)</translation> <translation id="3326821416087822643">Додавање датотеке <ph name="FILE_NAME" /> у zip датотеку...</translation> -<translation id="3330206034087160972">Exit Presentation Mode (Изађи из режима презентације)</translation> <translation id="3330686263988132416">Заглавље Порекло у WebRTC Stun порукама</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Омогућите режим пресликаног екрана. Овај режим окреће слику на екрану у хоризонталан положај.</translation> @@ -1691,6 +1702,7 @@ <translation id="3392020134425442298">Задржи злонамерну датотеку</translation> <translation id="3394150261239285340"><ph name="HOST" /> жели да користи камеру и микрофон.</translation> <translation id="3394279550557729862">Омогућите подршку за коришћење искачућих локалних обавештења и центра за обавештења на платформама где су доступни.</translation> +<translation id="3394862755749546286">Онемогућава обједињени (Android и рачунар) процес за медије на Android-у.</translation> <translation id="3396331542604645348">Изабрани штампач није доступан или није правилно инсталиран. Проверите штампач или покушајте да изаберете неки други.</translation> <translation id="3399597614303179694">Македонска тастатура</translation> <translation id="3401130144947259741">Ако омогућите ово, догађаји праћења ће бити извезени у Event Tracing for Windows (ETW) (Праћење догађаја за Windows), па могу да их снимају алатке као што су UIForETW или Xperf.</translation> @@ -1901,7 +1913,6 @@ <translation id="367645871420407123">оставите празно ако желите да подесите основну лозинку на подразумевану вредност слике за тестирање</translation> <translation id="3678156199662914018">Додатак: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Малтешка тастатура</translation> -<translation id="3680173818488851340">iframe-ови ниског приоритета.</translation> <translation id="3683524264665795342">Захтев за дељење екрана апликације <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Синхронизација са Google диском је подразумевано онемогућена када се користи мобилна веза за пренос података.</translation> <translation id="3685387984467886507">Памти одлуке за наставак поред SSL грешака током наведеног периода.</translation> @@ -1950,6 +1961,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ће се сада приказивати у Admin Console</translation> <translation id="3741243925913727067">Направите резервне копије слика и видео снимака са медијског уређаја на Google диску.</translation> <translation id="3743492083222969745">Омогућите/онемогућите опцију за куцање покретима на страници подешавања за виртуелну тастатуру.</translation> +<translation id="3744111561329211289">Синхронизација у позадини</translation> <translation id="3749289110408117711">Назив датотеке</translation> <translation id="3751427701788899101">Веза је прекинута</translation> <translation id="3751522270321808809">Овај сајт ће можда покушати да вас превари да би вам украо податке (примери: лозинке, поруке или бројеви кредитних картица).</translation> @@ -2267,6 +2279,7 @@ <translation id="4218259925454408822">Пријави ме на други налог</translation> <translation id="4219614746733932747">Ако омогућите ову опцију, Blink користи механизам за зумирање да би променио величину садржаја ради фактора размере уређаја.</translation> <translation id="4220865787605972627">Омогућава калибрацију боја екрана ако екран подржава ту функцију.</translation> +<translation id="4232692576734035989">Рана експериментална фаза режима за учинак у коме су iframe-ови на више сајтова одвојени у засебан процес у односу на главни документ. У овом режиму iframe-овима са различитих независних сајтова ће бити дозвољено да деле процес.</translation> <translation id="4235200303672858594">Цео екран</translation> <translation id="4235813040357936597">Додај налог за <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Није могуће приказати <ph name="PRODUCT_NAME" /> на овом језику</translation> @@ -2432,6 +2445,7 @@ <translation id="4509017836361568632">Одбаци слику</translation> <translation id="4509345063551561634">Локација:</translation> <translation id="4514542542275172126">Подесите новог корисника под надзором</translation> +<translation id="4514914692061505365">Принудно активира коришћење PNaCl-ов брзог Subzero преводиоца за све pexe датотеке.</translation> <translation id="4518677423782794009">Да ли Chrome отказује, приказује необичне почетне странице, траке с алаткама или неочекиване огласе које не можете да уклоните или на други начин мења доживљај прегледања? Можда ћете моћи да решите проблем ако покренете Алатку за чишћење Chrome-а.</translation> <translation id="452039078290142656">непознати уређаји продавца <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Детаљи</translation> @@ -2480,6 +2494,7 @@ <translation id="4595560905247879544">Апликације и додатке може да мења само менаџер (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF конвертор</translation> <translation id="4602466770786743961">Увек дозволи да <ph name="HOST" /> приступа камери и микрофону</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Није успостављена веза са интернетом</translation> <translation id="4608500690299898628">&Пронађи...</translation> <translation id="4610637590575890427">Да ли сте желели да одете на <ph name="SITE" /></translation> @@ -2784,6 +2799,7 @@ <translation id="5062930723426326933">Пријављивање није успело. Повежите се са интернетом и покушајте поново.</translation> <translation id="5063180925553000800">Нови PIN:</translation> <translation id="5067867186035333991">Питај ме ако <ph name="HOST" /> жели да приступи микрофону</translation> +<translation id="5068918910148307423">Не дозвољавај да недавно затворени сајтови заврше слање и примање података</translation> <translation id="507075806566596212">Управо региструјете овај <ph name="DEVICE_TYPE" /> на Google-у да бисте омогућили даљинско лоцирање, брисање података и закључавање уређаја. За то је потребно рестартовање уређаја. Желите ли да наставите?</translation> <translation id="5072836811783999860">Прикажи управљане обележиваче</translation> <translation id="5074318175948309511">Можда треба поново да учитате ову страницу да би нова подешавања ступила на снагу.</translation> @@ -2893,6 +2909,7 @@ <translation id="5227808808023563348">Тражење претходног текста</translation> <translation id="5228076606934445476">Нешто није у реду са уређајем. Да бисте исправили ову грешку, треба да поново покренете уређај и покушате поново.</translation> <translation id="5228962187251412618">Само онлајн провера</translation> +<translation id="5229622432348746578">Онемогући звук за дељење радне површине</translation> <translation id="5230516054153933099">Прозор</translation> <translation id="5232178406098309195">Када користите команде за аудио активацију, попут „ОК Google“ или додирнете икону микрофона, приватне Гласовне и аудио активности чувају неке гласовне и друге аудио податке на налог. Биће сачуван снимак говора/звука који следи и неколико секунди пре тога.</translation> <translation id="523299859570409035">Изузеци за обавештења</translation> @@ -3147,6 +3164,7 @@ <translation id="5557991081552967863">Не искључуј Wi-Fi током спавања</translation> <translation id="5558129378926964177">Zoom &In (Увећај)</translation> <translation id="556042886152191864">Дугме</translation> +<translation id="5562781907504170924">Ова картица је повезана са Bluetooth уређајем.</translation> <translation id="5565871407246142825">Кредитне картице</translation> <translation id="5567989639534621706">Кешеви апликација</translation> <translation id="5568069709869097550">Не могу да се пријавим</translation> @@ -3308,6 +3326,7 @@ <translation id="5803531701633845775">Одаберите фразе отпозади, без померања курсора</translation> <translation id="5804241973901381774">Дозволе</translation> <translation id="580571955903695899">Поређај према наслову</translation> +<translation id="5808982448801399019">Давање овлашћења није успело</translation> <translation id="580961539202306967">Питај ме када сајт жели да ми шаље искачуће поруке (препоручено)</translation> <translation id="5815645614496570556">X.400 адреса</translation> <translation id="5817397429773072584">кинески (традиционални)</translation> @@ -3579,6 +3598,7 @@ <translation id="6243774244933267674">Сервер је недоступан</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Ажурирање је спремно</translation> +<translation id="6248400709929739064">Омогући титлове</translation> <translation id="6248988683584659830">Претражите подешавања</translation> <translation id="6251870443722440887">GDI надимци</translation> <translation id="6251889282623539337">Услови коришћења услуге домена <ph name="DOMAIN" /></translation> @@ -3603,6 +3623,7 @@ <translation id="6277105963844135994">Временско ограничење мреже</translation> <translation id="6277518330158259200">С&ними екран</translation> <translation id="6279183038361895380">Притисните |<ph name="ACCELERATOR" />| да бисте приказали показивач</translation> +<translation id="6280215091796946657">Пријави ме помоћу другог налога</translation> <translation id="6281743458679673853">Обавите експеримент у ком ће сви API-ји приказивати целокупну област приказа. На тај начин ће window.scroll својства бити повезана са целокупном облашћу приказа.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Нов штампач на мрежи}one{Нови штампачи на мрежи}few{Нови штампачи на мрежи}other{Нови штампачи на мрежи}}</translation> <translation id="6285395082104474418">Палета статуса вам приказује актуелни статус мреже, батерије и других ствари.</translation> @@ -3684,6 +3705,9 @@ <translation id="6418160186546245112">Враћа се на претходну инсталирану верзију производа <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Трајно уклони приступ за све апликације</translation> <translation id="6418505248408153264">Омогући историју материјалног дизајна</translation> +<translation id="6419288379019356534">Овим уређајем управља <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Кликните на „Даље“ да бисте наставили пријављивање на налог за <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">средњоевропски</translation> <translation id="6420676428473580225">Додајте на радну површину</translation> <translation id="6422329785618833949">Слика је окренута</translation> @@ -3843,7 +3867,6 @@ <translation id="6662016084451426657">Грешка при синхронизацији: Контактирајте администратора да бисте омогућили синхронизацију.</translation> <translation id="6663792236418322902">Лозинка коју одаберете биће касније потребна за враћање ове датотеке. Евидентирајте је на безбедној локацији.</translation> <translation id="6664237456442406323">Нажалост, рачунар је конфигурисан помоћу погрешно направљеног ИД-а хардвера. То спречава Chrome ОС да се ажурира најновијим безбедносним исправкама и рачунар је <ph name="BEGIN_BOLD" />можда подложан злонамерним нападима<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Смањује приоритет учитавања ресурса за iframe.</translation> <translation id="6666647326143344290">помоћу Google налога</translation> <translation id="6675665718701918026">Показивачки уређај је повезан</translation> <translation id="6677037229676347494">Очекивани ИД је „<ph name="EXPECTED_ID" />“, али наведен је ИД „<ph name="NEW_ID" />“.</translation> @@ -3936,6 +3959,7 @@ <translation id="6825883775269213504">руски</translation> <translation id="6827236167376090743">Репродукција овог видео снимка ће се наставити у недоглед.</translation> <translation id="6828153365543658583">Ограничи пријављивање на следеће кориснике:</translation> +<translation id="6828434191343384461">Изабрани подаци су уклоњени из Chrome-а и са синхронизованих уређаја. Google налог има друге облике историје прегледања, попут претрага и активности на другим Google услугама на <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Подешавање аутоматских ажурирања за све кориснике није успело (грешка извршавања при провери: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Потражите помоћ за <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Пријавите се у организацију</translation> @@ -4015,6 +4039,7 @@ <translation id="6965382102122355670">Потврди</translation> <translation id="6965648386495488594">Порт</translation> <translation id="6965978654500191972">Уређај</translation> +<translation id="6969104364835835175">Принудно активирај PNaCl Subzero</translation> <translation id="6970230597523682626">бугарски</translation> <translation id="6970480684834282392">Тип покретања</translation> <translation id="6970856801391541997">Штампање посебних страница</translation> @@ -4100,10 +4125,12 @@ <translation id="7057058088140140610">Кредитне картице и адресе које користе Google Payments</translation> <translation id="7059858479264779982">Подеси на аутоматско покретање</translation> <translation id="7061692898138851896">Аутоматски чувај лозинке</translation> +<translation id="7062222374113411376">Дозволи да недавно затворени сајтови заврше слање и примање података (препоручено)</translation> <translation id="7063129466199351735">Обрада пречица...</translation> <translation id="7065223852455347715">Овај уређај је закључан и налази се у режиму који спречава регистрацију за предузећа. Ако желите да региструјете уређај, прво морате да обавите опоравак уређаја.</translation> <translation id="7065534935986314333">О систему</translation> <translation id="7066944511817949584">Повезивање са уређајем „<ph name="DEVICE_NAME" />“ није успело.</translation> +<translation id="7067725467529581407">Никада не приказуј ово поново.</translation> <translation id="7070804685954057874">Директни унос</translation> <translation id="7072010813301522126">Назив пречице</translation> <translation id="7072025625456903686">Омогући све или прилагоди</translation> @@ -4370,6 +4397,7 @@ <translation id="7489605380874780575">Провери да ли испуњава услове</translation> <translation id="749028671485790643">Особа <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> ће прикупљати сав текст који унесете, укључујући личне податке, попут лозинки и бројева кредитних картица. Да ли желите да користите овај додатак?</translation> <translation id="7495778526395737099">Заборавили сте стару лозинку?</translation> <translation id="7503191893372251637">Тип Netscape сертификата</translation> <translation id="7503821294401948377">Није могуће учитати икону „<ph name="ICON" />“ за радњу прегледача.</translation> @@ -4421,6 +4449,7 @@ <translation id="756445078718366910">Отвори прозор прегледача</translation> <translation id="7564847347806291057">Заврши процес</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome подаци су обрисани</translation> <translation id="7568790562536448087">Ажурирање</translation> <translation id="7573172247376861652">Напуњеност батерије</translation> <translation id="7576032389798113292">6×4</translation> @@ -4550,6 +4579,7 @@ <translation id="7786207843293321886">Изађи из сесије госта</translation> <translation id="7786889348652477777">&Поново учитај апликацију</translation> <translation id="7787129790495067395">Тренутно користите приступну фразу. Ако сте заборавили приступну фразу, можете да вратите синхронизацију на почетне вредности да бисте обрисали податке са Google-ових сервера помоћу Google контролне табле.</translation> +<translation id="7787308148023287649">Приказ на другом екрану</translation> <translation id="7788080748068240085">Да бисте сачували „<ph name="FILE_NAME" />“ офлајн, морате да ослободите још <ph name="TOTAL_FILE_SIZE" /> простора:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />откачите датотеке којима више не морате да приступате офлајн<ph name="MARKUP_3" /> <ph name="MARKUP_4" />избришите датотеке из директоријума Преузимања<ph name="MARKUP_5" /></translation> @@ -4618,6 +4648,7 @@ <translation id="7878999881405658917">Google је послао обавештење на овај телефон. Имајте на уму да, када користите Bluetooth, телефон може да откључава <ph name="DEVICE_TYPE" /> на удаљености од преко 9 метара. У случајевима где то може да представља проблем, можете <a>привремено да онемогућите ову функцију</a>.</translation> <translation id="7879478708475862060">Прати режим уноса</translation> <translation id="7880836220014399562">„<ph name="BUNDLE_NAME" />“ додаје следеће апликације и додатке:</translation> +<translation id="7881969471599061635">Онемогући титлове</translation> <translation id="7884988936047469945">Експериментални функције приступачности</translation> <translation id="7885253890047913815">Недавна одредишта</translation> <translation id="7885283703487484916">веома кратко</translation> @@ -4983,6 +5014,7 @@ <translation id="839736845446313156">Региструјте се</translation> <translation id="8398790343843005537">Пронађи телефон</translation> <translation id="8398877366907290961">Ипак настави</translation> +<translation id="8399276228600040370">Пријавите се помоћу налога сачуваног помоћу услуге <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Непотврђено поље за потврду</translation> <translation id="8408402540408758445">Припрема учитавања резултата претраге</translation> <translation id="8410073653152358832">Користи овај телефон</translation> @@ -5069,6 +5101,7 @@ <translation id="8545211332741562162">Омогућите веб страницама да користе функције експерименталног JavaScript-а.</translation> <translation id="8545575359873600875">Жао нам је, није могуће верификовати лозинку. Менаџер овог корисника под надзором је можда недавно променио лозинку. Ако јесте, нова лозинка ће важити када се следећи пут будете пријављивали. Покушајте да користите стару лозинку.</translation> <translation id="8546306075665861288">Кеш слике</translation> +<translation id="854653344619327455">Када је ова ознака укључена, прозор бирача за дељење радне површине неће омогућити кориснику да бира да ли жели да дели звук.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Знак</translation> <translation id="855081842937141170">Закачи картицу</translation> @@ -5099,6 +5132,7 @@ <translation id="8589311641140863898">Експериментални API-ји додатка</translation> <translation id="8590375307970699841">Подеси аутоматска ажурирања</translation> <translation id="8592071947729879125">Ограничи дозволе за iframe.</translation> +<translation id="8592125506633137593">Изолација главног документа</translation> <translation id="8594787581355215556">Пријављени сте као <ph name="USER_EMAIL_ADDRESS" />. Управљајте синхронизованим подацима на <ph name="BEGIN_LINK" />Google контролној табли<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Прилагођене датотеке</translation> <translation id="8596785155158796745">Микрофон је тренутно недоступан. <ph name="BEGIN_LINK" />Управљај микрофоном<ph name="END_LINK" /></translation> @@ -5171,6 +5205,7 @@ <translation id="8688579245973331962">Не видите своје име?</translation> <translation id="8688644143607459122">Кликом на Настави прихватате да користите Google Payments. Да бисмо вас заштитили од преваре, информације о рачунару (укључујући његову локацију) ће се делити са Google Payments-ом.</translation> <translation id="8689102680909215706">Додатак „<ph name="EXTENSION_NAME" />“ је даљински инсталиран.</translation> +<translation id="868926756781121513">Извор за картицу за дељење радне површине</translation> <translation id="8689341121182997459">Истиче:</translation> <translation id="8690754533598178758">Изузеци за микрофон за Adobe Flash Player се разликују.</translation> <translation id="8691686986795184760">(Омогућено смерницама за предузећа)</translation> @@ -5214,6 +5249,7 @@ <translation id="8737685506611670901">отвори линкове за <ph name="PROTOCOL" /> уместо <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Прецизно подешава положај покрета додира да би се надокнадила слабија резолуција додира у поређењу са мишем.</translation> +<translation id="8741995161408053644">Google налог има друге облике историје прегледања на <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Приказуј проширене опције уноса у полици.</translation> <translation id="874420130893181774">Традиционални метод уноса пинјин</translation> <translation id="8744525654891896746">Изаберите аватар за овог корисника под надзором</translation> @@ -5227,6 +5263,7 @@ <translation id="8757640015637159332">Уђите у јавну сесију</translation> <translation id="8757742102600829832">Изаберите Chromebox са којим желите да се повежете</translation> <translation id="8757803915342932642">Уређај у Google клауд уређајима</translation> +<translation id="8758895886513993540">Ова ознака контролише да ли корисници могу да изаберу картицу за дељење радне површине.</translation> <translation id="8759408218731716181">Није могуће подесити вишеструко пријављивање</translation> <translation id="8759753423332885148">Сазнајте више.</translation> <translation id="8761567432415473239">Google безбедно прегледање је недавно <ph name="BEGIN_LINK" />открило штетне програме<ph name="END_LINK" /> на <ph name="SITE" />.</translation> @@ -5437,6 +5474,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB миш је повезан</translation> <translation id="9076523132036239772">Жао нам је, нисмо успели да верификујемо имејл адресу или лозинку. Прво покушајте да се повежете са мрежом.</translation> +<translation id="9077132661879924646">Онемогућава обједињени процес за медије на Android-у.</translation> <translation id="907841381057066561">Прављење привремене zip датотеке није успело током паковања.</translation> <translation id="9083147368019416919">Није успело опозивање регистрације</translation> <translation id="9084064520949870008">Отвори као прозор</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index ec43359..2263c28 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -501,6 +501,7 @@ <translation id="169515659049020177">Skift</translation> <translation id="1697068104427956555">Välj ett kvadratiskt område på bilden.</translation> <translation id="1697532407822776718">Färdigt!</translation> +<translation id="1697988819212986149">Gör så att en Google-ikon visas bredvid menyalternativ med koppling till Googles tjänster på snabbmenyn.</translation> <translation id="1699274548822076330">Den här flaggan används tillsammans med flaggan trace-upload-url. VARNING! När detta är aktiverat registreras prestandainformation om alla navigeringsåtgärder i Chrome och laddas upp till den webbadress som angetts med flaggan trace-upload-url. Spårningen kan innehålla personligt identifierande information (PII) som namnet på och webbadressen till webbplatser du besöker.</translation> <translation id="1699395855685456105">Revision för maskinvara:</translation> @@ -561,7 +562,6 @@ <translation id="1783075131180517613">Uppdatera lösenfrasen för synkroniseringen.</translation> <translation id="1788636309517085411">Använd standardinställning</translation> <translation id="1789575671122666129">Popup-fönster</translation> -<translation id="1790550373387225389">Öppna presentationsläge</translation> <translation id="1792705092719258158">Aktivera läget för speglad skärm.</translation> <translation id="1793119619663054394">Vill du ta bort <ph name="PROFILE_NAME" /> och all tillhörande data i Chrome från den här datorn? Åtgärden kan inte ångras.</translation> <translation id="179767530217573436">de senaste fyra veckorna</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Ändra inställningar som är specifika för din enhet och din kringutrustning.</translation> <translation id="2673135533890720193">Läsa webbhistoriken</translation> <translation id="2673589024369449924">Skapa en skrivbordsgenväg för den här användaren</translation> +<translation id="2675358154061544447">Mycket experimentellt stöd för att rendera iframe från olika webbplatser i separata processer. I det här läget delar dokumenten bara renderarprocess om de kommer från samma webbplats.</translation> <translation id="2676946222714718093">Spelas på</translation> <translation id="2678063897982469759">Aktivera igen</translation> <translation id="2678246812096664977">Alla pluginprogram</translation> @@ -1382,6 +1383,7 @@ <translation id="2960393411257968125">Hur lösenordshanteraren hanterar autofyll för användaruppgifter vid synkronisering.</translation> <translation id="29611076221683977">Det kan hända att angripare som för närvarande finns på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> försöker installera skadliga program på din Mac som stjäl eller raderar dina uppgifter (t.ex. foton, lösenord, meddelanden och kreditkort).</translation> <translation id="2961695502793809356">Klicka för att fortsätta, håll ned för att se historik</translation> +<translation id="296216853343927883">Googles varumärkning på snabbmenyn</translation> <translation id="2963151496262057773">Följande pluginprogram svarar inte: <ph name="PLUGIN_NAME" />. Vill du stoppa det?</translation> <translation id="2963783323012015985">Turkiskt tangentbord</translation> <translation id="2964193600955408481">Inaktivera Wi-Fi</translation> @@ -1431,6 +1433,16 @@ <translation id="3025729795978504041">Högerklicka på knappen ovan om du vill visa för andra.</translation> <translation id="3026050830483105579">Här hittar du allt.</translation> <translation id="302620147503052030">Visa knapp</translation> +<translation id="302781076327338683">Läs in igen och förbigå cacheminnet</translation> +<translation id="3030243755303701754">En kontrollerad användare kan utforska webben under ditt överinseende. Som ansvarig för en kontrollerad användare i Chrome kan du + + • tillåta eller förbjuda webbplatser + • se vilka webbplatser den kontrollerade användaren har besökt + • hantera andra inställningar. + +Att skapa en kontrollerad användare innebär inte att ett Google-konto skapas. Den kontrollerade användarens bokmärken, webbhistorik och övriga inställningar följer inte med till andra enheter vid synkronisering i Chrome. När du har skapat en ny kontrollerad användare kan du hantera inställningarna för den när som helst och med vilken enhet som helst på <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Besök vårt <ph name="BEGIN_LINK" />hjälpcenter<ph name="END_LINK" /> om du vill ha mer information.</translation> <translation id="3031417829280473749">Agent X</translation> <translation id="3031557471081358569">Välj objekt att importera:</translation> <translation id="3033332627063280038">Aktiverar den experimentella implementeringen av direktivet stale-while-revalidate för cacheminnet. Det tillåter att servrar anger att vissa resurser kan valideras om i bakgrunden för att förbättra latensen.</translation> @@ -1651,7 +1663,6 @@ <translation id="3324301154597925148">Är det här den söksida du väntade dig?</translation> <translation id="3324684065575061611">(Har inaktiverats av företagspolicy)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> komprimeras ...</translation> -<translation id="3330206034087160972">Avsluta presentationsläge</translation> <translation id="3330686263988132416">Origin-huvud i WebRTC STUN</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Aktiverar läget för speglad skärm. Med det här läget vänder du skärmbilden horisontellt.</translation> @@ -1696,6 +1707,7 @@ <translation id="3392020134425442298">Återställ skadlig fil</translation> <translation id="3394150261239285340"><ph name="HOST" /> försöker använda kameran och mikrofonen.</translation> <translation id="3394279550557729862">Aktivera stöd för systeminterna popup-meddelanden och meddelandecenter på plattformar där de är tillgängliga.</translation> +<translation id="3394862755749546286">Inaktiverar enhetlig (d.v.s. för Android och dator) pipeline för media på Android.</translation> <translation id="3396331542604645348">Den valda skrivaren är inte tillgänglig eller har inte installerats korrekt. Kontrollera skrivaren eller välj en annan.</translation> <translation id="3399597614303179694">Makedonskt tangentbord</translation> <translation id="3401130144947259741">När detta alternativ har aktiverats exporteras händelsespårningen till Händelsespårning för Windows (ETW) så att den kan registreras med verktyg som UIForETW eller Xperf.</translation> @@ -1906,7 +1918,6 @@ <translation id="367645871420407123">lämna tomt om du vill ange rotlösenordet som värde för standardtestbilden</translation> <translation id="3678156199662914018">Tillägg: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Maltesiskt tangentbord</translation> -<translation id="3680173818488851340">Iframe med låg prioritet.</translation> <translation id="3683524264665795342">Förfrågan från <ph name="APP_NAME" /> om skärmdelning</translation> <translation id="3685122418104378273">Google Drive-synkronisering inaktiveras som standard när mobildata används.</translation> <translation id="3685387984467886507">Kom ihåg valet att fortsätta trots SSL-fel under en angiven tidsperiod.</translation> @@ -1955,6 +1966,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> visas nu i administratörskonsolen</translation> <translation id="3741243925913727067">Säkerhetskopiera foton och videor från mediaenheten till Google Drive.</translation> <translation id="3743492083222969745">Aktivera/inaktivera svepskrivning på inställningssidan för det virtuella tangentbordet.</translation> +<translation id="3744111561329211289">Synkronisera i bakgrunden</translation> <translation id="3749289110408117711">Filnamn</translation> <translation id="3751427701788899101">Anslutningen bröts</translation> <translation id="3751522270321808809">Den här webbplatsen kan försöka lura dig för att stjäla information (till exempel lösenord, meddelanden eller kreditkortsuppgifter).</translation> @@ -2272,6 +2284,7 @@ <translation id="4218259925454408822">Logga in på ett annat konto</translation> <translation id="4219614746733932747">Om detta är aktiverat används Blinks funktion för inzoomning till att skala innehållet för enhetens skalningsfaktor.</translation> <translation id="4220865787605972627">Tillåt färgkalibrering av skärmen om skärmen har stöd för den funktionen.</translation> +<translation id="4232692576734035989">Mycket experimentellt läge där iframe från olika webbplatser hålls åtskilda från moderdokumentet i en separat process. I det här läget tillåts iframe från olika tredjepartswebbplatser att dela process.</translation> <translation id="4235200303672858594">Helskärm</translation> <translation id="4235813040357936597">Lägg till ett konto för <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Det går inte att visa <ph name="PRODUCT_NAME" /> på det här språket</translation> @@ -2437,6 +2450,7 @@ <translation id="4509017836361568632">Ta bort fotot</translation> <translation id="4509345063551561634">Plats:</translation> <translation id="4514542542275172126">Skapa ny kontrollerad användare</translation> +<translation id="4514914692061505365">Tvinga fram användning av PNaCl:s snabba Subzero-översättare för alla pexe-filer.</translation> <translation id="4518677423782794009">Händer det att Chrome kraschar, eller har du råkat ut för ovanliga startsidor, verktygsfält eller oväntade annonser som du inte kan ta bort eller som på annat sätt ändrar webbupplevelsen? Du kan eventuellt åtgärda problemet genom att köra Chrome Cleanup Tool.</translation> <translation id="452039078290142656">okända enheter från <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Info</translation> @@ -2485,6 +2499,7 @@ <translation id="4595560905247879544">Appar och tillägg kan bara ändras av den ansvariga (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">EMF-konverterare</translation> <translation id="4602466770786743961">Tillåt alltid att <ph name="HOST" /> använder kameran och mikrofonen</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Det finns ingen Internetanslutning</translation> <translation id="4608500690299898628">&Sök...</translation> <translation id="4610637590575890427">Ville du besöka <ph name="SITE" />?</translation> @@ -2789,6 +2804,7 @@ <translation id="5062930723426326933">Inloggningen misslyckades. Anslut till internet och försök igen.</translation> <translation id="5063180925553000800">Ny PIN:</translation> <translation id="5067867186035333991">Fråga om <ph name="HOST" /> vill använda din mikrofon</translation> +<translation id="5068918910148307423">Tillåt inte att webbplatser som nyligen har stängts får slutföra överföringen av data som skickas och tas emot</translation> <translation id="507075806566596212">Du är på väg att registrera denna <ph name="DEVICE_TYPE" /> hos Google för att aktivera möjligheten att lokalisera, rensa och låsa den på distans. Det här kräver omstart. Vill du fortsätta?</translation> <translation id="5072836811783999860">Visa hanterade bokmärken</translation> <translation id="5074318175948309511">Den här sidan kan behöva läsas in igen innan den nya inställningen börjar gälla.</translation> @@ -2898,6 +2914,7 @@ <translation id="5227808808023563348">Hitta föregående text</translation> <translation id="5228076606934445476">Det är något fel på enheten. Du måste starta om den och försöka igen.</translation> <translation id="5228962187251412618">Endast onlinekontroll</translation> +<translation id="5229622432348746578">Inaktivera ljud för delat skrivbord</translation> <translation id="5230516054153933099">Fönster</translation> <translation id="5232178406098309195">När du använder kommandon för ljudaktivering, till exempel ”Ok Google” eller trycker på en mikrofonikon, sparas vissa röstinspelningar och andra ljud i din privata röst- och ljudaktivitet i kontot. En inspelning av följande röster/ljud samt ett par sekunder före sparas.</translation> <translation id="523299859570409035">Undantag för aviseringar</translation> @@ -3152,6 +3169,7 @@ <translation id="5557991081552967863">Behåll Wi-Fi vid viloläge</translation> <translation id="5558129378926964177">Zooma &in</translation> <translation id="556042886152191864">Knapp</translation> +<translation id="5562781907504170924">Den här fliken är ansluten till en Bluetooth-enhet.</translation> <translation id="5565871407246142825">Kreditkort</translation> <translation id="5567989639534621706">Programmets cacheminnen</translation> <translation id="5568069709869097550">Kan inte logga in</translation> @@ -3311,6 +3329,7 @@ <translation id="5803531701633845775">Välj fraser längst bak utan att flytta markören</translation> <translation id="5804241973901381774">Behörigheter</translation> <translation id="580571955903695899">Ordna efter titel</translation> +<translation id="5808982448801399019">Auktoriseringen misslyckades</translation> <translation id="580961539202306967">Fråga mig när en webbplats vill skicka push-meddelanden (rekommenderas)</translation> <translation id="5815645614496570556">X.400-adress</translation> <translation id="5817397429773072584">kinesiska (traditionell)</translation> @@ -3582,6 +3601,7 @@ <translation id="6243774244933267674">Servern är inte tillgänglig</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" /> %</translation> <translation id="624789221780392884">Uppdateringen är klar</translation> +<translation id="6248400709929739064">Aktivera undertexter</translation> <translation id="6248988683584659830">Sök i inställningar</translation> <translation id="6251870443722440887">GDI-handtag</translation> <translation id="6251889282623539337">Användarvillkor för <ph name="DOMAIN" /></translation> @@ -3606,6 +3626,7 @@ <translation id="6277105963844135994">Tidsgräns för nätverket</translation> <translation id="6277518330158259200">T&a en skärmdump</translation> <translation id="6279183038361895380">Tryck på |<ph name="ACCELERATOR" />| om du vill visa markören</translation> +<translation id="6280215091796946657">Logga in med ett annat konto</translation> <translation id="6281743458679673853">Experiment med att låta alla API:er spegla layoutens visningsområde. Då fungerar fönstrets rullningsegenskaper (window.scroll) relativt visningsområdet i layouten.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ny skrivare i nätverket}other{Nya skrivare i nätverket}}</translation> <translation id="6285395082104474418">I statusfältet visas aktuell status för bland annat nätverk och batteri.</translation> @@ -3687,6 +3708,9 @@ <translation id="6418160186546245112">Återgå till den tidigare installerade versionen av <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Ta bort tillgången till alla appar permanent</translation> <translation id="6418505248408153264">Aktivera historiken för Material Design</translation> +<translation id="6419288379019356534">Den här enheten hanteras av <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Fortsätt med inloggningen på kontot på <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> genom att klicka på Nästa.</translation> <translation id="6419902127459849040">Centraleuropeiskt</translation> <translation id="6420676428473580225">Lägg till på skrivbordet</translation> <translation id="6422329785618833949">Fotot har vänts</translation> @@ -3847,7 +3871,6 @@ <translation id="6662016084451426657">Synkroniseringsfel. Kontakta administratören om du vill aktivera synkronisering.</translation> <translation id="6663792236418322902">Lösenordet du väljer behövs om du vill återställa filen vid ett senare tillfälle. Spara det på ett säkert ställe.</translation> <translation id="6664237456442406323">Tyvärr är din dator konfigurerad med ett felaktigt maskinvaru-ID. Detta förhindrar att Chrome OS uppdateras med de senaste säkerhetskorrigeringarna och datorn <ph name="BEGIN_BOLD" />kan vara utsatt för skadlig programvara<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Minskar inläsningsprioriteten för iframe-resurser.</translation> <translation id="6666647326143344290">med ditt Google-konto</translation> <translation id="6675665718701918026">Pekdon har anslutits</translation> <translation id="6677037229676347494">Förväntat ID <ph name="EXPECTED_ID" />, men ID:t var <ph name="NEW_ID" />.</translation> @@ -3940,6 +3963,7 @@ <translation id="6825883775269213504">ryska</translation> <translation id="6827236167376090743">Denna video spelas upp för evigt.</translation> <translation id="6828153365543658583">Begränsa inloggning till följande användare:</translation> +<translation id="6828434191343384461">Den data som markerades har tagits bort från Chrome och från synkroniserade enheter. Det kan finnas webbhistorik av annat slag i Google-kontot på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />, t.ex. sökningar och aktivitet på andra tjänster från Google.</translation> <translation id="6828860976882136098">Det gick inte att konfigurera automatiska uppdateringar för alla användare (preliminärt körningsfel: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Få hjälp med din <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Registrera dig i din organisation</translation> @@ -4020,6 +4044,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Port</translation> <translation id="6965978654500191972">Enhet</translation> +<translation id="6969104364835835175">Tvinga fram användning av Subzero med PNaCl</translation> <translation id="6970230597523682626">bulgariska</translation> <translation id="6970480684834282392">Starttyp</translation> <translation id="6970856801391541997">Skriv ut vissa sidor</translation> @@ -4102,10 +4127,12 @@ <translation id="7057058088140140610">Kreditkort och adresser som används med Google Payments</translation> <translation id="7059858479264779982">Inställd på att starta automatiskt</translation> <translation id="7061692898138851896">Spara lösenord automatiskt</translation> +<translation id="7062222374113411376">Tillåt webbplatser som nyligen har stängts att slutföra överföringen av data (rekommenderas)</translation> <translation id="7063129466199351735">Genvägarna behandlas …</translation> <translation id="7065223852455347715">Enheten är låst i ett läge som förhindrar företagsregistrering. Om du vill registrera enheten måste du först återställa den.</translation> <translation id="7065534935986314333">Om systemet</translation> <translation id="7066944511817949584">Det gick inte att ansluta till <ph name="DEVICE_NAME" />.</translation> +<translation id="7067725467529581407">Visa aldrig detta igen.</translation> <translation id="7070804685954057874">Direktinmatning</translation> <translation id="7072010813301522126">Namn på genvägen</translation> <translation id="7072025625456903686">Tillåt alla eller anpassa</translation> @@ -4377,6 +4404,7 @@ <translation id="7489605380874780575">Kontrollera behörighet</translation> <translation id="749028671485790643">Person <ph name="VALUE" /></translation> <translation id="7491962110804786152">tabb</translation> +<translation id="7493386493263658176">Tillägget <ph name="EXTENSION_NAME" /> kan samla in all text du skriver, inklusive personlig information som lösenord och kreditkortsnummer. Vill du fortsätta att använda tillägget?</translation> <translation id="7495778526395737099">Har du glömt ditt gamla lösenord?</translation> <translation id="7503191893372251637">Certifieringstyp för Netscape</translation> <translation id="7503821294401948377">Det gick inte att läsa in ikonen <ph name="ICON" /> för webbläsaråtgärden.</translation> @@ -4428,6 +4456,7 @@ <translation id="756445078718366910">Öppna webbläsarfönster</translation> <translation id="7564847347806291057">Avsluta process</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Data i Chrome har rensats</translation> <translation id="7568790562536448087">Uppdaterar</translation> <translation id="7573172247376861652">Batteriladdning</translation> <translation id="7576032389798113292">6:4</translation> @@ -4557,6 +4586,7 @@ <translation id="7786207843293321886">Avsluta gästsession</translation> <translation id="7786889348652477777">&Läs in appen igen</translation> <translation id="7787129790495067395">Du använder en lösenfras. Om du har glömt din lösenfras kan du återställa synkronisering och rensa dina data från Googles servrar med Google Översikt.</translation> +<translation id="7787308148023287649">Visa på en annan skärm</translation> <translation id="7788080748068240085">För att kunna spara<ph name="FILE_NAME" /> offline måste du frigöra ytterligare <ph name="TOTAL_FILE_SIZE" /> utrymme:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />ta bort filer som du inte längre behöver kunna använda offline<ph name="MARKUP_3" /> <ph name="MARKUP_4" />ta bort filer från mappen Nedladdningar<ph name="MARKUP_5" /></translation> @@ -4625,6 +4655,7 @@ <translation id="7878999881405658917">Google skickade ett meddelande till den här mobilen. Tänk på att med Bluetooth kan mobilen ha <ph name="DEVICE_TYPE" /> olåst på mer än 30 meters avstånd. I de fall detta kan orsaka ett problem kan du <a>tillfälligt inaktivera funktionen</a>.</translation> <translation id="7879478708475862060">Följ inmatningsläge</translation> <translation id="7880836220014399562"><ph name="BUNDLE_NAME" /> lägger till följande appar och tillägg:</translation> +<translation id="7881969471599061635">Inaktivera undertexter</translation> <translation id="7884988936047469945">Experimentella tillgänglighetsfunktioner</translation> <translation id="7885253890047913815">Senaste platserna</translation> <translation id="7885283703487484916">mycket kort</translation> @@ -4988,6 +5019,7 @@ <translation id="839736845446313156">Registrera</translation> <translation id="8398790343843005537">Sök efter mobilen</translation> <translation id="8398877366907290961">Fortsätt ändå</translation> +<translation id="8399276228600040370">Logga in med kontot som sparats med <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Avmarkerad kryssruta</translation> <translation id="8408402540408758445">Sökresultat för förhandshämtning</translation> <translation id="8410073653152358832">Använd den här mobilen</translation> @@ -5074,6 +5106,7 @@ <translation id="8545211332741562162">Gör så att webbsidor använder experimentella Javascript-funktioner.</translation> <translation id="8545575359873600875">Det gick inte att verifiera lösenordet. Den som hanterar denna kontrollerade användare kan ha ändrat lösenordet nyligen. I så fall kommer det nya lösenordet att börja gälla nästa gång du loggar in. Testa med det gamla lösenordet.</translation> <translation id="8546306075665861288">Cacheminne för bilder</translation> +<translation id="854653344619327455">När den här flaggan är vald kan användarna inte välja om de vill dela ljudet i fönstret där de delar skrivbordet.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Tecken</translation> <translation id="855081842937141170">Fäst flik</translation> @@ -5104,6 +5137,7 @@ <translation id="8589311641140863898">Tillägg med experimentella programmeringsgränssnitt</translation> <translation id="8590375307970699841">Konfigurera automatiska uppdateringar</translation> <translation id="8592071947729879125">Begränsa iframe-behörigheter.</translation> +<translation id="8592125506633137593">Isolera moderdokumentet</translation> <translation id="8594787581355215556">Inloggad som <ph name="USER_EMAIL_ADDRESS" />. Hantera synkroniserade data i <ph name="BEGIN_LINK" />Google Översikt<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Egna filformat</translation> <translation id="8596785155158796745">Mikrofonen är inte tillgänglig för närvarande. <ph name="BEGIN_LINK" />Hantera mikrofonen<ph name="END_LINK" /></translation> @@ -5176,6 +5210,7 @@ <translation id="8688579245973331962">Hittar du inte ditt namn?</translation> <translation id="8688644143607459122">Genom att klicka på Fortsätt godkänner du användningen av Google Payments. Information om din dator (inklusive datorns plats) delas med Google Payments för att skydda dig mot bedrägeri.</translation> <translation id="8689102680909215706">Tillägget <ph name="EXTENSION_NAME" /> fjärrinstallerades.</translation> +<translation id="868926756781121513">Skrivbordsdelning med flik som källa</translation> <translation id="8689341121182997459">Utgångsdatum:</translation> <translation id="8690754533598178758">Adobe Flash Player använder andra undantag för mikrofonen.</translation> <translation id="8691686986795184760">(Aktiveras av en företagspolicy)</translation> @@ -5219,6 +5254,7 @@ <translation id="8737685506611670901">Öppna <ph name="PROTOCOL" />-länkar i stället för <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Finjustera positionen för skärmrörelser som kompensation för att skärmrörelser har dålig upplösning jämfört med en mus.</translation> +<translation id="8741995161408053644">Andra former av webbhistorik för Google-kontot kan finnas på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Visa utökade inmatningsalternativ på hyllan.</translation> <translation id="874420130893181774">Inmatningsmetod för traditionell Pinyin</translation> <translation id="8744525654891896746">Välj en avatar för den här hanterade användaren</translation> @@ -5232,6 +5268,7 @@ <translation id="8757640015637159332">Välj offentlig session</translation> <translation id="8757742102600829832">Välj en Chromebox att ansluta till</translation> <translation id="8757803915342932642">Enhet på Google Cloud Devices</translation> +<translation id="8758895886513993540">Den här flaggan styr om användarna kan välja en flik när de delar skrivbordet.</translation> <translation id="8759408218731716181">Det går inte att starta multiinloggning</translation> <translation id="8759753423332885148">Läs mer.</translation> <translation id="8761567432415473239">Googles tjänst Säker webbsökning <ph name="BEGIN_LINK" />hittade skadliga program<ph name="END_LINK" /> på <ph name="SITE" /> nyligen.</translation> @@ -5442,6 +5479,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB-mus har anslutits</translation> <translation id="9076523132036239772">Det gick inte att verifiera e-postadressen eller lösenordet. Anslut till ett nätverk först.</translation> +<translation id="9077132661879924646">Inaktiverar enhetlig pipeline för media på Android.</translation> <translation id="907841381057066561">Det gick inte att skapa en tillfällig ZIP-fil under packningen.</translation> <translation id="9083147368019416919">Avregistreringen misslyckades</translation> <translation id="9084064520949870008">Öppna som fönster</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index a809223..0d0355b 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -500,6 +500,7 @@ <translation id="169515659049020177">Hama</translation> <translation id="1697068104427956555">Chagua eneo mraba la picha.</translation> <translation id="1697532407822776718">Mko tayari nyote!</translation> +<translation id="1697988819212986149">Huonyesha aikoni ya Google karibu na vipengee vya menyu vinavyoendeshwa na huduma za Google.</translation> <translation id="1699274548822076330">Hii inafaa kutumiwa pamoja na ripoti ya url ya kufuatilia kipakiwa. ONYO: Ikiwashwa, Chrome itarekodi data ya utendaji kwa kila mawasiliano na iipakie kwenye URL iliyobainishwa na ripoti ya url ya kufuatilia kipakiwa. Ufuatiliaji unaweza kujumuisha maelezo ya kibinafsi yanayoweza kutambulika (PII) kama vile vichwa na URL za tovuti unazotembelea.</translation> <translation id="1699395855685456105">Marekebisho ya maunzi:</translation> @@ -560,7 +561,6 @@ <translation id="1783075131180517613">Tafadhali sasisha kaulisiri yako iliyolandanishwa.</translation> <translation id="1788636309517085411">Tumia chaguo-msingi</translation> <translation id="1789575671122666129">Ibukizi</translation> -<translation id="1790550373387225389">Ingiza Modi ya Uwasilishaji</translation> <translation id="1792705092719258158">Washa hali ya skrini inayoangaziwa.</translation> <translation id="1793119619663054394">Una uhakika unataka kuondoa "<ph name="PROFILE_NAME" />" na data yote inayohusishwa ya Chrome kutoka kwenye kompyuta hii? Hili haliwezi kutenduliwa.</translation> <translation id="179767530217573436">wiki 4 zilizopita</translation> @@ -1152,6 +1152,7 @@ <translation id="267285457822962309">Badilisha mipangilio bainifu katika kifaa chako na vijalizo.</translation> <translation id="2673135533890720193">Kusoma historia yako ya kuvinjari</translation> <translation id="2673589024369449924">Unda mkato wa mtumiaji huyu kwenye eneo-kazi</translation> +<translation id="2675358154061544447">Utumiaji wa majaribio wa hali ya juu wa kuonyesha fremu za tovuti zote katika shughuli tofauti. Katika hali hii, hati zitashiriki mchakato wa kionyeshi ikiwa tu zimetoka kwenye tovuti sawa.</translation> <translation id="2676946222714718093">Inacheza kwenye</translation> <translation id="2678063897982469759">Washa tena</translation> <translation id="2678246812096664977">Programu-jalizi zote</translation> @@ -1378,6 +1379,7 @@ <translation id="2960393411257968125">Jinsi ambavyo kisimamia nenosiri kinashughulikia kujaza otomatiki kwa kitambulisho cha usawazishaji.</translation> <translation id="29611076221683977">Wavamizi walio kwenye <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kwa sasa huenda wakajaribu kusakinisha programu hatari ambazo zinaiba au kufuta maelezo kwenye Mac yako (kwa mfano picha, manenosiri, ujumbe, na kadi za mkopo).</translation> <translation id="2961695502793809356">Bofya kuenda mbele, shikilia kuona historia</translation> +<translation id="296216853343927883">Uwekaji wa chapa ya Google katika menyu</translation> <translation id="2963151496262057773">Programu-jalizi inayofuata imekwama: <ph name="PLUGIN_NAME" />Ungependa kuisimamisha?</translation> <translation id="2963783323012015985">Kibodi ya Kituruki</translation> <translation id="2964193600955408481">Lemaza Wi-Fi</translation> @@ -1427,6 +1429,16 @@ <translation id="3025729795978504041">Bofya kulia kwenye kitufe kilicho juu ili uangalie watu wengine.</translation> <translation id="3026050830483105579">Kila kitu kiko hapa.</translation> <translation id="302620147503052030">Onyesha kitufe</translation> +<translation id="302781076327338683">Pakia upya hatua ya kupuuza akiba</translation> +<translation id="3030243755303701754">Mtumiaji anayesimamiwa anaweza kuvinjari wavuti ukimwongoza. Ukiwa msimamizi wa mtumiaji anayesimamiwa katika Chrome, unaweza: + + • kuruhusu au kuzuia tovuti fulani, + • kukagua tovuti ambazo mtumiaji anayesimamiwa ametembelea, na + • kudhibiti mipangilio mingine. + +Kuunda mtumiaji anayesimamiwa hakufungui Akaunti ya Google, alamisho, historia ya kuvinjari na mapendeleo yake mengine hayatapatikana kwenye vifaa vingine vilivyo na Usawazishaji wa Chrome. Baada ya kuunda mtumiaji mpya anayesimamiwa, unaweza kudhibiti mipangilio yake wakati wowote, kutoka kifaa chochote, katika <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Tembelea <ph name="BEGIN_LINK" />Kituo chetu cha Usaidizi<ph name="END_LINK" /> upate maelezo zaidi.</translation> <translation id="3031417829280473749">Wakala X</translation> <translation id="3031557471081358569">Chagua vitu vya kuingiza:</translation> <translation id="3033332627063280038">Washa utekelezaji wa kimajaribio wa Cache-Control: agizo la kutangazwa kuwa sahihi tena muda ukiwa umekwisha. Hii inaruhusu seva kubainisha kuwa baadhi ya rasilimali zinaweza kutangazwa kuwa sahihi katika hali ya chini chini ili kuboresha muda wa kutumika.</translation> @@ -1643,7 +1655,6 @@ <translation id="3324301154597925148">Je, Huu ndio Ukurasa wa Utafutaji Uliokuwa Ukitarajia?</translation> <translation id="3324684065575061611">(Imelemazwa na sera ya biashara)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> inabanwa...</translation> -<translation id="3330206034087160972">Ondoka kwenye Modi ya Uwasilishaji</translation> <translation id="3330686263988132416">Kijajuu asili cha WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Washa hali ya skrini iliyoangaziwa. Hali hii inageuza picha ya skrini kimlalo.</translation> @@ -1688,6 +1699,7 @@ <translation id="3392020134425442298">Rejesha faili hasidi</translation> <translation id="3394150261239285340"><ph name="HOST" /> inataka kutumia kamera na kipazasauti chako.</translation> <translation id="3394279550557729862">Washa matumizi ya arifa za asili na kituo cha arifa kwenye mfumo ambapo hizi zinapatikana.</translation> +<translation id="3394862755749546286">Huzima maudhui ya pamoja (ya Android na kompyuta ya mezani) yanayosubiri kushughulikwa kwenye Android.</translation> <translation id="3396331542604645348">Printa iliyochaguliwa haipatikani au haijasakinishwa vizuri. Angalia printa yako au ujaribu kuchagua printa nyingine.</translation> <translation id="3399597614303179694">Kibodi ya Kimasedonia</translation> <translation id="3401130144947259741">Ikiwashwa, matukio ya kufuatilia yatahamishwa hadi kwenye Ufuatiliaji wa Matukio ya Windows (ETW) kisha yanaweza kupigwa picha kwa zana kama vile UIForETW au Xperf.</translation> @@ -1898,7 +1910,6 @@ <translation id="367645871420407123">acha tupu ukitaka kuweka nenosiri msingi kwenye thamani ya picha ya jaribio la chaguo-msingi</translation> <translation id="3678156199662914018">Kiendelezi: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Kibodi ya Kimalta</translation> -<translation id="3680173818488851340">iframe za kipaumbele cha chini.</translation> <translation id="3683524264665795342">Ombi la <ph name="APP_NAME" /> la Kushiriki Skirini</translation> <translation id="3685122418104378273">Usawazishaji wa Hifadhi ya Google umezimwa kwa chaguo-msingi wakati wa kutumia data ya kifaa cha mkononi.</translation> <translation id="3685387984467886507">Kumbuka uamuzi wa kuendelea kupitia hitilafu za SSL kwa muda fulani uliobainishwa.</translation> @@ -1947,6 +1958,7 @@ <translation id="3741158646617793859">Sasa <ph name="DEVICE_NAME" /> itaonekana katika Admin Console</translation> <translation id="3741243925913727067">Hifadhi nakala ya picha na video za kifaa chako cha kuhifadhia data kwenye Hifadhi ya Google.</translation> <translation id="3743492083222969745">Washa/Zima chaguo la kuandika kwa ishara katika ukurasa wa mipangilio kwa kibodi pepe.</translation> +<translation id="3744111561329211289">Usawazishaji wa chini chini</translation> <translation id="3749289110408117711">Jina la faili</translation> <translation id="3751427701788899101">Muunganisho umepotea</translation> <translation id="3751522270321808809">Huenda tovuti hii ikajaribu kukulaghai ili iibe maelezo yako (kwa mfano: manenosiri, ujumbe, au kadi za malipo).</translation> @@ -2261,6 +2273,7 @@ <translation id="4218259925454408822">Ingia katika akaunti nyingine</translation> <translation id="4219614746733932747">Ikiwashwa, Blink hutumia utaratibu wake wa kukuza ili kupunguza maudhui ya kifaa cha kigezo cha kipimo.</translation> <translation id="4220865787605972627">Ruhusu upimaji wa rangi ya onyesho ikiwa skirini inatumia kipengee.</translation> +<translation id="4232692576734035989">Hali ya utendaji wa majaribio wa hali ya juu ambapo fremu za tovuti zote zimewekwa katika mchakato tofauti na hati ya juu. Katika hali hii, fremu kutoka tovuti nyingine tofauti zitaruhusiwa kushiriki machakato.</translation> <translation id="4235200303672858594">Skrini Nzima</translation> <translation id="4235813040357936597">Ongeza akaunti ya <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> haiwezi kuonyeshwa katika lugha hii</translation> @@ -2426,6 +2439,7 @@ <translation id="4509017836361568632">Tupa picha</translation> <translation id="4509345063551561634">Mahali:</translation> <translation id="4514542542275172126">Sanidi mtumiaji mpya anayesimamiwa</translation> +<translation id="4514914692061505365">Lazimisha matumizi ya kitafsiri cha haraka cha Subzero cha PNaCl kwa faili zote za pexe.</translation> <translation id="4518677423782794009">Je, Chrome inaacha kufanya kazi, inaonyesha kurasa za mwazo zisizo za kawaida, pau za vidhibiti, au matangazo yasiyotarajiwa usiyoweza kuyaondoa, au kubadilisha hali yako ya kuvinjari? Unaweza kutatua tatizo hilo kwa kuendesha Zana ya Kusafisha Chrome.</translation> <translation id="452039078290142656">vifaa visivyojulikana kutoka kwa <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Maelezo</translation> @@ -2474,6 +2488,7 @@ <translation id="4595560905247879544">Programu na viendelezi vinaweza kubadilishwa na msimamizi pekee (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Kibadilishaji cha EMF</translation> <translation id="4602466770786743961">Ruhusu <ph name="HOST" /> ifikie kamera na maikrofoni yako kila wakati</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Mtandao haujaunganishwa</translation> <translation id="4608500690299898628">Ta&futa</translation> <translation id="4610637590575890427">Je, ulitaka kwenda <ph name="SITE" />?</translation> @@ -2776,6 +2791,7 @@ <translation id="5062930723426326933">Imeshindwa kuingia katika akaunti, tafadhali unganisha kwenye mtandao na ujaribu tena.</translation> <translation id="5063180925553000800">PIN mpya</translation> <translation id="5067867186035333991">Uliza kama <ph name="HOST" /> inataka kufikia maikrofoni yako</translation> +<translation id="5068918910148307423">Usiruhusu tovuti zilizofungwa hivi punde zimalize kutuma na kupokea data</translation> <translation id="507075806566596212">Unakaribia kusajili <ph name="DEVICE_TYPE" /> hii kwenye Google ili uwashe uwezo wa kutafuta, kuondoa, na kufungua kifaa kwa mbali. Huku kutahitaji kuwasha tena. Je, ungependa kuendelea?</translation> <translation id="5072836811783999860">Onyesha alamisho zinazosimamiwa</translation> <translation id="5074318175948309511">Huenda ukurasa huu ukahitaji kupakiwa tena kabla mipangilio mipya ianze kutumika.</translation> @@ -2885,6 +2901,7 @@ <translation id="5227808808023563348">Tafuta maandishi ya awali</translation> <translation id="5228076606934445476">Kuna tatizo fulani katika kifaa. Ili kurekebisha hitilafu hii itakubidi uzime na kuwasha tena kifaa chako na ujaribu tena.</translation> <translation id="5228962187251412618">Ukaguaji wa mtandaoni pekee</translation> +<translation id="5229622432348746578">Zima kipengele cha Kushiriki Sauti Kwenye Kompyuta ya Mezani</translation> <translation id="5230516054153933099">Dirisha</translation> <translation id="5232178406098309195">Unapotumia amri za sauti, kama vile "Ok Google" au kugusa aikoni ya maikrofoni, Shughuli zako za faragha za Sauti na Kutamka huhifadhi baadhi ya sauti kwenye akaunti yako. Rekodi ya matamshi au sauti inayofuata, pamoja na sekunde chache kabla, itahifadhiwa.</translation> <translation id="523299859570409035">Vizuizi vya arifa</translation> @@ -3139,6 +3156,7 @@ <translation id="5557991081552967863">Washa Wi-Fi wakati wa Hali tuli</translation> <translation id="5558129378926964177">Kuza &Zaidi</translation> <translation id="556042886152191864">Kitufe</translation> +<translation id="5562781907504170924">Kompyuta kibao hii imeunganishwa kwenye Kifaa cha Bluetooth.</translation> <translation id="5565871407246142825">Kadi za malipo</translation> <translation id="5567989639534621706">Akiba za programu</translation> <translation id="5568069709869097550">Siwezi kuingia</translation> @@ -3298,6 +3316,7 @@ <translation id="5803531701633845775">Chagua vifungu kutoka nyuma, bila kusogeza kishale</translation> <translation id="5804241973901381774">Idhini</translation> <translation id="580571955903695899">Panga upya kwa Kichwa</translation> +<translation id="5808982448801399019">Imeshindwa Kuidhinisha</translation> <translation id="580961539202306967">Niulize tovuti inapotaka kunitumia ujumbe wa programu hata wakati siitumii (imependekezwa)</translation> <translation id="5815645614496570556">Anwani X.400</translation> <translation id="5817397429773072584">Kichina cha Jadi</translation> @@ -3569,6 +3588,7 @@ <translation id="6243774244933267674">Seva haipatikani.</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Sasisho iko tayari</translation> +<translation id="6248400709929739064">Washa manukuu</translation> <translation id="6248988683584659830">Mipangilio ya Utafutaji</translation> <translation id="6251870443722440887">Mishikilio ya GDI</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> Sheria na Masharti</translation> @@ -3593,6 +3613,7 @@ <translation id="6277105963844135994">Muda wa Mtandao Umekwisha</translation> <translation id="6277518330158259200">Piga Picha ya Skrini</translation> <translation id="6279183038361895380">Bonyeza |<ph name="ACCELERATOR" />| ili kishale kionekane</translation> +<translation id="6280215091796946657">Ingia kwa kutumia akaunti tofauti</translation> <translation id="6281743458679673853">Jaribio la API kuakisi sehemu ya kutazamia muundo. Hii itafanya sifa za window.scroll kulingana na muundo wa sehemu ya kutazamia.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Printa mpya kwenye mtandao wako}other{Printa mpya kwenye mtandao wako}}</translation> <translation id="6285395082104474418">Treya ya hali inakuonyesha hali ya sasa ya mtandao wako, betri, na mambo mengine.</translation> @@ -3674,6 +3695,9 @@ <translation id="6418160186546245112">Kurejesha toleo lililosakinishwa la <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Ondoa upatikanaji wa programu zote kabisa</translation> <translation id="6418505248408153264">Washa kipengele cha historia ya Usanifu Bora</translation> +<translation id="6419288379019356534">Kifaa hiki kinadhibitiwa na <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Tafadhali bofya "Inayofuata" ili uendelee kuingia katika akaunti yako ya <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">wa Ulaya ya Kati</translation> <translation id="6420676428473580225">Ongeza kwenye Eno-kazi</translation> <translation id="6422329785618833949">Picha imepinduliwa</translation> @@ -3834,7 +3858,6 @@ <translation id="6662016084451426657">Hitilafu ya Ulinganishaji: Tafadhali wasiliana na msimamizi ili kuwezesha ulinganishaji.</translation> <translation id="6663792236418322902">Nenosiri ulilochagua litahitajika ili kurejesha upya faili hii baadaye. Tafadhali inakili katika eneo salama.</translation> <translation id="6664237456442406323">Kwa bahati mbaya, kompyuta yako imesanidiwa na kitambulisho cha maunzi kilichoharibika. Hii inazuia Chrome OS isisasishe na sasisho za usalama za hivi karibuni na kompyuta yako <ph name="BEGIN_BOLD" />inaweza ikawa hatarini kutokana na mashambulizi hasidi<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Hupunguza kipaumbele cha kupakia rasilimali za iframe.</translation> <translation id="6666647326143344290">kwa Akaunti Google yako.</translation> <translation id="6675665718701918026">Kifaa cha kuonyeshea kimeunganishwa</translation> <translation id="6677037229676347494">Kitambulisho kinachotarajiwa "<ph name="EXPECTED_ID" />", Kitambulisho kilichoko "<ph name="NEW_ID" />".</translation> @@ -3927,6 +3950,7 @@ <translation id="6825883775269213504">Kirusi</translation> <translation id="6827236167376090743">Video hii itaendelea kucheza bila kukoma.</translation> <translation id="6828153365543658583">Zuia kuingia kwa watumiaji wafuatao:</translation> +<translation id="6828434191343384461">Data uliyochagua imeondolewa kwenye Chrome na kwenye vifaa vilivyosawazishwa. Huenda Akaunti yako ya Google ina aina nyingine za historia ya kuvinjari kama vile utafutaji na shughuli kutoka huduma nyingine za Google katika <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Imeshindwa kuweka mipangilio ya masasisho ya kiotomatiki kwa watumiaji wote (hitilafu ya kutoweka vipengele vya kabla vinayohitajika: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Pata usaidizi wa <ph name="DEVICE_TYPE" /> yako.</translation> <translation id="6829270497922309893">Jisajili katika shirika lako</translation> @@ -4006,6 +4030,7 @@ <translation id="6965382102122355670">Sawa</translation> <translation id="6965648386495488594">Lango</translation> <translation id="6965978654500191972">Kifaa</translation> +<translation id="6969104364835835175">Lazimisha Subzero ya PNaCl</translation> <translation id="6970230597523682626">Kibulgaria</translation> <translation id="6970480684834282392">Aina ya kuanzisha</translation> <translation id="6970856801391541997">Chapisha Kurasa Mahsusi</translation> @@ -4091,10 +4116,12 @@ <translation id="7057058088140140610">Kadi za mikopo na anwani zinazotumia Google Payments</translation> <translation id="7059858479264779982">Weka kwenye uzinduzi otomatiki</translation> <translation id="7061692898138851896">Hifadhi manenosiri kiotomatiki</translation> +<translation id="7062222374113411376">Ruhusu tovuti zilizofungwa hivi punde zimalize kutuma na kupokea data (inapendekezwa)</translation> <translation id="7063129466199351735">Inachakata mikato...</translation> <translation id="7065223852455347715">Kifaa hiki kimefungwa katika hali ambayo inazuia usajili wa biashara. Ikiwa unataka kusajili kifaa unahitaji kupitia urejeshaji wa kifaa kwanza.</translation> <translation id="7065534935986314333">Kuhusu Mfumo</translation> <translation id="7066944511817949584">Imeshindwa kuunganisha kwenye "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Usiwahi kuonyesha kiputo hiki tena.</translation> <translation id="7070804685954057874">Ingizo la moja kwa moja</translation> <translation id="7072010813301522126">Jina la njia ya mkato</translation> <translation id="7072025625456903686">Ruhusu zote au badilisha kukufaa</translation> @@ -4367,6 +4394,7 @@ <translation id="7489605380874780575">Kagua ustahiki</translation> <translation id="749028671485790643">Mtu <ph name="VALUE" /></translation> <translation id="7491962110804786152">kichupo</translation> +<translation id="7493386493263658176">Huenda kiendelezi cha <ph name="EXTENSION_NAME" /> kikahifadhi maandishi yote unayocharaza, ikiwemo data ya kibinafsi kama vile manenosiri na nambari za kadi za mikopo. Je, ungependa kutumia kiendelezi hiki?</translation> <translation id="7495778526395737099">Umesahau nenosiri lako la zamani?</translation> <translation id="7503191893372251637">Aina ya Cheti cha Netscape</translation> <translation id="7503821294401948377">Aikoni '<ph name="ICON" />' haikuweza kupakiwa kwa kitendo cha kivinjari.</translation> @@ -4418,6 +4446,7 @@ <translation id="756445078718366910">Fungua Dirisha la Kivinjari</translation> <translation id="7564847347806291057">Komesha shughuli</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Data ya Chrome imefutwa</translation> <translation id="7568790562536448087">Inasasisha</translation> <translation id="7573172247376861652">Chaji ya Betri</translation> <translation id="7576032389798113292">6x4</translation> @@ -4547,6 +4576,7 @@ <translation id="7786207843293321886">Ondosha Mgeni</translation> <translation id="7786889348652477777">Pakia upya Programu</translation> <translation id="7787129790495067395">Unatumia kaulisiri kwa sasa. Ikiwa umesahau kaulisiri yako, unaweza kuweka upya usawazishaji ili ufute data yako kutoka kwenye seva za Google kwa kutumia Dashibodi ya Google.</translation> +<translation id="7787308148023287649">Onyesha kwenye skrini nyingine</translation> <translation id="7788080748068240085">Ili uhifadhi "<ph name="FILE_NAME" />" nje ya mtandao lazima uongeze nafasi ya <ph name="TOTAL_FILE_SIZE" /> ya ziada:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />banua faili ambazo huzihitaji tena ili ufikie nje ya mtandao<ph name="MARKUP_3" /> <ph name="MARKUP_4" />futa faili kutoka kwa folda yako ya Vipakuliwa<ph name="MARKUP_5" /></translation> @@ -4615,6 +4645,7 @@ <translation id="7878999881405658917">Google ilituma arifa kwenye simu hii. Fahamu kuwa ukiwa na Bluetooth, simu yako inaweza kufungua <ph name="DEVICE_TYPE" /> kutoka umbali wa zaidi ya futi 100. Katika hali ambazo hili linaweza kuwa tatizo, unaweza <a>kuzima kipengele hiki kwa muda</a>.</translation> <translation id="7879478708475862060">Fuata programu ya kuingiza data</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" huongeza programu na viendelezi hivi:</translation> +<translation id="7881969471599061635">Zima manukuu</translation> <translation id="7884988936047469945">Vipengele vya ufikiaji wa majaribio</translation> <translation id="7885253890047913815">Printa ulizotumia hivi karibuni</translation> <translation id="7885283703487484916">fupi mno</translation> @@ -4981,6 +5012,7 @@ <translation id="839736845446313156">Sajili</translation> <translation id="8398790343843005537">Pata simu yako</translation> <translation id="8398877366907290961">Endelea licha ya hayo</translation> +<translation id="8399276228600040370">Ingia kwa kutumia akaunti yako iliyohifadhiwa na <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Kikasha kaguzi kilichoondolewa tiki</translation> <translation id="8408402540408758445">Matokeo ya utafutaji wa kuleta kabla</translation> <translation id="8410073653152358832">Tumia simu hii</translation> @@ -5067,6 +5099,7 @@ <translation id="8545211332741562162">Inawezesha kurasa za wavuti kutumia vipengele vya JavaScript vya jaribio.</translation> <translation id="8545575359873600875">Samahani, nenosiri lako halikuweza kuthibitishwa. Huenda mdhibiti wa mtumiaji huyu anayesimamiwa alibadilisha nenosiri hivi karibuni. Ikiwa ndivyo, nenosiri jipya litatumiwa wakati ujao utakapoingia katika akaunti. Jaribu kutumia nenosiri lako la zamani.</translation> <translation id="8546306075665861288">Akiba ya picha</translation> +<translation id="854653344619327455">Alama hii ikiteuliwa, dirisha la kiteua kushiriki kwenye kompyuta ya mezani halitamruhusu mtumiaji kuchagua kushiriki sauti.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Herufi</translation> <translation id="855081842937141170">Bandikiza kichupo</translation> @@ -5097,6 +5130,7 @@ <translation id="8589311641140863898">API za Kiendelezi cha Jaribio</translation> <translation id="8590375307970699841">Weka masasisho ya kiotomatiki</translation> <translation id="8592071947729879125">Zuia ruhusa za iframe.</translation> +<translation id="8592125506633137593">Kutenga hati ya juu</translation> <translation id="8594787581355215556">Umeingia kama <ph name="USER_EMAIL_ADDRESS" />. Dhibiti data yako iliyosawazishwa kwenye <ph name="BEGIN_LINK" />Dashibodi ya Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Faili Maalum</translation> <translation id="8596785155158796745">Maikrofoni haipatikani kwa sasa. <ph name="BEGIN_LINK" />Dhibiti maikrofoni<ph name="END_LINK" /></translation> @@ -5169,6 +5203,7 @@ <translation id="8688579245973331962">Je, huoni jina lako?</translation> <translation id="8688644143607459122">Kwa kubofya Endelea unakubali kutumia Google Payments. Ili kukulinda dhidi ya ulaghai, maelezo kuhusu kompyuta yako (pamoja na mahali ilipo) yatashirikiwa na Google Payments.</translation> <translation id="8689102680909215706">Kiendelezi "<ph name="EXTENSION_NAME" />" kilisakinishwa kwa mbali.</translation> +<translation id="868926756781121513">Kushiriki kwenye Kompyuta ya Mezani kwa kutumia chanzo cha kichupo</translation> <translation id="8689341121182997459">Inak</translation> <translation id="8690754533598178758">Udhibiti wa maikrofoni za Adobe Flash Player ni tofauti.</translation> <translation id="8691686986795184760">(Imewezeshwa na sera ya biashara)</translation> @@ -5212,6 +5247,7 @@ <translation id="8737685506611670901">Fungua viungo vya <ph name="PROTOCOL" /> badala ya <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Boresha nafasi ya ishara ya mguso ili kufidia miguso iliyo na msongo mbaya ikilinganishwa na kipanya.</translation> +<translation id="8741995161408053644">Huenda Akaunti yako ya Google ina aina nyingine za historia ya kuvinjari kwenye <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Onyesha chaguo zilizopanuliwa za kuingiza data katika rafu.</translation> <translation id="874420130893181774">Mbinu ya kuingiza data ya Pinyin ya Jadi</translation> <translation id="8744525654891896746">Chagua ishara kwa mtumiaji huyu anayesimamiwa</translation> @@ -5225,6 +5261,7 @@ <translation id="8757640015637159332">Ingia kipindi cha umma</translation> <translation id="8757742102600829832">Chagua Chromebox ya kuunganisha</translation> <translation id="8757803915342932642">Kifaa kwenye Vifaa vya Wingu vya Google</translation> +<translation id="8758895886513993540">Kipengele hiki hudhibiti iwapo watumiaji wanaweza kuchagua kichupo cha kushiriki kwenye kompyuta ya mezani.</translation> <translation id="8759408218731716181">Haiwezi kusanida uwezo wa kuingia katika akaunti nyingi kwa wakati mmoja</translation> <translation id="8759753423332885148">Pata maelezo zaidi.</translation> <translation id="8761567432415473239">Kuvinjari Salama kwa Google <ph name="BEGIN_LINK" />kulipata programu zinazodhuru<ph name="END_LINK" /> kwenye <ph name="SITE" /> hivi karibuni.</translation> @@ -5435,6 +5472,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Kipanya cha USB kimeunganishwa</translation> <translation id="9076523132036239772">Samahani, barua pepe au nenosiri lako havingeweza kuthibitishwa. Jaribu kuunganisha kwenye mtandao kwanza.</translation> +<translation id="9077132661879924646">Huzima maudhui ya pamoja yanayosubiri kushughulikwa kwenye Android.</translation> <translation id="907841381057066561">Imeshindwa kuunda faili ya muda ya zip wakati wa kufungasha.</translation> <translation id="9083147368019416919">Haijafaulu kuondoa usajili</translation> <translation id="9084064520949870008">Fungua kama Dirisha</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index cb4ac1fa..d2b4c1a 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">படத்தில் ஒரு சதுர பகுதியைத் தேர்ந்தெடுக்கவும்.</translation> <translation id="1697532407822776718">எல்லாவற்றையும் அமைத்துவிட்டீர்கள்!</translation> +<translation id="1697988819212986149">Google சேவைகளால் வழங்கப்படும் சூழல் மெனு உருப்படிகளுக்கு அடுத்துள்ள Google ஐகானைக் காட்டும்.</translation> <translation id="1699274548822076330">இது பதிவேற்ற-url-தடமறி கொடியுடன் சேர்ந்து பயன்படுத்தப்பட வேண்டும். எச்சரிக்கை: இயக்கப்படும் போது, ஒவ்வொரு வழிசெலுத்தலுக்கும் செயல்திறன் தரவை Chrome பதிவுசெய்து பதிவேற்ற-url-தடமறி கொடியால் குறிப்பிடப்பட்ட URLக்கு அதனை ஏற்றும். தடமறிதலில் நீங்கள் செல்லும் இணையதளங்களின் தலைப்புகள், URLகள் போன்ற தனிப்பட்ட அடையாளத் தகவல் (PII) சேர்க்கப்படலாம்.</translation> <translation id="1699395855685456105">வன்பொருள் திருத்தம்:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">உங்களின் ஒத்திசை சொற்றொடரைப் புதுப்பிக்கவும்.</translation> <translation id="1788636309517085411">இயல்புநிலையைப் பயன்படுத்து</translation> <translation id="1789575671122666129">பாப் அப்கள்</translation> -<translation id="1790550373387225389">விளக்கக்காட்சி பயன்முறையில் உள்நுழை</translation> <translation id="1792705092719258158">மிரர்டு திரைப் பயன்முறையை இயக்கு.</translation> <translation id="1793119619663054394">கணினியிலிருந்து "<ph name="PROFILE_NAME" />" மற்றும் அவருடன் தொடர்புடைய எல்லா Chrome தரவையும் அகற்ற விரும்புகிறீர்களா? இதனை மீட்டமைக்க முடியாது.</translation> <translation id="179767530217573436">கடந்த 4 வாரங்கள்</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">உங்கள் சாதனம் மற்றும் பாகங்களின் குறிப்பிட்ட அமைப்புகளை மாற்றவும்.</translation> <translation id="2673135533890720193">உங்கள் உலாவல் வரலாற்றைப் படித்தல்</translation> <translation id="2673589024369449924">இந்தப் பயனருக்கு ஒரு டெஸ்க்டாப் குறுக்குவழியை உருவாக்கு</translation> +<translation id="2675358154061544447">கிராஸ் சைட் iframesஐத் தனித்தனிச் செயல்பாடுகளில் ரெண்டரிங் செய்வதற்கான உயர் சோதனை ஆதரவு. இந்தப் பயன்முறையில், ஆவணங்கள் ஒரே இணையதளத்திலிருந்து வந்திருந்தால் மட்டுமே, அவை ரெண்டரர் செயல்பாட்டைப் பகிரும்.</translation> <translation id="2676946222714718093">இதில் இயங்குகிறது</translation> <translation id="2678063897982469759">மீண்டும் இயக்கு</translation> <translation id="2678246812096664977">எல்லா செருகுநிரல்களுக்கும்</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">எப்படிக் கடவுச்சொல் நிர்வாகி ஒத்திசைவு நற்சான்றிற்காக தன்னிரப்பியைச் செயல்படுத்துகிறது.</translation> <translation id="29611076221683977"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> தளத்திலிருக்கும் தாக்குபவர்கள், உங்கள் தகவலைத் (எடுத்துக்காட்டாக, படங்கள், கடவுச்சொற்கள், செய்திகள் மற்றும் கிரெடிட் கார்டுகள்) திருடக்கூடிய அல்லது நீக்கக்கூடிய தீங்கிழைக்கும் நிரல்களை உங்கள் Mac இல் நிறுவ முயற்சித்திருக்கலாம்.</translation> <translation id="2961695502793809356">அடுத்தப் பக்கத்திற்கு செல்ல கிளிக் செய்க, வரலாற்றைக் காண அழுத்திக்கொண்டே இருங்கள்</translation> +<translation id="296216853343927883">சூழல் மெனுவில் Google பிராண்டிங்</translation> <translation id="2963151496262057773">பின்வரும் செருகுநிரல் பதிலளிக்கவில்லை: <ph name="PLUGIN_NAME" />நிறுத்தவா?</translation> <translation id="2963783323012015985">டர்கிஷ் விசைப்பலகை</translation> <translation id="2964193600955408481">வைஃபையை முடக்கு</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">மற்றவர்களைப் பார்க்க, மேலேயுள்ள பொத்தானை வலது கிளிக் செய்யவும்.</translation> <translation id="3026050830483105579">இவை அனைத்தும் இங்கே உள்ளது.</translation> <translation id="302620147503052030">பொத்தானைக் காட்டு</translation> +<translation id="302781076327338683">தற்காலிகச் சேமிப்பைப் புறக்கணித்து மீண்டும் ஏற்று</translation> +<translation id="3030243755303701754">கண்காணிக்கப்படும் பயனர் உங்கள் வழிகாட்டுதல் மூலம் இணையத்தில் உலாவலாம். கண்காணிக்கப்படும் பயனரின் நிர்வாகியாக, நீங்கள் Chrome இல் பின்வருவனவற்றைச் செய்யலாம்: + + • குறிப்பிட்ட இணையதளங்களை அனுமதிக்கலாம் அல்லது தடைசெய்யலாம், + • கண்காணிக்கப்படும் பயனர் பார்வையிட்ட இணையதளங்களை மதிப்பாய்வு செய்யலாம், + • பிற அமைப்புகளை நிர்வகிக்கலாம். + +கண்காணிக்கப்படும் பயனரை உருவாக்குவதால் Google கணக்கை உருவாக்கப்படாது, மேலும் அவர்களின் புக்மார்க்குகள், உலாவல் வரலாறு மற்றும் பிற விருப்பத்தேர்வுகள் ஆகியவை Chrome ஒத்திசைவு மூலம் பிற சாதனங்களில் ஒத்திசைக்கப்படாது. புதிய கண்காணிக்கப்படும் பயனரை உருவாக்கிய பின், எந்தச் சாதனத்திலும் எப்போது வேண்டுமானாலும் அவர்களின் அமைப்புகளை <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> இல் நிர்வகிக்கலாம். + +மேலும் தகவலுக்கு, எங்கள் <ph name="BEGIN_LINK" />உதவி மையத்திற்குச்<ph name="END_LINK" /> செல்லவும்.</translation> <translation id="3031417829280473749">ஏஜென்ட் X</translation> <translation id="3031557471081358569">இறக்குமதிக்கு உருப்படிகளைத் தேர்ந்தெடு</translation> <translation id="3033332627063280038">Cache-Control: stale-while-revalidate கட்டளையின் சோதனை செயலாக்கத்தை இயக்கும். இது தாமதநிலையை மேம்படுத்த, பின்புலத்தில் சில மூலங்களை மறுசரிபார்ப்பு செய்யப்படுவதைக் குறிக்க சேவையகங்களை அனுமதிக்கிறது.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">நீங்கள் எதிர்பார்த்தது இந்தத் தேடல் பக்கத்தைத்தானா?</translation> <translation id="3324684065575061611">(நிறுவனக் கொள்கையால் முடக்கப்பட்டது)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> ஐ ஜிப் செய்கிறது...</translation> -<translation id="3330206034087160972">விளக்கக்காட்சி பயன்முறையில் இருந்து வெளியேறு</translation> <translation id="3330686263988132416">WebRTC ஸ்டன் ஆர்ஜின் மேற்தலைப்பு</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">மிரர்டு திரைப் பயன்முறையை இயக்கவும். இந்தப் பயன்முறைத் திரையின் படத்தைக் கிடைமட்டமாக திருப்பும்.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">தீங்கிழைக்கும் கோப்பை மீட்டெடு</translation> <translation id="3394150261239285340">உங்கள் கேமராவையும் மைக்ரோஃபோனையும் பயன்படுத்த <ph name="HOST" /> கேட்கிறது.</translation> <translation id="3394279550557729862">சொந்த அறிவிப்பு டோஸ்ட்களையும் இவை கிடைக்கக்கூடிய இயங்குதளங்களில் உள்ள அறிவிப்பு மையத்தையும் பயன்படுத்துவதற்கான ஆதரவை இயக்கு.</translation> +<translation id="3394862755749546286">Android இல் ஒருங்கிணைந்த (Android மற்றும் டெஸ்க்டாப்) மீடியா பைப்லைனை முடக்கும்.</translation> <translation id="3396331542604645348">தேர்ந்தெடுத்த அச்சுப்பொறியானது இல்லை அல்லது சரியாக நிறுவப்படவில்லை. பிரிண்டரைச் சரிபார்க்கவும் அல்லது மற்றொரு பிரிண்டரைத் தேர்ந்தெடுக்கவும்.</translation> <translation id="3399597614303179694">மாஸிடோனியன் விசைப்பலகை</translation> <translation id="3401130144947259741">இயக்கப்பட்டால், பதிவெடுக்கப்படும் நிகழ்வுகள் Windowsக்கான நிகழ்வுப் பதிவெடுத்தலுக்கு (ETW) ஏற்றுமதி செய்யப்பட்டு, UIForETW அல்லது Xperf போன்ற கருவிகள் மூலம் பயன்படுத்தப்படலாம்.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">மூல கடவுச்சொல்லை இயல்புநிலை சோதனைப் பட மதிப்பாக அமைக்க விரும்பினால், வெறுமையாக விடவும்</translation> <translation id="3678156199662914018">நீட்டிப்பு: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">மால்டீஸ் விசைப்பலகை</translation> -<translation id="3680173818488851340">குறைவான முன்னுரிமை கொண்ட iframes.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> திரையின் பகிர்தல் கோரிக்கை</translation> <translation id="3685122418104378273">மொபைல் தரவைப் பயன்படுத்தும்போது, இயல்புநிலையாகவே Google இயக்கக ஒத்திசைவு முடக்கப்பட்டுள்ளது.</translation> <translation id="3685387984467886507">குறிப்பிட்ட நேரத்தில், SSL பிழைகள் மூலம் தொடர முடிவுகளை நினைவில் வைத்திரு.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859">இப்போது <ph name="DEVICE_NAME" />, Admin Console இல் தோன்றும்</translation> <translation id="3741243925913727067">மீடியா சாதனத்தின் படங்களையும் வீடியோக்களையும் Google இயக்ககத்தில் காப்புப் பிரதி எடுக்கும்.</translation> <translation id="3743492083222969745">விர்ச்சுவல் விசைப்பலகைக்கான அமைப்புகள் பக்கத்தில் சைகைத் தட்டச்சு விருப்பத்தை இயக்கு/முடக்கு.</translation> +<translation id="3744111561329211289">பின்புல ஒத்திசைவு</translation> <translation id="3749289110408117711">கோப்பு பெயர்</translation> <translation id="3751427701788899101">இணைப்பு துண்டிக்கப்பட்டது</translation> <translation id="3751522270321808809">உங்கள் தகவலைத் திருட (எடுத்துக்காட்டுகள்: கடவுச்சொற்கள், செய்திகள் அல்லது கிரெடிட் கார்டுகள்), இந்தத் தளம் உங்களை ஏமாற்ற முயற்சிக்கலாம்.</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">இன்னொரு கணக்கில் உள்நுழைக</translation> <translation id="4219614746733932747">இயக்கப்பட்டால், சாதன அளவிடல் காரணிக்கு உள்ளடக்கத்தை அளவிட அதன் பெரிதாக்கல் நுட்பத்தை Blink பயன்படுத்தும்.</translation> <translation id="4220865787605972627">காட்சியானது அம்சத்தை ஆதரித்தால் அதன் வண்ணத்தைத் அளவுத்திருத்தம் செய்வதை அனுமதிக்கும்.</translation> +<translation id="4232692576734035989">உயர் சோதனை செயல்திறன் பயன்முறை (கிராஸ் சைட் iframes, சிறந்த ஆவணத்திலிருந்து தனித்தனிச் செயல்பாடுகளில் வைக்கப்படும்). இந்தப் பயன்முறையில், செயல்முறையைப் பகிர மூன்றாம் தரப்புத் தளங்களிலிருந்து iframes அனுமதிக்கப்படும்.</translation> <translation id="4235200303672858594">திரை முழுவதும்</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> க்கான கணக்கைச் சேர்</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ஐ இந்த மொழியில் காண்பிக்க முடியாது</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">புகைப்படத்தை நிராகரி</translation> <translation id="4509345063551561634">இருப்பிடம்:</translation> <translation id="4514542542275172126">புதிய கண்காணிக்கப்படும் பயனரை அமை</translation> +<translation id="4514914692061505365">எல்லா pexe கோப்புகளிலும் PNaCl இன் விரைவு சப்ஜீரோ மொழிபெயர்ப்பாளரின் உபயோகத்தைக் கட்டாயமாக்கும்.</translation> <translation id="4518677423782794009">Chrome செயலிழக்கிறதா, வழக்கத்திற்கு மாறான துவக்கப் பக்கங்கள், கருவிப்பட்டிகள் தோன்றுகின்றனவா, தவிர்க்கமுடியாத திடீர் விளம்பரங்களால் தொல்லையா, உங்கள் உவாவல் அனுபவத்தில் மாற்றங்கள் உள்ளதா? Chrome சுத்திகரிப்புக் கருவியை இயக்கி இச்சிக்கல்களைத் தீர்க்கலாம்.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> வழங்கும் தெரியாத சாதனங்கள்</translation> <translation id="4522570452068850558">விவரங்கள்</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">பயன்பாடுகளையும் நீட்டிப்புகளையும் நிர்வாகியால் (<ph name="CUSTODIAN_NAME" />) மட்டுமே மாற்ற முடியும்.</translation> <translation id="4601242977939794209">EMF கன்வெர்ட்டர்</translation> <translation id="4602466770786743961">உங்கள் கேமராவையும் மைக்ரோஃபோனையும் அணுக <ph name="HOST" /> ஐ எப்போதும் அனுமதிக்கவும்</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">இணையத்துடன் இணைக்கப்படவில்லை</translation> <translation id="4608500690299898628">&கண்டுபிடி...</translation> <translation id="4610637590575890427"><ph name="SITE" /> க்கு செல்வதைக் குறித்தீர்களா?</translation> @@ -2784,6 +2799,7 @@ <translation id="5062930723426326933">உள்நுழைவில் தோல்வி, இணையத்துடன் இணைத்து மீண்டும் முயற்சிக்கவும்.</translation> <translation id="5063180925553000800">புதிய PIN:</translation> <translation id="5067867186035333991"><ph name="HOST" /> உங்கள் மைக்ரோஃபோனை அணுக விரும்புகிறதா எனக் கேட்கவும்</translation> +<translation id="5068918910148307423">தரவை அனுப்புவதையும் பெறுவதையும் முடிக்க சமீபத்தில் மூடப்பட்ட தளங்களை அனுமதிக்காதே</translation> <translation id="507075806566596212">தொலைநிலையிலிருந்து கண்டறிதல், தகவலை அழித்தல், பூட்டுதல் ஆகிய வசதிகளை சாதனத்தில் இயக்க, இந்த <ph name="DEVICE_TYPE" />ஐ Google இல் பதிவுசெய்யப் போகிறீர்கள். இதற்குச் சாதனத்தை மறுதொடக்கம் செய்ய வேண்டியதிருக்கும். தொடர விரும்புகிறீர்களா?</translation> <translation id="5072836811783999860">நிர்வகிக்கப்பட்ட புக்மார்க்குகளைக் காட்டு</translation> <translation id="5074318175948309511">புதிய அமைப்புகளைச் செயல்படுத்துவதற்கு முன், இந்தப் பக்கம் மீண்டும் ஏற்றப்பட வேண்டியிருக்கும்.</translation> @@ -2891,6 +2907,7 @@ <translation id="5227808808023563348">முந்தைய உரையைக் கண்டறி</translation> <translation id="5228076606934445476">சாதனத்தில் ஏதோ தவறு உள்ளது. இந்தப் பிழையிலிருந்து மீட்டமைக்க நீங்கள் சாதனத்தை மறுதொடக்கம் செய்து மீண்டும் முயற்சிக்கவும்.</translation> <translation id="5228962187251412618">ஆன்லைன் சரிபார்ப்பு மட்டுமே</translation> +<translation id="5229622432348746578">டெஸ்க்டாப் பகிர்வுக்கு ஆடியோவை முடக்கு</translation> <translation id="5230516054153933099">சாளரம்</translation> <translation id="5232178406098309195">"Ok Google" போன்ற ஆடியோ இயக்கக் கட்டளைகளைப் பயன்படுத்தும் போது அல்லது மைக்ரோஃபோன் ஐகானைத் தொடும் போது, உங்கள் தனிப்பட்ட குரல் மற்றும் ஆடியோ செயல்பாடானது, உங்கள் கணக்கில் குரல் மற்றும் பிற ஆடியோவைச் சேமிக்கிறது. கட்டளைகளைத் தொடரும் பேச்சு/ஆடியோ பதிவு மற்றும் அதற்கு முந்தைய சில வினாடிகளும் சேமிக்கப்படும்.</translation> <translation id="523299859570409035">அறிவிப்புகளின் விதிவிலக்குகள்</translation> @@ -3145,6 +3162,7 @@ <translation id="5557991081552967863">தூக்கப் பயன்முறையின் போதும், வைஃபையை இயக்கத்தில் வைத்திரு</translation> <translation id="5558129378926964177">Zoom &In</translation> <translation id="556042886152191864">பொத்தான்</translation> +<translation id="5562781907504170924">இந்தத் தாவல் புளூடூத் சாதனத்துடன் இணைக்கப்பட்டுள்ளது.</translation> <translation id="5565871407246142825">கிரெடிட் கார்டுகள்</translation> <translation id="5567989639534621706">பயன்பாட்டு தற்காலிக சேமிப்புகள்</translation> <translation id="5568069709869097550">உள்நுழைய முடியவில்லை</translation> @@ -3305,6 +3323,7 @@ <translation id="5803531701633845775">குறிப்பானை நகர்த்தாமல், பின்புறமிருந்து சொற்றொடர்களைத் தேர்வுசெய்க</translation> <translation id="5804241973901381774">அனுமதிகள்</translation> <translation id="580571955903695899">தலைப்பின்படி மறுவரிசைப்படுத்து</translation> +<translation id="5808982448801399019">அங்கீகரிக்க முடியவில்லை</translation> <translation id="580961539202306967">தளம் எனக்கு புஷ் செய்திகளை அனுப்ப விழையும் போது என்னிடம் கேள் (பரிந்துரைக்கப்பட்டது)</translation> <translation id="5815645614496570556">X.400 முகவரி</translation> <translation id="5817397429773072584">பாரம்பரிய சீனம்</translation> @@ -3574,6 +3593,7 @@ <translation id="6243774244933267674">சேவையகம் கிடைக்கவில்லை</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">புதுப்பிப்பு தயார்</translation> +<translation id="6248400709929739064">வசனங்களை இயக்கு</translation> <translation id="6248988683584659830">தேடல் அமைப்புகள்</translation> <translation id="6251870443722440887">GDI ஹேண்டில்ஸ்</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> சேவை விதிமுறைகள்</translation> @@ -3598,6 +3618,7 @@ <translation id="6277105963844135994">பிணைய நேரம் முடிந்தது</translation> <translation id="6277518330158259200">ஸ்கிரீன் ஷாட்டை எடு</translation> <translation id="6279183038361895380">உங்கள் சுட்டியைக் காட்ட |<ph name="ACCELERATOR" />| என்பதை அழுத்தவும்</translation> +<translation id="6280215091796946657">வேறொரு கணக்கு மூலம் உள்நுழைக</translation> <translation id="6281743458679673853">எல்லா APIகளும் தளவமைப்புக் காட்சிப்பகுதியைக் காட்டுவதற்கான பரிசோதனை. இது window.scroll பண்புகளை தளவமைப்புக் காட்சிப் பகுதியுடன் தொடர்புடையதாக்கும்.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{உங்கள் நெட்வொர்க்கில் புதிய பிரிண்டர் உள்ளது}other{உங்கள் நெட்வொர்க்கில் புதிய பிரிண்டர்கள் உள்ளன}}</translation> <translation id="6285395082104474418">நிலைத் தட்டானது உங்கள் பிணையம், பேட்டரி, மேலும் பலவற்றின் தற்போதைய நிலையைக் காட்டுகிறது.</translation> @@ -3679,6 +3700,9 @@ <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> இன் நிறுவப்பட்ட முந்தைய பதிப்பிற்கு மாற்றியமைக்கிறது</translation> <translation id="6418481728190846787">எல்லா பயன்பாடுகளுக்குமான அணுகலை நிரந்தரமாக அகற்று</translation> <translation id="6418505248408153264">மெட்டீரியல் வடிவ வரலாற்றை இயக்கு</translation> +<translation id="6419288379019356534">இந்தச் சாதனத்தை <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> நிர்வகிக்கிறது. + <ph name="LINE_BREAK" /> + உங்கள் <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> கணக்கில் உள்நுழைவதைத் தொடர, 'அடுத்து' என்பதைக் கிளிக் செய்யவும்.</translation> <translation id="6419902127459849040">சென்ட்ரல் யூரோப்பியன்</translation> <translation id="6420676428473580225">டெஸ்க்டாப்பில் சேர்க்கவும்</translation> <translation id="6422329785618833949">படம் புரட்டப்பட்டது</translation> @@ -3839,7 +3863,6 @@ <translation id="6662016084451426657">ஒத்திசைவுப் பிழை: ஒத்திசைவை இயக்க நிர்வாகியைத் தொடர்புகொள்க.</translation> <translation id="6663792236418322902">நீங்கள் தேர்வு செய்யும் கடவுச்சொல், இந்தக் கோப்பைப் பின்னர் மீட்டெடுப்பதற்கு தேவைப்படும். இதை ஒரு பாதுகாப்பான இருப்பிடத்தில் பதிவுசெய்க.</translation> <translation id="6664237456442406323">எதிர்பாராதவிதமாக, உங்கள் கணினியானது ஒரு தவறான வன்பொருள் ஐடியுடன் உள்ளமைக்கப்பட்டது. இதனால் சமீபத்திய பாதுகாப்பு திருத்தங்கள் மூலம் Chrome OS ஐப் புதுப்பிப்பதிலிருந்து தடுக்கும், உங்கள் கணினி <ph name="BEGIN_BOLD" />தீங்கிழைக்கும் தாக்குதல்களின்<ph name="END_BOLD" /> மூலம் பாதிக்கப்படலாம்.</translation> -<translation id="666541661050183336">iframe ஆதாரங்களின் ஏற்றுதல் முன்னுரிமையைக் குறைக்கும்.</translation> <translation id="6666647326143344290">Google கணக்கின் மூலமாக</translation> <translation id="6675665718701918026">சுட்டும் சாதனம் இணைக்கப்பட்டது</translation> <translation id="6677037229676347494">எதிர்பார்க்கப்பட்ட ID "<ph name="EXPECTED_ID" />", ஆனால் ID "<ph name="NEW_ID" />" ஆகும்.</translation> @@ -3932,6 +3955,7 @@ <translation id="6825883775269213504">ரஷ்யன்</translation> <translation id="6827236167376090743">இந்த வீடியோவானது தொடர்ந்து நீண்ட நேரம் இயங்கும்.</translation> <translation id="6828153365543658583">பின்வரும் பயனர்களுக்கு மட்டும் உள்நுழைவு என வரம்பிடு:</translation> +<translation id="6828434191343384461">தேர்ந்தெடுத்த தரவு Chrome மற்றும் ஒத்திசைக்கப்பட்ட சாதனங்களிலிருந்து அகற்றப்பட்டது. உங்கள் Google கணக்கு <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> எனும் தளத்தில் பிற Google சேவைகளிலிருந்து தேடல்கள், செயல்பாடு போன்ற உலாவல் வரலாறு தொடர்பான பிற தகவல்களைக் கொண்டிருக்கலாம்.</translation> <translation id="6828860976882136098">அனைத்து பயனர்களுக்கும் தானியங்கு புதுப்பிப்புகளை அமைக்க முடியவில்லை (ப்ரீஃபிளைட் செயலாக்கப் பிழை: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">உங்கள் <ph name="DEVICE_TYPE" /> இல் உதவி பெறவும்.</translation> <translation id="6829270497922309893">உங்கள் நிறுவனத்தில் பதிவுசெய்யவும்</translation> @@ -4012,6 +4036,7 @@ <translation id="6965382102122355670">சரி</translation> <translation id="6965648386495488594">போர்ட்</translation> <translation id="6965978654500191972">சாதனம்</translation> +<translation id="6969104364835835175">கட்டாய PNaCl சப்ஜீரோ</translation> <translation id="6970230597523682626">பல்கேரியன்</translation> <translation id="6970480684834282392">தொடங்கப்படும் வகை</translation> <translation id="6970856801391541997">குறிப்பிட்ட பக்கங்களை அச்சிடு</translation> @@ -4094,10 +4119,12 @@ <translation id="7057058088140140610">Google Paymentsஐப் பயன்படுத்தும் கிரெடிட் கார்டுகளும் முகவரிகளும்</translation> <translation id="7059858479264779982">தானியங்கு துவக்கியை அமை</translation> <translation id="7061692898138851896">கடவுச்சொற்களைத் தானாகச் சேமி</translation> +<translation id="7062222374113411376">தரவை அனுப்புவதையும் பெறுவதையும் முடிக்க சமீபத்தில் மூடப்பட்ட தளங்களை அனுமதி (பரிந்துரைத்தது)</translation> <translation id="7063129466199351735">குறுக்குவழிகளைச் செயல்படுத்துகிறது...</translation> <translation id="7065223852455347715">நிறுவன பதிவைத் தடுக்கும் பயன்முறையில் இந்தச் சாதனம் பூட்டப்பட்டுள்ளது. சாதனத்தைப் பதிவுசெய்ய விரும்பினால், முதலில் சாதனத்தை மீட்டெடுக்கவும்.</translation> <translation id="7065534935986314333">முறைமையைப் பற்றி</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" க்கு இணைப்பதில் தோல்வி.</translation> +<translation id="7067725467529581407">இதை ஒருபோதும் காட்டாதே.</translation> <translation id="7070804685954057874">நேரடி உள்ளீடு</translation> <translation id="7072010813301522126">குறுக்குவழி பெயர்</translation> <translation id="7072025625456903686">அனைத்தையும் அனுமதிக்கவும் அல்லது தனிப்பயனாக்கவும்</translation> @@ -4364,6 +4391,7 @@ <translation id="7489605380874780575">தகுதியைச் சரிபார்</translation> <translation id="749028671485790643">நபர் <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">கடவுச்சொற்கள், கிரெடிட் கார்டு எண்கள் போன்ற தனிப்பட்ட தரவு உட்பட, நீங்கள் உள்ளிடும் எல்லா உரையையும் <ph name="EXTENSION_NAME" /> நீட்டிப்பு சேகரிக்கக்கூடும். இந்த நீட்டிப்பைப் பயன்படுத்த விரும்புகிறீர்களா?</translation> <translation id="7495778526395737099">பழைய கடவுச்சொல் மறந்துவிட்டதா?</translation> <translation id="7503191893372251637">Netscape சான்றிதழ் வகை</translation> <translation id="7503821294401948377">உலாவிச் செயல்பாட்டிற்காக படவுரு '<ph name="ICON" />' ஐ ஏற்ற முடியவில்லை.</translation> @@ -4413,6 +4441,7 @@ <translation id="756445078718366910">உலாவி சாளரத்தைத் திற</translation> <translation id="7564847347806291057">செயலாக்கத்தை முடி</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome தரவு அழிக்கப்பட்டது</translation> <translation id="7568790562536448087">புதுப்பிக்கிறது</translation> <translation id="7573172247376861652">பேட்டரி மின்னேற்றம்</translation> <translation id="7576032389798113292">6x4</translation> @@ -4542,6 +4571,7 @@ <translation id="7786207843293321886">விருந்தினரை வெளியேற்று</translation> <translation id="7786889348652477777">&பயன்பாட்டை மீண்டும் ஏற்று</translation> <translation id="7787129790495067395">நீங்கள் தற்போது கடவுசொற்றொடரை பயன்படுத்துகிறீர்கள். உங்கள் கடவுச்சொற்றொடரை நீங்கள் மறந்துவிட்டீர்கள் எனில், GoogleDashboard ஐப் பயன்படுத்தி, ஒத்திசைவை மீட்டமைத்து Google சேவையகங்களில் இருக்கும் உங்கள் தரவை அழிக்க முடியும்.</translation> +<translation id="7787308148023287649">வேறு திரையில் காட்டும்</translation> <translation id="7788080748068240085">"<ph name="FILE_NAME" />" கோப்பை ஆஃப்லைனில் சேமிக்க, கூடுதலாக <ph name="TOTAL_FILE_SIZE" /> ஐக் காலியாக்க வேண்டும்:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />ஆஃப்லைனில் இனி அணுக தேவையற்ற கோப்புகளை அகற்றவும்<ph name="MARKUP_3" /> <ph name="MARKUP_4" />பதிவிறக்கக் கோப்புறையிலிருந்து கோப்புகளை நீக்கவும்<ph name="MARKUP_5" /></translation> @@ -4610,6 +4640,7 @@ <translation id="7878999881405658917">Google இந்த மொபைலிற்கு அறிவிப்பை அனுப்பியுள்ளது. புளூடூத் மூலம், உங்கள் மொபைல் <ph name="DEVICE_TYPE" />ஐ 30 அடி தூரத்தில் திறந்தநிலையில் வைத்திருக்கலாம். இதில் சிக்கல் ஏற்பட்டால், <a>இந்த அம்சத்தைத் தற்காலிகமாக முடக்கவும்</a>.</translation> <translation id="7879478708475862060">உள்ளீட்டு முறையைப் பின்தொடர்</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />", இந்தப் பயன்பாடுகளையும் நீட்டிப்புகளையும் சேர்க்கும்:</translation> +<translation id="7881969471599061635">வசனங்களை முடக்கு</translation> <translation id="7884988936047469945">பரிசோதனைக்குரிய அணுகல்தன்மை அம்சங்கள்</translation> <translation id="7885253890047913815">சமீபத்திய இலக்குகள்</translation> <translation id="7885283703487484916">மிகவும் குறைவான நேரம்</translation> @@ -4973,6 +5004,7 @@ <translation id="839736845446313156">பதிவு</translation> <translation id="8398790343843005537">உங்கள் மொபைலைக் கண்டறியவும்</translation> <translation id="8398877366907290961">இருப்பினும் தொடர்க</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> இல் சேமித்த உங்கள் கணக்கின் மூலம் உள்நுழையவும்</translation> <translation id="8401363965527883709">தேர்வு செய்யப்படாத தேர்வுப்பெட்டி</translation> <translation id="8408402540408758445">தற்காலிகச் சேமிப்பிடத்தில் உள்ள தேடல் முடிவுகள்</translation> <translation id="8410073653152358832">இந்த ஃபோனைப் பயன்படுத்து</translation> @@ -5060,6 +5092,7 @@ <translation id="8545211332741562162">சோதனைக்குரிய JavaScript அம்சங்களைப் பயன்படுத்த வலைப் பக்கங்களை இயக்கலாம்.</translation> <translation id="8545575359873600875">மன்னிக்கவும், உங்கள் கடவுச்சொல் சரிபார்க்கப்படவில்லை. இந்தக் கண்காணிக்கப்படும் பயனரின் நிர்வாகி சமீபத்தில் கடவுச்சொல்லை மாற்றியிருக்கலாம். அவ்வாறு இருந்தால், நீங்கள் அடுத்த முறை உள்நுழையும்போது புதிய கடவுச்சொல் செயலாக்கப்படும். உங்கள் பழைய கடவுச்சொல்லைப் பயன்படுத்தி முயற்சிக்கவும்.</translation> <translation id="8546306075665861288">பட தற்காலிக சேமிப்பு</translation> +<translation id="854653344619327455">இந்தக் கொடியை இயக்குவதன் மூலம், டெஸ்க்டாப் பகிர்வுத் தேர்ந்தெடுப்பான் சாளரமானது ஆடியோவைப் பகிர வேண்டுமா என்பதைத் தேர்வுசெய்ய பயனரை அனுமதிக்காது.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">எழுத்து</translation> <translation id="855081842937141170">தாவலைப் பொருத்து</translation> @@ -5090,6 +5123,7 @@ <translation id="8589311641140863898">பரிசோதனை நீட்டிப்பு APIகள்</translation> <translation id="8590375307970699841">தானாக புதுப்பித்தலை அமைக்கவும்</translation> <translation id="8592071947729879125">iframe அனுமதிகளுக்கு வரம்பிடவும்.</translation> +<translation id="8592125506633137593">சிறந்த ஆவணத் தனிமைப்படுத்தல்</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> ஆக உள்நுழைந்தீர்கள். ஒத்திசைத்த உங்கள் தரவை <ph name="BEGIN_LINK" />Google டாஷ்போர்டில்<ph name="END_LINK" /> நிர்வகிக்கவும்.</translation> <translation id="8596540852772265699">தனிப்பயன் கோப்புகள்</translation> <translation id="8596785155158796745">மைக்ரோஃபோன் தற்போது இல்லை. <ph name="BEGIN_LINK" />மைக்ரோஃபோனை நிர்வகி<ph name="END_LINK" /></translation> @@ -5162,6 +5196,7 @@ <translation id="8688579245973331962">உங்கள் பெயரைப் பார்க்கவில்லையா?</translation> <translation id="8688644143607459122">தொடர்க என்பதைக் கிளிக் செய்வதன் மூலம் Google Paymentsஐப் பயன்படுத்த ஒப்புக்கொள்கிறீர்கள். மோசடியில் இருந்து உங்களைப் பாதுகாக்க, உங்கள் கணினியைப் பற்றிய தகவல் (அதன் இருப்பிடம் உட்பட) Google Payments உடன் பகிரப்படும்.</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" நீட்டிப்பு, தொலைநிலை மூலம் நிறுவப்பட்டுள்ளது.</translation> +<translation id="868926756781121513">தாவல் ஆதாரம் மூலம் டெஸ்க்டாப் பகிர்வு</translation> <translation id="8689341121182997459">காலாவதியாவது:</translation> <translation id="8690754533598178758">Adobe Flash Player மைக்ரோஃபோன் விதிவிலக்குகள் வித்தியாசமானவை.</translation> <translation id="8691686986795184760">(நிறுவனக் கொள்கையால் இயக்கப்பட்டது)</translation> @@ -5205,6 +5240,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" />க்குப் பதிலாக <ph name="PROTOCOL" /> இணைப்புகளைத் திறக்கும்</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">சுட்டியுடன் ஒப்பிடும்போது மோசமான தெளிவுத் திறனைக் கொண்ட தொடுதல்களுடன் ஈடுசெய்யும் பொருட்டு தொடுதல் சைகையின் இடநிலையைச் சீர்ப்படுத்தும்.</translation> +<translation id="8741995161408053644">உங்கள் Google கணக்கு <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> என்ற தளத்தில் உலாவல் வரலாறு தொடர்பான பிற தகவல்களைக் கொண்டிருக்கலாம்.</translation> <translation id="8743712320294854924">ஷெல்ஃபில் விரிவாக்கப்பட்ட உள்ளீட்டு விருப்பங்களைக் காட்டு.</translation> <translation id="874420130893181774">பாரம்பரிய பின்யின் உள்ளீட்டு முறை</translation> <translation id="8744525654891896746">இந்தக் கண்காணிக்கப்படும் பயனருக்கான தோற்றத்தைத் தேர்ந்தெடுக்கவும்.</translation> @@ -5218,6 +5254,7 @@ <translation id="8757640015637159332">பொது அமர்வில் நுழையவும்</translation> <translation id="8757742102600829832">இணைப்பதற்கான, Chromeboxஐத் தேர்ந்தெடுக்கவும்</translation> <translation id="8757803915342932642">Google மேகக்கணி சாதனங்களில் உள்ள சாதனம்</translation> +<translation id="8758895886513993540">டெஸ்க்டாப் பகிர்வுக்கு ஒரு தாவலைப் பயனர்கள் தேர்வுசெய்ய முடியுமா என்பதை இந்தக் கொடி கட்டுப்படுத்தும்.</translation> <translation id="8759408218731716181">பல உள்நுழைவை அமைக்க முடியாது</translation> <translation id="8759753423332885148">மேலும் அறிக.</translation> <translation id="8761567432415473239">Google பாதுகாப்பான தேடல், <ph name="SITE" /> இல் சமீபத்தில் <ph name="BEGIN_LINK" />தீங்கான நிரல்களைக் கண்டறிந்தது<ph name="END_LINK" />.</translation> @@ -5428,6 +5465,7 @@ <translation id="9074739597929991885">புளூடூத்</translation> <translation id="9074836595010225693">USB மவுஸ் இணைக்கப்பட்டது</translation> <translation id="9076523132036239772">மன்னிக்கவும், உங்கள் மின்னஞ்சல் அல்லது கடவுச்சொல்லைச் சரிபார்க்க முடியவில்லை. முதலில் பிணையத்துடன் இணைவதை முயற்சிக்கவும்.</translation> +<translation id="9077132661879924646">Android இல் ஒருங்கிணைந்த மீடியா பைப்லைனை முடக்கும்.</translation> <translation id="907841381057066561">தொகுப்பாக்கலின்போது தற்காலிக ஜிப் கோப்பை உருவாக்குவதில் தோல்வியடைந்தது.</translation> <translation id="9083147368019416919">விலகுவதில் தோல்வியடைதல்</translation> <translation id="9084064520949870008">சாளரமாகத் திற</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index 91fec0b..56592da 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">చిత్రం యొక్క చతురస్త్ర ప్రాంతాన్ని ఎంచుకోండి</translation> <translation id="1697532407822776718">మీరు సిద్ధంగా ఉన్నారు!</translation> +<translation id="1697988819212986149">Google సేవల ఆధారితమైన సందర్భోచిత మెను అంశాల పక్కన Google చిహ్నాన్ని చూపుతుంది.</translation> <translation id="1699274548822076330">ఇది trace-upload-url ఫ్లాగ్తో కలయికలో ఉపయోగించబడుతుంది. హెచ్చరిక: ప్రారంభించినప్పుడు, Chrome ప్రతి నావిగేషన్ కోసం పనితీరు డేటాను రికార్డ్ చేస్తుంది మరియు దాన్ని ట్రేస్-అప్లోడ్-url ఫ్లాగ్ ద్వారా పేర్కొన్న URLకు అప్లోడ్ చేస్తుంది. ట్రేస్లో మీరు సందర్శించే వెబ్సైట్ల శీర్షికలు మరియు URLల వంటి వ్యక్తిగతంగా గుర్తించదగిన సమాచారం (PII) ఉండవచ్చు.</translation> <translation id="1699395855685456105">హార్డ్వేర్ పునర్విమర్శ:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">దయచేసి మీ సమకాలీకరణ పాస్ఫ్రేజ్ను నవీకరించండి.</translation> <translation id="1788636309517085411">డిఫాల్ట్ ఉపయోగించు</translation> <translation id="1789575671122666129">పాప్అప్లు</translation> -<translation id="1790550373387225389">ప్రదర్శన మోడ్కు వెళ్ళు</translation> <translation id="1792705092719258158">ప్రతిబింబ స్క్రీన్ మోడ్ను ప్రారంభించండి.</translation> <translation id="1793119619663054394">మీరు ఖచ్చితంగా ఈ కంప్యూటర్ నుండి "<ph name="PROFILE_NAME" />"ని మరియు సంబంధిత Chrome డేటా అంతటినీ తీసివేయాలనుకుంటున్నారా? ఈ చర్య రద్దు చేయబడదు.</translation> <translation id="179767530217573436">గత 4 వారాలు</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">మీ పరికరానికి మరియు విడి భాగాలకు సెట్టింగ్ల నిర్దేశాన్ని మార్చండి.</translation> <translation id="2673135533890720193">మీ బ్రౌజింగ్ చరిత్రను చదవడానికి అనుమతి</translation> <translation id="2673589024369449924">ఈ వినియోగదారు కోసం డెస్క్టాప్ సత్వరమార్గాన్ని సృష్టించు</translation> +<translation id="2675358154061544447">వేర్వేరు ప్రాసెస్ల్లో క్రాస్-సైట్ iframes అమలు చేయడం కోసం అత్యంత ప్రయోగాత్మక మద్దతు ఇస్తుంది. ఈ మోడ్లో, పత్రాలు ఒకే వెబ్ సైట్ నుండి అందించబడినప్పుడు మాత్రమే రెండెరెర్ ప్రాసెస్ను పంచుకుంటాయి.</translation> <translation id="2676946222714718093">ఇందులో ప్లే అవుతోంది</translation> <translation id="2678063897982469759">మళ్ళీ-ప్రారంభించు</translation> <translation id="2678246812096664977">అన్ని ప్లగిన్లు</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">పాస్వర్డ్ నిర్వాహికి సమకాలీకరణ ఆధారం కోసం స్వయంపూర్తిని ఎలా నిర్వహిస్తుంది.</translation> <translation id="29611076221683977">ప్రస్తుతం <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />పై దాడి చేసినవారు మీ సమాచారాన్ని (ఉదాహరణకు, ఫోటోలు, పాస్వర్డ్లు, సందేశాలు మరియు క్రెడిట్ కార్డ్లు) దొంగిలించడం కోసం లేదా తొలగించడం కోసం మీ Macలో ప్రమాదకర ప్రోగ్రామ్లను ఇన్స్టాల్ చేయడానికి ప్రయత్నించి ఉండవచ్చు.</translation> <translation id="2961695502793809356">ముందుకు వెళ్ళడానికి క్లిక్ చెయ్యండి, చరిత్రను చూడటానికి నొక్కి ఉంచండి</translation> +<translation id="296216853343927883">సందర్భోచిత మెనులో Google బ్రాండింగ్</translation> <translation id="2963151496262057773">క్రింది ప్లగిన్ ప్రతిస్పందించడం లేదు: <ph name="PLUGIN_NAME" />మీరు దీన్ని ఆపివేయాలనుకుంటున్నారా?</translation> <translation id="2963783323012015985">టర్కిష్ కీబోర్డ్</translation> <translation id="2964193600955408481">Wi-Fiని నిలిపివేయి</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">ఇతర వ్యక్తులను వీక్షించడానికి ఎగువ ఉన్న బటన్ను కుడి క్లిక్ చేయండి.</translation> <translation id="3026050830483105579">అంతా ఇక్కడ ఉంది.</translation> <translation id="302620147503052030">బటన్ని చూపించు</translation> +<translation id="302781076327338683">దాటవేసే కాష్ని మళ్లీ లోడ్ చేయండి</translation> +<translation id="3030243755303701754">పర్యవేక్షించబడే వినియోగదారు మీ మార్గదర్శకత్వంతో వెబ్లో అన్వేషించగలరు. Chromeలో పర్యవేక్షించబడే వినియోగదారుని నిర్వాహకుడిగా, మీరు: + + • నిర్దిష్ట వెబ్సైట్లను అనుమతించగలరు లేదా నిషేధించగలరు, + • పర్యవేక్షించబడే వినియోగదారు సందర్శించిన వెబ్సైట్లను సమీక్షించగలరు మరియు + • ఇతర సెట్టింగ్లను నిర్వహించగలరు. + +పర్యవేక్షించబడే వినియోగదారుని సృష్టించడం వలన Google ఖాతా సృష్టించబడదు మరియు వారి బుక్మార్క్లు, బ్రౌజింగ్ చరిత్ర మరియు ఇతర ప్రాధాన్యతలు Chrome సమకాలీకరణతో ఇతర పరికరాలకు తరలించబడవు. మీరు కొత్త పర్యవేక్షించబడే వినియోగదారుని సృష్టించిన తర్వాత, వారి సెట్టింగ్లను ఏ సమయంలోనైనా, ఏ పరికరం నుండైనా <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />లో నిర్వహించవచ్చు. + +మరింత సమాచారం కోసం, మా <ph name="BEGIN_LINK" />సహాయ కేంద్రాన్ని<ph name="END_LINK" /> సందర్శించండి.</translation> <translation id="3031417829280473749">ఏజెంట్ X</translation> <translation id="3031557471081358569">దిగుమతి చెయ్యడానికి ఐటమ్లను ఎంచుకోండి:</translation> <translation id="3033332627063280038">కాష్-నియంత్రణ: stale-while-revalidate డైరెక్టివ్ ప్రయోగాత్మక అమలును ప్రారంభించండి. ఇది గుప్తతను మెరుగుపరచడానికి నేపథ్యంలో కొన్ని వనరులను పునఃప్రామాణీకరించవచ్చని తెలియజేసే సర్వర్లను అనుమతిస్తుంది.</translation> @@ -1649,7 +1661,6 @@ <translation id="3324301154597925148">మీరు ఆశిస్తున్న శోధన పేజీ ఇదేనా?</translation> <translation id="3324684065575061611">(వ్యాపార విధానంచే నిలిపివెయ్యబడింది)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" />ను జిప్ చేస్తోంది...</translation> -<translation id="3330206034087160972">ప్రదర్శన మోడ్ను నిష్క్రమించు</translation> <translation id="3330686263988132416">WebRTC అచేతన మూలస్థాన ముఖ్యశీర్షిక</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">ప్రతిబింబ స్క్రీన్ మోడ్ను ప్రారంభించండి. ఈ మోడ్ స్క్రీన్ చిత్రాన్ని సమాంతరంగా మారుస్తుంది.</translation> @@ -1694,6 +1705,7 @@ <translation id="3392020134425442298">హానికరమైన ఫైల్ను పునరుద్ధరించు</translation> <translation id="3394150261239285340"><ph name="HOST" /> మీ కెమెరాను మరియు మైక్రోఫోన్ను ఉపయోగించాలనుకుంటుంది.</translation> <translation id="3394279550557729862">స్థానిక నోటిఫికేషన్ టోస్ట్లు మరియు నోటిఫికేషన్ కేంద్రం అందుబాటులో ఉన్న ప్లాట్ఫారమ్ల్లో వాటిని ఉపయోగించడం కోసం మద్దతును ప్రారంభించండి.</translation> +<translation id="3394862755749546286">Androidలో ఏకీకృత (Android మరియు డెస్క్టాప్) మీడియా పైప్లైన్ను నిలిపివేస్తుంది.</translation> <translation id="3396331542604645348">ఎంచుకున్న ముద్రకం అందుబాటులో లేదు లేదా సరిగ్గా వ్యవస్థాపించబడలేదు. మీ ముద్రకాన్ని తనిఖీ చేయండి లేదా మరొక ముద్రకాన్ని ఎంచుకోవడానికి ప్రయత్నించండి.</translation> <translation id="3399597614303179694">మేసిడోనియన్ కీబోర్డ్</translation> <translation id="3401130144947259741">ప్రారంభిస్తే, ట్రేస్ ఈవెంట్లు Windows (ETW) కోసం ఈవెంట్ ట్రేసింగ్కు ఎగుమతి చేయబడతాయి, ఆపై UIForETW లేదా Xperf వంటి సాధనాల ద్వారా క్యాప్చర్ చేయబడతాయి.</translation> @@ -1904,7 +1916,6 @@ <translation id="367645871420407123">మీరు రూట్ పాస్వర్డ్ను డిఫాల్ట్ పరీక్ష చిత్ర విలువకు సెట్ చేయాలనుకుంటే ఖాళీగా వదిలిపెట్టండి</translation> <translation id="3678156199662914018">పొడిగింపు: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">మాల్టెసె కీబోర్డ్</translation> -<translation id="3680173818488851340">తక్కువ ప్రాధాన్య iframes.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> స్క్రీన్ భాగస్వామ్య అభ్యర్థన</translation> <translation id="3685122418104378273">మొబైల్ డేటాను ఉపయోగిస్తున్నప్పుడు Google డిస్క్ సమకాలీకరణ డిఫాల్ట్గా నిలిపివేయబడుతుంది.</translation> <translation id="3685387984467886507">నిర్దిష్ట సమయ వ్యవధిలో SSL లోపాల ద్వారా కొనసాగడానికి నిర్ణయాలను గుర్తుంచుకోండి.</translation> @@ -1953,6 +1964,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ఇప్పుడు నిర్వాహక కన్సోల్లో కనిపిస్తుంది</translation> <translation id="3741243925913727067">మీ మీడియా పరికర ఫోటోలు మరియు వీడియోలను Google డిస్క్కి బ్యాకప్ చేయండి.</translation> <translation id="3743492083222969745">వర్చువల్ కీబోర్డ్ కోసం సెట్టింగ్లు పేజీలో సంజ్ఞ టైపింగ్ ఎంపికను ప్రారంభిస్తుంది/నిలిపివేస్తుంది.</translation> +<translation id="3744111561329211289">నేపథ్య సమకాలీకరణ</translation> <translation id="3749289110408117711">ఫైల్ పేరు</translation> <translation id="3751427701788899101">కనెక్షన్ పోయింది</translation> <translation id="3751522270321808809">ఈ సైట్ మీ సమాచారాన్ని (ఉదాహరణలు: పాస్వర్డ్లు, సందేశాలు లేదా క్రెడిట్ కార్డ్లు) దొంగిలించడం కోసం మిమ్మల్ని మోసగించడానికి ప్రయత్నించవచ్చు.</translation> @@ -2270,6 +2282,7 @@ <translation id="4218259925454408822">మరో ఖాతాతో సైన్ ఇన్ చేయండి</translation> <translation id="4219614746733932747">ప్రారంభించబడితే, బ్లింక్ పరికర ప్రమాణ అంశం కోసం కంటెంట్ను అంచనా వేయడానికి దాని జూమింగ్ విధానాన్ని ఉపయోగిస్తుంది.</translation> <translation id="4220865787605972627">డిస్ప్లే రంగు క్రమాంకనాన్ని డిస్ప్లే ఆ లక్షణానికి మద్దతు ఇచ్చే పక్షంలో అనుమతిస్తుంది.</translation> +<translation id="4232692576734035989">క్రాస్-సైట్ iframes పైన ఉండే పత్రం నుండి వేరే ప్రాసెస్లో ఉంచబడే అత్యంత ప్రయోగాత్మక పనితీరు మోడ్. ఈ మోడ్లో, వేర్వేరు మూడవ పక్షం సైట్ల నుండి iframes ఒకే ప్రాసెస్ను పంచుకోవడానికి అనుమతించబడతాయి.</translation> <translation id="4235200303672858594">పూర్తి స్క్రీన్</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> కోసం ఖాతాను జోడించు</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> ఈ భాషలో ప్రదర్శించబడదు</translation> @@ -2435,6 +2448,7 @@ <translation id="4509017836361568632">ఫోటోను విస్మరించు</translation> <translation id="4509345063551561634">స్థానం:</translation> <translation id="4514542542275172126">కొత్త పర్యవేక్షించబడే వినియోగదారుని సెటప్ చేయండి</translation> +<translation id="4514914692061505365">అన్ని pexe ఫైల్ల కోసం PNaCl వేగవంతమైన సబ్జీరో అనువాద సాధనాన్ని ఉపయోగించేలా నిర్బంధిస్తుంది.</translation> <translation id="4518677423782794009">Chrome క్రాష్ అవుతోందా, అసాధారణ రీతిలో ప్రారంభ పేజీలు, సాధన పట్టీలు లేదా మీరు తొలగించలేని రీతిలో ఊహించని ప్రకటనలను చూపుతోందా లేదా మీ బ్రౌజర్ అనుభవాన్ని మారుస్తోందా? మీరు Chrome శుభ్రత సాధనాన్ని అమలు చేయడం ద్వారా సమస్యను పరిష్కరించవచ్చు.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> అందించిన తెలియని పరికరాలు</translation> <translation id="4522570452068850558">వివరాలు</translation> @@ -2483,6 +2497,7 @@ <translation id="4595560905247879544">అనువర్తనాలు మరియు పొడిగింపులను నిర్వాహకుడు (<ph name="CUSTODIAN_NAME" />) మాత్రమే సవరించగలరు.</translation> <translation id="4601242977939794209">EMF కన్వర్టర్</translation> <translation id="4602466770786743961">మీ కెమెరా మరియు మైక్రోఫోన్ను ప్రాప్యత చేయడానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించండి</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">ఇంటర్నెట్ కనెక్ట్ చెయ్యబడలేదు</translation> <translation id="4608500690299898628">&కనుగొను...</translation> <translation id="4610637590575890427">మీరు <ph name="SITE" />కు వెళ్లాలనుకుంటున్నారా?</translation> @@ -2787,6 +2802,7 @@ <translation id="5062930723426326933">సైన్-ఇన్ విఫలమైంది, దయచేసి ఇంటర్నెట్కు కనెక్ట్ చేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="5063180925553000800">క్రొత్త పిన్:</translation> <translation id="5067867186035333991"><ph name="HOST" /> మీ మైక్రోఫోన్ను ప్రాప్యత చేయాలనుకుంటే నాకు తెలియజేయి</translation> +<translation id="5068918910148307423">డేటాను పంపడం మరియు స్వీకరించడం పూర్తి చేయడానికి ఇటీవల మూసివేసిన సైట్లను అనుమతించవద్దు</translation> <translation id="507075806566596212">మీరు పరికరాన్ని రిమోట్ పద్ధతిలో గుర్తించే, డేటాను తొలగించే మరియు లాక్ చేసే సామర్థ్యాన్ని ప్రారంభించడానికి ఈ <ph name="DEVICE_TYPE" />ని Googleతో నమోదు చేయబోతున్నారు. ఇందుకు రీబూట్ చేయడం అవసరం. మీరు కొనసాగాలనుకుంటున్నారా?</translation> <translation id="5072836811783999860">నిర్వహించబడే బుక్మార్క్లను చూపు</translation> <translation id="5074318175948309511">కొత్త సెట్టింగ్లు ప్రభావంలోకి రావడానికి ముందు ఈ పేజీని మళ్లీ లోడ్ చేయాల్సి ఉండవచ్చు.</translation> @@ -2896,6 +2912,7 @@ <translation id="5227808808023563348">మునుపటి వచనం కనుగొను</translation> <translation id="5228076606934445476">పరికరంలో ఏదో తప్పు ఉంది. ఈ లోపాన్ని పునరుద్ధరించడానికి మీరు పరికరాన్ని రీబూట్ చేసి, మళ్లీ ప్రయత్నించాలి.</translation> <translation id="5228962187251412618">ఆన్లైన్ తనిఖీ మాత్రమే</translation> +<translation id="5229622432348746578">డెస్క్టాప్ భాగస్వామ్యం కోసం ఆడియోను నిలిపివేయి</translation> <translation id="5230516054153933099">విండో</translation> <translation id="5232178406098309195">మీరు "Ok Google" వంటి ఆడియో సక్రియ ఆదేశాలను ఉపయోగించినప్పుడు లేదా మైక్రోఫోన్ చిహ్నాన్ని తాకినప్పుడు, మీ ప్రైవేట్ వాయిస్ & ఆడియో కార్యాచరణ మీ ఖాతాలో కొంత వాయిస్ను మరియు ఇతర ఆడియోను నిల్వ చేస్తుంది. ఆ చర్య చేసిన తర్వాత కొన్ని క్షణాల ముందు నుండి రాబోయే ప్రసంగం/ఆడియో యొక్క రికార్డింగ్ నిల్వ చేయబడుతుంది.</translation> <translation id="523299859570409035">నోటిఫికేషన్ మినహాయింపులు</translation> @@ -3150,6 +3167,7 @@ <translation id="5557991081552967863">నిద్రావస్థలో ఉన్నప్పుడు Wi-Fiని ఆన్లో ఉంచు</translation> <translation id="5558129378926964177">దగ్గరికి జూమ్ చెయ్యి</translation> <translation id="556042886152191864">బటన్</translation> +<translation id="5562781907504170924">ఈ ట్యాబ్ బ్లూటూత్ పరికరానికి కనెక్ట్ చేయబడింది.</translation> <translation id="5565871407246142825">క్రెడిట్ కార్డ్లు</translation> <translation id="5567989639534621706">అనువర్తన కాష్లు</translation> <translation id="5568069709869097550">సైన్ ఇన్ చెయ్యలేరు</translation> @@ -3309,6 +3327,7 @@ <translation id="5803531701633845775">కర్సర్ కదలకుండా, వెనుక నుండి పదబంధాలను ఎంచుకోండి</translation> <translation id="5804241973901381774">అనుమతులు</translation> <translation id="580571955903695899">శీర్షిక ద్వారా క్రమాన్ని మార్చు</translation> +<translation id="5808982448801399019">ప్రామాణీకరణ విఫలమైంది</translation> <translation id="580961539202306967">సైట్ నాకు పుష్ సందేశాలను పంపాలనుకున్నప్పుడు నన్ను అడుగు (సిఫార్సు చేయబడింది)</translation> <translation id="5815645614496570556">X.400 చిరునామా</translation> <translation id="5817397429773072584">సాంప్రదాయ చైనీస్</translation> @@ -3578,6 +3597,7 @@ <translation id="6243774244933267674">సర్వర్ అందుబాటులో లేదు</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">నవీకరణ సిద్ధంగా ఉంది</translation> +<translation id="6248400709929739064">ఉపశీర్షికలను ప్రారంభించు</translation> <translation id="6248988683584659830">శోధన సెట్టింగ్లు</translation> <translation id="6251870443722440887">GDI నిర్వహించేవి</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> సేవా నిబంధనలు</translation> @@ -3602,6 +3622,7 @@ <translation id="6277105963844135994">నెట్వర్క్ సమయం ముగిసింది</translation> <translation id="6277518330158259200">స్క్రీన్షాట్ను తీ&యి</translation> <translation id="6279183038361895380">మీ కర్సర్ను చూపడానికి |<ph name="ACCELERATOR" />| నొక్కండి</translation> +<translation id="6280215091796946657">వేరొక ఖాతాతో సైన్ ఇన్ చేయండి</translation> <translation id="6281743458679673853">అన్ని APIలు లేఅవుట్ వీక్షణపోర్ట్ను ప్రతిబింబించడానికి ప్రయోగం. ఇది window.scroll లక్షణాలను లేఅవుట్ వీక్షణపోర్ట్కు అనుగుణంగా చేస్తుంది.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{మీ నెట్వర్క్లో కొత్త ప్రింటర్}other{మీ నెట్వర్క్లో కొత్త ప్రింటర్లు}}</translation> <translation id="6285395082104474418">స్థితి ట్రే మీ నెట్వర్క్, బ్యాటరీ మరియు మరిన్ని అంశాల యొక్క ప్రస్తుత స్థితిని మీకు చూపుతుంది.</translation> @@ -3683,6 +3704,9 @@ <translation id="6418160186546245112">మునుపు ఇన్స్టాల్ చేసిన <ph name="IDS_SHORT_PRODUCT_NAME" /> సంస్కరణకు తిరిగి మారుస్తోంది</translation> <translation id="6418481728190846787">అన్ని అనువర్తనాల కోసం ప్రాప్యతను శాశ్వతంగా తీసివేయి</translation> <translation id="6418505248408153264">విశేష రూపకల్పన చరిత్రను ప్రారంభించండి</translation> +<translation id="6419288379019356534">ఈ పరికరం <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ద్వారా నిర్వహించబడుతోంది. + <ph name="LINE_BREAK" /> + దయచేసి మీ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ఖాతాకి సైన్ ఇన్ చేయడం కొనసాగించడానికి "తదుపరి" క్లిక్ చేయండి.</translation> <translation id="6419902127459849040">మధ్య యూరోపియన్</translation> <translation id="6420676428473580225">డెస్క్టాప్కి జోడించండి</translation> <translation id="6422329785618833949">ఫోటో తిప్పబడింది</translation> @@ -3843,7 +3867,6 @@ <translation id="6662016084451426657">సమకాలీకరణ లోపం: సమకాలీకరణను ప్రారంభించడానికి దయచేసి నిర్వాహకుని సంప్రదించండి.</translation> <translation id="6663792236418322902">మీరు ఎంచుకున్న పాస్వర్డ్ ఈ ఫైల్ని తర్వాత పునరుద్ధరించడానికి అవసరం అవుతుంది. దయచేసి దీన్ని సురక్షితమైన స్థానంలో నమోదు చెయ్యండి.</translation> <translation id="6664237456442406323">దురదృష్టవశాత్తూ, మీ కంప్యూటర్ తప్పుగా ఆకృతి చేయబడిన హార్డ్వేర్ IDతో కాన్ఫిగర్ చేయబడింది. ఇది తాజా భద్రతా పరిష్కారాలతో నవీకరించబడనీయకుండా Chrome OSని నిరోధిస్తుంది మరియు మీ కంప్యూటర్ <ph name="BEGIN_BOLD" />హానికరమైన దాడులకు గురి కావచ్చు<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">iframe వనరుల లోడ్ ప్రాధాన్యతను తగ్గిస్తుంది.</translation> <translation id="6666647326143344290">మీ Google ఖాతాతో</translation> <translation id="6675665718701918026">సూచిస్తున్న పరికరం కనెక్ట్ చేయబడింది</translation> <translation id="6677037229676347494">ఆశించిన ID "<ph name="EXPECTED_ID" />", కానీ "<ph name="NEW_ID" />" ID అందించబడింది.</translation> @@ -3936,6 +3959,7 @@ <translation id="6825883775269213504">రష్యన్</translation> <translation id="6827236167376090743">ఈ వీడియో నిరంతరంగా ప్లే అవుతూనే ఉంటుంది.</translation> <translation id="6828153365543658583">క్రింది వినియోగదారులకు సైన్-ఇన్ని నిరోధించు:</translation> +<translation id="6828434191343384461">ఎంచుకోబడిన డేటా Chrome మరియు సమకాలీకరించిన పరికరాల నుండి తీసివేయబడింది. మీ Google ఖాతా <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />లో ఇతర Google సేవల నుండి శోధనలు మరియు కార్యాచరణ వంటి ఇతర బ్రౌజింగ్ చరిత్ర రూపాలను కలిగి ఉండవచ్చు.</translation> <translation id="6828860976882136098">వినియోగదారులందరి కోసం స్వయంచాలక నవీకరణలను సెటప్ చేయడం విఫలమైంది (ప్రీఫ్లయిట్ అమలు లోపం: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">మీ <ph name="DEVICE_TYPE" />తో సహాయం పొందండి.</translation> <translation id="6829270497922309893">మీ సంస్థలో నమోదు చేయండి</translation> @@ -4017,6 +4041,7 @@ <translation id="6965382102122355670">సరే</translation> <translation id="6965648386495488594">పోర్ట్</translation> <translation id="6965978654500191972">పరికరం</translation> +<translation id="6969104364835835175">PNaCl సబ్జీరోని నిర్బంధించు</translation> <translation id="6970230597523682626">బల్గేరియన్</translation> <translation id="6970480684834282392">ప్రారంభ రకం</translation> <translation id="6970856801391541997">ప్రత్యేకించిన పేజీలను ముద్రించు</translation> @@ -4099,10 +4124,12 @@ <translation id="7057058088140140610">Google చెల్లింపులను ఉపయోగించే క్రెడిట్ కార్డ్లు మరియు చిరునామాలు</translation> <translation id="7059858479264779982">స్వీయ-ప్రారంభానికి సెట్ చేయి</translation> <translation id="7061692898138851896">పాస్వర్డ్లను స్వయంచాలకంగా సేవ్ చేయండి</translation> +<translation id="7062222374113411376">డేటాను పంపడం మరియు స్వీకరించడం పూర్తి చేయడానికి ఇటీవల మూసివేసిన సైట్లను అనుమతించు (సిఫార్సు చేయబడింది)</translation> <translation id="7063129466199351735">సత్వరమార్గాలను ప్రాసెస్ చేస్తోంది...</translation> <translation id="7065223852455347715">ఈ పరికరం వ్యాపార నమోదుని నిరోధించే మోడ్లో లాక్ చేయబడింది. మీరు పరికరాన్ని నమోదు చేయాలనుకుంటే ముందుగా పరికర పునరుద్ధరణను పరిశీలించాలి.</translation> <translation id="7065534935986314333">సిస్టమ్ గురించి</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />"కి కనెక్ట్ చేయడం విఫలమైంది.</translation> +<translation id="7067725467529581407">దీన్ని మళ్లీ ఎప్పుడూ చూపవద్దు.</translation> <translation id="7070804685954057874">ప్రత్యక్ష ఇన్పుట్</translation> <translation id="7072010813301522126">సత్వరమార్గం పేరు</translation> <translation id="7072025625456903686">అన్నీ అనుమతించండి లేదా అనుకూలీకరించండి</translation> @@ -4375,6 +4402,7 @@ <translation id="7489605380874780575">అర్హతను తనిఖీ చేయి</translation> <translation id="749028671485790643">వ్యక్తి <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> పొడిగింపు మీరు టైప్ చేసే పాస్వర్డ్లు మరియు క్రెడిట్ కార్డ్ నంబర్ల వంటి వ్యక్తిగత డేటాతో సహా మొత్తం వచనాన్ని సేకరించవచ్చు. మీరు ఈ పొడిగింపుని ఉపయోగించాలనుకుంటున్నారా?</translation> <translation id="7495778526395737099">మీ పాత పాస్వర్డ్ను మర్చిపోయారా?</translation> <translation id="7503191893372251637">Netscape సర్టిఫికెట్ రకం</translation> <translation id="7503821294401948377">బ్రౌజర్ చర్య కోసం '<ph name="ICON" />' చిహ్నం లోడ్ చేయబడలేదు.</translation> @@ -4426,6 +4454,7 @@ <translation id="756445078718366910">బ్రౌజర్ విండోను తెరువు</translation> <translation id="7564847347806291057">ప్రాసెస్ని ముగించు</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome డేటా తీసివేయబడింది</translation> <translation id="7568790562536448087">నవీకరిస్తోంది</translation> <translation id="7573172247376861652">బ్యాటరీ ఛార్జ్</translation> <translation id="7576032389798113292">6x4</translation> @@ -4555,6 +4584,7 @@ <translation id="7786207843293321886">అతిథిగా నిష్క్రమించు</translation> <translation id="7786889348652477777">అనువర్తనాన్ని &మళ్లీ లోడ్ చేయి</translation> <translation id="7787129790495067395">మీరు ప్రస్తుతం పాస్ఫ్రేజ్ని ఉపయోగిస్తున్నారు. మీరు మీ పాస్ఫ్రేజ్ని మర్చిపోతే, మీరు Google డాష్బోర్డ్ని ఉపయోగించి Google యొక్క సర్వర్ల నుండి మీ డేటాను క్లియర్ చెయ్యడానికి సమకాలీకరణను రీసెట్ చెయ్యవచ్చు.</translation> +<translation id="7787308148023287649">మరొక స్క్రీన్లో ప్రదర్శించు</translation> <translation id="7788080748068240085">ఆఫ్లైన్లో "<ph name="FILE_NAME" />"ని సేవ్ చేయడానికి మీరు అదనంగా <ph name="TOTAL_FILE_SIZE" /> ఖాళీ స్థలాన్ని తప్పనిసరిగా కలిగి ఉండాలి:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />మీరు ఆఫ్లైన్లో ఇకపై ప్రాప్యత చేయకూడదనుకునే ఫైల్లను అన్పిన్ చేయండి<ph name="MARKUP_3" /> <ph name="MARKUP_4" />మీ డౌన్లోడ్ల ఫోల్డర్ నుండి ఫైల్లను తొలగించండి<ph name="MARKUP_5" /></translation> @@ -4623,6 +4653,7 @@ <translation id="7878999881405658917">Google ఈ ఫోన్కు ఒక నోటిఫికేషన్ను పంపింది. బ్లూటూత్తో మీ ఫోన్ మీ <ph name="DEVICE_TYPE" />ని సుమారు 30 అడుగుల దూరంలో ఉన్నా కూడా అన్లాక్ చేస్తుందని గుర్తుంచుకోండి. ఇలా చేయడం సమస్యగా మారే సందర్భాల్లో, మీరు <a>ఈ లక్షణాన్ని తాత్కాలికంగా నిలిపివేయవచ్చు</a>.</translation> <translation id="7879478708475862060">ఇన్పుట్ మోడ్ను అనుసరించండి</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" ఈ అనువర్తనాలు మరియు పొడిగింపులను జోడిస్తుంది:</translation> +<translation id="7881969471599061635">ఉపశీర్షికలను నిలిపివేయి</translation> <translation id="7884988936047469945">ప్రయోగాత్మక ప్రాప్యత లక్షణాలు</translation> <translation id="7885253890047913815">ఇటీవలి గమ్యస్థానాలు</translation> <translation id="7885283703487484916">చాలా తక్కువ</translation> @@ -4983,6 +5014,7 @@ <translation id="839736845446313156">నమోదు చెయ్యి</translation> <translation id="8398790343843005537">మీ ఫోన్ను కనుగొనండి</translation> <translation id="8398877366907290961">ఏవైనా కొనసాగు</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" />తో సేవ్ చేయబడిన మీ ఖాతాతో సైన్ ఇన్ చేయండి</translation> <translation id="8401363965527883709">చెక్ బాక్స్ ఎంపిక తొలగించబడింది</translation> <translation id="8408402540408758445">శోధన ఫలితాలను ముందే పొందండి</translation> <translation id="8410073653152358832">ఈ ఫోన్ను ఉపయోగించు</translation> @@ -5069,6 +5101,7 @@ <translation id="8545211332741562162">ప్రయోగాత్మక JavaScript లక్షణాలను ఉపయోగించడానికి వెబ్ పేజీలను అనుమతించు.</translation> <translation id="8545575359873600875">క్షమించండి, మీ పాస్వర్డ్ను ధృవీకరించడం సాధ్యపడలేదు. ఈ పర్యవేక్షించబడే వినియోగదారు యొక్క నిర్వాహకులు పాస్వర్డ్ను ఇటీవల మార్చి ఉండవచ్చు. అలా అయితే, మీరు సైన్ ఇన్ చేసే తదుపరి సారి కొత్త పాస్వర్డ్ వర్తింపజేయబడుతుంది. మీ పాత పాస్వర్డ్ను ఉపయోగించడాన్ని ప్రయత్నించండి.</translation> <translation id="8546306075665861288">చిత్రం కాష్</translation> +<translation id="854653344619327455">ఈ ఫ్లాగ్ ఆన్లో ఉంటే, డెస్క్టాప్ భాగస్వామ్య ఎంపిక విండో వినియోగదారు ఆడియోను భాగస్వామ్యం చేయాలో వద్దో ఎంచుకోవడానికి అనుమతించదు.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">అక్షరం</translation> <translation id="855081842937141170">టాబ్ను పిన్ చేయి</translation> @@ -5099,6 +5132,7 @@ <translation id="8589311641140863898">ప్రయోగాత్మక పొడిగింపు APIలు</translation> <translation id="8590375307970699841">ఆటోమేటిక్ అప్డేట్లను సెట్ అప్ చేయండి</translation> <translation id="8592071947729879125">iframe అనుమతులు నియంత్రించండి.</translation> +<translation id="8592125506633137593">పైన ఉండే పత్రం వియుక్తత</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> వలె సైన్ ఇన్ చేశారు. మీ సమకాలీకరించిన డేటాను <ph name="BEGIN_LINK" />Google డాష్బోర్డ్<ph name="END_LINK" />లో నిర్వహించండి.</translation> <translation id="8596540852772265699">అనుకూలీకరించిన ఫైళ్ళు</translation> <translation id="8596785155158796745">మైక్రోఫోన్ ప్రస్తుతం అందుబాటులో లేదు. <ph name="BEGIN_LINK" />మైక్రోఫోన్ను నిర్వహించండి<ph name="END_LINK" /></translation> @@ -5171,6 +5205,7 @@ <translation id="8688579245973331962">మీ పేరు కనిపించలేదా?</translation> <translation id="8688644143607459122">కొనసాగించు క్లిక్ చేయడం ద్వారా మీరు Google Paymentsని ఉపయోగించడానికి అంగీకరిస్తారు. మిమ్మల్ని మోసం నుండి రక్షించడానికి, మీ కంప్యూటర్కి సంబంధించిన సమాచారం (దాని స్థానంతో సహా) Google Paymentsతో భాగస్వామ్యం చేయబడుతుంది.</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" పొడిగింపు రిమోట్ విధానంలో ఇన్స్టాల్ చేయబడింది.</translation> +<translation id="868926756781121513">ట్యాబ్ మూలంతో డెస్క్టాప్ భాగస్వామ్యం</translation> <translation id="8689341121182997459">ముగుస్తుంది:</translation> <translation id="8690754533598178758">Adobe Flash Player మైక్రోఫోన్ మినహాయింపులు భిన్నమైనవి.</translation> <translation id="8691686986795184760">(వ్యాపార విధానంచే ప్రారంభించబడింది)</translation> @@ -5214,6 +5249,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" />కి బదులుగా <ph name="PROTOCOL" /> లింక్లను తెరవాలనుకుంటోంది</translation> <translation id="8737709691285775803">షిల్</translation> <translation id="8741881454555234096">మౌస్తో పోలిస్తే తక్కువ రిజల్యూషన్ ఉన్న స్పర్శలను భర్తీ చేయడానికి స్పర్శ సంజ్ఞ యొక్క స్థానాన్ని సరి చేస్తుంది.</translation> +<translation id="8741995161408053644">మీ Google ఖాతా <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />లో ఇతర బ్రౌజింగ్ చరిత్ర రూపాలను కలిగి ఉండవచ్చు.</translation> <translation id="8743712320294854924">అరలో విస్తరింపజేయబడిన ఇన్పుట్ ఎంపికలను చూపండి.</translation> <translation id="874420130893181774">సాంప్రదాయ పిన్యిన్ ఇన్పుట్ పద్ధతి</translation> <translation id="8744525654891896746">ఈ పర్యవేక్షించబడే వినియోగదారు కోసం అవతార్ను ఎంచుకోండి</translation> @@ -5227,6 +5263,7 @@ <translation id="8757640015637159332">పబ్లిక్ సెషన్లోకి ప్రవేశించండి</translation> <translation id="8757742102600829832">కనెక్ట్ చేయడానికి Chromeboxని ఎంచుకోండి</translation> <translation id="8757803915342932642">Google Cloud పరికరాల్లోని పరికరం</translation> +<translation id="8758895886513993540">ఈ ఫ్లాగ్ వినియోగదారులు డెస్క్టాప్ భాగస్వామ్యం కోసం ట్యాబ్ను ఎంచుకోగలరో లేదో నియంత్రిస్తుంది.</translation> <translation id="8759408218731716181">బహుళ సైన్-ఇన్ను సెటప్ చేయలేరు</translation> <translation id="8759753423332885148">మరింత తెలుసుకోండి.</translation> <translation id="8761567432415473239">Google సురక్షిత బ్రౌజింగ్ ఇటీవల <ph name="SITE" />లో <ph name="BEGIN_LINK" />హానికర ప్రోగ్రామ్లను కనుగొనింది<ph name="END_LINK" />.</translation> @@ -5437,6 +5474,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB మౌస్ కనెక్ట్ చేయబడింది</translation> <translation id="9076523132036239772">క్షమించండి, మీ ఇమెయిల్ లేదా పాస్వర్డ్ ధృవీకరించబడలేదు. మొదట నెట్వర్క్కి కనెక్ట్ చెయ్యడానికి ప్రయత్నించండి.</translation> +<translation id="9077132661879924646">Androidలో ఏకీకృత మీడియా పైప్లైన్ను నిలిపివేస్తుంది.</translation> <translation id="907841381057066561">ప్యాకేజింగ్ సమయంలో తాత్కాలిక జిప్ ఫైల్ను సృష్టించడంలో విఫలమైంది.</translation> <translation id="9083147368019416919">నమోదుని తీసివేయడంలో విఫలమైంది</translation> <translation id="9084064520949870008">విండో వలె తెరువు</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 0f053b0..9e13006 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">เลือกพื้นที่รูปภาพในกรอบสี่เหลี่ยม</translation> <translation id="1697532407822776718">คุณพร้อมแล้ว!</translation> +<translation id="1697988819212986149">แสดงไอคอน Google ข้างรายการเมนูตามบริบทที่ขับเคลื่อนโดยบริการของ Google</translation> <translation id="1699274548822076330">เครื่องมือนี้ใช้ร่วมกับธง trace-upload-url คำเตือน: เมื่อเปิดใช้ Chrome จะบันทึกข้อมูลด้านประสิทธิภาพในการนำทางแต่ละครั้ง และจะอัปโหลดไปที่ URL ที่ระบุไว้ด้วยธง trace-upload-url การติดตามอาจมีข้อมูลส่วนบุคคลที่สามารถระบุตัวตนได้ (PII) เช่น ชื่อและ URL ของเว็บไซต์ที่คุณเยี่ยมชม</translation> <translation id="1699395855685456105">การแก้ไขฮาร์ดแวร์:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">โปรดอัปเดตข้อความรหัสผ่านที่ซิงค์ของคุณ</translation> <translation id="1788636309517085411">ใช้ค่าเริ่มต้น</translation> <translation id="1789575671122666129">ป๊อปอัป</translation> -<translation id="1790550373387225389">เข้าสู่โหมดการนำเสนอ</translation> <translation id="1792705092719258158">เปิดใช้โหมดหน้าจอมิเรอร์</translation> <translation id="1793119619663054394">คุณแน่ใจไหมว่าต้องการนำ "<ph name="PROFILE_NAME" />" และข้อมูล Chrome ทั้งหมดที่เกี่ยวข้องออกจากคอมพิวเตอร์นี้ เมื่อดำเนินการแล้วจะไม่สามารถยกเลิกได้</translation> <translation id="179767530217573436">4 สัปดาห์ที่ผ่านมา</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">เปลี่ยนการตั้งค่าเฉพาะสำหรับอุปกรณ์และอุปกรณ์ต่อพ่วงของคุณ</translation> <translation id="2673135533890720193">อ่านประวัติการเข้าชม</translation> <translation id="2673589024369449924">สร้างทางลัดบนเดสก์ท็อปสำหรับผู้ใช้นี้</translation> +<translation id="2675358154061544447">การสนับสนุนเชิงทดสอบขั้นสูงสำหรับการแสดงผล iframe แบบข้ามเว็บไซต์ในขั้นตอนที่แยกต่างหาก ในโหมดนี้ เอกสารต่างๆ จะแชร์กระบวนการของโหมดแสดงภาพก็ต่อเมื่อเอกสารเหล่านั้นมาจากเว็บไซต์เดียวกัน</translation> <translation id="2676946222714718093">กำลังเล่นบน</translation> <translation id="2678063897982469759">เปิดการใช้งานอีกครั้ง</translation> <translation id="2678246812096664977">ปลั๊กอินทั้งหมด</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">วิธีที่ตัวจัดการรหัสผ่านจัดการการป้อนข้อความอัตโนมัติสำหรับข้อมูลรับรองการซิงค์</translation> <translation id="29611076221683977">ผู้บุกรุกที่กำลังอยู่ใน <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> อาจพยายามติดตั้งโปรแกรมอันตรายซึ่งขโมยหรือลบข้อมูล (ตัวอย่างเช่น รูปภาพ รหัสผ่าน ข้อความ และบัตรเครดิต) ลงในเครื่อง Mac ของคุณ</translation> <translation id="2961695502793809356">คลิกเพื่อไปข้างหน้า กดค้างเพื่อดูประวัติการเข้าชม</translation> +<translation id="296216853343927883">แบรนด์ Google ในเมนูตามบริบท</translation> <translation id="2963151496262057773">ปลั๊กอินต่อไปนี้ไม่ตอบสนอง: <ph name="PLUGIN_NAME" />คุณต้องการหยุดปลั๊กอินดังกล่าวไหม</translation> <translation id="2963783323012015985">แป้นพิมพ์ภาษาตุรกี</translation> <translation id="2964193600955408481">ปิดใช้งาน WiFi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">คลิกขวาที่ปุ่มด้านบนเพื่อดูคนอื่น</translation> <translation id="3026050830483105579">ทั้งหมดอยู่ที่นี่แล้ว</translation> <translation id="302620147503052030">ปุ่มแสดง</translation> +<translation id="302781076327338683">โหลดแคชการข้ามซ้ำ</translation> +<translation id="3030243755303701754">ผู้ใช้ภายใต้การดูแลสามารถสำรวจเว็บไปพร้อมกับการแนะนำของคุณได้ ในฐานะที่เป็นผู้จัดการของผู้ใช้ภายใต้การดูแลใน Chrome คุณสามารถ: + + • อนุญาตหรือไม่อนุญาตการเข้าถึงบางเว็บไซต์ได้ + • ตรวจสอบเว็บไซต์ที่ผู้ใช้ภายใต้การดูแลเข้าชม และ + • จัดการการตั้งค่าอื่นๆ + +การสร้างผู้ใช้ภายใต้การดูแลจะไม่สร้างบัญชี Google และบุ๊กมาร์ก ประวัติการเข้าชม และค่ากำหนดอื่นๆ จะไม่มีในอุปกรณ์เครื่องอื่นเมื่อใช้การซิงค์ของ Chrome หลังจากคุณสร้างผู้ใช้ภายใต้การดูแลใหม่ คุณสามารถจัดการการตั้งค่าของพวกเขาได้ทุกเมื่อจากทุกอุปกรณ์ที่ <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> + +สำหรับข้อมูลเพิ่มเติม โปรดไปที่<ph name="BEGIN_LINK" />ศูนย์ช่วยเหลือ<ph name="END_LINK" /></translation> <translation id="3031417829280473749">เอเจนต์เอ็กซ์</translation> <translation id="3031557471081358569">เลือกรายการที่จะนำเข้าต่อไปนี้:</translation> <translation id="3033332627063280038">เปิดการใช้ Cache-Control: คำสั่งไม่อัปเดตขณะตรวจสอบใหม่ รุ่นทดลอง ซึ่งเป็นการอนุญาตให้เซิร์ฟเวอร์ระบุทรัพยากรที่ระบบกำลังตรวจสอบในพื้นหลังอีกครั้งเพื่อลดเวลาแฝง</translation> @@ -1648,7 +1660,6 @@ <translation id="3324301154597925148">นี่คือหน้าการค้นหาที่คุณต้องการใช่ไหม</translation> <translation id="3324684065575061611">(ปิดใช้งานโดยนโยบายองค์กร)</translation> <translation id="3326821416087822643">กำลังซิป <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">ออกจากโหมดการนำเสนอ</translation> <translation id="3330686263988132416">ส่วนหัวเดิมของ WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">เปิดใช้โหมดหน้าจอมิเรอร์ โหมดนี้จะพลิกภาพหน้าจอในแนวนอน</translation> @@ -1693,6 +1704,7 @@ <translation id="3392020134425442298">กู้คืนไฟล์ที่เป็นอันตราย</translation> <translation id="3394150261239285340"><ph name="HOST" /> ต้องการใช้กล้องและไมโครโฟนของคุณ</translation> <translation id="3394279550557729862">เปิดใช้การสนับสนุนการใช้ข้อความแจ้งเตือนดั้งเดิมและศูนย์การแจ้งเตือนบนแพลตฟอร์มเมื่อสามารถใช้ได้</translation> +<translation id="3394862755749546286">ปิดใช้ช่องทางสื่อแบบรวม (Android และเดสก์ท็อป) บน Android</translation> <translation id="3396331542604645348">เครื่องพิมพ์ที่เลือกไว้ไม่สามารถใช้ได้หรือไม่ได้รับการติดตั้งอย่างถูกต้อง โปรดตรวจสอบเครื่องพิมพ์ของคุณหรือลองเลือกเครื่องพิมพ์อื่น</translation> <translation id="3399597614303179694">แป้นพิมพ์ภาษามาซิโดเนีย</translation> <translation id="3401130144947259741">หากเปิดใช้งาน การติดตามเหตุการณ์จะถูกส่งออกไปที่ Event Tracing for Windows (ETW) จากนั้น จะสามารถบันทึกได้ด้วยเครื่องมือต่างๆ เช่น UIForETW หรือ Xperf</translation> @@ -1903,7 +1915,6 @@ <translation id="367645871420407123">เว้นว่างไว้หากคุณต้องการตั้งรหัสผ่านระดับรูทเป็นภาพทดสอบเริ่มต้น</translation> <translation id="3678156199662914018">ส่วนขยาย: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">แป้นพิมพ์มอลตา</translation> -<translation id="3680173818488851340">iframe ที่มีลำดับความสำคัญต่ำ</translation> <translation id="3683524264665795342">คำขอการแชร์หน้าจอของ <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">เมื่อใช้ข้อมูลมือถือ การซิงค์ Google ไดรฟ์จะปิดใช้อยู่เป็นค่าเริ่มต้น</translation> <translation id="3685387984467886507">จำการตัดสินใจในการไปต่อแม้มีข้อผิดพลาด SSL ในช่วงเวลาที่ระบุ</translation> @@ -1952,6 +1963,7 @@ <translation id="3741158646617793859">ตอนนี้ <ph name="DEVICE_NAME" /> จะปรากฏในคอนโซลผู้ดูแลระบบ</translation> <translation id="3741243925913727067">สำรองรูปภาพและวิดีโอของอุปกรณ์สื่อไปยัง Google ไดรฟ์</translation> <translation id="3743492083222969745">เปิด/ปิดตัวเลือกการป้อนข้อมูลด้วยท่าทางในหน้าการตั้งค่าสำหรับแป้นพิมพ์เสมือน</translation> +<translation id="3744111561329211289">ซิงค์ในแบ็กกราวด์</translation> <translation id="3749289110408117711">ชื่อไฟล์</translation> <translation id="3751427701788899101">สูญเสียการเชื่อมต่อ</translation> <translation id="3751522270321808809">เว็บไซต์นี้อาจพยายามหลอกล่อคุณเพื่อขโมยข้อมูล (ตัวอย่างเช่น รหัสผ่าน ข้อความ หรือบัตรเครดิต)</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">ลงชื่อเข้าใช้บัญชีอื่น</translation> <translation id="4219614746733932747">หากเปิดใช้ไว้ Blink จะใช้กลไกในการซูมเพื่อปรับขนาดเนื้อหาสำหรับปัจจัยที่มีผลต่อขนาดของอุปกรณ์</translation> <translation id="4220865787605972627">อนุญาตการปรับเทียบสีของจอแสดงผล หากจอสนับสนุนคุณลักษณะนี้</translation> +<translation id="4232692576734035989">โหมดประสิทธิภาพเชิงทดสอบขั้นสูงแบบข้ามเว็บไซต์มีอยู่ในกระบวนการที่แยกจากเอกสารบนสุด ในโหมดนี้ iframe จากเว็บไซต์ของบุคคลที่สามอื่นๆ จะได้รับอนุญาตให้แชร์กระบวนการได้</translation> <translation id="4235200303672858594">ทั้งหน้าจอ</translation> <translation id="4235813040357936597">เพิ่มบัญชีสำหรับ <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">ไม่สามารถแสดง <ph name="PRODUCT_NAME" /> ในภาษานี้ได้</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">ยกเลิกรูปภาพ</translation> <translation id="4509345063551561634">ตำแหน่ง:</translation> <translation id="4514542542275172126">ตั้งค่าผู้ใช้ภายใต้การดูแลใหม่</translation> +<translation id="4514914692061505365">บังคับให้ใช้เครื่องมือแปลด่วน Subzero ของ PNaCl สำหรับไฟล์ pexe ทั้งหมด</translation> <translation id="4518677423782794009">หาก Chrome เกิดขัดข้อง แสดงหน้าเริ่มต้นใช้งาน แถบเครื่องมือที่ผิดปกติ หรือโฆษณาที่ไม่คาดคิดซึ่งคุณไม่สามารถกำจัดออก หรือเปลี่ยนประสบการณ์ใช้งานเบราว์เซอร์ของคุณ คุณอาจแก้ไขปัญหาดังกล่าวได้โดยการเรียกใช้เครื่องมือทำความสะอาด Chrome</translation> <translation id="452039078290142656">อุปกรณ์ที่ไม่รู้จักจาก <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">รายละเอียด</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">แอปและส่วนขยายสามารถแก้ไขได้โดยผู้จัดการ (<ph name="CUSTODIAN_NAME" />) เท่านั้น</translation> <translation id="4601242977939794209">ตัวแปลง EMF</translation> <translation id="4602466770786743961">อนุญาตให้ <ph name="HOST" /> เข้าถึงกล้องและไมโครโฟนของคุณเสมอ</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">ไม่ได้เชื่อมต่ออินเทอร์เน็ต</translation> <translation id="4608500690299898628">&ค้นหา...</translation> <translation id="4610637590575890427">คุณหมายความว่าต้องการไปที่ <ph name="SITE" /> หรือไม่</translation> @@ -2785,6 +2800,7 @@ <translation id="5062930723426326933">การลงชื่อเข้าใช้ล้มเหลว โปรดเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง</translation> <translation id="5063180925553000800">PIN ใหม่:</translation> <translation id="5067867186035333991">ถามว่า <ph name="HOST" /> ต้องการเข้าถึงไมโครโฟนของคุณไหม</translation> +<translation id="5068918910148307423">ไม่อนุญาตให้เว็บไซต์ที่ปิดล่าสุดดำเนินการส่งและรับข้อมูลต่อจนเสร็จ</translation> <translation id="507075806566596212">คุณกำลังจะลงทะเบียน <ph name="DEVICE_TYPE" /> เครื่องนี้กับ Google เพื่อเปิดใช้ความสามารถในการค้นหา ล้างข้อมูล และล็อกอุปกรณ์ระยะไกล การดำเนินการนี้จำเป็นต้องรีบูตเครื่อง คุณต้องการดำเนินการต่อไหม</translation> <translation id="5072836811783999860">แสดงบุ๊กมาร์กที่มีการจัดการ</translation> <translation id="5074318175948309511">อาจต้องโหลดหน้านี้ซ้ำก่อนที่การตั้งค่าใหม่จะมีผล</translation> @@ -2894,6 +2910,7 @@ <translation id="5227808808023563348">ค้นหาข้อความก่อนหน้า</translation> <translation id="5228076606934445476">มีบางอย่างผิดปกติกับอุปกรณ์ ในการกู้คืนจากข้อผิดพลาดนี้ คุณจะต้องรีบูตเครื่องและลองอีกครั้ง</translation> <translation id="5228962187251412618">ตรวจสอบทางออนไลน์เท่านั้น</translation> +<translation id="5229622432348746578">ปิดเสียงสำหรับการแชร์เดสก์ท็อป</translation> <translation id="5230516054153933099">หน้าต่าง</translation> <translation id="5232178406098309195">เมื่อคุณใช้คำสั่งการเปิดใช้งานด้วยเสียง เช่น "Ok Google" หรือการแตะไอคอนไมโครโฟน กิจกรรมเสียงพูดและเสียงส่วนตัวของคุณจะเก็บเสียงพูดและเสียงอื่นๆ ในบัญชี โดยจะเก็บบันทึกเสียงพูด/เสียงที่ตามมา และอีก 2-3 วินาทีก่อนหน้านั้นด้วย</translation> <translation id="523299859570409035">ข้อยกเว้นการแจ้งเตือน</translation> @@ -3148,6 +3165,7 @@ <translation id="5557991081552967863">ให้ Wi-Fi เปิดอยู่ตลอดระหว่างนอนหลับ</translation> <translation id="5558129378926964177">ขยาย&</translation> <translation id="556042886152191864">ปุ่ม</translation> +<translation id="5562781907504170924">แท็บนี้เชื่อมต่อกับอุปกรณ์บลูทูธอยู่</translation> <translation id="5565871407246142825">บัตรเครดิต</translation> <translation id="5567989639534621706">แคชของแอปพลิเคชัน</translation> <translation id="5568069709869097550">ไม่สามารถลงชื่อเข้าใช้</translation> @@ -3307,6 +3325,7 @@ <translation id="5803531701633845775">เลือกวลีจากด้านหลัง โดยไม่ต้องย้ายเคอร์เซอร์ </translation> <translation id="5804241973901381774">การอนุญาต</translation> <translation id="580571955903695899">จัดลำดับใหม่ตามชื่อ</translation> +<translation id="5808982448801399019">การอนุญาตล้มเหลว</translation> <translation id="580961539202306967">ถามฉันเมื่อไซต์ต้องการส่งข้อความพุชให้ฉัน (แนะนำ)</translation> <translation id="5815645614496570556">ที่อยู่ X.400</translation> <translation id="5817397429773072584">จีนตัวเต็ม</translation> @@ -3576,6 +3595,7 @@ <translation id="6243774244933267674">เซิร์ฟเวอร์ไม่พร้อมใช้งาน</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">พร้อมอัปเดต</translation> +<translation id="6248400709929739064">เปิดคำบรรยาย</translation> <translation id="6248988683584659830">ค้นการตั้งค่า</translation> <translation id="6251870443722440887">GDI จัดการ</translation> <translation id="6251889282623539337">ข้อกำหนดในการให้บริการของ <ph name="DOMAIN" /></translation> @@ -3600,6 +3620,7 @@ <translation id="6277105963844135994">ระยะหมดเวลาของเครือข่าย</translation> <translation id="6277518330158259200">จับ&ภาพหน้าจอ</translation> <translation id="6279183038361895380">กด |<ph name="ACCELERATOR" />| เพื่อแสดงเคอร์เซอร์ของคุณ</translation> +<translation id="6280215091796946657">ลงชื่อเข้าใช้ด้วยบัญชีอื่น</translation> <translation id="6281743458679673853">การทดสอบให้ API ทั้งหมดแสดงถึงวิวพอร์ตแบบเค้าโครงซึ่งจะทำให้คุณสมบัติในการเลื่อนหน้าต่างสัมพันธ์กับวิวพอร์ตแบบเค้าโครง</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{เครื่องพิมพ์ใหม่บนเครือข่ายของคุณ}other{เครื่องพิมพ์ใหม่บนเครือข่ายของคุณ}}</translation> <translation id="6285395082104474418">ถาดสถานะแสดงสถานะปัจจุบันของเครือข่าย แบตเตอรี่ และอื่นๆ</translation> @@ -3681,6 +3702,9 @@ <translation id="6418160186546245112">กำลังเปลี่ยนกลับไปใช้เวอร์ชันที่ติดตั้งไว้ก่อนหน้านี้ของ <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">ลบการเข้าถึงของแอปทั้งหมดออกอย่างถาวร</translation> <translation id="6418505248408153264">เปิดใช้ประวัติดีไซน์ Material</translation> +<translation id="6419288379019356534">อุปกรณ์นี้จัดการโดย <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> + <ph name="LINE_BREAK" /> + โปรดคลิก "ถัดไป" เพื่อลงชื่อเข้าใช้บัญชี <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ของคุณต่อ</translation> <translation id="6419902127459849040">ยุโรปตอนกลาง</translation> <translation id="6420676428473580225">เพิ่มลงในเดสก์ท็อป</translation> <translation id="6422329785618833949">พลิกรูปภาพแล้ว</translation> @@ -3841,7 +3865,6 @@ <translation id="6662016084451426657">การซิงค์มีข้อผิดพลาด: โปรดติดต่อผู้ดูแลระบบเพื่อเปิดใช้งานการซิงค์</translation> <translation id="6663792236418322902">รหัสผ่านที่คุณเลือกจะต้องนำมาใช้ในการกู้คืนไฟล์นี้ในภายหลัง โปรดบันทึกรหัสผ่านไว้ในที่ปลอดภัย</translation> <translation id="6664237456442406323">น่าเสียดายที่คอมพิวเตอร์ของคุณถูกกำหนดค่าด้วย ID ฮาร์ดแวร์ที่มีรูปแบบที่ไม่ถูกต้อง ซึ่งจะป้องกันไม่ให้ Chrome OS อัปเดตการแก้ใขปัญหาความปลอดภัยล่าสุดได้ และคอมพิวเตอร์ของคุณ <ph name="BEGIN_BOLD" />อาจเสี่ยงต่อการโจมตีที่เป็นอันตราย<ph name="END_BOLD" /></translation> -<translation id="666541661050183336">ลดลำดับความสำคัญในการโหลดทรัพยากร iframe</translation> <translation id="6666647326143344290">ด้วยบัญชี Google ของคุณ</translation> <translation id="6675665718701918026">เชื่อมต่ออุปกรณ์ชี้ตำแหน่งแล้ว</translation> <translation id="6677037229676347494">คาดการณ์ ID "<ph name="EXPECTED_ID" />" แต่ ID ที่แจ้งคือ "<ph name="NEW_ID" />"</translation> @@ -3934,6 +3957,7 @@ <translation id="6825883775269213504">รัสเซีย</translation> <translation id="6827236167376090743">วิดีโอนี้จะเล่นวนรอบ</translation> <translation id="6828153365543658583">จำกัดการลงชื่อเข้าใช้ของผู้ใช้ต่อไปนี้:</translation> +<translation id="6828434191343384461">ข้อมูลที่เลือกถูกนำออกจาก Chrome และอุปกรณ์ที่ซิงค์แล้ว บัญชี Google ของคุณอาจมีประวัติการท่องเว็บในรูปแบบอื่น เช่น การค้นหาและกิจกรรมจากบริการอื่นๆ ของ Google ที่ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="6828860976882136098">ไม่สามารถตั้งค่าการอัปเดตอัตโนมัติสำหรับผู้ใช้ทุกคน (ข้อผิดพลาดในการดำเนินการตรวจสอบล่วงหน้า: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">iy[ความช่วยเหลือเกี่ยวกับ <ph name="DEVICE_TYPE" /></translation> <translation id="6829270497922309893">ลงทะเบียนในองค์กรของคุณ</translation> @@ -4014,6 +4038,7 @@ <translation id="6965382102122355670">ตกลง</translation> <translation id="6965648386495488594">พอร์ต</translation> <translation id="6965978654500191972">อุปกรณ์</translation> +<translation id="6969104364835835175">Force PNaCl Subzero</translation> <translation id="6970230597523682626">บัลแกเรีย</translation> <translation id="6970480684834282392">ประเภทการเริ่มต้น</translation> <translation id="6970856801391541997">พิมพ์หน้าเว็บที่ระบุ</translation> @@ -4096,10 +4121,12 @@ <translation id="7057058088140140610">ใช้ข้อมูลบัตรเครดิตและที่อยู่จาก Google Payments</translation> <translation id="7059858479264779982">ตั้งค่าเป็นเรียกใช้อัตโนมัติ</translation> <translation id="7061692898138851896">บันทึกรหัสผ่านอัตโนมัติ</translation> +<translation id="7062222374113411376">อนุญาตให้เว็บไซต์ที่ปิดล่าสุดดำเนินการส่งและรับข้อมูลต่อจนเสร็จ (แนะนำ)</translation> <translation id="7063129466199351735">กำลังประมวลผลทางลัด...</translation> <translation id="7065223852455347715">มีการล็อกอุปกรณ์นี้ในโหมดที่ป้องกันการลงทะเบียนขององค์กร หากคุณต้องการลงทะเบียนอุปกรณ์ คุณจะต้องดำเนินการกู้คืนอุปกรณ์ก่อน</translation> <translation id="7065534935986314333">เกี่ยวกับระบบ</translation> <translation id="7066944511817949584">ไม่สามารถเชื่อมต่อกับ "<ph name="DEVICE_NAME" />"</translation> +<translation id="7067725467529581407">ไม่ต้องแสดงการแจ้งเตือนนี้อีก</translation> <translation id="7070804685954057874">การป้อนโดยตรง </translation> <translation id="7072010813301522126">ชื่อทางลัด</translation> <translation id="7072025625456903686">อนุญาตทั้งหมดหรือกำหนดค่า</translation> @@ -4372,6 +4399,7 @@ <translation id="7489605380874780575">ตรวจสอบคุณสมบัติ</translation> <translation id="749028671485790643">คนที่ <ph name="VALUE" /></translation> <translation id="7491962110804786152">แท็บ</translation> +<translation id="7493386493263658176">ส่วนขยาย <ph name="EXTENSION_NAME" /> อาจรวบรวมข้อความทั้งหมดที่คุณพิมพ์ ซึ่งรวมถึงข้อมูลส่วนตัว เช่น รหัสผ่านและหมายเลขบัตรเครดิต คุณต้องการใช้ส่วนขยายนี้ไหม</translation> <translation id="7495778526395737099">หากลืมรหัสผ่านเก่า</translation> <translation id="7503191893372251637">ประเภทใบรับรองของ Netscape </translation> <translation id="7503821294401948377">ไม่สามารถโหลดไอคอน "<ph name="ICON" />" เพื่อให้เกิดการทำงานของเบราว์เซอร์</translation> @@ -4423,6 +4451,7 @@ <translation id="756445078718366910">เปิดหน้าต่างเบราว์เซอร์</translation> <translation id="7564847347806291057">สิ้นสุดกระบวนการ</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">ล้างข้อมูล Chrome แล้ว</translation> <translation id="7568790562536448087">การอัปเดต</translation> <translation id="7573172247376861652">ชาร์จแบตเตอรี่</translation> <translation id="7576032389798113292">6x4</translation> @@ -4552,6 +4581,7 @@ <translation id="7786207843293321886">ออกจากเซสชันผู้มาเยือน</translation> <translation id="7786889348652477777">โ&หลดแอปซ้ำ</translation> <translation id="7787129790495067395">คุณกำลังใช้งานข้อความรหัสผ่านอยู่ หากคุณลืมข้อความรหัสผ่านของคุณ คุณสามารถรีเซ็ตการซิงค์เพื่อล้างข้อมูลจากเซิร์ฟเวอร์ของ Google โดยใช้หน้าแดชบอร์ดของ Google ได้</translation> +<translation id="7787308148023287649">แสดงบนหน้าจออื่น</translation> <translation id="7788080748068240085">หากต้องการบันทึก "<ph name="FILE_NAME" />" เป็นแบบออฟไลน์ คุณจะต้องเพิ่มพื้นที่ว่างอีก <ph name="TOTAL_FILE_SIZE" /> โดยทำดังนี้:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />เลิกตรึงไฟล์ที่คุณไม่ต้องการเข้าถึงแบบออฟไลน์อีกต่อไป<ph name="MARKUP_3" /> <ph name="MARKUP_4" />ลบไฟล์จากโฟลเดอร์ "ดาวน์โหลด"<ph name="MARKUP_5" /></translation> @@ -4620,6 +4650,7 @@ <translation id="7878999881405658917">Google ส่งการแจ้งเตือนไปยังโทรศัพท์เครื่องนี้แล้ว โปรดทราบว่าเมื่อใช้บลูทูธ โทรศัพท์อาจทำให้ <ph name="DEVICE_TYPE" /> ไม่ล็อกตลอดเวลาจากระยะเกินกว่า 100 ฟุต หากคุณไม่ต้องการใช้คุณลักษณะนี้ คุณสามารถ<a>ปิดคุณลักษณะนี้ชั่วคราว</a>ได้</translation> <translation id="7879478708475862060">ใช้ตามโหมดป้อนข้อมูล</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" เพิ่มแอปและส่วนขยายเหล่านี้:</translation> +<translation id="7881969471599061635">ปิดคำบรรยาย</translation> <translation id="7884988936047469945">คุณลักษณะการเข้าถึงรุ่นทดลอง</translation> <translation id="7885253890047913815">ปลายทางล่าสุด</translation> <translation id="7885283703487484916">สั้นมาก</translation> @@ -4983,6 +5014,7 @@ <translation id="839736845446313156">ลงทะเบียน</translation> <translation id="8398790343843005537">หาโทรศัพท์ของคุณ</translation> <translation id="8398877366907290961">ดำเนินการต่อ</translation> +<translation id="8399276228600040370">ลงชื่อเข้าใช้ด้วยบัญชีที่บันทึกไว้กับ <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">ช่องทำเครื่องหมายที่ไม่ได้เลือก</translation> <translation id="8408402540408758445">ดึงผลการค้นหาล่วงหน้า</translation> <translation id="8410073653152358832">ใช้โทรศัพท์นี้</translation> @@ -5069,6 +5101,7 @@ <translation id="8545211332741562162">เปิดใช้งานหน้าเว็บเพื่อใช้คุณลักษณะ JavaScript แบบทดลอง</translation> <translation id="8545575359873600875">ขออภัย ไม่สามารถยืนยันรหัสผ่านของคุณ ผู้จัดการของผู้ใช้ภายใต้การดูแลรายนี้อาจเปลี่ยนรหัสผ่านเมื่อเร็วๆ นี้ หากเป็นเช่นนั้น จะมีการใช้รหัสผ่านใหม่เมื่อคุณลงชื่อเข้าใช้ครั้งถัดไป ลองใช้รหัสผ่านเก่าของคุณ</translation> <translation id="8546306075665861288">แคชของภาพ</translation> +<translation id="854653344619327455">เมื่อเปิดการตั้งค่าสถานะนี้ เครื่องมือเลือกการแชร์เดสก์ท็อปจะไม่ให้ผู้ใช้เลือกว่าต้องการแชร์เสียงหรือไม่</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">อักขระ</translation> <translation id="855081842937141170">ตรึงแท็บ</translation> @@ -5099,6 +5132,7 @@ <translation id="8589311641140863898">API ส่วนขยายที่อยู่ในช่วงทดลอง</translation> <translation id="8590375307970699841">ติดตั้งการอัปเดตอัตโนมัติ</translation> <translation id="8592071947729879125">จำกัดสิทธิ์ของ iframe</translation> +<translation id="8592125506633137593">การแยกเอกสารบนสุด</translation> <translation id="8594787581355215556">ลงชื่อเข้าใช้ด้วย <ph name="USER_EMAIL_ADDRESS" /> จัดการข้อมูลที่ซิงค์ของคุณใน <ph name="BEGIN_LINK" />Google แดชบอร์ด<ph name="END_LINK" /></translation> <translation id="8596540852772265699">ไฟล์ที่กำหนดเอง</translation> <translation id="8596785155158796745">ไมโครโฟนไม่พร้อมใช้งานในขณะนี้ <ph name="BEGIN_LINK" />จัดการไมโครโฟน<ph name="END_LINK" /></translation> @@ -5171,6 +5205,7 @@ <translation id="8688579245973331962">หากไม่เห็นชื่อของคุณ</translation> <translation id="8688644143607459122">ในการคลิก "ดำเนินการต่อ" แสดงว่าคุณตกลงที่จะใช้ Google Payments และเพื่อปกป้องคุณจากการประพฤติมิชอบ จะมีการแชร์ข้อมูลเกี่ยวกับคอมพิวเตอร์ของคุณ (รวมถึงตำแหน่งของคอมพิวเตอร์) กับ Google Payments</translation> <translation id="8689102680909215706">ติดตั้งส่วนขยาย "<ph name="EXTENSION_NAME" />" แล้วจากระยะไกล</translation> +<translation id="868926756781121513">แชร์เดสก์ท็อปด้วยต้นฉบับของแท็บ</translation> <translation id="8689341121182997459">หมดอายุ:</translation> <translation id="8690754533598178758">ข้อยกเว้นของไมโครโฟน Adobe Flash Player จะแตกต่างกันไป</translation> <translation id="8691686986795184760">(เปิดใช้งานตามนโยบายองค์กร)</translation> @@ -5214,6 +5249,7 @@ <translation id="8737685506611670901">เปิดลิงก์ <ph name="PROTOCOL" /> แทน <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">ปรับแต่งตำแหน่งของท่าทางสัมผัสด้วยการแตะเพื่อชดเชยการแตะที่มีความละเอียดต่ำเมื่อเทียบกับการใช้เมาส์</translation> +<translation id="8741995161408053644">บัญชี Google ของคุณอาจมีประวัติการท่องเว็บในรูปแบบอื่นๆ ที่ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="8743712320294854924">แสดงตัวเลือกการป้อนข้อมูลแบบขยายในชั้นวาง</translation> <translation id="874420130893181774">วิธีการป้อนข้อมูลแบบพินอินดั้งเดิม</translation> <translation id="8744525654891896746">เลือกอวาตาร์สำหรับผู้ใช้ภายใต้การดูแลนี้</translation> @@ -5227,6 +5263,7 @@ <translation id="8757640015637159332">เข้าสู่การเข้าชมแบบสาธารณะ</translation> <translation id="8757742102600829832">เลือก Chromebox ที่จะเชื่อมต่อ</translation> <translation id="8757803915342932642">อุปกรณ์ใน "อุปกรณ์ Google Cloud"</translation> +<translation id="8758895886513993540">การตั้งค่าสถานะนี้เป็นการควบคุมว่าจะให้ผู้ใช้สามารถเลือกแท็บสำหรับการแชร์เดสก์ท็อปได้หรือไม่</translation> <translation id="8759408218731716181">ไม่สามารถตั้งค่าการลงชื่อเข้าสู่ระบบพร้อมกันหลายบัญชีได้</translation> <translation id="8759753423332885148">เรียนรู้เพิ่มเติม</translation> <translation id="8761567432415473239">Google Safe Browsing <ph name="BEGIN_LINK" />พบโปรแกรมที่เป็นอันตราย<ph name="END_LINK" />บน <ph name="SITE" /> เมื่อเร็วๆ นี้</translation> @@ -5437,6 +5474,7 @@ <translation id="9074739597929991885">บลูทูธ</translation> <translation id="9074836595010225693">เชื่อมต่อเมาส์ USB แล้ว</translation> <translation id="9076523132036239772">ขออภัย ไม่สามารถยืนยันอีเมลและรหัสผ่านของคุณ ให้ลองเชื่อมต่อเครือข่ายก่อน</translation> +<translation id="9077132661879924646">ปิดใช้ช่องทางสื่อแบบรวมบน Android</translation> <translation id="907841381057066561">ไม่สามารถสร้างซิปไฟล์ชั่วคราวระหว่างการแพ็คเกจ</translation> <translation id="9083147368019416919">ไม่สามารถยกเลิกการลงทะเบียนได้</translation> <translation id="9084064520949870008">เปิดเป็นหน้าต่าง</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 141c014..e0bc9f39 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">ÜstKrktr</translation> <translation id="1697068104427956555">Resimde kare şeklinde bir alan seçin.</translation> <translation id="1697532407822776718">Artık hazırsınız!</translation> +<translation id="1697988819212986149">Google hizmetleri tarafından desteklenen içerik menüsü öğelerinin yanında bir Google simgesi gösterir.</translation> <translation id="1699274548822076330">Bu, trace-upload-url (yükleme URL'sini izle) işaretiyle birlikte kullanılmak içindir. UYARI: Bu politika etkinleştirildiğinde, Chrome her gezinme için performans verilerini kaydeder ve onları trace-upload-url (yükleme URL'sini izle) işaretinin belirttiği URL'ye yükler. İz; ziyaret ettiğiniz web sitelerin başlıkları ve URL'leri gibi kimlik bilgilerini (PII) içerebilir.</translation> <translation id="1699395855685456105">Donanım düzeltmesi:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Lütfen senkronizasyon parolanızı güncelleyin.</translation> <translation id="1788636309517085411">Varsayılanı kullan</translation> <translation id="1789575671122666129">Pop-up'lar</translation> -<translation id="1790550373387225389">Sunu Moduna Geç</translation> <translation id="1792705092719258158">Yansıtılmış ekran modunu etkinleştirin.</translation> <translation id="1793119619663054394">"<ph name="PROFILE_NAME" />" isimli profili ve onunla ilişkilendirilmiş tüm Chrome verilerini bu bilgisayardan kaldırmak istediğinizden emin misiniz? Bu işlem geri alınamaz.</translation> <translation id="179767530217573436">son 4 hafta</translation> @@ -1155,6 +1155,7 @@ <translation id="267285457822962309">Cihazınıza ve çevre birimlerine özgü ayarları değiştirin.</translation> <translation id="2673135533890720193">Göz atma geçmişinizi okuma</translation> <translation id="2673589024369449924">Bu kullanıcı için bir masaüstü kısayolu oluştur</translation> +<translation id="2675358154061544447">Farklı süreçlerde, siteler arası iframe'ler oluşturulmasına yönelik deney aşamasında bir destek. Bu modda, dokümanlar yalnızca aynı web sitesinden olduklarında bir oluşturucu sürecini paylaşırlar.</translation> <translation id="2676946222714718093">Şurada oynatılıyor:</translation> <translation id="2678063897982469759">Tekrar etkinleştir</translation> <translation id="2678246812096664977">Tüm eklentiler</translation> @@ -1381,6 +1382,7 @@ <translation id="2960393411257968125">Şifre yöneticisinin, senkronizasyon kimlik bilgilerine ilişkin otomatik doldurma özelliğini işleme şekli.</translation> <translation id="29611076221683977">Şu anda <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> sitesinde bulunan saldırganlar, Mac makinenize bilgilerinizi (örneğin fotoğraflar, şifreler, mesajlar ve kredi kartları) çalacak veya silecek tehlikeli programlar yüklemeyi deneyebilir.</translation> <translation id="2961695502793809356">İlerlemek için tıkla, geçmişi görmek için tıklayıp tut</translation> +<translation id="296216853343927883">İçerik menüsünde Google markası</translation> <translation id="2963151496262057773">Aşağıdaki eklenti yanıt vermiyor: <ph name="PLUGIN_NAME" />Durdurmak ister misiniz?</translation> <translation id="2963783323012015985">Türkçe klavye</translation> <translation id="2964193600955408481">Kablosuz bağlantıyı devre dışı bırak</translation> @@ -1430,6 +1432,16 @@ <translation id="3025729795978504041">Diğer kişileri görüntülemek için yukarıdaki düğmeyi sağ tıklayın.</translation> <translation id="3026050830483105579">Hepsi burada.</translation> <translation id="302620147503052030">Düğmeyi göster</translation> +<translation id="302781076327338683">Önbelleği atlayarak yeniden yükle</translation> +<translation id="3030243755303701754">Denetlenen bir kullanıcı web'i sizin rehberliğinizde keşfedebilir. Chrome'da denetlenen bir kullanıcının yöneticisi olarak şunları yapabilirsiniz: + + • belirli web sitelerine izin verebilir veya belirli siteleri yasaklayabilirsiniz, + • denetlenen kullanıcının ziyaret ettiği web sitelerini incleyebilirsiniz ve + • diğer ayarları yönetebilirsiniz. + +Denetlenen kullanıcı oluşturulduğunda ayrıca bir Google Hesabı oluşturulmaz. Denetlenen kullanıcıların yer işaretleri, göz atma geçmişleri ve diğer tercihleri Chrome Senkronizasyonu ile diğer cihazlarda kullanılmaz. Yeni bir denetlenen kullanıcı oluşturduktan sonra, istediğiniz zaman herhangi bir cihazda <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> adresinden kullanıcının ayarlarını yönetebilirsiniz. + +Daha fazla bilgi için <ph name="BEGIN_LINK" />Yardım Merkezimizi<ph name="END_LINK" /> ziyaret edin.</translation> <translation id="3031417829280473749">Ajan X</translation> <translation id="3031557471081358569">İçe aktarılacak öğeleri seçin:</translation> <translation id="3033332627063280038">Deneysel Önbellek Kontrolü olan stale-while-revalidate yönergesini uygulamayı etkinleştir. Bu, sunucunun gecikme süresini iyileştirmek üzere bazı kaynakların arka planda tekrar doğrulanabileceğini belirtmeye izin verir.</translation> @@ -1650,7 +1662,6 @@ <translation id="3324301154597925148">Bu Beklediğiniz Arama Sayfası mı?</translation> <translation id="3324684065575061611">(Kurumsal politika tarafından devre dışı bırakıldı)</translation> <translation id="3326821416087822643"><ph name="FILE_NAME" /> sıkıştırılıyor...</translation> -<translation id="3330206034087160972">Sunu Modundan Çık</translation> <translation id="3330686263988132416">WebRTC Stun kaynak üst bilgisi</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Yansıtılmış ekran modunu etkinleştirin. Bu mod, ekran görüntüsünü yatay olarak çevirir.</translation> @@ -1695,6 +1706,7 @@ <translation id="3392020134425442298">Kötü amaçlı dosyayı kurtar</translation> <translation id="3394150261239285340"><ph name="HOST" /> kameranızı ve mikrofonunuzu kullanmak istiyor.</translation> <translation id="3394279550557729862">Yerel bildirim mesajlarının ve bildirim merkezinin kullanılabildiği platformlarda bu özelliklere ilişkin desteği etkinleştirin.</translation> +<translation id="3394862755749546286">Android'de birleşik (Android ve masaüstü) medya hattını devre dışı bırakır.</translation> <translation id="3396331542604645348">Seçilen yazıcı kullanılamıyor veya doğru yüklenmemiş. Yazıcınızı kontrol edin veya başka yazıcı seçmeyi deneyin.</translation> <translation id="3399597614303179694">Makedonca klavye</translation> <translation id="3401130144947259741">Etkinleştirilirse, izleme etkinlikleri Windows için Etkinlik İzleme'ye (ETW) aktırılır ve daha sonra, UIForETW veya Xperf gibi araçlar tarafından yakalanabilir.</translation> @@ -1905,7 +1917,6 @@ <translation id="367645871420407123">kök şifrenin varsayılan test görüntüsü değerine ayarlanmasını istiyorsanız boş bırakın</translation> <translation id="3678156199662914018">Uzantı: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Malta diline özgü klavye</translation> -<translation id="3680173818488851340">Düşük öncelikli iframe'ler.</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> Ekran Paylaşım Talebi</translation> <translation id="3685122418104378273">Mobil veriler kullanılırken Google Drive senkronizasyonu varsayılan olarak devre dışıdır.</translation> <translation id="3685387984467886507">SSL hatalarında devam etme kararlarının belli bir süreyle hatırlanması.</translation> @@ -1954,6 +1965,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> şimdi Yönetici Konsolu'nda görünecek</translation> <translation id="3741243925913727067">Medya cihazınızın fotoğraflarını ve videolarını Google Drive'a yedekleyin.</translation> <translation id="3743492083222969745">Sanal klavye için ayarlar sayfasından, hareketle yazma seçeneğini etkinleştirin/devre dışı bırakın.</translation> +<translation id="3744111561329211289">Arka plan senkronizasyonu</translation> <translation id="3749289110408117711">Dosya adı</translation> <translation id="3751427701788899101">Bağlantı kesildi</translation> <translation id="3751522270321808809">Bu site, bilgilerinizi (örnekler: şifreler, iletiler veya kredi kartları) çalmak için sizi kandırmayı deneyebilir.</translation> @@ -2271,6 +2283,7 @@ <translation id="4218259925454408822">Başka bir hesapta oturum aç</translation> <translation id="4219614746733932747">Etkinleştirilirse Blink, içeriği cihaz ölçek katsayısına göre ölçeklemek için yakınlaştırma mekanizmasını kullanır.</translation> <translation id="4220865787605972627">Ekran renk kalibrasyonunu destekliyorsa bu özelliğe izin verir.</translation> +<translation id="4232692576734035989">Siteler arası iframe'lerin en üst belgeden ayrı bir işlemde tutulduğu, performansa yönelik oldukça deneysel bir mod. Bu modda, farklı üçüncü taraf sitelerinden alınan iframe'lerin bir işlemi paylaşmasına izin verilir.</translation> <translation id="4235200303672858594">Tüm ekran</translation> <translation id="4235813040357936597"><ph name="PROFILE_NAME" /> için hesap ekle</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> bu dilde görüntülenemez.</translation> @@ -2436,6 +2449,7 @@ <translation id="4509017836361568632">Fotoğrafı sil</translation> <translation id="4509345063551561634">Konum:</translation> <translation id="4514542542275172126">Denetlenen yeni kullanıcı oluşturun</translation> +<translation id="4514914692061505365">Tüm pexe dosyalarında PNaCI'nın hızlı Subzero çevirmeninin kullanılmasını zorlayın.</translation> <translation id="4518677423782794009">Chrome kilitleniyor mu? Alışılmadık başlangıç sayfaları, araç çubukları ya da kurtulamadığınız beklenmedik reklamlar gösteriyor veya göz atma deneyiminizi başka şekilde değiştiriyor mu? Bu tür sorunları Chrome Temizleme Aracı'nı çalıştırarak giderebilirsiniz.</translation> <translation id="452039078290142656"><ph name="VENDOR_NAME" /> tedarikçisinin bilinmeyen cihazları</translation> <translation id="4522570452068850558">Ayrıntılar</translation> @@ -2484,6 +2498,7 @@ <translation id="4595560905247879544">Uygulamalar ve uzantılar sadece yönetici (<ph name="CUSTODIAN_NAME" />) tarafından değiştirilebilir.</translation> <translation id="4601242977939794209">EMF Dönüştürücü</translation> <translation id="4602466770786743961"><ph name="HOST" /> sitesinin kamerama ve mikrofonuma erişmesine her zaman izin ver</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">İnternet bağlantısı yok</translation> <translation id="4608500690299898628">&Bul...</translation> <translation id="4610637590575890427"><ph name="SITE" /> sitesine mi gitmek istediniz?</translation> @@ -2788,6 +2803,7 @@ <translation id="5062930723426326933">Oturum açma başarısız oldu. Lütfen İnternet'e bağlanın ve tekrar deneyin.</translation> <translation id="5063180925553000800">Yeni PIN:</translation> <translation id="5067867186035333991"><ph name="HOST" /> sitesi mikrofonuma erişmek isterse sor</translation> +<translation id="5068918910148307423">Yeni kapatılan sitelerin veri gönderme ve alma işlemini bitirmesine izin verme</translation> <translation id="507075806566596212">Bu <ph name="DEVICE_TYPE" /> cihazının uzaktan bulunmasını, silinmesini ve kilitlenmesini etkinleştirmek için cihazı Google'a kaydettirmek üzeresiniz. Bu işlem, cihazın yeniden başlatılmasını gerektirir. Devam etmek istiyor musunuz?</translation> <translation id="5072836811783999860">Yönetilen yer işaretlerini göster</translation> <translation id="5074318175948309511">Yeni ayarların geçerli olması için bu sayfanın tekrar yüklenmesi gerekebilir.</translation> @@ -2897,6 +2913,7 @@ <translation id="5227808808023563348">Önceki metni bul</translation> <translation id="5228076606934445476">Cihazda bir sorun var. Bu hatadan kurtulmak için cihazı yeniden başlatıp tekrar denemeniz gerekir.</translation> <translation id="5228962187251412618">Yalnızca çevrimiçi kontrol</translation> +<translation id="5229622432348746578">Masaüstü Paylaşımı için Sesi Devre Dışı Bırak</translation> <translation id="5230516054153933099">Pencere</translation> <translation id="5232178406098309195">"Ok Google" demek veya bir mikrofon simgesine dokunmak gibi sesli etkinleştirme komutlarını kullandığınızda, gizli Konuşma ve Ses Etkinliğiniz, sesinizin ve diğer seslerin bir kısmını hesabınıza kaydeder. Ardından gelen konuşmanın/sesin kaydı ve bunun birkaç saniye öncesi depolanır.</translation> <translation id="523299859570409035">Bildirim istisnaları</translation> @@ -3151,6 +3168,7 @@ <translation id="5557991081552967863">Uyku sırasında Kablosuz özelliğini açık tut</translation> <translation id="5558129378926964177">Yakınlaş&tır</translation> <translation id="556042886152191864">Düğme</translation> +<translation id="5562781907504170924">Bu sekme bir Bluetooth Cihazına bağlı.</translation> <translation id="5565871407246142825">Kredi kartları</translation> <translation id="5567989639534621706">Uygulama önbellekleri</translation> <translation id="5568069709869097550">Oturum açılamıyor</translation> @@ -3311,6 +3329,7 @@ <translation id="5803531701633845775">Kelime öbeklerini, imleci hareket ettirmeden arkadan seç</translation> <translation id="5804241973901381774">İzinler</translation> <translation id="580571955903695899">Başlığa Göre Yeniden Sırala</translation> +<translation id="5808982448801399019">Yetkilendirme başarısız oldu</translation> <translation id="580961539202306967">Bir site push mesajları göndermek istediğinde bana sor (önerilen)</translation> <translation id="5815645614496570556">X.400 Adresi</translation> <translation id="5817397429773072584">Geleneksel Çince</translation> @@ -3580,6 +3599,7 @@ <translation id="6243774244933267674">Sunucu kullanılamıyor</translation> <translation id="6247708409970142803">%<ph name="PERCENTAGE" /></translation> <translation id="624789221780392884">Güncelleme hazır</translation> +<translation id="6248400709929739064">Altyazıları etkinleştir</translation> <translation id="6248988683584659830">Ayarlarda ara</translation> <translation id="6251870443722440887">GDI işleyicileri</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> Hizmet Şartları</translation> @@ -3604,6 +3624,7 @@ <translation id="6277105963844135994">Ağ zaman aşımı</translation> <translation id="6277518330158259200">Ekr&an Görüntüsü Al</translation> <translation id="6279183038361895380">İmlecinizi göstermek için |<ph name="ACCELERATOR" />| tuşuna basın</translation> +<translation id="6280215091796946657">Farklı bir hesapla oturum aç</translation> <translation id="6281743458679673853">Tüm API'ların, düzenin görüntü alanını yansıtacağı denemeler yapın. Bu, window.scroll özelliklerini düzen görüntü alanına uygun hale getirir.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ağınızda yeni yazıcı}other{Ağınızda yeni yazıcılar}}</translation> <translation id="6285395082104474418">Durum tepsisi ağınızın, pilinizin ve diğer şeylerin geçerli durumunu gösterir.</translation> @@ -3685,6 +3706,9 @@ <translation id="6418160186546245112">Daha önce yüklenen <ph name="IDS_SHORT_PRODUCT_NAME" /> sürümüne geri yükleme</translation> <translation id="6418481728190846787">Tüm uygulamalara erişimi kalıcı olarak kaldır</translation> <translation id="6418505248408153264">Materyal Tasarım geçmişini etkinleştir</translation> +<translation id="6419288379019356534">Bu cihaz <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tarafından yönetiliyor. + <ph name="LINE_BREAK" /> + <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> hesabınızda oturum açmaya devam etmek için lütfen "Sonraki"yi tıklayın.</translation> <translation id="6419902127459849040">Orta Avrupa</translation> <translation id="6420676428473580225">Masaüstüne ekleyin</translation> <translation id="6422329785618833949">Fotoğraf arkaya gönderildi</translation> @@ -3845,7 +3869,6 @@ <translation id="6662016084451426657">Senkronizasyon Hatası: Lütfen senkronizasyonu etkinleştirmek için yönetici ile bağlantı kurun.</translation> <translation id="6663792236418322902">Seçtiğiniz şifre, daha sonra bu dosyayı geri yüklemek için gerekli olacaktır. Lütfen şifrenizi güvenli bir yere kaydedin.</translation> <translation id="6664237456442406323">Maalesef bilgisayarınız, hatalı oluşturulmuş bir donanım kimliğiyle yapılandırılmış. Bu durum Chrome OS'nin en son güvenlik düzeltmeleriyle güncellenmesini engeller ve bilgisayarınız <ph name="BEGIN_BOLD" />kötü niyetli saldırılara<ph name="END_BOLD" /> açık duruma gelebilir.</translation> -<translation id="666541661050183336">iframe kaynaklarının yükleme önceliğini azaltır.</translation> <translation id="6666647326143344290">oturum açın</translation> <translation id="6675665718701918026">İşaretleme cihazı bağlı</translation> <translation id="6677037229676347494">Beklenen Kimlik "<ph name="EXPECTED_ID" />" idi, ancak "<ph name="NEW_ID" />" kimliği belirlendi.</translation> @@ -3938,6 +3961,7 @@ <translation id="6825883775269213504">Rusça</translation> <translation id="6827236167376090743">Bu video sürekli olarak oynatılacaktır.</translation> <translation id="6828153365543658583">Yalnızca aşağıdaki kullanıcıların oturum açmasına izin ver:</translation> +<translation id="6828434191343384461">Seçilen veriler Chrome'dan ve senkronize edilen cihazlardan kaldırıldı. <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> adresinde, diğer Google hizmetlerinden yapılan aramalar ve etkinlikler gibi Google Hesabınızla ilişkili başka biçimlerde tarama geçmişi bulunabilir.</translation> <translation id="6828860976882136098">Otomatik güncellemeler tüm kullanıcılar için ayarlanamadı (yayın öncesi yürütme hatası: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857"><ph name="DEVICE_TYPE" /> cihazınızla ilgili yardım alın.</translation> <translation id="6829270497922309893">Kuruluşunuza kaydolma</translation> @@ -4018,6 +4042,7 @@ <translation id="6965382102122355670">Tamam</translation> <translation id="6965648386495488594">Bağlantı noktası</translation> <translation id="6965978654500191972">Cihaz</translation> +<translation id="6969104364835835175">PNaCl Subzero'yu kullanmayı zorla</translation> <translation id="6970230597523682626">Bulgarca</translation> <translation id="6970480684834282392">Başlatma türü</translation> <translation id="6970856801391541997">Belirli Sayfaları Yazdır</translation> @@ -4100,10 +4125,12 @@ <translation id="7057058088140140610">Google Payments'ı kullanan kredi kartları ve adresler</translation> <translation id="7059858479264779982">Otomatik başlatmaya ayarla</translation> <translation id="7061692898138851896">Şifreleri otomatik olarak kaydet</translation> +<translation id="7062222374113411376">Yeni kapatılan sitelerin veri gönderme ve alma işlemini bitirmesine izin ver (önerilir)</translation> <translation id="7063129466199351735">Kısayollar işleniyor...</translation> <translation id="7065223852455347715">Bu cihaz, kurumsal kaydı engelleyen bir modda kilitlenmiş. Cihazı kaydetmek istiyorsanız önce cihaz kurtarma işlemini gerçekleştirmeniz gerekir.</translation> <translation id="7065534935986314333">Sistem Hakkında</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" cihazına bağlanamıyor.</translation> +<translation id="7067725467529581407">Bunu bir daha gösterme.</translation> <translation id="7070804685954057874">Doğrudan giriş</translation> <translation id="7072010813301522126">Kısayol adı</translation> <translation id="7072025625456903686">Tümüne izin ver veya özelleştir</translation> @@ -4376,6 +4403,7 @@ <translation id="7489605380874780575">Uygunluğu kontrol et</translation> <translation id="749028671485790643">Kişi <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> uzantısı; şifreler ve kredi kartı numaraları gibi kişisel veriler de dahil olmak üzere yazdığınız tüm metinleri toplayabilir. Bu uzantıyı kullanmak istiyor musunuz?</translation> <translation id="7495778526395737099">Eski şifrenizi unuttunuz mu?</translation> <translation id="7503191893372251637">Netscape Sertifika Türü</translation> <translation id="7503821294401948377">Tarayıcı işlemine ilişkin '<ph name="ICON" />' simgesi yüklenemedi.</translation> @@ -4427,6 +4455,7 @@ <translation id="756445078718366910">Tarayıcı Penceresini Aç</translation> <translation id="7564847347806291057">İşlemi bitir</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Chrome verileri temizlendi</translation> <translation id="7568790562536448087">Güncelleniyor</translation> <translation id="7573172247376861652">Pil Şarjı</translation> <translation id="7576032389798113292">6x4</translation> @@ -4556,6 +4585,7 @@ <translation id="7786207843293321886">Misafir oturumundan çık</translation> <translation id="7786889348652477777">&Uygulamayı Yeniden Yükle</translation> <translation id="7787129790495067395">Şu an bir parola kullanıyorsunuz. Parolanızı unuttuysanız, verilerinizi Google sunucularından temizlemek için Google Dashboard'u kullanarak senkronizasyon sıfırlaması yapabilirsiniz.</translation> +<translation id="7787308148023287649">Başka bir ekranda görüntüle</translation> <translation id="7788080748068240085">"<ph name="FILE_NAME" />" dosyasını çevrimdışı olarak kaydetmek için fazladan <ph name="TOTAL_FILE_SIZE" /> alan boşaltmanız gerekiyor:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />artık çevrimdışı olarak erişmeniz gerekmeyen dosyaların sabitlemesini kaldırın<ph name="MARKUP_3" /> <ph name="MARKUP_4" />İndirilenler klasörünüzdeki dosyaları silin<ph name="MARKUP_5" /></translation> @@ -4624,6 +4654,7 @@ <translation id="7878999881405658917">Google bu telefona bir bildirim gönderdi. Telefonunuzun, Bluetooth bağlantısını kullanarak 9 metreden daha uzak bir mesafeden <ph name="DEVICE_TYPE" /> cihazınızın kilitlenmesini önleyebileceğine dikkat edin. Bunun sorun yaratabileceği durumlarda, <a>bu özelliği geçici olarak devre dışı bırakabilirsiniz</a>.</translation> <translation id="7879478708475862060">İzleme giriş modu</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" şu uygulamaları ve uzantıları ekler:</translation> +<translation id="7881969471599061635">Altyazıları devre dışı bırak</translation> <translation id="7884988936047469945">Deneysel erişilebilirlik özellikleri</translation> <translation id="7885253890047913815">En Son Hedefler</translation> <translation id="7885283703487484916">çok kısa</translation> @@ -4989,6 +5020,7 @@ <translation id="839736845446313156">Kayıt ol</translation> <translation id="8398790343843005537">Telefonunuzu bulun</translation> <translation id="8398877366907290961">Yine de devam et</translation> +<translation id="8399276228600040370"><ph name="PASSWORD_MANAGER_BRAND" /> ile kaydedilen hesabınızla oturum açın</translation> <translation id="8401363965527883709">İşaretlenmemiş onay kutusu</translation> <translation id="8408402540408758445">Arama sonuçlarını önceden getir</translation> <translation id="8410073653152358832">Bu telefonu kullan</translation> @@ -5075,6 +5107,7 @@ <translation id="8545211332741562162">Web sayfalarının deneysel JavaScript özelliklerini kullanmasını etkinleştirin.</translation> <translation id="8545575359873600875">Maalesef şifreniz doğrulanamadı. Bu denetlenen kullanıcının yöneticisi yakın zamanda şifreyi değiştirmiş olabilir. Bu durumda, yeni şifre bir dahaki sefere oturum açtığınızda geçerli olacaktır. Eski şifrenizi kullanmayı deneyin.</translation> <translation id="8546306075665861288">Resim önbelleği</translation> +<translation id="854653344619327455">Bu işaret etkin olduğunda, masaüstü paylaşımını seçme penceresi, kullanıcının sesi paylaşıp paylaşmayacağını seçmesine izin vermez.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Karakter</translation> <translation id="855081842937141170">Sekmeyi iğnele</translation> @@ -5105,6 +5138,7 @@ <translation id="8589311641140863898">Deneysel Uzantı API'ları</translation> <translation id="8590375307970699841">Otomatik güncellemeleri ayarla</translation> <translation id="8592071947729879125">iframe izinlerini kısıtla.</translation> +<translation id="8592125506633137593">En üst doküman yalıtımı</translation> <translation id="8594787581355215556"><ph name="USER_EMAIL_ADDRESS" /> olarak oturum açıldı. Senkronize edilmiş verilerinizi <ph name="BEGIN_LINK" />Google Hesap Özeti<ph name="END_LINK" />'nde yönetebilirsiniz.</translation> <translation id="8596540852772265699">Özel Dosyalar</translation> <translation id="8596785155158796745">Mikrofon şu anda kullanılamıyor. <ph name="BEGIN_LINK" />Mikrofonu yönet<ph name="END_LINK" /></translation> @@ -5177,6 +5211,7 @@ <translation id="8688579245973331962">Adınızı görmüyor musunuz?</translation> <translation id="8688644143607459122">Devam Et'i tıklayarak Google Payments'ı kullanmayı kabul etmiş olursunuz. Sizi sahtekarlığa karşı korumak için bilgisayarınızdaki bilgiler (bilgisayarın konumu dahil) Google Payments ile paylaşılacaktır.</translation> <translation id="8689102680909215706">"<ph name="EXTENSION_NAME" />" uzantısı uzaktan yüklendi.</translation> +<translation id="868926756781121513">Sekme kaynağı ile Masaüstü Paylaşımı</translation> <translation id="8689341121182997459">Son Geçerlilik Tarihi:</translation> <translation id="8690754533598178758">Adobe Flash Player mikrofon istisnaları farklıdır.</translation> <translation id="8691686986795184760">(Kurumsal politika tarafından etkinleştirildi)</translation> @@ -5220,6 +5255,7 @@ <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> yerine <ph name="PROTOCOL" /> bağlantılarını açma</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Fareyle kıyaslandığında zayıf sayılabilecek dokunuşları telafi etmek için dokunma hareketinin konumunu hassaslaştırır.</translation> +<translation id="8741995161408053644">Google Hesabınızın <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> adresinde başka biçimlerde tarama geçmişi olabilir.</translation> <translation id="8743712320294854924">Genişletilmiş giriş seçeneklerini rafta gösterin.</translation> <translation id="874420130893181774">Geleneksel Pinyin giriş yöntemi</translation> <translation id="8744525654891896746">Denetlenen bu kullanıcı için bir avatar seçin</translation> @@ -5233,6 +5269,7 @@ <translation id="8757640015637159332">Herkese açık oturuma gir</translation> <translation id="8757742102600829832">Bağlanacak bir Chromebox seçin</translation> <translation id="8757803915342932642">Google Cloud Cihazları'ndaki cihaz</translation> +<translation id="8758895886513993540">Bu işaret, kullanıcıların bir sekmeyi masaüstü paylaşımı için seçip seçemeyeceklerini kontrol eder.</translation> <translation id="8759408218731716181">Çoklu oturum açma kurulamıyor</translation> <translation id="8759753423332885148">Daha fazla bilgi edinin.</translation> <translation id="8761567432415473239">Google Güvenli Tarama, yakın zamanda <ph name="SITE" /> sitesinde <ph name="BEGIN_LINK" />zararlı programlar buldu<ph name="END_LINK" />.</translation> @@ -5443,6 +5480,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">USB fare bağlandı</translation> <translation id="9076523132036239772">Maalesef, e-postanız veya şifreniz doğrulanamadı. Önce bir ağa bağlanmayı deneyin.</translation> +<translation id="9077132661879924646">Android'de birleşik medya hattını devre dışı bırakır.</translation> <translation id="907841381057066561">Paketleme sırasında geçici zip dosyası oluşturulamadı.</translation> <translation id="9083147368019416919">Kayıt iptal edilemedi</translation> <translation id="9084064520949870008">Pencere Olarak Aç</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index fec9d9f7..48f3015 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Виберіть квадратну ділянку зображення.</translation> <translation id="1697532407822776718">Готово!</translation> +<translation id="1697988819212986149">Біля елементів контекстного меню, створених на основі технологій Google, з’являється значок Google.</translation> <translation id="1699274548822076330">Для цього правила потрібно вибрати опцію "trace-upload-url". ЗАСТЕРЕЖЕННЯ. Якщо ввімкнути цю опцію, Chrome записуватиме дані про ефективність для кожного переходу й завантажуватиме їх на сторінку, вибрану опцією "trace-upload-url". Такі дані можуть містити ідентифікаційну інформацію, як-от ваше ім’я або URL-адреси веб-сайтів, які ви відвідуєте.</translation> <translation id="1699395855685456105">Модифікація апаратного забезпечення:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">Оновіть парольну фразу для синхронізації.</translation> <translation id="1788636309517085411">Використати параметр за умовчанням</translation> <translation id="1789575671122666129">Спливаючі вікна</translation> -<translation id="1790550373387225389">Увійти в режим презентації</translation> <translation id="1792705092719258158">Увімкнути режим віддзеркалення екрана.</translation> <translation id="1793119619663054394">Видалити профіль "<ph name="PROFILE_NAME" />" і всі пов’язані з ним дані Chrome із цього комп’ютера? Цю дію не можна відмінити.</translation> <translation id="179767530217573436">останні 4 тижні</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">Змінити налаштування, що стосуються пристрою та периферії</translation> <translation id="2673135533890720193">Переглядати історію веб-перегляду</translation> <translation id="2673589024369449924">Створити на робочому столі ярлик для цього користувача</translation> +<translation id="2675358154061544447">Експериментальна підтримка відтворення міжсайтових елементів iframe в окремих процесах. У цьому режимі документи мають спільний процес відтворення, лише якщо вони з одного веб-сайту.</translation> <translation id="2676946222714718093">Відтворюється на пристрої</translation> <translation id="2678063897982469759">Знову ввімкнути</translation> <translation id="2678246812096664977">Усі плагіни</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">Як диспетчер паролів обробляє автозаповнення для облікових даних синхронізації.</translation> <translation id="29611076221683977">Зловмисники, які зараз перебувають на сайті <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, можуть намагатися встановити на ваш пристрій з ОС Mac небезпечні програми, що викрадають або видаляють інформацію (як-от фотографії, паролі, повідомлення чи кредитні картки).</translation> <translation id="2961695502793809356">Натисніть, щоб перейти далі; утримуйте, щоб переглянути історію</translation> +<translation id="296216853343927883">Фірмове оформлення Google у контекстному меню</translation> <translation id="2963151496262057773">Плагін <ph name="PLUGIN_NAME" /> не відповідає. Зупинити?</translation> <translation id="2963783323012015985">Турецька розкладка</translation> <translation id="2964193600955408481">Вимкнути Wi-Fi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">Натисніть кнопку вище правою кнопкою миші, щоб переглянути інших користувачів.</translation> <translation id="3026050830483105579">Усе тут.</translation> <translation id="302620147503052030">Показати кнопку</translation> +<translation id="302781076327338683">Оновити в обхід кешу</translation> +<translation id="3030243755303701754">Контрольований користувач може переглядати веб-сайти під вашим наглядом. Адміністратор контрольованого користувача в Chrome може: + + • дозволяти чи забороняти певні веб-сайти; + • переглядати, які веб-сайти відвідував контрольований користувач; + • керувати іншими налаштуваннями. + +Створюючи контрольованого користувача, ви не створюєте обліковий запис Google, а закладки, історія веб-перегляду й інші налаштування не переносяться на інші пристрої за допомогою Синхронізації Chrome. Створивши нового контрольованого користувача, ви завжди можете змінити його налаштування з будь-якого пристрою на сторінці <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Щоб дізнатися більше, відвідайте наш <ph name="BEGIN_LINK" />Довідковий центр<ph name="END_LINK" />.</translation> <translation id="3031417829280473749">Агент X</translation> <translation id="3031557471081358569">Виберіть елементи для імпорту:</translation> <translation id="3033332627063280038">Увімкнути експериментальне використання розширення Cache-Control (директива застарілого під час підтвердження кешу). Це дозволяє серверам вказувати підтвердження деяких ресурсів у фоновому режимі для зменшення затримки.</translation> @@ -1648,7 +1660,6 @@ <translation id="3324301154597925148">Це сторінка пошуку, яку ви очікували?</translation> <translation id="3324684065575061611">(Вимкнено політикою підприємства)</translation> <translation id="3326821416087822643">Архівування файлу <ph name="FILE_NAME" />…</translation> -<translation id="3330206034087160972">Вийти з режиму презентації</translation> <translation id="3330686263988132416">Вихідний заголовок WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Увімкнути режим віддзеркалення екрана. У цьому режимі зображення екрана перевертається горизонтально.</translation> @@ -1693,6 +1704,7 @@ <translation id="3392020134425442298">Відновити шкідливий файл</translation> <translation id="3394150261239285340">Сторінка <ph name="HOST" /> хоче скористатися вашою камерою та мікрофоном.</translation> <translation id="3394279550557729862">Увімкнути підтримку власних сповіщень і центру сповіщень на платформах, де вони доступні.</translation> +<translation id="3394862755749546286">Вимикається єдиний медійний канал (Android і комп’ютер) на пристрої Android.</translation> <translation id="3396331542604645348">Вибраний принтер недоступний або його неправильно встановлено. Перевірте принтер або спробуйте вибрати інший.</translation> <translation id="3399597614303179694">Македонська клавіатура</translation> <translation id="3401130144947259741">Події експортуватимуться в розділ відстеження подій для Windows (ETW), де їх зможуть реєструвати такі інструменти, як UIForETW або Xperf.</translation> @@ -1903,7 +1915,6 @@ <translation id="367645871420407123">залиште поле порожнім, якщо потрібно налаштувати кореневий пароль для значення тестового зображення за умовчанням</translation> <translation id="3678156199662914018">Розширення: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Мальтійська клавіатура</translation> -<translation id="3680173818488851340">Ресурси iframe із низьким пріоритетом.</translation> <translation id="3683524264665795342">Запит на спільний доступ до екрана від програми <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Коли використовується мобільний Інтернет, синхронізацію Google Диска вимкнено за умовчанням.</translation> <translation id="3685387984467886507">Збережіть рішення виправити помилки SSL протягом певного періоду часу.</translation> @@ -1952,6 +1963,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> тепер відображатиметься в Консолі адміністратора</translation> <translation id="3741243925913727067">Створення резервних копій фотографій і відео з носія на Google Диску.</translation> <translation id="3743492083222969745">Увімкнути або вимкнути ввід жестами на сторінці налаштувань віртуальної клавіатури.</translation> +<translation id="3744111561329211289">Фонова синхронізація</translation> <translation id="3749289110408117711">Ім’я файлу</translation> <translation id="3751427701788899101">З’єднання втрачено</translation> <translation id="3751522270321808809">Цей сайт може намагатися оманливим шляхом викрасти вашу інформацію (наприклад, паролі, повідомлення чи дані кредитних карток).</translation> @@ -2269,6 +2281,7 @@ <translation id="4218259925454408822">Увійти в інший обліковий запис</translation> <translation id="4219614746733932747">Якщо ввімкнено, Blink змінює розмір вмісту для коефіцієнта масштабування на пристрої за допомогою механізму збільшення.</translation> <translation id="4220865787605972627">Дозволити калібрування кольору дисплея, якщо дисплей підтримує цю функцію.</translation> +<translation id="4232692576734035989">Експериментальний режим відтворення міжсайтових елементів iframe у процесі, окремому від основного документа. У цьому режимі елементи iframe із різних сторонніх сайтів можуть мати спільний процес відтворення.</translation> <translation id="4235200303672858594">Увесь екран</translation> <translation id="4235813040357936597">Додати обліковий запис у профіль <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Неможливо відобразити <ph name="PRODUCT_NAME" /> цією мовою</translation> @@ -2434,6 +2447,7 @@ <translation id="4509017836361568632">Відхилити фото</translation> <translation id="4509345063551561634">:</translation> <translation id="4514542542275172126">Створити нового контрольованого користувача</translation> +<translation id="4514914692061505365">Примусово використовувати швидкий транслятор Subzero від PNaCl для всіх файлів pexe.</translation> <translation id="4518677423782794009">Chrome припиняє роботу, показує незвичні початкові сторінки, панелі інструментів або неочікувані оголошення, яких ви не можете позбутися, тощо? Можливо, вам удасться вирішити цю проблему за допомогою Майстра очищення Chrome.</translation> <translation id="452039078290142656">невідомі пристрої від постачальника <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Деталі</translation> @@ -2482,6 +2496,7 @@ <translation id="4595560905247879544">Лише адміністратор (<ph name="CUSTODIAN_NAME" />) може змінювати додатки та розширення.</translation> <translation id="4601242977939794209">Конвертер файлів EMF</translation> <translation id="4602466770786743961">Завжди дозволяти хосту <ph name="HOST" /> доступ до ваших камери та мікрофона</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Відсутнє з’єднання з Інтернетом</translation> <translation id="4608500690299898628">&Знайти...</translation> <translation id="4610637590575890427">Ви мали на увазі перейти до <ph name="SITE" />?</translation> @@ -2786,6 +2801,7 @@ <translation id="5062930723426326933">Помилка входу. Під’єднайтеся до Інтернету та повторіть спробу.</translation> <translation id="5063180925553000800">Новий PIN-код:</translation> <translation id="5067867186035333991">Запитувати, якщо хост <ph name="HOST" /> хоче отримати доступ до вашого мікрофона</translation> +<translation id="5068918910148307423">Заборонити нещодавно закритим сайтам завершувати надсилання й отримання даних</translation> <translation id="507075806566596212">Ви збираєтеся зареєструвати цей <ph name="DEVICE_TYPE" /> у Google, щоб увімкнути можливість віддалено знаходити та блокувати пристрій, а також стирати дані на ньому. Для цього потрібне перезавантаження. Продовжити?</translation> <translation id="5072836811783999860">Показати закладки, якими керує адміністратор</translation> <translation id="5074318175948309511">Щоб нові налаштування почали діяти, можливо, потрібно буде оновити цю сторінку.</translation> @@ -2895,6 +2911,7 @@ <translation id="5227808808023563348">Знайти попередній текст</translation> <translation id="5228076606934445476">Виникла проблема з пристроєм. Щоб виправити цю помилку, перезавантажте пристрій і повторіть спробу.</translation> <translation id="5228962187251412618">Лише онлайн-перевірка</translation> +<translation id="5229622432348746578">Вимкнути трансляцію аудіо на комп’ютери</translation> <translation id="5230516054153933099">Вікно</translation> <translation id="5232178406098309195">Коли ви використовуєте команди активації (як-от "Ok Google") або торкаєтеся значка мікрофона, завдяки особистій голосовій і аудіоактивності у вашому обліковому записі зберігається все, що ви вводите голосом. Ми зберігаємо запис того, що ви скажете далі та сказали за кілька секунд до цього.</translation> <translation id="523299859570409035">Винятки для сповіщень</translation> @@ -3149,6 +3166,7 @@ <translation id="5557991081552967863">Не від’єднуватися від мережі Wi-Fi у режимі сну</translation> <translation id="5558129378926964177">Збільшити &масштаб</translation> <translation id="556042886152191864">Кнопка</translation> +<translation id="5562781907504170924">Цю вкладку під’єднано до пристрою Bluetooth.</translation> <translation id="5565871407246142825">Кредитні картки</translation> <translation id="5567989639534621706">Кеші програми</translation> <translation id="5568069709869097550">Не можна увійти</translation> @@ -3308,6 +3326,7 @@ <translation id="5803531701633845775">Вибирати фрази позаду без переміщення курсора</translation> <translation id="5804241973901381774">Дозволи</translation> <translation id="580571955903695899">Переупорядкувати за назвою</translation> +<translation id="5808982448801399019">Не вдалося авторизувати</translation> <translation id="580961539202306967">Запитувати, якщо сайт хоче надсилати мені push-повідомлення (рекомендовано)</translation> <translation id="5815645614496570556">Адреса каталогу X.400</translation> <translation id="5817397429773072584">китайська (традиційна)</translation> @@ -3577,6 +3596,7 @@ <translation id="6243774244933267674">Сервер недоступний</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Оновлення завершено</translation> +<translation id="6248400709929739064">Увімкнути субтитри</translation> <translation id="6248988683584659830">Пошук налаштувань</translation> <translation id="6251870443722440887">Обробка GDI</translation> <translation id="6251889282623539337">Загальні положення та умови <ph name="DOMAIN" /></translation> @@ -3601,6 +3621,7 @@ <translation id="6277105963844135994">Час очікування мережі минув</translation> <translation id="6277518330158259200">З&робити знімок екрана</translation> <translation id="6279183038361895380">Натисніть |<ph name="ACCELERATOR" />|, щоб побачити курсор</translation> +<translation id="6280215091796946657">Увійти в інший обліковий запис</translation> <translation id="6281743458679673853">Увімкнути експеримент, під час якого всі API відображатимуть область перегляду макета. Властивості window.scroll застосовуватимуться до області перегляду макета.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Новий принтер у вашій мережі}one{Нові принтери у вашій мережі}few{Нові принтери у вашій мережі}many{Нові принтери у вашій мережі}other{Нові принтери у вашій мережі}}</translation> <translation id="6285395082104474418">Панель статусу показує поточний стан мережі, акумулятора тощо.</translation> @@ -3682,6 +3703,9 @@ <translation id="6418160186546245112">Повернення до попередньої встановленої версії <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Назавжди видалити доступ для всіх програм</translation> <translation id="6418505248408153264">Увімкнути історію матеріального дизайну</translation> +<translation id="6419288379019356534">Цим пристроєм керує <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />. + <ph name="LINE_BREAK" /> + Натисніть "Далі", щоб увійти в обліковий запис <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />.</translation> <translation id="6419902127459849040">Центрально-європейська</translation> <translation id="6420676428473580225">Додати на робочий стіл</translation> <translation id="6422329785618833949">Фотографія обернулася</translation> @@ -3842,7 +3866,6 @@ <translation id="6662016084451426657">Помилка синхронізації. Зверніться до адміністратора, щоб увімкнути синхронізацію.</translation> <translation id="6663792236418322902">Вибраний вами пароль буде потрібен, щоб відновити цей файл пізніше. Зберігайте його в безпечному місці.</translation> <translation id="6664237456442406323">На жаль, ваш комп’ютер налаштовано за допомогою ідентифікатора апаратного забезпечення з невірною структурою. Це перешкоджає оновленню ОС Chrome найновішими виправленнями системи безпеки, а тому ваш комп’ютер <ph name="BEGIN_BOLD" />може бути вразливим до зловмисних атак<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Знижує пріоритет завантаження ресурсів iframe.</translation> <translation id="6666647326143344290">за допомогою даних облікового запису Google</translation> <translation id="6675665718701918026">Маніпулятор підключено</translation> <translation id="6677037229676347494">Очікуваний ідентифікатор – "<ph name="EXPECTED_ID" />". Використаний ідентифікатор – "<ph name="NEW_ID" />".</translation> @@ -3935,6 +3958,7 @@ <translation id="6825883775269213504">Російська</translation> <translation id="6827236167376090743">Це відео буде відтворюватися, доки рак на горі не свисне.</translation> <translation id="6828153365543658583">Дозволити вхід цим користувачам:</translation> +<translation id="6828434191343384461">Вибрані дані видалено з Chrome і синхронізованих пристроїв. У вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> можуть бути інші форми історії веб-перегляду, як-от пошуки чи активність в інших службах Google.</translation> <translation id="6828860976882136098">Не вдалося налаштувати автоматичні оновлення для всіх користувачів (помилка виконання: <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Довідка для <ph name="DEVICE_TYPE" />.</translation> <translation id="6829270497922309893">Реєстрація у вашій організації</translation> @@ -4016,6 +4040,7 @@ <translation id="6965382102122355670">ОК</translation> <translation id="6965648386495488594">Порт</translation> <translation id="6965978654500191972">Пристрій</translation> +<translation id="6969104364835835175">Примусове використання Subzero від PNaCl</translation> <translation id="6970230597523682626">Болгарська</translation> <translation id="6970480684834282392">Тип запуску</translation> <translation id="6970856801391541997">Друкувати певні сторінки</translation> @@ -4098,10 +4123,12 @@ <translation id="7057058088140140610">Кредитні картки й адреси, додані в Google Payments</translation> <translation id="7059858479264779982">Увімкнути автозапуск</translation> <translation id="7061692898138851896">Зберігати паролі автоматично</translation> +<translation id="7062222374113411376">Дозволити нещодавно закритим сайтам завершувати надсилання й отримання даних (рекомендується)</translation> <translation id="7063129466199351735">Обробка ярликів…</translation> <translation id="7065223852455347715">Цей пристрій заблоковано в режимі, який не підтримує корпоративну реєстрацію. Щоб зареєструвати пристрій, спершу потрібно відновити його налаштування.</translation> <translation id="7065534935986314333">Про систему</translation> <translation id="7066944511817949584">Не вдалося під’єднатися до пристрою "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Більше не показувати.</translation> <translation id="7070804685954057874">Пряме введення</translation> <translation id="7072010813301522126">Назва ярлика</translation> <translation id="7072025625456903686">Дозволити всі або налаштувати</translation> @@ -4374,6 +4401,7 @@ <translation id="7489605380874780575">Перевірити придатність</translation> <translation id="749028671485790643">Особа <ph name="VALUE" /></translation> <translation id="7491962110804786152">вкладка</translation> +<translation id="7493386493263658176">Розширення <ph name="EXTENSION_NAME" /> може запам’ятовувати весь текст, який ви вводите, зокрема паролі та номери кредитних карток. Використовувати це розширення?</translation> <translation id="7495778526395737099">Забули старий пароль?</translation> <translation id="7503191893372251637">Тип сертифіката Netscape</translation> <translation id="7503821294401948377">Не вдалося завантажити піктограму "<ph name="ICON" />" для роботи веб-переглядача.</translation> @@ -4425,6 +4453,7 @@ <translation id="756445078718366910">Відкрити вікно веб-переглядача</translation> <translation id="7564847347806291057">Завершити процес</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Дані Chrome видалено</translation> <translation id="7568790562536448087">Оновлення</translation> <translation id="7573172247376861652">Заряджання акумулятора</translation> <translation id="7576032389798113292">6x4</translation> @@ -4554,6 +4583,7 @@ <translation id="7786207843293321886">Вийти з режиму гостя</translation> <translation id="7786889348652477777">&Перезавантажити додаток</translation> <translation id="7787129790495067395">Наразі ви використовуєте парольну фразу. Якщо ви її забули, на інформаційній панелі Google можна скинути синхронізацію, щоб очистити ваші дані на серверах Google.</translation> +<translation id="7787308148023287649">Показати на іншому екрані</translation> <translation id="7788080748068240085">Щоб зберегти файл "<ph name="FILE_NAME" />" у режимі офлайн, потрібно додатково звільнити <ph name="TOTAL_FILE_SIZE" />:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />відкріпіть файли, доступ до яких у режимі офлайн вам більше не потрібен<ph name="MARKUP_3" /> <ph name="MARKUP_4" />видаліть файли з папки "Завантаження"<ph name="MARKUP_5" /></translation> @@ -4622,6 +4652,7 @@ <translation id="7878999881405658917">На цей телефон надіслано сповіщення від Google. Зауважте, що за допомогою Bluetooth можна розблокувати пристрій <ph name="DEVICE_TYPE" /> із телефона на відстані близько 10 метрів. У разі виникнення проблем можна <a>тимчасово вимкнути цю функцію</a>.</translation> <translation id="7879478708475862060">Як у режимі введення</translation> <translation id="7880836220014399562">Пакет "<ph name="BUNDLE_NAME" />" додає такі додатки та розширення:</translation> +<translation id="7881969471599061635">Вимкнути субтитри</translation> <translation id="7884988936047469945">Експериментальні спеціальні можливості</translation> <translation id="7885253890047913815">Останні місця призначення</translation> <translation id="7885283703487484916">дуже коротко</translation> @@ -4985,6 +5016,7 @@ <translation id="839736845446313156">Зареєструйтеся</translation> <translation id="8398790343843005537">Знайти телефон</translation> <translation id="8398877366907290961">Продовжити</translation> +<translation id="8399276228600040370">Увійдіть в обліковий запис, збережений у <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Прапорець не поставлено</translation> <translation id="8408402540408758445">Попередня вибірка результатів пошуку</translation> <translation id="8410073653152358832">Використовувати цей телефон</translation> @@ -5071,6 +5103,7 @@ <translation id="8545211332741562162">Дозволити веб-сторінкам використовувати експериментальні функції JavaScript.</translation> <translation id="8545575359873600875">На жаль, не вдалося підтвердити ваш пароль. Можливо, адміністратор цього контрольованого користувача нещодавно змінив пароль. Тоді новий пароль діятиме, коли ви входитимете наступного разу. Спробуйте ввести старий пароль.</translation> <translation id="8546306075665861288">Кеш зображення</translation> +<translation id="854653344619327455">Якщо цю опцію ввімкнено, користувач не зможе вибрати, чи транслювати аудіо.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Символ</translation> <translation id="855081842937141170">Закріпити вкладку</translation> @@ -5101,6 +5134,7 @@ <translation id="8589311641140863898">API експериментальних розширень</translation> <translation id="8590375307970699841">Налаштувати автоматичні оновлення</translation> <translation id="8592071947729879125">Обмежувати дозволи для елементів iframe.</translation> +<translation id="8592125506633137593">Відокремлення основного документа</translation> <translation id="8594787581355215556">Ви ввійшли як <ph name="USER_EMAIL_ADDRESS" />. Керуйте своїми синхронізованими даними на <ph name="BEGIN_LINK" />інформаційній панелі Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Нетипові файли</translation> <translation id="8596785155158796745">Мікрофон зараз недоступний. <ph name="BEGIN_LINK" />Керувати мікрофоном<ph name="END_LINK" /></translation> @@ -5173,6 +5207,7 @@ <translation id="8688579245973331962">Немає вашого імені?</translation> <translation id="8688644143607459122">Натискаючи "Продовжити", ви погоджуєтеся використовувати Google Payments. Щоб ми могли захистити вас від шахрайства, інформація про ваш комп’ютер (зокрема його місцезнаходження) надсилатиметься в Google Payments.</translation> <translation id="8689102680909215706">Розширення <ph name="EXTENSION_NAME" /> встановлено віддалено.</translation> +<translation id="868926756781121513">Трансляція вкладки на комп’ютер</translation> <translation id="8689341121182997459">Втрачає чинність:</translation> <translation id="8690754533598178758">В Adobe Flash Player використовуються інші винятки для мікрофона.</translation> <translation id="8691686986795184760">(Увімкнено згідно політики підприємства)</translation> @@ -5216,6 +5251,7 @@ <translation id="8737685506611670901">Відкривати посилання протоколу <ph name="PROTOCOL" />, а не обробника <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Уточнювати положення дотиків, щоб компенсувати низьку роздільну здатність дотиків у порівнянні з мишею.</translation> +<translation id="8741995161408053644">У вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> можуть бути інші форми історії веб-перегляду.</translation> <translation id="8743712320294854924">Показувати на полиці розширені опції введення.</translation> <translation id="874420130893181774">Метод введення для стандарту піньїнь традиційної китайської мови</translation> <translation id="8744525654891896746">Вибрати аватар для цього контрольованого користувача</translation> @@ -5229,6 +5265,7 @@ <translation id="8757640015637159332">Розпочати загальнодоступний сеанс</translation> <translation id="8757742102600829832">Виберіть Chromebox, до якого потрібно підключитися</translation> <translation id="8757803915342932642">Пристрій у Google Cloud Devices</translation> +<translation id="8758895886513993540">Ця опція визначає, чи користувач може вибирати вкладку для трансляції на комп’ютер.</translation> <translation id="8759408218731716181">Не вдається налаштувати паралельний вхід</translation> <translation id="8759753423332885148">Докладніше.</translation> <translation id="8761567432415473239">Функція безпечного перегляду від Google нещодавно <ph name="BEGIN_LINK" />виявила шкідливі програми<ph name="END_LINK" /> на сайті <ph name="SITE" />.</translation> @@ -5439,6 +5476,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Під’єднано мишу USB</translation> <translation id="9076523132036239772">На жаль, не вдалося підтвердити вашу електронну адресу чи пароль. Спробуйте спершу під’єднатися до мережі.</translation> +<translation id="9077132661879924646">Вимкнути єдиний медійний канал на пристрої Android.</translation> <translation id="907841381057066561">Під час пакування не вдалося створити тимчасовий zip файл.</translation> <translation id="9083147368019416919">Не вдалося скасувати реєстрацію</translation> <translation id="9084064520949870008">Відкрити вікно</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 574c9535..b086d443 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -503,6 +503,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">Chọn vùng hình vuông của hình ảnh.</translation> <translation id="1697532407822776718">Bạn đã hoàn tất!</translation> +<translation id="1697988819212986149">Hiển thị biểu tượng Google cạnh mục menu ngữ cảnh do các dịch vụ của Google cung cấp.</translation> <translation id="1699274548822076330">Tính năng này phải được sử dụng kết hợp với cờ trace-upload-url. CẢNH BÁO: Khi được bật, Chrome sẽ ghi lại dữ liệu hoạt động cho mọi điều hướng và tải dữ liệu đó lên URL được cờ trace-upload-url chỉ định. Dữ liệu theo dõi này có thể bao gồm thông tin nhận dạng cá nhân (PII) chẳng hạn như tiêu đề và URL của những trang web bạn truy cập.</translation> <translation id="1699395855685456105">Hiệu chỉnh phần cứng:</translation> @@ -563,7 +564,6 @@ <translation id="1783075131180517613">Vui lòng cập nhật cụm mật khẩu đồng bộ hóa của bạn.</translation> <translation id="1788636309517085411">Sử dụng mặc định</translation> <translation id="1789575671122666129">Cửa sổ bật lên</translation> -<translation id="1790550373387225389">Vào chế độ trình bày</translation> <translation id="1792705092719258158">Bật chế độ màn hình được phản chiếu.</translation> <translation id="1793119619663054394">Bạn có chắc chắn muốn xóa "<ph name="PROFILE_NAME" />" và tất cả dữ liệu Chrome được liên kết khỏi máy tính này không? Thao tác này không thể hoàn tác.</translation> <translation id="179767530217573436">4 tuần qua</translation> @@ -1156,6 +1156,7 @@ <translation id="267285457822962309">Thay đổi các cài đặt dành riêng cho thiết bị và thiết bị ngoại vi của bạn.</translation> <translation id="2673135533890720193">Đọc lịch sử duyệt web của bạn</translation> <translation id="2673589024369449924">Tạo lối tắt trên màn hình cho người dùng này</translation> +<translation id="2675358154061544447">Hỗ trợ mang tính thử nghiệm cao để kết xuất iframe giữa các trang web trong những quá trình riêng biệt. Ở chế độ này, các tài liệu sẽ chỉ chia sẻ quá trình kết xuất nếu các tài liệu đó đến từ cùng một trang web.</translation> <translation id="2676946222714718093">Đang phát trên</translation> <translation id="2678063897982469759">Kích hoạt lại</translation> <translation id="2678246812096664977">Tất cả plugin</translation> @@ -1382,6 +1383,7 @@ <translation id="2960393411257968125">Cách trình quản lý mật khẩu sử dụng tính năng tự động điền cho thông tin đăng nhập đồng bộ hóa.</translation> <translation id="29611076221683977">Những kẻ tấn công hiện đang truy cập <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> có thể cố gắng cài đặt các chương trình nguy hiểm trên máy Mac. Các chương trình này sẽ đánh cắp hoặc xóa thông tin của bạn (ví dụ: ảnh, mật khẩu, thư và thẻ tín dụng).</translation> <translation id="2961695502793809356">Nhấp vào để tiến, giữ để xem lịch sử</translation> +<translation id="296216853343927883">Xây dựng thương hiệu Google trong menu ngữ cảnh</translation> <translation id="2963151496262057773">Plugin sau không hồi đáp: <ph name="PLUGIN_NAME" />Bạn có muốn dừng lại không?</translation> <translation id="2963783323012015985">Bàn phím tiếng Thổ Nhĩ Kỳ</translation> <translation id="2964193600955408481">Tắt Wi-Fi</translation> @@ -1431,6 +1433,16 @@ <translation id="3025729795978504041">Nhấp chuột phải vào nút ở trên để xem những người khác.</translation> <translation id="3026050830483105579">Tất cả đều có tại đây.</translation> <translation id="302620147503052030">Nút hiển thị</translation> +<translation id="302781076327338683">Tải lại bộ nhớ cache bỏ qua</translation> +<translation id="3030243755303701754">Người dùng được giám sát có thể khám phá web dưới sự hướng dẫn của bạn. Là người quản lý của người dùng được giám sát trong Chrome, bạn có thể: + + • cho phép hoặc cấm các trang web nhất định, + • xem lại các trang web mà người dùng được giám sát đã truy cập và + • quản lý các cài đặt khác. + +Tạo người dùng được giám sát sẽ không tạo Tài khoản Google, đồng thời dấu trang, lịch sử duyệt web và các tùy chọn khác sẽ không đồng bộ hóa với các thiết bị khác bằng Chrome Sync. Sau khi tạo người dùng được giám sát mới, bạn có thể quản lý cài đặt của họ bất kỳ lúc nào từ mọi thiết bị tại <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" />. + +Để biết thêm thông tin, hãy truy cập <ph name="BEGIN_LINK" />Trung tâm trợ giúp<ph name="END_LINK" /> của chúng tôi.</translation> <translation id="3031417829280473749">Đặc vụ X</translation> <translation id="3031557471081358569">Chọn các mục cần nhập:</translation> <translation id="3033332627063280038">Cho phép triển khai thử nghiệm Kiểm soát bộ nhớ cache: chỉ thị cũ trong khi xác thực lại. Điều này cho phép các máy chủ chỉ định một số tài nguyên có thể được xác thực lại trong nền để cải thiện độ trễ.</translation> @@ -1651,7 +1663,6 @@ <translation id="3324301154597925148">Đây có phải là Trang tìm kiếm bạn muốn không?</translation> <translation id="3324684065575061611">(Đã bị vô hiệu hóa bởi chính sách doanh nghiệp)</translation> <translation id="3326821416087822643">Đang nén <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">Thoát chế độ trình bày</translation> <translation id="3330686263988132416">Tiêu đề gốc WebRTC Stun</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">Bật chế độ màn hình được phản chiếu. Chế độ này lật hình ảnh trên màn hình theo chiều ngang.</translation> @@ -1696,6 +1707,7 @@ <translation id="3392020134425442298">Khôi phục tệp độc hại</translation> <translation id="3394150261239285340"><ph name="HOST" /> muốn sử dụng máy ảnh và micrô của bạn.</translation> <translation id="3394279550557729862">Bật hỗ trợ để sử dụng thông báo nhanh cho các thông báo gốc và trung tâm thông báo trên những nền tảng có các tính năng này.</translation> +<translation id="3394862755749546286">Tắt kênh phương tiện được hợp nhất (Android và máy tính để bàn) trên Android.</translation> <translation id="3396331542604645348">Máy in đã chọn không khả dụng hoặc không được cài đặt chính xác. Hãy kiểm tra máy in của bạn hoặc thử chọn một máy in khác.</translation> <translation id="3399597614303179694">Bàn phím Macedonia</translation> <translation id="3401130144947259741">Nếu đã bật, các sự kiện theo dõi sẽ được xuất sang Theo dõi sự kiện cho Windows (ETW) và có thể chụp được bằng công cụ như UIForETW hoặc Xperf.</translation> @@ -1906,7 +1918,6 @@ <translation id="367645871420407123">bỏ trống nếu bạn muốn đặt mật khẩu gốc về giá trị hình ảnh kiểm tra mặc định</translation> <translation id="3678156199662914018">Tiện ích: <ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">Bàn phím tiếng Malta</translation> -<translation id="3680173818488851340">iframe mức độ ưu tiên thấp.</translation> <translation id="3683524264665795342">Yêu cầu chia sẻ màn hình <ph name="APP_NAME" /></translation> <translation id="3685122418104378273">Tính năng đồng bộ hóa Google Drive được tắt theo mặc định khi sử dụng dữ liệu di động.</translation> <translation id="3685387984467886507">Ghi nhớ quyết định tiếp tục bỏ qua lỗi SSL trong khoảng thời gian chỉ định.</translation> @@ -1955,6 +1966,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> hiện không hiển thị trong Bảng điều khiển dành cho quản trị viên</translation> <translation id="3741243925913727067">Sao lưu ảnh và video trên thiết bị truyền thông của bạn vào Google Drive.</translation> <translation id="3743492083222969745">Bật/Tắt tùy chọn nhập bằng cử chỉ trong trang cài đặt cho bàn phím ảo.</translation> +<translation id="3744111561329211289">Đồng bộ hóa dưới nền</translation> <translation id="3749289110408117711">Tên tệp</translation> <translation id="3751427701788899101">Đã mất kết nối</translation> <translation id="3751522270321808809">Trang web này có thể tìm cách đánh lừa bạn để lấy cắp thông tin của bạn (ví dụ: mật khẩu, tin nhắn hoặc thẻ tín dụng).</translation> @@ -2272,6 +2284,7 @@ <translation id="4218259925454408822">Đăng nhập tài khoản khác</translation> <translation id="4219614746733932747">Nếu được bật, Blink sẽ sử dụng cơ chế thu phóng để mở rộng nội dung cho yếu tố phạm vi thiết bị.</translation> <translation id="4220865787605972627">Cho phép hiệu chỉnh màu của màn hình nếu màn hình hỗ trợ tính năng này.</translation> +<translation id="4232692576734035989">Chế độ thực hiện mang tính thử nghiệm cao trong đó iframe giữa các trang web được lưu giữ trong quá trình riêng biệt từ tài liệu quan trọng nhất. Ở chế độ này, iframe từ các trang web bên thứ ba khác sẽ được cho phép chia sẻ quá trình.</translation> <translation id="4235200303672858594">Toàn màn hình</translation> <translation id="4235813040357936597">Thêm tài khoản cho <ph name="PROFILE_NAME" /></translation> <translation id="4240069395079660403">Không thể hiển thị <ph name="PRODUCT_NAME" /> bằng ngôn ngữ này</translation> @@ -2437,6 +2450,7 @@ <translation id="4509017836361568632">Hủy ảnh</translation> <translation id="4509345063551561634">Vị trí:</translation> <translation id="4514542542275172126">Thiết lập người dùng được giám sát mới</translation> +<translation id="4514914692061505365">Buộc sử dụng trình dịch nhanh Subzero của PNaCl cho tất cả các tệp pexe.</translation> <translation id="4518677423782794009">Chrome có đang gặp lỗi, hiển thị thanh công cụ hay trang khởi động bất thường hoặc quảng cáo không mong muốn mà bạn không loại bỏ được hoặc làm thay đổi trải nghiệm duyệt web của bạn không? Bạn có thể khắc phục sự cố bằng cách chạy Công cụ làm sạch Chrome.</translation> <translation id="452039078290142656">thiết bị không xác định từ <ph name="VENDOR_NAME" /></translation> <translation id="4522570452068850558">Chi tiết</translation> @@ -2485,6 +2499,7 @@ <translation id="4595560905247879544">Chỉ người quản lý mới có thể sửa đổi ứng dụng và tiện ích (<ph name="CUSTODIAN_NAME" />).</translation> <translation id="4601242977939794209">Bộ chuyển đổi EMF</translation> <translation id="4602466770786743961">Luôn cho phép <ph name="HOST" /> truy cập vào máy ảnh và micrô của bạn</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">Chưa được kết nối Internet</translation> <translation id="4608500690299898628">&Tìm...</translation> <translation id="4610637590575890427">Có phải ý bạn là chuyển đến <ph name="SITE" /> không?</translation> @@ -2789,6 +2804,7 @@ <translation id="5062930723426326933">Không đăng nhập được, vui lòng kết nối với internet và thử lại.</translation> <translation id="5063180925553000800">Mã PIN mới:</translation> <translation id="5067867186035333991">Hỏi nếu <ph name="HOST" /> muốn truy cập micrô của bạn</translation> +<translation id="5068918910148307423">Không cho phép các trang web đóng gần đây hoàn tất gửi và nhận dữ liệu</translation> <translation id="507075806566596212">Bạn sắp đăng ký <ph name="DEVICE_TYPE" /> này với Google để cho phép khả năng định vị, xóa và khóa thiết bị từ xa. Bạn cần phải khởi động lại thiết bị. Bạn có muốn tiếp tục không?</translation> <translation id="5072836811783999860">Hiển thị dấu trang được quản lý</translation> <translation id="5074318175948309511">Có thể cần phải tải lại trang này trước khi cài đặt mới có hiệu lực.</translation> @@ -2898,6 +2914,7 @@ <translation id="5227808808023563348">Tìm văn bản trước đó</translation> <translation id="5228076606934445476">Đã xảy ra lỗi với thiết bị. Để khắc phục lỗi này, bạn sẽ cần khởi động lại thiết bị và thử lại.</translation> <translation id="5228962187251412618">Chỉ kiểm tra trực tuyến</translation> +<translation id="5229622432348746578">Tắt âm thanh cho chia sẻ màn hình</translation> <translation id="5230516054153933099">Cửa sổ</translation> <translation id="5232178406098309195">Khi bạn sử dụng lệnh kích hoạt bằng âm thanh, chẳng hạn như "Ok Google" hoặc chạm vào biểu tượng micrô, Hoạt động giọng nói và âm thanh riêng tư của bạn sẽ lưu trữ một số giọng nói và âm thanh khác vào tài khoản của bạn. Bản ghi giọng nói/âm thanh tiếp theo, cùng với vài giây trước đó, sẽ được lưu trữ.</translation> <translation id="523299859570409035">Ngoại lệ cho thông báo</translation> @@ -3152,6 +3169,7 @@ <translation id="5557991081552967863">Bật Wi-Fi khi ở chế độ ngủ</translation> <translation id="5558129378926964177">Phóng &to</translation> <translation id="556042886152191864">Nút</translation> +<translation id="5562781907504170924">Tab này được kết nối với thiết bị Bluetooth.</translation> <translation id="5565871407246142825">Thẻ tín dụng</translation> <translation id="5567989639534621706">Bộ nhớ cache của ứng dụng</translation> <translation id="5568069709869097550">Không thể đăng nhập</translation> @@ -3311,6 +3329,7 @@ <translation id="5803531701633845775">Chọn cụm từ từ phía sau, mà không cần di chuyển con trỏ</translation> <translation id="5804241973901381774">Giấy phép</translation> <translation id="580571955903695899">Sắp xếp lại theo Tiêu đề</translation> +<translation id="5808982448801399019">Ủy quyền không thành công</translation> <translation id="580961539202306967">Hỏi tôi khi một trang web muốn gửi thông báo đẩy cho tôi (nên chọn)</translation> <translation id="5815645614496570556">Địa chỉ X.400</translation> <translation id="5817397429773072584">Tiếng Trung phồn thể</translation> @@ -3582,6 +3601,7 @@ <translation id="6243774244933267674">Máy chủ không khả dụng</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">Bản cập nhật đã sẵn sàng</translation> +<translation id="6248400709929739064">Bật phụ đề</translation> <translation id="6248988683584659830">Cài đặt tìm kiếm</translation> <translation id="6251870443722440887">Quản lý GDI</translation> <translation id="6251889282623539337">Điều khoản dịch vụ <ph name="DOMAIN" /></translation> @@ -3606,6 +3626,7 @@ <translation id="6277105963844135994">Hết thời gian chờ mạng</translation> <translation id="6277518330158259200">Chụp ảnh màn hình</translation> <translation id="6279183038361895380">Nhấn |<ph name="ACCELERATOR" />| để hiển thị con trỏ của bạn</translation> +<translation id="6280215091796946657">Đăng nhập bằng tài khoản khác</translation> <translation id="6281743458679673853">Hãy thử nghiệm để tất cả các API phản ánh chế độ xem bố cục. Điều này sẽ giúp thuộc tính window.scroll tương ứng với chế độ xem bố cục.</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Máy in mới trên mạng của bạn}other{Máy in mới trên mạng của bạn}}</translation> <translation id="6285395082104474418">Khay trạng thái hiển thị cho bạn trạng thái hiện tại của mạng, pin và các thông tin khác.</translation> @@ -3687,6 +3708,9 @@ <translation id="6418160186546245112">Hoàn nguyên về phiên bản được cài đặt trước của <ph name="IDS_SHORT_PRODUCT_NAME" /></translation> <translation id="6418481728190846787">Xóa vĩnh viễn quyền truy cập cho tất cả các ứng dụng</translation> <translation id="6418505248408153264">Bật lịch sử thiết kế Material Design</translation> +<translation id="6419288379019356534">Thiết bị này do <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> quản lý. + <ph name="LINE_BREAK" /> + Vui lòng nhấp vào "Tiếp theo" để tiếp tục đăng nhập vào tài khoản <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> của bạn.</translation> <translation id="6419902127459849040">Central European</translation> <translation id="6420676428473580225">Thêm vào màn hình</translation> <translation id="6422329785618833949">Đã lật ảnh</translation> @@ -3847,7 +3871,6 @@ <translation id="6662016084451426657">Lỗi đồng bộ hóa: Vui lòng liên hệ với quản trị viên để bật đồng bộ hóa.</translation> <translation id="6663792236418322902">Mật khẩu bạn chọn sẽ cần dùng để khôi phục tệp này về sau. Vui lòng ghi lại mật khẩu này vào một vị trí an toàn.</translation> <translation id="6664237456442406323">Rất tiếc, máy tính của bạn được định cấu hình bằng ID phần cứng không đúng định dạng. Điều này ngăn Chrome OS cập nhật các bản vá bảo mật mới nhất và máy tính của bạn <ph name="BEGIN_BOLD" />có thể bị các cuộc tấn công làm hại<ph name="END_BOLD" />.</translation> -<translation id="666541661050183336">Giảm mức độ ưu tiên tải của tài nguyên iframe.</translation> <translation id="6666647326143344290">với Tài khoản Google của bạn</translation> <translation id="6675665718701918026">Đã kết nối thiết bị trỏ</translation> <translation id="6677037229676347494">ID mong muốn "<ph name="EXPECTED_ID" />", nhưng ID là "<ph name="NEW_ID" />".</translation> @@ -3940,6 +3963,7 @@ <translation id="6825883775269213504">Tiếng Nga</translation> <translation id="6827236167376090743">Video này sẽ tiếp tục phát đi phát lại.</translation> <translation id="6828153365543658583">Giới hạn đăng nhập cho những người dùng sau:</translation> +<translation id="6828434191343384461">Dữ liệu được chọn đã bị xóa khỏi Chrome và các thiết bị được đồng bộ hóa. Tài khoản Google của bạn có thể có các biểu mẫu lịch sử duyệt web khác, chẳng hạn như tìm kiếm và hoạt động từ các dịch vụ khác của Google tại <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="6828860976882136098">Không thiết lập được cập nhật tự động cho tất cả người dùng (lỗi thực thi kiểm tra <ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">Nhận trợ giúp với <ph name="DEVICE_TYPE" /> của bạn.</translation> <translation id="6829270497922309893">Đăng ký tổ chức của bạn</translation> @@ -4021,6 +4045,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="6965648386495488594">Cổng</translation> <translation id="6965978654500191972">Thiết bị</translation> +<translation id="6969104364835835175">Buộc PNaCl Subzero</translation> <translation id="6970230597523682626">Tiếng Bungary</translation> <translation id="6970480684834282392">Kiểu khởi động</translation> <translation id="6970856801391541997">In các trang cụ thể</translation> @@ -4104,10 +4129,12 @@ <translation id="7057058088140140610">Thẻ tín dụng và địa chỉ sử dụng Google Payments</translation> <translation id="7059858479264779982">Đặt thành tự động chạy</translation> <translation id="7061692898138851896">Tự động lưu mật khẩu</translation> +<translation id="7062222374113411376">Cho phép các trang web đóng gần đây hoàn tất gửi và nhận dữ liệu (khuyến nghị)</translation> <translation id="7063129466199351735">Đang xử lý lối tắt...</translation> <translation id="7065223852455347715">Thiết bị này bị khóa trong chế độ ngăn đăng ký doanh nghiệp. Nếu bạn muốn đăng ký thiết bị, trước tiên bạn cần khôi phục thiết bị.</translation> <translation id="7065534935986314333">Giới thiệu về Hệ thống</translation> <translation id="7066944511817949584">Không thể kết nối với "<ph name="DEVICE_NAME" />".</translation> +<translation id="7067725467529581407">Không bao giờ hiển thị lại bong bóng này.</translation> <translation id="7070804685954057874">Nhập trực tiếp</translation> <translation id="7072010813301522126">Tên lối tắt</translation> <translation id="7072025625456903686">Cho phép tất cả hoặc tùy chỉnh</translation> @@ -4380,6 +4407,7 @@ <translation id="7489605380874780575">Kiểm tra tính đủ điều kiện</translation> <translation id="749028671485790643">Cá nhân <ph name="VALUE" /></translation> <translation id="7491962110804786152">tab</translation> +<translation id="7493386493263658176">Tiện ích <ph name="EXTENSION_NAME" /> có thể thu thập tất cả nội dung bạn nhập, bao gồm dữ liệu cá nhân như mật khẩu và số thẻ tín dụng. Bạn có muốn sử dụng tiện ích này không?</translation> <translation id="7495778526395737099">Quên mật khẩu cũ của bạn?</translation> <translation id="7503191893372251637">Loại Chứng chỉ Netscape</translation> <translation id="7503821294401948377">Không thể tải biểu tượng '<ph name="ICON" />' cho tác vụ của trình duyệt.</translation> @@ -4431,6 +4459,7 @@ <translation id="756445078718366910">Mở Cửa sổ Trình duyệt</translation> <translation id="7564847347806291057">Kết thúc quá trình</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">Đã xóa dữ liệu Chrome</translation> <translation id="7568790562536448087">Đang cập nhật</translation> <translation id="7573172247376861652">Sạc pin</translation> <translation id="7576032389798113292">6x4</translation> @@ -4560,6 +4589,7 @@ <translation id="7786207843293321886">Thoát khỏi phiên khách</translation> <translation id="7786889348652477777">Tải &lại ứng dụng</translation> <translation id="7787129790495067395">Bạn hiện đang dùng cụm mật khẩu. Nếu bạn quên cụm mật khẩu của mình, bạn có thể đặt lại đồng bộ hóa để xóa dữ liệu của mình khỏi máy chủ của Google sử dụng Trang tổng quan của Google.</translation> +<translation id="7787308148023287649">Hiển thị trên màn hình khác</translation> <translation id="7788080748068240085">Để lưu "<ph name="FILE_NAME" />" ngoại tuyến, bạn phải giải phóng thêm <ph name="TOTAL_FILE_SIZE" /> dung lượng lưu trữ:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />bỏ ghim các tệp mà bạn không cần truy cập ngoại tuyến nữa<ph name="MARKUP_3" /> <ph name="MARKUP_4" />xóa các tệp khỏi thư mục Tải xuống của bạn<ph name="MARKUP_5" /></translation> @@ -4628,6 +4658,7 @@ <translation id="7878999881405658917">Google đã gửi thông báo đến điện thoại này. Lưu ý rằng với Bluetooth, điện thoại của bạn có thể luôn mở khóa <ph name="DEVICE_TYPE" /> từ khoảng cách trên 30 foot. Trong trường hợp xảy ra sự cố, bạn có thể <a>tạm thời vô hiệu hóa tính năng này</a>.</translation> <translation id="7879478708475862060">Theo dõi chế độ nhập</translation> <translation id="7880836220014399562">"<ph name="BUNDLE_NAME" />" thêm các ứng dụng và tiện ích sau:</translation> +<translation id="7881969471599061635">Tắt phụ đề</translation> <translation id="7884988936047469945">Tính năng trợ năng thử nghiệm</translation> <translation id="7885253890047913815">Máy in đích gần đây</translation> <translation id="7885283703487484916">rất ngắn</translation> @@ -4991,6 +5022,7 @@ <translation id="839736845446313156">Đăng ký</translation> <translation id="8398790343843005537">Tìm điện thoại của bạn</translation> <translation id="8398877366907290961">Tiếp tục truy cập</translation> +<translation id="8399276228600040370">Đăng nhập bằng tài khoản đã lưu bằng <ph name="PASSWORD_MANAGER_BRAND" /></translation> <translation id="8401363965527883709">Đã bỏ chọn hộp kiểm</translation> <translation id="8408402540408758445">Tìm nạp trước kết quả tìm kiếm</translation> <translation id="8410073653152358832">Sử dụng điện thoại này</translation> @@ -5077,6 +5109,7 @@ <translation id="8545211332741562162">Cho phép trang web sử dụng các tính năng JavaScript thử nghiệm.</translation> <translation id="8545575359873600875">Rất tiếc, không thể xác minh mật khẩu của bạn. Người quản lý của người dùng được giám sát này gần đây có thể đã thay đổi mật khẩu. Nếu vậy, mật khẩu mới sẽ được áp dụng vào lần tới khi bạn đăng nhập Hãy thử sử dụng mật khẩu cũ của bạn.</translation> <translation id="8546306075665861288">Bộ nhớ cache hình ảnh</translation> +<translation id="854653344619327455">Khi cờ này bật, cửa sổ bộ chọn chia sẻ màn hình sẽ không cho phép người dùng chọn có chia sẻ âm thanh hay không.</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">Ký tự</translation> <translation id="855081842937141170">Ghim tab</translation> @@ -5107,6 +5140,7 @@ <translation id="8589311641140863898">API tiện ích thử nghiệm</translation> <translation id="8590375307970699841">Thiết lập cập nhật tự động</translation> <translation id="8592071947729879125">Hạn chế quyền với iframe.</translation> +<translation id="8592125506633137593">Tách riêng tài liệu quan trọng nhất</translation> <translation id="8594787581355215556">Đăng nhập với địa chỉ <ph name="USER_EMAIL_ADDRESS" />. Quản lý dữ liệu đã đồng bộ hóa của bạn trên <ph name="BEGIN_LINK" />Trang tổng quan của Google<ph name="END_LINK" />.</translation> <translation id="8596540852772265699">Tệp tùy chỉnh</translation> <translation id="8596785155158796745">Micrô hiện không hoạt động. <ph name="BEGIN_LINK" />Quản lý micrô<ph name="END_LINK" /></translation> @@ -5179,6 +5213,7 @@ <translation id="8688579245973331962">Bạn không thấy tên của mình?</translation> <translation id="8688644143607459122">Bằng cách nhấp vào Tiếp tục, bạn đồng ý sử dụng Google Payments. Để bảo vệ bạn khỏi gian lận, thông tin về máy tính của bạn (bao gồm cả thông tin vị trí của máy tính) sẽ được chia sẻ với Google Payments.</translation> <translation id="8689102680909215706">Tiện ích "<ph name="EXTENSION_NAME" />" đã được cài đặt từ xa.</translation> +<translation id="868926756781121513">Chia sẻ màn hình bằng nguồn tab</translation> <translation id="8689341121182997459">Hết hạn:</translation> <translation id="8690754533598178758">Các ngoại lệ đối với micrô của Adobe Flash Player là khác nhau.</translation> <translation id="8691686986795184760">(Bật bởi chính sách doanh nghiệp)</translation> @@ -5222,6 +5257,7 @@ <translation id="8737685506611670901">Mở liên kết <ph name="PROTOCOL" /> thay vì <ph name="REPLACED_HANDLER_TITLE" /></translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">Tinh chỉnh vị trí của một cử chỉ chạm để bù lại những lần chạm có độ phân giải kém so với dùng chuột.</translation> +<translation id="8741995161408053644">Tài khoản Google có thể có các biểu mẫu lịch sử duyệt web khác tại <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8743712320294854924">Hiển thị tùy chọn nhập được mở rộng trong giá.</translation> <translation id="874420130893181774">Phương thức nhập Bính âm truyền thống</translation> <translation id="8744525654891896746">Chọn hình đại diện cho người dùng được giám sát này</translation> @@ -5235,6 +5271,7 @@ <translation id="8757640015637159332">Đăng nhập vào phiên công khai</translation> <translation id="8757742102600829832">Chọn Chromebox cần kết nối</translation> <translation id="8757803915342932642">Thiết bị trên Google Cloud Devices</translation> +<translation id="8758895886513993540">Cờ này kiểm soát việc người dùng có thể chọn tab để chia sẻ màn hình hay không.</translation> <translation id="8759408218731716181">Không thể thiết lập đăng nhập nhiều tài khoản</translation> <translation id="8759753423332885148">Tìm hiểu thêm.</translation> <translation id="8761567432415473239">Gần đây, Duyệt web an toàn của Google <ph name="BEGIN_LINK" />tìm thấy chương trình độc hại<ph name="END_LINK" /> trên trang <ph name="SITE" />.</translation> @@ -5445,6 +5482,7 @@ <translation id="9074739597929991885">Bluetooth</translation> <translation id="9074836595010225693">Đã kết nối chuột USB</translation> <translation id="9076523132036239772">Rất tiếc, email hoặc mật khẩu của bạn không thể xác minh được. Trước tiên hãy thử kết nối với một mạng.</translation> +<translation id="9077132661879924646">Tắt kênh phương tiện được hợp nhất trên Android.</translation> <translation id="907841381057066561">Không thể tạo tệp nén tạm thời khi đóng gói.</translation> <translation id="9083147368019416919">Không hủy đăng ký được</translation> <translation id="9084064520949870008">Mở dưới dạng cửa sổ</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index bc6c8086..81c4c1f 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -499,6 +499,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">在图片上选择一块方形区域。</translation> <translation id="1697532407822776718">搞定了!</translation> +<translation id="1697988819212986149">在由 Google 服务提供支持的上下文菜单项旁边显示 Google 图标。</translation> <translation id="1699274548822076330">此项需要与 trace-upload-url 标记结合使用。 警告:此项处于启用状态时,Chrome 将记录每次导航的性能数据,并将其上传到通过 trace-upload-url 标记指定的网址。跟踪内容可能包含个人身份信息 (PII),例如您访问的网站的标题和网址。</translation> <translation id="1699395855685456105">硬件版本:</translation> @@ -559,7 +560,6 @@ <translation id="1783075131180517613">请更新您的同步密码。</translation> <translation id="1788636309517085411">使用默认设置</translation> <translation id="1789575671122666129">弹出式窗口</translation> -<translation id="1790550373387225389">进入演示模式</translation> <translation id="1792705092719258158">启用镜像屏幕模式。</translation> <translation id="1793119619663054394">确定要从此计算机中移除“<ph name="PROFILE_NAME" />”以及所有关联的Chrome数据吗?此操作无法撤消。</translation> <translation id="179767530217573436">过去四周</translation> @@ -1149,6 +1149,7 @@ <translation id="267285457822962309">更改您的设备和外围设备专用的设置。</translation> <translation id="2673135533890720193">读取您的浏览记录</translation> <translation id="2673589024369449924">为此用户创建桌面快捷方式</translation> +<translation id="2675358154061544447">为在单独的进程中呈现跨网站 iframe 提供高度实验性支持。在此模式下,仅当来自同一网站时,多个文档才会共享一个渲染程序进程。</translation> <translation id="2676946222714718093">当前播放设备:</translation> <translation id="2678063897982469759">重新启用</translation> <translation id="2678246812096664977">所有插件</translation> @@ -1375,6 +1376,7 @@ <translation id="2960393411257968125">密码管理器自动填充同步凭据的方式。</translation> <translation id="29611076221683977">目前<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />上的攻击程序可能会试图在您的Mac上安装危险程序来窃取或删除您信息(例如:照片、密码、通讯内容和信用卡信息)。</translation> <translation id="2961695502793809356">点击可前进,按住可查看历史记录</translation> +<translation id="296216853343927883">在上下文菜单中显示 Google 品牌标识</translation> <translation id="2963151496262057773">以下插件没有响应:<ph name="PLUGIN_NAME" />。是否要停止使用该插件?</translation> <translation id="2963783323012015985">土耳其语键盘</translation> <translation id="2964193600955408481">停用 Wi-Fi</translation> @@ -1424,6 +1426,16 @@ <translation id="3025729795978504041">右键点击上方的按钮,即可查看其他用户。</translation> <translation id="3026050830483105579">无限精彩,尽在其中。</translation> <translation id="302620147503052030">显示按钮</translation> +<translation id="302781076327338683">重新加载(忽略缓存)</translation> +<translation id="3030243755303701754">受监管用户可以在您的指导下浏览网页。作为 Chrome 中受监管用户的管理员,您可以: + + • 允许或禁止受监管用户访问某些网站; + • 查看受监管用户访问过的网站; + • 管理其他设置。 + +创建受监管用户时不会随之创建 Google 帐户,因此通过 Chrome 同步功能将这些用户同步到其他设备时,他们的书签、浏览记录及其他偏好设置不会一起同步到其他设备。创建新的受监管用户后,您可以随时通过任意设备在 <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> 上管理这些用户的设置。 + +如需更多信息,请访问我们的<ph name="BEGIN_LINK" />帮助中心<ph name="END_LINK" />。</translation> <translation id="3031417829280473749">女特工</translation> <translation id="3031557471081358569">选择要导入的内容:</translation> <translation id="3033332627063280038">启用 Cache-Control 的实验性实施功能:stale-while-revalidate 指令。此操作允许服务器指定部分资源可以在后台进行重新验证以改善延迟情况。</translation> @@ -1641,7 +1653,6 @@ <translation id="3324301154597925148">这是您想要的搜索页面吗?</translation> <translation id="3324684065575061611">(已根据企业政策停用)</translation> <translation id="3326821416087822643">正在压缩<ph name="FILE_NAME" />…</translation> -<translation id="3330206034087160972">退出演示模式</translation> <translation id="3330686263988132416">WebRTC Stun 的“Origin”标头</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">启用镜像屏幕模式。在此模式下,屏幕图像将水平翻转。</translation> @@ -1686,6 +1697,7 @@ <translation id="3392020134425442298">恢复恶意文件</translation> <translation id="3394150261239285340"><ph name="HOST" /> 想要使用您的摄像头和麦克风。</translation> <translation id="3394279550557729862">在适用的平台上,启用对本地通知信息框和通知中心的支持。</translation> +<translation id="3394862755749546286">在 Android 设备上停用统一(Android 设备及桌面设备)媒体渠道。</translation> <translation id="3396331542604645348">所选打印机无法使用或未正确安装。请检查打印机,或尝试选择其他打印机。</translation> <translation id="3399597614303179694">马其顿语键盘</translation> <translation id="3401130144947259741">此项处于启用状态时,跟踪事件将被导出到 Event Tracing for Windows (ETW),然后可使用 UIForETW 或 Xperf 等工具捕获。</translation> @@ -1896,7 +1908,6 @@ <translation id="367645871420407123">如果您要将根密码设为默认的测试图片值,则将此字段留空</translation> <translation id="3678156199662914018">扩展程序:<ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">马耳他语键盘</translation> -<translation id="3680173818488851340">低优先级 iframe。</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 屏幕共享请求</translation> <translation id="3685122418104378273">当您使用移动数据网络时,Google 云端硬盘同步功能默认情况下处于停用状态。</translation> <translation id="3685387984467886507">在指定时间内记住“忽略SSL错误”的决定。</translation> @@ -1945,6 +1956,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> 现在将显示在管理控制台中</translation> <translation id="3741243925913727067">将您的媒体设备上的照片和视频备份到 Google 云端硬盘。</translation> <translation id="3743492083222969745">在虚拟键盘的设置页中启用/停用滑行输入选项。</translation> +<translation id="3744111561329211289">后台同步</translation> <translation id="3749289110408117711">文件名</translation> <translation id="3751427701788899101">连接已断开</translation> <translation id="3751522270321808809">此网站可能会试图骗取您的信息(例如:密码、通讯内容或信用卡信息)。</translation> @@ -2261,6 +2273,7 @@ <translation id="4218259925454408822">登录其他帐户</translation> <translation id="4219614746733932747">启用后,Blink 将使用其缩放机制来缩放内容(依照设备缩放比例)。</translation> <translation id="4220865787605972627">允许使用显示器颜色校准功能(如果显示器支持此功能)。</translation> +<translation id="4232692576734035989">高度实验性效能模式,其中跨网站 iframe 将位于一个不同于顶层文档所在进程的单独进程中。在此模式下,来自不同第三方网站的 iframe 将可以共享一个进程。</translation> <translation id="4235200303672858594">整个屏幕</translation> <translation id="4235813040357936597">为<ph name="PROFILE_NAME" />添加帐户</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" />无法以该语言显示</translation> @@ -2426,6 +2439,7 @@ <translation id="4509017836361568632">舍弃照片</translation> <translation id="4509345063551561634">位置:</translation> <translation id="4514542542275172126">设置新的受监管用户</translation> +<translation id="4514914692061505365">对所有 pexe 文件强制使用 PNaCl 的快速 Subzero 翻译器。</translation> <translation id="4518677423782794009">Chrome 是否出现以下异常情况:崩溃、启动页或工具栏异常、您无法关闭不想看到的广告,或您的浏览设置遭到篡改?或许您可以通过运行 Chrome 清理工具来解决该问题。</translation> <translation id="452039078290142656">来自<ph name="VENDOR_NAME" />的未知设备</translation> <translation id="4522570452068850558">详细信息</translation> @@ -2474,6 +2488,7 @@ <translation id="4595560905247879544">只有管理员(<ph name="CUSTODIAN_NAME" />)可以修改应用和扩展程序。</translation> <translation id="4601242977939794209">EMF 转换器</translation> <translation id="4602466770786743961">始终允许 <ph name="HOST" /> 使用您的摄像头和麦克风</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">未连接互联网</translation> <translation id="4608500690299898628">查找(&F)...</translation> <translation id="4610637590575890427">您是不是要访问 <ph name="SITE" />?</translation> @@ -2773,6 +2788,7 @@ <translation id="5062930723426326933">登录失败,请连接到互联网,然后重试。</translation> <translation id="5063180925553000800">新 PIN:</translation> <translation id="5067867186035333991">当 <ph name="HOST" /> 想要使用麦克风时询问我</translation> +<translation id="5068918910148307423">禁止最近关闭的网站完成数据收发操作</translation> <translation id="507075806566596212">您打算向 Google 注册此<ph name="DEVICE_TYPE" />,以便启用远程定位、清空和锁定此设备的功能。这需要重新启动此设备。要继续吗?</translation> <translation id="5072836811783999860">显示托管书签</translation> <translation id="5074318175948309511">您可能需要重新加载此页面,才能使新设置生效。</translation> @@ -2880,6 +2896,7 @@ <translation id="5227808808023563348">查找上一文字</translation> <translation id="5228076606934445476">设备出现问题。要从此错误下恢复,您需要重启设备,然后重试。</translation> <translation id="5228962187251412618">只能在线检查</translation> +<translation id="5229622432348746578">停用桌面共享音频功能</translation> <translation id="5230516054153933099">窗口</translation> <translation id="5232178406098309195">当您发出音频功能启动指令(例如说“Ok Google”或触摸麦克风图标)后,语音和音频活动记录功能会将部分语音和其他音频存储在您帐户名下(这部分记录只有您本人能看到)。Google 会将接下来(以及在您发出指令前的几秒内)的语音/音频录音存储起来。</translation> <translation id="523299859570409035">通知例外情况</translation> @@ -3134,6 +3151,7 @@ <translation id="5557991081552967863">休眠期间保持 Wi-Fi 连接</translation> <translation id="5558129378926964177">放大(&I)</translation> <translation id="556042886152191864">按钮</translation> +<translation id="5562781907504170924">此标签页已连接到蓝牙设备。</translation> <translation id="5565871407246142825">信用卡</translation> <translation id="5567989639534621706">应用缓存</translation> <translation id="5568069709869097550">无法登录</translation> @@ -3293,6 +3311,7 @@ <translation id="5803531701633845775">不移动光标,从以前输入的内容中选词。</translation> <translation id="5804241973901381774">权限</translation> <translation id="580571955903695899">按标题重新排序</translation> +<translation id="5808982448801399019">授权失败</translation> <translation id="580961539202306967">在网站要向我发送推送消息时询问我(推荐)</translation> <translation id="5815645614496570556">X.400 地址</translation> <translation id="5817397429773072584">繁体中文</translation> @@ -3562,6 +3581,7 @@ <translation id="6243774244933267674">服务器不可用</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">有可用的更新</translation> +<translation id="6248400709929739064">启用字幕</translation> <translation id="6248988683584659830">在设置中搜索</translation> <translation id="6251870443722440887">GDI处理函数</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> 服务条款</translation> @@ -3586,6 +3606,7 @@ <translation id="6277105963844135994">网络超时</translation> <translation id="6277518330158259200">屏幕截图(&A)</translation> <translation id="6279183038361895380">按 |<ph name="ACCELERATOR" />| 可显示鼠标光标</translation> +<translation id="6280215091796946657">使用其他帐户登录</translation> <translation id="6281743458679673853">一项实验性功能,可让所有 API 都反映布局视口。启用此项后,系统会将 window.scroll 属性的值视为相对于布局视口的值。</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{您的网络中有 1 台新打印机}other{您的网络中有多台新打印机}}</translation> <translation id="6285395082104474418">状态栏会显示网络、电池等的当前状态。</translation> @@ -3667,6 +3688,9 @@ <translation id="6418160186546245112">正在还原到之前安装的 <ph name="IDS_SHORT_PRODUCT_NAME" /> 版本</translation> <translation id="6418481728190846787">永久删除对所有应用的访问权限</translation> <translation id="6418505248408153264">启用 Material Design 历史记录</translation> +<translation id="6419288379019356534">此设备由 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 管理。 + <ph name="LINE_BREAK" /> + 请点击“下一步”,继续使用您的 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 帐户登录。</translation> <translation id="6419902127459849040">中欧语言</translation> <translation id="6420676428473580225">添加到桌面</translation> <translation id="6422329785618833949">照片已翻转</translation> @@ -3826,7 +3850,6 @@ <translation id="6662016084451426657">发生同步错误:请与管理员联系,以启用同步功能。</translation> <translation id="6663792236418322902">以后恢复文件时需要使用您所选择的密码。请将密码记录在安全的地方。</translation> <translation id="6664237456442406323">很遗憾,您的计算机配置了格式错误的硬件 ID。这导致 Chrome 操作系统无法使用最新的安全修正程序进行更新,以致您的计算机<ph name="BEGIN_BOLD" />很容易遭到恶意攻击<ph name="END_BOLD" />。</translation> -<translation id="666541661050183336">降低 iframe 资源的加载优先级。</translation> <translation id="6666647326143344290">使用您的 Google 帐户</translation> <translation id="6675665718701918026">已连接指针设备</translation> <translation id="6677037229676347494">正确 ID 应为“<ph name="EXPECTED_ID" />”,但实际 ID 为“<ph name="NEW_ID" />”。</translation> @@ -3919,6 +3942,7 @@ <translation id="6825883775269213504">俄语</translation> <translation id="6827236167376090743">此视频将不断循环播放。</translation> <translation id="6828153365543658583">只允许以下用户登录:</translation> +<translation id="6828434191343384461">所选数据已从 Chrome 和同步的设备中移除。不过,您的 Google 帐户在 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录(例如,在其他 Google 服务中的搜索记录和活动记录)。</translation> <translation id="6828860976882136098">未能按您的要求为所有用户设置自动更新(执行预定流程时出错:<ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">获取与<ph name="DEVICE_TYPE" />相关的帮助。</translation> <translation id="6829270497922309893">注册到您的组织</translation> @@ -3998,6 +4022,7 @@ <translation id="6965382102122355670">确定</translation> <translation id="6965648386495488594">端口</translation> <translation id="6965978654500191972">设备</translation> +<translation id="6969104364835835175">强制使用 PNaCl Subzero</translation> <translation id="6970230597523682626">保加利亚语</translation> <translation id="6970480684834282392">启动类型</translation> <translation id="6970856801391541997">打印特定页面</translation> @@ -4081,10 +4106,12 @@ <translation id="7057058088140140610">使用 Google Payments 存储的信用卡和地址信息</translation> <translation id="7059858479264779982">设为自动启动</translation> <translation id="7061692898138851896">自动保存密码</translation> +<translation id="7062222374113411376">允许最近关闭的网站完成数据收发操作(推荐)</translation> <translation id="7063129466199351735">处理快捷方式…</translation> <translation id="7065223852455347715">此设备已锁定为禁止注册到企业的模式。如果您要注册此设备,必须先完成设备恢复过程。</translation> <translation id="7065534935986314333">关于系统</translation> <translation id="7066944511817949584">无法连接“<ph name="DEVICE_NAME" />”。</translation> +<translation id="7067725467529581407">不再显示此气泡。</translation> <translation id="7070804685954057874">直接输入</translation> <translation id="7072010813301522126">快捷方式名称</translation> <translation id="7072025625456903686">自定义或全部允许</translation> @@ -4350,6 +4377,7 @@ <translation id="7489605380874780575">检查资格</translation> <translation id="749028671485790643">用户<ph name="VALUE" /></translation> <translation id="7491962110804786152">标签</translation> +<translation id="7493386493263658176">扩展程序“<ph name="EXTENSION_NAME" />”可能会收集您输入的所有内容(包括密码和信用卡号等个人数据)。要使用此扩展程序吗?</translation> <translation id="7495778526395737099">忘了旧密码?</translation> <translation id="7503191893372251637">Netscape 证书类型</translation> <translation id="7503821294401948377">无法加载浏览器操作的“<ph name="ICON" />”图标。</translation> @@ -4399,6 +4427,7 @@ <translation id="756445078718366910">打开浏览器窗口</translation> <translation id="7564847347806291057">结束进程</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">已清除 Chrome 数据</translation> <translation id="7568790562536448087">更新</translation> <translation id="7573172247376861652">电池充电</translation> <translation id="7576032389798113292">6x4</translation> @@ -4528,6 +4557,7 @@ <translation id="7786207843293321886">退出访客模式</translation> <translation id="7786889348652477777">重新加载应用(&R)</translation> <translation id="7787129790495067395">您当前正在使用密码。如果您忘记了密码,可以使用“Google 信息中心”重置同步,将您的数据从 Google 服务器中清除。</translation> +<translation id="7787308148023287649">在其他屏幕上显示</translation> <translation id="7788080748068240085">要保存“<ph name="FILE_NAME" />”的离线版本,您必须先释放<ph name="TOTAL_FILE_SIZE" />空间:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />取消固定不再需要离线访问的文件<ph name="MARKUP_3" /> <ph name="MARKUP_4" />删除“下载内容”文件夹中的文件<ph name="MARKUP_5" /></translation> @@ -4596,6 +4626,7 @@ <translation id="7878999881405658917">Google 已向这部手机发送通知。请注意,蓝牙功能开启后,配对手机即使在 10 米以外,也可用来为您的<ph name="DEVICE_TYPE" />解锁。若要避免这一问题,您可以<a>暂时停用此功能</a>。</translation> <translation id="7879478708475862060">按输入法</translation> <translation id="7880836220014399562">“<ph name="BUNDLE_NAME" />”会添加以下应用和扩展程序:</translation> +<translation id="7881969471599061635">停用字幕</translation> <translation id="7884988936047469945">实验性无障碍功能</translation> <translation id="7885253890047913815">近期使用过的目标打印机</translation> <translation id="7885283703487484916">很短</translation> @@ -4959,6 +4990,7 @@ <translation id="839736845446313156">注册</translation> <translation id="8398790343843005537">查找您的手机</translation> <translation id="8398877366907290961">仍然继续</translation> +<translation id="8399276228600040370">使用您在<ph name="PASSWORD_MANAGER_BRAND" />中保存的帐户登录</translation> <translation id="8401363965527883709">未选中的复选框</translation> <translation id="8408402540408758445">预提取搜索结果</translation> <translation id="8410073653152358832">使用此手机</translation> @@ -5045,6 +5077,7 @@ <translation id="8545211332741562162">允许网页使用实验性 JavaScript 功能。</translation> <translation id="8545575359873600875">抱歉,无法验证您的密码。该受监管用户的管理员可能在近期修改了密码。如果是这种情况,新密码将在您下次登录时生效。您可以尝试使用旧密码重新登录。</translation> <translation id="8546306075665861288">图片缓存</translation> +<translation id="854653344619327455">启用此项后,用户将无法在桌面共享选择器窗口中选择是否共享音频。</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">逐个字符</translation> <translation id="855081842937141170">固定标签页</translation> @@ -5075,6 +5108,7 @@ <translation id="8589311641140863898">实验性扩展程序 API</translation> <translation id="8590375307970699841">设置自动更新</translation> <translation id="8592071947729879125">限制 iframe 的权限。</translation> +<translation id="8592125506633137593">隔离顶层文档</translation> <translation id="8594787581355215556">您已用 <ph name="USER_EMAIL_ADDRESS" /> 的身份登录。可以在 <ph name="BEGIN_LINK" />Google 信息中心<ph name="END_LINK" />里管理已同步的数据。</translation> <translation id="8596540852772265699">自定义文件</translation> <translation id="8596785155158796745">麦克风目前无法使用。<ph name="BEGIN_LINK" />管理麦克风<ph name="END_LINK" /></translation> @@ -5147,6 +5181,7 @@ <translation id="8688579245973331962">看不到您的姓名?</translation> <translation id="8688644143607459122">点击“继续”即表示您同意使用 Google Payments。为了使您免受欺诈,系统将与 Google Payments 共享您计算机的相关信息(包括其位置信息)。</translation> <translation id="8689102680909215706">已远程安装扩展程序“<ph name="EXTENSION_NAME" />”。</translation> +<translation id="868926756781121513">桌面共享标签页来源</translation> <translation id="8689341121182997459">过期时间:</translation> <translation id="8690754533598178758">Adobe Flash Player 的麦克风例外情况有所不同。</translation> <translation id="8691686986795184760">(根据企业政策已启用)</translation> @@ -5190,6 +5225,7 @@ <translation id="8737685506611670901">打开<ph name="PROTOCOL" />链接而非“<ph name="REPLACED_HANDLER_TITLE" />”</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">改善触摸手势位置,以便弥补触摸操作分辨率低于鼠标操作这一劣势。</translation> +<translation id="8741995161408053644">您的 Google 帐户在 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录。</translation> <translation id="8743712320294854924">在工具栏中显示展开的输入法选项。</translation> <translation id="874420130893181774">传统拼音输入法</translation> <translation id="8744525654891896746">为该受监管用户选择头像</translation> @@ -5203,6 +5239,7 @@ <translation id="8757640015637159332">进入公开会话</translation> <translation id="8757742102600829832">选择要连接的 Chromebox</translation> <translation id="8757803915342932642">Google Cloud Devices上的设备</translation> +<translation id="8758895886513993540">此项用于控制用户是否可以选择标签页进行桌面共享。</translation> <translation id="8759408218731716181">无法设置多帐户登录</translation> <translation id="8759753423332885148">了解详情。</translation> <translation id="8761567432415473239">Google安全浏览功能最近在<ph name="SITE" />上<ph name="BEGIN_LINK" />发现了有害程序<ph name="END_LINK" />。</translation> @@ -5413,6 +5450,7 @@ <translation id="9074739597929991885">蓝牙</translation> <translation id="9074836595010225693">USB鼠标已连接</translation> <translation id="9076523132036239772">抱歉,您的电子邮件地址或密码无法进行验证。请先尝试连接到网络。</translation> +<translation id="9077132661879924646">在 Android 设备上停用统一媒体渠道。</translation> <translation id="907841381057066561">无法在打包时创建临时 zip 文件</translation> <translation id="9083147368019416919">未能取消注册</translation> <translation id="9084064520949870008">在窗口中打开</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 2d23c58..ea75535 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -502,6 +502,7 @@ <translation id="169515659049020177">Shift</translation> <translation id="1697068104427956555">選取圖片的方形區域。</translation> <translation id="1697532407822776718">大功告成!</translation> +<translation id="1697988819212986149">在 Google 服務提供的內容選單項目旁邊顯示 Google 標誌。</translation> <translation id="1699274548822076330">這會和 trace-upload-url (追蹤上傳網址) 標記一起使用。 警告:一旦啟用,Chrome 將記錄每次的瀏覽效能資料,並上傳到 trace-upload-url 標記中指定的網址。追蹤項目包括個人識別資訊 (PII),像是您所瀏覽網站的標題和網址。</translation> <translation id="1699395855685456105">硬體版本:</translation> @@ -562,7 +563,6 @@ <translation id="1783075131180517613">請更新您的同步通關密語。</translation> <translation id="1788636309517085411">使用預設值</translation> <translation id="1789575671122666129">彈出式視窗</translation> -<translation id="1790550373387225389">進入展示模式</translation> <translation id="1792705092719258158">啟用鏡像螢幕模式。</translation> <translation id="1793119619663054394">您確定要將「<ph name="PROFILE_NAME" />」和所有相關聯的 Chrome 資料從這台電腦移除嗎?這項操作執行後無法復原。</translation> <translation id="179767530217573436">過去 4 週</translation> @@ -1154,6 +1154,7 @@ <translation id="267285457822962309">根據裝置和週邊設備變更設定。</translation> <translation id="2673135533890720193">讀取您的瀏覽記錄</translation> <translation id="2673589024369449924">建立這位使用者的桌面捷徑</translation> +<translation id="2675358154061544447">(高度實驗性) 支援在其他處理程序中轉譯跨網站 iframe。在這個模式中,只有來自相同網站的文件才能共用轉譯程序。</translation> <translation id="2676946222714718093">目前播放裝置:</translation> <translation id="2678063897982469759">重新啟用</translation> <translation id="2678246812096664977">所有外掛程式</translation> @@ -1380,6 +1381,7 @@ <translation id="2960393411257968125">密碼管理員如何自動填入同步處理憑證。</translation> <translation id="29611076221683977">攻擊者目前可能會試圖透過 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 在您的 Mac 上安裝危險程式,藉此竊取或刪除您的資訊 (例如相片、密碼、郵件或信用卡資料)。</translation> <translation id="2961695502793809356">按一下到下一頁,按住可查看紀錄</translation> +<translation id="296216853343927883">允許在內容選單中顯示 Google 品牌</translation> <translation id="2963151496262057773">下列外掛程式無回應:<ph name="PLUGIN_NAME" /> 您要停止執行嗎?</translation> <translation id="2963783323012015985">土耳其文鍵盤</translation> <translation id="2964193600955408481">停用 WiFi</translation> @@ -1429,6 +1431,16 @@ <translation id="3025729795978504041">在上方按鈕按一下滑鼠右鍵,即可查看其他使用者。</translation> <translation id="3026050830483105579">一切盡在其中!</translation> <translation id="302620147503052030">顯示按鈕</translation> +<translation id="302781076327338683">略過快取重新載入</translation> +<translation id="3030243755303701754">受監管的使用者可以依照您的指示瀏覽網路。在 Chrome 中,受監管使用者的管理員可以: + + • 允許/禁止特定網站; + • 查看受監管使用者瀏覽過的網站;以及 + • 管理其他設定。 + +建立受監管的使用者時並不會建立 Google 帳戶,且這類使用者的書籤、瀏覽紀錄和其他偏好設定都不會透過 Chrome Sync 在其他裝置上保持同步。建立新的受監管使用者之後,您隨時都可以使用任何裝置前往 <ph name="BEGIN_MANAGE_LINK" /><ph name="DISPLAY_LINK" /><ph name="END_MANAGE_LINK" /> 管理設定。 + +如需進一步資訊,請造訪<ph name="BEGIN_LINK" />說明中心<ph name="END_LINK" />。</translation> <translation id="3031417829280473749">特務 X</translation> <translation id="3031557471081358569">選取要匯入的項目:</translation> <translation id="3033332627063280038">啟用實驗性 Cache-Control: stale-while-revalidate 指令實作功能。這樣一來,伺服器便可指定在背景重新驗證部分資源,以改善延遲情況。</translation> @@ -1648,7 +1660,6 @@ <translation id="3324301154597925148">這是您想要的搜尋頁面嗎?</translation> <translation id="3324684065575061611">(遭到公司政策停用)</translation> <translation id="3326821416087822643">正在壓縮 <ph name="FILE_NAME" />...</translation> -<translation id="3330206034087160972">離開展示模式</translation> <translation id="3330686263988132416">WebRTC Stun 起始標頭功能</translation> <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation> <translation id="3331799185273394951">啟用鏡像螢幕模式。在此模式下,螢幕影像會左右對調。</translation> @@ -1693,6 +1704,7 @@ <translation id="3392020134425442298">還原惡意檔案</translation> <translation id="3394150261239285340"><ph name="HOST" /> 要求使用相機和麥克風。</translation> <translation id="3394279550557729862">啟用原生快顯通知和通知中心支援功能,在適用的平台上使用。</translation> +<translation id="3394862755749546286">針對 Android 裝置停用整合 (Android 和桌面) 媒體管道。</translation> <translation id="3396331542604645348">選取的印表機無法使用或未正確安裝。請檢查您的印表機,或改選其他印表機。</translation> <translation id="3399597614303179694">馬其頓文鍵盤</translation> <translation id="3401130144947259741">啟用後,追蹤事件將匯出到 Windows 事件追蹤 (ETW),並可使用 UIForETW 或 Xperf 等工具擷取。</translation> @@ -1903,7 +1915,6 @@ <translation id="367645871420407123">如果您要將 Root 密碼設為測試映像檔的預設值,請保留空白</translation> <translation id="3678156199662914018">擴充功能:<ph name="EXTENSION_NAME" /></translation> <translation id="3678559383040232393">馬爾他文鍵盤</translation> -<translation id="3680173818488851340">低優先順序 iframe。</translation> <translation id="3683524264665795342"><ph name="APP_NAME" /> 要求共用畫面</translation> <translation id="3685122418104378273">使用行動數據時,Google 雲端硬碟同步功能預設為停用。</translation> <translation id="3685387984467886507">在指定的時間內記住 SSL 錯誤的處理方式。</translation> @@ -1952,6 +1963,7 @@ <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> 會顯示在管理員控制台中</translation> <translation id="3741243925913727067">將您媒體裝置上的相片和影片備份到 Google 雲端硬碟。</translation> <translation id="3743492083222969745">在虛擬鍵盤的設定頁面中啟用/停用手勢輸入選項。</translation> +<translation id="3744111561329211289">背景同步處理</translation> <translation id="3749289110408117711">檔案名稱</translation> <translation id="3751427701788899101">連線已中斷</translation> <translation id="3751522270321808809">這個網站可能會試圖騙取您的資訊 (例如密碼、郵件或信用卡資料)。</translation> @@ -2268,6 +2280,7 @@ <translation id="4218259925454408822">使用其他帳戶登入</translation> <translation id="4219614746733932747">啟用後,Blink 會利用縮放機制依裝置縮放比例來縮放內容。</translation> <translation id="4220865787605972627">允許螢幕色彩校正功能 (如果螢幕支援這項功能)。</translation> +<translation id="4232692576734035989">(高度實驗性) 效能模式;在頂層文件的其他處理程序中保留跨網站 iframe。在這個模式中,來自不同第三方網站的 iframe 可以共用相同程序。</translation> <translation id="4235200303672858594">整個畫面</translation> <translation id="4235813040357936597">為<ph name="PROFILE_NAME" />新增帳戶</translation> <translation id="4240069395079660403"><ph name="PRODUCT_NAME" /> 介面無法設為這個語言</translation> @@ -2433,6 +2446,7 @@ <translation id="4509017836361568632">捨棄相片</translation> <translation id="4509345063551561634">位置:</translation> <translation id="4514542542275172126">設定新的受監管使用者</translation> +<translation id="4514914692061505365">針對所有 pexe 檔強制使用 PNaCl 的快速 Subzero 轉譯器。</translation> <translation id="4518677423782794009">Chrome 出現異常行為嗎 (例如造成電腦當機、顯示不尋常的起始網頁、工具列或無法關閉的未預期廣告,或是讓您無法正常瀏覽網路)?您可以執行 Chrome 清理工具,藉此修正相關問題。</translation> <translation id="452039078290142656">由 <ph name="VENDOR_NAME" /> 製造的不明裝置</translation> <translation id="4522570452068850558">詳細資訊</translation> @@ -2481,6 +2495,7 @@ <translation id="4595560905247879544">只有管理員 (<ph name="CUSTODIAN_NAME" />) 可以修改應用程式和擴充功能。</translation> <translation id="4601242977939794209">EMF 轉換工具</translation> <translation id="4602466770786743961">一律允許 <ph name="HOST" /> 存取您的攝影機和麥克風</translation> +<translation id="4603234488640507661">(Android)</translation> <translation id="4605399136610325267">未連線至網際網路</translation> <translation id="4608500690299898628">尋找(&F)...</translation> <translation id="4610637590575890427">您的意思是想瀏覽 <ph name="SITE" /> 嗎?</translation> @@ -2781,6 +2796,7 @@ <translation id="5062930723426326933">無法登入,請重新連線至網際網路並再試一次。</translation> <translation id="5063180925553000800">新 PIN:</translation> <translation id="5067867186035333991">當 <ph name="HOST" /> 要求存取麥克風時詢問我。</translation> +<translation id="5068918910148307423">禁止最近關閉的網站停止傳送及接收資料</translation> <translation id="507075806566596212">您即將向 Google 註冊這台 <ph name="DEVICE_TYPE" />,以啟用遠端定位、清除及鎖定裝置的功能。這項設定需要重新啟動後才會生效,您要繼續嗎?</translation> <translation id="5072836811783999860">顯示受管理書籤</translation> <translation id="5074318175948309511">您可能需要重新載入這個網頁,新設定才會生效。</translation> @@ -2889,6 +2905,7 @@ <translation id="5227808808023563348">尋找前一段文字</translation> <translation id="5228076606934445476">裝置發生錯誤。如要從這個錯誤中恢復,您必須重新啟動裝置,然後再試一次。</translation> <translation id="5228962187251412618">僅限線上檢查</translation> +<translation id="5229622432348746578">禁止桌面分享功能一併分享音訊</translation> <translation id="5230516054153933099">視窗</translation> <translation id="5232178406098309195">當您使用音訊啟動指令 (例如「Ok Google」) 或輕觸麥克風圖示時,您的私人語音和音訊活動會將部分語音和其他音訊儲存到您的帳戶。儲存的錄音內容包含後續的語音/音訊,以及在此之前幾秒內的聲音。</translation> <translation id="523299859570409035">通知例外情況</translation> @@ -3143,6 +3160,7 @@ <translation id="5557991081552967863">休眠期間保持開啟 Wi-Fi</translation> <translation id="5558129378926964177">放大(&I)</translation> <translation id="556042886152191864">按鈕</translation> +<translation id="5562781907504170924">這個分頁已連線至藍牙裝置。</translation> <translation id="5565871407246142825">信用卡</translation> <translation id="5567989639534621706">應用程式快取</translation> <translation id="5568069709869097550">無法登入</translation> @@ -3302,6 +3320,7 @@ <translation id="5803531701633845775">從後面選擇詞組而無需移動游標</translation> <translation id="5804241973901381774">權限</translation> <translation id="580571955903695899">按標題重新排序</translation> +<translation id="5808982448801399019">驗證失敗</translation> <translation id="580961539202306967">每當有網站要傳送推送訊息時詢問我 (建議使用)</translation> <translation id="5815645614496570556">X.400 地址</translation> <translation id="5817397429773072584">繁體中文</translation> @@ -3571,6 +3590,7 @@ <translation id="6243774244933267674">無法與伺服器連線</translation> <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation> <translation id="624789221780392884">可進行更新</translation> +<translation id="6248400709929739064">啟用字幕</translation> <translation id="6248988683584659830">搜尋設定</translation> <translation id="6251870443722440887">GDI 控制代碼</translation> <translation id="6251889282623539337"><ph name="DOMAIN" /> 服務條款</translation> @@ -3595,6 +3615,7 @@ <translation id="6277105963844135994">網路逾時</translation> <translation id="6277518330158259200">擷取螢幕畫面(&A)</translation> <translation id="6279183038361895380">按下 |<ph name="ACCELERATOR" />| 即可顯示游標</translation> +<translation id="6280215091796946657">以其他帳戶登入</translation> <translation id="6281743458679673853">這個實驗會讓所有 API 都反映版面配置檢視區。這會讓 window.scroll 屬性與版面配置檢視區關聯。</translation> <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{您的網路上有一台新印表機}other{您的網路上有多台新印表機}}</translation> <translation id="6285395082104474418">狀態匣會顯示目前的網路狀態、電池狀態和其他項目的狀態。</translation> @@ -3676,6 +3697,9 @@ <translation id="6418160186546245112">還原至先前安裝的 <ph name="IDS_SHORT_PRODUCT_NAME" /> 版本</translation> <translation id="6418481728190846787">永久移除所有應用程式的存取權</translation> <translation id="6418505248408153264">啟用 Material Design 紀錄</translation> +<translation id="6419288379019356534">這個裝置是由 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 管理。 + <ph name="LINE_BREAK" /> + 請點選 [下一步] 繼續登入您的 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 帳戶。</translation> <translation id="6419902127459849040">中歐語系</translation> <translation id="6420676428473580225">加到桌面</translation> <translation id="6422329785618833949">相片已翻轉</translation> @@ -3835,7 +3859,6 @@ <translation id="6662016084451426657">同步功能發生錯誤:請與管理員聯絡,要求啟用同步處理功能。</translation> <translation id="6663792236418322902">日後如要還原這個檔案,需要使用您所選用的密碼,請將此密碼記錄在安全的位置。</translation> <translation id="6664237456442406323">抱歉,您的電腦是由格式錯誤的硬體 ID 所設定。這樣會防止 Chrome 作業系統更新最新的安全性修復,您的電腦也可能<ph name="BEGIN_BOLD" />容易遭受惡意攻擊<ph name="END_BOLD" />。</translation> -<translation id="666541661050183336">降低 iframe 資源的載入優先順序。</translation> <translation id="6666647326143344290">使用您的 Google 帳戶</translation> <translation id="6675665718701918026">已連上指標裝置</translation> <translation id="6677037229676347494">預期的 ID 為「<ph name="EXPECTED_ID" />」,但指向的 ID 為「<ph name="NEW_ID" />」。</translation> @@ -3928,6 +3951,7 @@ <translation id="6825883775269213504">俄文</translation> <translation id="6827236167376090743">這部影片會持續播放到地老天荒。</translation> <translation id="6828153365543658583">只允許下列使用者登入:</translation> +<translation id="6828434191343384461">所選資料已從 Chrome 和已同步的裝置中移除。不過,您仍可前往 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 存取 Google 帳戶中保存的其他各種瀏覽紀錄,例如在其他 Google 服務中的搜尋和活動紀錄。</translation> <translation id="6828860976882136098">無法為所有使用者設定自動更新作業 (預先執行錯誤:<ph name="ERROR_NUMBER" />)</translation> <translation id="6829250331733125857">取得 <ph name="DEVICE_TYPE" /> 相關說明。</translation> <translation id="6829270497922309893">在貴機構中註冊</translation> @@ -4007,6 +4031,7 @@ <translation id="6965382102122355670">確定</translation> <translation id="6965648386495488594">通訊埠</translation> <translation id="6965978654500191972">裝置</translation> +<translation id="6969104364835835175">強制使用 PNaCl Subzero</translation> <translation id="6970230597523682626">保加利亞文</translation> <translation id="6970480684834282392">啟動類型</translation> <translation id="6970856801391541997">列印特定網頁</translation> @@ -4090,10 +4115,12 @@ <translation id="7057058088140140610">使用 Google Payments 儲存的信用卡和地址資訊。</translation> <translation id="7059858479264779982">設為自動啟動</translation> <translation id="7061692898138851896">自動儲存密碼</translation> +<translation id="7062222374113411376">允許最近關閉的網站停止傳送及接收資料 (建議)</translation> <translation id="7063129466199351735">正在處理捷徑...</translation> <translation id="7065223852455347715">這個裝置已鎖定,目前處於禁止企業註冊模式。您必須先完成裝置還原程序,才能註冊這個裝置。</translation> <translation id="7065534935986314333">關於系統</translation> <translation id="7066944511817949584">無法連結至「<ph name="DEVICE_NAME" />」。</translation> +<translation id="7067725467529581407">不再顯示這個訊息。</translation> <translation id="7070804685954057874">直接輸入</translation> <translation id="7072010813301522126">捷徑名稱</translation> <translation id="7072025625456903686">全部允許或自訂</translation> @@ -4364,6 +4391,7 @@ <translation id="7489605380874780575">檢查資格</translation> <translation id="749028671485790643">人員 <ph name="VALUE" /></translation> <translation id="7491962110804786152">分頁</translation> +<translation id="7493386493263658176"><ph name="EXTENSION_NAME" /> 擴充功能可能會收集您輸入的所有文字,包括密碼和信用卡號碼等個人資料。您要使用這個擴充功能嗎?</translation> <translation id="7495778526395737099">忘記舊密碼了嗎?</translation> <translation id="7503191893372251637">Netscape 憑證類型</translation> <translation id="7503821294401948377">無法載入瀏覽器動作的圖示「<ph name="ICON" />」。</translation> @@ -4414,6 +4442,7 @@ <translation id="756445078718366910">開啟瀏覽器視窗</translation> <translation id="7564847347806291057">結束處理程序</translation> <translation id="7566723889363720618">F12</translation> +<translation id="756809126120519699">已清除 Chrome 資料</translation> <translation id="7568790562536448087">更新</translation> <translation id="7573172247376861652">電池充電</translation> <translation id="7576032389798113292">6x4</translation> @@ -4543,6 +4572,7 @@ <translation id="7786207843293321886">結束訪客工作階段</translation> <translation id="7786889348652477777">重新載入應用程式(&R)</translation> <translation id="7787129790495067395">您目前使用的是通關密語。如您忘記通關密語,可以透過「Google 資訊主頁」重設同步處理,以清除您儲存在 Google 伺服器上的資料。</translation> +<translation id="7787308148023287649">在其他螢幕上顯示</translation> <translation id="7788080748068240085">如要離線儲存「<ph name="FILE_NAME" />」,您必須釋放 <ph name="TOTAL_FILE_SIZE" /> 的空間:<ph name="MARKUP_1" /> <ph name="MARKUP_2" />取消固定不會再離線存取的檔案<ph name="MARKUP_3" /> <ph name="MARKUP_4" />從下載資料夾中刪除檔案<ph name="MARKUP_5" /></translation> @@ -4611,6 +4641,7 @@ <translation id="7878999881405658917">Google 已將通知傳送至這支手機。請注意,啟用藍牙時,您的手機可能會讓超過 30 英尺外的 <ph name="DEVICE_TYPE" /> 解除鎖定。如果這樣會造成問題,您可以<a>暫時停用這項功能</a>。</translation> <translation id="7879478708475862060">按照輸入模式</translation> <translation id="7880836220014399562">「<ph name="BUNDLE_NAME" />」會新增下列應用程式和擴充功能:</translation> +<translation id="7881969471599061635">停用字幕</translation> <translation id="7884988936047469945">實驗性協助工具功能</translation> <translation id="7885253890047913815">最近的目的地</translation> <translation id="7885283703487484916">很短</translation> @@ -4974,6 +5005,7 @@ <translation id="839736845446313156">註冊</translation> <translation id="8398790343843005537">搜尋您的手機</translation> <translation id="8398877366907290961">仍要繼續</translation> +<translation id="8399276228600040370">使用您儲存在 <ph name="PASSWORD_MANAGER_BRAND" /> 中的帳戶登入</translation> <translation id="8401363965527883709">未勾選的核取方塊</translation> <translation id="8408402540408758445">預先擷取搜尋結果</translation> <translation id="8410073653152358832">使用這個手機</translation> @@ -5060,6 +5092,7 @@ <translation id="8545211332741562162">讓網頁使用實驗性 JavaScript 功能。</translation> <translation id="8545575359873600875">很抱歉,系統無法驗證您的密碼。這位受監管使用者的管理員最近可能變更了密碼。如果是這樣的話,您下次登入時就必須使用新密碼。現在請嘗試使用您的舊密碼。</translation> <translation id="8546306075665861288">圖片快取</translation> +<translation id="854653344619327455">啟用這個標記後,桌面分享選擇器視窗就不會讓使用者選擇是否分享音訊。</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="8548973727659841685">字元</translation> <translation id="855081842937141170">固定分頁</translation> @@ -5090,6 +5123,7 @@ <translation id="8589311641140863898">實驗性擴充功能 API</translation> <translation id="8590375307970699841">設定自動更新</translation> <translation id="8592071947729879125">限制 iframe 權限。</translation> +<translation id="8592125506633137593">隔離頂層文件</translation> <translation id="8594787581355215556">您是以 <ph name="USER_EMAIL_ADDRESS" /> 的身分登入。您可前往 <ph name="BEGIN_LINK" />Google 資訊主頁<ph name="END_LINK" />管理同步處理資料。</translation> <translation id="8596540852772265699">自訂檔</translation> <translation id="8596785155158796745">麥克風目前無法使用。<ph name="BEGIN_LINK" />設定麥克風<ph name="END_LINK" /></translation> @@ -5162,6 +5196,7 @@ <translation id="8688579245973331962">找不到您的名稱嗎?</translation> <translation id="8688644143607459122">按一下 [繼續] 即表示您同意使用 Google Payments。系統會與 Google Payments 共用您電腦的相關資訊 (包括位置資訊),以防您遭到詐欺。</translation> <translation id="8689102680909215706">擴充功能「<ph name="EXTENSION_NAME" />」是從遠端安裝。</translation> +<translation id="868926756781121513">桌面分享功能與分頁來源</translation> <translation id="8689341121182997459">逾期:</translation> <translation id="8690754533598178758">Adobe Flash Player 適用不同的麥克風例外狀況。</translation> <translation id="8691686986795184760">(由公司政策啟用)</translation> @@ -5205,6 +5240,7 @@ <translation id="8737685506611670901">開啟<ph name="PROTOCOL" />連結 (取代 <ph name="REPLACED_HANDLER_TITLE" />)</translation> <translation id="8737709691285775803">Shill</translation> <translation id="8741881454555234096">觸控功能的解析度比滑鼠低,觸控調整程序則可修正觸控手勢的定位,改善這個缺點。</translation> +<translation id="8741995161408053644">您仍可前往 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 存取 Google 帳戶中保存的各種瀏覽紀錄。</translation> <translation id="8743712320294854924">在檔案櫃中顯示更進階的輸入選項。</translation> <translation id="874420130893181774">傳統拼音輸入法</translation> <translation id="8744525654891896746">選取這位受監管使用者的顯示圖片</translation> @@ -5218,6 +5254,7 @@ <translation id="8757640015637159332">進入公開工作階段</translation> <translation id="8757742102600829832">選擇要連接的 Chromebox</translation> <translation id="8757803915342932642">Google 雲端裝置中的裝置</translation> +<translation id="8758895886513993540">這個標記可控制使用者是否能選擇要使用桌面分享功能的分頁。</translation> <translation id="8759408218731716181">無法設定多重登入</translation> <translation id="8759753423332885148">瞭解詳情</translation> <translation id="8761567432415473239">Google 安全瀏覽最近在「<ph name="SITE" />」<ph name="BEGIN_LINK" />發現了有害程式<ph name="END_LINK" />。</translation> @@ -5428,6 +5465,7 @@ <translation id="9074739597929991885">藍牙</translation> <translation id="9074836595010225693">已連接 USB 滑鼠</translation> <translation id="9076523132036239772">抱歉,系統無法驗證您的電子郵件或密碼,請先連線至網路。</translation> +<translation id="9077132661879924646">針對 Android 裝置停用整合媒體管道。</translation> <translation id="907841381057066561">封裝過程中建立暫存壓縮檔失敗。</translation> <translation id="9083147368019416919">無法取消註冊</translation> <translation id="9084064520949870008">在視窗中開啟</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb index 2480ec9..d1a8a20 100644 --- a/chrome/app/resources/google_chrome_strings_am.xtb +++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -212,7 +212,6 @@ <translation id="7808348361785373670">ከChrome አስወግድ...</translation> <translation id="7825851276765848807">ተለይቶ ባልታወቀ ስህተት ምክንያት ጭነት ከሽፏል። እባክዎ Google Chromeን እንደገና ያውርዱ።</translation> <translation id="7890208801193284374">ኮምፒውተር የሚጋሩ ከሆኑ ጓደኛዎች እና ቤተሰብ ተለይተው ሊያስሱ እና Chromeን በሚፈልጉበት መንገድ ማዋቀር ይችላሉ።</translation> -<translation id="8000275528373650868">Google Chrome Windows Vista ወይም Windows XP SP2 ወይም ከዛበላይ ይፈልጋል።</translation> <translation id="8005540215158006229">በቃ Chrome ዝግጁ ሊሆን ነው።</translation> <translation id="8008534537613507642">Chromeን ዳግም ጫነው</translation> <translation id="8030318113982266900">መሳሪያዎን ወደ <ph name="CHANNEL_NAME" /> ሰርጥ በማዘመን ላይ...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index 34ffd41..6c9d0459 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -208,7 +208,6 @@ <translation id="7808348361785373670">جارٍ الإزالة من Chrome...</translation> <translation id="7825851276765848807">فشل التثبيت نظرًا لحدوث خطأ غير محدد. الرجاء تنزيل Google Chrome مرة أخرى.</translation> <translation id="7890208801193284374">إذا كنت تشارك الكمبيوتر مع أصدقائك وعائلتك، فبإمكانهم التصفح على حدة وإعداد Chrome على النحو الذي يريدونه.</translation> -<translation id="8000275528373650868">يتطلب Google Chrome نظام التشغيل Windows Vista أو Windows XP المزود بحزمة الخدمة SP2 أو الأعلى منها.</translation> <translation id="8005540215158006229">Chrome جاهز تقريبًا.</translation> <translation id="8008534537613507642">إعادة تثبيت Chrome</translation> <translation id="8030318113982266900">جارٍ تحديث جهازك إلى قناة <ph name="CHANNEL_NAME" />...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb index dde8e060..03993528 100644 --- a/chrome/app/resources/google_chrome_strings_bg.xtb +++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -206,13 +206,13 @@ <translation id="7808348361785373670">Премахване от Chrome...</translation> <translation id="7825851276765848807">Инсталацията не бе успешна поради неизвестна грешка. Моля, изтеглете отново Google Chrome.</translation> <translation id="7890208801193284374">Ако споделяте компютър, близките и приятелите ви могат да сърфират отделно и да настроят Chrome точно така, както искат.</translation> -<translation id="8000275528373650868">За Google Chrome се изисква Windows Vista или Windows XP с SP2 или по-нова версия.</translation> <translation id="8005540215158006229">Chrome е почти готов.</translation> <translation id="8008534537613507642">Повторно инсталиране на Chrome</translation> <translation id="8030318113982266900">Устройството ви се актуализира до канал: <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">За да влезе в сила премахването на профила ви от Chrome, може да се наложи да презаредите отворените си раздели.</translation> <translation id="8037887340639533879">Няма намерена инсталация на Google Chrome, която да се актуализира.</translation> <translation id="8129812357326543296">Всичко за &Google Chrome</translation> +<translation id="8183957050892517584">Chrome ще съхранява надеждно личните ви данни, за да не се налага да ги въвеждате отново.</translation> <translation id="8205111949707227942">По избор: Помогнете ни да подобрим Chrome OS, като автоматично изпращате на Google статистически данни за използването му и сигнали за сривове.</translation> <translation id="8227755444512189073">Google Chrome трябва да стартира външно приложение, за да обработва връзки от тип <ph name="SCHEME" />. Поисканата връзка е <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome използва камерата и микрофона ви.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb index fa43df5..1821e222 100644 --- a/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -208,13 +208,13 @@ <translation id="7808348361785373670">Chrome থেকে সরান...</translation> <translation id="7825851276765848807">অনির্দিষ্ট ত্রুটির জন্য ইনস্টলেশন ব্যর্থ হয়েছে৷ দয়া করে পুনরায় Google Chrome ডাউনলোড করুন৷</translation> <translation id="7890208801193284374">যদি আপনি একটি কম্পিউটার ভাগ করেন, তাহলে বন্ধু ও পরিবারের লোকজন পৃথকভাবে ব্রাউজ করতে পারবেন এবং তাদের ইচ্ছা অনুযায়ী Chrome এর সেটআপ করতে পারবেন৷</translation> -<translation id="8000275528373650868">Google Chrome-এর জন্য SP2 বা উচ্চতর সহ Windows Vista বা Windows XP প্রয়োজন৷</translation> <translation id="8005540215158006229">Chrome প্রায় প্রস্তুত৷</translation> <translation id="8008534537613507642">Chrome পুনরায় ইন্সটল করুন</translation> <translation id="8030318113982266900">আপনার ডিভাইস <ph name="CHANNEL_NAME" /> চ্যানেলে আপডেট করা হচ্ছে...</translation> <translation id="8032142183999901390">Chrome থেকে আপনার অ্যাকাউন্ট সরানোর পরে, কার্য়করী করতে আপনাকে খোলা ট্যাবগুলিকে পুনরায় লোড করার প্রয়োজন হতে পারে।</translation> <translation id="8037887340639533879">আপডেট করার জন্য Google Chrome এর কোনো ইনস্টলশান পাওয়া যায়নি৷</translation> <translation id="8129812357326543296">&Google Chrome সম্বন্ধে</translation> +<translation id="8183957050892517584">Chrome আপনার ব্যক্তিগত বিবরণ সুরক্ষিত ভাবে সঞ্চয় করবে, তাই আপনার আর টাইপ করার প্রয়োজন হবে না।</translation> <translation id="8205111949707227942">ঐচ্ছিক: Google-এ ব্যবহার পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদন স্বয়ংক্রিয়ভাবে পাঠিয়ে Chrome-কে সর্বোত্তম করে তুলতে সাহায্য করুন৷</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> লিঙ্কগুলি নিয়ন্ত্রণ করার জন্য Google Chrome-এর একটি বহিরাগত অ্যাপ্লিকেশন প্রবর্তন করা দরকার৷ অনুরোধ করা লিঙ্কটি হল <ph name="PROTOLINK" />৷</translation> <translation id="8255190535488645436">Google Chrome আপনার ক্যামেরা এবং মাইক্রোফোন ব্যবহার করছে৷</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index 4bd28acf..71ee9a7 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Suprimeix de Chrome...</translation> <translation id="7825851276765848807">La instal·lació ha fallat a causa d'un error no especificat. Torneu a baixar Google Chrome.</translation> <translation id="7890208801193284374">Si compartiu un ordinador, els amics i els familiars poden navegar de manera independent i configurar Chrome com vulguin.</translation> -<translation id="8000275528373650868">Google Chrome requereix Windows Vista o Windows XP amb SP2 o superior.</translation> <translation id="8005540215158006229">Chrome ja està quasi llest</translation> <translation id="8008534537613507642">Torna a instal·lar Chrome</translation> <translation id="8030318113982266900">S'està actualitzant el vostre dispositiu al canal <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Després de suprimir el vostre compte de Chrome, pot ser que hàgiu de tornar a carregar les pestanyes obertes.</translation> <translation id="8037887340639533879">No s'ha trobat cap instal·lació de Google Chrome pendent d'actualització.</translation> <translation id="8129812357326543296">Quant a &Google Chrome</translation> +<translation id="8183957050892517584">Chrome emmagatzemarà de manera segura les vostres dades personals perquè no les hàgiu de tornar a escriure</translation> <translation id="8205111949707227942">Opcional: ajudeu-nos a millorar Chrome OS enviant estadístiques d'ús i informes d'error a Google automàticament.</translation> <translation id="8227755444512189073">Google Chrome ha d'iniciar una aplicació externa per gestionar els enllaços <ph name="SCHEME" />. L'enllaç sol·licitat és <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome està utilitzant la càmera i el micròfon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb index cf3c9e8..888bba3b 100644 --- a/chrome/app/resources/google_chrome_strings_cs.xtb +++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Odstranit z Chromu...</translation> <translation id="7825851276765848807">Instalace se z neznámého důvodu nezdařila. Stáhněte prosím aplikaci Google Chrome znovu.</translation> <translation id="7890208801193284374">Pokud počítač sdílíte s kamarády a členy rodiny, každý může web procházet samostatně a nastavit si Chrome podle svých požadavků.</translation> -<translation id="8000275528373650868">Google Chrome vyžaduje operační systém Windows Vista nebo Windows XP SP2 nebo vyšší.</translation> <translation id="8005540215158006229">Chrome je téměř připraven.</translation> <translation id="8008534537613507642">Přeinstalovat Chrome</translation> <translation id="8030318113982266900">Aktualizace zařízení na verzi <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Odebrání účtu z Chromu se může projevit až po opětovném načtení otevřených karet.</translation> <translation id="8037887340639533879">Nebyla nalezena žádná instalace Google Chrome, kterou by bylo možné aktualizovat.</translation> <translation id="8129812357326543296">O aplikaci &Google Chrome</translation> +<translation id="8183957050892517584">Chrome vaše osobní údaje bezpečně uloží, abyste je nemuseli zadávat znovu.</translation> <translation id="8205111949707227942">Volitelné: Pomozte zlepšit operační systém Chrome OS tím, že budete společnosti Google automaticky zasílat statistiky využití a zprávy o selhání.</translation> <translation id="8227755444512189073">Aplikace Chrome potřebuje spustit externí aplikaci pro práci s odkazy <ph name="SCHEME" />. Požadovaný odkaz je <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome používá vaši kameru a mikrofon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index 013d4bd..2ee60e8 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Fjern fra Chrome...</translation> <translation id="7825851276765848807">Installationen mislykkedes på grund af en uspecificeret fejl. Download Google Chrome igen.</translation> <translation id="7890208801193284374">Hvis du deler en computer, kan venner og familie browse individuelt og konfigurere Chrome, som de ønsker hver især.</translation> -<translation id="8000275528373650868">Google Chrome kræver Windows Vista eller Windows XP med SP2 eller nyere.</translation> <translation id="8005540215158006229">Chrome er næsten klar.</translation> <translation id="8008534537613507642">Geninstaller Chrome</translation> <translation id="8030318113982266900">Opdaterer din enhed til kanalen <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Når du har fjernet din konto fra Chrome, skal du muligvis indlæse dine åbne faner, før ændringen træder i kraft.</translation> <translation id="8037887340639533879">Der blev ikke fundet nogen opdateringsinstallation til Google Chrome.</translation> <translation id="8129812357326543296">Om &Google Chrome</translation> +<translation id="8183957050892517584">Chrome gemmer dine personlige oplysninger på sikker vis, så du ikke behøver at angive dem igen.</translation> <translation id="8205111949707227942">Valgfrit: Vær med til at gøre Chrome OS bedre ved automatisk at sende brugsstatistikker og rapporter om nedbrud til Google.</translation> <translation id="8227755444512189073">Google Chrome er nødt til at starte en ekstern applikation for at håndtere links fra <ph name="SCHEME" />. Det link, der anmodes om, er <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome bruger dit kamera og din mikrofon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb index bb85bad6..8f214f3 100644 --- a/chrome/app/resources/google_chrome_strings_de.xtb +++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Aus Chrome entfernen...</translation> <translation id="7825851276765848807">Die Installation ist aufgrund eines unbekannten Fehlers fehlgeschlagen. Laden Sie Google Chrome erneut herunter.</translation> <translation id="7890208801193284374">Bei gemeinsam genutzten Computern können die verschiedenen Personen separat surfen und Chrome jeweils nach ihren Wünschen einrichten.</translation> -<translation id="8000275528373650868">Für Google Chrome ist Windows Vista oder Windows XP SP2 oder höher erforderlich.</translation> <translation id="8005540215158006229">Chrome ist gleich bereit.</translation> <translation id="8008534537613507642">Chrome erneut installieren</translation> <translation id="8030318113982266900">Ihr Gerät wird auf Kanal <ph name="CHANNEL_NAME" /> aktualisiert...</translation> <translation id="8032142183999901390">Nachdem Sie Ihr Konto aus Chrome entfernt haben, müssen Sie Ihre geöffneten Tabs möglicherweise neu laden, damit die Änderung wirksam wird.</translation> <translation id="8037887340639533879">Keine zu aktualisierende Installation von Google Chrome gefunden</translation> <translation id="8129812357326543296">Über &Google Chrome</translation> +<translation id="8183957050892517584">Ihre personenbezogenen Daten werden von Chrome sicher gespeichert. Dadurch brauchen Sie sie nicht noch einmal einzugeben.</translation> <translation id="8205111949707227942">Optional: Nutzungsstatistiken und Absturzberichte zur Verbesserung von Chrome OS automatisch an Google senden</translation> <translation id="8227755444512189073">Google Chrome muss zum Verarbeiten von <ph name="SCHEME" />-Links eine externe App starten. Der angeforderte Link lautet <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome verwendet Ihre Kamera und Ihr Mikrofon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index 6eef8d2..a0cbb6ae 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -208,13 +208,13 @@ <translation id="7808348361785373670">Κατάργηση από το Chrome…</translation> <translation id="7825851276765848807">Η εγκατάσταση απέτυχε λόγω μη καθορισμένου σφάλματος. Κατεβάστε το Google Chrome ξανά.</translation> <translation id="7890208801193284374">Αν χρησιμοποιείτε έναν υπολογιστή από κοινού με άλλα άτομα, οι φίλοι και τα μέλη της οικογένειάς σας μπορούν να περιηγούνται αυτόνομα και να ρυθμίζουν το Chrome ακριβώς όπως θέλουν.</translation> -<translation id="8000275528373650868">Το Google Chrome απαιτεί λειτουργικό σύστημα Windows Vista ή Windows XP με SP2 ή μεταγενέστερη έκδοση.</translation> <translation id="8005540215158006229">Το Chrome είναι σχεδόν έτοιμο.</translation> <translation id="8008534537613507642">Επανεγκατάσταση του Chrome</translation> <translation id="8030318113982266900">Ενημέρωση της συσκευής σας στο κανάλι <ph name="CHANNEL_NAME" />…</translation> <translation id="8032142183999901390">Μετά την κατάργηση του λογαριασμού σας στο Chrome, μπορεί να χρειαστεί να επαναφορτώσετε τις ανοικτές καρτέλες σας προκειμένου να εφαρμοστούν οι επιλογές σας.</translation> <translation id="8037887340639533879">Δεν βρέθηκε εγκατάσταση του Google Chrome για ενημέρωση.</translation> <translation id="8129812357326543296">Σχετικά με &το Google Chrome</translation> +<translation id="8183957050892517584">Το Chrome θα αποθηκεύσει με ασφάλεια τα προσωπικά σας στοιχεία, έτσι ώστε να μην χρειάζεται να τα πληκτρολογείτε ξανά.</translation> <translation id="8205111949707227942">Προαιρετικό: Συμβάλετε στη βελτίωση του Chrome OS στέλνοντας αυτόματα στην Google στατιστικά στοιχεία χρήσης και αναφορές σφαλμάτων.</translation> <translation id="8227755444512189073">Το Google Chrome πρέπει να εκκινήσει μια εξωτερική εφαρμογή για το χειρισμό των συνδέσμων <ph name="SCHEME" />. Ζητήθηκε ο σύνδεσμος <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Το Google Chrome χρησιμοποιεί την κάμερα και το μικρόφωνό σας.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index c9a6887..dad7a01 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -212,7 +212,6 @@ <translation id="7808348361785373670">Remove from Chrome...</translation> <translation id="7825851276765848807">Installation failed due to unspecified error. Please download Google Chrome again.</translation> <translation id="7890208801193284374">If you share a computer, friends and family can browse separately and set up Chrome just the way they want.</translation> -<translation id="8000275528373650868">Google Chrome requires Windows Vista or Windows XP with SP2 or higher.</translation> <translation id="8005540215158006229">Chrome is almost ready.</translation> <translation id="8008534537613507642">Reinstall Chrome</translation> <translation id="8030318113982266900">Updating your device to <ph name="CHANNEL_NAME" /> channel...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb index b1a481a..76f350c 100644 --- a/chrome/app/resources/google_chrome_strings_es-419.xtb +++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Eliminar de Chrome…</translation> <translation id="7825851276765848807">La instalación falló debido a un error no especificado. Descarga Google Chrome otra vez.</translation> <translation id="7890208801193284374">Si compartes una computadora, tus amigos y familiares pueden navegar de forma independiente y configurar Chrome según los gustos individuales.</translation> -<translation id="8000275528373650868">Para usar Google Chrome, se necesita Windows Vista o Windows XP con SP2 o superior.</translation> <translation id="8005540215158006229">Chrome ya está casi listo.</translation> <translation id="8008534537613507642">Reinstalar Chrome</translation> <translation id="8030318113982266900">Actualizando el dispositivo al canal <ph name="CHANNEL_NAME" />…</translation> <translation id="8032142183999901390">Luego de eliminar la cuenta de Chrome, es posible que debas volver a cargar las pestañas abiertas para que se aplique el cambio.</translation> <translation id="8037887340639533879">No se encontraron actualizaciones de Google Chrome.</translation> <translation id="8129812357326543296">Acerca de &Google Chrome</translation> +<translation id="8183957050892517584">Chromium almacenará de forma segura tus datos personales para que no tengas que volver a escribirlos.</translation> <translation id="8205111949707227942">Opcional: Ayúdanos a mejorar Chrome SO enviando estadísticas de uso e informes sobre fallos automáticamente a Google.</translation> <translation id="8227755444512189073">Google Chrome debe iniciar una aplicación externa para administrar <ph name="SCHEME" /> enlaces. El enlace solicitado es <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome está usando tu cámara y tu micrófono.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb index 8c1798d..32b0f471 100644 --- a/chrome/app/resources/google_chrome_strings_es.xtb +++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Desinstalar de Chrome...</translation> <translation id="7825851276765848807">La instalación no se ha podido realizar a causa de un error no especificado. Vuelve a descargar Google Chrome.</translation> <translation id="7890208801193284374">Si compartes un ordenador, tus amigos y familiares pueden navegar de forma independiente y configurar Chrome a su gusto.</translation> -<translation id="8000275528373650868">Google Chrome está disponible para Windows Vista o Windows XP con SP2 o superior.</translation> <translation id="8005540215158006229">Chrome está casi listo</translation> <translation id="8008534537613507642">Reinstalar Chrome</translation> <translation id="8030318113982266900">Actualizando el canal del dispositivo a <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Después de eliminar tu cuenta de Chrome, es posible que tengas que volver a cargar las pestañas abiertas para que el cambio se aplique.</translation> <translation id="8037887340639533879">No se han encontrado actualizaciones de Google Chrome.</translation> <translation id="8129812357326543296">Información de &Google Chrome</translation> +<translation id="8183957050892517584">Chrome almacenará de forma segura tu información personal, de modo que no tendrás que volver a introducirla.</translation> <translation id="8205111949707227942">Opcional: Ayúdanos a mejorar Chrome OS enviando estadísticas de uso e informes de errores de forma automática.</translation> <translation id="8227755444512189073">Google Chrome debe ejecutar una aplicación externa para admitir enlaces de <ph name="SCHEME" />. El enlace solicitado es <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome está utilizando la cámara y el micrófono.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb index 4ef70ba..b8f1d84 100644 --- a/chrome/app/resources/google_chrome_strings_et.xtb +++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -208,13 +208,13 @@ <translation id="7808348361785373670">Chrome'ist eemaldamine ...</translation> <translation id="7825851276765848807">Installimine nurjus määramata vea tõttu. Laadige Google Chrome uuesti alla.</translation> <translation id="7890208801193284374">Kui jagate oma arvutit, siis saavad sõbrad ja pereliikmed eraldi sirvida ning seadistada Chrome'i just nii, nagu neile meeldib.</translation> -<translation id="8000275528373650868">Google Chrome vajab operatsioonisüsteemi Windows Vista või Windows XP hoolduspaketiga SP2 või uuem.</translation> <translation id="8005540215158006229">Chrome on peaaegu valmis.</translation> <translation id="8008534537613507642">Installi Chrome uuesti</translation> <translation id="8030318113982266900">Seadet värskendatakse kanalile <ph name="CHANNEL_NAME" /> ...</translation> <translation id="8032142183999901390">Pärast konto eemaldamist Chrome'ist tuleb avatud vahekaardid võib-olla uuesti laadida, et need toimiksid.</translation> <translation id="8037887340639533879">Ei leitud Google Chrome'i installi, mida värskendada.</translation> <translation id="8129812357326543296">Teave &Google Chrome'i kohta</translation> +<translation id="8183957050892517584">Chrome salvestab turvaliselt teie isiklikud andmed, et te ei peaks neid uuesti sisestama.</translation> <translation id="8205111949707227942">Valikuline: aidake muuta Chrome OS paremaks, saates Google'ile automaatselt kasutusstatistikat ja kokkujooksuaruandeid.</translation> <translation id="8227755444512189073">Google Chrome peab käivitama välise rakenduse <ph name="SCHEME" /> linkide haldamiseks. Küsitud link on <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome kasutab kaamerat ja mikrofoni.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb index 740627c..8524828 100644 --- a/chrome/app/resources/google_chrome_strings_fa.xtb +++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -205,13 +205,13 @@ <translation id="7808348361785373670">حذف از Chrome...</translation> <translation id="7825851276765848807">بدلیل خطای نامشخص، نصب ناموفق بود. لطفاً دوباره Google Chrome را بارگیری کنید.</translation> <translation id="7890208801193284374">اگر رایانهای را به صورت مشترک استفاده میکنید، دوستان و خانواده میتوانند به صورت جداگانه مرور کنند و Chrome را به صورتی که مایلند تنظیم کنند.</translation> -<translation id="8000275528373650868">Google Chrome به Windows Vista یا Windows XP با SP2 یا بالاتر نیاز دارد.</translation> <translation id="8005540215158006229">Chrome تقریباً آماده است.</translation> <translation id="8008534537613507642">نصب مجدد Chrome</translation> <translation id="8030318113982266900">درحال به روزرسانی دستگاه شما به کانال <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">پس از حذف حسابتان از Chrome، ممکن است لازم باشد برای اعمال تغییرات، برگههای بازتان را تازهسازی کنید.</translation> <translation id="8037887340639533879">هیچ مورد نصب شدهای از Google Chrome برای بهروزرسانی یافت نشد.</translation> <translation id="8129812357326543296">درباره &Google Chrome</translation> +<translation id="8183957050892517584">Chrome بهطور امن جزئیات شخصیتان را ذخیره خواهد کرد، بنابراین نیازی نیست دوباره آنها را تایپ کنید.</translation> <translation id="8205111949707227942">اختیاری: با ارسال خودکار آمار کاربرد و گزارشهای خرابی برنامه به Google، به پیشرفت سیستم عامل Chrome کمک کنید.</translation> <translation id="8227755444512189073">برای کار با پیوندهای <ph name="SCHEME" />، Google Chrome باید برنامه خارجی را راهاندازی کند. پیوند <ph name="PROTOLINK" /> مورد نیاز است.</translation> <translation id="8255190535488645436">Google Chrome درحال استفاده از دوربین و میکروفون شما است.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index 8b37caa..3e4ce2a9 100644 --- a/chrome/app/resources/google_chrome_strings_fi.xtb +++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -205,13 +205,13 @@ <translation id="7808348361785373670">Poista Chromesta…</translation> <translation id="7825851276765848807">Asennus epäonnistui tuntemattoman virheen vuoksi. Lataa Google Chrome uudelleen.</translation> <translation id="7890208801193284374">Jos käytät jaettua tietokonetta, kaverisi ja perheenjäsenesi voivat selata verkkoa omista profiileistaan käsin ja muokata Chromesta juuri itselleen sopivan.</translation> -<translation id="8000275528373650868">Google Chrome edellyttää, että käyttöjärjestelmä on Windows Vista tai Windows XP (SP2 tai uudempi).</translation> <translation id="8005540215158006229">Chrome on melkein valmis.</translation> <translation id="8008534537613507642">Asenna Chrome uudelleen</translation> <translation id="8030318113982266900">Päivitetään laitteeseen kanavaa <ph name="CHANNEL_NAME" />…</translation> <translation id="8032142183999901390">Kun olet poistanut tilisi Chromesta, sinun on ehkä avattava avoinna olleet välilehdet uudelleen, jotta muutos tulee voimaan.</translation> <translation id="8037887340639533879">Päivitettävää Google Chrome -asennusta ei löytynyt.</translation> <translation id="8129812357326543296">Tietoja &Google Chromesta</translation> +<translation id="8183957050892517584">Chrome tallentaa tietosi turvalliseen paikkaan, jottei sinun tarvitse kirjoittaa tietoja uudelleen.</translation> <translation id="8205111949707227942">Valinnainen: lähetä automaattisesti käyttötilastoja ja virheraportteja Googlelle Chrome-käyttöjärjestelmän kehittämiseksi.</translation> <translation id="8227755444512189073">Google Chrome käynnistää ulkopuolisen ohjelman käsitelläkseen <ph name="SCHEME" /> linkkiä. Pyydetty linkki on <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome käyttää kameraasi ja mikrofoniasi.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb index f4c7991..0966244 100644 --- a/chrome/app/resources/google_chrome_strings_fil.xtb +++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -212,7 +212,6 @@ <translation id="7808348361785373670">Alisin sa Chrome...</translation> <translation id="7825851276765848807">Nabigo ang pag-install dahil sa hindi natukoy na error. Paki-download muli ang Google Chrome.</translation> <translation id="7890208801193284374">Kung nagpapahiram ka ng computer, ang mga kaibigan at kapamilya ay maaaring mag-browse nang hiwalay at i-set up ang Chrome sa paraang gusto nila.</translation> -<translation id="8000275528373650868">Kinakailangan ng Google Chrome ang Windows Vista o Windows XP na may SP2 o mas mataas pa.</translation> <translation id="8005540215158006229">Halos handa na ang Chrome.</translation> <translation id="8008534537613507642">Muling i-install ang Chrome</translation> <translation id="8030318113982266900">Ina-update ang iyong device sa <ph name="CHANNEL_NAME" /> na channel...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb index 34b2570..0c1f3626 100644 --- a/chrome/app/resources/google_chrome_strings_fr.xtb +++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Supprimer de Chrome</translation> <translation id="7825851276765848807">Échec de l'installation en raison d'erreurs non spécifiées. Veuillez télécharger Google Chrome à nouveau.</translation> <translation id="7890208801193284374">Si vous partagez un ordinateur avec vos proches, ceux-ci peuvent configurer Chrome comme bon leur semble et naviguer sur le Web à leur manière.</translation> -<translation id="8000275528373650868">Google Chrome requiert Windows Vista ou Windows XP avec SP2 ou une version ultérieure.</translation> <translation id="8005540215158006229">Google Chrome est presque prêt</translation> <translation id="8008534537613507642">Réinstaller Chrome</translation> <translation id="8030318113982266900">Passage de votre appareil à la version <ph name="CHANNEL_NAME" />…</translation> <translation id="8032142183999901390">Une fois votre compte Chrome supprimé, vous devrez peut-être charger de nouveau les onglets ouverts pour que les modifications prennent effet.</translation> <translation id="8037887340639533879">Aucune installation de Google Chrome à mettre à jour.</translation> <translation id="8129812357326543296">À propos de &Google Chrome</translation> +<translation id="8183957050892517584">Chrome va stocker les informations personnelles vous concernant de manière sécurisée. Ainsi, vous n'aurez pas besoin de les saisir à nouveau.</translation> <translation id="8205111949707227942">Facultatif : Aidez-nous à améliorer Google Chrome OS en envoyant automatiquement des statistiques d'utilisation et des rapports d'erreur à Google.</translation> <translation id="8227755444512189073">Chrome va devoir lancer une application tierce pour gérer les liens <ph name="SCHEME" />. Le lien demandé est <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Votre webcam et votre micro sont en cours d'utilisation dans Google Chrome.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb index c4d0e90..cc56635 100644 --- a/chrome/app/resources/google_chrome_strings_gu.xtb +++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Chrome માંથી દૂર કરો...</translation> <translation id="7825851276765848807">અનુલ્લેખિત ભૂલને કારણે ઇન્સ્ટોલેશન નિષ્ફળ રહ્યું. કૃપા કરીને Google Chrome ફરીથી ડાઉનલોડ કરો.</translation> <translation id="7890208801193284374">જો તમે કમ્પ્યુટરને શેર કરો છો, તો મિત્રો અને કુટુંબીજનો અલગ-અલગ બ્રાઉઝ કરી શકે છે અને તેમને જોઈએ તેમ Chrome ને સેટ કરી શકે છે.</translation> -<translation id="8000275528373650868">Google Chrome ને Windows Vista અથવા SP1 વાળા Windows XP અથવા તે પછીનાની આવશ્યકતા છે.</translation> <translation id="8005540215158006229">Chrome લગભગ તૈયાર છે.</translation> <translation id="8008534537613507642">Chrome ફરીથી ઇન્સ્ટોલ કરો</translation> <translation id="8030318113982266900">તમારા ઉપકરણને <ph name="CHANNEL_NAME" /> ચેનલ પર અપડેટ કરી રહ્યાં છે...</translation> <translation id="8032142183999901390">તમારા એકાઉન્ટને Chrome માંથી દૂર કર્યાં પછી, અમલમાં લાવવા માટે તમારે તમારા ખુલ્લા ટેબ્સને ફરીથી લોડ કરવાની જરૂર પડી શકે છે.</translation> <translation id="8037887340639533879">અપડેટ કરવા માટે Google Chrome નું ઇન્સ્ટોલેશન મળ્યું નથી.</translation> <translation id="8129812357326543296">&Google Chrome વિશે</translation> +<translation id="8183957050892517584">Chrome તમારી વ્યક્તિગત માહિતીને સુરક્ષિત રીતે સંગ્રહિત કરશે જેથી તમારે તેમને ફરીથી ટાઇપ કરવાની જરૂર નથી.</translation> <translation id="8205111949707227942">વૈકલ્પિક: ઉપયોગનાં આંકડાઓ અને ક્રેશ રીપોર્ટ્સ આપમેળે Google ને મોકલીને Google Chrome OS ને વધુ સારુ બનાવવમાં સહાય કરો.</translation> <translation id="8227755444512189073">Google Chrome ને <ph name="SCHEME" /> લિંક્સ હેન્ડલ કરવા માટે એક બાહ્ય એપ્લિકેશન શરૂ કરવાની જરૂર છે. જોઈતી લિંક છે, <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome તમારા કેમેરા અને માઇક્રોફોનનો ઉપયોગ કરી રહ્યું છે.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb index f0dc6c81..efa0776 100644 --- a/chrome/app/resources/google_chrome_strings_hi.xtb +++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -206,13 +206,13 @@ <translation id="7808348361785373670">Chrome से निकालें...</translation> <translation id="7825851276765848807">अनिर्दिष्ट त्रुटि के कारण डाउनलोड विफल हुआ. कृपया Google Chrome पुन: डाउनलोड करें.</translation> <translation id="7890208801193284374">यदि आप कंप्यूटर साझा करते हैं, तो मित्र और परिवार अलग-अलग ब्राउज़ कर सकते हैं और Chrome को जैसा चाहें सेट कर सकते हैं.</translation> -<translation id="8000275528373650868">Google Chrome को Windows Vista या SP2 वाले Windows XP या इसके बाद के वर्शन की आवश्यकता है.</translation> <translation id="8005540215158006229">Chrome लगभग तैयार है.</translation> <translation id="8008534537613507642">Chrome फिर से इंस्टॉल करें</translation> <translation id="8030318113982266900">आपके डिवाइस को <ph name="CHANNEL_NAME" /> चैनल पर अपडेट किया जा रहा है...</translation> <translation id="8032142183999901390">Chrome से अपना खाता निकालने के बाद, आपको अपने खुले टैब पुन: लोड करने की आवश्यकता हो सकती है, ताकि वे प्रभावी हो सकें.</translation> <translation id="8037887340639533879">अपडेट करने के लिए Google Chrome का कोई इंस्टॉलेशन नहीं मिला.</translation> <translation id="8129812357326543296">&Google Chrome के बारे में</translation> +<translation id="8183957050892517584">Chrome आपके व्यक्तिगत विवरण को सुरक्षित रूप से संग्रहीत करेगा, इसलिए आपको इन्हें पुनः लिखने की आवश्यकता नहीं है.</translation> <translation id="8205111949707227942">वैकल्पिक: अपने आप उपयोग के आंकड़े और क्रैश रिपोर्ट भेजकर Chrome OS को बेहतर बनाने में सहायता करें.</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> लिंक प्रबंधित करने के लिए Google Chrome को एक बाहरी ऐप्स लॉन्च करने की आवश्यकता होती है. अनुरोध की गई लिंक <ph name="PROTOLINK" /> है</translation> <translation id="8255190535488645436">Google Chrome आपके कैमरे और माइक्रोफ़ोन का उपयोग कर रहा है.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb index 41be641..0676163 100644 --- a/chrome/app/resources/google_chrome_strings_hr.xtb +++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Ukloni iz Chromea...</translation> <translation id="7825851276765848807">Instalacija nije uspjela zbog neodređene pogreške. Ponovo preuzmite Google Chrome.</translation> <translation id="7890208801193284374">Ako dijelite računalo, prijatelji i članovi obitelji mogu zasebno pregledavati i postaviti Chrome prema svojim željama.</translation> -<translation id="8000275528373650868">Google Chrome zahtijeva sustav Windows Vista ili Windows XP sa SP2 ili novijim.</translation> <translation id="8005540215158006229">Chrome je skoro spreman.</translation> <translation id="8008534537613507642">Ponovo instaliraj Chrome</translation> <translation id="8030318113982266900">Ažuriranje vašeg uređaja na kanal <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Nakon uklanjanja računa s Chromea možda ćete morati ponovo učitati otvorene kartice kako bi nastupile promjene.</translation> <translation id="8037887340639533879">Nije pronađena nijedna instalacija Google Chromea za ažuriranje.</translation> <translation id="8129812357326543296">O programu Google Chrome</translation> +<translation id="8183957050892517584">Chrome će pohraniti vaše osobne podatke na siguran način tako da ih ne morate ponovo upisivati.</translation> <translation id="8205111949707227942">Dodatno: Pomozite nam da poboljšamo OS Chrome automatskim slanjem statistike o upotrebi i izvješća o padu sustava Googleu.</translation> <translation id="8227755444512189073">Google Chrome treba pokrenuti vanjsku aplikaciju da bi mogao koristiti veze <ph name="SCHEME" />. Zatražena je veza <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome upotrebljava vašu kameru i mikrofon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index 48491422..99a6328 100644 --- a/chrome/app/resources/google_chrome_strings_hu.xtb +++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Eltávolítás a Chrome-ból…</translation> <translation id="7825851276765848807">A telepítés egy meg nem határozott hiba miatt nem sikerült. Kérjük, töltse le újra a Google Chrome-ot.</translation> <translation id="7890208801193284374">Ha megoszt egy számítógépet, ismerősei és családtagjai külön fiókokban internetezve a saját kívánságaik szerint állíthatják be a Chrome-ot.</translation> -<translation id="8000275528373650868">A Google Chrome futtatásához Windows Vista, illetve Windows XP SP2 vagy újabb verzió szükséges.</translation> <translation id="8005540215158006229">A Chrome majdnem készen áll.</translation> <translation id="8008534537613507642">A Chrome újratelepítése</translation> <translation id="8030318113982266900">Eszköz frissítése a(z) <ph name="CHANNEL_NAME" /> csatornára...</translation> <translation id="8032142183999901390">Fiókjának eltávolítása után a Chrome-ból előfordulhat, hogy újra kell töltenie a megnyitott lapokat ahhoz, hogy a változások életbe lépjenek.</translation> <translation id="8037887340639533879">Nem található frissíthető Google Chrome-telepítés.</translation> <translation id="8129812357326543296">A &Google Chrome névjegye</translation> +<translation id="8183957050892517584">A Chrome biztonságosan tárolja a személyes adatait, így nem kell újra begépelnie őket.</translation> <translation id="8205111949707227942">Opcionális: Segítse a Chrome OS fejlesztését azzal, hogy automatikusan elküldi a használati statisztikákat és hibajelentéseket a Google részére</translation> <translation id="8227755444512189073">A Google Chrome-nak el kell indítania egy külső alkalmazást a(z) <ph name="SCHEME" /> linkekhez. A kért link: <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">A Google Chrome használja a kamerát és a mikrofont.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb index 72454100..258a242f 100644 --- a/chrome/app/resources/google_chrome_strings_id.xtb +++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Hapus dari Chrome...</translation> <translation id="7825851276765848807">Pemasangan gagal karena kesalahan yang tidak ditentukan. Silakan unduh Google Chrome lagi.</translation> <translation id="7890208801193284374">Jika Anda berbagi komputer, teman dan keluarga bisa menjelajah secara terpisah dan menyiapkan Chrome sesuai keinginannya.</translation> -<translation id="8000275528373650868">Google Chrome memerlukan Windows Vista atau Windows XP dengan SP2 atau yang lebih baru.</translation> <translation id="8005540215158006229">Chrome hampir siap.</translation> <translation id="8008534537613507642">Pasang Ulang Chrome</translation> <translation id="8030318113982266900">Memperbarui perangkat Anda ke saluran <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Setelah membuang akun dari Chrome, Anda mungkin perlu memuat ulang tab terbuka untuk menerapkannya.</translation> <translation id="8037887340639533879">Tidak ditemukan pemasangan Google Chrome untuk diperbarui.</translation> <translation id="8129812357326543296">Tentang &Google Chrome</translation> +<translation id="8183957050892517584">Chrome akan meyimpan detail pribadi Anda secara aman sehingga Anda tidak perlu mengetiknya lagi.</translation> <translation id="8205111949707227942">Opsional: Bantu kami membuat Chrome OS lebih baik dengan mengirim statistik penggunaan dan laporan kerusakan ke Google secara otomatis.</translation> <translation id="8227755444512189073">Google Chrome harus menjalankan aplikasi eksternal untuk menangani link <ph name="SCHEME" />. Link yang diminta adalah <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome menggunakan kamera dan mikrofon Anda.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb index 26ce9a52..f4916fe 100644 --- a/chrome/app/resources/google_chrome_strings_it.xtb +++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -204,7 +204,6 @@ <translation id="7808348361785373670">Rimuovi da Chrome...</translation> <translation id="7825851276765848807">Installazione non riuscita a causa di un errore non specificato. Scarica nuovamente Google Chrome.</translation> <translation id="7890208801193284374">Se condividi un computer, i tuoi amici e la tua famiglia possono navigare separatamente e configurare Chrome in base alle proprie esigenze.</translation> -<translation id="8000275528373650868">Google Chrome richiede Windows Vista o Windows XP con SP2 o versioni successive.</translation> <translation id="8005540215158006229">Chrome è quasi pronto.</translation> <translation id="8008534537613507642">Reinstalla Chrome</translation> <translation id="8030318113982266900">Aggiornamento del dispositivo al canale <ph name="CHANNEL_NAME" />...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index 0ab99c0..a62bc52 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">הסר מ-Chrome...</translation> <translation id="7825851276765848807">ההתקנה נכשלה בשל שגיאה לא מזוהה. הורד שוב את Google Chrome.</translation> <translation id="7890208801193284374">אם אתה משתף מחשב, חברים ובני משפחה יכולים לגלוש בנפרד ולהגדיר את Chrome בדיוק כפי שהם רוצים.</translation> -<translation id="8000275528373650868">להפעלת Google Chrome יש להשתמש במערכת ההפעלה Windows Vista או Windows XP עם SP2 ואילך.</translation> <translation id="8005540215158006229">Chrome כמעט מוכן.</translation> <translation id="8008534537613507642">התקן מחדש את Chrome</translation> <translation id="8030318113982266900">מעדכן את המכשיר שלך לערוץ <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">לאחר הסרת החשבון שלך מ-Chrome, ייתכן שתידרש לטעון מחדש את הכרטיסיות הפתוחות שלך כדי שההסרה תיושם בפועל.</translation> <translation id="8037887340639533879">לא נמצאה התקנה של Google Chrome שיש לעדכן.</translation> <translation id="8129812357326543296">מידע על Google Chrome&</translation> +<translation id="8183957050892517584">Chrome יאחסן את הפרטים האישיים שלך באופן מאובטח כך שלא תידרש להקליד אותם שוב.</translation> <translation id="8205111949707227942">אופציונלי: עזור לנו לשפר את Chrome OS על ידי שליחת נתוני שימוש ודוחות קריסה אל Google באופן אוטומטי.</translation> <translation id="8227755444512189073">Google Chrome חייב לבצע יישום חיצוני על מנת לנהל <ph name="SCHEME" /> קישורים הקישור המבוקש הוא <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome משתמש במצלמה ובמיקרופון שלך.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb index c2921b8..0b4957d 100644 --- a/chrome/app/resources/google_chrome_strings_ja.xtb +++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Chrome から削除...</translation> <translation id="7825851276765848807">原因不明のエラーによりインストールに失敗しました。Google Chrome をもう一度ダウンロードしてください。</translation> <translation id="7890208801193284374">パソコンを共有している場合、友だちや家族はそれぞれ Chrome を自分専用のブラウザとして自分用の設定をして使うことができます。</translation> -<translation id="8000275528373650868">Google Chrome のご利用には Windows Vista または Windows XP SP2 以降が必要です。</translation> <translation id="8005540215158006229">Chrome はすぐに利用できるようになります。</translation> <translation id="8008534537613507642">Chrome を再インストール</translation> <translation id="8030318113982266900">デバイスを <ph name="CHANNEL_NAME" /> チャンネルに更新しています...</translation> <translation id="8032142183999901390">Chrome からアカウントを削除したら、場合によっては開いているタブを再読み込みして変更を反映させる必要があります。</translation> <translation id="8037887340639533879">更新対象の Google Chrome のインストールは見つかりませんでした。</translation> <translation id="8129812357326543296">Google Chrome について(&G)</translation> +<translation id="8183957050892517584">Chrome でユーザーの情報が安全に保存されるので、再度入力する必要がなくなります。</translation> <translation id="8205111949707227942">オプション: 使用状況データと障害レポートを Google に自動送信して Chrome OS の機能向上に役立てる。</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> リンクを処理するには外部アプリケーションの起動が必要です。リクエストされたリンクは <ph name="PROTOLINK" /> です。</translation> <translation id="8255190535488645436">Google Chrome がカメラとマイクを使用しています。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb index 81279ef..83dd5c9 100644 --- a/chrome/app/resources/google_chrome_strings_kn.xtb +++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -206,13 +206,13 @@ <translation id="7808348361785373670">Chrome ನಿಂದ ತೆಗೆದುಹಾಕು...</translation> <translation id="7825851276765848807">ಅನಿರ್ದಿಷ್ಟ ದೋಷದಿಂದಾಗಿ ಸ್ಥಾಪನೆ ವಿಫಲವಾಗಿದೆ. ದಯವಿಟ್ಟು ಮತ್ತೊಮ್ಮೆ Google Chrome ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ.</translation> <translation id="7890208801193284374">ನೀವು ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಹಂಚಿಕೊಂಡರೆ, ಸ್ನೇಹಿತರು ಮತ್ತು ಕುಟುಂಬದವರು ಪ್ರತ್ಯೇಕವಾಗಿ ಬ್ರೌಸ್ ಮಾಡಬಹುದು ಮತ್ತು Chrome ಅನ್ನು ಅವರ ಅಗತ್ಯಕ್ಕೆ ತಕ್ಕಂತೆ ಹೊಂದಿಸಿಕೊಳ್ಳಬಹುದು.</translation> -<translation id="8000275528373650868">Google Chrome ಗೆ Windows Vista ಅಥವಾ Windows XP with SP2 ಅಥವಾ ಹೆಚ್ಚಿನದರ ಅಗತ್ಯವಿರುತ್ತದೆ.</translation> <translation id="8005540215158006229">Chrome ಬಹುತೇಕ ಸಿದ್ಧಗೊಂಡಿದೆ.</translation> <translation id="8008534537613507642">Chrome ಅನ್ನು ಮರು ಸ್ಥಾಪಿಸು</translation> <translation id="8030318113982266900">ನಿಮ್ಮ ಸಾಧನವನ್ನು <ph name="CHANNEL_NAME" /> ಚಾನಲ್ಗೆ ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="8032142183999901390">Chrome ನಿಂದ ನಿಮ್ಮ ಖಾತೆಯನ್ನು ತೆಗೆದುಹಾಕಿದ ನಂತರ, ಪರಿಣಾಮಕಾರಿಯಾಗಲು ನಿಮ್ಮ ತೆರೆದ ಟ್ಯಾಬ್ಗಳನ್ನು ನೀವು ಮರುಲೋಡ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ.</translation> <translation id="8037887340639533879">ನವೀಕರಿಸಲು Google Chrome ನ ಯಾವುದೇ ಸ್ಥಾಪನೆಯು ಕಂಡುಬಂದಿಲ್ಲ.</translation> <translation id="8129812357326543296">&Google Chrome ಕುರಿತು</translation> +<translation id="8183957050892517584">Chrome ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ವಿವರಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಸಂಗ್ರಹಿಸಿಕೊಳ್ಳುತ್ತದೆ ಇದರಿಂದಾಗಿ ನೀವು ಅವುಗಳನ್ನು ಮತ್ತೆ ಟೈಪ್ ಮಾಡಬೇಕಾಗಿಲ್ಲ.</translation> <translation id="8205111949707227942">ಐಚ್ಚಿಕ: Google ಗೆ ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳು ಮತ್ತು ಕ್ರ್ಯಾಷ್ ವರದಿಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಕಳುಹಿಸುವ ಮೂಲಕ Chrome OS ಅನ್ನು ಇನ್ನಷ್ಟು ಉತ್ತಮಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡಿ.</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> ಲಿಂಕ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು Google Chrome ಬಾಹ್ಯ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವುದು ಅವಶ್ಯಕವಾಗಿದೆ. ವಿನಂತಿಸಿದ ಲಿಂಕ್<ph name="PROTOLINK" /> ಆಗಿದೆ.</translation> <translation id="8255190535488645436">Google Chrome ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ko.xtb b/chrome/app/resources/google_chrome_strings_ko.xtb index eb31a7f..232186f 100644 --- a/chrome/app/resources/google_chrome_strings_ko.xtb +++ b/chrome/app/resources/google_chrome_strings_ko.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Chrome에서 삭제...</translation> <translation id="7825851276765848807">알 수 없는 오류로 인해 설치에 실패했습니다. Chrome을 다시 다운로드하세요.</translation> <translation id="7890208801193284374">컴퓨터를 공유하는 경우 친구와 가족이 개별적으로 탐색하고 원하는 대로 Chrome을 설정할 수 있습니다.</translation> -<translation id="8000275528373650868">Chrome은 Windows Vista 또는 Windows XP 서비스 팩 2 이상이 설치된 컴퓨터에서 사용하실 수 있습니다.</translation> <translation id="8005540215158006229">Chrome을 사용할 준비가 되었습니다.</translation> <translation id="8008534537613507642">Chrome 재설치</translation> <translation id="8030318113982266900">기기를 <ph name="CHANNEL_NAME" /> 채널로 업데이트하는 중...</translation> <translation id="8032142183999901390">Chrome에서 계정을 삭제한 후 열려 있는 탭을 새로고침해야 적용됩니다.</translation> <translation id="8037887340639533879">업데이트할 Chrome 설치가 없습니다.</translation> <translation id="8129812357326543296">Chrome 정보(&G)</translation> +<translation id="8183957050892517584">Chrome은 개인정보를 안전하게 저장하므로 정보를 다시 입력할 필요가 없습니다.</translation> <translation id="8205111949707227942" /> <translation id="8227755444512189073"><ph name="SCHEME" />SCHEME링크 처리를 위해 Chrome에서 외부 응용 프로그램을 실행해야 합니다. 요청 링크는PROTOLINK입니다 <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Chrome에서 카메라와 마이크를 사용 중입니다.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb index 49790b5..31d1284d 100644 --- a/chrome/app/resources/google_chrome_strings_lt.xtb +++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -213,13 +213,13 @@ <translation id="7808348361785373670">Pašalinti iš „Chrome“...</translation> <translation id="7825851276765848807">Nepavyko įdiegti dėl nenustatytos klaidos. Atsisiųskite „Google Chrome“ dar kartą.</translation> <translation id="7890208801193284374">Jei bendrinate kompiuterį, šeimos nariai ir draugai gali naršyti atskirai ir nustatyti „Chrome“ pagal savo poreikius.</translation> -<translation id="8000275528373650868">„Google Chrome“ reikalinga „Windows Vista“ arba „Windows XP“ operacinė sistema su SP2 arba naujesniu pakeitimų paketu.</translation> <translation id="8005540215158006229">„Chrome“ beveik paruošta.</translation> <translation id="8008534537613507642">Iš naujo įdiegti „Chrome“</translation> <translation id="8030318113982266900">Atnaujinamas įrenginys į „<ph name="CHANNEL_NAME" />“ kanalą...</translation> <translation id="8032142183999901390">Pašalinus paskyrą iš „Chrome“, galbūt reikės iš naujo įkelti skirtukus, kad pakeitimai įsigaliotų.</translation> <translation id="8037887340639533879">Nerasta jokių „Google Chrome“ įdiegčių, kurias būtų galima atnaujinti.</translation> <translation id="8129812357326543296">Apie „&Google Chrome“</translation> +<translation id="8183957050892517584">„Chrome“ patikimai saugos jūsų išsamią informaciją, kad nebereikėtų jos vėl įvesti.</translation> <translation id="8205111949707227942">Pasirenkama: padėkite tobulinti „Chrome“ OS automatiškai siųsdami „Google“ naudojimo statistiką ir strigčių ataskaitas.</translation> <translation id="8227755444512189073">„Google Chrome“ turi paleisti išorinę taikomąją programą <ph name="SCHEME" /> nuorodoms valdyti. Prašyta nuoroda: <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">„Google Chrome“ naudoja jūsų fotoaparatą ir mikrofoną.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb index 02c8328a..a5e713c 100644 --- a/chrome/app/resources/google_chrome_strings_lv.xtb +++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -208,13 +208,13 @@ <translation id="7808348361785373670">Noņemšana no pārlūka Chrome...</translation> <translation id="7825851276765848807">Instalēšana neizdevās nenoteiktas kļūdas dēļ. Lūdzu, lejupielādējiet pārlūkprogrammu Google Chrome vēlreiz.</translation> <translation id="7890208801193284374">Ja jūsu datoru izmanto arī jūsu draugi un ģimenes locekļi, viņi var iestatīt pārlūku Chrome atbilstoši savām vēlmēm un pārlūkot saturu atsevišķos kontos.</translation> -<translation id="8000275528373650868">Pārlūkprogrammas Google Chrome izmantošanai nepieciešama operētājsistēma Windows Vista vai Windows XP ar SP2, vai jaunāka tās versija.</translation> <translation id="8005540215158006229">Chrome ir gandrīz gatavs.</translation> <translation id="8008534537613507642">Pārinstalēt Chrome</translation> <translation id="8030318113982266900">Notiek ierīces atjaunināšana uz kanālu <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Kad konts būs noņemts no Chrome, iespējams, būs atkārtoti jāielādē atvērtās cilnes, lai izmaiņas stātos spēkā.</translation> <translation id="8037887340639533879">Netika atrasta neviena Google Chrome instalācija, kuru varētu atjaunināt.</translation> <translation id="8129812357326543296">Par &Google Chrome</translation> +<translation id="8183957050892517584">Chrome droši saglabās jūsu privāto informāciju, lai tā vairs nebūtu atkārtoti jāievada.</translation> <translation id="8205111949707227942">Neobligāti: palīdziet uzlabot Chrome OS, automātiski nosūtot uzņēmumam Google lietošanas statistiku un avārijas pārskatus.</translation> <translation id="8227755444512189073">Google Chrome nepieciešams ieslēgt ārēju lietojumprogrammu, lai regulētu <ph name="SCHEME" /> saites. Pieprasītā saite ir <ph name="PROTOLINK" /></translation> <translation id="8255190535488645436">Pārlūkā Google Chrome tiek izmantota kamera un mikrofons.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb index a990c6d7..2651099 100644 --- a/chrome/app/resources/google_chrome_strings_ml.xtb +++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Chrome-ൽ നിന്ന് നീക്കംചെയ്യുക...</translation> <translation id="7825851276765848807">വ്യക്തമല്ലാത്ത പിശക് കാരണം ഇന്സ്റ്റാളേഷന് പരാജയപ്പെട്ടു. ദയവായി Google Chrome വീണ്ടും ഡൗൺലോഡ് ചെയ്യുക.</translation> <translation id="7890208801193284374">നിങ്ങളൊരു കമ്പ്യൂട്ടർ പങ്കിടുകയാണെങ്കിൽ, സുഹൃത്തുക്കൾക്കും കുടുബാംഗങ്ങൾക്കും വെവ്വേറെ ബ്രൗസുചെയ്യാനും അവർക്കാവശ്യമുള്ള രീതിയിൽ Chrome സജ്ജമാക്കാനുമാകും.</translation> -<translation id="8000275528373650868">Google Chrome ന് Windows Vista അല്ലെങ്കില് Windows XP with SP2 അല്ലെങ്കില് അതിലും ഉയര്ന്നത് ആവശ്യമാണ്.</translation> <translation id="8005540215158006229">Chrome മിക്കവാറും തയാറായിക്കഴിഞ്ഞു.</translation> <translation id="8008534537613507642">Chrome വീണ്ടും ഇൻസ്റ്റാളുചെയ്യുക</translation> <translation id="8030318113982266900">നിങ്ങളുടെ ഉപകരണം <ph name="CHANNEL_NAME" /> ചാനലിലേയ്ക്ക് അപ്ഡേറ്റുചെയ്യുന്നു...</translation> <translation id="8032142183999901390">Chrome-ൽ നിന്ന് നിങ്ങളുടെ അക്കൗണ്ട് നീക്കംചെയ്തുകഴിഞ്ഞാൽ, അത് പ്രാബല്യത്തിൽ വരുന്നതിന് ഓപ്പൺ ടാബുകൾ വീണ്ടും ലോഡുചെയ്യേണ്ടി വന്നേക്കാം.</translation> <translation id="8037887340639533879">അപ്ഡേറ്റുചെയ്യുന്നതിന് Google Chrome-ന്റെ ഇൻസ്റ്റാളേഷനൊന്നും കണ്ടെത്തിയില്ല.</translation> <translation id="8129812357326543296">&Google Chrome-നെക്കുറിച്ച്</translation> +<translation id="8183957050892517584">Chrome നിങ്ങളുടെ വ്യക്തിപരമായ വിശദാംശങ്ങൾ സുരക്ഷിതമായി സൂക്ഷിക്കുന്നതിനാൽ അവ വീണ്ടും ടൈപ്പുചെയ്യേണ്ടതില്ല.</translation> <translation id="8205111949707227942">ഓപ്ഷണല്: Google ലേക്ക് ഉപയോഗ നിലയും ക്രാഷ് റിപ്പോര്ട്ടുകളും സ്വപ്രേരിതമായി അയച്ചുകൊണ്ട് Chrome OS മെച്ചപ്പെടുത്താന് സഹായിക്കുക.</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> ലിങ്കുകള് കൈകാര്യം ചെയ്യുന്നതിനായി Google Chrome ന് ഒരു ബാഹ്യ അപ്ലിക്കേഷന് സമാരംഭിക്കേണ്ട ആവശ്യമുണ്ട്. ലിങ്ക് അഭ്യര്ത്ഥിച്ചത് <ph name="PROTOLINK" /> ആകുന്നു.</translation> <translation id="8255190535488645436">Google Chrome നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കുന്നു.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index e5bfceb..61a0463a 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -210,7 +210,6 @@ <translation id="7808348361785373670">Chrome मधून काढा...</translation> <translation id="7825851276765848807">अनिर्दिष्ट त्रुटीमुळे स्थापना अयशस्वी. कृपया Google Chrome पुन्हा डाउनलोड करा.</translation> <translation id="7890208801193284374">आपण संगणक सामायिक केल्यास, मित्र आणि कुटुंब स्वतंत्रपणे ब्राउझ करू शकतात आणि त्यांना पाहिजे तसे Chrome सेट अप करू शकतात.</translation> -<translation id="8000275528373650868">Google Chrome साठी SP2 किंवा त्यापेक्षा उच्च आवृत्ती सह Windows Vista किंवा Windows XP आवश्यक आहे.</translation> <translation id="8005540215158006229">Chrome जवळजवळ तयार आहे.</translation> <translation id="8008534537613507642">Chrome पुनर्स्थापित करा</translation> <translation id="8030318113982266900"><ph name="CHANNEL_NAME" /> चॅनेलवर आपले डिव्हाइस अद्यतनित करत आहे...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb index 63f7963..abe955b 100644 --- a/chrome/app/resources/google_chrome_strings_ms.xtb +++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -204,7 +204,6 @@ <translation id="7808348361785373670">Alih keluar daripada Chrome...</translation> <translation id="7825851276765848807">Gagal pemasangan disebabkan ralat yang tidak dinyatakan. Sila muat turun semula Google Chrome.</translation> <translation id="7890208801193284374">Jika anda berkongsi komputer, rakan dan keluarga boleh menyemak imbas secara berasingan dan menyediakan Chrome sebagaimana yang mereka mahukan.</translation> -<translation id="8000275528373650868">Google Chrome memerlukan Windows Vista atau Windows XP dengan SP2 atau lebih tinggi.</translation> <translation id="8005540215158006229">Chrome hampir sedia.</translation> <translation id="8008534537613507642">Pasang Semula Chrome</translation> <translation id="8030318113982266900">Mengemas kini peranti anda kepada saluran <ph name="CHANNEL_NAME" />...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb index 5f34697..bb60a41d 100644 --- a/chrome/app/resources/google_chrome_strings_nl.xtb +++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -210,13 +210,13 @@ <translation id="7808348361785373670">Verwijderen uit Chrome…</translation> <translation id="7825851276765848807">De installatie is mislukt vanwege een onbekende fout. Download Google Chrome opnieuw.</translation> <translation id="7890208801193284374">Als je een computer deelt, kunnen vrienden en familie afzonderlijk surfen en Chrome configureren zoals zij dat willen.</translation> -<translation id="8000275528373650868">Voor Google Chrome is Windows Vista of Windows XP met SP2 of hoger vereist.</translation> <translation id="8005540215158006229">Chrome is bijna klaar.</translation> <translation id="8008534537613507642">Chrome opnieuw installeren</translation> <translation id="8030318113982266900">Je apparaat bijwerken naar <ph name="CHANNEL_NAME" /> kanaal...</translation> <translation id="8032142183999901390">Nadat je je account uit Chrome hebt verwijderd, moet je je geopende tabbladen mogelijk opnieuw laden om de wijzigingen door te voeren.</translation> <translation id="8037887340639533879">Geen installatie van Google Chrome gevonden om te updaten.</translation> <translation id="8129812357326543296">Over &Google Chrome</translation> +<translation id="8183957050892517584">Chrome slaat je persoonlijke gegevens veilig op, zodat je ze niet opnieuw hoeft op te geven.</translation> <translation id="8205111949707227942">Optioneel: help Chrome OS beter te maken door Google automatisch gebruiksstatistieken en crashmeldingen te sturen.</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> De opgevraagde link is <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome gebruikt je camera en microfoon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb index 3326bbb..a7dc675 100644 --- a/chrome/app/resources/google_chrome_strings_no.xtb +++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Fjern fra Chrome</translation> <translation id="7825851276765848807">Installeringen mislyktes på grunn av en uspesifisert feil. Last ned Google Chrome på nytt.</translation> <translation id="7890208801193284374">Hvis du deler en datamaskin med andre, kan venner og familie surfe hver for seg og konfigurere Chrome akkurat slik de vil.</translation> -<translation id="8000275528373650868">Google Chrome krever Windows Vista eller Windows XP med SP2 eller nyere.</translation> <translation id="8005540215158006229">Chrome er nesten klar.</translation> <translation id="8008534537613507642">Installer Chrome på nytt</translation> <translation id="8030318113982266900">Oppdaterer enheten din til <ph name="CHANNEL_NAME" />-kanalen ...</translation> <translation id="8032142183999901390">Når du har fjernet kontoen din fra Chrome, kan det hende at du må laste inn de åpne fanene på nytt før endringene trer i kraft.</translation> <translation id="8037887340639533879">Finner ingen installasjon av Google Chrome å oppdatere.</translation> <translation id="8129812357326543296">Om &Google Chrome</translation> +<translation id="8183957050892517584">Chrome lagrer personopplysningene dine sikkert, slik at du slipper å skrive dem inn på nytt.</translation> <translation id="8205111949707227942">Valgfritt: Bidra til å gjøre Chrome OS bedre ved å sende brukerstatistikk og krasjrapporter automatisk til Google.</translation> <translation id="8227755444512189073">Google Chrome må starte et eksternt program for å behandle <ph name="SCHEME" />-linker. Den forespurte linken er <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome bruker kameraet og mikrofonen din.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb index 47a17ecf..8161e75 100644 --- a/chrome/app/resources/google_chrome_strings_pl.xtb +++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -205,13 +205,13 @@ <translation id="7808348361785373670">Usuń z Chrome...</translation> <translation id="7825851276765848807">Instalacja nie powiodła się z powodu nieokreślonego błędu. Pobierz Google Chrome ponownie.</translation> <translation id="7890208801193284374">Jeśli dzielisz komputer ze znajomymi lub rodziną, wszyscy możecie niezależnie przeglądać internet i po swojemu skonfigurować Chrome.</translation> -<translation id="8000275528373650868">Google Chrome wymaga systemu Windows Vista bądź Windows XP z dodatkiem SP2 lub nowszym.</translation> <translation id="8005540215158006229">Chrome jest już prawie gotowy.</translation> <translation id="8008534537613507642">Ponownie zainstaluj Chrome</translation> <translation id="8030318113982266900">Aktualizuję Twoje urządzenie do kanału: <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Aby po usunięciu konta z Chrome zmiany zostały zastosowane, może być konieczne ponowne załadowanie otwartych kart.</translation> <translation id="8037887340639533879">Nie znaleziono instalacji Google Chrome do zaktualizowania.</translation> <translation id="8129812357326543296">&Google Chrome – informacje</translation> +<translation id="8183957050892517584">Chrome będzie bezpiecznie przechowywać Twoje dane, dzięki czemu nie będzie trzeba wpisywać ich ponownie.</translation> <translation id="8205111949707227942">Opcjonalnie: pomóż nam udoskonalać system operacyjny Chrome poprzez automatyczne wysyłanie do Google statystyk użytkowania i raportów o awariach.</translation> <translation id="8227755444512189073">Chrome musi uruchomić zewnętrzną aplikację do obsługi linków <ph name="SCHEME" />. Żądany link to <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome używa Twojej kamery i mikrofonu.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index ce60cb8..67349db 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -205,13 +205,13 @@ <translation id="7808348361785373670">Remover do Chrome</translation> <translation id="7825851276765848807">Houve uma falha na instalação devido a um erro não-especificado. Faça o download do Google Chrome novamente.</translation> <translation id="7890208801193284374">Se você usa um computador compartilhado, seus amigos e familiares podem navegar separadamente e configurar o Google Chrome da maneira que desejarem.</translation> -<translation id="8000275528373650868">O Google Chrome requer o Windows Vista ou o Windows XP com SP2 ou superior.</translation> <translation id="8005540215158006229">O Google Chrome está quase pronto.</translation> <translation id="8008534537613507642">Reinstalar o Google Chrome</translation> <translation id="8030318113982266900">Atualizando seu dispositivo para o canal <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Depois de remover sua conta do Google Chrome, pode ser necessário recarregar as guias abertas para que a alteração entre em vigor.</translation> <translation id="8037887340639533879">Nenhuma instalação do Google Chrome foi encontrada para atualização.</translation> <translation id="8129812357326543296">Sobre o Google Chrome</translation> +<translation id="8183957050892517584">O Chrome armazenará seus dados pessoais com segurança para que não seja necessário digitá-los novamente.</translation> <translation id="8205111949707227942">Opcional: ajude a melhorar este sistema operacional enviando-nos estatísticas de uso e relatórios de erros.</translation> <translation id="8227755444512189073">O Google Chrome precisa iniciar um aplicativo externo para lidar com os links <ph name="SCHEME" />. O link solicitado é <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">O Google Chrome está usando sua câmera e seu microfone.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb index b4319da..57f0d3f 100644 --- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Remover do Chrome...</translation> <translation id="7825851276765848807">Ocorreu uma falha na instalação devido a um erro não especificado. Transfira novamente o Google Chrome.</translation> <translation id="7890208801193284374">Se partilhar um computador, os amigos e os familiares podem navegar separadamente e configurar o Chrome da forma que quiserem.</translation> -<translation id="8000275528373650868">O Google Chrome requer o Windows Vista ou o Windows XP com SP2 ou superior.</translation> <translation id="8005540215158006229">O Chrome está quase pronto.</translation> <translation id="8008534537613507642">Reinstalar Chrome</translation> <translation id="8030318113982266900">A atualizar o dispositivo para o canal <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Depois de remover a sua conta do Chrome, poderá ter de recarregar os separadores abertos para que a alteração tenha efeito.</translation> <translation id="8037887340639533879">Não foi encontrada qualquer instalação do Google Chrome para atualização.</translation> <translation id="8129812357326543296">Acerca do &Google Chrome</translation> +<translation id="8183957050892517584">O Chrome armazena os seus detalhes pessoais em segurança para que não tenha de os introduzir novamente.</translation> <translation id="8205111949707227942">Opcional: Ajude a melhorar o Chrome OS ao enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google.</translation> <translation id="8227755444512189073">O Google Chrome precisa de executar uma aplicação externa para processar links <ph name="SCHEME" />. O link solicitado é <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">O Google Chrome está a utilizar a câmara e o microfone.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index 1773ec4..71cff1d 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Elimină din Chrome...</translation> <translation id="7825851276765848807">Instalarea nu a reușit din cauza unei erori neprecizate. Descarci Google Chrome din nou.</translation> <translation id="7890208801193284374">Dacă permiteți accesul la un computer, familia și prietenii pot să navigheze separat și să configureze Chrome cum doresc.</translation> -<translation id="8000275528373650868">Google Chrome necesită Windows Vista sau Windows XP cu SP2 sau o versiune ulterioară.</translation> <translation id="8005540215158006229">Chrome este aproape pregătit.</translation> <translation id="8008534537613507642">Reinstalați Chrome</translation> <translation id="8030318113982266900">Se actualizează dispozitivul pentru canalul <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">După eliminarea contului din Chrome, poate fi necesar să reîncărcați filele deschise pentru ca schimbarea să se aplice.</translation> <translation id="8037887340639533879">Nu s-a găsit nicio versiune instalată de Google Chrome pentru a fi actualizată.</translation> <translation id="8129812357326543296">Despre &Google Chrome</translation> +<translation id="8183957050892517584">Chrome va stoca în siguranță detaliile personale, pentru a nu fi necesar să le introduci din nou.</translation> <translation id="8205111949707227942">Opțional: ajută-ne să îmbunătățim sistemul de operare Chrome prin trimiterea automată de statistici de utilizare și rapoarte de blocare către Google.</translation> <translation id="8227755444512189073">Google Chrome necesită lansarea unei aplicații externe pentru a gestiona linkuri <ph name="SCHEME" />. Linkul solicitat este <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome utilizează camera foto și microfonul.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index 6650b222..70fad62b 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -204,7 +204,6 @@ <translation id="7808348361785373670">Удалить из Chrome</translation> <translation id="7825851276765848807">Не удалось выполнить установку из-за неизвестной ошибки. Скачайте Google Chrome ещё раз.</translation> <translation id="7890208801193284374">Если, кроме вас, компьютером пользуется кто-то ещё, например родные или друзья, они тоже смогут настроить Chrome на свой вкус.</translation> -<translation id="8000275528373650868">Для работы браузера Google Chrome требуется наличие ОС Windows Vista или Windows XP с пакетом обновления 2 (SP1) либо более поздней версии.</translation> <translation id="8005540215158006229">Chrome почти готов к работе.</translation> <translation id="8008534537613507642">Переустановить Chrome</translation> <translation id="8030318113982266900">Переключение устройства на канал <ph name="CHANNEL_NAME" />...</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index ff5905d..9e162b463 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -210,13 +210,13 @@ <translation id="7808348361785373670">Odstrániť z prehliadača Chrome...</translation> <translation id="7825851276765848807">Inštalácia zlyhala kvôli neznámej chybe. Skúste aplikáciu Google Chrome stiahnuť znova.</translation> <translation id="7890208801193284374">Ak počítač zdieľate s rodinou a priateľmi, môžu v prehliadači Chrome prehliadať oddelene a tiež si ho nastaviť podľa vlastných požiadaviek.</translation> -<translation id="8000275528373650868">Prehliadač Google Chrome vyžaduje systém Windows Vista alebo Windows XP s balíkom SP2 alebo vyšším.</translation> <translation id="8005540215158006229">Prehliadač Chrome je takmer pripravený.</translation> <translation id="8008534537613507642">Preinštalovať prehliadač Chrome</translation> <translation id="8030318113982266900">Prebieha aktualizácia vášho zariadenia na kanál <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Po odstránení účtu z prehliadača Chrome možno budete musieť znova načítať otvorené karty, aby sa zmena uplatnila.</translation> <translation id="8037887340639533879">Nenašla sa žiadna inštalácia prehliadača Google Chrome, ktorú by bolo možné aktualizovať.</translation> <translation id="8129812357326543296">Informácie o prehliadači &Google Chrome</translation> +<translation id="8183957050892517584">Chrome vaše osobné údaje bezpečne uloží, aby ste ich už nemuseli znova zadávať.</translation> <translation id="8205111949707227942">Voliteľné: Chcem pomôcť pri vylepšovaní služieb prehliadača Chrome tým, že bude automaticky odosielať spoločnosti Google štatistické údaje o jeho využívaní a správy o výpadkoch.</translation> <translation id="8227755444512189073">Prehľadávač Google Chrome potrebuje spustiť externú aplikáciu na spracovanie odkazov <ph name="SCHEME" />. Požadovaný odkaz je <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome používa vašu kameru a mikrofón.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb index bf0fa00..e951374 100644 --- a/chrome/app/resources/google_chrome_strings_sl.xtb +++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Odstranitev iz Chroma ...</translation> <translation id="7825851276765848807">Namestitev ni uspela zaradi nenavedene napake. Znova prenesite Google Chrome.</translation> <translation id="7890208801193284374">Če računalnik souporabljate z drugimi, lahko prijatelji in sorodniki ločeno brskajo ter nastavijo Chrome tako, kot želijo.</translation> -<translation id="8000275528373650868">Za Google Chrome potrebujete operacijski sistem Windows Vista ali Windows XP s servisnim paketom SP2 ali novejšim.</translation> <translation id="8005540215158006229">Chrome je skoraj pripravljen.</translation> <translation id="8008534537613507642">Vnovična namestitev Chroma</translation> <translation id="8030318113982266900">Posodabljanje naprave na kanal <ph name="CHANNEL_NAME" /> ...</translation> <translation id="8032142183999901390">Ko odstranite račun iz Chroma, boste morali morda znova naložiti odprte zavihke, če želite uveljaviti spremembo.</translation> <translation id="8037887340639533879">Ni nobene namestitve Google Chroma, ki bi jo bilo mogoče posodobiti.</translation> <translation id="8129812357326543296">O &Google Chromu</translation> +<translation id="8183957050892517584">Chrome bo varno shranil vaše osebne podatke, tako da vam jih ne bo treba več vnesti.</translation> <translation id="8205111949707227942">Izbirno: Pomagajte nam narediti Chrome OS boljši, tako da Googlu samodejno pošiljate statistične podatke o uporabi in poročila o zrušitvah.</translation> <translation id="8227755444512189073">Google Chrome mora zagnati zunanjo aplikacijo, da bo lahko obravnaval povezave <ph name="SCHEME" />. Zahtevana povezava je <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome uporablja vašo kamero in mikrofon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb index 955dc1b..76a39d7 100644 --- a/chrome/app/resources/google_chrome_strings_sr.xtb +++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Уклони из Chrome-а...</translation> <translation id="7825851276765848807">Инсталација није успела услед неутврђене грешке. Преузмите Google Chrome поново.</translation> <translation id="7890208801193284374">Ако делите рачунар, пријатељи и породица могу засебно да прегледају и да подесе Chrome баш онако како желе.</translation> -<translation id="8000275528373650868">За Google Chrome је неопходан оперативни систем Windows Vista или Windows XP са SP2 или новија верзија.</translation> <translation id="8005540215158006229">Chrome је скоро спреман.</translation> <translation id="8008534537613507642">Поново инсталирај Chrome</translation> <translation id="8030318113982266900">Ажурирање уређаја на канал <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Када уклоните налог из Chrome-а, можда ћете морати поново да учитате отворене картице да би то ступило на снагу.</translation> <translation id="8037887340639533879">Није пронађена ниједна инсталација Google Chrome-а за ажурирање.</translation> <translation id="8129812357326543296">О &Google Chrome-у</translation> +<translation id="8183957050892517584">Chrome ће безбедно складиштити личне податке да не бисте морали да их поново уносите.</translation> <translation id="8205111949707227942">Опционално: Помозите да побољшамо Chrome ОС аутоматским слањем статистике о коришћењу и извештаја о отказивању Google-у.</translation> <translation id="8227755444512189073">Google Chrome мора да покрене спољну апликацију за управљање <ph name="SCHEME" /> везама. Тражена веза је <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome користи камеру и микрофон.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb index 6e1b9c7..06b0b92 100644 --- a/chrome/app/resources/google_chrome_strings_sv.xtb +++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Ta bort från Chrome …</translation> <translation id="7825851276765848807">Installationen misslyckades på grund av ett okänt fel. Ladda ned Google Chrome igen.</translation> <translation id="7890208801193284374">Om du delar en dator med vänner och familj kan de konfigurera Chrome precis som de vill och surfa separat.</translation> -<translation id="8000275528373650868">För Google Chrome krävs Windows Vista eller Windows XP med SP2 eller senare.</translation> <translation id="8005540215158006229">Chrome är nästan klar.</translation> <translation id="8008534537613507642">Installera om Chrome</translation> <translation id="8030318113982266900">Uppdaterar din enhet till kanalen <ph name="CHANNEL_NAME" /> ...</translation> <translation id="8032142183999901390">När du har tagit bort kontot från Chrome kan öppna flikar behöva läsas in på nytt för att ändringen ska träda i kraft.</translation> <translation id="8037887340639533879">Det finns ingen installation av Google Chrome att uppdatera.</translation> <translation id="8129812357326543296">Om &Google Chrome</translation> +<translation id="8183957050892517584">Chrome sparar dina personliga uppgifter på ett säkert sätt så att du inte behöver ange dem på nytt.</translation> <translation id="8205111949707227942">Valfritt: Hjälp till att göra Chrome bättre genom att automatiskt skicka användningsstatistik och kraschrapporter till Google.</translation> <translation id="8227755444512189073">Google Chrome måste starta ett externt program för att hantera <ph name="SCHEME" />-länkar. Den begärda länken är <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome använder din kamera och mikrofon.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index a91375a..66189c4 100644 --- a/chrome/app/resources/google_chrome_strings_sw.xtb +++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -212,13 +212,13 @@ <translation id="7808348361785373670">Ondoa kwenye Chrome...</translation> <translation id="7825851276765848807">Usanidi umeshindwa kwa sababu ya hitilafu isiyojulikana. Tafadhali pakua Google Chrome tena.</translation> <translation id="7890208801193284374">Kama unatumia kompyuta pamoja na wengine, marafiki na familia wanaweza kuvinjari tofauti na kusanidi Chrome jinsi wapendavyo.</translation> -<translation id="8000275528373650868">Google Chrome inahitaji Windows Vista au Windows XP iliyo na SP2 au ya juu zaidi.</translation> <translation id="8005540215158006229">Chrome inakaribia kuwa tayari.</translation> <translation id="8008534537613507642">Sakinisha Chrome Upya</translation> <translation id="8030318113982266900">Inasasisha kituo chako kwenda kituo cha <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Baada ya kuiondoa akaunti yako kwenye Chrome, huenda ukahitajika kupakia upya vichupo vyako vilivyo wazi ili kuanza kufanya kazi.</translation> <translation id="8037887340639533879">Hakuna usakinishi wa Google Chrome uliopatikana kusasishwa.</translation> <translation id="8129812357326543296">Kuhusu &Google Chrome</translation> +<translation id="8183957050892517584">Chrome itahifadhi salama maelezo yako ya kibinafsi ili usihitaji kuyaandika tena.</translation> <translation id="8205111949707227942">Hiari: Saidia kuifanya Chrome OS kuwa bora kwa kutuma kiotomatiki takwimu za utumiaji na ripoti za kuvurugika kwa Google.</translation> <translation id="8227755444512189073">Google Chrome inahitaji kufungua programu ya nje ili kushughulikia viungo vya <ph name="SCHEME" />. Kiungo kilichoitishwa ni <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome inatumia kamera na maikrofoni yako.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb index b2d8f3e78..5578282 100644 --- a/chrome/app/resources/google_chrome_strings_ta.xtb +++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Chrome இலிருந்து அகற்றுதல்...</translation> <translation id="7825851276765848807">குறிப்பிடப்படாத பிழையின் காரணமாக, நிறுவல் தோல்வியடைந்தது. தயவுசெய்து Google Chrome ஐ மீண்டும் பதிவிறக்குக.</translation> <translation id="7890208801193284374">நீங்கள் கணினியைப் பகிர்ந்தால், நண்பர்களும் குடும்பத்தினரும் தனிப்பட்ட முறையில் உலாவலாம், மேலும் Chrome ஐ அவர்கள் விருப்பத்திற்கு ஏற்ப அமைத்துக்கொள்ளலாம்.</translation> -<translation id="8000275528373650868">Google Chrome க்கு Windows Vista அல்லது SP2 உடனான Windows XP அல்லது அதற்கு மேம்பட்டது தேவை.</translation> <translation id="8005540215158006229">Chrome தயாராகிவிட்டது.</translation> <translation id="8008534537613507642">Chrome ஐ மீண்டும்நிறுவு</translation> <translation id="8030318113982266900">உங்கள் சாதனத்தை <ph name="CHANNEL_NAME" /> சேனலுக்குப் புதுப்பிக்கிறது...</translation> <translation id="8032142183999901390">Chrome இலிருந்து உங்கள் கணக்கை அகற்றிய பின்னர், மாற்றங்களைச் செயல்படுத்த உங்கள் திறந்த தாவல்களை மீண்டும் ஏற்ற வேண்டியிருக்கலாம்.</translation> <translation id="8037887340639533879">புதுப்பிப்பதற்கு Google Chrome இன் நிறுவல் எதுவுமில்லை.</translation> <translation id="8129812357326543296">&Google Chrome அறிமுகம்</translation> +<translation id="8183957050892517584">Chrome உங்கள் தனிப்பட்ட விவரங்களைப் பாதுகாப்பாகச் சேமிக்கும் என்பதால் அவற்றை மீண்டும் உள்ளிட வேண்டியதில்லை.</translation> <translation id="8205111949707227942">விருப்பத்தேர்வு: பயன்பாட்டு புள்ளிவிவரங்களையும், செயலிழப்பு புகார்களையும் தானாகவே Google க்கு அனுப்புவதன் மூலம் Chrome OS ஐ இன்னும் உருவாக்க உதவுக.</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> இணைப்புகளைக் கையாளவதற்கு ஒரு வெளிப்புறப் பயன்பாட்டைத் தொடங்க Google Chrome தேவைப்படுகிறது. தேவையான இணைப்பு <ph name="PROTOLINK" /> ஆகும்.</translation> <translation id="8255190535488645436">Google Chrome உங்கள் கேமராவையும் மைக்ரோஃபோனையும் பயன்படுத்துகிறது.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index 0de801e..ce7fc33 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Chrome నుండి తీసివేయి...</translation> <translation id="7825851276765848807">పేర్కొనలేని లోపం కారణంగా వ్యవస్థాపన విఫలమైంది. దయచేసి Google Chromeని మళ్ళీ డౌన్లోడ్ చెయ్యండి.</translation> <translation id="7890208801193284374">మీరు కంప్యూటర్ను భాగస్వామ్యం చేస్తే, స్నేహితులు మరియు కుటుంబ సభ్యులు విడివిడిగా బ్రౌజ్ చేయవచ్చు మరియు Chromeను వారికి నచ్చిన రీతిలో సెటప్ చేసుకోవచ్చు.</translation> -<translation id="8000275528373650868">Google Chromeకి Windows Vista లేదా Windows XPతో SP2 లేదా తదుపరిది అవసరం.</translation> <translation id="8005540215158006229">Chrome దాదాపు సిద్ధంగా ఉంది.</translation> <translation id="8008534537613507642">Chromeను మళ్లీ ఇన్స్టాల్ చేయి</translation> <translation id="8030318113982266900">మీ పరికరాన్ని <ph name="CHANNEL_NAME" /> ఛానెల్కి నవీకరిస్తోంది...</translation> <translation id="8032142183999901390">Chrome నుండి మీ ఖాతాను తీసివేసిన తర్వాత, ప్రభావవంతం కావడానికి మీరు మీ తెరిచిన ట్యాబ్లను మళ్లీ లోడ్ చేయాల్సి రావచ్చు.</translation> <translation id="8037887340639533879">నవీకరించడానికి Google Chrome యొక్క ఇన్స్టాలేషన్ ఏదీ కనుగొనబడలేదు.</translation> <translation id="8129812357326543296">&Google Chrome గురించి</translation> +<translation id="8183957050892517584">Chrome మీ వ్యక్తిగత వివరాలను సురక్షితంగా నిల్వ చేస్తుంది కాబట్టి మీరు వాటిని మళ్లీ టైప్ చేయాల్సిన అవసరం లేదు.</translation> <translation id="8205111949707227942">వైకల్పికం: Googleకు ఉపయోగకర గణాంకాలను మరియు క్రాష్ నివేదికలను స్వయంచాలకంగా పంపడం ద్వారా Chrome OSను మరింత మెరుగుపరచడానికి సహాయం చేస్తుంది.</translation> <translation id="8227755444512189073"><ph name="SCHEME" /> లింకులను నిర్వహించడానికి Google Chrome ఒక బాహ్య అప్లికేషన్ను ప్రారంభించాల్సి ఉంది. అభ్యర్థించిన లింక్ <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome మీ కెమెరా మరియు మైక్రోఫోన్ని ఉపయోగిస్తోంది.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb index 8cfe7161..c5b5b19 100644 --- a/chrome/app/resources/google_chrome_strings_th.xtb +++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -205,13 +205,13 @@ <translation id="7808348361785373670">นำออกจาก Chrome...</translation> <translation id="7825851276765848807">การติดตั้งล้มเหลวเนื่องจากเกิดข้อผิดพลาดที่ไม่ระบุ โปรดดาวน์โหลด Google Chrome อีกครั้ง</translation> <translation id="7890208801193284374">ถ้าคุณให้ผู้อื่นใช้คอมพิวเตอร์ร่วมด้วย เพื่อนๆ และครอบครัวของคุณสามารถท่องเว็บแยกกันได้และตั้งค่า Chrome ได้ตามที่พวกเขาต้องการ</translation> -<translation id="8000275528373650868">Google Chrome ต้องใช้ Windows Vista หรือ Windows XP พร้อม SP2 หรือที่สูงกว่า</translation> <translation id="8005540215158006229">Chrome ใกล้จะใช้งานได้แล้ว</translation> <translation id="8008534537613507642">ติดตั้ง Chrome ใหม่</translation> <translation id="8030318113982266900">กำลังอัปเดตอุปกรณ์ของคุณไปยังช่อง <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">เมื่อลบบัญชีของคุณออกจาก Chrome แล้ว คุณต้องโหลดแท็บที่เปิดอยู่ซ้ำเพื่อให้มีผล</translation> <translation id="8037887340639533879">ไม่พบการติดตั้ง Google Chrome ที่จะอัปเดต</translation> <translation id="8129812357326543296">เกี่ยวกับ &Google Chrome</translation> +<translation id="8183957050892517584">Chrome จะเก็บรายละเอียดส่วนตัวของคุณอย่างปลอดภัย คุณจึงไม่จำเป็นต้องพิมพ์รายละเอียดเหล่านั้นอีกครั้ง</translation> <translation id="8205111949707227942">ไม่บังคับ: ช่วยปรับปรุงระบบปฏิบัติการ Chrome ให้ดีขึ้นโดยส่งสถิติการใช้งานและรายงานปัญหาไปยัง Google โดยอัตโนมัติ</translation> <translation id="8227755444512189073">Google Chrome จำเป็นต้องเรียกแอปพลิเคชันภายนอกเพื่อเปิดลิงก์ <ph name="SCHEME" /> ลิงก์ที่ขอคือ <ph name="PROTOLINK" /></translation> <translation id="8255190535488645436">Google Chrome ใช้กล้องและไมโครโฟนของคุณอยู่</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb index c6bf5828..0cdd200 100644 --- a/chrome/app/resources/google_chrome_strings_tr.xtb +++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -206,13 +206,13 @@ <translation id="7808348361785373670">Chrome'dan kaldır...</translation> <translation id="7825851276765848807">Yükleme belirtilmeyen bir hata nedeniyle başarısız oldu. Lütfen Google Chrome'u tekrar yükleyin.</translation> <translation id="7890208801193284374">Bir bilgisayarı paylaşıyorsanız arkadaşlarınız ve aileniz web'e ayrı olarak göz atabilir ve Chrome'u tam olarak istedikleri şekilde ayarlayabilirler.</translation> -<translation id="8000275528373650868">Google Chrome, Windows Vista veya Windows XP SP2 veya daha ileri bir sürümü gerektirir.</translation> <translation id="8005540215158006229">Chrome neredeyse hazır.</translation> <translation id="8008534537613507642">Chrome'u yeniden yükle</translation> <translation id="8030318113982266900">Cihazınız <ph name="CHANNEL_NAME" /> kanalına güncelleniyor...</translation> <translation id="8032142183999901390">Hesabınızı Chrome'dan kaldırdıktan sonra, geçerli olması için açık sekmelerinizi yeniden yüklemeniz gerekebilir.</translation> <translation id="8037887340639533879">Google Chrome'un güncellenecek yüklemesi bulunamadı.</translation> <translation id="8129812357326543296">&Google Chrome hakkında</translation> +<translation id="8183957050892517584">Chrome, kişisel bilgilerinizi güvenli şekilde depoladığından bu bilgileri tekrar yazmak zorunda kalmazsınız.</translation> <translation id="8205111949707227942">İsteğe Bağlı: Kullanıcı istatistiklerini ve çökme raporlarını Google'a otomatik olarak göndererek Chrome OS'in iyileştirilmesine yardımcı olun.</translation> <translation id="8227755444512189073">Google Chrome'un <ph name="SCHEME" /> bağlantılarını işleyebilmek için harici bir uygulama başlatması gerekiyor. İstenen bağlantı <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome kameranızı ve mikrofonunuzu kullanıyor.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb index fb4c4d8..6c82d96 100644 --- a/chrome/app/resources/google_chrome_strings_uk.xtb +++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -204,13 +204,13 @@ <translation id="7808348361785373670">Видалити з Chrome…</translation> <translation id="7825851276765848807">Програму не вдалося встановити через невизначену помилку. Завантажте Google Chrome ще раз.</translation> <translation id="7890208801193284374">Якщо вашим комп’ютером користуєтесь не лише ви, а й ваші друзі чи сім’я, вони можуть налаштувати Chrome на свій смак.</translation> -<translation id="8000275528373650868">Для роботи Google Chrome потрібно мати ОС Windows Vista чи Windows XP із SP2 або новішу версію.</translation> <translation id="8005540215158006229">Chrome майже готовий.</translation> <translation id="8008534537613507642">Перевстановити Chrome</translation> <translation id="8030318113982266900">Оновлення пристрою до каналу <ph name="CHANNEL_NAME" />…</translation> <translation id="8032142183999901390">Якщо видалити обліковий запис із Chrome, можливо, потрібно оновити відкриті вкладки, щоб зміни почали діяти.</translation> <translation id="8037887340639533879">Неможливо виконати оновлення, оскільки не знайдено встановленої версії Google Chrome.</translation> <translation id="8129812357326543296">Про &Google Chrome</translation> +<translation id="8183957050892517584">Chrome надійно зберігатиме ваші особисті дані, тож вам не потрібно буде вводити їх знову.</translation> <translation id="8205111949707227942">Додатково. Допоможіть покращити ОС Chrome, автоматично надсилаючи статистику використання та звіти про аварійне завершення роботи до Google.</translation> <translation id="8227755444512189073">Google Chrome потребує запуску зовнішньої прикладної програми для опрацювання посилань <ph name="SCHEME" />. Посилання, на яке здійснено запит, - <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome використовує вашу камеру та мікрофон.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb index d0ddd79..b26360c 100644 --- a/chrome/app/resources/google_chrome_strings_vi.xtb +++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -209,13 +209,13 @@ <translation id="7808348361785373670">Xóa khỏi Chrome...</translation> <translation id="7825851276765848807">Không thể cài đặt do lỗi không xác định. Hãy tải xuống lại Google Chrome.</translation> <translation id="7890208801193284374">Nếu bạn chia sẻ máy tính, bạn bè và gia đình có thể duyệt web một cách riêng biệt và thiết lập Chrome theo ý của họ.</translation> -<translation id="8000275528373650868">Google Chrome yêu cầu Windows Vista hoặc Windows XP với SP2 trở lên.</translation> <translation id="8005540215158006229">Chrome sắp sẵn sàng.</translation> <translation id="8008534537613507642">Cài đặt lại Chrome</translation> <translation id="8030318113982266900">Đang cập nhật thiết bị tới kênh <ph name="CHANNEL_NAME" />...</translation> <translation id="8032142183999901390">Sau khi xóa tài khoản khỏi Chrome, bạn có thể cần phải tải lại các tab đang mở của mình để tác vụ có hiệu lực.</translation> <translation id="8037887340639533879">Không tìm thấy bản cài đặt Google Chrome cần cập nhật.</translation> <translation id="8129812357326543296">Giới thiệu về &Google Chrome</translation> +<translation id="8183957050892517584">Chrome sẽ lưu trữ an toàn chi tiết cá nhân của bạn nên bạn không cần nhập lại thông tin này.</translation> <translation id="8205111949707227942">Tùy chọn: Giúp cải thiện Hệ điều hành Chrome bằng cách tự động gửi về Google thống kê sử dụng và báo cáo sự cố.</translation> <translation id="8227755444512189073">Google Chrome cần chạy ứng dụng ngoài để xử lý các liên kết <ph name="SCHEME" />. Liên kết được yêu cầu là <ph name="PROTOLINK" />.</translation> <translation id="8255190535488645436">Google Chrome đang sử dụng máy ảnh và micrô của bạn.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb index bc30ce2..540126c7 100644 --- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -205,13 +205,13 @@ <translation id="7808348361785373670">从Chrome中移除…</translation> <translation id="7825851276765848807">由于未指定的错误导致安装失败。请重新下载 Google Chrome 浏览器。</translation> <translation id="7890208801193284374">如果您与亲朋好友共用计算机,他们将能够使用单独的帐户进行浏览,并可随心所欲地设置Chrome。</translation> -<translation id="8000275528373650868">Google Chrome 浏览器要求操作系统必须为 Windows Vista 或者 Windows XP SP2 或更高版本。</translation> <translation id="8005540215158006229">Chrome 浏览器即将准备就绪。</translation> <translation id="8008534537613507642">重新安装Chrome</translation> <translation id="8030318113982266900">正在将您的设备更新至“<ph name="CHANNEL_NAME" />”版…</translation> <translation id="8032142183999901390">从Chrome移除您的帐户后,您可能需要重新加载已打开的标签页才能使其正常显示。</translation> <translation id="8037887340639533879">未找到要更新的Google Chrome安装实例。</translation> <translation id="8129812357326543296">关于 Google Chrome(&G)</translation> +<translation id="8183957050892517584">Chrome 将妥善存储您的个人详细信息,这样您日后就不必重复输入了。</translation> <translation id="8205111949707227942">可选:将使用情况统计信息和崩溃报告自动发送给Google,帮助完善Chrome操作系统。</translation> <translation id="8227755444512189073">Google Chrome 浏览器必须启动外部应用才能处理 <ph name="SCHEME" /> 链接。请求的链接是 <ph name="PROTOLINK" />。</translation> <translation id="8255190535488645436">Google Chrome 正在使用您的摄像头和麦克风。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb index eb101032..be51269 100644 --- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -206,13 +206,13 @@ <translation id="7808348361785373670">從 Chrome 中移除...</translation> <translation id="7825851276765848807">不明錯誤導致安裝失敗,請再次下載 Google Chrome。</translation> <translation id="7890208801193284374">如果您與親朋好友共用電腦,人人皆可享有獨立的瀏覽空間,依照自己的偏好設定 Chrome。</translation> -<translation id="8000275528373650868">Google Chrome 支援的作業系統為 Windows Vista 或 Windows XP SP2 以上版本。</translation> <translation id="8005540215158006229">Chrome 即將準備就緒。</translation> <translation id="8008534537613507642">重新安裝 Chrome</translation> <translation id="8030318113982266900">正在將裝置更新至「<ph name="CHANNEL_NAME" />」版...</translation> <translation id="8032142183999901390">將您的帳戶從 Chrome 移除後,可能需要重新載入開啟的分頁,操作才會生效。</translation> <translation id="8037887340639533879">找不到安裝的 Google Chrome,無法更新。</translation> <translation id="8129812357326543296">關於 Google Chrome(&G)</translation> +<translation id="8183957050892517584">Chrome 會妥善保存您的個人詳細資料,讓您不必重複輸入相同的資料。</translation> <translation id="8205111949707227942">選擇性:把使用統計資料及當機報告自動傳送給 Google,將有助於 Chrome OS 更臻完美。</translation> <translation id="8227755444512189073">Google Chrome 需要啟動外部應用程式以處理 <ph name="SCHEME" /> 連結。所要求的連結為 <ph name="PROTOLINK" />。 </translation> <translation id="8255190535488645436">Google Chrome 正在使用您的攝影機和麥克風。</translation>
diff --git a/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc b/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc index 823222b..f4cf6a2 100644 --- a/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc +++ b/chrome/browser/android/download/chrome_download_manager_overwrite_infobar_delegate.cc
@@ -17,6 +17,22 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" +namespace { + +void DeleteExistingDownloadFile( + const base::FilePath& download_path, + const DownloadTargetDeterminerDelegate::FileSelectedCallback& callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); + base::File::Info info; + if (GetFileInfo(download_path, &info) && !info.is_directory) + base::DeleteFile(download_path, false); + + content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, + base::Bind(callback, download_path)); +} + +} // namespace + namespace chrome { namespace android { @@ -49,7 +65,10 @@ } bool ChromeDownloadManagerOverwriteInfoBarDelegate::OverwriteExistingFile() { - file_selected_callback_.Run(suggested_download_path_); + content::BrowserThread::PostTask( + content::BrowserThread::FILE, FROM_HERE, + base::Bind(&DeleteExistingDownloadFile, suggested_download_path_, + file_selected_callback_)); return true; }
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc index 07f6e44..6bdaa796 100644 --- a/chrome/browser/apps/guest_view/web_view_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -1644,7 +1644,7 @@ // The test launches an app with guest and closes the window on loadcommit. It // then launches the app window again. The process is repeated 3 times. // http://crbug.com/291278 -#if defined(OS_WIN) +#if defined(OS_WIN) || defined(MAC_OS_X_VERSION_10_9) #define MAYBE_CloseOnLoadcommit DISABLED_CloseOnLoadcommit #else #define MAYBE_CloseOnLoadcommit CloseOnLoadcommit
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 0b5c718..12d723d 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2697,12 +2697,6 @@ L"\\\\.\\pipe\\chrome.nacl.*"); if (result != sandbox::SBOX_ALL_OK) return false; - - // Renderers need to send named pipe handles and shared memory - // segment handles to NaCl loader processes. - result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, - sandbox::TargetPolicy::HANDLES_DUP_ANY, - L"File"); return result == sandbox::SBOX_ALL_OK; }
diff --git a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc index 8c18f34..87f19a8e 100644 --- a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc +++ b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc
@@ -92,7 +92,7 @@ bool fetch_additional_token) { DCHECK(!started_); started_ = true; - oauth_fetcher_.reset(new policy::PolicyOAuth2TokenFetcher()); + oauth_fetcher_.reset(policy::PolicyOAuth2TokenFetcher::CreateInstance()); oauth_fetcher_->StartWithAuthCode( auth_code, g_browser_process->system_request_context(), base::Bind(&EnterpriseEnrollmentHelperImpl::OnTokenFetched, @@ -114,11 +114,11 @@ (new TokenRevoker())->Start(additional_token_); if (oauth_fetcher_) { - if (!oauth_fetcher_->oauth2_access_token().empty()) - (new TokenRevoker())->Start(oauth_fetcher_->oauth2_access_token()); + if (!oauth_fetcher_->OAuth2AccessToken().empty()) + (new TokenRevoker())->Start(oauth_fetcher_->OAuth2AccessToken()); - if (!oauth_fetcher_->oauth2_refresh_token().empty()) - (new TokenRevoker())->Start(oauth_fetcher_->oauth2_refresh_token()); + if (!oauth_fetcher_->OAuth2RefreshToken().empty()) + (new TokenRevoker())->Start(oauth_fetcher_->OAuth2RefreshToken()); oauth_fetcher_.reset(); } else if (oauth_token_.length()) { @@ -210,8 +210,8 @@ } additional_token_ = token; - std::string refresh_token = oauth_fetcher_->oauth2_refresh_token(); - oauth_fetcher_.reset(new policy::PolicyOAuth2TokenFetcher()); + std::string refresh_token = oauth_fetcher_->OAuth2RefreshToken(); + oauth_fetcher_.reset(policy::PolicyOAuth2TokenFetcher::CreateInstance()); oauth_fetcher_->StartWithRefreshToken( refresh_token, g_browser_process->system_request_context(), base::Bind(&EnterpriseEnrollmentHelperImpl::OnTokenFetched,
diff --git a/chrome/browser/chromeos/login/lock/screen_locker.cc b/chrome/browser/chromeos/login/lock/screen_locker.cc index 63b492a..ed7d25b 100644 --- a/chrome/browser/chromeos/login/lock/screen_locker.cc +++ b/chrome/browser/chromeos/login/lock/screen_locker.cc
@@ -11,10 +11,10 @@ #include "ash/audio/sounds.h" #include "ash/desktop_background/desktop_background_controller.h" #include "ash/shell.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/lock_state_controller.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/bind.h" #include "base/command_line.h" #include "base/lazy_instance.h"
diff --git a/chrome/browser/chromeos/login/saml/saml_browsertest.cc b/chrome/browser/chromeos/login/saml/saml_browsertest.cc index 11360d2..ebe85f26 100644 --- a/chrome/browser/chromeos/login/saml/saml_browsertest.cc +++ b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
@@ -846,6 +846,11 @@ GetLoginUI()->GetWebContents(), "var enrollmentScreen = document.getElementById('oauth-enrollment');" "function SendReplyIfEnrollmentDone() {" + " if (enrollmentScreen.classList.contains(" + " 'oauth-enroll-state-attribute-prompt')) {" + " $('oauth-enroll-attribute-prompt-card').fire('submit');" + " return false;" + " }" " if (!enrollmentScreen.classList.contains(" " 'oauth-enroll-state-success')) {" " return false;"
diff --git a/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.cc b/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.cc index 6c81f18..a6562915 100644 --- a/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.cc +++ b/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.cc
@@ -4,10 +4,12 @@ #include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h" +#include <memory> #include <vector> #include "base/bind.h" #include "base/logging.h" +#include "base/memory/weak_ptr.h" #include "base/strings/string_util.h" #include "content/public/browser/browser_thread.h" #include "google_apis/gaia/gaia_auth_fetcher.h" @@ -23,21 +25,109 @@ namespace { +// If true, fake policy tokens will be sent instead of making network requests. +bool use_fake_tokens_for_testing_ = false; + // Max retry count for token fetching requests. const int kMaxRequestAttemptCount = 5; // OAuth token request retry delay in milliseconds. const int kRequestRestartDelay = 3000; -} // namespace +class PolicyOAuth2TokenFetcherImpl : public PolicyOAuth2TokenFetcher, + public GaiaAuthConsumer, + public OAuth2AccessTokenConsumer { + public: + PolicyOAuth2TokenFetcherImpl(); + ~PolicyOAuth2TokenFetcherImpl() override; -PolicyOAuth2TokenFetcher::PolicyOAuth2TokenFetcher() { -} + private: + // PolicyOAuth2TokenFetcher overrides. + void StartWithSigninContext( + net::URLRequestContextGetter* auth_context_getter, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) override; + void StartWithAuthCode(const std::string& auth_code, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) override; + void StartWithRefreshToken( + const std::string& oauth2_refresh_token, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) override; -PolicyOAuth2TokenFetcher::~PolicyOAuth2TokenFetcher() { -} + // Returns true if we have previously attempted to fetch tokens with this + // class and failed. + bool Failed() const override { return failed_; } -void PolicyOAuth2TokenFetcher::StartWithSigninContext( + const std::string& OAuth2RefreshToken() const override { + return oauth2_refresh_token_; + } + const std::string& OAuth2AccessToken() const override { + return oauth2_access_token_; + } + + // GaiaAuthConsumer overrides. + void OnClientOAuthSuccess( + const GaiaAuthConsumer::ClientOAuthResult& oauth_tokens) override; + void OnClientOAuthFailure(const GoogleServiceAuthError& error) override; + + // OAuth2AccessTokenConsumer overrides. + void OnGetTokenSuccess(const std::string& access_token, + const base::Time& expiration_time) override; + void OnGetTokenFailure(const GoogleServiceAuthError& error) override; + + // Starts fetching OAuth2 refresh token. + void StartFetchingRefreshToken(); + + // Starts fetching OAuth2 access token for the device management service. + void StartFetchingAccessToken(); + + // Decides how to proceed on GAIA |error|. If the error looks temporary, + // retries |task| until max retry count is reached. + // If retry count runs out, or error condition is unrecoverable, it calls + // Delegate::OnOAuth2TokenFetchFailed(). + void RetryOnError(const GoogleServiceAuthError& error, + const base::Closure& task); + + // Passes |token| and |error| to the |callback_|. + void ForwardPolicyToken(const std::string& token, + const GoogleServiceAuthError& error); + + // Auth code which is used to retreive a refresh token. + std::string auth_code_; + + scoped_refptr<net::URLRequestContextGetter> auth_context_getter_; + scoped_refptr<net::URLRequestContextGetter> system_context_getter_; + std::unique_ptr<GaiaAuthFetcher> refresh_token_fetcher_; + std::unique_ptr<OAuth2AccessTokenFetcher> access_token_fetcher_; + + // OAuth2 refresh token. Could come either from the outside or through + // refresh token fetching flow within this class. + std::string oauth2_refresh_token_; + + // OAuth2 access token. + std::string oauth2_access_token_; + + // The retry counter. Increment this only when failure happened. + int retry_count_ = 0; + + // True if we have already failed to fetch the policy. + bool failed_ = false; + + // The callback to invoke when done. + TokenCallback callback_; + + base::WeakPtrFactory<PolicyOAuth2TokenFetcherImpl> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(PolicyOAuth2TokenFetcherImpl); +}; + +PolicyOAuth2TokenFetcherImpl::PolicyOAuth2TokenFetcherImpl() + : weak_ptr_factory_(this) {} + +PolicyOAuth2TokenFetcherImpl::~PolicyOAuth2TokenFetcherImpl() {} + +void PolicyOAuth2TokenFetcherImpl::StartWithSigninContext( net::URLRequestContextGetter* auth_context_getter, net::URLRequestContextGetter* system_context_getter, const TokenCallback& callback) { @@ -49,7 +139,7 @@ StartFetchingRefreshToken(); } -void PolicyOAuth2TokenFetcher::StartWithAuthCode( +void PolicyOAuth2TokenFetcherImpl::StartWithAuthCode( const std::string& auth_code, net::URLRequestContextGetter* system_context_getter, const TokenCallback& callback) { @@ -61,7 +151,7 @@ StartFetchingRefreshToken(); } -void PolicyOAuth2TokenFetcher::StartWithRefreshToken( +void PolicyOAuth2TokenFetcherImpl::StartWithRefreshToken( const std::string& oauth2_refresh_token, net::URLRequestContextGetter* system_context_getter, const TokenCallback& callback) { @@ -73,7 +163,7 @@ StartFetchingAccessToken(); } -void PolicyOAuth2TokenFetcher::StartFetchingRefreshToken() { +void PolicyOAuth2TokenFetcherImpl::StartFetchingRefreshToken() { if (auth_code_.empty()) { refresh_token_fetcher_.reset(new GaiaAuthFetcher( this, GaiaConstants::kChromeSource, auth_context_getter_.get())); @@ -86,7 +176,7 @@ } } -void PolicyOAuth2TokenFetcher::StartFetchingAccessToken() { +void PolicyOAuth2TokenFetcherImpl::StartFetchingAccessToken() { std::vector<std::string> scopes; scopes.push_back(GaiaConstants::kDeviceManagementServiceOAuth); scopes.push_back(GaiaConstants::kOAuthWrapBridgeUserInfoScope); @@ -100,7 +190,7 @@ scopes); } -void PolicyOAuth2TokenFetcher::OnClientOAuthSuccess( +void PolicyOAuth2TokenFetcherImpl::OnClientOAuthSuccess( const GaiaAuthConsumer::ClientOAuthResult& oauth2_tokens) { VLOG(1) << "OAuth2 tokens for policy fetching succeeded."; oauth2_refresh_token_ = oauth2_tokens.refresh_token; @@ -108,16 +198,17 @@ StartFetchingAccessToken(); } -void PolicyOAuth2TokenFetcher::OnClientOAuthFailure( +void PolicyOAuth2TokenFetcherImpl::OnClientOAuthFailure( const GoogleServiceAuthError& error) { VLOG(1) << "OAuth2 tokens fetch for policy fetch failed! (error = " << error.state() << ")"; - RetryOnError(error, - base::Bind(&PolicyOAuth2TokenFetcher::StartFetchingRefreshToken, - AsWeakPtr())); + RetryOnError( + error, + base::Bind(&PolicyOAuth2TokenFetcherImpl::StartFetchingRefreshToken, + weak_ptr_factory_.GetWeakPtr())); } -void PolicyOAuth2TokenFetcher::OnGetTokenSuccess( +void PolicyOAuth2TokenFetcherImpl::OnGetTokenSuccess( const std::string& access_token, const base::Time& expiration_time) { VLOG(1) << "OAuth2 access token (device management) fetching succeeded."; @@ -126,16 +217,17 @@ GoogleServiceAuthError(GoogleServiceAuthError::NONE)); } -void PolicyOAuth2TokenFetcher::OnGetTokenFailure( +void PolicyOAuth2TokenFetcherImpl::OnGetTokenFailure( const GoogleServiceAuthError& error) { LOG(ERROR) << "OAuth2 access token (device management) fetching failed!"; - RetryOnError(error, - base::Bind(&PolicyOAuth2TokenFetcher::StartFetchingAccessToken, - AsWeakPtr())); + RetryOnError( + error, base::Bind(&PolicyOAuth2TokenFetcherImpl::StartFetchingAccessToken, + weak_ptr_factory_.GetWeakPtr())); } -void PolicyOAuth2TokenFetcher::RetryOnError(const GoogleServiceAuthError& error, - const base::Closure& task) { +void PolicyOAuth2TokenFetcherImpl::RetryOnError( + const GoogleServiceAuthError& error, + const base::Closure& task) { DCHECK_CURRENTLY_ON(BrowserThread::UI); if (error.IsTransientError() && retry_count_ < kMaxRequestAttemptCount) { retry_count_++; @@ -153,11 +245,78 @@ ForwardPolicyToken(std::string(), error); } -void PolicyOAuth2TokenFetcher::ForwardPolicyToken( +void PolicyOAuth2TokenFetcherImpl::ForwardPolicyToken( const std::string& token, const GoogleServiceAuthError& error) { if (!callback_.is_null()) callback_.Run(token, error); } +// Fake token fetcher that immediately returns tokens without making network +// requests. +class PolicyOAuth2TokenFetcherFake : public PolicyOAuth2TokenFetcher { + public: + PolicyOAuth2TokenFetcherFake() {} + ~PolicyOAuth2TokenFetcherFake() override {} + + private: + // PolicyOAuth2TokenFetcher overrides. + void StartWithSigninContext( + net::URLRequestContextGetter* auth_context_getter, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) override { + ForwardPolicyToken(callback); + } + + void StartWithAuthCode(const std::string& auth_code, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) override { + ForwardPolicyToken(callback); + } + + void StartWithRefreshToken( + const std::string& oauth2_refresh_token, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) override { + ForwardPolicyToken(callback); + } + + bool Failed() const override { return false; } + const std::string& OAuth2RefreshToken() const override { + return refresh_token_; + } + const std::string& OAuth2AccessToken() const override { + return access_token_; + } + + private: + void ForwardPolicyToken(const TokenCallback& callback) { + if (!callback.is_null()) + callback.Run(access_token_, GoogleServiceAuthError::AuthErrorNone()); + } + + const std::string refresh_token_ = "fake_refresh_token"; + const std::string access_token_ = "fake_access_token"; + + DISALLOW_COPY_AND_ASSIGN(PolicyOAuth2TokenFetcherFake); +}; + +} // namespace + +// static +void PolicyOAuth2TokenFetcher::UseFakeTokensForTesting() { + use_fake_tokens_for_testing_ = true; +} + +// static +PolicyOAuth2TokenFetcher* PolicyOAuth2TokenFetcher::CreateInstance() { + if (use_fake_tokens_for_testing_) + return new PolicyOAuth2TokenFetcherFake(); + return new PolicyOAuth2TokenFetcherImpl(); +} + +PolicyOAuth2TokenFetcher::PolicyOAuth2TokenFetcher() {} + +PolicyOAuth2TokenFetcher::~PolicyOAuth2TokenFetcher() {} + } // namespace policy
diff --git a/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h b/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h index 18ef8c1..f112280 100644 --- a/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h +++ b/chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h
@@ -9,12 +9,8 @@ #include <string> #include "base/callback.h" -#include "base/compiler_specific.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/weak_ptr.h" #include "google_apis/gaia/gaia_auth_consumer.h" -#include "google_apis/gaia/oauth2_access_token_consumer.h" class GaiaAuthFetcher; class OAuth2AccessTokenFetcher; @@ -30,96 +26,43 @@ // send a (possibly empty) token to the callback, which will then let the policy // subsystem proceed and resume Profile creation. Sending the token even when no // Profile is pending is also OK. -class PolicyOAuth2TokenFetcher - : public base::SupportsWeakPtr<PolicyOAuth2TokenFetcher>, - public GaiaAuthConsumer, - public OAuth2AccessTokenConsumer { +class PolicyOAuth2TokenFetcher { public: - typedef base::Callback<void(const std::string&, - const GoogleServiceAuthError&)> TokenCallback; + // Allocates a PolicyOAuth2TokenFetcher instance. + static PolicyOAuth2TokenFetcher* CreateInstance(); + + // Makes CreateInstance() return a fake token fetcher that does not make + // network calls so tests can avoid a dependency on GAIA. + static void UseFakeTokensForTesting(); + + using TokenCallback = + base::Callback<void(const std::string&, const GoogleServiceAuthError&)>; PolicyOAuth2TokenFetcher(); - ~PolicyOAuth2TokenFetcher() override; + virtual ~PolicyOAuth2TokenFetcher(); // Fetches the device management service's oauth2 token. This may be fetched // via signin context, auth code, or oauth2 refresh token. - void StartWithSigninContext( + virtual void StartWithSigninContext( net::URLRequestContextGetter* auth_context_getter, net::URLRequestContextGetter* system_context_getter, - const TokenCallback& callback); - void StartWithAuthCode(const std::string& auth_code, - net::URLRequestContextGetter* system_context_getter, - const TokenCallback& callback); - void StartWithRefreshToken( + const TokenCallback& callback) = 0; + virtual void StartWithAuthCode( + const std::string& auth_code, + net::URLRequestContextGetter* system_context_getter, + const TokenCallback& callback) = 0; + virtual void StartWithRefreshToken( const std::string& oauth2_refresh_token, net::URLRequestContextGetter* system_context_getter, - const TokenCallback& callback); + const TokenCallback& callback) = 0; // Returns true if we have previously attempted to fetch tokens with this // class and failed. - bool failed() const { - return failed_; - } - - const std::string& oauth2_refresh_token() const { - return oauth2_refresh_token_; - } - const std::string& oauth2_access_token() const { - return oauth2_access_token_; - } + virtual bool Failed() const = 0; + virtual const std::string& OAuth2RefreshToken() const = 0; + virtual const std::string& OAuth2AccessToken() const = 0; private: - // GaiaAuthConsumer overrides. - void OnClientOAuthSuccess( - const GaiaAuthConsumer::ClientOAuthResult& oauth_tokens) override; - void OnClientOAuthFailure(const GoogleServiceAuthError& error) override; - - // OAuth2AccessTokenConsumer overrides. - void OnGetTokenSuccess(const std::string& access_token, - const base::Time& expiration_time) override; - void OnGetTokenFailure(const GoogleServiceAuthError& error) override; - - // Starts fetching OAuth2 refresh token. - void StartFetchingRefreshToken(); - - // Starts fetching OAuth2 access token for the device management service. - void StartFetchingAccessToken(); - - // Decides how to proceed on GAIA |error|. If the error looks temporary, - // retries |task| until max retry count is reached. - // If retry count runs out, or error condition is unrecoverable, it calls - // Delegate::OnOAuth2TokenFetchFailed(). - void RetryOnError(const GoogleServiceAuthError& error, - const base::Closure& task); - - // Passes |token| and |error| to the |callback_|. - void ForwardPolicyToken(const std::string& token, - const GoogleServiceAuthError& error); - - // Auth code which is used to retreive a refresh token. - std::string auth_code_; - - scoped_refptr<net::URLRequestContextGetter> auth_context_getter_; - scoped_refptr<net::URLRequestContextGetter> system_context_getter_; - std::unique_ptr<GaiaAuthFetcher> refresh_token_fetcher_; - std::unique_ptr<OAuth2AccessTokenFetcher> access_token_fetcher_; - - // OAuth2 refresh token. Could come either from the outside or through - // refresh token fetching flow within this class. - std::string oauth2_refresh_token_; - - // OAuth2 access token. - std::string oauth2_access_token_; - - // The retry counter. Increment this only when failure happened. - int retry_count_ = 0; - - // True if we have already failed to fetch the policy. - bool failed_ = false; - - // The callback to invoke when done. - TokenCallback callback_; - DISALLOW_COPY_AND_ASSIGN(PolicyOAuth2TokenFetcher); };
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc index 47ec950..0fb6d86 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.cc
@@ -334,7 +334,7 @@ ->user_context() .GetRefreshToken(); if (!refresh_token.empty()) { - token_fetcher_.reset(new PolicyOAuth2TokenFetcher()); + token_fetcher_.reset(PolicyOAuth2TokenFetcher::CreateInstance()); token_fetcher_->StartWithRefreshToken( refresh_token, g_browser_process->system_request_context(), base::Bind(&UserCloudPolicyManagerChromeOS::OnOAuth2PolicyTokenFetched, @@ -351,7 +351,7 @@ return; } - token_fetcher_.reset(new PolicyOAuth2TokenFetcher()); + token_fetcher_.reset(PolicyOAuth2TokenFetcher::CreateInstance()); token_fetcher_->StartWithSigninContext( signin_context.get(), g_browser_process->system_request_context(), base::Bind(&UserCloudPolicyManagerChromeOS::OnOAuth2PolicyTokenFetched,
diff --git a/chrome/browser/chromeos/policy/wildcard_login_checker.cc b/chrome/browser/chromeos/policy/wildcard_login_checker.cc index 1e53a69..435e114 100644 --- a/chrome/browser/chromeos/policy/wildcard_login_checker.cc +++ b/chrome/browser/chromeos/policy/wildcard_login_checker.cc
@@ -43,7 +43,7 @@ start_timestamp_ = base::Time::Now(); callback_ = callback; - token_fetcher_.reset(new PolicyOAuth2TokenFetcher()); + token_fetcher_.reset(PolicyOAuth2TokenFetcher::CreateInstance()); token_fetcher_->StartWithSigninContext( signin_context.get(), g_browser_process->system_request_context(), base::Bind(&WildcardLoginChecker::OnPolicyTokenFetched, @@ -59,7 +59,7 @@ start_timestamp_ = base::Time::Now(); callback_ = callback; - token_fetcher_.reset(new PolicyOAuth2TokenFetcher()); + token_fetcher_.reset(PolicyOAuth2TokenFetcher::CreateInstance()); token_fetcher_->StartWithRefreshToken( refresh_token, g_browser_process->system_request_context(), base::Bind(&WildcardLoginChecker::OnPolicyTokenFetched,
diff --git a/chrome/browser/component_updater/sth_set_component_installer.cc b/chrome/browser/component_updater/sth_set_component_installer.cc index d26c8784..6c63be4 100644 --- a/chrome/browser/component_updater/sth_set_component_installer.cc +++ b/chrome/browser/component_updater/sth_set_component_installer.cc
@@ -19,7 +19,6 @@ #include "components/safe_json/safe_json_parser.h" #include "content/public/browser/browser_thread.h" #include "crypto/sha2.h" -#include "net/cert/ct_known_logs_static.h" #include "net/cert/ct_log_response_parser.h" #include "net/cert/signed_tree_head.h" #include "net/cert/sth_distributor.h"
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc index 37b6267e..50c98b4 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_apitest.cc
@@ -15,6 +15,8 @@ #include "base/values.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h" +#include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h" +#include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/common/extensions/api/passwords_private.h" #include "chrome/test/base/testing_profile.h" @@ -54,7 +56,7 @@ // or RemovePasswordException() is called. class TestDelegate : public PasswordsPrivateDelegate { public: - TestDelegate() { + TestDelegate() : profile_(nullptr) { // Create mock data. for (size_t i = 0; i < kNumMocks; i++) { current_entries_.push_back(CreateEntry(i)); @@ -63,14 +65,18 @@ } ~TestDelegate() override {} - void AddObserver(Observer* observer) override { - observers_.AddObserver(observer); - SendSavedPasswordsList(); - SendPasswordExceptionsList(); + void SendSavedPasswordsList() override { + PasswordsPrivateEventRouter* router = + PasswordsPrivateEventRouterFactory::GetForProfile(profile_); + if (router) + router->OnSavedPasswordsListChanged(current_entries_); } - void RemoveObserver(Observer* observer) override { - observers_.RemoveObserver(observer); + void SendPasswordExceptionsList() override { + PasswordsPrivateEventRouter* router = + PasswordsPrivateEventRouterFactory::GetForProfile(profile_); + if (router) + router->OnPasswordExceptionsListChanged(current_exceptions_); } void RemoveSavedPassword( @@ -99,30 +105,23 @@ content::WebContents* web_contents) override { // Return a mocked password value. std::string plaintext_password(kPlaintextPassword); - FOR_EACH_OBSERVER( - Observer, observers_, - OnPlaintextPasswordFetched(origin_url, username, plaintext_password)); + PasswordsPrivateEventRouter* router = + PasswordsPrivateEventRouterFactory::GetForProfile(profile_); + if (router) { + router->OnPlaintextPasswordFetched(origin_url, username, + plaintext_password); + } } + void SetProfile(Profile* profile) { profile_ = profile; } + private: - void SendSavedPasswordsList() { - FOR_EACH_OBSERVER(Observer, observers_, - OnSavedPasswordsListChanged(current_entries_)); - } - - void SendPasswordExceptionsList() { - FOR_EACH_OBSERVER(Observer, observers_, - OnPasswordExceptionsListChanged(current_exceptions_)); - } - // The current list of entries/exceptions. Cached here so that when new // observers are added, this delegate can send the current lists without // having to request them from |password_manager_presenter_| again. std::vector<api::passwords_private::PasswordUiEntry> current_entries_; std::vector<std::string> current_exceptions_; - - // The observers. - base::ObserverList<Observer> observers_; + Profile* profile_; }; class PasswordsPrivateApiTest : public ExtensionApiTest { @@ -152,6 +151,7 @@ ExtensionApiTest::SetUpOnMainThread(); PasswordsPrivateDelegateFactory::GetInstance()->SetTestingFactory( profile(), &PasswordsPrivateApiTest::GetPasswordsPrivateDelegate); + s_test_delegate_->SetProfile(profile()); content::RunAllPendingInMessageLoop(); }
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h index 9c1ad66..f7a15c6 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h
@@ -38,30 +38,11 @@ public: ~PasswordsPrivateDelegate() override {} - // An interface used to notify clients (observers) of this object that - // saved passwords, password exceptions, and plaintext passwords are ready to - // be consumed by the UI. Register an observer via - // PasswordsPrivateDelegate::AddObserver(). - class Observer { - public: - virtual void OnSavedPasswordsListChanged( - const std::vector<api::passwords_private::PasswordUiEntry>& entries) {} - virtual void OnPasswordExceptionsListChanged( - const std::vector<std::string>& exceptions) {} - virtual void OnPlaintextPasswordFetched( - const std::string& origin_url, - const std::string& username, - const std::string& plaintext_password) {} + // Sends the saved passwords list to the event router. + virtual void SendSavedPasswordsList() = 0; - protected: - virtual ~Observer() {} - }; - - // Adds |observer| to be notified when password data changes. - virtual void AddObserver(Observer* observer) = 0; - - // Removes |observer| from the observer list. - virtual void RemoveObserver(Observer* observer) = 0; + // Sends the password exceptions list to the event router. + virtual void SendPasswordExceptionsList() = 0; // Removes the saved password entry corresponding to |origin_url| and // |username|.
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc index a0a9299c..f17f7d3 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
@@ -6,6 +6,8 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h" +#include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" #include "chrome/common/pref_names.h" @@ -40,20 +42,18 @@ PasswordsPrivateDelegateImpl::~PasswordsPrivateDelegateImpl() {} -void PasswordsPrivateDelegateImpl::AddObserver(Observer* observer) { - observers_.AddObserver(observer); - - // Send the current cached lists to the new observer. - ExecuteFunction(base::Bind( - &PasswordsPrivateDelegateImpl::SendSavedPasswordsList, - base::Unretained(this))); - ExecuteFunction(base::Bind( - &PasswordsPrivateDelegateImpl::SendPasswordExceptionsList, - base::Unretained(this))); +void PasswordsPrivateDelegateImpl::SendSavedPasswordsList() { + PasswordsPrivateEventRouter* router = + PasswordsPrivateEventRouterFactory::GetForProfile(profile_); + if (router) + router->OnSavedPasswordsListChanged(current_entries_); } -void PasswordsPrivateDelegateImpl::RemoveObserver(Observer* observer) { - observers_.RemoveObserver(observer); +void PasswordsPrivateDelegateImpl::SendPasswordExceptionsList() { + PasswordsPrivateEventRouter* router = + PasswordsPrivateEventRouterFactory::GetForProfile(profile_); + if (router) + router->OnPasswordExceptionsListChanged(current_exceptions_); } void PasswordsPrivateDelegateImpl::RemoveSavedPassword( @@ -138,10 +138,12 @@ const std::string& origin_url, const std::string& username, const base::string16& password_value) { - FOR_EACH_OBSERVER( - Observer, observers_, - OnPlaintextPasswordFetched(origin_url, username, - base::UTF16ToUTF8(password_value))); + PasswordsPrivateEventRouter* router = + PasswordsPrivateEventRouterFactory::GetForProfile(profile_); + if (router) { + router->OnPlaintextPasswordFetched(origin_url, username, + base::UTF16ToUTF8(password_value)); + } } void PasswordsPrivateDelegateImpl::SetPasswordList( @@ -163,6 +165,7 @@ entry.login_pair.origin_url = password_manager::GetHumanReadableOrigin(*form); entry.login_pair.username = base::UTF16ToUTF8(form->username_value); + entry.link_url = form->origin.spec(); entry.num_characters_in_password = form->password_value.length(); if (!form->federation_origin.unique()) { @@ -180,11 +183,6 @@ InitializeIfNecessary(); } -void PasswordsPrivateDelegateImpl::SendSavedPasswordsList() { - FOR_EACH_OBSERVER(Observer, observers_, - OnSavedPasswordsListChanged(current_entries_)); -} - void PasswordsPrivateDelegateImpl::SetPasswordExceptionList( const std::vector<std::unique_ptr<autofill::PasswordForm>>& password_exception_list) { @@ -210,12 +208,6 @@ InitializeIfNecessary(); } -void PasswordsPrivateDelegateImpl::SendPasswordExceptionsList() { - FOR_EACH_OBSERVER( - Observer, observers_, - Observer::OnPasswordExceptionsListChanged(current_exceptions_)); -} - #if !defined(OS_ANDROID) gfx::NativeWindow PasswordsPrivateDelegateImpl::GetNativeWindow() const { DCHECK(web_contents_);
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h index 707db48..aecaa46 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h
@@ -39,8 +39,8 @@ ~PasswordsPrivateDelegateImpl() override; // PasswordsPrivateDelegate implementation. - void AddObserver(Observer* observer) override; - void RemoveObserver(Observer* observer) override; + void SendSavedPasswordsList() override; + void SendPasswordExceptionsList() override; void RemoveSavedPassword( const std::string& origin_url, const std::string& username) override; void RemovePasswordException(const std::string& exception_url) override; @@ -84,8 +84,6 @@ void RequestShowPasswordInternal(const std::string& origin_url, const std::string& username, content::WebContents* web_contents); - void SendSavedPasswordsList(); - void SendPasswordExceptionsList(); // Not owned by this class. Profile* profile_; @@ -115,9 +113,6 @@ // NativeWindow for the window where the API was called. content::WebContents* web_contents_; - // The observers. - base::ObserverList<Observer> observers_; - // Map from origin URL and username to the index of |password_list_| at which // the corresponding entry resides. std::map<std::string, size_t> login_pair_to_index_map_;
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc index e9fb4d5..3c2fd2a9 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc
@@ -12,6 +12,7 @@ #include "base/bind_helpers.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/passwords_private.h" @@ -22,9 +23,7 @@ PasswordsPrivateEventRouter::PasswordsPrivateEventRouter( content::BrowserContext* context) : context_(context), - event_router_(nullptr), - listening_(false), - ignore_updates_(false) { + event_router_(nullptr) { // Register with the event router so we know when renderers are listening to // our events. We first check and see if there *is* an event router, because // some unit tests try to create all context services, but don't initialize @@ -49,33 +48,16 @@ void PasswordsPrivateEventRouter::Shutdown() { if (event_router_) event_router_->UnregisterObserver(this); - - PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(context_, - false /* create */); - if (delegate) - delegate->RemoveObserver(this); } void PasswordsPrivateEventRouter::OnListenerAdded( const EventListenerInfo& details) { - // Start listening to change events and propagate the original lists to - // listeners. - { - // Some delegates will immediately update observers. Since we dispatch the - // events again below, we want to ignore this here. - // TODO(stevenjb): Fix this. crbug.com/598826. - base::AutoReset<bool> ignore_updates(&ignore_updates_, true); - StartOrStopListeningForChanges(); + PasswordsPrivateDelegate* delegate = + PasswordsPrivateDelegateFactory::GetForBrowserContext(context_, true); + if (delegate) { + delegate->SendSavedPasswordsList(); + delegate->SendPasswordExceptionsList(); } - SendSavedPasswordListToListeners(); - SendPasswordExceptionListToListeners(); -} - -void PasswordsPrivateEventRouter::OnListenerRemoved( - const EventListenerInfo& details) { - // Stop listening to events if there are no more listeners. - StartOrStopListeningForChanges(); } void PasswordsPrivateEventRouter::OnSavedPasswordsListChanged( @@ -86,7 +68,7 @@ } void PasswordsPrivateEventRouter::SendSavedPasswordListToListeners() { - if (!cached_saved_password_parameters_.get() || ignore_updates_) + if (!cached_saved_password_parameters_.get()) // If there is nothing to send, return early. return; @@ -106,7 +88,7 @@ } void PasswordsPrivateEventRouter::SendPasswordExceptionListToListeners() { - if (!cached_password_exception_parameters_.get() || ignore_updates_) + if (!cached_password_exception_parameters_.get()) // If there is nothing to send, return early. return; @@ -136,31 +118,6 @@ event_router_->BroadcastEvent(std::move(extension_event)); } -void PasswordsPrivateEventRouter::StartOrStopListeningForChanges() { - bool should_listen_for_saved_password_changes = - event_router_->HasEventListener( - api::passwords_private::OnSavedPasswordsListChanged::kEventName); - bool should_listen_for_password_exception_changes = - event_router_->HasEventListener( - api::passwords_private::OnPasswordExceptionsListChanged::kEventName); - bool should_listen_for_plaintext_password_retrieval = - event_router_->HasEventListener( - api::passwords_private::OnPlaintextPasswordRetrieved::kEventName); - bool should_listen = should_listen_for_saved_password_changes || - should_listen_for_password_exception_changes || - should_listen_for_plaintext_password_retrieval; - - PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(context_, - true /* create */); - if (should_listen && !listening_) - delegate->AddObserver(this); - else if (!should_listen && listening_) - delegate->RemoveObserver(this); - - listening_ = should_listen; -} - PasswordsPrivateEventRouter* PasswordsPrivateEventRouter::Create( content::BrowserContext* context) { return new PasswordsPrivateEventRouter(context);
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h index a91216e..c7a7f51 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h
@@ -6,7 +6,7 @@ #define CHROME_BROWSER_EXTENSIONS_API_PASSWORDS_PRIVATE_PASSWORDS_PRIVATE_EVENT_ROUTER_H_ #include "base/macros.h" -#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate.h" +#include "chrome/common/extensions/api/passwords_private.h" #include "components/keyed_service/core/keyed_service.h" #include "extensions/browser/event_router.h" @@ -21,13 +21,31 @@ // onPasswordExceptionsListChanged events of changes. class PasswordsPrivateEventRouter : public KeyedService, - public EventRouter::Observer, - public PasswordsPrivateDelegate::Observer { + public EventRouter::Observer { public: static PasswordsPrivateEventRouter* Create( content::BrowserContext* browser_context); ~PasswordsPrivateEventRouter() override; + // Notifies listeners of updated passwords. + // |entries| The new list of saved passwords. + void OnSavedPasswordsListChanged( + const std::vector<api::passwords_private::PasswordUiEntry>& entries); + + // Notifies listeners of updated exceptions. + // |exceptions| The new list of password exceptions. + void OnPasswordExceptionsListChanged( + const std::vector<std::string>& exceptions); + + // Notifies listeners after fetching a plain-text password. + // |origin_url| The origin which the password is saved for. + // |username| The username that this password belongs to. + // |plaintext_password| The human-readable password. + void OnPlaintextPasswordFetched( + const std::string& origin_url, + const std::string& username, + const std::string& plaintext_password); + protected: explicit PasswordsPrivateEventRouter(content::BrowserContext* context); @@ -36,25 +54,8 @@ // EventRouter::Observer overrides: void OnListenerAdded(const EventListenerInfo& details) override; - void OnListenerRemoved(const EventListenerInfo& details) override; - - // PasswordsPrivateDelegate::Observer overrides: - void OnSavedPasswordsListChanged( - const std::vector<api::passwords_private::PasswordUiEntry>& entries) - override; - void OnPasswordExceptionsListChanged( - const std::vector<std::string>& exceptions) override; - void OnPlaintextPasswordFetched( - const std::string& origin_url, - const std::string& username, - const std::string& plaintext_password) override; private: - // Either listens or unlistens for changes to saved passwords, password - // exceptions, or the retrieval of plaintext passwords, depending on whether - // clients are listening to the passwordsPrivate API events. - void StartOrStopListeningForChanges(); - void SendSavedPasswordListToListeners(); void SendPasswordExceptionListToListeners(); @@ -67,12 +68,6 @@ std::unique_ptr<base::ListValue> cached_saved_password_parameters_; std::unique_ptr<base::ListValue> cached_password_exception_parameters_; - // Whether this class is currently listening for changes to password changes. - bool listening_; - - // True if we should ignore an update from PasswordsPrivateDelegate. - bool ignore_updates_; - DISALLOW_COPY_AND_ASSIGN(PasswordsPrivateEventRouter); };
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc index cd55393e..33d6ba4 100644 --- a/chrome/browser/io_thread.cc +++ b/chrome/browser/io_thread.cc
@@ -67,7 +67,6 @@ #include "net/cert/cert_verifier.h" #include "net/cert/cert_verify_proc.h" #include "net/cert/ct_known_logs.h" -#include "net/cert/ct_known_logs_static.h" #include "net/cert/ct_log_verifier.h" #include "net/cert/ct_policy_enforcer.h" #include "net/cert/ct_verifier.h"
diff --git a/chrome/browser/jumplist_win.cc b/chrome/browser/jumplist_win.cc index 35c5e93..e5db11b4 100644 --- a/chrome/browser/jumplist_win.cc +++ b/chrome/browser/jumplist_win.cc
@@ -20,7 +20,7 @@ #include "chrome/browser/metrics/jumplist_metrics_win.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/tab_restore_service_factory.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" @@ -277,7 +277,7 @@ return; app_id_ = - shell_integration::GetChromiumModelIdForProfile(profile_->GetPath()); + shell_integration::win::GetChromiumModelIdForProfile(profile_->GetPath()); icon_dir_ = profile_->GetPath().Append(chrome::kJumpListIconDirname); scoped_refptr<history::TopSites> top_sites =
diff --git a/chrome/browser/lifetime/keep_alive_registry.cc b/chrome/browser/lifetime/keep_alive_registry.cc index 31160b80..270005a 100644 --- a/chrome/browser/lifetime/keep_alive_registry.cc +++ b/chrome/browser/lifetime/keep_alive_registry.cc
@@ -45,7 +45,7 @@ KeepAliveRegistry::~KeepAliveRegistry() { DLOG_IF(ERROR, registered_count_ > 0 || registered_keep_alives_.size() > 0) - << "KeepAliveRegistry not empty at destruction time. State: " << *this; + << "KeepAliveRegistry not empty at destruction time."; } void KeepAliveRegistry::Register(KeepAliveOrigin origin, @@ -68,7 +68,7 @@ if (new_restart_allowed != old_restart_allowed) OnRestartAllowedChanged(new_restart_allowed); - DVLOG(1) << "New state of the KeepAliveRegistry: " << *this; + DVLOG(1) << "New state of the KeepAliveRegistry."; } void KeepAliveRegistry::Unregister(KeepAliveOrigin origin, @@ -96,7 +96,7 @@ if (new_keeping_alive != old_keeping_alive) OnKeepAliveStateChanged(new_keeping_alive); - DVLOG(1) << "New state of the KeepAliveRegistry: " << *this; + DVLOG(1) << "New state of the KeepAliveRegistry."; } void KeepAliveRegistry::OnKeepAliveStateChanged(bool new_keeping_alive) {
diff --git a/chrome/browser/lifetime/keep_alive_registry.h b/chrome/browser/lifetime/keep_alive_registry.h index 5bb6cbe..57ab7967 100644 --- a/chrome/browser/lifetime/keep_alive_registry.h +++ b/chrome/browser/lifetime/keep_alive_registry.h
@@ -40,8 +40,10 @@ friend struct base::DefaultSingletonTraits<KeepAliveRegistry>; // Friend to be able to use Register/Unregister friend class ScopedKeepAlive; +#ifndef NDEBUG friend std::ostream& operator<<(std::ostream& out, const KeepAliveRegistry& registry); +#endif // NDEBUG KeepAliveRegistry(); ~KeepAliveRegistry();
diff --git a/chrome/browser/metrics/leak_detector_controller.cc b/chrome/browser/metrics/leak_detector_controller.cc index 06762ea0..8c4fff88 100644 --- a/chrome/browser/metrics/leak_detector_controller.cc +++ b/chrome/browser/metrics/leak_detector_controller.cc
@@ -105,20 +105,19 @@ LeakDetector::GetInstance()->RemoveObserver(this); } -void LeakDetectorController::OnLeakFound( - const LeakDetector::LeakReport& report) { +void LeakDetectorController::OnLeaksFound( + const std::vector<MemoryLeakReportProto>& reports) { DCHECK(thread_checker_.CalledOnValidThread()); - // Initialize the new report with the protobuf template, which contains some - // pre-filled data (parameter values). - stored_reports_.push_back(leak_report_proto_template_); - MemoryLeakReportProto* proto = &stored_reports_.back(); + for (const auto& report : reports) { + // Initialize the new report with the protobuf template, which contains some + // pre-filled data (parameter values). + stored_reports_.push_back(leak_report_proto_template_); + MemoryLeakReportProto* proto = &stored_reports_.back(); - // Fill in the remaining fields of the protobuf with data from |report|. - proto->set_size_bytes(report.alloc_size_bytes); - proto->mutable_call_stack()->Reserve(report.call_stack.size()); - for (uintptr_t call_stack_entry : report.call_stack) - proto->mutable_call_stack()->Add(call_stack_entry); + // Merge in the other fields. + proto->MergeFrom(report); + } } void LeakDetectorController::GetLeakReports(
diff --git a/chrome/browser/metrics/leak_detector_controller.h b/chrome/browser/metrics/leak_detector_controller.h index 2bf53535..d154f4ab 100644 --- a/chrome/browser/metrics/leak_detector_controller.h +++ b/chrome/browser/metrics/leak_detector_controller.h
@@ -27,7 +27,7 @@ protected: // LeakDetector::Observer: - void OnLeakFound(const LeakDetector::LeakReport& report) override; + void OnLeaksFound(const std::vector<MemoryLeakReportProto>& reports) override; private: // All leak reports received through OnLeakFound() are stored in protobuf
diff --git a/chrome/browser/metrics/leak_detector_controller_unittest.cc b/chrome/browser/metrics/leak_detector_controller_unittest.cc index 4da0b5d3..66473f6 100644 --- a/chrome/browser/metrics/leak_detector_controller_unittest.cc +++ b/chrome/browser/metrics/leak_detector_controller_unittest.cc
@@ -13,10 +13,23 @@ namespace metrics { +namespace { + +// Converts a vector of values into a protobuf RepeatedField. Although there is +// no hard requirement, T should be a POD type since that is what RepeatedField +// is used for in protobuf classes. +template <typename T> +void InitializeRepeatedField(const std::vector<T>& input, + ::google::protobuf::RepeatedField<T>* output) { + *output = ::google::protobuf::RepeatedField<T>(input.begin(), input.end()); +} + +} // namespace + // Test class for LeakDetectorController that exposes protected methods. class TestLeakDetectorController : public LeakDetectorController { public: - using LeakDetectorController::OnLeakFound; + using LeakDetectorController::OnLeaksFound; TestLeakDetectorController() {} @@ -24,8 +37,6 @@ DISALLOW_COPY_AND_ASSIGN(TestLeakDetectorController); }; -using LeakReport = LeakDetector::LeakReport; - // Use a global instance of the test class because LeakDetectorController // initializes class LeakDetector, which can only be initialized once, enforced // by an internal CHECK. Multiple initializations of LeakDetectorController in @@ -37,12 +48,12 @@ LAZY_INSTANCE_INITIALIZER; TEST(LeakDetectorControllerTest, SingleReport) { - LeakReport report; - report.alloc_size_bytes = 8; - report.call_stack = {1, 2, 3, 4}; + MemoryLeakReportProto report; + report.set_size_bytes(8); + InitializeRepeatedField({1, 2, 3, 4}, report.mutable_call_stack()); TestLeakDetectorController* controller = &g_instance.Get(); - controller->OnLeakFound(report); + controller->OnLeaksFound({report}); std::vector<MemoryLeakReportProto> stored_reports; controller->GetLeakReports(&stored_reports); @@ -69,16 +80,69 @@ ASSERT_EQ(0U, stored_reports.size()); } +TEST(LeakDetectorControllerTest, SingleReportHistory) { + MemoryLeakReportProto report; + + auto entry = report.add_alloc_breakdown_history(); + InitializeRepeatedField({100, 200, 300}, entry->mutable_counts_by_size()); + entry->set_count_for_call_stack(15); + + entry = report.add_alloc_breakdown_history(); + InitializeRepeatedField({150, 250, 350, 650}, + entry->mutable_counts_by_size()); + entry->set_count_for_call_stack(30); + + entry = report.add_alloc_breakdown_history(); + InitializeRepeatedField({200, 300, 400, 700, 800}, + entry->mutable_counts_by_size()); + entry->set_count_for_call_stack(45); + + TestLeakDetectorController* controller = &g_instance.Get(); + controller->OnLeaksFound({report}); + + std::vector<MemoryLeakReportProto> stored_reports; + controller->GetLeakReports(&stored_reports); + ASSERT_EQ(1U, stored_reports.size()); + + const auto& history = stored_reports[0].alloc_breakdown_history(); + ASSERT_EQ(3, history.size()); + + ASSERT_EQ(3, history.Get(0).counts_by_size().size()); + EXPECT_EQ(100U, history.Get(0).counts_by_size(0)); + EXPECT_EQ(200U, history.Get(0).counts_by_size(1)); + EXPECT_EQ(300U, history.Get(0).counts_by_size(2)); + EXPECT_EQ(15U, history.Get(0).count_for_call_stack()); + + ASSERT_EQ(4, history.Get(1).counts_by_size_size()); + EXPECT_EQ(150U, history.Get(1).counts_by_size(0)); + EXPECT_EQ(250U, history.Get(1).counts_by_size(1)); + EXPECT_EQ(350U, history.Get(1).counts_by_size(2)); + EXPECT_EQ(650U, history.Get(1).counts_by_size(3)); + EXPECT_EQ(30U, history.Get(1).count_for_call_stack()); + + ASSERT_EQ(5, history.Get(2).counts_by_size_size()); + EXPECT_EQ(200U, history.Get(2).counts_by_size(0)); + EXPECT_EQ(300U, history.Get(2).counts_by_size(1)); + EXPECT_EQ(400U, history.Get(2).counts_by_size(2)); + EXPECT_EQ(700U, history.Get(2).counts_by_size(3)); + EXPECT_EQ(800U, history.Get(2).counts_by_size(4)); + EXPECT_EQ(45U, history.Get(2).count_for_call_stack()); + + // No more reports. + controller->GetLeakReports(&stored_reports); + ASSERT_EQ(0U, stored_reports.size()); +} + TEST(LeakDetectorControllerTest, MultipleReportsSeparately) { TestLeakDetectorController* controller = &g_instance.Get(); std::vector<MemoryLeakReportProto> stored_reports; // Pass in first report. - LeakReport report; - report.alloc_size_bytes = 8; - report.call_stack = {1, 2, 3, 4}; + MemoryLeakReportProto report1; + report1.set_size_bytes(8); + InitializeRepeatedField({1, 2, 3, 4}, report1.mutable_call_stack()); - controller->OnLeakFound(report); + controller->OnLeaksFound({report1}); controller->GetLeakReports(&stored_reports); ASSERT_EQ(1U, stored_reports.size()); @@ -93,9 +157,10 @@ ASSERT_EQ(0U, stored_reports.size()); // Pass in second report. - report.alloc_size_bytes = 16; - report.call_stack = {5, 6, 7, 8, 9, 10}; - controller->OnLeakFound(report); + MemoryLeakReportProto report2; + report2.set_size_bytes(16); + InitializeRepeatedField({5, 6, 7, 8, 9, 10}, report2.mutable_call_stack()); + controller->OnLeaksFound({report2}); controller->GetLeakReports(&stored_reports); ASSERT_EQ(1U, stored_reports.size()); @@ -113,9 +178,11 @@ ASSERT_EQ(0U, stored_reports.size()); // Pass in third report. - report.alloc_size_bytes = 24; - report.call_stack = {9, 10, 11, 12, 13, 14, 15, 16}; - controller->OnLeakFound(report); + MemoryLeakReportProto report3; + report3.set_size_bytes(24); + InitializeRepeatedField({9, 10, 11, 12, 13, 14, 15, 16}, + report3.mutable_call_stack()); + controller->OnLeaksFound({report3}); controller->GetLeakReports(&stored_reports); ASSERT_EQ(1U, stored_reports.size()); @@ -136,18 +203,17 @@ } TEST(LeakDetectorControllerTest, MultipleReportsTogether) { - LeakReport report1, report2, report3; - report1.alloc_size_bytes = 8; - report1.call_stack = {1, 2, 3, 4}; - report2.alloc_size_bytes = 16; - report2.call_stack = {5, 6, 7, 8, 9, 10}; - report3.alloc_size_bytes = 24; - report3.call_stack = {9, 10, 11, 12, 13, 14, 15, 16}; + std::vector<MemoryLeakReportProto> reports(3); + reports[0].set_size_bytes(8); + InitializeRepeatedField({1, 2, 3, 4}, reports[0].mutable_call_stack()); + reports[1].set_size_bytes(16); + InitializeRepeatedField({5, 6, 7, 8, 9, 10}, reports[1].mutable_call_stack()); + reports[2].set_size_bytes(24); + InitializeRepeatedField({9, 10, 11, 12, 13, 14, 15, 16}, + reports[2].mutable_call_stack()); TestLeakDetectorController* controller = &g_instance.Get(); - controller->OnLeakFound(report1); - controller->OnLeakFound(report2); - controller->OnLeakFound(report3); + controller->OnLeaksFound(reports); std::vector<MemoryLeakReportProto> stored_reports;
diff --git a/chrome/browser/policy/test/policy_testserver.py b/chrome/browser/policy/test/policy_testserver.py index c7f933d..316d855 100644 --- a/chrome/browser/policy/test/policy_testserver.py +++ b/chrome/browser/policy/test/policy_testserver.py
@@ -308,6 +308,12 @@ elif request_type == 'status_upload': response = self.ProcessStatusUploadRequest( rmsg.device_status_report_request, rmsg.session_status_report_request) + elif request_type == 'device_attribute_update_permission': + response = self.ProcessDeviceAttributeUpdatePermissionRequest() + elif request_type == 'device_attribute_update': + response = self.ProcessDeviceAttributeUpdateRequest() + elif request_type == 'remote_commands': + response = self.ProcessRemoteCommandsRequest() else: return (400, 'Invalid request parameter') @@ -586,6 +592,38 @@ return (200, response) + def ProcessDeviceAttributeUpdatePermissionRequest(self): + """Handles a device attribute update permission request. + + Returns: + A tuple of HTTP status code and response data to send to the client. + """ + response = dm.DeviceManagementResponse() + response.device_attribute_update_permission_response.result = ( + dm.DeviceAttributeUpdatePermissionResponse.ATTRIBUTE_UPDATE_ALLOWED) + + return (200, response) + + def ProcessDeviceAttributeUpdateRequest(self): + """Handles a device attribute update request. + + Returns: + A tuple of HTTP status code and response data to send to the client. + """ + response = dm.DeviceManagementResponse() + response.device_attribute_update_response.result = ( + dm.DeviceAttributeUpdateResponse.ATTRIBUTE_UPDATE_SUCCESS) + + return (200, response) + + def ProcessRemoteCommandsRequest(self): + """Handles a remote command request. + + Returns: + A tuple of HTTP status code and response data to send to the client. + """ + return (200, '') + def SetProtobufMessageField(self, group_message, field, field_value): """Sets a field in a protobuf message.
diff --git a/chrome/browser/process_singleton_win.cc b/chrome/browser/process_singleton_win.cc index 45d98416..5706f7bd 100644 --- a/chrome/browser/process_singleton_win.cc +++ b/chrome/browser/process_singleton_win.cc
@@ -223,10 +223,8 @@ // TODO(manzagop): add a metric for the number of captured hang reports, for // comparison with uploaded count? - // Only report on canary (or unspecified). - const version_info::Channel channel = chrome::GetChannel(); - if (channel != version_info::Channel::UNKNOWN && - channel != version_info::Channel::CANARY) { + // Only report on canary. + if (chrome::GetChannel() != version_info::Channel::CANARY) { return; } // TODO(manzagop): add a metric for the number of times this does not match.
diff --git a/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc b/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc index ba1cf54..2af9b971 100644 --- a/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc +++ b/chrome/browser/profiles/profile_shortcut_manager_unittest_win.cc
@@ -18,7 +18,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_shortcut_manager.h" #include "chrome/browser/profiles/profile_shortcut_manager_win.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/grit/chromium_strings.h" #include "chrome/installer/util/browser_distribution.h" #include "chrome/installer/util/product.h" @@ -143,7 +143,7 @@ base::win::ShortcutProperties expected_properties; expected_properties.set_app_id( - shell_integration::GetChromiumModelIdForProfile(profile_path)); + shell_integration::win::GetChromiumModelIdForProfile(profile_path)); expected_properties.set_target(GetExePath()); expected_properties.set_description(GetDistribution()->GetAppDescription()); expected_properties.set_dual_mode(false);
diff --git a/chrome/browser/profiles/profile_shortcut_manager_win.cc b/chrome/browser/profiles/profile_shortcut_manager_win.cc index ae5d73c1..cad5df2 100644 --- a/chrome/browser/profiles/profile_shortcut_manager_win.cc +++ b/chrome/browser/profiles/profile_shortcut_manager_win.cc
@@ -29,7 +29,7 @@ #include "chrome/browser/profiles/profile_avatar_icon_util.h" #include "chrome/browser/profiles/profile_info_cache_observer.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "chrome/grit/chromium_strings.h" @@ -542,8 +542,8 @@ properties.set_arguments(base::string16()); } - properties.set_app_id( - shell_integration::GetChromiumModelIdForProfile(params.profile_path)); + properties.set_app_id(shell_integration::win::GetChromiumModelIdForProfile( + params.profile_path)); ShellUtil::ShortcutOperation operation = ShellUtil::SHELL_SHORTCUT_REPLACE_EXISTING;
diff --git a/chrome/browser/resources/chromeos/login/login_shared.js b/chrome/browser/resources/chromeos/login/login_shared.js index 626338c..d3d378ea 100644 --- a/chrome/browser/resources/chromeos/login/login_shared.js +++ b/chrome/browser/resources/chromeos/login/login_shared.js
@@ -286,11 +286,40 @@ * Login for telemetry. * @param {string} username Login username. * @param {string} password Login password. + * @param {boolean} enterpriseEnroll Login as an enterprise enrollment? */ - Oobe.loginForTesting = function(username, password, gaia_id) { + Oobe.loginForTesting = function(username, password, gaia_id, + enterpriseEnroll = false) { + // Helper method that runs |fn| after |screenName| is visible. + function waitForOobeScreen(screenName, fn) { + if (Oobe.getInstance().currentScreen.id === screenName) { + fn(); + } else { + $('oobe').addEventListener('screenchanged', function handler(e) { + if (e.detail == screenName) { + $('oobe').removeEventListener('screenchanged', handler); + fn(); + } + }); + } + } + Oobe.disableSigninUI(); chrome.send('skipToLoginForTesting', [username]); - chrome.send('completeLogin', [gaia_id, username, password, false]); + + if (!enterpriseEnroll) { + chrome.send('completeLogin', [gaia_id, username, password, false]); + } else { + waitForOobeScreen('gaia-signin', function() { + chrome.send('toggleEnrollmentScreen'); + chrome.send('toggleFakeEnrollment'); + }); + + waitForOobeScreen('oauth-enrollment', function() { + chrome.send('oauthEnrollCompleteLogin', [username, 'authcode']); + chrome.send('completeLogin', [gaia_id, username, password, false]); + }); + } }; /**
diff --git a/chrome/browser/resources/media_router/elements/issue_banner/issue_banner.css b/chrome/browser/resources/media_router/elements/issue_banner/issue_banner.css index 9730fa9..ca6f86b 100644 --- a/chrome/browser/resources/media_router/elements/issue_banner/issue_banner.css +++ b/chrome/browser/resources/media_router/elements/issue_banner/issue_banner.css
@@ -32,6 +32,7 @@ background-color: var(--paper-grey-800); overflow: hidden; padding: 16px; + width: inherit; } .non-blocking > #buttons { @@ -41,6 +42,10 @@ width: 100%; } +.non-blocking > #buttons > #default-button { + -webkit-margin-end: 24px; +} + .non-blocking > div > #title { color: rgba(255, 255, 255, 0.87); }
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css index 5e0f42e..89ba3ab6 100644 --- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css +++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
@@ -99,6 +99,7 @@ #issue-banner.non-blocking { bottom: 0; + display: block; margin-top: 0; }
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js index 4aebf74..46bf89b 100644 --- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js +++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
@@ -1088,18 +1088,29 @@ }, /** - * Updates |currentView_| if there is a new blocking issue. Clears any - * pending route creation properties if the issue corresponds with - * |pendingCreatedRouteId_|. + * Updates |currentView_| if there is a new blocking issue or a blocking + * issue is resolved. Clears any pending route creation properties if the + * issue corresponds with |pendingCreatedRouteId_|. * - * @param {?media_router.Issue} issue The new issue. + * @param {?media_router.Issue} issue The new issue, or null if the + * blocking issue was resolved. * @private */ maybeShowIssueView_: function(issue) { - if (!!issue && issue.isBlocking) - this.currentView_ = media_router.MediaRouterView.ISSUE; - else - this.updateElementPositioning_(); + if (!!issue) { + if (issue.isBlocking) { + this.currentView_ = media_router.MediaRouterView.ISSUE; + } else if (this.currentView_ == media_router.MediaRouterView.SINK_LIST) { + // Make space for the non-blocking issue in the sink list. + this.updateElementPositioning_(); + } + } else { + // Switch back to the sink list if the issue was cleared. If the previous + // issue was non-blocking, this would be a no-op. It is expected that + // the only way to clear an issue is by user action; the IssueManager + // (C++ side) does not clear issues in the UI. + this.currentView_ = media_router.MediaRouterView.SINK_LIST; + } if (!!this.pendingCreatedRouteId_ && !!issue && issue.routeId == this.pendingCreatedRouteId_) {
diff --git a/chrome/browser/resources/settings/controls/settings_dropdown_menu.html b/chrome/browser/resources/settings/controls/settings_dropdown_menu.html index 65e00bf..57244150 100644 --- a/chrome/browser/resources/settings/controls/settings_dropdown_menu.html +++ b/chrome/browser/resources/settings/controls/settings_dropdown_menu.html
@@ -2,7 +2,7 @@ <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-dropdown-menu/paper-dropdown-menu.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-item/paper-item.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-menu/paper-menu.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-listbox/paper-listbox.html"> <link rel="import" href="chrome://md-settings/controls/pref_control_behavior.html"> <link rel="import" href="chrome://md-settings/prefs/pref_util.html"> <link rel="import" href="chrome://md-settings/settings_shared_css.html"> @@ -29,7 +29,7 @@ <paper-dropdown-menu id="dropdownMenu" label="[[menuLabel_]]" on-iron-select="onSelect_" no-label-float$="[[noLabelFloat]]" disabled="[[shouldDisableMenu_(disabled, menuOptions.*)]]"> - <paper-menu class="dropdown-content" selected="{{selected_}}" + <paper-listbox class="dropdown-content" selected="{{selected_}}" attr-for-selected="data-value"> <template is="dom-repeat" items="[[menuOptions]]"> <paper-item data-value$="[[item.value]]">[[item.name]]</paper-item> @@ -38,7 +38,7 @@ hidden$="[[!isSelectedNotFound_(selected_)]]"> [[i18n('custom')]] </paper-item> - </paper-menu> + </paper-listbox> </paper-dropdown-menu> </template> <script src="settings_dropdown_menu.js"></script>
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html index 2626e429..83e679a 100644 --- a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html +++ b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_section.html
@@ -79,6 +79,15 @@ -webkit-margin-start: 56px; margin-bottom: 16px; } + + .list-link { + color: black; + text-decoration: none; + } + + .list-link:hover { + text-decoration: underline; + } </style> <!-- TODO(hcarmona): i18n this string and link --> <div id="manageLink">Access your passwords from any device at @@ -96,8 +105,8 @@ items="[[savedPasswords]]"> <template> <div class="list-item"> - <div id="originUrl" - class="website-column">[[item.loginPair.originUrl]]</div> + <a id="originUrl" href="[[item.linkUrl]]" target="_blank" + class="website-column list-link">[[item.loginPair.originUrl]]</a> <div id="username" class="username-column">[[item.loginPair.username]]</div> <div class="password-column">
diff --git a/chrome/browser/resources/settings/site_settings/site_details_permission.html b/chrome/browser/resources/settings/site_settings/site_details_permission.html index b51ecce..7b14d276 100644 --- a/chrome/browser/resources/settings/site_settings/site_details_permission.html +++ b/chrome/browser/resources/settings/site_settings/site_details_permission.html
@@ -6,7 +6,7 @@ <link rel="import" href="chrome://resources/polymer/v1_0/iron-icons/social-icons.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-dropdown-menu/paper-dropdown-menu.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-item/paper-item.html"> -<link rel="import" href="chrome://resources/polymer/v1_0/paper-menu/paper-menu.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-listbox/paper-listbox.html"> <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html"> <link rel="import" href="chrome://md-settings/i18n_setup.html"> <link rel="import" href="chrome://md-settings/settings_shared_css.html"> @@ -29,7 +29,7 @@ </div> <div class="permission-list"> <paper-dropdown-menu> - <paper-menu id="permission" class="dropdown-content" + <paper-listbox id="permission" class="dropdown-content" on-iron-activate="onPermissionMenuIronActivate_" attr-for-selected="data-permission-value"> <paper-item id="allow" @@ -40,7 +40,7 @@ data-permission-value$="[[PermissionValues.BLOCK]]"> [[i18n_.blockAction]] </paper-item> - </paper-menu> + </paper-listbox> </paper-dropdown-menu> </div> </div>
diff --git a/chrome/browser/resources/sync_confirmation/sync_confirmation.html b/chrome/browser/resources/sync_confirmation/sync_confirmation.html index 5095cb90..8111fa4 100644 --- a/chrome/browser/resources/sync_confirmation/sync_confirmation.html +++ b/chrome/browser/resources/sync_confirmation/sync_confirmation.html
@@ -2,7 +2,7 @@ <html i18n-values="dir:textdirection;lang:language"> <head> <meta charset="utf-8"> - <link rel="import" href="chrome://resources/polymer/v1_0/polymer/polymer.html"> + <link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html"> <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> <link rel="stylesheet" href="sync_confirmation.css"></link> @@ -11,6 +11,13 @@ color: var(--google-blue-700); text-decoration: none; } + + .action-container { +<if expr="is_macosx or is_linux"> + flex-flow: row-reverse; + justify-content: flex-start; +</if> + } </style> </head> <body>
diff --git a/chrome/browser/resources/sync_confirmation/sync_confirmation.js b/chrome/browser/resources/sync_confirmation/sync_confirmation.js index 960d6de..f3273fb 100644 --- a/chrome/browser/resources/sync_confirmation/sync_confirmation.js +++ b/chrome/browser/resources/sync_confirmation/sync_confirmation.js
@@ -18,6 +18,7 @@ } function initialize() { + document.addEventListener('keydown', onKeyDown); $('confirmButton').addEventListener('click', onConfirm); $('undoButton').addEventListener('click', onUndo); $('settingsLink').addEventListener('click', onGoToSettings); @@ -33,6 +34,17 @@ $('picture-container').classList.add('loaded'); } + function onKeyDown(e) { + // If the currently focused element isn't something that performs an action + // on "enter" being pressed and the user hits "enter", perform the default + // action of the dialog, which is "OK, Got It". + if (e.keyIdentifier == 'Enter' && + !/^(A|PAPER-BUTTON)$/.test(document.activeElement.tagName)) { + $('confirmButton').click(); + e.preventDefault(); + } + } + return { initialize: initialize, setUserImageURL: setUserImageURL
diff --git a/chrome/browser/search_engines/chrome_template_url_service_client.cc b/chrome/browser/search_engines/chrome_template_url_service_client.cc index 74f8f183..fd788e29 100644 --- a/chrome/browser/search_engines/chrome_template_url_service_client.cc +++ b/chrome/browser/search_engines/chrome_template_url_service_client.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/search_engines/chrome_template_url_service_client.h" +#include "base/memory/ptr_util.h" #include "components/history/core/browser/history_service.h" #include "components/search_engines/template_url_service.h" #include "extensions/common/constants.h" @@ -68,8 +69,8 @@ GURL url(data.url()); if (url.SchemeIs(extensions::kExtensionScheme)) { const std::string& extension_id = url.host(); - template_url->set_extension_info(make_scoped_ptr( - new TemplateURL::AssociatedExtensionInfo( + template_url->set_extension_info( + base::WrapUnique(new TemplateURL::AssociatedExtensionInfo( TemplateURL::OMNIBOX_API_EXTENSION, extension_id))); } }
diff --git a/chrome/browser/search_engines/search_provider_install_data.cc b/chrome/browser/search_engines/search_provider_install_data.cc index 78bd1c4b..fa73b0f0 100644 --- a/chrome/browser/search_engines/search_provider_install_data.cc +++ b/chrome/browser/search_engines/search_provider_install_data.cc
@@ -132,7 +132,8 @@ GoogleURLTracker* google_url_tracker_; scoped_refptr<GoogleURLChangeNotifier> change_notifier_; - scoped_ptr<GoogleURLTracker::Subscription> google_url_updated_subscription_; + std::unique_ptr<GoogleURLTracker::Subscription> + google_url_updated_subscription_; DISALLOW_COPY_AND_ASSIGN(GoogleURLObserver); };
diff --git a/chrome/browser/search_engines/search_provider_install_data.h b/chrome/browser/search_engines/search_provider_install_data.h index 74bebed..aadeae1 100644 --- a/chrome/browser/search_engines/search_provider_install_data.h +++ b/chrome/browser/search_engines/search_provider_install_data.h
@@ -5,12 +5,12 @@ #ifndef CHROME_BROWSER_SEARCH_ENGINES_SEARCH_PROVIDER_INSTALL_DATA_H_ #define CHROME_BROWSER_SEARCH_ENGINES_SEARCH_PROVIDER_INSTALL_DATA_H_ +#include <memory> #include <string> #include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "base/memory/weak_ptr.h" @@ -88,7 +88,7 @@ std::vector<base::Closure> closure_queue_; // Holds results of a load that was done using this class. - scoped_ptr<SearchHostToURLsMap> provider_map_; + std::unique_ptr<SearchHostToURLsMap> provider_map_; // The list of template urls that are owned by the class. ScopedVector<TemplateURL> template_urls_;
diff --git a/chrome/browser/search_engines/search_provider_install_data_unittest.cc b/chrome/browser/search_engines/search_provider_install_data_unittest.cc index 0c415fee..f3ef9a04 100644 --- a/chrome/browser/search_engines/search_provider_install_data_unittest.cc +++ b/chrome/browser/search_engines/search_provider_install_data_unittest.cc
@@ -2,16 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/search_engines/search_provider_install_data.h" + +#include <memory> #include <string> #include "base/bind.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/search_engines/search_provider_install_data.h" #include "chrome/browser/search_engines/template_url_service_test_util.h" #include "chrome/test/base/testing_profile.h" #include "components/search_engines/search_terms_data.h" @@ -142,7 +143,7 @@ // A mock RenderProcessHost that the SearchProviderInstallData will scope its // lifetime to. - scoped_ptr<content::MockRenderProcessHost> process_; + std::unique_ptr<content::MockRenderProcessHost> process_; DISALLOW_COPY_AND_ASSIGN(SearchProviderInstallDataTest); };
diff --git a/chrome/browser/search_engines/template_url_fetcher_unittest.cc b/chrome/browser/search_engines/template_url_fetcher_unittest.cc index 0ceed62..e760c44 100644 --- a/chrome/browser/search_engines/template_url_fetcher_unittest.cc +++ b/chrome/browser/search_engines/template_url_fetcher_unittest.cc
@@ -5,13 +5,14 @@ #include "components/search_engines/template_url_fetcher.h" #include <stddef.h> + +#include <memory> #include <string> #include <utility> #include "base/callback_helpers.h" #include "base/files/file_util.h" #include "base/macros.h" -#include "base/memory/scoped_ptr.h" #include "base/message_loop/message_loop.h" #include "base/path_service.h" #include "base/strings/utf_string_conversions.h" @@ -51,7 +52,7 @@ // this class, this method handles those calls for the test.) void ConfirmAddSearchProvider( base::ScopedClosureRunner* callback_destruction_notifier, - scoped_ptr<TemplateURL> template_url); + std::unique_ptr<TemplateURL> template_url); // Schedules the download of the url. void StartDownload(const base::string16& keyword, @@ -75,11 +76,11 @@ private: content::TestBrowserThreadBundle thread_bundle_; // To set up BrowserThreads. TemplateURLServiceTestUtil test_util_; - scoped_ptr<TemplateURLFetcher> template_url_fetcher_; + std::unique_ptr<TemplateURLFetcher> template_url_fetcher_; net::EmbeddedTestServer test_server_; // The last TemplateURL to come from a callback. - scoped_ptr<TemplateURL> last_callback_template_url_; + std::unique_ptr<TemplateURL> last_callback_template_url_; // How many TemplateURLFetcherTestCallbacks have been destructed. int callbacks_destroyed_; @@ -123,7 +124,7 @@ void TemplateURLFetcherTest::ConfirmAddSearchProvider( base::ScopedClosureRunner* callback_destruction_notifier, - scoped_ptr<TemplateURL> template_url) { + std::unique_ptr<TemplateURL> template_url) { last_callback_template_url_ = std::move(template_url); add_provider_called_++; }
diff --git a/chrome/browser/search_engines/template_url_parser_unittest.cc b/chrome/browser/search_engines/template_url_parser_unittest.cc index ceef65ac..8319d3f 100644 --- a/chrome/browser/search_engines/template_url_parser_unittest.cc +++ b/chrome/browser/search_engines/template_url_parser_unittest.cc
@@ -64,7 +64,7 @@ TemplateURLParser::ParameterFilter* filter); // ParseFile parses the results into this template_url. - scoped_ptr<TemplateURL> template_url_; + std::unique_ptr<TemplateURL> template_url_; private: base::FilePath full_path_;
diff --git a/chrome/browser/search_engines/template_url_scraper_browsertest.cc b/chrome/browser/search_engines/template_url_scraper_browsertest.cc index 9303d73..6a2cfd0a 100644 --- a/chrome/browser/search_engines/template_url_scraper_browsertest.cc +++ b/chrome/browser/search_engines/template_url_scraper_browsertest.cc
@@ -37,9 +37,8 @@ scoped_refptr<content::MessageLoopRunner> message_loop_runner = new content::MessageLoopRunner; - scoped_ptr<TemplateURLService::Subscription> subscription = - model_->RegisterOnLoadedCallback( - message_loop_runner->QuitClosure()); + std::unique_ptr<TemplateURLService::Subscription> subscription = + model_->RegisterOnLoadedCallback(message_loop_runner->QuitClosure()); model_->Load(); message_loop_runner->Run(); } @@ -50,7 +49,7 @@ DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceLoader); }; -scoped_ptr<net::test_server::HttpResponse> SendResponse( +std::unique_ptr<net::test_server::HttpResponse> SendResponse( const net::test_server::HttpRequest& request) { base::FilePath test_data_dir; PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); @@ -59,7 +58,7 @@ .AppendASCII("index.html"); std::string file_contents; EXPECT_TRUE(base::ReadFileToString(index_file, &file_contents)); - scoped_ptr<net::test_server::BasicHttpResponse> response( + std::unique_ptr<net::test_server::BasicHttpResponse> response( new net::test_server::BasicHttpResponse); response->set_content(file_contents); return std::move(response);
diff --git a/chrome/browser/search_engines/template_url_service_android.h b/chrome/browser/search_engines/template_url_service_android.h index 7f403ce..bdb90e5 100644 --- a/chrome/browser/search_engines/template_url_service_android.h +++ b/chrome/browser/search_engines/template_url_service_android.h
@@ -5,10 +5,11 @@ #ifndef CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_ANDROID_H_ #define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_ANDROID_H_ +#include <memory> + #include "base/android/jni_weak_ref.h" #include "base/android/scoped_java_ref.h" #include "base/macros.h" -#include "base/memory/scoped_ptr.h" #include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service_observer.h" @@ -89,7 +90,7 @@ // Pointer to the TemplateUrlService for the main profile. TemplateURLService* template_url_service_; - scoped_ptr<TemplateURLService::Subscription> template_url_subscription_; + std::unique_ptr<TemplateURLService::Subscription> template_url_subscription_; DISALLOW_COPY_AND_ASSIGN(TemplateUrlServiceAndroid); };
diff --git a/chrome/browser/search_engines/template_url_service_factory.cc b/chrome/browser/search_engines/template_url_service_factory.cc index 361ae76..ff32fd4b 100644 --- a/chrome/browser/search_engines/template_url_service_factory.cc +++ b/chrome/browser/search_engines/template_url_service_factory.cc
@@ -7,6 +7,7 @@ #include <string> #include "base/bind.h" +#include "base/memory/ptr_util.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/google/google_url_tracker_factory.h" @@ -40,7 +41,7 @@ } // static -scoped_ptr<KeyedService> TemplateURLServiceFactory::BuildInstanceFor( +std::unique_ptr<KeyedService> TemplateURLServiceFactory::BuildInstanceFor( content::BrowserContext* context) { base::Closure dsp_change_callback; #if defined(ENABLE_RLZ) @@ -49,14 +50,15 @@ rlz::RLZTracker::ChromeOmnibox(), rlz_lib::SET_TO_GOOGLE); #endif Profile* profile = static_cast<Profile*>(context); - return make_scoped_ptr(new TemplateURLService( + return base::WrapUnique(new TemplateURLService( profile->GetPrefs(), - scoped_ptr<SearchTermsData>(new UIThreadSearchTermsData(profile)), + std::unique_ptr<SearchTermsData>(new UIThreadSearchTermsData(profile)), WebDataServiceFactory::GetKeywordWebDataForProfile( profile, ServiceAccessType::EXPLICIT_ACCESS), - scoped_ptr<TemplateURLServiceClient>(new ChromeTemplateURLServiceClient( - HistoryServiceFactory::GetForProfile( - profile, ServiceAccessType::EXPLICIT_ACCESS))), + std::unique_ptr<TemplateURLServiceClient>( + new ChromeTemplateURLServiceClient( + HistoryServiceFactory::GetForProfile( + profile, ServiceAccessType::EXPLICIT_ACCESS))), GoogleURLTrackerFactory::GetForProfile(profile), g_browser_process->rappor_service(), dsp_change_callback)); }
diff --git a/chrome/browser/search_engines/template_url_service_factory.h b/chrome/browser/search_engines/template_url_service_factory.h index 5b2c55a..c83289a 100644 --- a/chrome/browser/search_engines/template_url_service_factory.h +++ b/chrome/browser/search_engines/template_url_service_factory.h
@@ -5,7 +5,8 @@ #ifndef CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_FACTORY_H_ #define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_FACTORY_H_ -#include "base/memory/scoped_ptr.h" +#include <memory> + #include "base/memory/singleton.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h" @@ -20,7 +21,7 @@ static TemplateURLServiceFactory* GetInstance(); - static scoped_ptr<KeyedService> BuildInstanceFor( + static std::unique_ptr<KeyedService> BuildInstanceFor( content::BrowserContext* profile); private:
diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc index e6981d7..3590810 100644 --- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
@@ -3,10 +3,12 @@ // found in the LICENSE file. #include <stddef.h> + +#include <memory> #include <utility> #include "base/macros.h" -#include "base/memory/scoped_ptr.h" +#include "base/memory/ptr_util.h" #include "base/memory/scoped_vector.h" #include "base/run_loop.h" #include "base/strings/string_util.h" @@ -170,8 +172,8 @@ GURL url(data.url()); if (url.SchemeIs(kOmniboxScheme)) { const std::string& extension_id = url.host(); - template_url->set_extension_info(make_scoped_ptr( - new TemplateURL::AssociatedExtensionInfo( + template_url->set_extension_info( + base::WrapUnique(new TemplateURL::AssociatedExtensionInfo( TemplateURL::OMNIBOX_API_EXTENSION, extension_id))); } } @@ -197,8 +199,8 @@ TemplateURLService* model_b() { return test_util_b_->model(); } TestingProfile* profile_a() { return test_util_a_->profile(); } TestChangeProcessor* processor() { return sync_processor_.get(); } - scoped_ptr<syncer::SyncChangeProcessor> PassProcessor(); - scoped_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory(); + std::unique_ptr<syncer::SyncChangeProcessor> PassProcessor(); + std::unique_ptr<syncer::SyncErrorFactory> CreateAndPassSyncErrorFactory(); // Creates a TemplateURL with some test values. The caller owns the returned // TemplateURL*. @@ -231,7 +233,7 @@ syncer::SyncDataList CreateInitialSyncData() const; // Syntactic sugar. - scoped_ptr<TemplateURL> Deserialize(const syncer::SyncData& sync_data); + std::unique_ptr<TemplateURL> Deserialize(const syncer::SyncData& sync_data); // Creates a new TemplateURL copying the fields of |turl| but replacing // the |url| and |guid| and initializing the date_created and last_modified @@ -244,12 +246,13 @@ protected: content::TestBrowserThreadBundle thread_bundle_; // We keep two TemplateURLServices to test syncing between them. - scoped_ptr<TemplateURLServiceTestUtil> test_util_a_; - scoped_ptr<TemplateURLServiceTestUtil> test_util_b_; + std::unique_ptr<TemplateURLServiceTestUtil> test_util_a_; + std::unique_ptr<TemplateURLServiceTestUtil> test_util_b_; // Our dummy ChangeProcessor used to inspect changes pushed to Sync. - scoped_ptr<TestChangeProcessor> sync_processor_; - scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> sync_processor_wrapper_; + std::unique_ptr<TestChangeProcessor> sync_processor_; + std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> + sync_processor_wrapper_; DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceSyncTest); }; @@ -276,14 +279,14 @@ DefaultSearchManager::SetFallbackSearchEnginesDisabledForTesting(false); } -scoped_ptr<syncer::SyncChangeProcessor> +std::unique_ptr<syncer::SyncChangeProcessor> TemplateURLServiceSyncTest::PassProcessor() { return std::move(sync_processor_wrapper_); } -scoped_ptr<syncer::SyncErrorFactory> TemplateURLServiceSyncTest:: - CreateAndPassSyncErrorFactory() { - return scoped_ptr<syncer::SyncErrorFactory>( +std::unique_ptr<syncer::SyncErrorFactory> +TemplateURLServiceSyncTest::CreateAndPassSyncErrorFactory() { + return std::unique_ptr<syncer::SyncErrorFactory>( new syncer::SyncErrorFactoryMock()); } @@ -346,7 +349,7 @@ TemplateURL* turl) const { // We take control of the TemplateURL so make sure it's cleaned up after // we create data out of it. - scoped_ptr<TemplateURL> scoped_turl(turl); + std::unique_ptr<TemplateURL> scoped_turl(turl); return syncer::SyncChange( FROM_HERE, type, @@ -356,8 +359,8 @@ syncer::SyncDataList TemplateURLServiceSyncTest::CreateInitialSyncData() const { syncer::SyncDataList list; - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key1"), - "http://key1.com", "key1", 90)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("key1"), "http://key1.com", "key1", 90)); list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*turl)); turl.reset(CreateTestTemplateURL(ASCIIToUTF16("key2"), "http://key2.com", "key2", 90)); @@ -369,7 +372,7 @@ return list; } -scoped_ptr<TemplateURL> TemplateURLServiceSyncTest::Deserialize( +std::unique_ptr<TemplateURL> TemplateURLServiceSyncTest::Deserialize( const syncer::SyncData& sync_data) { syncer::SyncChangeList dummy; TestTemplateURLServiceClient client; @@ -393,13 +396,12 @@ TEST_F(TemplateURLServiceSyncTest, SerializeDeserialize) { // Create a TemplateURL and convert it into a sync specific type. - scoped_ptr<TemplateURL> turl( - CreateTestTemplateURL( - ASCIIToUTF16("unittest"), "http://www.unittest.com/")); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("unittest"), "http://www.unittest.com/")); syncer::SyncData sync_data = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); // Convert the specifics back to a TemplateURL. - scoped_ptr<TemplateURL> deserialized(Deserialize(sync_data)); + std::unique_ptr<TemplateURL> deserialized(Deserialize(sync_data)); EXPECT_TRUE(deserialized.get()); // Ensure that the original and the deserialized TURLs are equal in values. AssertEquals(*turl, *deserialized); @@ -418,7 +420,7 @@ iter != all_sync_data.end(); ++iter) { std::string guid = GetGUID(*iter); const TemplateURL* service_turl = model()->GetTemplateURLForGUID(guid); - scoped_ptr<TemplateURL> deserialized(Deserialize(*iter)); + std::unique_ptr<TemplateURL> deserialized(Deserialize(*iter)); AssertEquals(*service_turl, *deserialized); } } @@ -438,7 +440,7 @@ iter != all_sync_data.end(); ++iter) { std::string guid = GetGUID(*iter); const TemplateURL* service_turl = model()->GetTemplateURLForGUID(guid); - scoped_ptr<TemplateURL> deserialized(Deserialize(*iter)); + std::unique_ptr<TemplateURL> deserialized(Deserialize(*iter)); AssertEquals(*service_turl, *deserialized); } } @@ -458,7 +460,7 @@ iter != all_sync_data.end(); ++iter) { std::string guid = GetGUID(*iter); TemplateURL* service_turl = model()->GetTemplateURLForGUID(guid); - scoped_ptr<TemplateURL> deserialized(Deserialize(*iter)); + std::unique_ptr<TemplateURL> deserialized(Deserialize(*iter)); ASSERT_FALSE(service_turl->created_by_policy()); AssertEquals(*service_turl, *deserialized); } @@ -467,8 +469,8 @@ TEST_F(TemplateURLServiceSyncTest, UniquifyKeyword) { model()->Add(CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com")); // Create a key that conflicts with something in the model. - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key1"), - "http://new.com", "xyz")); + std::unique_ptr<TemplateURL> turl( + CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://new.com", "xyz")); base::string16 new_keyword = model()->UniquifyKeyword(*turl, false); EXPECT_EQ(ASCIIToUTF16("new.com"), new_keyword); EXPECT_EQ(NULL, model()->GetTemplateURLForKeyword(new_keyword)); @@ -525,9 +527,9 @@ if (test_cases[i].local_is_default) model()->SetUserSelectedDefaultSearchProvider(local_turl); - scoped_ptr<TemplateURL> sync_turl(CreateTestTemplateURL( - ASCIIToUTF16("synckey"), "www.sync.com", "syncguid", - test_cases[i].sync_time)); + std::unique_ptr<TemplateURL> sync_turl( + CreateTestTemplateURL(ASCIIToUTF16("synckey"), "www.sync.com", + "syncguid", test_cases[i].sync_time)); EXPECT_EQ(test_cases[i].expected_result, model()->IsLocalTemplateURLBetter(local_turl, sync_turl.get())); @@ -548,8 +550,8 @@ TemplateURL* original_turl = CreateTestTemplateURL(original_turl_keyword, "http://key1.com", std::string(), 9000); model()->Add(original_turl); - scoped_ptr<TemplateURL> sync_turl(CreateTestTemplateURL(original_turl_keyword, - "http://new.com", "remote", 8999)); + std::unique_ptr<TemplateURL> sync_turl(CreateTestTemplateURL( + original_turl_keyword, "http://new.com", "remote", 8999)); syncer::SyncChangeList changes; model()->ResolveSyncKeywordConflict(sync_turl.get(), original_turl, &changes); EXPECT_NE(original_turl_keyword, sync_turl->keyword()); @@ -704,7 +706,7 @@ syncer::SyncDataList initial_data = CreateInitialSyncData(); for (syncer::SyncDataList::const_iterator iter = initial_data.begin(); iter != initial_data.end(); ++iter) { - scoped_ptr<TemplateURL> converted(Deserialize(*iter)); + std::unique_ptr<TemplateURL> converted(Deserialize(*iter)); model()->Add(converted.release()); } @@ -739,12 +741,12 @@ "http://xyz.com", "xyz", 9000); model()->Add(turl2); - scoped_ptr<TemplateURL> turl1_newer(CreateTestTemplateURL( + std::unique_ptr<TemplateURL> turl1_newer(CreateTestTemplateURL( ASCIIToUTF16("abc.com"), "http://abc.ca", "abc", 9999)); initial_data.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl1_newer)); - scoped_ptr<TemplateURL> turl2_older(CreateTestTemplateURL( + std::unique_ptr<TemplateURL> turl2_older(CreateTestTemplateURL( ASCIIToUTF16("xyz.com"), "http://xyz.ca", "xyz", 8888)); initial_data.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl2_older)); @@ -1133,7 +1135,7 @@ TEST_F(TemplateURLServiceSyncTest, AutogeneratedKeywordMigrated) { // Create a couple of sync entries with autogenerated keywords. syncer::SyncDataList initial_data; - scoped_ptr<TemplateURL> turl( + std::unique_ptr<TemplateURL> turl( CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com", "key1")); initial_data.push_back( CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); @@ -1181,8 +1183,9 @@ CreateTestTemplateURL(ASCIIToUTF16("other.com"), "http://other.com/foo"); model()->Add(other); syncer::SyncDataList initial_data; - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("sync1"), - "{google:baseURL}2/search?q={searchTerms}", "sync1", 50)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("sync1"), "{google:baseURL}2/search?q={searchTerms}", + "sync1", 50)); initial_data.push_back( CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); const std::string synced_other_url = @@ -1232,8 +1235,9 @@ // We make the first older so that it will get renamed once before the second // and then again once after (when we resolve conflicts for the second). syncer::SyncDataList initial_data; - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key1"), - "{google:baseURL}1/search?q={searchTerms}", "key1", 50)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("key1"), "{google:baseURL}1/search?q={searchTerms}", "key1", + 50)); initial_data.push_back( CreateCustomSyncData(*turl, true, turl->url(), turl->sync_guid())); turl.reset(CreateTestTemplateURL(ASCIIToUTF16("key2"), @@ -1286,7 +1290,7 @@ data.date_created = Time::FromTimeT(100); data.last_modified = Time::FromTimeT(100); data.sync_guid = "keyword"; - scoped_ptr<TemplateURL> turl(new TemplateURL(data)); + std::unique_ptr<TemplateURL> turl(new TemplateURL(data)); initial_data.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl)); @@ -1317,7 +1321,7 @@ // Merge A and B. All of B's data should transfer over to A, which initially // has no data. - scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> delegate_b( + std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> delegate_b( new syncer::SyncChangeProcessorWrapperForTest(model_b())); model_a()->MergeDataAndStartSyncing( syncer::SEARCH_ENGINES, model_b()->GetAllSyncData(syncer::SEARCH_ENGINES), @@ -1345,7 +1349,7 @@ "key6", 10)); // Conflict with key1 // Merge A and B. - scoped_ptr<syncer::SyncChangeProcessorWrapperForTest> delegate_b( + std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> delegate_b( new syncer::SyncChangeProcessorWrapperForTest(model_b())); model_a()->MergeDataAndStartSyncing( syncer::SEARCH_ENGINES, model_b()->GetAllSyncData(syncer::SEARCH_ENGINES), @@ -1445,12 +1449,12 @@ // Keep a copy of it so we can compare it after we re-merge. TemplateURL* key1_url = model()->GetTemplateURLForGUID("key1"); ASSERT_TRUE(key1_url); - scoped_ptr<TemplateURL> updated_turl(new TemplateURL(key1_url->data())); + std::unique_ptr<TemplateURL> updated_turl(new TemplateURL(key1_url->data())); EXPECT_EQ(Time::FromTimeT(90), updated_turl->last_modified()); // Modify a single field of the initial data. This should not be updated in // the second merge, as the last_modified timestamp remains the same. - scoped_ptr<TemplateURL> temp_turl(Deserialize(initial_data[0])); + std::unique_ptr<TemplateURL> temp_turl(Deserialize(initial_data[0])); TemplateURLData data(temp_turl->data()); data.SetShortName(ASCIIToUTF16("SomethingDifferent")); temp_turl.reset(new TemplateURL(data)); @@ -1479,8 +1483,8 @@ TEST_F(TemplateURLServiceSyncTest, SyncedDefaultGUIDArrivesFirst) { syncer::SyncDataList initial_data = CreateInitialSyncData(); // The default search provider should support replacement. - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key2"), - "http://key2.com/{searchTerms}", "key2", 90)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("key2"), "http://key2.com/{searchTerms}", "key2", 90)); initial_data[1] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, PassProcessor(), CreateAndPassSyncErrorFactory()); @@ -1525,8 +1529,8 @@ TEST_F(TemplateURLServiceSyncTest, DefaultGuidDeletedBeforeNewDSPArrives) { syncer::SyncDataList initial_data; // The default search provider should support replacement. - scoped_ptr<TemplateURL> turl1(CreateTestTemplateURL(ASCIIToUTF16("key1"), - "http://key1.com/{searchTerms}", "key1", 90)); + std::unique_ptr<TemplateURL> turl1(CreateTestTemplateURL( + ASCIIToUTF16("key1"), "http://key1.com/{searchTerms}", "key1", 90)); // Create a second default search provider for the // FindNewDefaultSearchProvider method to find. TemplateURLData data; @@ -1541,7 +1545,7 @@ data.prepopulate_id = 999999; data.sync_guid = "key2"; data.show_in_default_list = true; - scoped_ptr<TemplateURL> turl2(new TemplateURL(data)); + std::unique_ptr<TemplateURL> turl2(new TemplateURL(data)); initial_data.push_back(TemplateURLService::CreateSyncDataFromTemplateURL( *turl1)); initial_data.push_back(TemplateURLService::CreateSyncDataFromTemplateURL( @@ -1624,8 +1628,8 @@ // destined to become the new default. syncer::SyncDataList initial_data = CreateInitialSyncData(); // The default search provider should support replacement. - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key2"), - "http://key2.com/{searchTerms}", "key2", 90)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("key2"), "http://key2.com/{searchTerms}", "key2", 90)); initial_data[1] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, @@ -1733,8 +1737,8 @@ syncer::SyncDataList initial_data = CreateInitialSyncData(); // The key1 entry should be a duplicate of the default. - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(ASCIIToUTF16("key1"), - "http://key1.com/{searchTerms}", "key1", 90)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + ASCIIToUTF16("key1"), "http://key1.com/{searchTerms}", "key1", 90)); initial_data[0] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, @@ -1760,8 +1764,8 @@ syncer::SyncDataList initial_data = CreateInitialSyncData(); // The key1 entry should be different from the default but conflict in the // keyword. - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL(keyword, - "http://key1.com/{searchTerms}", "key1", 90)); + std::unique_ptr<TemplateURL> turl(CreateTestTemplateURL( + keyword, "http://key1.com/{searchTerms}", "key1", 90)); initial_data[0] = TemplateURLService::CreateSyncDataFromTemplateURL(*turl); model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, @@ -1790,7 +1794,7 @@ TEST_F(TemplateURLServiceSyncTest, DeleteBogusData) { // Create a couple of bogus entries to sync. syncer::SyncDataList initial_data; - scoped_ptr<TemplateURL> turl( + std::unique_ptr<TemplateURL> turl( CreateTestTemplateURL(ASCIIToUTF16("key1"), "http://key1.com", "key1")); initial_data.push_back( CreateCustomSyncData(*turl, false, std::string(), turl->sync_guid())); @@ -1890,7 +1894,7 @@ syncer::SyncDataList initial_data; data_copy.SetKeyword(original_keyword); data_copy.sync_guid = sync_guid; - scoped_ptr<TemplateURL> sync_turl(new TemplateURL(data_copy)); + std::unique_ptr<TemplateURL> sync_turl(new TemplateURL(data_copy)); initial_data.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); @@ -1923,9 +1927,9 @@ // causes it to get a local keyword that matches the local base URL. test_util_a_->SetGoogleBaseURL(GURL("http://google.com/")); syncer::SyncDataList initial_data; - scoped_ptr<TemplateURL> turl(CreateTestTemplateURL( - ASCIIToUTF16("google.co.uk"), "{google:baseURL}search?q={searchTerms}", - "guid")); + std::unique_ptr<TemplateURL> turl( + CreateTestTemplateURL(ASCIIToUTF16("google.co.uk"), + "{google:baseURL}search?q={searchTerms}", "guid")); initial_data.push_back( TemplateURLService::CreateSyncDataFromTemplateURL(*turl)); model()->MergeDataAndStartSyncing(syncer::SEARCH_ENGINES, initial_data, @@ -2034,7 +2038,7 @@ TemplateURL* local_turl = CreateTestTemplateURL( local_keyword, local_url, local_guid, local_last_modified); model()->Add(local_turl); - scoped_ptr<TemplateURL> sync_turl(CreateTestTemplateURL( + std::unique_ptr<TemplateURL> sync_turl(CreateTestTemplateURL( sync_keyword, sync_url, sync_guid, sync_last_modified)); SyncDataMap sync_data; @@ -2114,14 +2118,14 @@ } TEST_F(TemplateURLServiceSyncTest, MergePrepopulatedEngine) { - scoped_ptr<TemplateURLData> default_turl( + std::unique_ptr<TemplateURLData> default_turl( TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); // Merge with an initial list containing a prepopulated engine with a wrong // URL. syncer::SyncDataList list; - scoped_ptr<TemplateURL> sync_turl(CopyTemplateURL(default_turl.get(), - "http://wrong.url.com?q={searchTerms}", "default")); + std::unique_ptr<TemplateURL> sync_turl(CopyTemplateURL( + default_turl.get(), "http://wrong.url.com?q={searchTerms}", "default")); list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( syncer::SEARCH_ENGINES, list, PassProcessor(), @@ -2139,7 +2143,7 @@ syncer::SEARCH_ENGINES, syncer::SyncDataList(), PassProcessor(), CreateAndPassSyncErrorFactory()); - scoped_ptr<TemplateURLData> default_turl( + std::unique_ptr<TemplateURLData> default_turl( TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); TemplateURL* sync_turl = CopyTemplateURL(default_turl.get(), "http://wrong.url.com?q={searchTerms}", "default"); @@ -2158,7 +2162,7 @@ } TEST_F(TemplateURLServiceSyncTest, UpdatePrepopulatedEngine) { - scoped_ptr<TemplateURLData> default_turl( + std::unique_ptr<TemplateURLData> default_turl( TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); TemplateURLData data = *default_turl; @@ -2188,7 +2192,7 @@ } TEST_F(TemplateURLServiceSyncTest, MergeEditedPrepopulatedEngine) { - scoped_ptr<TemplateURLData> default_turl( + std::unique_ptr<TemplateURLData> default_turl( TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); TemplateURLData data(*default_turl); @@ -2203,7 +2207,7 @@ data.date_created = Time::FromTimeT(100); data.last_modified = Time::FromTimeT(100); - scoped_ptr<TemplateURL> sync_turl(new TemplateURL(data)); + std::unique_ptr<TemplateURL> sync_turl(new TemplateURL(data)); syncer::SyncDataList list; list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing( @@ -2218,7 +2222,7 @@ } TEST_F(TemplateURLServiceSyncTest, MergeNonEditedPrepopulatedEngine) { - scoped_ptr<TemplateURLData> default_turl( + std::unique_ptr<TemplateURLData> default_turl( TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL)); TemplateURLData data(*default_turl); @@ -2233,7 +2237,7 @@ data.date_created = Time::FromTimeT(100); data.last_modified = Time::FromTimeT(100); - scoped_ptr<TemplateURL> sync_turl(new TemplateURL(data)); + std::unique_ptr<TemplateURL> sync_turl(new TemplateURL(data)); syncer::SyncDataList list; list.push_back(TemplateURLService::CreateSyncDataFromTemplateURL(*sync_turl)); syncer::SyncMergeResult merge_result = model()->MergeDataAndStartSyncing(
diff --git a/chrome/browser/search_engines/template_url_service_test_util.cc b/chrome/browser/search_engines/template_url_service_test_util.cc index 1e5eb1ec..d4f2d99 100644 --- a/chrome/browser/search_engines/template_url_service_test_util.cc +++ b/chrome/browser/search_engines/template_url_service_test_util.cc
@@ -54,7 +54,7 @@ base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get()); web_database_service->AddTable( - scoped_ptr<WebDatabaseTable>(new KeywordTable())); + std::unique_ptr<WebDatabaseTable>(new KeywordTable())); web_database_service->LoadDatabase(); web_data_service_ = new KeywordWebDataService( @@ -113,12 +113,14 @@ ClearModel(); search_terms_data_ = new TestingSearchTermsData("http://www.google.com/"); model_.reset(new TemplateURLService( - profile()->GetPrefs(), scoped_ptr<SearchTermsData>(search_terms_data_), + profile()->GetPrefs(), + std::unique_ptr<SearchTermsData>(search_terms_data_), web_data_service_.get(), - scoped_ptr<TemplateURLServiceClient>(new TestingTemplateURLServiceClient( - HistoryServiceFactory::GetForProfileIfExists( - profile(), ServiceAccessType::EXPLICIT_ACCESS), - &search_term_)), + std::unique_ptr<TemplateURLServiceClient>( + new TestingTemplateURLServiceClient( + HistoryServiceFactory::GetForProfileIfExists( + profile(), ServiceAccessType::EXPLICIT_ACCESS), + &search_term_)), NULL, NULL, base::Closure())); model()->AddObserver(this); changed_count_ = 0;
diff --git a/chrome/browser/search_engines/template_url_service_test_util.h b/chrome/browser/search_engines/template_url_service_test_util.h index 3cf92ecb..a1ca5fd 100644 --- a/chrome/browser/search_engines/template_url_service_test_util.h +++ b/chrome/browser/search_engines/template_url_service_test_util.h
@@ -5,12 +5,12 @@ #ifndef CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_TEST_UTIL_H_ #define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_SERVICE_TEST_UTIL_H_ +#include <memory> #include <string> #include "base/files/scoped_temp_dir.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" #include "base/strings/string16.h" #include "components/search_engines/template_url_service_observer.h" @@ -78,13 +78,13 @@ TestingProfile* profile() { return profile_.get(); } private: - scoped_ptr<TestingProfile> profile_; + std::unique_ptr<TestingProfile> profile_; base::ScopedTempDir temp_dir_; int changed_count_; base::string16 search_term_; scoped_refptr<KeywordWebDataService> web_data_service_; TestingSearchTermsData* search_terms_data_; - scoped_ptr<TemplateURLService> model_; + std::unique_ptr<TemplateURLService> model_; DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTestUtil); };
diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc index 75abf4466..9b160ef 100644 --- a/chrome/browser/search_engines/template_url_service_unittest.cc +++ b/chrome/browser/search_engines/template_url_service_unittest.cc
@@ -5,6 +5,8 @@ #include "components/search_engines/template_url_service.h" #include <stddef.h> + +#include <memory> #include <utility> #include "base/bind.h" @@ -12,7 +14,6 @@ #include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" -#include "base/memory/scoped_ptr.h" #include "base/run_loop.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" @@ -175,7 +176,7 @@ private: content::TestBrowserThreadBundle thread_bundle_; // To set up BrowserThreads. - scoped_ptr<TemplateURLServiceTestUtil> test_util_; + std::unique_ptr<TemplateURLServiceTestUtil> test_util_; DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTest); }; @@ -308,7 +309,7 @@ // We need to make a second copy as the model takes ownership of |t_url| and // will delete it. We have to do this after calling Add() since that gives // |t_url| its ID. - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); + std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); // Reload the model to verify it was actually saved to the database. test_util()->ResetModel(true); @@ -323,7 +324,7 @@ // We expect the last_modified time to be updated to the present time on an // explicit reset. base::Time now = base::Time::Now(); - scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); + std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); clock->SetNow(now); model()->set_clock(std::move(clock)); @@ -638,7 +639,7 @@ base::RunLoop().RunUntilIdle(); base::Time now = base::Time::Now(); - scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); + std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); clock->SetNow(now); model()->set_clock(std::move(clock)); @@ -656,7 +657,7 @@ ASSERT_TRUE( model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")) == NULL); - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); + std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); // Reload the model from the database and make sure the change took. test_util()->ResetModel(true); @@ -685,7 +686,7 @@ VerifyObserverCount(1); base::RunLoop().RunUntilIdle(); - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); + std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); // Make sure when we reload we get a default search provider. test_util()->ResetModel(true); @@ -763,7 +764,7 @@ model()->SetUserSelectedDefaultSearchProvider(t_url); base::RunLoop().RunUntilIdle(); - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); + std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); // Reset the model and don't load it. The template url we set as the default // should be pulled from prefs now. @@ -863,7 +864,7 @@ kEncodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); data.alternate_urls.push_back(kAlternateURL); data.search_terms_replacement_key = kSearchTermsReplacementKey; - scoped_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); + std::unique_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); EXPECT_TRUE(model()->is_default_search_managed()); const TemplateURL* actual_managed_default = model()->GetDefaultSearchProvider(); @@ -1070,7 +1071,7 @@ model()->Add(t_url); // Do the copy after t_url is added so that the id is set. - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); + std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); // Wait for any saves to finish. @@ -1100,7 +1101,8 @@ // Verify that the default search provider is set to something. TemplateURL* default_search = model()->GetDefaultSearchProvider(); ASSERT_TRUE(default_search != NULL); - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(default_search->data())); + std::unique_ptr<TemplateURL> cloned_url( + new TemplateURL(default_search->data())); // Wait for any saves to finish. base::RunLoop().RunUntilIdle(); @@ -1126,7 +1128,7 @@ model()->SetUserSelectedDefaultSearchProvider(t_url); // Do the copy after t_url is added and set as default so that its // internal state is correct. - scoped_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); + std::unique_ptr<TemplateURL> cloned_url(new TemplateURL(t_url->data())); ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("unittest"))); ASSERT_EQ(t_url, model()->GetDefaultSearchProvider()); @@ -1243,7 +1245,7 @@ kEncodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); data.alternate_urls.push_back(kAlternateURL); data.search_terms_replacement_key = kSearchTermsReplacementKey; - scoped_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data)); + std::unique_ptr<TemplateURL> expected_managed_default1(new TemplateURL(data)); const TemplateURL* actual_managed_default = model()->GetDefaultSearchProvider(); ExpectSimilar(expected_managed_default1.get(), actual_managed_default); @@ -1268,7 +1270,8 @@ data2.SetURL(kNewSearchURL); data2.suggestions_url = kNewSuggestURL; data2.show_in_default_list = true; - scoped_ptr<TemplateURL> expected_managed_default2(new TemplateURL(data2)); + std::unique_ptr<TemplateURL> expected_managed_default2( + new TemplateURL(data2)); actual_managed_default = model()->GetDefaultSearchProvider(); ExpectSimilar(expected_managed_default2.get(), actual_managed_default); EXPECT_EQ(actual_managed_default->show_in_default_list(), true); @@ -1413,7 +1416,7 @@ model(), "ext", "ext", "http://www.search.com/s?q={searchTerms}", std::string(), std::string(), std::string(), true, true, "UTF-8", Time(), Time()); - scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( + std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( new TemplateURL::AssociatedExtensionInfo( TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext")); extension_info->wants_to_be_default_engine = true; @@ -1439,7 +1442,7 @@ model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", std::string(), std::string(), std::string(), true, false, "UTF-8", Time(), Time()); - scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( + std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( new TemplateURL::AssociatedExtensionInfo( TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); extension_info->wants_to_be_default_engine = false; @@ -1487,7 +1490,7 @@ kEncodings, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); data.alternate_urls.push_back(kAlternateURL); data.search_terms_replacement_key = kSearchTermsReplacementKey; - scoped_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); + std::unique_ptr<TemplateURL> expected_managed_default(new TemplateURL(data)); EXPECT_TRUE(model()->is_default_search_managed()); const TemplateURL* actual_managed_default = model()->GetDefaultSearchProvider(); @@ -1497,7 +1500,7 @@ model(), "ext1", "ext1", "http://www.ext1.com/s?q={searchTerms}", std::string(), std::string(), std::string(), true, true, "UTF-8", Time(), Time()); - scoped_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( + std::unique_ptr<TemplateURL::AssociatedExtensionInfo> extension_info( new TemplateURL::AssociatedExtensionInfo( TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, "ext1")); extension_info->wants_to_be_default_engine = true;
diff --git a/chrome/browser/shell_integration.h b/chrome/browser/shell_integration.h index a9861fb..d5ef51d 100644 --- a/chrome/browser/shell_integration.h +++ b/chrome/browser/shell_integration.h
@@ -113,43 +113,6 @@ void AppendProfileArgs(const base::FilePath& profile_path, base::CommandLine* command_line); -#if defined(OS_WIN) -// Generates an application user model ID (AppUserModelId) for a given app -// name and profile path. The returned app id is in the format of -// "|app_name|[.<profile_id>]". "profile_id" is appended when user override -// the default value. -// Note: If the app has an installation specific suffix (e.g. on user-level -// Chrome installs), |app_name| should already be suffixed, this method will -// then further suffix it with the profile id as described above. -base::string16 GetAppModelIdForProfile(const base::string16& app_name, - const base::FilePath& profile_path); - -// Generates an application user model ID (AppUserModelId) for Chromium by -// calling GetAppModelIdForProfile() with ShellUtil::GetAppId() as app_name. -base::string16 GetChromiumModelIdForProfile(const base::FilePath& profile_path); - -// Get the AppUserModelId for the App List, for the profile in |profile_path|. -base::string16 GetAppListAppModelIdForProfile( - const base::FilePath& profile_path); - -// Migrates existing chrome taskbar pins by tagging them with correct app id. -// see http://crbug.com/28104 -void MigrateTaskbarPins(); - -// Migrates all shortcuts in |path| which point to |chrome_exe| such that they -// have the appropriate AppUserModelId. Also clears the legacy dual_mode -// property from shortcuts with the default chrome app id. -// Returns the number of shortcuts migrated. -// This method should not be called prior to Windows 7. -// This method is only public for the sake of tests and shouldn't be called -// externally otherwise. -int MigrateShortcutsInPathInternal(const base::FilePath& chrome_exe, - const base::FilePath& path); - -// Returns the path to the Start Menu shortcut for the given Chrome. -base::FilePath GetStartMenuShortcut(const base::FilePath& chrome_exe); -#endif // defined(OS_WIN) - #if !defined(OS_WIN) // TODO(calamity): replace with // BrowserDistribution::GetStartMenuShortcutSubfolder() once
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc index 9a92a9c4..e4fecf5 100644 --- a/chrome/browser/shell_integration_win.cc +++ b/chrome/browser/shell_integration_win.cc
@@ -142,7 +142,7 @@ } DCHECK(!app_name.empty()); - return GetAppModelIdForProfile(app_name, profile_path); + return win::GetAppModelIdForProfile(app_name, profile_path); } void MigrateTaskbarPinsCallback() { @@ -160,7 +160,7 @@ return; } - MigrateShortcutsInPathInternal(chrome_exe, pins_path); + win::MigrateShortcutsInPathInternal(chrome_exe, pins_path); } // Windows 8 introduced a new protocol->executable binding system which cannot @@ -452,6 +452,63 @@ base::UTF8ToUTF16(protocol))); } +namespace win { + +bool SetAsDefaultBrowserUsingIntentPicker() { + base::FilePath chrome_exe; + if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { + NOTREACHED() << "Error getting app exe path"; + return false; + } + + BrowserDistribution* dist = BrowserDistribution::GetDistribution(); + if (!ShellUtil::ShowMakeChromeDefaultSystemUI(dist, chrome_exe)) { + LOG(ERROR) << "Failed to launch the set-default-browser Windows UI."; + return false; + } + + VLOG(1) << "Set-default-browser Windows UI completed."; + return true; +} + +void SetAsDefaultBrowserUsingSystemSettings( + const base::Closure& on_finished_callback) { + DCHECK_CURRENTLY_ON(BrowserThread::FILE); + + base::FilePath chrome_exe; + if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { + NOTREACHED() << "Error getting app exe path"; + on_finished_callback.Run(); + return; + } + + // The helper manages its own lifetime. + static const wchar_t* const kProtocols[] = {L"http", L"https", nullptr}; + OpenSystemSettingsHelper::Begin(kProtocols, on_finished_callback); + + BrowserDistribution* dist = BrowserDistribution::GetDistribution(); + ShellUtil::ShowMakeChromeDefaultSystemUI(dist, chrome_exe); +} + +bool SetAsDefaultProtocolClientUsingIntentPicker(const std::string& protocol) { + base::FilePath chrome_exe; + if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { + NOTREACHED() << "Error getting app exe path"; + return false; + } + + BrowserDistribution* dist = BrowserDistribution::GetDistribution(); + base::string16 wprotocol(base::UTF8ToUTF16(protocol)); + if (!ShellUtil::ShowMakeChromeDefaultProtocolClientSystemUI(dist, chrome_exe, + wprotocol)) { + LOG(ERROR) << "Failed to launch the set-default-client Windows UI."; + return false; + } + + VLOG(1) << "Set-default-client Windows UI completed."; + return true; +} + base::string16 GetAppModelIdForProfile(const base::string16& app_name, const base::FilePath& profile_path) { std::vector<base::string16> components; @@ -632,63 +689,6 @@ return base::FilePath(); } -namespace win { - -bool SetAsDefaultBrowserUsingIntentPicker() { - base::FilePath chrome_exe; - if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { - NOTREACHED() << "Error getting app exe path"; - return false; - } - - BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - if (!ShellUtil::ShowMakeChromeDefaultSystemUI(dist, chrome_exe)) { - LOG(ERROR) << "Failed to launch the set-default-browser Windows UI."; - return false; - } - - VLOG(1) << "Set-default-browser Windows UI completed."; - return true; -} - -void SetAsDefaultBrowserUsingSystemSettings( - const base::Closure& on_finished_callback) { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - - base::FilePath chrome_exe; - if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { - NOTREACHED() << "Error getting app exe path"; - on_finished_callback.Run(); - return; - } - - // The helper manages its own lifetime. - static const wchar_t* const kProtocols[] = {L"http", L"https", nullptr}; - OpenSystemSettingsHelper::Begin(kProtocols, on_finished_callback); - - BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - ShellUtil::ShowMakeChromeDefaultSystemUI(dist, chrome_exe); -} - -bool SetAsDefaultProtocolClientUsingIntentPicker(const std::string& protocol) { - base::FilePath chrome_exe; - if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { - NOTREACHED() << "Error getting app exe path"; - return false; - } - - BrowserDistribution* dist = BrowserDistribution::GetDistribution(); - base::string16 wprotocol(base::UTF8ToUTF16(protocol)); - if (!ShellUtil::ShowMakeChromeDefaultProtocolClientSystemUI(dist, chrome_exe, - wprotocol)) { - LOG(ERROR) << "Failed to launch the set-default-client Windows UI."; - return false; - } - - VLOG(1) << "Set-default-client Windows UI completed."; - return true; -} - } // namespace win } // namespace shell_integration
diff --git a/chrome/browser/shell_integration_win.h b/chrome/browser/shell_integration_win.h index 34651e1..cde1462 100644 --- a/chrome/browser/shell_integration_win.h +++ b/chrome/browser/shell_integration_win.h
@@ -8,6 +8,8 @@ #include <string> #include "base/callback_forward.h" +#include "base/files/file_path.h" +#include "base/strings/string16.h" namespace shell_integration { namespace win { @@ -34,6 +36,41 @@ // dialog will be shown and this method returns true. bool SetAsDefaultProtocolClientUsingIntentPicker(const std::string& protocol); +// Generates an application user model ID (AppUserModelId) for a given app +// name and profile path. The returned app id is in the format of +// "|app_name|[.<profile_id>]". "profile_id" is appended when user override +// the default value. +// Note: If the app has an installation specific suffix (e.g. on user-level +// Chrome installs), |app_name| should already be suffixed, this method will +// then further suffix it with the profile id as described above. +base::string16 GetAppModelIdForProfile(const base::string16& app_name, + const base::FilePath& profile_path); + +// Generates an application user model ID (AppUserModelId) for Chromium by +// calling GetAppModelIdForProfile() with ShellUtil::GetAppId() as app_name. +base::string16 GetChromiumModelIdForProfile(const base::FilePath& profile_path); + +// Get the AppUserModelId for the App List, for the profile in |profile_path|. +base::string16 GetAppListAppModelIdForProfile( + const base::FilePath& profile_path); + +// Migrates existing chrome taskbar pins by tagging them with correct app id. +// see http://crbug.com/28104 +void MigrateTaskbarPins(); + +// Migrates all shortcuts in |path| which point to |chrome_exe| such that they +// have the appropriate AppUserModelId. Also clears the legacy dual_mode +// property from shortcuts with the default chrome app id. +// Returns the number of shortcuts migrated. +// This method should not be called prior to Windows 7. +// This method is only public for the sake of tests and shouldn't be called +// externally otherwise. +int MigrateShortcutsInPathInternal(const base::FilePath& chrome_exe, + const base::FilePath& path); + +// Returns the path to the Start Menu shortcut for the given Chrome. +base::FilePath GetStartMenuShortcut(const base::FilePath& chrome_exe); + } // namespace win } // namespace shell_integration
diff --git a/chrome/browser/shell_integration_win_unittest.cc b/chrome/browser/shell_integration_win_unittest.cc index 3049449..6d4eb2b1 100644 --- a/chrome/browser/shell_integration_win_unittest.cc +++ b/chrome/browser/shell_integration_win_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include <stddef.h> @@ -28,6 +28,7 @@ #include "testing/gtest/include/gtest/gtest.h" namespace shell_integration { +namespace win { namespace { @@ -345,4 +346,5 @@ GetAppListAppModelIdForProfile(profile_path)); } +} // namespace win } // namespace shell_integration
diff --git a/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc b/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc index f1c290b..c7f2a56 100644 --- a/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc +++ b/chrome/browser/speech/chrome_speech_recognition_manager_delegate.cc
@@ -64,71 +64,6 @@ } // namespace - -// Asynchronously fetches the PC and audio hardware/driver info if -// the user has opted into UMA. This information is sent with speech input -// requests to the server for identifying and improving quality issues with -// specific device configurations. -class ChromeSpeechRecognitionManagerDelegate::OptionalRequestInfo - : public base::RefCountedThreadSafe<OptionalRequestInfo> { - public: - OptionalRequestInfo() : can_report_metrics_(false) { - } - - void Refresh() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - // UMA opt-in can be checked only from the UI thread, so switch to that. - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, - base::Bind(&OptionalRequestInfo::CheckUMAAndGetHardwareInfo, this)); - } - - void CheckUMAAndGetHardwareInfo() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - // TODO(hans): Move this check to where hardware info gets sent - // crbug.com/533496 - if (ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled()) { - // Access potentially slow OS calls from the FILE thread. - BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, - base::Bind(&OptionalRequestInfo::GetHardwareInfo, this)); - } - } - - void GetHardwareInfo() { - DCHECK_CURRENTLY_ON(BrowserThread::FILE); - base::AutoLock lock(lock_); - can_report_metrics_ = true; - base::string16 device_model = - SpeechRecognitionManager::GetInstance()->GetAudioInputDeviceModel(); -#if defined(OS_WIN) - value_ = base::UTF16ToUTF8( - installer::WMIComputerSystem::GetModel() + L"|" + device_model); -#else // defined(OS_WIN) - value_ = base::UTF16ToUTF8(device_model); -#endif // defined(OS_WIN) - } - - std::string value() { - base::AutoLock lock(lock_); - return value_; - } - - bool can_report_metrics() { - base::AutoLock lock(lock_); - return can_report_metrics_; - } - - private: - friend class base::RefCountedThreadSafe<OptionalRequestInfo>; - - ~OptionalRequestInfo() {} - - base::Lock lock_; - std::string value_; - bool can_report_metrics_; - - DISALLOW_COPY_AND_ASSIGN(OptionalRequestInfo); -}; - // Simple utility to get notified when a WebContent (a tab or an extension's // background page) is closed or crashes. The callback will always be called on // the UI thread. @@ -331,25 +266,6 @@ void ChromeSpeechRecognitionManagerDelegate::OnRecognitionEnd(int session_id) { } -void ChromeSpeechRecognitionManagerDelegate::GetDiagnosticInformation( - bool* can_report_metrics, - std::string* hardware_info) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - if (!optional_request_info_.get()) { - optional_request_info_ = new OptionalRequestInfo(); - // Since hardware info is optional with speech input requests, we start an - // asynchronous fetch here and move on with recording audio. This first - // speech input request would send an empty string for hardware info and - // subsequent requests may have the hardware info available if the fetch - // completed before them. This way we don't end up stalling the user with - // a long wait and disk seeks when they click on a UI element and start - // speaking. - optional_request_info_->Refresh(); - } - *can_report_metrics = optional_request_info_->can_report_metrics(); - *hardware_info = optional_request_info_->value(); -} - void ChromeSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed( int session_id, base::Callback<void(bool ask_user, bool is_allowed)> callback) {
diff --git a/chrome/browser/speech/chrome_speech_recognition_manager_delegate.h b/chrome/browser/speech/chrome_speech_recognition_manager_delegate.h index 0c8973e..cf81400 100644 --- a/chrome/browser/speech/chrome_speech_recognition_manager_delegate.h +++ b/chrome/browser/speech/chrome_speech_recognition_manager_delegate.h
@@ -43,8 +43,6 @@ float noise_volume) override; // SpeechRecognitionManagerDelegate methods. - void GetDiagnosticInformation(bool* can_report_metrics, - std::string* hardware_info) override; void CheckRecognitionIsAllowed( int session_id, base::Callback<void(bool ask_user, bool is_allowed)> callback) override; @@ -55,7 +53,6 @@ virtual void TabClosedCallback(int render_process_id, int render_view_id); private: - class OptionalRequestInfo; class TabWatcher; // Checks for VIEW_TYPE_TAB_CONTENTS host in the UI thread and notifies back @@ -65,7 +62,6 @@ int render_process_id, int render_view_id); - scoped_refptr<OptionalRequestInfo> optional_request_info_; scoped_refptr<TabWatcher> tab_watcher_; DISALLOW_COPY_AND_ASSIGN(ChromeSpeechRecognitionManagerDelegate);
diff --git a/chrome/browser/sync/glue/session_sync_test_helper.cc b/chrome/browser/sync/glue/session_sync_test_helper.cc index e3a9f56..34f2dd2a 100644 --- a/chrome/browser/sync/glue/session_sync_test_helper.cc +++ b/chrome/browser/sync/glue/session_sync_test_helper.cc
@@ -98,8 +98,17 @@ int window_id, int tab_id, sync_pb::SessionSpecifics* tab_base) { + BuildTabSpecifics(tag, window_id, tab_id, ++max_tab_node_id_, tab_base); +} + +void SessionSyncTestHelper::BuildTabSpecifics( + const std::string& tag, + int window_id, + int tab_id, + int tab_node_id, + sync_pb::SessionSpecifics* tab_base) { tab_base->set_session_tag(tag); - tab_base->set_tab_node_id(++max_tab_node_id_); + tab_base->set_tab_node_id(tab_node_id); sync_pb::SessionTab* tab = tab_base->mutable_tab(); tab->set_tab_id(tab_id); tab->set_tab_visual_index(1);
diff --git a/chrome/browser/sync/glue/session_sync_test_helper.h b/chrome/browser/sync/glue/session_sync_test_helper.h index 64a76c84..f4055c0 100644 --- a/chrome/browser/sync/glue/session_sync_test_helper.h +++ b/chrome/browser/sync/glue/session_sync_test_helper.h
@@ -37,11 +37,22 @@ const std::vector<std::vector<SessionID::id_type>>& windows, const sync_driver::SyncedSession& session); + // Build a SessionSpecifics object with a tab and sample data. Uses a + // monotonically increasing variable to generate tab_node_ids and avoid + // conflicts. void BuildTabSpecifics(const std::string& tag, int window_id, int tab_id, sync_pb::SessionSpecifics* tab_base); + // Overload of BuildTabSpecifics to allow forcing a specific tab_node_id. + // Typically only useful to test reusing tab_node_ids. + void BuildTabSpecifics(const std::string& tag, + int window_id, + int tab_id, + int tab_node_id, + sync_pb::SessionSpecifics* tab_base); + sync_pb::SessionSpecifics BuildForeignSession( const std::string& tag, const std::vector<SessionID::id_type>& tab_list,
diff --git a/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc b/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc index 4461cdf..e8c877ba 100644 --- a/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc +++ b/chrome/browser/sync/sessions/sessions_sync_manager_unittest.cc
@@ -227,17 +227,20 @@ } } +void AddToSyncDataList(const sync_pb::SessionSpecifics& specifics, + syncer::SyncDataList* list, + base::Time mtime) { + sync_pb::EntitySpecifics entity; + entity.mutable_session()->CopyFrom(specifics); + list->push_back(SyncData::CreateRemoteData( + 1, entity, mtime, syncer::AttachmentIdList(), + syncer::AttachmentServiceProxyForTest::Create())); +} + void AddTabsToSyncDataList(const std::vector<sync_pb::SessionSpecifics> tabs, syncer::SyncDataList* list) { for (size_t i = 0; i < tabs.size(); i++) { - sync_pb::EntitySpecifics entity; - entity.mutable_session()->CopyFrom(tabs[i]); - list->push_back(SyncData::CreateRemoteData( - i + 2, - entity, - base::Time::FromInternalValue(i + 1), - syncer::AttachmentIdList(), - syncer::AttachmentServiceProxyForTest::Create())); + AddToSyncDataList(tabs[i], list, base::Time::FromInternalValue(i + 1)); } } @@ -562,11 +565,11 @@ } private: - int current_entry_index_; - bool is_supervised_; - int sync_id_; - ScopedVector<const sessions::SerializedNavigationEntry> blocked_navigations_; - ScopedVector<content::NavigationEntry> entries_; + int current_entry_index_; + bool is_supervised_; + int sync_id_; + ScopedVector<const sessions::SerializedNavigationEntry> blocked_navigations_; + ScopedVector<content::NavigationEntry> entries_; }; } // namespace @@ -1263,7 +1266,7 @@ ASSERT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions)); EXPECT_TRUE(changes.empty()); - // Fill an instance of session specifics with a foreign session's data. + // Fill an instance of session specifics with a foreign session's data. std::vector<sync_pb::SessionSpecifics> tabs; SessionID::id_type n1[] = {5, 10, 13, 17}; std::vector<SessionID::id_type> tab_nums1(n1, n1 + arraysize(n1)); @@ -1477,6 +1480,192 @@ EXPECT_FALSE(manager()->GetAllForeignSessions(&foreign_sessions)); } +TEST_F(SessionsSyncManagerTest, ProcessForeignDeleteTabs) { + syncer::SyncDataList foreign_data; + base::Time stale_mtime = base::Time::Now() - base::TimeDelta::FromDays(15); + std::string session_tag = "tag1"; + + // 0 will not have ownership changed. + // 1 will not be updated, but header will stop owning. + // 2 will be deleted before header stops owning. + // 3 will be deleted after header stops owning. + // 4 will be deleted before header update, but header will still try to own. + // 5 will be deleted after header update, but header will still try to own. + // 6 starts orphaned and then deleted before header update. + // 7 starts orphaned and then deleted after header update. + SessionID::id_type tab_ids[] = {0, 1, 2, 3, 4, 5}; + std::vector<SessionID::id_type> tab_list(tab_ids, + tab_ids + arraysize(tab_ids)); + std::vector<sync_pb::SessionSpecifics> tabs; + sync_pb::SessionSpecifics meta( + helper()->BuildForeignSession(session_tag, tab_list, &tabs)); + AddToSyncDataList(meta, &foreign_data, stale_mtime); + AddTabsToSyncDataList(tabs, &foreign_data); + sync_pb::SessionSpecifics orphan6; + helper()->BuildTabSpecifics(session_tag, 0, 6, &orphan6); + AddToSyncDataList(orphan6, &foreign_data, stale_mtime); + sync_pb::SessionSpecifics orphan7; + helper()->BuildTabSpecifics(session_tag, 0, 7, &orphan7); + AddToSyncDataList(orphan7, &foreign_data, stale_mtime); + + syncer::SyncChangeList output; + InitWithSyncDataTakeOutput(foreign_data, &output); + ASSERT_EQ(2U, output.size()); + output.clear(); + + SessionID::id_type update_ids[] = {0, 4, 5}; + std::vector<SessionID::id_type> update_list( + update_ids, update_ids + arraysize(update_ids)); + sync_pb::SessionWindow* window = meta.mutable_header()->mutable_window(0); + window->clear_tab(); + for (int i : update_ids) { + window->add_tab(i); + } + + syncer::SyncChangeList changes; + changes.push_back(MakeRemoteChange(1, tabs[2], SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, tabs[4], SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, orphan6, SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, meta, SyncChange::ACTION_UPDATE)); + changes.push_back(MakeRemoteChange(1, tabs[3], SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, tabs[5], SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, orphan7, SyncChange::ACTION_DELETE)); + manager()->ProcessSyncChanges(FROM_HERE, changes); + + std::vector<const SyncedSession*> foreign_sessions; + ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); + ASSERT_EQ(1U, foreign_sessions.size()); + std::vector<std::vector<SessionID::id_type>> session_reference; + session_reference.push_back(update_list); + helper()->VerifySyncedSession(session_tag, session_reference, + *(foreign_sessions[0])); + + // Everything except for session, tab0, and tab1 will have no node_id, and + // should get skipped by garbage collection. + manager()->DoGarbageCollection(); + ASSERT_EQ(3U, output.size()); +} + +TEST_F(SessionsSyncManagerTest, ProcessForeignDeleteTabsWithShadowing) { + syncer::SyncDataList foreign_data; + base::Time stale_mtime = base::Time::Now() - base::TimeDelta::FromDays(16); + std::string session_tag = "tag1"; + + // Add several tabs that shadow eachother, in that they share tab_ids. They + // will, thanks to the helper, have unique tab_node_ids. + sync_pb::SessionSpecifics tab1A; + helper()->BuildTabSpecifics(session_tag, 0, 1, &tab1A); + AddToSyncDataList(tab1A, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(1)); + + sync_pb::SessionSpecifics tab1B; + helper()->BuildTabSpecifics(session_tag, 0, 1, &tab1B); + AddToSyncDataList(tab1B, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(2)); + + sync_pb::SessionSpecifics tab1C; + helper()->BuildTabSpecifics(session_tag, 0, 1, &tab1C); + AddToSyncDataList(tab1C, &foreign_data, stale_mtime); + + sync_pb::SessionSpecifics tab2A; + helper()->BuildTabSpecifics(session_tag, 0, 2, &tab2A); + AddToSyncDataList(tab2A, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(1)); + + sync_pb::SessionSpecifics tab2B; + helper()->BuildTabSpecifics(session_tag, 0, 2, &tab2B); + AddToSyncDataList(tab2B, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(2)); + + sync_pb::SessionSpecifics tab2C; + helper()->BuildTabSpecifics(session_tag, 0, 2, &tab2C); + AddToSyncDataList(tab2C, &foreign_data, stale_mtime); + + syncer::SyncChangeList output; + InitWithSyncDataTakeOutput(foreign_data, &output); + ASSERT_EQ(2U, output.size()); + output.clear(); + + // Verify that cleanup post-merge cleanup correctly removes all tabs objects. + const sessions::SessionTab* tab; + ASSERT_FALSE( + manager()->session_tracker_.LookupSessionTab(session_tag, 1, &tab)); + ASSERT_FALSE( + manager()->session_tracker_.LookupSessionTab(session_tag, 2, &tab)); + + std::set<int> tab_node_ids; + manager()->session_tracker_.LookupTabNodeIds(session_tag, &tab_node_ids); + EXPECT_EQ(6U, tab_node_ids.size()); + EXPECT_TRUE(tab_node_ids.find(tab1A.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab1B.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab1C.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab2A.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab2B.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab2C.tab_node_id()) != tab_node_ids.end()); + + syncer::SyncChangeList changes; + changes.push_back(MakeRemoteChange(1, tab1A, SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, tab1B, SyncChange::ACTION_DELETE)); + changes.push_back(MakeRemoteChange(1, tab2C, SyncChange::ACTION_DELETE)); + manager()->ProcessSyncChanges(FROM_HERE, changes); + + tab_node_ids.clear(); + manager()->session_tracker_.LookupTabNodeIds(session_tag, &tab_node_ids); + EXPECT_EQ(3U, tab_node_ids.size()); + EXPECT_TRUE(tab_node_ids.find(tab1C.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab2A.tab_node_id()) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab2B.tab_node_id()) != tab_node_ids.end()); + + manager()->DoGarbageCollection(); + ASSERT_EQ(3U, output.size()); +} + +TEST_F(SessionsSyncManagerTest, ProcessForeignDeleteTabsWithReusedNodeIds) { + syncer::SyncDataList foreign_data; + base::Time stale_mtime = base::Time::Now() - base::TimeDelta::FromDays(16); + std::string session_tag = "tag1"; + int tab_node_id_shared = 13; + int tab_node_id_unique = 14; + + sync_pb::SessionSpecifics tab1A; + helper()->BuildTabSpecifics(session_tag, 0, 1, tab_node_id_shared, &tab1A); + AddToSyncDataList(tab1A, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(1)); + + sync_pb::SessionSpecifics tab1B; + helper()->BuildTabSpecifics(session_tag, 0, 1, tab_node_id_unique, &tab1B); + AddToSyncDataList(tab1B, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(2)); + + sync_pb::SessionSpecifics tab2A; + helper()->BuildTabSpecifics(session_tag, 0, 2, tab_node_id_shared, &tab2A); + AddToSyncDataList(tab2A, &foreign_data, + stale_mtime + base::TimeDelta::FromMinutes(1)); + + syncer::SyncChangeList output; + InitWithSyncDataTakeOutput(foreign_data, &output); + ASSERT_EQ(2U, output.size()); + output.clear(); + + std::set<int> tab_node_ids; + manager()->session_tracker_.LookupTabNodeIds(session_tag, &tab_node_ids); + EXPECT_EQ(2U, tab_node_ids.size()); + EXPECT_TRUE(tab_node_ids.find(tab_node_id_shared) != tab_node_ids.end()); + EXPECT_TRUE(tab_node_ids.find(tab_node_id_unique) != tab_node_ids.end()); + + syncer::SyncChangeList changes; + changes.push_back(MakeRemoteChange(1, tab1A, SyncChange::ACTION_DELETE)); + manager()->ProcessSyncChanges(FROM_HERE, changes); + + tab_node_ids.clear(); + manager()->session_tracker_.LookupTabNodeIds(session_tag, &tab_node_ids); + EXPECT_EQ(1U, tab_node_ids.size()); + EXPECT_TRUE(tab_node_ids.find(tab_node_id_unique) != tab_node_ids.end()); + + manager()->DoGarbageCollection(); + EXPECT_EQ(1U, output.size()); +} + // TODO(shashishekhar): "Move this to TabNodePool unittests." TEST_F(SessionsSyncManagerTest, SaveUnassociatedNodesForReassociation) { syncer::SyncChangeList changes; @@ -1822,6 +2011,61 @@ EXPECT_EQ(GURL("http://bar2"), iter->second->tab()->GetVirtualURLAtIndex(1)); } +TEST_F(SessionsSyncManagerTest, ForeignSessionModifiedTime) { + syncer::SyncDataList foreign_data; + base::Time newest_time = base::Time::Now() - base::TimeDelta::FromDays(1); + base::Time middle_time = base::Time::Now() - base::TimeDelta::FromDays(2); + base::Time oldest_time = base::Time::Now() - base::TimeDelta::FromDays(3); + + { + std::string session_tag = "tag1"; + SessionID::id_type n[] = {1, 2}; + std::vector<SessionID::id_type> tab_list(n, n + arraysize(n)); + std::vector<sync_pb::SessionSpecifics> tabs; + sync_pb::SessionSpecifics meta( + helper()->BuildForeignSession(session_tag, tab_list, &tabs)); + AddToSyncDataList(tabs[0], &foreign_data, newest_time); + AddToSyncDataList(meta, &foreign_data, middle_time); + AddToSyncDataList(tabs[1], &foreign_data, oldest_time); + } + + { + std::string session_tag = "tag2"; + SessionID::id_type n[] = {3, 4}; + std::vector<SessionID::id_type> tab_list(n, n + arraysize(n)); + std::vector<sync_pb::SessionSpecifics> tabs; + sync_pb::SessionSpecifics meta( + helper()->BuildForeignSession(session_tag, tab_list, &tabs)); + AddToSyncDataList(tabs[0], &foreign_data, middle_time); + AddToSyncDataList(meta, &foreign_data, newest_time); + AddToSyncDataList(tabs[1], &foreign_data, oldest_time); + } + + { + std::string session_tag = "tag3"; + SessionID::id_type n[] = {5, 6}; + std::vector<SessionID::id_type> tab_list(n, n + arraysize(n)); + std::vector<sync_pb::SessionSpecifics> tabs; + sync_pb::SessionSpecifics meta( + helper()->BuildForeignSession(session_tag, tab_list, &tabs)); + AddToSyncDataList(tabs[0], &foreign_data, oldest_time); + AddToSyncDataList(meta, &foreign_data, middle_time); + AddToSyncDataList(tabs[1], &foreign_data, newest_time); + } + + syncer::SyncChangeList output; + InitWithSyncDataTakeOutput(foreign_data, &output); + ASSERT_EQ(2U, output.size()); + output.clear(); + + std::vector<const SyncedSession*> foreign_sessions; + ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); + ASSERT_EQ(3U, foreign_sessions.size()); + EXPECT_EQ(newest_time, foreign_sessions[0]->modified_time); + EXPECT_EQ(newest_time, foreign_sessions[1]->modified_time); + EXPECT_EQ(newest_time, foreign_sessions[2]->modified_time); +} + // Test garbage collection of stale foreign sessions. TEST_F(SessionsSyncManagerTest, DoGarbageCollection) { // Fill two instances of session specifics with a foreign session's data. @@ -1892,6 +2136,68 @@ *(foreign_sessions[0])); } +TEST_F(SessionsSyncManagerTest, DoGarbageCollectionOrphans) { + syncer::SyncDataList foreign_data; + base::Time stale_mtime = base::Time::Now() - base::TimeDelta::FromDays(15); + + { + // A stale session with empty header + std::string session_tag = "tag1"; + std::vector<SessionID::id_type> tab_list; + std::vector<sync_pb::SessionSpecifics> tabs; + sync_pb::SessionSpecifics meta( + helper()->BuildForeignSession(session_tag, tab_list, &tabs)); + AddToSyncDataList(meta, &foreign_data, stale_mtime); + } + + { + // A stale session with orphans w/o header + std::string session_tag = "tag2"; + sync_pb::SessionSpecifics orphan; + helper()->BuildTabSpecifics(session_tag, 0, 1, &orphan); + AddToSyncDataList(orphan, &foreign_data, stale_mtime); + } + + { + // A stale session with valid header/tab and an orphaned tab. + std::string session_tag = "tag3"; + SessionID::id_type n[] = {2}; + std::vector<SessionID::id_type> tab_list(n, n + arraysize(n)); + std::vector<sync_pb::SessionSpecifics> tabs; + sync_pb::SessionSpecifics meta( + helper()->BuildForeignSession(session_tag, tab_list, &tabs)); + + // BuildForeignSession(...) will use a window id of 0, and we're also + // passing a window id of 0 to BuildTabSpecifics(...) here. It doesn't + // really matter what window id we use for the orphaned tab, in the real + // world orphans often reference real/still valid windows, but they're + // orphans because the window/header doesn't reference back to them. + sync_pb::SessionSpecifics orphan; + helper()->BuildTabSpecifics(session_tag, 0, 1, &orphan); + AddToSyncDataList(orphan, &foreign_data, stale_mtime); + + AddToSyncDataList(tabs[0], &foreign_data, stale_mtime); + AddToSyncDataList(orphan, &foreign_data, stale_mtime); + AddToSyncDataList(meta, &foreign_data, stale_mtime); + } + + syncer::SyncChangeList output; + InitWithSyncDataTakeOutput(foreign_data, &output); + ASSERT_EQ(2U, output.size()); + output.clear(); + + // Although we have 3 foreign sessions, only 1 is valid/clean enough. + std::vector<const SyncedSession*> foreign_sessions; + ASSERT_TRUE(manager()->GetAllForeignSessions(&foreign_sessions)); + ASSERT_EQ(1U, foreign_sessions.size()); + foreign_sessions.clear(); + + // Everything should get removed here. + manager()->DoGarbageCollection(); + // Expect 5 deletions. tag1 header only, tag2 tab only, tag3 header + 2x tabs. + ASSERT_EQ(5U, output.size()); +} + // Test that an update to a previously considered "stale" session, // prior to garbage collection, will save the session from deletion. TEST_F(SessionsSyncManagerTest, GarbageCollectionHonoursUpdate) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 3fc52ec..d3762cb 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -651,6 +651,8 @@ "exclusive_access/fullscreen_controller_state_tests.h", "exclusive_access/fullscreen_controller_test.cc", "exclusive_access/fullscreen_controller_test.h", + "passwords/manage_passwords_ui_controller_mock.cc", + "passwords/manage_passwords_ui_controller_mock.h", "test/test_confirm_bubble_model.cc", "test/test_confirm_bubble_model.h", ]
diff --git a/chrome/browser/ui/ash/chrome_launcher_prefs.cc b/chrome/browser/ui/ash/chrome_launcher_prefs.cc index b437cd3..ee0a413 100644 --- a/chrome/browser/ui/ash/chrome_launcher_prefs.cc +++ b/chrome/browser/ui/ash/chrome_launcher_prefs.cc
@@ -9,10 +9,17 @@ #include <memory> #include "base/macros.h" +#include "base/strings/string_number_conversions.h" #include "base/values.h" +#include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_service.h" +#include "components/prefs/scoped_user_pref_update.h" +#include "ui/gfx/screen.h" + +namespace ash { namespace { @@ -26,14 +33,137 @@ base::ListValue* CreateDefaultPinnedAppsList() { std::unique_ptr<base::ListValue> apps(new base::ListValue); for (size_t i = 0; i < arraysize(kDefaultPinnedApps); ++i) - apps->Append(ash::CreateAppDict(kDefaultPinnedApps[i])); + apps->Append(CreateAppDict(kDefaultPinnedApps[i])); return apps.release(); } -} // namespace +// Returns the preference value for the display with the given |display_id|. +// The pref value is stored in |local_path| and |path|, but the pref service may +// have per-display preferences and the value can be specified by policy. +// Here is the priority: +// * A value managed by policy. This is a single value that applies to all +// displays. +// * A user-set value for the specified display. +// * A user-set value in |local_path| or |path|, if no per-display settings are +// ever specified (see http://crbug.com/173719 for why). |local_path| is +// preferred. See comment in |kShelfAlignment| as to why we consider two +// prefs and why |local_path| is preferred. +// * A value recommended by policy. This is a single value that applies to all +// root windows. +// * The default value for |local_path| if the value is not recommended by +// policy. +std::string GetPerDisplayPref(PrefService* prefs, + int64_t display_id, + const char* local_path, + const char* path) { + const PrefService::Preference* local_pref = prefs->FindPreference(local_path); + const std::string value(prefs->GetString(local_path)); + if (local_pref->IsManaged()) + return value; -namespace ash { + std::string pref_key = base::Int64ToString(display_id); + bool has_per_display_prefs = false; + if (!pref_key.empty()) { + const base::DictionaryValue* shelf_prefs = + prefs->GetDictionary(prefs::kShelfPreferences); + const base::DictionaryValue* display_pref = nullptr; + std::string per_display_value; + if (shelf_prefs->GetDictionary(pref_key, &display_pref) && + display_pref->GetString(path, &per_display_value)) + return per_display_value; + + // If the pref for the specified display is not found, scan the whole prefs + // and check if the prefs for other display is already specified. + std::string unused_value; + for (base::DictionaryValue::Iterator iter(*shelf_prefs); !iter.IsAtEnd(); + iter.Advance()) { + const base::DictionaryValue* display_pref = nullptr; + if (iter.value().GetAsDictionary(&display_pref) && + display_pref->GetString(path, &unused_value)) { + has_per_display_prefs = true; + break; + } + } + } + + if (local_pref->IsRecommended() || !has_per_display_prefs) + return value; + + const base::Value* default_value = prefs->GetDefaultPrefValue(local_path); + std::string default_string; + default_value->GetAsString(&default_string); + return default_string; +} + +// Sets the preference value for the display with the given |display_id|. +void SetPerDisplayPref(PrefService* prefs, + int64_t display_id, + const char* pref_key, + const std::string& value) { + if (display_id < 0) + return; + + DictionaryPrefUpdate update(prefs, prefs::kShelfPreferences); + base::DictionaryValue* shelf_prefs = update.Get(); + base::DictionaryValue* pref_dictionary = nullptr; + std::string key = base::Int64ToString(display_id); + if (!shelf_prefs->GetDictionary(key, &pref_dictionary)) { + pref_dictionary = new base::DictionaryValue(); + shelf_prefs->Set(key, pref_dictionary); + } + pref_dictionary->SetStringWithoutPathExpansion(pref_key, value); +} + +ShelfAlignment AlignmentFromPref(const std::string& value) { + if (value == kShelfAlignmentLeft) + return SHELF_ALIGNMENT_LEFT; + else if (value == kShelfAlignmentRight) + return SHELF_ALIGNMENT_RIGHT; + // Default to bottom. + return SHELF_ALIGNMENT_BOTTOM; +} + +const char* AlignmentToPref(ShelfAlignment alignment) { + switch (alignment) { + case SHELF_ALIGNMENT_BOTTOM: + return kShelfAlignmentBottom; + case SHELF_ALIGNMENT_LEFT: + return kShelfAlignmentLeft; + case SHELF_ALIGNMENT_RIGHT: + return kShelfAlignmentRight; + } + NOTREACHED(); + return nullptr; +} + +ShelfAutoHideBehavior AutoHideBehaviorFromPref(const std::string& value) { + // Note: To maintain sync compatibility with old images of chrome/chromeos + // the set of values that may be encountered includes the now-extinct + // "Default" as well as "Never" and "Always", "Default" should now + // be treated as "Never" (http://crbug.com/146773). + if (value == kShelfAutoHideBehaviorAlways) + return SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS; + return SHELF_AUTO_HIDE_BEHAVIOR_NEVER; +} + +const char* AutoHideBehaviorToPref(ShelfAutoHideBehavior behavior) { + switch (behavior) { + case SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS: + return kShelfAutoHideBehaviorAlways; + case SHELF_AUTO_HIDE_BEHAVIOR_NEVER: + return kShelfAutoHideBehaviorNever; + case SHELF_AUTO_HIDE_ALWAYS_HIDDEN: + // This one should not be a valid preference option for now. We only want + // to completely hide it when we run in app mode - or while we temporarily + // hide the shelf as part of an animation (e.g. the multi user change). + return nullptr; + } + NOTREACHED(); + return nullptr; +} + +} // namespace const char kPinnedAppsPrefAppIDPath[] = "id"; const char kPinnedAppsPrefPinnedByPolicy[] = "pinned_by_policy"; @@ -77,52 +207,57 @@ return app_value.release(); } -ash::ShelfAlignment AlignmentFromPref(const std::string& value) { - if (value == ash::kShelfAlignmentLeft) - return ash::SHELF_ALIGNMENT_LEFT; - else if (value == ash::kShelfAlignmentRight) - return ash::SHELF_ALIGNMENT_RIGHT; - // Default to bottom. - return ash::SHELF_ALIGNMENT_BOTTOM; +ShelfAutoHideBehavior GetShelfAutoHideBehaviorPref(PrefService* prefs, + int64_t display_id) { + DCHECK_GE(display_id, 0); + + // Don't show the shelf in app mode. + if (chrome::IsRunningInAppMode()) + return SHELF_AUTO_HIDE_ALWAYS_HIDDEN; + + // See comment in |kShelfAlignment| as to why we consider two prefs. + return AutoHideBehaviorFromPref( + GetPerDisplayPref(prefs, display_id, prefs::kShelfAutoHideBehaviorLocal, + prefs::kShelfAutoHideBehavior)); } -const char* AlignmentToPref(ash::ShelfAlignment alignment) { - switch (alignment) { - case ash::SHELF_ALIGNMENT_BOTTOM: - return ash::kShelfAlignmentBottom; - case ash::SHELF_ALIGNMENT_LEFT: - return ash::kShelfAlignmentLeft; - case ash::SHELF_ALIGNMENT_RIGHT: - return ash::kShelfAlignmentRight; +void SetShelfAutoHideBehaviorPref(PrefService* prefs, + int64_t display_id, + ShelfAutoHideBehavior behavior) { + DCHECK_GE(display_id, 0); + + const char* value = AutoHideBehaviorToPref(behavior); + if (!value) + return; + + SetPerDisplayPref(prefs, display_id, prefs::kShelfAutoHideBehavior, value); + if (display_id == gfx::Screen::GetScreen()->GetPrimaryDisplay().id()) { + // See comment in |kShelfAlignment| about why we have two prefs here. + prefs->SetString(prefs::kShelfAutoHideBehaviorLocal, value); + prefs->SetString(prefs::kShelfAutoHideBehavior, value); } - NOTREACHED(); - return nullptr; } -ash::ShelfAutoHideBehavior AutoHideBehaviorFromPref(const std::string& value) { - // Note: To maintain sync compatibility with old images of chrome/chromeos - // the set of values that may be encountered includes the now-extinct - // "Default" as well as "Never" and "Always", "Default" should now - // be treated as "Never" (http://crbug.com/146773). - if (value == ash::kShelfAutoHideBehaviorAlways) - return ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS; - return ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER; +ShelfAlignment GetShelfAlignmentPref(PrefService* prefs, int64_t display_id) { + DCHECK_GE(display_id, 0); + + // See comment in |kShelfAlignment| as to why we consider two prefs. + return AlignmentFromPref(GetPerDisplayPref( + prefs, display_id, prefs::kShelfAlignmentLocal, prefs::kShelfAlignment)); } -const char* AutoHideBehaviorToPref(ash::ShelfAutoHideBehavior behavior) { - switch (behavior) { - case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS: - return ash::kShelfAutoHideBehaviorAlways; - case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER: - return ash::kShelfAutoHideBehaviorNever; - case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN: - // This one should not be a valid preference option for now. We only want - // to completely hide it when we run in app mode - or while we temporarily - // hide the shelf as part of an animation (e.g. the multi user change). - return nullptr; +void SetShelfAlignmentPref(PrefService* prefs, + int64_t display_id, + ShelfAlignment alignment) { + DCHECK_GE(display_id, 0); + + const char* value = AlignmentToPref(alignment); + SetPerDisplayPref(prefs, display_id, prefs::kShelfAlignment, value); + if (display_id == gfx::Screen::GetScreen()->GetPrimaryDisplay().id()) { + // See comment in |kShelfAlignment| as to why we consider two prefs. + prefs->SetString(prefs::kShelfAlignmentLocal, value); + prefs->SetString(prefs::kShelfAlignment, value); } - NOTREACHED(); - return nullptr; } } // namespace ash
diff --git a/chrome/browser/ui/ash/chrome_launcher_prefs.h b/chrome/browser/ui/ash/chrome_launcher_prefs.h index bed9b89..2210f1e0 100644 --- a/chrome/browser/ui/ash/chrome_launcher_prefs.h +++ b/chrome/browser/ui/ash/chrome_launcher_prefs.h
@@ -9,6 +9,8 @@ #include "ash/shelf/shelf_types.h" +class PrefService; + namespace base { class DictionaryValue; } @@ -39,11 +41,18 @@ base::DictionaryValue* CreateAppDict(const std::string& app_id); -ash::ShelfAlignment AlignmentFromPref(const std::string& value); -const char* AlignmentToPref(ash::ShelfAlignment alignment); +// Get or set the shelf auto hide behavior preference for a root window. +ShelfAutoHideBehavior GetShelfAutoHideBehaviorPref(PrefService* prefs, + int64_t display_id); +void SetShelfAutoHideBehaviorPref(PrefService* prefs, + int64_t display_id, + ShelfAutoHideBehavior behavior); -ash::ShelfAutoHideBehavior AutoHideBehaviorFromPref(const std::string& value); -const char* AutoHideBehaviorToPref(ash::ShelfAutoHideBehavior behavior); +// Get or set the shelf alignment preference for a root window. +ShelfAlignment GetShelfAlignmentPref(PrefService* prefs, int64_t display_id); +void SetShelfAlignmentPref(PrefService* prefs, + int64_t display_id, + ShelfAlignment alignment); } // namespace ash
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc index 0ae3bab..bf3579f 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
@@ -21,12 +21,10 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/strings/pattern.h" -#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "build/build_config.h" -#include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/defaults.h" #include "chrome/browser/extensions/extension_app_icon_loader.h" @@ -124,117 +122,13 @@ // will ignore it. const char kAppShelfIdPlaceholder[] = "AppShelfIDPlaceholder--------"; -std::string GetPrefKeyForRootWindow(aura::Window* root_window) { +int64_t GetDisplayIDForShelf(ash::Shelf* shelf) { + aura::Window* root_window = + shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); gfx::Display display = gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_window); DCHECK(display.is_valid()); - - return base::Int64ToString(display.id()); -} - -void UpdatePerDisplayPref(PrefService* pref_service, - aura::Window* root_window, - const char* pref_key, - const std::string& value) { - std::string key = GetPrefKeyForRootWindow(root_window); - if (key.empty()) - return; - - DictionaryPrefUpdate update(pref_service, prefs::kShelfPreferences); - base::DictionaryValue* shelf_prefs = update.Get(); - base::DictionaryValue* prefs = NULL; - if (!shelf_prefs->GetDictionary(key, &prefs)) { - prefs = new base::DictionaryValue(); - shelf_prefs->Set(key, prefs); - } - prefs->SetStringWithoutPathExpansion(pref_key, value); -} - -// Returns a pref value in |pref_service| for the display of |root_window|. The -// pref value is stored in |local_path| and |path|, but |pref_service| may have -// per-display preferences and the value can be specified by policy. Here is -// the priority: -// * A value managed by policy. This is a single value that applies to all -// displays. -// * A user-set value for the specified display. -// * A user-set value in |local_path| or |path|, if no per-display settings are -// ever specified (see http://crbug.com/173719 for why). |local_path| is -// preferred. See comment in |kShelfAlignment| as to why we consider two -// prefs and why |local_path| is preferred. -// * A value recommended by policy. This is a single value that applies to all -// root windows. -// * The default value for |local_path| if the value is not recommended by -// policy. -std::string GetPrefForRootWindow(PrefService* pref_service, - aura::Window* root_window, - const char* local_path, - const char* path) { - const PrefService::Preference* local_pref = - pref_service->FindPreference(local_path); - const std::string value(pref_service->GetString(local_path)); - if (local_pref->IsManaged()) - return value; - - std::string pref_key = GetPrefKeyForRootWindow(root_window); - bool has_per_display_prefs = false; - if (!pref_key.empty()) { - const base::DictionaryValue* shelf_prefs = pref_service->GetDictionary( - prefs::kShelfPreferences); - const base::DictionaryValue* display_pref = NULL; - std::string per_display_value; - if (shelf_prefs->GetDictionary(pref_key, &display_pref) && - display_pref->GetString(path, &per_display_value)) - return per_display_value; - - // If the pref for the specified display is not found, scan the whole prefs - // and check if the prefs for other display is already specified. - std::string unused_value; - for (base::DictionaryValue::Iterator iter(*shelf_prefs); - !iter.IsAtEnd(); iter.Advance()) { - const base::DictionaryValue* display_pref = NULL; - if (iter.value().GetAsDictionary(&display_pref) && - display_pref->GetString(path, &unused_value)) { - has_per_display_prefs = true; - break; - } - } - } - - if (local_pref->IsRecommended() || !has_per_display_prefs) - return value; - - const base::Value* default_value = - pref_service->GetDefaultPrefValue(local_path); - std::string default_string; - default_value->GetAsString(&default_string); - return default_string; -} - -// Gets the shelf auto hide behavior from prefs for a root window. -ash::ShelfAutoHideBehavior GetShelfAutoHideBehaviorFromPrefs( - Profile* profile, - aura::Window* root_window) { - DCHECK(profile); - - // Don't show the shelf in app mode. - if (chrome::IsRunningInAppMode()) - return ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN; - - // See comment in |kShelfAlignment| as to why we consider two prefs. - return ash::AutoHideBehaviorFromPref(GetPrefForRootWindow( - profile->GetPrefs(), root_window, prefs::kShelfAutoHideBehaviorLocal, - prefs::kShelfAutoHideBehavior)); -} - -// Gets the shelf alignment from prefs for a root window. -ash::ShelfAlignment GetShelfAlignmentFromPrefs(Profile* profile, - aura::Window* root_window) { - DCHECK(profile); - - // See comment in |kShelfAlignment| as to why we consider two prefs. - return ash::AlignmentFromPref(GetPrefForRootWindow( - profile->GetPrefs(), root_window, prefs::kShelfAlignmentLocal, - prefs::kShelfAlignment)); + return display.id(); } // If prefs have synced and no user-set value exists at |local_path|, the value @@ -1122,50 +1016,27 @@ } void ChromeLauncherController::OnShelfCreated(ash::Shelf* shelf) { - aura::Window* root_window = - shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); + PrefService* prefs = profile_->GetPrefs(); + const int64_t display = GetDisplayIDForShelf(shelf); - shelf->SetAutoHideBehavior( - GetShelfAutoHideBehaviorFromPrefs(profile_, root_window)); + shelf->SetAutoHideBehavior(ash::GetShelfAutoHideBehaviorPref(prefs, display)); if (ash::ShelfWidget::ShelfAlignmentAllowed()) - shelf->SetAlignment(GetShelfAlignmentFromPrefs(profile_, root_window)); + shelf->SetAlignment(ash::GetShelfAlignmentPref(prefs, display)); } void ChromeLauncherController::OnShelfDestroyed(ash::Shelf* shelf) {} void ChromeLauncherController::OnShelfAlignmentChanged(ash::Shelf* shelf) { - const char* value = ash::AlignmentToPref(shelf->GetAlignment()); - aura::Window* root_window = - shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); - - UpdatePerDisplayPref(profile_->GetPrefs(), root_window, - prefs::kShelfAlignment, value); - - if (root_window == ash::Shell::GetPrimaryRootWindow()) { - // See comment in |kShelfAlignment| about why we have two prefs here. - profile_->GetPrefs()->SetString(prefs::kShelfAlignmentLocal, value); - profile_->GetPrefs()->SetString(prefs::kShelfAlignment, value); - } + ash::SetShelfAlignmentPref(profile_->GetPrefs(), GetDisplayIDForShelf(shelf), + shelf->GetAlignment()); } void ChromeLauncherController::OnShelfAutoHideBehaviorChanged( ash::Shelf* shelf) { - const char* value = ash::AutoHideBehaviorToPref(shelf->GetAutoHideBehavior()); - if (!value) - return; - - aura::Window* root_window = - shelf->shelf_widget()->GetNativeWindow()->GetRootWindow(); - - UpdatePerDisplayPref(profile_->GetPrefs(), root_window, - prefs::kShelfAutoHideBehavior, value); - - if (root_window == ash::Shell::GetPrimaryRootWindow()) { - // See comment in |kShelfAlignment| about why we have two prefs here. - profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value); - profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value); - } + ash::SetShelfAutoHideBehaviorPref(profile_->GetPrefs(), + GetDisplayIDForShelf(shelf), + shelf->auto_hide_behavior()); } void ChromeLauncherController::ShelfItemAdded(int index) { @@ -1523,7 +1394,7 @@ } bool ChromeLauncherController::ShelfBoundsChangesProbablyWithUser( - aura::Window* root_window, + ash::Shelf* shelf, const std::string& user_id) const { Profile* other_profile = multi_user_util::GetProfileFromAccountId( AccountId::FromUserEmail(user_id)); @@ -1533,14 +1404,17 @@ // Note: The Auto hide state from preferences is not the same as the actual // visibility of the shelf. Depending on all the various states (full screen, // no window on desktop, multi user, ..) the shelf could be shown - or not. + PrefService* prefs = profile_->GetPrefs(); + PrefService* other_prefs = other_profile->GetPrefs(); + const int64_t display = GetDisplayIDForShelf(shelf); bool currently_shown = ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER == - GetShelfAutoHideBehaviorFromPrefs(profile_, root_window); + ash::GetShelfAutoHideBehaviorPref(prefs, display); bool other_shown = ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER == - GetShelfAutoHideBehaviorFromPrefs(other_profile, root_window); + ash::GetShelfAutoHideBehaviorPref(other_prefs, display); return currently_shown != other_shown || - GetShelfAlignmentFromPrefs(profile_, root_window) != - GetShelfAlignmentFromPrefs(other_profile, root_window); + ash::GetShelfAlignmentPref(prefs, display) != + ash::GetShelfAlignmentPref(other_prefs, display); } void ChromeLauncherController::OnUserProfileReadyToSwitch(Profile* profile) { @@ -1770,8 +1644,8 @@ for (auto* window : ash::Shell::GetAllRootWindows()) { ash::Shelf* shelf = ash::Shelf::ForWindow(window); if (shelf) { - shelf->SetAutoHideBehavior( - GetShelfAutoHideBehaviorFromPrefs(profile_, window)); + shelf->SetAutoHideBehavior(ash::GetShelfAutoHideBehaviorPref( + profile_->GetPrefs(), GetDisplayIDForShelf(shelf))); } } } @@ -1782,8 +1656,10 @@ for (auto* window : ash::Shell::GetAllRootWindows()) { ash::Shelf* shelf = ash::Shelf::ForWindow(window); - if (shelf) - shelf->SetAlignment(GetShelfAlignmentFromPrefs(profile_, window)); + if (shelf) { + shelf->SetAlignment(ash::GetShelfAlignmentPref( + profile_->GetPrefs(), GetDisplayIDForShelf(shelf))); + } } }
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h index 58cba6b..3dcfad2 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h
@@ -365,7 +365,7 @@ // user profile or not. However, since the full visibility calculation of the // shelf cannot be performed here, this is only a probability used for // animation predictions. - bool ShelfBoundsChangesProbablyWithUser(aura::Window* root_window, + bool ShelfBoundsChangesProbablyWithUser(ash::Shelf* shelf, const std::string& user_id) const; // Called when the user profile is fully loaded and ready to switch to.
diff --git a/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc b/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc index f6ab2ceb7..dacf3e822 100644 --- a/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc +++ b/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc
@@ -6,13 +6,12 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/ash/chrome_launcher_prefs.h" -#include "chrome/common/pref_names.h" #include "chrome/grit/theme_resources.h" -#include "components/prefs/pref_service.h" #include "content/public/common/mojo_shell_connection.h" #include "services/shell/public/cpp/connector.h" #include "skia/public/type_converters.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/screen.h" class ChromeShelfItemDelegate : public mash::shelf::mojom::ShelfItemDelegate { public: @@ -65,17 +64,12 @@ // Set shelf alignment and auto-hide behavior from preferences. Profile* profile = ProfileManager::GetActiveUserProfile(); - - const std::string& alignment_value = - profile->GetPrefs()->GetString(prefs::kShelfAlignmentLocal); + int64_t display_id = gfx::Screen::GetScreen()->GetPrimaryDisplay().id(); shelf_controller_->SetAlignment(static_cast<mash::shelf::mojom::Alignment>( - ash::AlignmentFromPref(alignment_value))); - - const std::string& auto_hide_value = - profile->GetPrefs()->GetString(prefs::kShelfAutoHideBehaviorLocal); + ash::GetShelfAlignmentPref(profile->GetPrefs(), display_id))); shelf_controller_->SetAutoHideBehavior( static_cast<mash::shelf::mojom::AutoHideBehavior>( - ash::AutoHideBehaviorFromPref(auto_hide_value))); + ash::GetShelfAutoHideBehaviorPref(profile->GetPrefs(), display_id))); // Create a test shortcut item to a fake application. mash::shelf::mojom::ShelfItemPtr item(mash::shelf::mojom::ShelfItem::New()); @@ -99,18 +93,15 @@ void ChromeMashShelfController::OnAlignmentChanged( mash::shelf::mojom::Alignment alignment) { - const char* value = - ash::AlignmentToPref(static_cast<ash::ShelfAlignment>(alignment)); - Profile* profile = ProfileManager::GetActiveUserProfile(); - profile->GetPrefs()->SetString(prefs::kShelfAlignmentLocal, value); + ash::SetShelfAlignmentPref(ProfileManager::GetActiveUserProfile()->GetPrefs(), + gfx::Screen::GetScreen()->GetPrimaryDisplay().id(), + static_cast<ash::ShelfAlignment>(alignment)); } void ChromeMashShelfController::OnAutoHideBehaviorChanged( mash::shelf::mojom::AutoHideBehavior auto_hide) { - const char* value = ash::AutoHideBehaviorToPref( + ash::SetShelfAutoHideBehaviorPref( + ProfileManager::GetActiveUserProfile()->GetPrefs(), + gfx::Screen::GetScreen()->GetPrimaryDisplay().id(), static_cast<ash::ShelfAutoHideBehavior>(auto_hide)); - if (!value) - return; - Profile* profile = ProfileManager::GetActiveUserProfile(); - profile->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value); }
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc index 70e031a..784c4c3 100644 --- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc +++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos_unittest.cc
@@ -13,12 +13,12 @@ #include "ash/test/ash_test_helper.h" #include "ash/test/test_session_state_delegate.h" #include "ash/test/test_shell_delegate.h" +#include "ash/wm/common/wm_event.h" #include "ash/wm/maximize_mode/maximize_mode_controller.h" #include "ash/wm/maximize_mode/maximize_mode_window_manager.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" -#include "ash/wm/wm_event.h" #include "base/command_line.h" #include "base/compiler_specific.h" #include "base/logging.h"
diff --git a/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc b/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc index 402e897..2147d69 100644 --- a/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc +++ b/chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc
@@ -226,11 +226,8 @@ chrome_launcher_controller->ActiveUserChanged( new_account_id_.GetUserEmail()); // Hide the black rectangle on top of each shelf again. - aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); - for (aura::Window::Windows::const_iterator iter = root_windows.begin(); - iter != root_windows.end(); ++iter) { - ash::ShelfWidget* shelf = - ash::RootWindowController::ForWindow(*iter)->shelf(); + for (aura::Window* window : ash::Shell::GetAllRootWindows()) { + ash::ShelfWidget* shelf = ash::Shelf::ForWindow(window)->shelf_widget(); shelf->HideShelfBehindBlackBar(false, duration_override); } // We kicked off the shelf animation above and the override can be @@ -255,29 +252,24 @@ return; // For each root window hide the shelf. - aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); - - for (aura::Window::Windows::const_iterator iter = root_windows.begin(); - iter != root_windows.end(); ++iter) { + for (aura::Window* window : ash::Shell::GetAllRootWindows()) { // Hiding the shelf will cause a resize on a maximized window. // If the shelf is then shown for the following user in the same location, // the window gets resized again. Since each resize can cause a considerable // CPU usage and therefore effect jank, we should avoid hiding the shelf if // the start and end location are the same and cover the shelf instead with // a black rectangle on top. - if (GetScreenCover(*iter) != NO_USER_COVERS_SCREEN && + ash::Shelf* shelf = ash::Shelf::ForWindow(window); + if (GetScreenCover(window) != NO_USER_COVERS_SCREEN && (!chrome_launcher_controller || !chrome_launcher_controller->ShelfBoundsChangesProbablyWithUser( - *iter, new_account_id_.GetUserEmail()))) { - ash::ShelfWidget* shelf = - ash::RootWindowController::ForWindow(*iter)->shelf(); - shelf->HideShelfBehindBlackBar(true, duration_override); + shelf, new_account_id_.GetUserEmail()))) { + shelf->shelf_widget()->HideShelfBehindBlackBar(true, duration_override); } else { // This shelf change is only part of the animation and will be updated by // ChromeLauncherController::ActiveUserChanged() to the new users value. // Note that the user preference will not be changed. - ash::Shell::GetInstance()->SetShelfAutoHideBehavior( - ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN, *iter); + shelf->SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN); } } }
diff --git a/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm b/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm index 62ff639bf..7ac9484e 100644 --- a/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm +++ b/chrome/browser/ui/cocoa/app_menu/app_menu_controller.mm
@@ -387,6 +387,9 @@ - (void)menuNeedsUpdate:(NSMenu*)menu { // First empty out the menu and create a new model. [self removeAllItems:menu]; + // Delete the BrowserActionsController; if a new one's needed, it'll be + // created as we add items to the menu. + browserActionsController_.reset(); [self createModel]; [menu setMinimumWidth:0];
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button.h b/chrome/browser/ui/cocoa/extensions/browser_action_button.h index 645243ae..a51fff2 100644 --- a/chrome/browser/ui/cocoa/extensions/browser_action_button.h +++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.h
@@ -100,6 +100,8 @@ - (void)setTestContextMenu:(NSMenu*)testContextMenu; // Returns true if the action wants to run. - (BOOL)wantsToRunForTesting; +// Returns true if the cell is highlighted. +- (BOOL)isHighlighted; @end @interface BrowserActionCell : ImageButtonCell {
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm index d9bcbd19..31cfdaf 100644 --- a/chrome/browser/ui/cocoa/extensions/browser_action_button.mm +++ b/chrome/browser/ui/cocoa/extensions/browser_action_button.mm
@@ -169,14 +169,15 @@ // to avoid the magic '5' here, but since it's built into Cocoa, it's not too // hopeful. NSPoint menuPoint = NSMakePoint(0, NSHeight([owner_ bounds]) + 5); - base::WeakPtr<ToolbarActionViewDelegateBridge> weak_this; + base::WeakPtr<ToolbarActionViewDelegateBridge> weakThis = + weakFactory_.GetWeakPtr(); [[owner_ cell] setHighlighted:YES]; [[owner_ menu] popUpMenuPositioningItem:nil atLocation:menuPoint inView:owner_]; // Since menus run in a blocking way, it's possible that the extension was // unloaded since this point. - if (!weak_this) + if (!weakThis) return; [[owner_ cell] setHighlighted:NO]; contextMenuRunning_ = false; @@ -540,6 +541,10 @@ [browserActionsController_ currentWebContents]); } +- (BOOL)isHighlighted { + return [[self cell] isHighlighted]; +} + @end @implementation BrowserActionCell
diff --git a/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm b/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm index ff11027..b219e9df 100644 --- a/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm +++ b/chrome/browser/ui/cocoa/extensions/browser_action_button_interactive_uitest.mm
@@ -177,6 +177,11 @@ return self; } +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; +} + - (void)menuDidClose:(NSNotification*)notification { if (!closeClosure_.is_null()) { base::MessageLoop::current()->PostTask( @@ -277,6 +282,9 @@ EXPECT_EQ([actionsController containerView], [actionButton superview]); EXPECT_EQ([actionButton viewController], [actionsController toolbarActionsBar]->popped_out_action()); + // Since the button is popped out for a popup or context menu, it should be + // highlighted. + EXPECT_TRUE([actionButton isHighlighted]); } // Test that opening a context menu works for both actions on the main bar and @@ -321,6 +329,7 @@ runLoop.Run(); // The menu should have opened from the click. EXPECT_TRUE([menuHelper menuOpened]); + EXPECT_FALSE([actionButton isHighlighted]); } // Reset the menu helper so we can use it again. @@ -356,6 +365,7 @@ // action button, not the overflow's. Since Cocoa doesn't support running // a menu-within-a-menu, this is what has to happen. EXPECT_TRUE([menuHelper menuOpened]); + EXPECT_FALSE([actionButton isHighlighted]); } } @@ -592,3 +602,50 @@ EXPECT_TRUE([menuHelper menuOpened]); } } + +void CloseAppMenu(AppMenuController* appMenuController, + const base::Closure& quitClosure) { + EXPECT_TRUE([appMenuController isMenuOpen]); + [appMenuController cancel]; + quitClosure.Run(); +} + +// Tests opening the app menu with an overflow section needed, then closing it, +// removing the need for the overflow section, and re-opening it. +// Regression test for crbug.com/603241. +IN_PROC_BROWSER_TEST_F(BrowserActionButtonUiTest, + TestReopeningAppMenuWithOverflowNotNeeded) { + // Add an extension with a browser action and overflow it in the menu. + scoped_refptr<const extensions::Extension> extension = + extensions::extension_action_test_util::CreateActionExtension( + "browser_action", + extensions::extension_action_test_util::BROWSER_ACTION); + extension_service()->AddExtension(extension.get()); + ASSERT_EQ(1u, model()->toolbar_items().size()); + model()->SetVisibleIconCount(0); + + // Move the mouse over the app menu button. + MoveMouseToCenter(appMenuButton()); + + auto openAndCloseAppMenu = [](AppMenuController* controller) { + base::RunLoop runLoop; + base::scoped_nsobject<MenuWatcher> menuWatcher( + [[MenuWatcher alloc] initWithController:controller]); + [menuWatcher setOpenClosure: + base::Bind(&CloseAppMenu, + base::Unretained(controller), + runLoop.QuitClosure())]; + ui_controls::SendMouseEvents(ui_controls::LEFT, + ui_controls::DOWN | ui_controls::UP); + runLoop.Run(); + }; + openAndCloseAppMenu(appMenuController()); + + // Move the extension back to the main bar, so an overflow bar is no longer + // needed. Then open and close the app menu a couple times. + // This tests that the menu properly cleans up after itself when an overflow + // was present, and is no longer (fix for crbug.com/603241). + model()->SetVisibleIconCount(1); + openAndCloseAppMenu(appMenuController()); + openAndCloseAppMenu(appMenuController()); +}
diff --git a/chrome/browser/ui/cocoa/hover_close_button.h b/chrome/browser/ui/cocoa/hover_close_button.h index 0a56159c..1ca97609 100644 --- a/chrome/browser/ui/cocoa/hover_close_button.h +++ b/chrome/browser/ui/cocoa/hover_close_button.h
@@ -7,6 +7,7 @@ #import <Cocoa/Cocoa.h> +#include "third_party/skia/include/core/SkColor.h" #import "ui/base/cocoa/hover_button.h" @class GTMKeyValueAnimation; @@ -19,6 +20,8 @@ HoverState previousState_; } +// Returns the Material Design color of the "x". +- (SkColor)iconColor; @end // A version of HoverCloseButton with the "x" icon changed to match the WebUI
diff --git a/chrome/browser/ui/cocoa/hover_close_button.mm b/chrome/browser/ui/cocoa/hover_close_button.mm index ba5e9be3..1797e94 100644 --- a/chrome/browser/ui/cocoa/hover_close_button.mm +++ b/chrome/browser/ui/cocoa/hover_close_button.mm
@@ -9,6 +9,7 @@ #include "chrome/browser/themes/theme_properties.h" #include "chrome/browser/themes/theme_service.h" #import "chrome/browser/ui/cocoa/browser_window_controller.h" +#import "chrome/browser/ui/cocoa/tabs/tab_controller.h" #import "chrome/browser/ui/cocoa/tabs/tab_view.h" #include "chrome/grit/generated_resources.h" #include "grit/components_strings.h" @@ -18,6 +19,7 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/base/material_design/material_design_controller.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/color_palette.h" #include "ui/gfx/image/image_skia_util_mac.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/vector_icons_public.h" @@ -157,6 +159,26 @@ return base::mac::ObjCCast<TabView>([self superview]); } +- (SkColor)iconColor { + if ([[self window] hasDarkTheme]) { + return SkColorSetARGB(0xFF, 0xC4, 0xC4, 0xC4); + } + + const ui::ThemeProvider* themeProvider = [[self window] themeProvider]; + if (themeProvider) { + TabView* tabView = [self tabView]; + bool use_active_tab_text_color = !tabView || [tabView isActiveTab]; + + const SkColor titleColor = use_active_tab_text_color ? + themeProvider->GetColor(ThemeProperties::COLOR_TAB_TEXT) : + themeProvider->GetColor(ThemeProperties::COLOR_BACKGROUND_TAB_TEXT); + return SkColorSetA(titleColor, 0xA0); + } + + // Return the default COLOR_TAB_TEXT color. + return SkColorSetARGB(0xA0, 0x00, 0x00, 0x00); +} + - (NSImage*)imageForHoverState:(HoverState)hoverState { int imageID = IDR_CLOSE_1; @@ -177,33 +199,12 @@ } gfx::VectorIconId vectorIconID; - SkColor vectorIconColor; - const ui::ThemeProvider* themeProvider = nullptr; - TabView* tabView; + SkColor vectorIconColor = gfx::kPlaceholderColor; switch (hoverState) { case kHoverStateNone: vectorIconID = gfx::VectorIconId::TAB_CLOSE_NORMAL; - // Determine the vector icon color, which for this icon is the color - // of the "x". - themeProvider = [[self window] themeProvider]; - if (themeProvider) { - if (themeProvider->InIncognitoMode()) { - vectorIconColor = SkColorSetARGB(0xFF, 0xC4, 0xC4, 0xC4); - } else { - tabView = [self tabView]; - bool use_active_tab_text_color = !tabView || [tabView isActiveTab]; - - const SkColor titleColor = use_active_tab_text_color ? - themeProvider->GetColor(ThemeProperties::COLOR_TAB_TEXT) : - themeProvider->GetColor( - ThemeProperties::COLOR_BACKGROUND_TAB_TEXT); - vectorIconColor = SkColorSetA(titleColor, 0xA0); - } - } else { - // 0x000000 is the default COLOR_TAB_TEXT color. - vectorIconColor = SkColorSetARGB(0xA0, 0x00, 0x00, 0x00); - } + vectorIconColor = [self iconColor]; break; case kHoverStateMouseOver: // For mouse over, the icon color is the fill color of the circle.
diff --git a/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.h b/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.h index c17583ed..94c556f 100644 --- a/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.h +++ b/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.h
@@ -8,6 +8,7 @@ #include <memory> #import "base/mac/scoped_nsobject.h" +#import "chrome/browser/ui/cocoa/themed_window.h" #include "chrome/browser/ui/tabs/tab_utils.h" #import "ui/base/cocoa/hover_button.h" @@ -27,7 +28,7 @@ // // Note: Send the |-setClickTarget:withAction:| message instead of the // |-setTarget:| and |-setAction:| messages to be notified of button clicks. -@interface AlertIndicatorButton : HoverButton { +@interface AlertIndicatorButton : HoverButton <ThemedWindowDrawing> { @private class FadeAnimationDelegate; @@ -79,6 +80,10 @@ // clicked. A weak reference on |target| is held. - (void)setClickTarget:(id)target withAction:(SEL)action; +// ThemedWindowDrawing protocol support. +- (void)windowDidChangeTheme; +- (void)windowDidChangeActive; + @end #endif // CHROME_BROWSER_UI_COCOA_TABS_ALERT_INDICATOR_BUTTON_COCOA_H_
diff --git a/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.mm b/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.mm index 7bfde635..0bfe358 100644 --- a/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.mm +++ b/chrome/browser/ui/cocoa/tabs/alert_indicator_button_cocoa.mm
@@ -72,17 +72,22 @@ [super removeFromSuperview]; } +- (void)updateIconForState:(TabAlertState)aState { + if (aState != TabAlertState::NONE) { + TabView* const tabView = base::mac::ObjCCast<TabView>([self superview]); + SkColor iconColor = [tabView closeButtonColor]; + NSImage* tabIndicatorImage = + chrome::GetTabAlertIndicatorImage(aState, iconColor).ToNSImage(); + [self setImage:tabIndicatorImage]; + affordanceImage_.reset([tabIndicatorImage retain]); + } +} + - (void)transitionToAlertState:(TabAlertState)nextState { if (nextState == alertState_) return; - if (nextState != TabAlertState::NONE) { - [self - setImage:chrome::GetTabAlertIndicatorImage(nextState, 0).ToNSImage()]; - affordanceImage_.reset( - [chrome::GetTabAlertIndicatorAffordanceImage(nextState, 0) - .ToNSImage() retain]); - } + [self updateIconForState:nextState]; if ((alertState_ == TabAlertState::AUDIO_PLAYING && nextState == TabAlertState::AUDIO_MUTING) || @@ -237,4 +242,15 @@ [self setEnabled:enable]; } +// ThemedWindowDrawing protocol support. + +- (void)windowDidChangeTheme { + // Force the alert icon to update because the icon color may change based + // on the current theme. + [self updateIconForState:alertState_]; +} + +- (void)windowDidChangeActive { +} + @end
diff --git a/chrome/browser/ui/cocoa/tabs/tab_controller_unittest.mm b/chrome/browser/ui/cocoa/tabs/tab_controller_unittest.mm index c4fa7b7..571f6b9 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/tabs/tab_controller_unittest.mm
@@ -473,12 +473,7 @@ [[controller tabView] titleFrame])); } -// A comprehensive test of the layout and visibility of all elements (favicon, -// throbber indicators, titile text, alert indicator button, and close button) -// over all relevant combinations of tab state. This test overlaps with parts -// of the other tests above. -// Flaky: https://code.google.com/p/chromium/issues/detail?id=311668 -TEST_F(TabControllerTest, DISABLED_LayoutAndVisibilityOfSubviews) { +TEST_F(TabControllerTest, LayoutAndVisibilityOfSubviews) { static const TabAlertState kAlertStatesToTest[] = { TabAlertState::NONE, TabAlertState::TAB_CAPTURING, TabAlertState::AUDIO_PLAYING, TabAlertState::AUDIO_MUTING
diff --git a/chrome/browser/ui/cocoa/tabs/tab_view.h b/chrome/browser/ui/cocoa/tabs/tab_view.h index 3f4f8b3..a01789d 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_view.h +++ b/chrome/browser/ui/cocoa/tabs/tab_view.h
@@ -121,6 +121,9 @@ // user to click to select/activate the tab. - (int)widthOfLargestSelectableRegion; +// Returns the Material Design color of the "x". +- (SkColor)closeButtonColor; + @end // The TabController |controller_| is not the only owner of this view. If the
diff --git a/chrome/browser/ui/cocoa/tabs/tab_view.mm b/chrome/browser/ui/cocoa/tabs/tab_view.mm index 3e884a9c..605432eb 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_view.mm +++ b/chrome/browser/ui/cocoa/tabs/tab_view.mm
@@ -53,6 +53,11 @@ + (void)drawTabRightEdgeImage; @end +@interface TabController(Private) +// The TabView's close button. +- (HoverCloseButton*)closeButton; +@end + namespace { NSImage* imageForResourceID(int resource_id) { @@ -590,6 +595,10 @@ [self setNeedsDisplayInRect:[titleView_ frame]]; } +- (SkColor)closeButtonColor { + return [[controller_ closeButton] iconColor]; +} + - (void)setState:(NSCellStateValue)state { if (state_ == state) return;
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index 7a9817fd..ac89b7ac 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -109,6 +109,7 @@ #include "base/win/windows_version.h" #include "chrome/browser/apps/app_launch_for_metro_restart_win.h" #include "chrome/browser/search_engines/template_url_service_factory.h" +#include "chrome/browser/shell_integration_win.h" #include "components/search_engines/desktop_search_redirection_infobar_delegate.h" #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_service.h" @@ -385,7 +386,7 @@ // Active Setup versioning and on OS upgrades) instead of every startup. // http://crbug.com/577697 if (process_startup) - shell_integration::MigrateTaskbarPins(); + shell_integration::win::MigrateTaskbarPins(); #endif // defined(OS_WIN) return true;
diff --git a/chrome/browser/ui/tabs/tab_utils.cc b/chrome/browser/ui/tabs/tab_utils.cc index 0090aa5..9422023d 100644 --- a/chrome/browser/ui/tabs/tab_utils.cc +++ b/chrome/browser/ui/tabs/tab_utils.cc
@@ -18,9 +18,11 @@ #include "chrome/grit/generated_resources.h" #include "content/public/browser/web_contents.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/base/material_design/material_design_controller.h" #include "ui/base/theme_provider.h" #include "ui/gfx/animation/multi_animation.h" #include "ui/gfx/image/image.h" +#include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/vector_icons_public.h" #include "ui/native_theme/common_theme.h" #include "ui/native_theme/native_theme.h" @@ -178,24 +180,29 @@ gfx::Image GetTabAlertIndicatorImage(TabAlertState alert_state, SkColor button_color) { #if defined(OS_MACOSX) - ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); - switch (alert_state) { - case TabAlertState::AUDIO_PLAYING: - return rb->GetNativeImageNamed(IDR_TAB_AUDIO_INDICATOR); - case TabAlertState::AUDIO_MUTING: - return rb->GetNativeImageNamed(IDR_TAB_AUDIO_MUTING_INDICATOR); - case TabAlertState::MEDIA_RECORDING: - return rb->GetNativeImageNamed(IDR_TAB_RECORDING_INDICATOR); - case TabAlertState::TAB_CAPTURING: - return rb->GetNativeImageNamed(IDR_TAB_CAPTURE_INDICATOR); - case TabAlertState::BLUETOOTH_CONNECTED: - return rb->GetNativeImageNamed(IDR_TAB_BLUETOOTH_INDICATOR); - case TabAlertState::USB_CONNECTED: - return rb->GetNativeImageNamed(IDR_TAB_USB_INDICATOR); - case TabAlertState::NONE: - break; + if (!ui::MaterialDesignController::IsModeMaterial()) { + ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); + switch (alert_state) { + case TabAlertState::AUDIO_PLAYING: + return rb->GetNativeImageNamed(IDR_TAB_AUDIO_INDICATOR); + case TabAlertState::AUDIO_MUTING: + return rb->GetNativeImageNamed(IDR_TAB_AUDIO_MUTING_INDICATOR); + case TabAlertState::MEDIA_RECORDING: + return rb->GetNativeImageNamed(IDR_TAB_RECORDING_INDICATOR); + case TabAlertState::TAB_CAPTURING: + return rb->GetNativeImageNamed(IDR_TAB_CAPTURE_INDICATOR); + case TabAlertState::BLUETOOTH_CONNECTED: + return rb->GetNativeImageNamed(IDR_TAB_BLUETOOTH_INDICATOR); + case TabAlertState::USB_CONNECTED: + return rb->GetNativeImageNamed(IDR_TAB_USB_INDICATOR); + case TabAlertState::NONE: + break; + } + NOTREACHED(); + return gfx::Image(); } -#else +#endif + gfx::VectorIconId icon_id = gfx::VectorIconId::VECTOR_ICON_NONE; switch (alert_state) { case TabAlertState::AUDIO_PLAYING: @@ -221,7 +228,7 @@ } if (icon_id != gfx::VectorIconId::VECTOR_ICON_NONE) return gfx::Image(gfx::CreateVectorIcon(icon_id, 16, button_color)); -#endif + NOTREACHED(); return gfx::Image(); }
diff --git a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc index a04132a5..9413acf 100644 --- a/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc +++ b/chrome/browser/ui/toolbar/recent_tabs_sub_menu_model_unittest.cc
@@ -494,7 +494,14 @@ EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(12, &url, &title)); } -TEST_F(RecentTabsSubMenuModelTest, MaxSessionsAndRecency) { +// Per http://crbug.com/603744, MaxSessionsAndRecenty fails intermittently on +// windows and linux. +#if defined(WIN) || defined(LINUX) +#define MAYBE_MaxSessionsAndRecency DISABLED_MaxSessionsAndRecency +#else +#define MAYBE_MaxSessionsAndRecency MaxSessionsAndRecency +#endif +TEST_F(RecentTabsSubMenuModelTest, MAYBE_MaxSessionsAndRecency) { // Create 4 sessions : each session has 1 window with 1 tab each. RecentTabsBuilderTestHelper recent_tabs_builder; for (int s = 0; s < 4; ++s) {
diff --git a/chrome/browser/ui/views/app_list/win/app_list_service_win.cc b/chrome/browser/ui/views/app_list/win/app_list_service_win.cc index 04b1c98..c4680ca 100644 --- a/chrome/browser/ui/views/app_list/win/app_list_service_win.cc +++ b/chrome/browser/ui/views/app_list/win/app_list_service_win.cc
@@ -27,7 +27,7 @@ #include "chrome/browser/platform_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/browser/ui/app_list/app_list_util.h" #include "chrome/browser/ui/ash/app_list/app_list_service_ash.h" #include "chrome/browser/ui/views/app_list/win/activation_tracker_win.h" @@ -115,7 +115,7 @@ command_line->GetSwitchValuePath(switches::kUserDataDir).AppendASCII( chrome::kInitialProfile); } - return shell_integration::GetAppListAppModelIdForProfile( + return shell_integration::win::GetAppListAppModelIdForProfile( initial_profile_path); }
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc index 35c02781..e717a72c 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc
@@ -10,7 +10,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/browser/ui/views/apps/app_window_desktop_native_widget_aura_win.h" #include "chrome/browser/ui/views/apps/glass_app_window_frame_view_win.h" #include "chrome/browser/web_applications/web_app.h" @@ -73,7 +73,7 @@ HWND hwnd = GetNativeAppWindowHWND(); Profile* profile = Profile::FromBrowserContext(app_window()->browser_context()); - app_model_id_ = shell_integration::GetAppModelIdForProfile( + app_model_id_ = shell_integration::win::GetAppModelIdForProfile( app_name_wide, profile->GetPath()); ui::win::SetAppIdForWindow(app_model_id_, hwnd); web_app::UpdateRelaunchDetailsForApp(profile, extension, hwnd);
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc index b0b3b9a..23adb22 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -189,6 +189,12 @@ return kHorizontalMargin[ui::MaterialDesignController::GetMode()]; } +gfx::Size CalculateInkDropSize(const gfx::Size& button_size) { + gfx::Size ink_drop_size(button_size); + ink_drop_size.Enlarge(0, -2); + return ink_drop_size; +} + // BookmarkButtonBase ----------------------------------------------- // Base class for non-menu hosting buttons used on the bookmark bar. @@ -234,14 +240,16 @@ std::unique_ptr<views::InkDropAnimation> CreateInkDropAnimation() const override { return base::WrapUnique(new views::FloodFillInkDropAnimation( - size(), GetInkDropCenter(), GetInkDropBaseColor())); + CalculateInkDropSize(size()), GetInkDropCenter(), + GetInkDropBaseColor())); } std::unique_ptr<views::InkDropHover> CreateInkDropHover() const override { if (!ShouldShowInkDropHover()) return nullptr; - return base::WrapUnique(new views::InkDropHover( - size(), 0, GetInkDropCenter(), GetInkDropBaseColor())); + return base::WrapUnique( + new views::InkDropHover(CalculateInkDropSize(size()), 0, + GetInkDropCenter(), GetInkDropBaseColor())); } SkColor GetInkDropBaseColor() const override { @@ -333,14 +341,16 @@ std::unique_ptr<views::InkDropAnimation> CreateInkDropAnimation() const override { return base::WrapUnique(new views::FloodFillInkDropAnimation( - size(), GetInkDropCenter(), GetInkDropBaseColor())); + CalculateInkDropSize(size()), GetInkDropCenter(), + GetInkDropBaseColor())); } std::unique_ptr<views::InkDropHover> CreateInkDropHover() const override { if (!ShouldShowInkDropHover()) return nullptr; - return base::WrapUnique(new views::InkDropHover( - size(), 0, GetInkDropCenter(), GetInkDropBaseColor())); + return base::WrapUnique( + new views::InkDropHover(CalculateInkDropSize(size()), 0, + GetInkDropCenter(), GetInkDropBaseColor())); } SkColor GetInkDropBaseColor() const override {
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index 9d6df84..fe8c83e 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -815,14 +815,12 @@ if (should_animate) { if (!loading_animation_timer_.IsRunning()) { // Loads are happening, and the timer isn't running, so start it. - last_animation_time_ = base::TimeTicks::Now(); loading_animation_timer_.Start(FROM_HERE, TimeDelta::FromMilliseconds(kLoadingAnimationFrameTimeMs), this, &BrowserView::LoadingAnimationCallback); } } else { if (loading_animation_timer_.IsRunning()) { - last_animation_time_ = base::TimeTicks(); loading_animation_timer_.Stop(); // Loads are now complete, update the state if a task was scheduled. LoadingAnimationCallback(); @@ -2121,13 +2119,6 @@ } void BrowserView::LoadingAnimationCallback() { - base::TimeTicks now = base::TimeTicks::Now(); - if (!last_animation_time_.is_null()) { - UMA_HISTOGRAM_TIMES( - "Tabs.LoadingAnimationTime", - now - last_animation_time_); - } - last_animation_time_ = now; if (browser_->is_type_tabbed()) { // Loading animations are shown in the tab for tabbed windows. We check the // browser type instead of calling IsTabStripVisible() because the latter
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index ba1a55e5..3dbe1f5 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -682,9 +682,6 @@ views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_; - // Used to measure the loading spinner animation rate. - base::TimeTicks last_animation_time_; - // If this flag is set then SetFocusToLocationBar() will set focus to the // location bar even if the browser window is not active. bool force_location_bar_focus_;
diff --git a/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc b/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc index 58d21f44..00fcecd0 100644 --- a/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc +++ b/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc
@@ -11,7 +11,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_shortcut_manager_win.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_win.h" @@ -51,9 +51,10 @@ // name. See http://crbug.com/7028. base::string16 app_id = browser->is_app() - ? shell_integration::GetAppModelIdForProfile( + ? shell_integration::win::GetAppModelIdForProfile( base::UTF8ToWide(browser->app_name()), profile->GetPath()) - : shell_integration::GetChromiumModelIdForProfile(profile->GetPath()); + : shell_integration::win::GetChromiumModelIdForProfile( + profile->GetPath()); base::FilePath icon_path; base::string16 command_line_string; base::string16 pinned_name;
diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc index 0e76224..9b38371 100644 --- a/chrome/browser/ui/views/hung_renderer_view.cc +++ b/chrome/browser/ui/views/hung_renderer_view.cc
@@ -38,7 +38,7 @@ #if defined(OS_WIN) #include "chrome/browser/hang_monitor/hang_crash_dump_win.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "ui/base/win/shell.h" #include "ui/views/win/hwnd_util.h" #endif @@ -267,7 +267,8 @@ Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext()); ui::win::SetAppIdForWindow( - shell_integration::GetChromiumModelIdForProfile(profile->GetPath()), + shell_integration::win::GetChromiumModelIdForProfile( + profile->GetPath()), views::HWNDForWidget(GetWidget())); #endif
diff --git a/chrome/browser/ui/views/new_task_manager_view.cc b/chrome/browser/ui/views/new_task_manager_view.cc index f95f800d..9cef45a 100644 --- a/chrome/browser/ui/views/new_task_manager_view.cc +++ b/chrome/browser/ui/views/new_task_manager_view.cc
@@ -34,7 +34,7 @@ #endif // defined(USE_ASH) #if defined(OS_WIN) -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "ui/base/win/shell.h" #include "ui/views/win/hwnd_util.h" #endif // defined(OS_WIN) @@ -80,7 +80,7 @@ // process. if (browser) { ui::win::SetAppIdForWindow( - shell_integration::GetChromiumModelIdForProfile( + shell_integration::win::GetChromiumModelIdForProfile( browser->profile()->GetPath()), views::HWNDForWidget(g_task_manager_view->GetWidget())); }
diff --git a/chrome/browser/ui/views/panels/panel_stack_view.cc b/chrome/browser/ui/views/panels/panel_stack_view.cc index 0c88244..dfd7243 100644 --- a/chrome/browser/ui/views/panels/panel_stack_view.cc +++ b/chrome/browser/ui/views/panels/panel_stack_view.cc
@@ -20,7 +20,7 @@ #if defined(OS_WIN) #include "base/win/windows_version.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "ui/base/win/shell.h" #include "ui/views/win/hwnd_util.h" #endif @@ -505,7 +505,7 @@ DCHECK(!panels_.empty()); Panel* panel = panels_.front(); ui::win::SetAppIdForWindow( - shell_integration::GetAppModelIdForProfile( + shell_integration::win::GetAppModelIdForProfile( base::UTF8ToWide(panel->app_name()), panel->profile()->GetPath()), views::HWNDForWidget(window));
diff --git a/chrome/browser/ui/views/panels/panel_view.cc b/chrome/browser/ui/views/panels/panel_view.cc index 25d46920..6644904 100644 --- a/chrome/browser/ui/views/panels/panel_view.cc +++ b/chrome/browser/ui/views/panels/panel_view.cc
@@ -35,7 +35,7 @@ #if defined(OS_WIN) #include "base/win/windows_version.h" -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/browser/ui/views/panels/taskbar_window_thumbnailer_win.h" #include "ui/base/win/shell.h" #include "ui/gfx/icon_util.h" @@ -323,7 +323,7 @@ #if defined(OS_WIN) ui::win::SetAppIdForWindow( - shell_integration::GetAppModelIdForProfile( + shell_integration::win::GetAppModelIdForProfile( base::UTF8ToWide(panel->app_name()), panel->profile()->GetPath()), views::HWNDForWidget(window_)); ui::win::PreventWindowFromPinning(views::HWNDForWidget(window_));
diff --git a/chrome/browser/ui/views/profiles/user_manager_view.cc b/chrome/browser/ui/views/profiles/user_manager_view.cc index 46039d4..c182c75 100644 --- a/chrome/browser/ui/views/profiles/user_manager_view.cc +++ b/chrome/browser/ui/views/profiles/user_manager_view.cc
@@ -38,7 +38,7 @@ #include "ui/views/window/dialog_client_view.h" #if defined(OS_WIN) -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "ui/base/win/shell.h" #include "ui/views/win/hwnd_util.h" #endif @@ -323,9 +323,10 @@ #if defined(OS_WIN) // Set the app id for the task manager to the app id of its parent - ui::win::SetAppIdForWindow(shell_integration::GetChromiumModelIdForProfile( - system_profile->GetPath()), - views::HWNDForWidget(GetWidget())); + ui::win::SetAppIdForWindow( + shell_integration::win::GetChromiumModelIdForProfile( + system_profile->GetPath()), + views::HWNDForWidget(GetWidget())); #endif #if defined(USE_ASH)
diff --git a/chrome/browser/ui/views/task_manager_view.cc b/chrome/browser/ui/views/task_manager_view.cc index e5b8723..7487bc4 100644 --- a/chrome/browser/ui/views/task_manager_view.cc +++ b/chrome/browser/ui/views/task_manager_view.cc
@@ -47,7 +47,7 @@ #endif #if defined(OS_WIN) -#include "chrome/browser/shell_integration.h" +#include "chrome/browser/shell_integration_win.h" #include "ui/base/win/shell.h" #include "ui/views/win/hwnd_util.h" #endif @@ -444,9 +444,10 @@ // no parent is specified, the app id will default to that of the initial // process. if (browser) { - ui::win::SetAppIdForWindow(shell_integration::GetChromiumModelIdForProfile( - browser->profile()->GetPath()), - views::HWNDForWidget(instance_->GetWidget())); + ui::win::SetAppIdForWindow( + shell_integration::win::GetChromiumModelIdForProfile( + browser->profile()->GetPath()), + views::HWNDForWidget(instance_->GetWidget())); } #endif instance_->GetWidget()->Show();
diff --git a/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc b/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc index 8e095bcc..1843c476 100644 --- a/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc +++ b/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc
@@ -30,18 +30,14 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/text_constants.h" #include "ui/gfx/vector_icons_public.h" -#include "ui/views/bubble/bubble_delegate.h" +#include "ui/views/bubble/bubble_dialog_delegate.h" #include "ui/views/bubble/bubble_frame_view.h" -#include "ui/views/controls/button/label_button.h" -#include "ui/views/controls/button/label_button_border.h" -#include "ui/views/controls/separator.h" #include "ui/views/controls/styled_label.h" #include "ui/views/controls/styled_label_listener.h" #include "ui/views/controls/table/table_view.h" #include "ui/views/controls/table/table_view_observer.h" -#include "ui/views/layout/box_layout.h" #include "ui/views/layout/grid_layout.h" -#include "ui/views/layout/layout_constants.h" +#include "ui/views/window/dialog_client_view.h" namespace { @@ -61,26 +57,24 @@ /////////////////////////////////////////////////////////////////////////////// // View implementation for the chooser bubble. -class ChooserBubbleUiViewDelegate : public views::BubbleDelegateView, - public views::ButtonListener, +class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, public views::StyledLabelListener, public views::TableViewObserver { public: ChooserBubbleUiViewDelegate(views::View* anchor_view, views::BubbleBorder::Arrow anchor_arrow, - ChooserBubbleUiView* owner, ChooserBubbleController* controller); ~ChooserBubbleUiViewDelegate() override; - void Close(); - - // views::BubbleDelegateView: + // views::BubbleDialogDelegateView: bool ShouldShowWindowTitle() const override; base::string16 GetWindowTitle() const override; - void OnWidgetDestroying(views::Widget* widget) override; - - // views::ButtonListener: - void ButtonPressed(views::Button* button, const ui::Event& event) override; + base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; + bool IsDialogButtonEnabled(ui::DialogButton button) const override; + views::View* CreateFootnoteView() override; + bool Accept() override; + bool Cancel() override; + bool Close() override; // views::StyledLabelListener: void StyledLabelLinkClicked(views::StyledLabel* label, @@ -95,16 +89,18 @@ void UpdateAnchor(views::View* anchor_view, views::BubbleBorder::Arrow anchor_arrow); - private: - friend ChooserBubbleUiView; + // Called by ChooserBubbleUiView's destructor. When ChooserBubbleUiView object + // is destroyed, the |controller_| it passed to this class may not be used any + // more since it may be destroyed too. + void ControllerDestroying(); - ChooserBubbleUiView* owner_; + ChooserTableModel* chooser_table_model() const; + + private: ChooserBubbleController* controller_; - views::LabelButton* connect_button_; views::TableView* table_view_; ChooserTableModel* chooser_table_model_; - bool button_pressed_; DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate); }; @@ -132,26 +128,18 @@ void OnOptionRemoved(size_t index) override; void Update(); - void SetConnectButton(views::LabelButton* connect_button); private: ui::TableModelObserver* observer_; ChooserBubbleController* controller_; - views::LabelButton* connect_button_; }; ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( views::View* anchor_view, views::BubbleBorder::Arrow anchor_arrow, - ChooserBubbleUiView* owner, ChooserBubbleController* controller) - : views::BubbleDelegateView(anchor_view, anchor_arrow), - owner_(owner), - controller_(controller), - button_pressed_(false) { - // TODO(juncai): try using DialogClientView to build the chooser UI view since - // they look similar. - // https://crbug.com/587545 + : views::BubbleDialogDelegateView(anchor_view, anchor_arrow), + controller_(controller) { // ------------------------------------ // | Chooser bubble title | // | -------------------------------- | @@ -190,69 +178,12 @@ views::GridLayout::FILL, views::GridLayout::FILL, kChooserPermissionBubbleWidth, kChooserPermissionBubbleHeight); - - layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); - - // Lay out the Connect/Cancel buttons. - layout->StartRow(0, 0); - views::View* button_row = new views::View(); - views::BoxLayout* button_layout = new views::BoxLayout( - views::BoxLayout::kHorizontal, 0, 0, views::kRelatedButtonHSpacing); - button_layout->set_main_axis_alignment( - views::BoxLayout::MAIN_AXIS_ALIGNMENT_END); - button_row->SetLayoutManager(button_layout); - - base::string16 connect_text = - l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT); - connect_button_ = new views::LabelButton(this, connect_text); - connect_button_->SetStyle(views::Button::STYLE_BUTTON); - // Disable the connect button at the beginning since no device selected yet. - connect_button_->SetEnabled(false); - button_row->AddChildView(connect_button_); - chooser_table_model_->SetConnectButton(connect_button_); - - base::string16 cancel_text = - l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT); - views::LabelButton* cancel_button = new views::LabelButton(this, cancel_text); - cancel_button->SetStyle(views::Button::STYLE_BUTTON); - button_row->AddChildView(cancel_button); - layout->AddView(button_row); - - layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); - - // Lay out the separator. - layout->StartRow(0, 0); - layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); - - layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); - - // Lay out the styled label. - layout->StartRow(0, 0); - base::string16 link = - l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT); - size_t offset; - base::string16 text = l10n_util::GetStringFUTF16( - IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT, link, &offset); - views::StyledLabel* label = new views::StyledLabel(text, this); - label->AddStyleRange(gfx::Range(offset, offset + link.length()), - views::StyledLabel::RangeStyleInfo::CreateForLink()); - layout->AddView(label); } ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() { - RemoveAllChildViews(true); - if (owner_) - owner_->Close(); chooser_table_model_->SetObserver(nullptr); } -void ChooserBubbleUiViewDelegate::Close() { - if (!button_pressed_) - controller_->Close(); - owner_ = nullptr; - GetWidget()->Close(); -} - bool ChooserBubbleUiViewDelegate::ShouldShowWindowTitle() const { return true; } @@ -261,27 +192,48 @@ return l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_PROMPT); } -void ChooserBubbleUiViewDelegate::OnWidgetDestroying(views::Widget* widget) { - views::BubbleDelegateView::OnWidgetDestroying(widget); - if (owner_) { - owner_->Close(); - owner_ = nullptr; - } +base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel( + ui::DialogButton button) const { + return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK + ? IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT + : IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT); } -void ChooserBubbleUiViewDelegate::ButtonPressed(views::Button* button, - const ui::Event& event) { - button_pressed_ = true; +bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled( + ui::DialogButton button) const { + return button == ui::DIALOG_BUTTON_OK + ? !table_view_->selection_model().empty() + : true; +} - if (button == connect_button_) +views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() { + base::string16 link = + l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT); + size_t offset; + base::string16 text = l10n_util::GetStringFUTF16( + IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT, link, &offset); + views::StyledLabel* label = new views::StyledLabel(text, this); + label->AddStyleRange(gfx::Range(offset, offset + link.length()), + views::StyledLabel::RangeStyleInfo::CreateForLink()); + return label; +} + +bool ChooserBubbleUiViewDelegate::Accept() { + if (controller_) controller_->Select(table_view_->selection_model().active()); - else - controller_->Cancel(); + return true; +} - if (owner_) { - owner_->Close(); - owner_ = nullptr; - } +bool ChooserBubbleUiViewDelegate::Cancel() { + if (controller_) + controller_->Cancel(); + return true; +} + +bool ChooserBubbleUiViewDelegate::Close() { + if (controller_) + controller_->Close(); + return true; } void ChooserBubbleUiViewDelegate::StyledLabelLinkClicked( @@ -292,7 +244,7 @@ } void ChooserBubbleUiViewDelegate::OnSelectionChanged() { - connect_button_->SetEnabled(!table_view_->selection_model().empty()); + GetDialogClientView()->UpdateDialogButtons(); } void ChooserBubbleUiViewDelegate::UpdateAnchor( @@ -303,19 +255,18 @@ set_arrow(anchor_arrow); - // Update the border in the bubble: will either add or remove the arrow. - views::BubbleFrameView* frame = - views::BubbleDelegateView::GetBubbleFrameView(); - views::BubbleBorder::Arrow adjusted_arrow = anchor_arrow; - if (base::i18n::IsRTL()) - adjusted_arrow = views::BubbleBorder::horizontal_mirror(adjusted_arrow); - frame->SetBubbleBorder(std::unique_ptr<views::BubbleBorder>( - new views::BubbleBorder(adjusted_arrow, shadow(), color()))); - // Reposition the bubble based on the updated arrow and view. SetAnchorView(anchor_view); } +void ChooserBubbleUiViewDelegate::ControllerDestroying() { + controller_ = nullptr; +} + +ChooserTableModel* ChooserBubbleUiViewDelegate::chooser_table_model() const { + return chooser_table_model_; +} + ChooserTableModel::ChooserTableModel(ChooserBubbleController* controller) : observer_(nullptr), controller_(controller) { controller_->set_observer(this); @@ -376,10 +327,6 @@ } } -void ChooserTableModel::SetConnectButton(views::LabelButton* connect_button) { - connect_button_ = connect_button; -} - ////////////////////////////////////////////////////////////////////////////// // ChooserBubbleUiView @@ -392,35 +339,32 @@ DCHECK(controller_); } -ChooserBubbleUiView::~ChooserBubbleUiView() {} +ChooserBubbleUiView::~ChooserBubbleUiView() { + if (chooser_bubble_ui_view_delegate_) + chooser_bubble_ui_view_delegate_->ControllerDestroying(); +} -void ChooserBubbleUiView::Show(BubbleReference bubble_reference) { +void ChooserBubbleUiView::Show(BubbleReference /*bubble_reference*/) { chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate( - GetAnchorView(), GetAnchorArrow(), this, controller_); + GetAnchorView(), GetAnchorArrow(), controller_); // Set |parent_window| because some valid anchors can become hidden. views::Widget* widget = views::Widget::GetWidgetForNativeWindow( browser_->window()->GetNativeWindow()); chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView()); - views::BubbleDelegateView::CreateBubble(chooser_bubble_ui_view_delegate_) + views::BubbleDialogDelegateView::CreateBubble( + chooser_bubble_ui_view_delegate_) ->Show(); - chooser_bubble_ui_view_delegate_->chooser_table_model_->Update(); + chooser_bubble_ui_view_delegate_->chooser_table_model()->Update(); } -void ChooserBubbleUiView::Close() { - if (chooser_bubble_ui_view_delegate_) { - chooser_bubble_ui_view_delegate_->Close(); - chooser_bubble_ui_view_delegate_ = nullptr; - } -} +void ChooserBubbleUiView::Close() {} void ChooserBubbleUiView::UpdateAnchorPosition() { - if (chooser_bubble_ui_view_delegate_) { - chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(), - GetAnchorArrow()); - } + chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(), + GetAnchorArrow()); } views::View* ChooserBubbleUiView::GetAnchorView() {
diff --git a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc index 894abae..31b680fa 100644 --- a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc
@@ -19,6 +19,7 @@ #include "chrome/browser/chromeos/login/screens/network_error.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" +#include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_screen.h" #include "chrome/grit/generated_resources.h" #include "chromeos/network/network_state.h" @@ -120,6 +121,8 @@ // EnrollmentScreenHandler, WebUIMessageHandler implementation -- void EnrollmentScreenHandler::RegisterMessages() { + AddCallback("toggleFakeEnrollment", + &EnrollmentScreenHandler::HandleToggleFakeEnrollment); AddCallback("oauthEnrollClose", &EnrollmentScreenHandler::HandleClose); AddCallback("oauthEnrollCompleteLogin", @@ -456,6 +459,9 @@ } // EnrollmentScreenHandler, private ----------------------------- +void EnrollmentScreenHandler::HandleToggleFakeEnrollment() { + policy::PolicyOAuth2TokenFetcher::UseFakeTokensForTesting(); +} void EnrollmentScreenHandler::HandleClose(const std::string& reason) { DCHECK(controller_);
diff --git a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h index 88a1a37..05b95145 100644 --- a/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.h
@@ -62,6 +62,7 @@ private: // Handlers for WebUI messages. + void HandleToggleFakeEnrollment(); void HandleClose(const std::string& reason); void HandleCompleteLogin(const std::string& user, const std::string& auth_code);
diff --git a/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.cc b/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.cc index 6afbb281..b6ddf97 100644 --- a/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.cc +++ b/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.cc
@@ -133,8 +133,7 @@ weak_ptr_factory_.GetWeakPtr())); } -void MdDownloadsDOMHandler::RenderViewReused( - content::RenderViewHost* render_view_host) { +void MdDownloadsDOMHandler::RenderViewReused() { list_tracker_.Stop(); list_tracker_.Reset(); CheckForRemovedFiles();
diff --git a/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.h b/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.h index 76fc88b..1be20704 100644 --- a/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.h +++ b/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.h
@@ -38,8 +38,7 @@ // WebUIMessageHandler implementation. void RegisterMessages() override; - - void RenderViewReused(content::RenderViewHost* render_view_host); + void RenderViewReused() override; // Callback for the "getDownloads" message. void HandleGetDownloads(const base::ListValue* args);
diff --git a/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler_unittest.cc b/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler_unittest.cc index 54e9e58..f244ca1 100644 --- a/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler_unittest.cc +++ b/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler_unittest.cc
@@ -27,5 +27,5 @@ testing::Mock::VerifyAndClear(&manager); EXPECT_CALL(manager, CheckForHistoryFilesRemoval()); - handler.RenderViewReused(nullptr); + handler.RenderViewReused(); }
diff --git a/chrome/browser/ui/webui/md_downloads/md_downloads_ui.cc b/chrome/browser/ui/webui/md_downloads/md_downloads_ui.cc index 7880664..8e6d33a 100644 --- a/chrome/browser/ui/webui/md_downloads/md_downloads_ui.cc +++ b/chrome/browser/ui/webui/md_downloads/md_downloads_ui.cc
@@ -165,8 +165,3 @@ return ResourceBundle::GetSharedInstance(). LoadDataResourceBytesForScale(IDR_DOWNLOADS_FAVICON, scale_factor); } - -void MdDownloadsUI::RenderViewReused( - content::RenderViewHost* render_view_host) { - handler_->RenderViewReused(render_view_host); -}
diff --git a/chrome/browser/ui/webui/md_downloads/md_downloads_ui.h b/chrome/browser/ui/webui/md_downloads/md_downloads_ui.h index 55d21e1d..7716c9e6 100644 --- a/chrome/browser/ui/webui/md_downloads/md_downloads_ui.h +++ b/chrome/browser/ui/webui/md_downloads/md_downloads_ui.h
@@ -26,9 +26,6 @@ static base::RefCountedMemory* GetFaviconResourceBytes( ui::ScaleFactor scale_factor); - // content::WebUIController: - void RenderViewReused(content::RenderViewHost* render_view_host) override; - private: MdDownloadsDOMHandler* handler_; // Weak.
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chrome/browser/ui/webui/settings/md_settings_ui.cc index c728a1b54..b947b277 100644 --- a/chrome/browser/ui/webui/settings/md_settings_ui.cc +++ b/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -106,12 +106,6 @@ MdSettingsUI::~MdSettingsUI() { } -void MdSettingsUI::RenderViewReused( - content::RenderViewHost* /*render_view_host*/) { - for (SettingsPageUIHandler* handler : handlers_) - handler->RenderViewReused(); -} - void MdSettingsUI::AddSettingsPageUIHandler(SettingsPageUIHandler* handler) { DCHECK(handler); handlers_.insert(handler);
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.h b/chrome/browser/ui/webui/settings/md_settings_ui.h index f826a1e..8c48fae 100644 --- a/chrome/browser/ui/webui/settings/md_settings_ui.h +++ b/chrome/browser/ui/webui/settings/md_settings_ui.h
@@ -23,9 +23,6 @@ explicit MdSettingsUI(content::WebUI* web_ui); ~MdSettingsUI() override; - // content::WebUIController: - void RenderViewReused(content::RenderViewHost* render_view_host) override; - // content::WebContentsObserver: void DidStartProvisionalLoadForFrame( content::RenderFrameHost* render_frame_host,
diff --git a/chrome/browser/ui/webui/settings/settings_page_ui_handler.h b/chrome/browser/ui/webui/settings/settings_page_ui_handler.h index f71d75a..6a9ad0c 100644 --- a/chrome/browser/ui/webui/settings/settings_page_ui_handler.h +++ b/chrome/browser/ui/webui/settings/settings_page_ui_handler.h
@@ -20,10 +20,6 @@ // WebUIMessageHandler implementation. void RegisterMessages() override {} - // TODO(dbeam): move to WebUIMessageHandler? - // Called when a navigation re-uses a renderer process (i.e. reload). - virtual void RenderViewReused() {} - protected: // Helper method for responding to JS requests initiated with // cr.sendWithPromise(), for the case where the returned promise should be
diff --git a/chrome/browser/ui/webui/uber/uber_ui.cc b/chrome/browser/ui/webui/uber/uber_ui.cc index 34e67b1..ea1a5bf 100644 --- a/chrome/browser/ui/webui/uber/uber_ui.cc +++ b/chrome/browser/ui/webui/uber/uber_ui.cc
@@ -194,13 +194,6 @@ } } -void UberUI::RenderViewReused(RenderViewHost* render_view_host) { - for (SubpageMap::iterator iter = sub_uis_.begin(); iter != sub_uis_.end(); - ++iter) { - iter->second->GetController()->RenderViewReused(render_view_host); - } -} - bool UberUI::OverrideHandleWebUIMessage(const GURL& source_url, const std::string& message, const base::ListValue& args) {
diff --git a/chrome/browser/ui/webui/uber/uber_ui.h b/chrome/browser/ui/webui/uber/uber_ui.h index 2e2284b..f3c2107 100644 --- a/chrome/browser/ui/webui/uber/uber_ui.h +++ b/chrome/browser/ui/webui/uber/uber_ui.h
@@ -55,7 +55,6 @@ // We forward these to |sub_uis_|. void RenderViewCreated(content::RenderViewHost* render_view_host) override; - void RenderViewReused(content::RenderViewHost* render_view_host) override; private: // A map from URL origin to WebUI instance.
diff --git a/chrome/browser/web_applications/update_shortcut_worker_win.cc b/chrome/browser/web_applications/update_shortcut_worker_win.cc index c2bcdd2d..cce42b2 100644 --- a/chrome/browser/web_applications/update_shortcut_worker_win.cc +++ b/chrome/browser/web_applications/update_shortcut_worker_win.cc
@@ -19,6 +19,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_win.h" #include "components/favicon_base/select_favicon_frames.h" @@ -204,7 +205,7 @@ CheckExistingShortcuts(); if (!shortcut_files_.empty()) { // Generates app id from web app url and profile path. - base::string16 app_id = shell_integration::GetAppModelIdForProfile( + base::string16 app_id = shell_integration::win::GetAppModelIdForProfile( base::UTF8ToWide( web_app::GenerateApplicationNameFromURL(shortcut_info_->url)), profile_path_);
diff --git a/chrome/browser/web_applications/web_app_win.cc b/chrome/browser/web_applications/web_app_win.cc index 951d04d..bd267ef 100644 --- a/chrome/browser/web_applications/web_app_win.cc +++ b/chrome/browser/web_applications/web_app_win.cc
@@ -22,6 +22,7 @@ #include "base/win/shortcut.h" #include "base/win/windows_version.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/shell_integration_win.h" #include "chrome/browser/web_applications/update_shortcut_worker_win.h" #include "chrome/common/chrome_switches.h" #include "chrome/installer/util/browser_distribution.h" @@ -213,7 +214,7 @@ // Generates app id from web app url and profile path. std::string app_name(web_app::GenerateApplicationNameFromInfo(shortcut_info)); - base::string16 app_id(shell_integration::GetAppModelIdForProfile( + base::string16 app_id(shell_integration::win::GetAppModelIdForProfile( base::UTF8ToUTF16(app_name), shortcut_info.profile_path)); bool success = true;
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index 9639d3a..8a684d9 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi
@@ -1924,6 +1924,8 @@ 'browser/ui/exclusive_access/fullscreen_controller_state_tests.h', 'browser/ui/exclusive_access/fullscreen_controller_test.cc', 'browser/ui/exclusive_access/fullscreen_controller_test.h', + 'browser/ui/passwords/manage_passwords_ui_controller_mock.cc', + 'browser/ui/passwords/manage_passwords_ui_controller_mock.h', 'browser/ui/test/test_confirm_bubble_model.cc', 'browser/ui/test/test_confirm_bubble_model.h', 'renderer/safe_browsing/mock_feature_extractor_clock.cc', @@ -2259,7 +2261,6 @@ '../components/components.gyp:webdata_services_test_support', '../components/components_strings.gyp:components_strings', '../content/app/resources/content_resources.gyp:content_resources', - '../device/core/core.gyp:device_core_mocks', '../device/bluetooth/bluetooth.gyp:device_bluetooth_mocks', '../device/usb/usb.gyp:device_usb_mocks', '../gpu/gpu.gyp:gpu_unittest_utils', @@ -2302,11 +2303,6 @@ 'dependencies!': [ '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput', ], - 'ldflags': [ - # Some android targets still depend on --gc-sections to link. - # TODO: remove --gc-sections for Debug builds (crbug.com/159847). - '-Wl,--gc-sections', - ], 'dependencies': [ '../testing/android/native_test.gyp:native_test_native_code', '../components/components.gyp:offline_pages', @@ -2367,8 +2363,9 @@ 'sources': [ '<@(chrome_unit_tests_extensions_sources)' ], 'dependencies': [ 'common/extensions/api/api.gyp:chrome_api', - '../device/hid/hid.gyp:device_hid_mocks', '../components/components.gyp:audio_modem_test_support', + '../device/core/core.gyp:device_core_mocks', + '../device/hid/hid.gyp:device_hid_mocks', '../extensions/extensions_resources.gyp:extensions_resources', '../extensions/extensions_strings.gyp:extensions_strings', ],
diff --git a/chrome/chrome_watcher/chrome_watcher_main.cc b/chrome/chrome_watcher/chrome_watcher_main.cc index 95ead77..8e00079 100644 --- a/chrome/chrome_watcher/chrome_watcher_main.cc +++ b/chrome/chrome_watcher/chrome_watcher_main.cc
@@ -224,11 +224,9 @@ browser_data_directory); #if BUILDFLAG(ENABLE_KASKO_HANG_REPORTS) - // Only activate hang reports for the canary channel. For testing purposes, - // Chrome instances with no channels will also report hangs. + // Only activate hang reports for the canary channel. if (launched_kasko && - (base::StringPiece16(channel_name) == L"" || - base::StringPiece16(channel_name) == installer::kChromeChannelCanary)) { + base::StringPiece16(channel_name) == installer::kChromeChannelCanary) { on_hung_callback = base::Bind(&DumpHungProcess, main_thread_id, channel_name, L"hung-process"); }
diff --git a/chrome/chrome_watcher/kasko_util.cc b/chrome/chrome_watcher/kasko_util.cc index 120f105d..9a61d28 100644 --- a/chrome/chrome_watcher/kasko_util.cc +++ b/chrome/chrome_watcher/kasko_util.cc
@@ -8,6 +8,7 @@ #include <memory> #include <string> +#include <utility> #include <vector> #include "base/base_paths.h" @@ -15,9 +16,13 @@ #include "base/callback_helpers.h" #include "base/environment.h" #include "base/files/file_path.h" +#include "base/format_macros.h" #include "base/macros.h" #include "base/path_service.h" +#include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "base/win/wait_chain.h" #include "base/win/win_util.h" #include "chrome/chrome_watcher/chrome_watcher_main_api.h" @@ -127,11 +132,32 @@ DCHECK(value); DCHECK(crash_keys); - kasko::api::CrashKey crash_key; - std::wcsncpy(crash_key.name, key, kasko::api::CrashKey::kNameMaxLength - 1); - std::wcsncpy(crash_key.value, value, - kasko::api::CrashKey::kValueMaxLength - 1); - crash_keys->push_back(crash_key); + crash_keys->resize(crash_keys->size() + 1); + kasko::api::CrashKey& crash_key = crash_keys->back(); + base::wcslcpy(crash_key.name, key, kasko::api::CrashKey::kNameMaxLength); + base::wcslcpy(crash_key.value, value, kasko::api::CrashKey::kValueMaxLength); +} + +// Get the |process| and the |thread_id| of the node inside the |wait_chain| +// that is of type ThreadType and belongs to a process that is valid for the +// capture of a crash dump. Returns if such a node was found. +bool GetLastValidNodeInfo(const base::win::WaitChainNodeVector& wait_chain, + base::Process* process, + DWORD* thread_id) { + // The last thread in the wait chain is nominated as the hung thread. + base::win::WaitChainNodeVector::const_reverse_iterator it; + for (it = wait_chain.rbegin(); it != wait_chain.rend(); ++it) { + if (it->ObjectType != WctThreadType) + continue; + + auto current_process = base::Process::Open(it->ThreadObject.ProcessId); + if (EnsureTargetProcessValidForCapture(current_process)) { + *process = std::move(current_process); + *thread_id = it->ThreadObject.ThreadId; + return true; + } + } + return false; } } // namespace @@ -192,6 +218,38 @@ crash_reporter::ReadMainModuleAnnotationsForKasko(process, &annotations); AddCrashKey(key, L"1", &annotations); + // Use the Wait Chain Traversal API to determine the hung thread. Defaults to + // UI thread on error. The wait chain may point to a different thread in a + // different process for the hung thread. + DWORD hung_thread_id = main_thread_id; + base::Process hung_process = process.Duplicate(); + + base::win::WaitChainNodeVector wait_chain; + bool is_deadlock = false; + if (base::win::GetThreadWaitChain(main_thread_id, &wait_chain, + &is_deadlock)) { + bool found_valid_node = + GetLastValidNodeInfo(wait_chain, &hung_process, &hung_thread_id); + DCHECK(found_valid_node); + + // The entire wait chain is added to the crash report via crash keys. + // + // As an example (key : value): + // hung-process-is-deadlock : false + // hung-process-wait-chain-00 : Thread #10242 with status Blocked + // hung-process-wait-chain-01 : Lock of type ThreadWait with status Owned + // hung-process-wait-chain-02 : Thread #77221 with status Blocked + // + AddCrashKey(L"hung-process-is-deadlock", is_deadlock ? L"true" : L"false", + &annotations); + for (size_t i = 0; i < wait_chain.size(); i++) { + AddCrashKey( + base::StringPrintf(L"hung-process-wait-chain-%02" PRIuS, i).c_str(), + base::win::WaitChainNodeToString(wait_chain[i]).c_str(), + &annotations); + } + } + std::vector<const base::char16*> key_buffers; std::vector<const base::char16*> value_buffers; for (const auto& crash_key : annotations) { @@ -201,7 +259,7 @@ key_buffers.push_back(nullptr); value_buffers.push_back(nullptr); - // Synthesize an exception for the main thread. Populate the record with the + // Synthesize an exception for the hung thread. Populate the record with the // current context of the thread to get the stack trace bucketed on the crash // backend. CONTEXT thread_context = {}; @@ -209,32 +267,32 @@ exception_record.ExceptionCode = EXCEPTION_ARRAY_BOUNDS_EXCEEDED; EXCEPTION_POINTERS exception_pointers = {&exception_record, &thread_context}; - base::win::ScopedHandle main_thread(::OpenThread( + base::win::ScopedHandle hung_thread(::OpenThread( THREAD_SUSPEND_RESUME | THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, - FALSE, main_thread_id)); + FALSE, hung_thread_id)); bool have_context = false; - if (main_thread.IsValid()) { - DWORD suspend_count = ::SuspendThread(main_thread.Get()); + if (hung_thread.IsValid()) { + DWORD suspend_count = ::SuspendThread(hung_thread.Get()); const DWORD kSuspendFailed = static_cast<DWORD>(-1); if (suspend_count != kSuspendFailed) { // Best effort capture of the context. thread_context.ContextFlags = CONTEXT_FLOATING_POINT | CONTEXT_SEGMENTS | CONTEXT_INTEGER | CONTEXT_CONTROL; - if (::GetThreadContext(main_thread.Get(), &thread_context) == TRUE) + if (::GetThreadContext(hung_thread.Get(), &thread_context) == TRUE) have_context = true; - ::ResumeThread(main_thread.Get()); + ::ResumeThread(hung_thread.Get()); } } // TODO(manzagop): consider making the dump-type channel-dependent. if (have_context) { kasko::api::SendReportForProcess( - process.Handle(), main_thread_id, &exception_pointers, + hung_process.Handle(), hung_thread_id, &exception_pointers, kasko::api::LARGER_DUMP_TYPE, key_buffers.data(), value_buffers.data()); } else { - kasko::api::SendReportForProcess(process.Handle(), 0, nullptr, + kasko::api::SendReportForProcess(hung_process.Handle(), 0, nullptr, kasko::api::LARGER_DUMP_TYPE, key_buffers.data(), value_buffers.data()); }
diff --git a/chrome/common/extensions/api/passwords_private.idl b/chrome/common/extensions/api/passwords_private.idl index c2a1265f..1b1d04131 100644 --- a/chrome/common/extensions/api/passwords_private.idl +++ b/chrome/common/extensions/api/passwords_private.idl
@@ -19,6 +19,9 @@ // The login information for this entry. LoginPair loginPair; + // The URL that should be linked to when clicking in the UI. + DOMString linkUrl; + // The number of characters in the password; used to display placeholder // dots in the UI. long numCharactersInPassword;
diff --git a/chrome/common/extensions/docs/templates/json/chrome_sidenav.json b/chrome/common/extensions/docs/templates/json/chrome_sidenav.json index 0b62b2fd..73e7f433 100644 --- a/chrome/common/extensions/docs/templates/json/chrome_sidenav.json +++ b/chrome/common/extensions/docs/templates/json/chrome_sidenav.json
@@ -1050,6 +1050,10 @@ "href": "/webstore/program_policies" }, { + "title": "User Data FAQ", + "href": "/webstore/user_data" + }, + { "title": "Terms of Service", "href": "/webstore/terms" }
diff --git a/chrome/common/extensions/docs/templates/private/standard_store_article.html b/chrome/common/extensions/docs/templates/private/standard_store_article.html index 6b7d0d2..6ec37711 100644 --- a/chrome/common/extensions/docs/templates/private/standard_store_article.html +++ b/chrome/common/extensions/docs/templates/private/standard_store_article.html
@@ -1,5 +1,6 @@ {{+partials.article article:bindTo sidenav:sidenavs.chrome + removeToc:removeToc platform:strings.webstore platformTitle:strings.webstoreTitle /}}
diff --git a/chrome/installer/linux/common/installer.include b/chrome/installer/linux/common/installer.include index 386d4877..ed85858 100644 --- a/chrome/installer/linux/common/installer.include +++ b/chrome/installer/linux/common/installer.include
@@ -164,6 +164,12 @@ install -m 644 "${BUILDDIR}/libwidevinecdm.so" "${STAGEDIR}/${INSTALLDIR}/" fi + # ANGLE + if [ "${CHANNEL}" != "stable" ]; then + install -m 644 "${BUILDDIR}/libGLESv2.so" "${STAGEDIR}/${INSTALLDIR}/" + install -m 644 "${BUILDDIR}/libEGL.so" "${STAGEDIR}/${INSTALLDIR}/" + fi + # Pepper Flash. PEPPERFLASH_SRCDIR="${BUILDDIR}/PepperFlash" PEPPERFLASH_DESTDIR="${STAGEDIR}/${INSTALLDIR}/PepperFlash"
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc index 82f0ab26..5e05535 100644 --- a/chrome/installer/setup/setup_main.cc +++ b/chrome/installer/setup/setup_main.cc
@@ -107,7 +107,9 @@ if ((result = key.Open(HKEY_LOCAL_MACHINE, path.c_str(), KEY_QUERY_VALUE | KEY_SET_VALUE | wowkey)) != ERROR_SUCCESS) { - LOG(ERROR) << "Failed to set DisplayVersion: " << path << " not found"; + VLOG(1) << "Skipping DisplayVersion update because registry key " << path + << " does not exist in " + << (wowkey == KEY_WOW64_64KEY ? "64" : "32") << "bit hive"; return result; } if ((result = key.ReadValue(kDisplayVersion, &existing)) != ERROR_SUCCESS) { @@ -141,11 +143,12 @@ reg_path = base::StringPrintf( L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{%ls}", product.c_str()); + // Consider the operation a success if either of these succeeds. LONG result2 = OverwriteDisplayVersion(reg_path, value, KEY_WOW64_64KEY); - if (result2 != ERROR_SUCCESS) - result2 = OverwriteDisplayVersion(reg_path, value, KEY_WOW64_32KEY); + LONG result3 = OverwriteDisplayVersion(reg_path, value, KEY_WOW64_32KEY); - return result1 != ERROR_SUCCESS ? result1 : result2; + return result1 != ERROR_SUCCESS ? result1 : + (result2 != ERROR_SUCCESS ? result3 : ERROR_SUCCESS); } void DelayedOverwriteDisplayVersions(const base::FilePath& setup_exe,
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 679b321..fba1569c 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1674,7 +1674,6 @@ "//components/webdata_services:test_support", "//content/app/resources", "//device/bluetooth:mocks", - "//device/core:mocks", "//device/usb:mocks", "//gpu:test_support", "//media:test_support", @@ -1709,10 +1708,6 @@ "//chrome/test/android/unit_tests_apk/AndroidManifest.xml" enable_multidex = true isolate_file = "../unit_tests.isolate" - - # Some android targets still depend on --gc-sections to link. - # TODO: remove --gc-sections for Debug builds (crbug.com/159847). - ldflags = [ "-Wl,--gc-sections" ] } else { sources += rebase_path( chrome_tests_unit_gypi_values.chrome_unit_tests_non_android_sources, @@ -1781,6 +1776,8 @@ deps += [ "//chrome/common/extensions/api", "//components/audio_modem:test_support", + "//device/core:mocks", + "//device/hid:mocks", "//extensions:extensions_resources", "//extensions/strings", ] @@ -2177,7 +2174,7 @@ } } -if (is_win || is_mac || (is_linux && !is_chromeos)) { +if (is_win || is_mac || is_linux) { # TODO(GYP): Figure out which of these work and are needed on other # platforms. test("chrome_app_unittests") {
diff --git a/chrome/test/base/mash_browser_tests_main.cc b/chrome/test/base/mash_browser_tests_main.cc index 0b52269..e6663061 100644 --- a/chrome/test/base/mash_browser_tests_main.cc +++ b/chrome/test/base/mash_browser_tests_main.cc
@@ -125,11 +125,15 @@ !command_line.HasSwitch(MojoTestConnector::kTestSwitch)) { base::AtExitManager at_exit; shell::InitializeLogging(); + // TODO(sky): nuke once resolve why test isn't shutting down: 594600. + LOG(ERROR) << "starting app " << command_line.GetCommandLineString(); shell::WaitForDebuggerIfNecessary(); #if !defined(OFFICIAL_BUILD) && defined(OS_WIN) base::RouteStdioToConsole(false); #endif *exit_code = shell::ChildProcessMain(); + // TODO(sky): nuke once resolve why test isn't shutting down: 594600. + LOG(ERROR) << "child exit_code=" << *exit_code; return true; } @@ -146,5 +150,7 @@ content::MojoShellConnection::SetFactoryForTest(&shell_connection_factory); } *exit_code = LaunchChromeTests(default_jobs, &delegate, argc, argv); + // TODO(sky): nuke once resolve why test isn't shutting down: 594600. + LOG(ERROR) << "RunMashBrowserTests exit_code=" << *exit_code; return true; }
diff --git a/chrome/test/chromedriver/run_buildbot_steps.py b/chrome/test/chromedriver/run_buildbot_steps.py index c59c71f..fa7e3e46 100755 --- a/chrome/test/chromedriver/run_buildbot_steps.py +++ b/chrome/test/chromedriver/run_buildbot_steps.py
@@ -62,6 +62,7 @@ """Uploads chromedriver server logs to google storage.""" util.MarkBuildStepStart('archive chromedriver server logs') for server_log in glob.glob(os.path.join(tempfile.gettempdir(), + 'chromedriver_*', 'chromedriver_log_*')): if os.path.isfile(server_log): base_name = os.path.basename(server_log)
diff --git a/chrome/test/data/webui/media_router/media_router_container_sink_list_tests.js b/chrome/test/data/webui/media_router/media_router_container_sink_list_tests.js index 40260c6..b06253b5 100644 --- a/chrome/test/data/webui/media_router/media_router_container_sink_list_tests.js +++ b/chrome/test/data/webui/media_router/media_router_container_sink_list_tests.js
@@ -72,6 +72,7 @@ // Get common functions and variables. var test_base = media_router_container_test_base.init(container); + checkCurrentView = test_base.checkCurrentView; checkElementsVisibleWithId = test_base.checkElementsVisibleWithId; checkElementText = test_base.checkElementText; fakeBlockingIssue = test_base.fakeBlockingIssue; @@ -183,9 +184,11 @@ }); // Tests for expected visible UI when the view is SINK_LIST, and there is - // a non blocking issue. + // a non blocking issue. Also tests for expected visible UI when the + // issue is cleared. test('sink list visibility non blocking issue', function(done) { container.showSinkList_(); + checkCurrentView(media_router.MediaRouterView.SINK_LIST); // Set an non-empty sink list. container.allSinks = fakeSinkList; @@ -193,18 +196,29 @@ // Set a non-blocking issue. The issue should be shown. container.issue = fakeNonBlockingIssue; setTimeout(function() { + checkCurrentView(media_router.MediaRouterView.SINK_LIST); checkElementsVisibleWithId(['container-header', 'issue-banner', 'sink-list', 'sink-list-view']); - done(); + // Replace issue with null. + container.issue = null; + setTimeout(function() { + checkCurrentView(media_router.MediaRouterView.SINK_LIST); + checkElementsVisibleWithId(['container-header', + 'sink-list', + 'sink-list-view']); + done(); + }); }); }); // Tests for expected visible UI when the view is SINK_LIST, and there is - // a blocking issue. + // a blocking issue. Also tests for expected visible UI when the issue is + // cleared. test('sink list visibility blocking issue', function(done) { container.showSinkList_(); + checkCurrentView(media_router.MediaRouterView.SINK_LIST); // Set an non-empty sink list. container.allSinks = fakeSinkList; @@ -213,10 +227,52 @@ // else, hidden. container.issue = fakeBlockingIssue; setTimeout(function() { + checkCurrentView(media_router.MediaRouterView.ISSUE); checkElementsVisibleWithId(['container-header', 'issue-banner', 'sink-list']); - done(); + // Replace issue with null. + container.issue = null; + setTimeout(function() { + checkCurrentView(media_router.MediaRouterView.SINK_LIST); + checkElementsVisibleWithId(['container-header', + 'sink-list', + 'sink-list-view']); + done(); + }); + }); + }); + + // Tests for expected visible UI when the view is SINK_LIST, and there is + // a blocking issue. Also tests for expected visible UI when the issue is + // cleared. + test('sink list visibility non-blocking replaced with blocking issue', + function(done) { + container.showSinkList_(); + checkCurrentView(media_router.MediaRouterView.SINK_LIST); + + // Set an non-empty sink list. + container.allSinks = fakeSinkList; + + // Set a non-blocking issue. The issue should be shown. + container.issue = fakeNonBlockingIssue; + setTimeout(function() { + checkCurrentView(media_router.MediaRouterView.SINK_LIST); + checkElementsVisibleWithId(['container-header', + 'issue-banner', + 'sink-list', + 'sink-list-view']); + + // Set a blocking issue. The issue should be shown, and everything + // else, hidden. + container.issue = fakeBlockingIssue; + setTimeout(function() { + checkCurrentView(media_router.MediaRouterView.ISSUE); + checkElementsVisibleWithId(['container-header', + 'issue-banner', + 'sink-list']); + done(); + }); }); });
diff --git a/chrome/test/data/webui/settings/dropdown_menu_tests.js b/chrome/test/data/webui/settings/dropdown_menu_tests.js index f3531e5..07eb041 100644 --- a/chrome/test/data/webui/settings/dropdown_menu_tests.js +++ b/chrome/test/data/webui/settings/dropdown_menu_tests.js
@@ -19,7 +19,8 @@ var dropdown; /** - * The IronSelectable (paper-menu) used internally by the dropdown menu. + * The IronSelectable (paper-listbox) used internally by the dropdown + * menu. * @type {Polymer.IronSelectableBehavior} */ var selectable; @@ -27,7 +28,7 @@ setup(function() { PolymerTest.clearBody(); dropdown = document.createElement('settings-dropdown-menu'); - selectable = dropdown.$$('paper-menu'); + selectable = dropdown.$$('paper-listbox'); document.body.appendChild(dropdown); });
diff --git a/chrome/test/kasko/hang_watcher_integration_test.py b/chrome/test/kasko/hang_watcher_integration_test.py index b6064fe..24ff958 100755 --- a/chrome/test/kasko/hang_watcher_integration_test.py +++ b/chrome/test/kasko/hang_watcher_integration_test.py
@@ -16,12 +16,11 @@ Typical usage (assuming in root 'src' directory): - generate project files with the following build variables: GYP variables: - branding=Chrome kasko=1 kasko_hang_reports=1 + branding=Chrome kasko_hang_reports=1 GN variables: target_cpu = "x86" is_debug = false is_chrome_branded = true - enable_kasko = true enable_kasko_hang_reports = true - build the release Chrome binaries: ninja -C {build_dir} chrome.exe chromedriver.exe @@ -46,10 +45,15 @@ def Main(): options = kasko.config.ParseCommandLine() - kasko.integration_test.RunTest(options, - 'chrome://delayeduithreadhang', - 120, - {'hung-process': 'DumpHungBrowserProcess()'}) + kasko.integration_test.RunTest( + options, + 'chrome://delayeduithreadhang', + 120, + { + 'hung-process': 'DumpHungBrowserProcess()', + 'hung-process-is-deadlock': 'GetThreadWaitChain()', + 'hung-process-wait-chain-00': 'GetThreadWaitChain()', + }) _LOGGER.info('Test passed successfully!')
diff --git a/chrome/tools/build/linux/FILES.cfg b/chrome/tools/build/linux/FILES.cfg index 4232b62..2b3b3b97 100644 --- a/chrome/tools/build/linux/FILES.cfg +++ b/chrome/tools/build/linux/FILES.cfg
@@ -127,6 +127,15 @@ 'buildtype': ['official'], 'direct_archive': 1, }, + # ANGLE files: + { + 'filename': 'libGLESv2.so', + 'buildtype': ['dev'], + }, + { + 'filename': 'libEGL.so', + 'buildtype': ['dev'], + }, # Flash Player files: # Pepper Flash Player files: {
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index 0b45e530..520ee4a 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp
@@ -440,6 +440,7 @@ 'cryptohome/homedir_methods_unittest.cc', 'cryptohome/system_salt_getter_unittest.cc', 'dbus/blocking_method_caller_unittest.cc', + 'dbus/cras_audio_client_unittest.cc', 'dbus/cros_disks_client_unittest.cc', 'dbus/dbus_client_bundle_unittest.cc', 'dbus/fake_easy_unlock_client_unittest.cc',
diff --git a/chromeos/cryptohome/system_salt_getter.cc b/chromeos/cryptohome/system_salt_getter.cc index 5109f107..cba4050 100644 --- a/chromeos/cryptohome/system_salt_getter.cc +++ b/chromeos/cryptohome/system_salt_getter.cc
@@ -71,10 +71,12 @@ const std::vector<uint8_t>& system_salt) { if (call_status == DBUS_METHOD_CALL_SUCCESS && !system_salt.empty() && - system_salt.size() % 2 == 0U) + system_salt.size() % 2 == 0U) { + raw_salt_ = system_salt; system_salt_ = ConvertRawSaltToHexString(system_salt); - else + } else { LOG(WARNING) << "System salt not available"; + } callback.Run(system_salt_); }
diff --git a/chromeos/dbus/cras_audio_client.h b/chromeos/dbus/cras_audio_client.h index 526c507..3851e51 100644 --- a/chromeos/dbus/cras_audio_client.h +++ b/chromeos/dbus/cras_audio_client.h
@@ -139,6 +139,8 @@ static CrasAudioClient* Create(); protected: + friend class CrasAudioClientTest; + // Create() should be used instead. CrasAudioClient();
diff --git a/chromeos/dbus/cras_audio_client_unittest.cc b/chromeos/dbus/cras_audio_client_unittest.cc new file mode 100644 index 0000000..d297701 --- /dev/null +++ b/chromeos/dbus/cras_audio_client_unittest.cc
@@ -0,0 +1,621 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/dbus/cras_audio_client.h" + +#include <memory> +#include <string> +#include <vector> + +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#include "dbus/message.h" +#include "dbus/mock_bus.h" +#include "dbus/mock_object_proxy.h" +#include "dbus/object_path.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/cros_system_api/dbus/service_constants.h" + +using ::testing::_; +using ::testing::Invoke; +using ::testing::Return; + +namespace chromeos { + +namespace { + +// Audio nodes for GetNodes unit test. +const uint64_t kInternalSpeakerId = 10001; +const uint64_t kInternalMicId = 20001; + +const AudioNode kInternalSpeaker(false, + kInternalSpeakerId, + kInternalSpeakerId, + "Fake Speaker", + "INTERNAL_SPEAKER", + "Speaker", + false, + 0); + +const AudioNode kInternalMic(true, + kInternalMicId, + kInternalMicId, + "Fake Mic", + "INTERNAL_MIC", + "Internal Mic", + false, + 0); +// A mock ErrorCallback. +class MockErrorCallback { + public: + MockErrorCallback() {} + ~MockErrorCallback() {} + MOCK_METHOD2(Run, void(const std::string& error_name, + const std::string& error_message)); + CrasAudioClient::ErrorCallback GetCallback() { + return base::Bind(&MockErrorCallback::Run, base::Unretained(this)); + } +}; + +// A mock CrasAudioClient Observer. +class MockObserver : public CrasAudioClient::Observer { + public: + MockObserver() {} + ~MockObserver() override {} + MOCK_METHOD1(OutputMuteChanged, void(bool mute_on)); + MOCK_METHOD1(InputMuteChanged, void(bool mute_on)); + MOCK_METHOD0(NodesChanged, void()); + MOCK_METHOD1(ActiveOutputNodeChanged, void(uint64_t node_id)); + MOCK_METHOD1(ActiveInputNodeChanged, void(uint64_t node_id)); +}; + +// Expect the reader to be empty. +void ExpectNoArgument(dbus::MessageReader* reader) { + EXPECT_FALSE(reader->HasMoreData()); +} + +// Expect the reader to have an int32_t and an array of doubles. +void ExpectInt32AndArrayOfDoublesArguments( + int32_t expected_value, + const std::vector<double>& expected_doubles, + dbus::MessageReader* reader) { + int32_t value; + ASSERT_TRUE(reader->PopInt32(&value)); + EXPECT_EQ(expected_value, value); + const double* doubles = nullptr; + size_t size = 0; + ASSERT_TRUE(reader->PopArrayOfDoubles(&doubles, &size)); + EXPECT_EQ(expected_doubles.size(), size); + for (size_t i = 0; i < size; ++i) { + EXPECT_EQ(expected_doubles[i], doubles[i]); + } + EXPECT_FALSE(reader->HasMoreData()); +} + +void WriteNodesToResponse(dbus::MessageWriter& writer, + const AudioNodeList& node_list) { + dbus::MessageWriter sub_writer(nullptr); + dbus::MessageWriter entry_writer(nullptr); + for (size_t i = 0; i < node_list.size(); ++i) { + writer.OpenArray("{sv}", &sub_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kIsInputProperty); + entry_writer.AppendVariantOfBool(node_list[i].is_input); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kIdProperty); + entry_writer.AppendVariantOfUint64(node_list[i].id); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kDeviceNameProperty); + entry_writer.AppendVariantOfString(node_list[i].device_name); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kTypeProperty); + entry_writer.AppendVariantOfString(node_list[i].type); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kNameProperty); + entry_writer.AppendVariantOfString(node_list[i].name); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kActiveProperty); + entry_writer.AppendVariantOfBool(node_list[i].active); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kPluggedTimeProperty); + entry_writer.AppendVariantOfUint64(node_list[i].plugged_time); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kMicPositionsProperty); + entry_writer.AppendVariantOfString(node_list[i].mic_positions); + sub_writer.CloseContainer(&entry_writer); + sub_writer.OpenDictEntry(&entry_writer); + entry_writer.AppendString(cras::kStableDeviceIdProperty); + entry_writer.AppendVariantOfUint64(node_list[i].stable_device_id); + sub_writer.CloseContainer(&entry_writer); + writer.CloseContainer(&sub_writer); + } +} + +// Expect the AudioNodeList result. +void ExpectAudioNodeListResult(const AudioNodeList* expected_node_list, + const AudioNodeList& node_list, + bool call_status) { + EXPECT_EQ(true, call_status); + EXPECT_EQ(expected_node_list->size(), node_list.size()); + for (size_t i = 0; i < node_list.size(); ++i) { + EXPECT_EQ((*expected_node_list)[i].is_input, node_list[i].is_input); + EXPECT_EQ((*expected_node_list)[i].id, node_list[i].id); + EXPECT_EQ((*expected_node_list)[i].stable_device_id, + node_list[i].stable_device_id); + EXPECT_EQ((*expected_node_list)[i].device_name, node_list[i].device_name); + EXPECT_EQ((*expected_node_list)[i].type, node_list[i].type); + EXPECT_EQ((*expected_node_list)[i].name, node_list[i].name); + EXPECT_EQ((*expected_node_list)[i].mic_positions, + node_list[i].mic_positions); + EXPECT_EQ((*expected_node_list)[i].active, node_list[i].active); + EXPECT_EQ((*expected_node_list)[i].plugged_time, node_list[i].plugged_time); + } +} + +} // namespace + +class CrasAudioClientTest : public testing::Test { + public: + CrasAudioClientTest() : interface_name_(cras::kCrasControlInterface), + response_(nullptr) {} + + void SetUp() override { + // Create a mock bus. + dbus::Bus::Options options; + options.bus_type = dbus::Bus::SYSTEM; + mock_bus_ = new dbus::MockBus(options); + + // Create a mock cras proxy. + mock_cras_proxy_ = new dbus::MockObjectProxy( + mock_bus_.get(), + cras::kCrasServiceName, + dbus::ObjectPath(cras::kCrasServicePath)); + + // Set an expectation so mock_cras_proxy's CallMethod() will use + // OnCallMethod() to return responses. + EXPECT_CALL(*mock_cras_proxy_.get(), CallMethod(_, _, _)) + .WillRepeatedly(Invoke(this, &CrasAudioClientTest::OnCallMethod)); + + // Set an expectation so mock_cras_proxy's CallMethodWithErrorCallback() + // will use OnCallMethodWithErrorCallback() to return responses. + EXPECT_CALL(*mock_cras_proxy_.get(), + CallMethodWithErrorCallback(_, _, _, _)) + .WillRepeatedly( + Invoke(this, &CrasAudioClientTest::OnCallMethodWithErrorCallback)); + + // Set an expectation so mock_cras_proxy's monitoring OutputMuteChanged + // ConnectToSignal will use OnConnectToOutputMuteChanged() to run the + // callback. + EXPECT_CALL( + *mock_cras_proxy_.get(), + ConnectToSignal(interface_name_, cras::kOutputMuteChanged, _, _)) + .WillRepeatedly( + Invoke(this, &CrasAudioClientTest::OnConnectToOutputMuteChanged)); + + // Set an expectation so mock_cras_proxy's monitoring InputMuteChanged + // ConnectToSignal will use OnConnectToInputMuteChanged() to run the + // callback. + EXPECT_CALL( + *mock_cras_proxy_.get(), + ConnectToSignal(interface_name_, cras::kInputMuteChanged, _, _)) + .WillRepeatedly( + Invoke(this, &CrasAudioClientTest::OnConnectToInputMuteChanged)); + + // Set an expectation so mock_cras_proxy's monitoring NodesChanged + // ConnectToSignal will use OnConnectToNodesChanged() to run the callback. + EXPECT_CALL( + *mock_cras_proxy_.get(), + ConnectToSignal(interface_name_, cras::kNodesChanged, _, _)) + .WillRepeatedly( + Invoke(this, &CrasAudioClientTest::OnConnectToNodesChanged)); + + // Set an expectation so mock_cras_proxy's monitoring + // ActiveOutputNodeChanged ConnectToSignal will use + // OnConnectToActiveOutputNodeChanged() to run the callback. + EXPECT_CALL( + *mock_cras_proxy_.get(), + ConnectToSignal(interface_name_, cras::kActiveOutputNodeChanged, _, _)) + .WillRepeatedly( + Invoke(this, + &CrasAudioClientTest::OnConnectToActiveOutputNodeChanged)); + + // Set an expectation so mock_cras_proxy's monitoring + // ActiveInputNodeChanged ConnectToSignal will use + // OnConnectToActiveInputNodeChanged() to run the callback. + EXPECT_CALL( + *mock_cras_proxy_.get(), + ConnectToSignal(interface_name_, cras::kActiveInputNodeChanged, _, _)) + .WillRepeatedly( + Invoke(this, + &CrasAudioClientTest::OnConnectToActiveInputNodeChanged)); + + // Set an expectation so mock_bus's GetObjectProxy() for the given + // service name and the object path will return mock_cras_proxy_. + EXPECT_CALL(*mock_bus_.get(), + GetObjectProxy(cras::kCrasServiceName, + dbus::ObjectPath(cras::kCrasServicePath))) + .WillOnce(Return(mock_cras_proxy_.get())); + + // ShutdownAndBlock() will be called in TearDown(). + EXPECT_CALL(*mock_bus_.get(), ShutdownAndBlock()).WillOnce(Return()); + + // Create a client with the mock bus. + client_.reset(CrasAudioClient::Create()); + client_->Init(mock_bus_.get()); + // Run the message loop to run the signal connection result callback. + message_loop_.RunUntilIdle(); + } + + void TearDown() override { mock_bus_->ShutdownAndBlock(); } + + protected: + // A callback to intercept and check the method call arguments. + typedef base::Callback<void( + dbus::MessageReader* reader)> ArgumentCheckCallback; + + // Sets expectations for called method name and arguments, and sets response. + void PrepareForMethodCall(const std::string& method_name, + const ArgumentCheckCallback& argument_checker, + dbus::Response* response) { + expected_method_name_ = method_name; + argument_checker_ = argument_checker; + response_ = response; + } + + // Send output mute changed signal to the tested client. + void SendOutputMuteChangedSignal(dbus::Signal* signal) { + ASSERT_FALSE(output_mute_changed_handler_.is_null()); + output_mute_changed_handler_.Run(signal); + } + + // Send input mute changed signal to the tested client. + void SendInputMuteChangedSignal(dbus::Signal* signal) { + ASSERT_FALSE(input_mute_changed_handler_.is_null()); + input_mute_changed_handler_.Run(signal); + } + + // Send nodes changed signal to the tested client. + void SendNodesChangedSignal(dbus::Signal* signal) { + ASSERT_FALSE(nodes_changed_handler_.is_null()); + nodes_changed_handler_.Run(signal); + } + + // Send active output node changed signal to the tested client. + void SendActiveOutputNodeChangedSignal(dbus::Signal* signal) { + ASSERT_FALSE(active_output_node_changed_handler_.is_null()); + active_output_node_changed_handler_.Run(signal); + } + + // Send active input node changed signal to the tested client. + void SendActiveInputNodeChangedSignal(dbus::Signal* signal) { + ASSERT_FALSE(active_input_node_changed_handler_.is_null()); + active_input_node_changed_handler_.Run(signal); + } + + // The interface name. + const std::string interface_name_; + // The client to be tested. + std::unique_ptr<CrasAudioClient> client_; + // A message loop to emulate asynchronous behavior. + base::MessageLoop message_loop_; + // The mock bus. + scoped_refptr<dbus::MockBus> mock_bus_; + // The mock object proxy. + scoped_refptr<dbus::MockObjectProxy> mock_cras_proxy_; + // The OutputMuteChanged signal handler given by the tested client. + dbus::ObjectProxy::SignalCallback output_mute_changed_handler_; + // The InputMuteChanged signal handler given by the tested client. + dbus::ObjectProxy::SignalCallback input_mute_changed_handler_; + // The NodesChanged signal handler given by the tested client. + dbus::ObjectProxy::SignalCallback nodes_changed_handler_; + // The ActiveOutputNodeChanged signal handler given by the tested client. + dbus::ObjectProxy::SignalCallback active_output_node_changed_handler_; + // The ActiveInputNodeChanged signal handler given by the tested client. + dbus::ObjectProxy::SignalCallback active_input_node_changed_handler_; + // The name of the method which is expected to be called. + std::string expected_method_name_; + // The response which the mock cras proxy returns. + dbus::Response* response_; + // A callback to intercept and check the method call arguments. + ArgumentCheckCallback argument_checker_; + + private: + // Checks the requested interface name and signal name. + // Used to implement the mock cras proxy. + void OnConnectToOutputMuteChanged( + const std::string& interface_name, + const std::string& signal_name, + const dbus::ObjectProxy::SignalCallback& signal_callback, + const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) { + output_mute_changed_handler_ = signal_callback; + const bool success = true; + message_loop_.task_runner()->PostTask(FROM_HERE, + base::Bind(on_connected_callback, + interface_name, + signal_name, + success)); + } + + // Checks the requested interface name and signal name. + // Used to implement the mock cras proxy. + void OnConnectToInputMuteChanged( + const std::string& interface_name, + const std::string& signal_name, + const dbus::ObjectProxy::SignalCallback& signal_callback, + const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) { + input_mute_changed_handler_ = signal_callback; + const bool success = true; + message_loop_.task_runner()->PostTask(FROM_HERE, + base::Bind(on_connected_callback, + interface_name, + signal_name, + success)); + } + + // Checks the requested interface name and signal name. + // Used to implement the mock cras proxy. + void OnConnectToNodesChanged( + const std::string& interface_name, + const std::string& signal_name, + const dbus::ObjectProxy::SignalCallback& signal_callback, + const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) { + nodes_changed_handler_ = signal_callback; + const bool success = true; + message_loop_.task_runner()->PostTask(FROM_HERE, + base::Bind(on_connected_callback, + interface_name, + signal_name, + success)); + } + + // Checks the requested interface name and signal name. + // Used to implement the mock cras proxy. + void OnConnectToActiveOutputNodeChanged( + const std::string& interface_name, + const std::string& signal_name, + const dbus::ObjectProxy::SignalCallback& signal_callback, + const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) { + active_output_node_changed_handler_ = signal_callback; + const bool success = true; + message_loop_.task_runner()->PostTask(FROM_HERE, + base::Bind(on_connected_callback, + interface_name, + signal_name, + success)); + } + + // Checks the requested interface name and signal name. + // Used to implement the mock cras proxy. + void OnConnectToActiveInputNodeChanged( + const std::string& interface_name, + const std::string& signal_name, + const dbus::ObjectProxy::SignalCallback& signal_callback, + const dbus::ObjectProxy::OnConnectedCallback& on_connected_callback) { + active_input_node_changed_handler_ = signal_callback; + const bool success = true; + message_loop_.task_runner()->PostTask(FROM_HERE, + base::Bind(on_connected_callback, + interface_name, + signal_name, + success)); + } + + // Checks the content of the method call and returns the response. + // Used to implement the mock cras proxy. + void OnCallMethod(dbus::MethodCall* method_call, + int timeout_ms, + const dbus::ObjectProxy::ResponseCallback& response) { + EXPECT_EQ(interface_name_, method_call->GetInterface()); + EXPECT_EQ(expected_method_name_, method_call->GetMember()); + dbus::MessageReader reader(method_call); + argument_checker_.Run(&reader); + message_loop_.task_runner()->PostTask( + FROM_HERE, base::Bind(response, response_)); + } + + // Checks the content of the method call and returns the response. + // Used to implement the mock cras proxy. + void OnCallMethodWithErrorCallback( + dbus::MethodCall* method_call, + int timeout_ms, + const dbus::ObjectProxy::ResponseCallback& response_callback, + const dbus::ObjectProxy::ErrorCallback& error_callback) { + OnCallMethod(method_call, timeout_ms, response_callback); + } +}; + +TEST_F(CrasAudioClientTest, OutputMuteChanged) { + const bool kSystemMuteOn = false; + const bool kUserMuteOn = true; + // Create a signal. + dbus::Signal signal(cras::kCrasControlInterface, + cras::kOutputMuteChanged); + dbus::MessageWriter writer(&signal); + writer.AppendBool(kSystemMuteOn); + writer.AppendBool(kUserMuteOn); + + // Set expectations. + MockObserver observer; + EXPECT_CALL(observer, OutputMuteChanged(kUserMuteOn)).Times(1); + + // Add the observer. + client_->AddObserver(&observer); + + // Run the signal callback. + SendOutputMuteChangedSignal(&signal); + + // Remove the observer. + client_->RemoveObserver(&observer); + + EXPECT_CALL(observer, OutputMuteChanged(_)).Times(0); + + // Run the signal callback again and make sure the observer isn't called. + SendOutputMuteChangedSignal(&signal); + + message_loop_.RunUntilIdle(); +} + +TEST_F(CrasAudioClientTest, InputMuteChanged) { + const bool kInputMuteOn = true; + // Create a signal. + dbus::Signal signal(cras::kCrasControlInterface, + cras::kInputMuteChanged); + dbus::MessageWriter writer(&signal); + writer.AppendBool(kInputMuteOn); + + // Set expectations. + MockObserver observer; + EXPECT_CALL(observer, InputMuteChanged(kInputMuteOn)).Times(1); + + // Add the observer. + client_->AddObserver(&observer); + + // Run the signal callback. + SendInputMuteChangedSignal(&signal); + + // Remove the observer. + client_->RemoveObserver(&observer); + + EXPECT_CALL(observer, InputMuteChanged(_)).Times(0); + + // Run the signal callback again and make sure the observer isn't called. + SendInputMuteChangedSignal(&signal); + + message_loop_.RunUntilIdle(); +} + +TEST_F(CrasAudioClientTest, NodesChanged) { + // Create a signal. + dbus::Signal signal(cras::kCrasControlInterface, + cras::kNodesChanged); + // Set expectations. + MockObserver observer; + EXPECT_CALL(observer, NodesChanged()).Times(1); + + // Add the observer. + client_->AddObserver(&observer); + + // Run the signal callback. + SendNodesChangedSignal(&signal); + + // Remove the observer. + client_->RemoveObserver(&observer); + + EXPECT_CALL(observer, NodesChanged()).Times(0); + + // Run the signal callback again and make sure the observer isn't called. + SendNodesChangedSignal(&signal); + + message_loop_.RunUntilIdle(); +} + +TEST_F(CrasAudioClientTest, ActiveOutputNodeChanged) { + const uint64_t kNodeId = 10002; + // Create a signal. + dbus::Signal signal(cras::kCrasControlInterface, + cras::kActiveOutputNodeChanged); + dbus::MessageWriter writer(&signal); + writer.AppendUint64(kNodeId); + + // Set expectations. + MockObserver observer; + EXPECT_CALL(observer, ActiveOutputNodeChanged(kNodeId)).Times(1); + + // Add the observer. + client_->AddObserver(&observer); + + // Run the signal callback. + SendActiveOutputNodeChangedSignal(&signal); + + // Remove the observer. + client_->RemoveObserver(&observer); + EXPECT_CALL(observer, ActiveOutputNodeChanged(_)).Times(0); + + // Run the signal callback again and make sure the observer isn't called. + SendActiveOutputNodeChangedSignal(&signal); + + message_loop_.RunUntilIdle(); +} + +TEST_F(CrasAudioClientTest, ActiveInputNodeChanged) { + const uint64_t kNodeId = 20002; + // Create a signal. + dbus::Signal signal(cras::kCrasControlInterface, + cras::kActiveInputNodeChanged); + dbus::MessageWriter writer(&signal); + writer.AppendUint64(kNodeId); + + // Set expectations. + MockObserver observer; + EXPECT_CALL(observer, ActiveInputNodeChanged(kNodeId)).Times(1); + + // Add the observer. + client_->AddObserver(&observer); + + // Run the signal callback. + SendActiveInputNodeChangedSignal(&signal); + + // Remove the observer. + client_->RemoveObserver(&observer); + EXPECT_CALL(observer, ActiveInputNodeChanged(_)).Times(0); + + // Run the signal callback again and make sure the observer isn't called. + SendActiveInputNodeChangedSignal(&signal); + + message_loop_.RunUntilIdle(); +} + +TEST_F(CrasAudioClientTest, GetNodes) { + // Create the expected value. + AudioNodeList expected_node_list; + expected_node_list.push_back(kInternalSpeaker); + expected_node_list.push_back(kInternalMic); + + // Create response. + std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); + dbus::MessageWriter writer(response.get()); + WriteNodesToResponse(writer, expected_node_list); + + // Set expectations. + PrepareForMethodCall(cras::kGetNodes, + base::Bind(&ExpectNoArgument), + response.get()); + // Call method. + MockErrorCallback error_callback; + client_->GetNodes(base::Bind(&ExpectAudioNodeListResult, + &expected_node_list), + error_callback.GetCallback()); + EXPECT_CALL(error_callback, Run(_, _)).Times(0); + // Run the message loop. + message_loop_.RunUntilIdle(); +} + +TEST_F(CrasAudioClientTest, SetGlobalOutputChannelRemix) { + const int32_t kChannels = 2; + const std::vector<double> kMixer = {0, 0.1, 0.5, 1}; + // Create response. + std::unique_ptr<dbus::Response> response(dbus::Response::CreateEmpty()); + + // Set expectations. + PrepareForMethodCall(cras::kSetGlobalOutputChannelRemix, + base::Bind(&ExpectInt32AndArrayOfDoublesArguments, + kChannels, + kMixer), + response.get()); + + // Call method. + client_->SetGlobalOutputChannelRemix(kChannels, kMixer); + // Run the message loop. + message_loop_.RunUntilIdle(); +} + +} // namespace chromeos
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.cc b/components/arc/bluetooth/arc_bluetooth_bridge.cc index 0b2a593..8cafeed 100644 --- a/components/arc/bluetooth/arc_bluetooth_bridge.cc +++ b/components/arc/bluetooth/arc_bluetooth_bridge.cc
@@ -118,9 +118,33 @@ // Must be implemented for LE Privacy/GATT client. } +void ArcBluetoothBridge::DevicePairedChanged(BluetoothAdapter* adapter, + BluetoothDevice* device, + bool new_paired_status) { + DCHECK(adapter); + DCHECK(device); + + BluetoothAddressPtr addr = BluetoothAddress::From(device->GetAddress()); + + if (new_paired_status) { + // OnBondStateChanged must be called with BluetoothBondState::BONDING to + // make sure the bond state machine on Android is ready to take the + // pair-done event. Otherwise the pair-done event will be dropped as an + // invalid change of paired status. + OnPairing(addr->Clone()); + OnPairedDone(std::move(addr)); + } else { + OnForgetDone(std::move(addr)); + } +} + void ArcBluetoothBridge::DeviceRemoved(BluetoothAdapter* adapter, BluetoothDevice* device) { - // TODO(smbarber): device removed; inform the container. + DCHECK(adapter); + DCHECK(device); + + BluetoothAddressPtr addr = BluetoothAddress::From(device->GetAddress()); + OnForgetDone(std::move(addr)); } void ArcBluetoothBridge::GattServiceAdded(BluetoothAdapter* adapter, @@ -191,11 +215,16 @@ void ArcBluetoothBridge::EnableAdapter(const EnableAdapterCallback& callback) { DCHECK(bluetooth_adapter_); - bluetooth_adapter_->SetPowered( - true, base::Bind(&ArcBluetoothBridge::OnPoweredOn, - weak_factory_.GetWeakPtr(), callback), - base::Bind(&ArcBluetoothBridge::OnPoweredError, - weak_factory_.GetWeakPtr(), callback)); + if (!bluetooth_adapter_->IsPowered()) { + bluetooth_adapter_->SetPowered( + true, base::Bind(&ArcBluetoothBridge::OnPoweredOn, + weak_factory_.GetWeakPtr(), callback), + base::Bind(&ArcBluetoothBridge::OnPoweredError, + weak_factory_.GetWeakPtr(), callback)); + return; + } + + OnPoweredOn(callback); } void ArcBluetoothBridge::DisableAdapter( @@ -241,9 +270,15 @@ mojo::Array<BluetoothPropertyPtr> properties = GetDeviceProperties(type, device); + BluetoothStatus status = BluetoothStatus::SUCCESS; + + if (!device) { + VLOG(1) << __func__ << ": device " << addr_str << " not available"; + status = BluetoothStatus::FAIL; + } arc_bridge_service()->bluetooth_instance()->OnRemoteDeviceProperties( - BluetoothStatus::SUCCESS, std::move(remote_addr), std::move(properties)); + status, std::move(remote_addr), std::move(properties)); } void ArcBluetoothBridge::SetRemoteDeviceProperty( @@ -298,6 +333,7 @@ void ArcBluetoothBridge::OnPoweredOn( const mojo::Callback<void(BluetoothAdapterState)>& callback) const { callback.Run(BluetoothAdapterState::ON); + SendCachedPairedDevices(); } void ArcBluetoothBridge::OnPoweredOff( @@ -338,15 +374,63 @@ void ArcBluetoothBridge::CreateBond(BluetoothAddressPtr addr, int32_t transport) { - // TODO(smbarber): Implement CreateBond + std::string addr_str = addr->To<std::string>(); + BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); + if (!device || !device->IsPairable()) { + VLOG(1) << __func__ << ": device " << addr_str + << " is no longer valid or pairable"; + OnPairedError(std::move(addr), BluetoothDevice::ERROR_FAILED); + return; + } + + if (device->IsPaired()) { + OnPairedDone(std::move(addr)); + return; + } + + // Use the default pairing delegate which is the delegate registered and owned + // by ash. + BluetoothDevice::PairingDelegate* delegate = + bluetooth_adapter_->DefaultPairingDelegate(); + + if (!delegate) { + OnPairedError(std::move(addr), BluetoothDevice::ERROR_FAILED); + return; + } + + // If pairing finished successfully, DevicePairedChanged will notify Android + // on paired state change event, so DoNothing is passed as a success callback. + device->Pair(delegate, base::Bind(&base::DoNothing), + base::Bind(&ArcBluetoothBridge::OnPairedError, + weak_factory_.GetWeakPtr(), base::Passed(&addr))); } void ArcBluetoothBridge::RemoveBond(BluetoothAddressPtr addr) { - // TODO(smbarber): Implement RemoveBond + // Forget the device if it is no longer valid or not even paired. + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + if (!device || !device->IsPaired()) { + OnForgetDone(std::move(addr)); + return; + } + + // If unpairing finished successfully, DevicePairedChanged will notify Android + // on paired state change event, so DoNothing is passed as a success callback. + device->Forget(base::Bind(&base::DoNothing), + base::Bind(&ArcBluetoothBridge::OnForgetError, + weak_factory_.GetWeakPtr(), base::Passed(&addr))); } void ArcBluetoothBridge::CancelBond(BluetoothAddressPtr addr) { - // TODO(smbarber): Implement CancelBond + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + if (!device) { + OnForgetDone(std::move(addr)); + return; + } + + device->CancelPairing(); + OnForgetDone(std::move(addr)); } void ArcBluetoothBridge::GetConnectionState( @@ -357,8 +441,8 @@ return; } - std::string addr_str = addr->To<std::string>(); - BluetoothDevice* device = bluetooth_adapter_->GetDevice(addr_str); + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); if (!device) { callback.Run(false); return; @@ -371,9 +455,57 @@ LOG(WARNING) << "failed to change discovery state"; } +void ArcBluetoothBridge::OnPairing(BluetoothAddressPtr addr) const { + if (!HasBluetoothInstance()) + return; + + arc_bridge_service()->bluetooth_instance()->OnBondStateChanged( + BluetoothStatus::SUCCESS, std::move(addr), BluetoothBondState::BONDING); +} + +void ArcBluetoothBridge::OnPairedDone(BluetoothAddressPtr addr) const { + if (!HasBluetoothInstance()) + return; + + arc_bridge_service()->bluetooth_instance()->OnBondStateChanged( + BluetoothStatus::SUCCESS, std::move(addr), BluetoothBondState::BONDED); +} + +void ArcBluetoothBridge::OnPairedError( + BluetoothAddressPtr addr, + BluetoothDevice::ConnectErrorCode error_code) const { + if (!HasBluetoothInstance()) + return; + + arc_bridge_service()->bluetooth_instance()->OnBondStateChanged( + BluetoothStatus::FAIL, std::move(addr), BluetoothBondState::NONE); +} + +void ArcBluetoothBridge::OnForgetDone(BluetoothAddressPtr addr) const { + if (!HasBluetoothInstance()) + return; + + arc_bridge_service()->bluetooth_instance()->OnBondStateChanged( + BluetoothStatus::SUCCESS, std::move(addr), BluetoothBondState::NONE); +} + +void ArcBluetoothBridge::OnForgetError(BluetoothAddressPtr addr) const { + if (!HasBluetoothInstance()) + return; + + BluetoothDevice* device = + bluetooth_adapter_->GetDevice(addr->To<std::string>()); + BluetoothBondState bond_state = BluetoothBondState::NONE; + if (device && device->IsPaired()) { + bond_state = BluetoothBondState::BONDED; + } + arc_bridge_service()->bluetooth_instance()->OnBondStateChanged( + BluetoothStatus::FAIL, std::move(addr), bond_state); +} + mojo::Array<BluetoothPropertyPtr> ArcBluetoothBridge::GetDeviceProperties( BluetoothPropertyType type, - BluetoothDevice* device) { + BluetoothDevice* device) const { mojo::Array<BluetoothPropertyPtr> properties; if (!device) { @@ -437,7 +569,7 @@ } mojo::Array<BluetoothPropertyPtr> ArcBluetoothBridge::GetAdapterProperties( - BluetoothPropertyType type) { + BluetoothPropertyType type) const { mojo::Array<BluetoothPropertyPtr> properties; if (type == BluetoothPropertyType::ALL || @@ -512,7 +644,7 @@ return properties; } -void ArcBluetoothBridge::SendCachedDevicesFound() { +void ArcBluetoothBridge::SendCachedDevicesFound() const { // Send devices that have already been discovered, but aren't connected. if (!HasBluetoothInstance()) return; @@ -530,7 +662,7 @@ } } -bool ArcBluetoothBridge::HasBluetoothInstance() { +bool ArcBluetoothBridge::HasBluetoothInstance() const { if (!arc_bridge_service()->bluetooth_instance()) { LOG(WARNING) << "no Bluetooth instance available"; return false; @@ -539,4 +671,29 @@ return true; } +void ArcBluetoothBridge::SendCachedPairedDevices() const { + DCHECK(bluetooth_adapter_); + + BluetoothAdapter::DeviceList devices = bluetooth_adapter_->GetDevices(); + for (BluetoothDevice* device : devices) { + if (!device->IsPaired()) + continue; + + mojo::Array<BluetoothPropertyPtr> properties = + GetDeviceProperties(BluetoothPropertyType::ALL, device); + + arc_bridge_service()->bluetooth_instance()->OnDeviceFound( + std::move(properties)); + + BluetoothAddressPtr addr = BluetoothAddress::From(device->GetAddress()); + + // OnBondStateChanged must be called with BluetoothBondState::BONDING to + // make sure the bond state machine on Android is ready to take the + // pair-done event. Otherwise the pair-done event will be dropped as an + // invalid change of paired status. + OnPairing(addr->Clone()); + OnPairedDone(std::move(addr)); + } +} + } // namespace arc
diff --git a/components/arc/bluetooth/arc_bluetooth_bridge.h b/components/arc/bluetooth/arc_bluetooth_bridge.h index 30640732..bfbee8bf 100644 --- a/components/arc/bluetooth/arc_bluetooth_bridge.h +++ b/components/arc/bluetooth/arc_bluetooth_bridge.h
@@ -58,6 +58,10 @@ device::BluetoothDevice* device, const std::string& old_address) override; + void DevicePairedChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + bool new_paired_status) override; + void DeviceRemoved(device::BluetoothAdapter* adapter, device::BluetoothDevice* device) override; @@ -141,16 +145,26 @@ scoped_ptr<device::BluetoothDiscoverySession> session); void OnDiscoveryStopped(); void OnDiscoveryError(); + void OnPairing(BluetoothAddressPtr addr) const; + void OnPairedDone(BluetoothAddressPtr addr) const; + void OnPairedError( + BluetoothAddressPtr addr, + device::BluetoothDevice::ConnectErrorCode error_code) const; + void OnForgetDone(BluetoothAddressPtr addr) const; + void OnForgetError(BluetoothAddressPtr addr) const; private: mojo::Array<BluetoothPropertyPtr> GetDeviceProperties( BluetoothPropertyType type, - device::BluetoothDevice* device); + device::BluetoothDevice* device) const; mojo::Array<BluetoothPropertyPtr> GetAdapterProperties( - BluetoothPropertyType type); + BluetoothPropertyType type) const; - void SendCachedDevicesFound(); - bool HasBluetoothInstance(); + void SendCachedDevicesFound() const; + bool HasBluetoothInstance() const; + + // Propagates the list of paired device to Android. + void SendCachedPairedDevices() const; mojo::Binding<BluetoothHost> binding_;
diff --git a/components/crash/content/tools/generate_breakpad_symbols.py b/components/crash/content/tools/generate_breakpad_symbols.py index e91a8c4..b4c3b48 100755 --- a/components/crash/content/tools/generate_breakpad_symbols.py +++ b/components/crash/content/tools/generate_breakpad_symbols.py
@@ -146,7 +146,7 @@ def GetBinaryInfoFromHeaderInfo(header_info): """Given a standard symbol header information line, returns BINARY_INFO.""" # header info is of the form "MODULE $PLATFORM $ARCH $HASH $BINARY" - info_split = header_info.strip().split(' ', 5) + info_split = header_info.strip().split(' ', 4) if len(info_split) != 5 or info_split[0] != 'MODULE': return None return BINARY_INFO(*info_split[1:])
diff --git a/components/cronet.gypi b/components/cronet.gypi index 1287b558..b0fbbbc 100644 --- a/components/cronet.gypi +++ b/components/cronet.gypi
@@ -174,18 +174,11 @@ ], }, { - # cronet_static_small target has reduced binary size through using - # ICU alternatives which requires file and ftp support be disabled. - 'target_name': 'cronet_static_small', + 'target_name': 'cronet_static', 'type': 'static_library', - 'defines': [ - 'USE_ICU_ALTERNATIVES_ON_ANDROID=1', - 'DISABLE_FILE_SUPPORT=1', - 'DISABLE_FTP_SUPPORT=1', - ], 'dependencies': [ - '../net/net.gyp:net_small', - '../url/url.gyp:url_lib_use_icu_alternatives_on_android', + '../net/net.gyp:net', + '../url/url.gyp:url_lib', ], 'conditions': [ ['enable_data_reduction_proxy_support==1', @@ -195,23 +188,10 @@ ], }, ], - ], - 'includes': [ 'cronet/cronet_static.gypi' ], - }, - { - # cronet_static target depends on ICU and includes file and ftp support. - 'target_name': 'cronet_static', - 'type': 'static_library', - 'dependencies': [ - '../base/base.gyp:base_i18n', - '../net/net.gyp:net', - '../url/url.gyp:url_lib', - ], - 'conditions': [ - ['enable_data_reduction_proxy_support==1', + ['use_platform_icu_alternatives!=1', { 'dependencies': [ - '../components/components.gyp:data_reduction_proxy_core_browser', + '../base/base.gyp:base_i18n', ], }, ], @@ -225,9 +205,9 @@ 'cronet/android/cronet_jni.cc', ], 'dependencies': [ - 'cronet_static_small', + 'cronet_static', '../base/base.gyp:base', - '../net/net.gyp:net_small', + '../net/net.gyp:net', ], 'ldflags': [ '-Wl,--version-script=<!(cd <(DEPTH) && pwd -P)/components/cronet/android/only_jni_exports.lst', @@ -431,7 +411,7 @@ ['enable_data_reduction_proxy_support==1', { 'dependencies': [ - '../components/components.gyp:data_reduction_proxy_core_browser', + '../components/components.gyp:data_reduction_proxy_core_browser_small', ], }, ], @@ -732,5 +712,183 @@ 'enable_data_reduction_proxy_support%': 0, }, }], # OS=="android" + ['OS=="ios"', { + 'targets': [ + { # TODO(mef): Dedup this with copy in OS=="android" section. + 'target_name': 'cronet_version_header', + 'type': 'none', + # Need to set hard_depency flag because cronet_version generates a + # header. + 'hard_dependency': 1, + 'direct_dependent_settings': { + 'include_dirs': [ + '<(SHARED_INTERMEDIATE_DIR)/', + ], + }, + 'actions': [ + { + 'action_name': 'version_header', + 'message': 'Generating version header file: <@(_outputs)', + 'inputs': [ + '<(version_path)', + 'cronet/version.h.in', + ], + 'outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/components/cronet/version.h', + ], + 'action': [ + 'python', + '<(version_py_path)', + '-e', 'VERSION_FULL="<(version_full)"', + 'cronet/version.h.in', + '<@(_outputs)', + ], + 'includes': [ + '../build/util/version.gypi', + ], + }, + ], + }, + { + 'target_name': 'cronet_static', + 'type': 'static_library', + 'sources': [ + 'cronet/ios/Cronet.h', + 'cronet/ios/Cronet.mm', + 'cronet/ios/cronet_bidirectional_stream.h', + 'cronet/ios/cronet_bidirectional_stream.cc', + 'cronet/ios/cronet_c_for_grpc.h', + 'cronet/ios/cronet_c_for_grpc.cc', + 'cronet/ios/cronet_environment.cc', + 'cronet/ios/cronet_environment.h', + 'cronet/url_request_context_config.cc', + 'cronet/url_request_context_config.h', + ], + 'dependencies': [ + 'cronet_version_header', + '../base/base.gyp:base', + '../net/net.gyp:net', + ], + 'cflags': [ + '-fdata-sections', + '-ffunction-sections', + '-fno-rtti', + '-fvisibility-inlines-hidden', + '-Wno-sign-promo', + '-Wno-missing-field-initializers', + ], + 'ldflags': [ + '-llog', + '-Wl,--gc-sections', + '-Wl,--exclude-libs,ALL' + ], + }, + { + 'target_name': 'libcronet', + 'type': 'shared_library', + 'sources': [ + 'cronet/ios/Cronet.h', + 'cronet/ios/Cronet.mm', + ], + 'dependencies': [ + 'cronet_static', + '../base/base.gyp:base', + ], + }, + { + 'target_name': 'cronet_test', + 'type': 'executable', + 'dependencies': [ + 'cronet_static', + '../net/net.gyp:net_quic_proto', + '../net/net.gyp:net_test_support', + '../net/net.gyp:simple_quic_tools', + '../testing/gtest.gyp:gtest', + ], + 'sources': [ + 'cronet/ios/test/cronet_bidirectional_stream_test.mm', + 'cronet/ios/test/cronet_test_runner.mm', + 'cronet/ios/test/quic_test_server.cc', + 'cronet/ios/test/quic_test_server.h', + ], + 'mac_bundle_resources': [ + '../net/data/ssl/certificates/quic_test.example.com.crt', + '../net/data/ssl/certificates/quic_test.example.com.key', + '../net/data/ssl/certificates/quic_test.example.com.key.pkcs8', + '../net/data/ssl/certificates/quic_test.example.com.key.sct', + ], + 'include_dirs': [ + '..', + ], + }, + { + # Build this target to package a standalone Cronet in a single + # .a file. + 'target_name': 'cronet_package', + 'type': 'none', + 'variables' : { + 'package_dir': '<(PRODUCT_DIR)/cronet', + }, + 'dependencies': [ + # Depend on the dummy target so that all of CrNet's dependencies + # are built before packaging. + 'libcronet', + ], + 'actions': [ + { + 'action_name': 'Package Cronet', + 'variables': { + 'tool_path': + 'cronet/tools/link_dependencies.py', + }, + # Actions need an inputs list, even if it's empty. + 'inputs': [ + '<(tool_path)', + '<(PRODUCT_DIR)/libcronet.dylib', + ], + # Only specify one output, since this will be libtool's output. + 'outputs': [ '<(package_dir)/libcronet_standalone_with_symbols.a' ], + 'action': ['<(tool_path)', + '<(PRODUCT_DIR)', + 'libcronet.dylib', + '<@(_outputs)', + ], + }, + { + 'action_name': 'Stripping standalone library', + # Actions need an inputs list, even if it's empty. + 'inputs': [ + '<(package_dir)/libcronet_standalone_with_symbols.a', + ], + # Only specify one output, since this will be libtool's output. + 'outputs': [ '<(package_dir)/libcronet_standalone.a' ], + 'action': ['strip', + '-S', + '<@(_inputs)', + '-o', + '<@(_outputs)', + ], + }, + ], + 'copies': [ + { + 'destination': '<(package_dir)', + 'files': [ + '../chrome/VERSION', + 'cronet/ios/Cronet.h', + 'cronet/ios/cronet_c_for_grpc.h', + ], + }, + { + 'destination': '<(package_dir)/test', + 'files': [ + 'cronet/ios/test/cronet_bidirectional_stream_test.mm', + 'cronet/ios/test/cronet_test_runner.mm', + ], + }, + ], + }, + ], + }], # OS=="ios" ], }
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn index 38d3237..a6d42bd 100644 --- a/components/cronet/android/BUILD.gn +++ b/components/cronet/android/BUILD.gn
@@ -8,6 +8,7 @@ import("//build/util/version.gni") import("//chrome/version.gni") import("//testing/test.gni") +import("//url/features.gni") assert(!is_component_build, "Cronet requires static library build.") @@ -120,6 +121,7 @@ "//base/third_party/dynamic_annotations", "//components/metrics", "//components/prefs", + "//url:url_features", ] sources = [ "//components/cronet/android/chromium_url_request.cc", @@ -186,42 +188,22 @@ } } -# cronet_static_small target has reduced binary size through using -# ICU alternatives which requires file and ftp support be disabled. -cronet_static_tmpl("cronet_static_small") { - defines = [ - "USE_ICU_ALTERNATIVES_ON_ANDROID=1", - "DISABLE_FILE_SUPPORT=1", - "DISABLE_FTP_SUPPORT=1", - ] - - deps = [ - "//net:net_small", - "//url:url_lib_use_icu_alternatives_on_android", - ] - - if (cronet_enable_data_reduction_proxy_support) { - deps += [ - "//components/data_reduction_proxy/core/browser:browser_small", - "//components/data_reduction_proxy/core/common:common_small", - ] - } -} - -# cronet_static target depends on ICU and includes file and ftp support. cronet_static_tmpl("cronet_static") { deps = [ - "//base:i18n", "//net", "//url", ] if (cronet_enable_data_reduction_proxy_support) { deps += [ - "//components/data_reduction_proxy/core/browser", + "//components/data_reduction_proxy/core/browser:browser_small", "//components/data_reduction_proxy/core/common", ] } + + if (!use_platform_icu_alternatives) { + deps += [ "//base:i18n" ] + } } shared_library("cronet") { @@ -229,9 +211,9 @@ "cronet_jni.cc", ] deps = [ - ":cronet_static_small", + ":cronet_static", "//base", - "//net:net_small", + "//net:net", ] ldflags = [ "-Wl,--version-script=" + rebase_path("//components/cronet/android/only_jni_exports.lst") ] @@ -465,7 +447,7 @@ configs -= [ "//build/config/android:hide_native_jni_exports" ] if (cronet_enable_data_reduction_proxy_support) { - deps += [ "//components/data_reduction_proxy/core/browser" ] + deps += [ "//components/data_reduction_proxy/core/browser:browser_small" ] } }
diff --git a/components/cronet/android/cronet_library_loader.cc b/components/cronet/android/cronet_library_loader.cc index e94c775..aad04b547 100644 --- a/components/cronet/android/cronet_library_loader.cc +++ b/components/cronet/android/cronet_library_loader.cc
@@ -5,6 +5,7 @@ #include "components/cronet/android/cronet_library_loader.h" #include <jni.h> +#include <vector> #include "base/android/base_jni_onload.h" #include "base/android/base_jni_registrar.h" @@ -27,9 +28,10 @@ #include "net/android/net_jni_registrar.h" #include "net/android/network_change_notifier_factory_android.h" #include "net/base/network_change_notifier.h" +#include "url/url_features.h" #include "url/url_util.h" -#if defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) #include "url/android/url_jni_registrar.h" // nogncheck #else #include "base/i18n/icu_util.h" @@ -50,7 +52,7 @@ {"CronetUrlRequestContextAdapter", CronetUrlRequestContextAdapterRegisterJni}, {"NetAndroid", net::android::RegisterJni}, -#if defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) {"UrlAndroid", url::android::RegisterJni}, #endif }; @@ -91,7 +93,7 @@ } void CronetInitOnMainThread(JNIEnv* env, const JavaParamRef<jclass>& jcaller) { -#if !defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) base::i18n::InitializeICU(); #endif
diff --git a/components/cronet/cronet_static.gypi b/components/cronet/cronet_static.gypi index 826809b..4618651 100644 --- a/components/cronet/cronet_static.gypi +++ b/components/cronet/cronet_static.gypi
@@ -3,16 +3,17 @@ # found in the LICENSE file. { - # This target is included into both 'cronet_static' and 'cronet_static_small'. + # Included in 'cronet_static'. 'dependencies': [ '../base/base.gyp:base', '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', - 'cronet_jni_headers', + '../url/url.gyp:url_url_features', 'chromium_url_request_java', - 'url_request_error_java', + 'cronet_jni_headers', 'cronet_version', 'cronet_version_header', 'metrics', + 'url_request_error_java', ], 'sources': [ 'android/chromium_url_request.cc',
diff --git a/components/cronet/ios/Cronet.h b/components/cronet/ios/Cronet.h new file mode 100644 index 0000000..fd3f500 --- /dev/null +++ b/components/cronet/ios/Cronet.h
@@ -0,0 +1,55 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import <Foundation/Foundation.h> + +#include "cronet_c_for_grpc.h" + +// Interface for installing Cronet. +@interface Cronet : NSObject + +// Sets whether HTTP/2 should be supported by CronetEngine. This method only has +// any effect before |start| is called. ++ (void)setHttp2Enabled:(BOOL)http2Enabled; + +// Sets whether QUIC should be supported by CronetEngine. This method only has +// any effect before |start| is called. ++ (void)setQuicEnabled:(BOOL)quicEnabled; + +// Adds hint that host supports QUIC on altPort. This method only has any effect +// before |start| is called. ++ (void)addQuicHint:(NSString*)host port:(int)port altPort:(int)altPort; + +// |userAgent| is expected to be of the form Product/Version. +// Example: Foo/3.0.0.0 +// +// This method only has any effect before |start| is called. ++ (void)setPartialUserAgent:(NSString*)userAgent; + +// Sets SSLKEYLogFileName to export SSL key for Wireshark decryption of packet +// captures. This method only has any effect before |start| is called. ++ (void)setSslKeyLogFileName:(NSString*)sslKeyLogFileName; + +// Starts CronetEngine. ++ (void)start; + +// Starts net-internals logging to a file named |fileName| in the application +// temporary directory. |fileName| must not be empty. Log level is determined +// by |logBytes| - if YES then LOG_ALL otherwise LOG_ALL_BUT_BYTES. If the file +// exists it is truncated before starting. If actively logging the call is +// ignored. ++ (void)startNetLogToFile:(NSString*)fileName logBytes:(BOOL)logBytes; + +// Stop net-internals logging and flush file to disk. If a logging session is +// not in progress this call is ignored. ++ (void)stopNetLog; + +// Returns the full user-agent that the stack uses. +// This is the exact string servers will see. ++ (NSString*)getUserAgent; + +// Get a pointer to global instance of cronet_engine for GRPC C API. ++ (cronet_engine*)getGlobalEngine; + +@end
diff --git a/components/cronet/ios/Cronet.mm b/components/cronet/ios/Cronet.mm new file mode 100644 index 0000000..50ee355 --- /dev/null +++ b/components/cronet/ios/Cronet.mm
@@ -0,0 +1,123 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "components/cronet/ios/Cronet.h" + +#include "base/lazy_instance.h" +#include "base/logging.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/scoped_vector.h" +#include "base/strings/sys_string_conversions.h" +#include "components/cronet/ios/cronet_environment.h" +#include "components/cronet/url_request_context_config.h" + +namespace { + +// Currently there is one and only one instance of CronetEnvironment, +// which is leaked at the shutdown. We should consider allowing multiple +// instances if that makes sense in the future. +base::LazyInstance<scoped_ptr<cronet::CronetEnvironment>>::Leaky gChromeNet = + LAZY_INSTANCE_INITIALIZER; + +BOOL gHttp2Enabled = YES; +BOOL gQuicEnabled = NO; +ScopedVector<cronet::URLRequestContextConfig::QuicHint> gQuicHints; +NSString* gUserAgent = nil; +NSString* gSslKeyLogFileName = nil; + +} // namespace + +@implementation Cronet + ++ (void)checkNotStarted { + CHECK(gChromeNet == NULL) << "Cronet is already started."; +} + ++ (void)setHttp2Enabled:(BOOL)http2Enabled { + [self checkNotStarted]; + gHttp2Enabled = http2Enabled; +} + ++ (void)setQuicEnabled:(BOOL)quicEnabled { + [self checkNotStarted]; + gQuicEnabled = quicEnabled; +} + ++ (void)addQuicHint:(NSString*)host port:(int)port altPort:(int)altPort { + [self checkNotStarted]; + gQuicHints.push_back(new cronet::URLRequestContextConfig::QuicHint( + base::SysNSStringToUTF8(host), port, altPort)); +} + ++ (void)setPartialUserAgent:(NSString*)userAgent { + [self checkNotStarted]; + gUserAgent = userAgent; +} + ++ (void)setSslKeyLogFileName:(NSString*)sslKeyLogFileName { + [self checkNotStarted]; + gSslKeyLogFileName = sslKeyLogFileName; +} + ++ (void)startInternal { + cronet::CronetEnvironment::Initialize(); + std::string partialUserAgent = base::SysNSStringToUTF8(gUserAgent); + gChromeNet.Get().reset(new cronet::CronetEnvironment(partialUserAgent)); + + gChromeNet.Get()->set_http2_enabled(gHttp2Enabled); + gChromeNet.Get()->set_quic_enabled(gQuicEnabled); + gChromeNet.Get()->set_ssl_key_log_file_name( + base::SysNSStringToUTF8(gSslKeyLogFileName)); + for (const auto& quicHint : gQuicHints) { + gChromeNet.Get()->AddQuicHint(quicHint->host, quicHint->port, + quicHint->alternate_port); + } + gChromeNet.Get()->Start(); +} + ++ (void)start { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + if (![NSThread isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^(void) { + [self startInternal]; + }); + } else { + [self startInternal]; + } + }); +} + ++ (void)startNetLogToFile:(NSString*)fileName logBytes:(BOOL)logBytes { + if (gChromeNet.Get().get() && [fileName length]) { + gChromeNet.Get()->StartNetLog([fileName UTF8String], logBytes); + } +} + ++ (void)stopNetLog { + if (gChromeNet.Get().get()) { + gChromeNet.Get()->StopNetLog(); + } +} + ++ (NSString*)getUserAgent { + if (!gChromeNet.Get().get()) { + return nil; + } + + return [NSString stringWithCString:gChromeNet.Get()->user_agent().c_str() + encoding:[NSString defaultCStringEncoding]]; +} + ++ (cronet_engine*)getGlobalEngine { + DCHECK(gChromeNet.Get().get()); + if (gChromeNet.Get().get()) { + static cronet_engine engine; + engine.obj = gChromeNet.Get().get(); + return &engine; + } + return nil; +} + +@end
diff --git a/components/cronet/ios/cronet_bidirectional_stream.cc b/components/cronet/ios/cronet_bidirectional_stream.cc new file mode 100644 index 0000000..fe6295bd --- /dev/null +++ b/components/cronet/ios/cronet_bidirectional_stream.cc
@@ -0,0 +1,271 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/cronet/ios/cronet_bidirectional_stream.h" + +#include <string> +#include <vector> + +#include "base/bind.h" +#include "base/location.h" +#include "base/logging.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/strings/string_number_conversions.h" +#include "components/cronet/ios/cronet_environment.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "net/base/request_priority.h" +#include "net/http/bidirectional_stream.h" +#include "net/http/bidirectional_stream_request_info.h" +#include "net/http/http_network_session.h" +#include "net/http/http_response_headers.h" +#include "net/http/http_status_code.h" +#include "net/http/http_transaction_factory.h" +#include "net/http/http_util.h" +#include "net/spdy/spdy_header_block.h" +#include "net/ssl/ssl_info.h" +#include "net/url_request/http_user_agent_settings.h" +#include "net/url_request/url_request_context.h" +#include "url/gurl.h" + +namespace cronet { + +CronetBidirectionalStream::CronetBidirectionalStream( + CronetEnvironment* environment, + Delegate* delegate) + : read_state_(NOT_STARTED), + write_state_(NOT_STARTED), + write_end_of_stream_(false), + environment_(environment), + delegate_(delegate) {} + +CronetBidirectionalStream::~CronetBidirectionalStream() { + DCHECK(environment_->IsOnNetworkThread()); +} + +int CronetBidirectionalStream::Start(const char* url, + int priority, + const char* method, + const net::HttpRequestHeaders& headers, + bool end_of_stream) { + // Prepare request info here to be able to return the error. + scoped_ptr<net::BidirectionalStreamRequestInfo> request_info( + new net::BidirectionalStreamRequestInfo()); + request_info->url = GURL(url); + request_info->priority = static_cast<net::RequestPriority>(priority); + // Http method is a token, just as header name. + request_info->method = method; + if (!net::HttpUtil::IsValidHeaderName(request_info->method)) + return -1; + request_info->extra_headers.CopyFrom(headers); + request_info->end_stream_on_headers = end_of_stream; + write_end_of_stream_ = end_of_stream; + DCHECK(environment_); + environment_->PostToNetworkThread( + FROM_HERE, + base::Bind(&CronetBidirectionalStream::StartOnNetworkThread, + base::Unretained(this), base::Passed(&request_info))); + return 0; +} + +bool CronetBidirectionalStream::ReadData(char* buffer, int capacity) { + if (!buffer) + return false; + scoped_refptr<net::WrappedIOBuffer> read_buffer( + new net::WrappedIOBuffer(buffer)); + + environment_->PostToNetworkThread( + FROM_HERE, base::Bind(&CronetBidirectionalStream::ReadDataOnNetworkThread, + base::Unretained(this), read_buffer, capacity)); + return true; +} + +bool CronetBidirectionalStream::WriteData(const char* buffer, + int count, + bool end_of_stream) { + if (!buffer) + return false; + + scoped_refptr<net::WrappedIOBuffer> write_buffer( + new net::WrappedIOBuffer(buffer)); + + environment_->PostToNetworkThread( + FROM_HERE, + base::Bind(&CronetBidirectionalStream::WriteDataOnNetworkThread, + base::Unretained(this), write_buffer, count, end_of_stream)); + return true; +} + +void CronetBidirectionalStream::Cancel() { + environment_->PostToNetworkThread( + FROM_HERE, base::Bind(&CronetBidirectionalStream::CancelOnNetworkThread, + base::Unretained(this))); +} + +void CronetBidirectionalStream::Destroy() { + // Destroy could be called from any thread, including network thread (if + // posting task to executor throws an exception), but is posted, so |this| + // is valid until calling task is complete. + environment_->PostToNetworkThread( + FROM_HERE, base::Bind(&CronetBidirectionalStream::DestroyOnNetworkThread, + base::Unretained(this))); +} + +void CronetBidirectionalStream::OnHeadersSent() { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(write_state_ == STARTED); + write_state_ = WAITING_FOR_WRITE; + if (write_end_of_stream_) + write_state_ = WRITING_DONE; + delegate_->OnHeadersSent(); +} + +void CronetBidirectionalStream::OnHeadersReceived( + const net::SpdyHeaderBlock& response_headers) { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(read_state_ == STARTED); + read_state_ = WAITING_FOR_READ; + // Get http status code from response headers. + int http_status_code = 0; + const auto http_status_header = response_headers.find(":status"); + if (http_status_header != response_headers.end()) + base::StringToInt(http_status_header->second, &http_status_code); + const char* protocol = "unknown"; + switch (bidi_stream_->GetProtocol()) { + case net::kProtoHTTP2: + protocol = "h2"; + break; + case net::kProtoQUIC1SPDY3: + protocol = "quic/1+spdy/3"; + break; + default: + break; + } + delegate_->OnHeadersReceived(response_headers, protocol); +} + +void CronetBidirectionalStream::OnDataRead(int bytes_read) { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(read_state_ == READING); + read_state_ = WAITING_FOR_READ; + delegate_->OnDataRead(read_buffer_->data(), bytes_read); + + // Free the read buffer. + read_buffer_ = nullptr; + if (bytes_read == 0) + read_state_ = READING_DONE; + MaybeOnSucceded(); +} + +void CronetBidirectionalStream::OnDataSent() { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(write_state_ == WRITING); + write_state_ = WAITING_FOR_WRITE; + delegate_->OnDataSent(write_buffer_->data()); + // Free the write buffer. + write_buffer_ = nullptr; + if (write_end_of_stream_) + write_state_ = WRITING_DONE; + MaybeOnSucceded(); +} + +void CronetBidirectionalStream::OnTrailersReceived( + const net::SpdyHeaderBlock& response_trailers) { + DCHECK(environment_->IsOnNetworkThread()); + delegate_->OnTrailersReceived(response_trailers); +} + +void CronetBidirectionalStream::OnFailed(int error) { + DCHECK(environment_->IsOnNetworkThread()); + bidi_stream_.reset(); + read_state_ = write_state_ = ERROR; + delegate_->OnFailed(error); +} + +void CronetBidirectionalStream::StartOnNetworkThread( + scoped_ptr<net::BidirectionalStreamRequestInfo> request_info) { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(!bidi_stream_); + DCHECK(environment_->GetURLRequestContext()); + request_info->extra_headers.SetHeaderIfMissing( + net::HttpRequestHeaders::kUserAgent, environment_->user_agent()); + bidi_stream_.reset(new net::BidirectionalStream( + std::move(request_info), environment_->GetURLRequestContext() + ->http_transaction_factory() + ->GetSession(), + this)); + DCHECK(read_state_ == NOT_STARTED && write_state_ == NOT_STARTED); + read_state_ = write_state_ = STARTED; +} + +void CronetBidirectionalStream::ReadDataOnNetworkThread( + scoped_refptr<net::WrappedIOBuffer> read_buffer, + int buffer_size) { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(read_buffer); + DCHECK(!read_buffer_); + if (read_state_ != WAITING_FOR_READ) { + DLOG(ERROR) << "Unexpected Read Data in read_state " << WAITING_FOR_READ; + OnFailed(net::ERR_UNEXPECTED); + return; + } + read_state_ = READING; + read_buffer_ = read_buffer; + + int bytes_read = bidi_stream_->ReadData(read_buffer_.get(), buffer_size); + // If IO is pending, wait for the BidirectionalStream to call OnDataRead. + if (bytes_read == net::ERR_IO_PENDING) + return; + + if (bytes_read < 0) { + OnFailed(bytes_read); + return; + } + OnDataRead(bytes_read); +} + +void CronetBidirectionalStream::WriteDataOnNetworkThread( + scoped_refptr<net::WrappedIOBuffer> write_buffer, + int buffer_size, + bool end_of_stream) { + DCHECK(environment_->IsOnNetworkThread()); + DCHECK(write_buffer); + DCHECK(!write_buffer_); + if (write_state_ != WAITING_FOR_WRITE) { + DLOG(ERROR) << "Unexpected Write Data in write_state " << write_state_; + OnFailed(net::ERR_UNEXPECTED); + return; + } + write_state_ = WRITING; + write_end_of_stream_ = end_of_stream; + + write_buffer_ = write_buffer; + bidi_stream_->SendData(write_buffer_.get(), buffer_size, end_of_stream); +} + +void CronetBidirectionalStream::CancelOnNetworkThread() { + DCHECK(environment_->IsOnNetworkThread()); + if (!bidi_stream_) + return; + read_state_ = write_state_ = CANCELED; + bidi_stream_.reset(); + delegate_->OnCanceled(); +} + +void CronetBidirectionalStream::DestroyOnNetworkThread() { + DCHECK(environment_->IsOnNetworkThread()); + delete this; +} + +void CronetBidirectionalStream::MaybeOnSucceded() { + DCHECK(environment_->IsOnNetworkThread()); + if (read_state_ == READING_DONE && write_state_ == WRITING_DONE) { + read_state_ = write_state_ = SUCCESS; + bidi_stream_.reset(); + delegate_->OnSucceeded(); + } +} + +} // namespace cronet
diff --git a/components/cronet/ios/cronet_bidirectional_stream.h b/components/cronet/ios/cronet_bidirectional_stream.h new file mode 100644 index 0000000..d43efa3 --- /dev/null +++ b/components/cronet/ios/cronet_bidirectional_stream.h
@@ -0,0 +1,166 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CRONET_IOS_CRONET_BIDIRECTIONAL_STREAM_H_ +#define COMPONENTS_CRONET_IOS_CRONET_BIDIRECTIONAL_STREAM_H_ + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/synchronization/lock.h" +#include "net/http/bidirectional_stream.h" + +namespace net { +class HttpRequestHeaders; +class WrappedIOBuffer; +} // namespace net + +namespace cronet { + +class CronetEnvironment; + +// An adapter to net::BidirectionalStream. +// Created and configured from any thread. Start, ReadData, WriteData and +// Destroy can be called on any thread (including network thread), and post +// calls to corresponding {Start|ReadData|WriteData|Destroy}OnNetworkThread to +// the network thread. The object is always deleted on network thread. All +// callbacks into the Delegate are done on the network thread. +// The app is expected to initiate the next step like ReadData or Destroy. +// Public methods can be called on any thread. +class CronetBidirectionalStream : public net::BidirectionalStream::Delegate { + public: + class Delegate { + public: + virtual void OnHeadersSent() = 0; + + virtual void OnHeadersReceived(const net::SpdyHeaderBlock& response_headers, + const char* negotiated_protocol) = 0; + + virtual void OnDataRead(char* data, int size) = 0; + + virtual void OnDataSent(const char* data) = 0; + + virtual void OnTrailersReceived(const net::SpdyHeaderBlock& trailers) = 0; + + virtual void OnSucceeded() = 0; + + virtual void OnFailed(int error) = 0; + + virtual void OnCanceled() = 0; + }; + + CronetBidirectionalStream(CronetEnvironment* environment, Delegate* delegate); + ~CronetBidirectionalStream() override; + + // Validates method and headers, initializes and starts the request. If + // |end_of_stream| is true, then stream is half-closed after sending header + // frame and no data is expected to be written. + // Returns 0 if request is valid and started successfully, + // Returns -1 if |method| is not valid HTTP method name. + // Returns position of invalid header value in |headers| if header name is + // not valid. + int Start(const char* url, + int priority, + const char* method, + const net::HttpRequestHeaders& headers, + bool end_of_stream); + + // Reads more data into |buffer| up to |capacity| bytes. + bool ReadData(char* buffer, int capacity); + + // Writes |count| bytes of data from |buffer|. The |end_of_stream| is + // passed to remote to indicate end of stream. + bool WriteData(const char* buffer, int count, bool end_of_stream); + + // Cancels the request. The OnCanceled callback is invoked when request is + // caneceled, and not other callbacks are invoked afterwards.. + void Cancel(); + + // Releases all resources for the request and deletes the object itself. + void Destroy(); + + private: + // States of BidirectionalStream are tracked in |read_state_| and + // |write_state_|. + // The write state is separated as it changes independently of the read state. + // There is one initial state: NOT_STARTED. There is one normal final state: + // SUCCESS, reached after READING_DONE and WRITING_DONE. There are two + // exceptional final states: CANCELED and ERROR, which can be reached from + // any other non-final state. + enum State { + // Initial state, stream not started. + NOT_STARTED, + // Stream started, request headers are being sent. + STARTED, + // Waiting for ReadData() to be called. + WAITING_FOR_READ, + // Reading from the remote, OnDataRead callback will be invoked when done. + READING, + // There is no more data to read and stream is half-closed by the remote + // side. + READING_DONE, + // Stream is canceled. + CANCELED, + // Error has occured, stream is closed. + ERROR, + // Reading and writing are done, and the stream is closed successfully. + SUCCESS, + // Waiting for WriteData() to be called. + WAITING_FOR_WRITE, + // Writing to the remote, callback will be invoked when done. + WRITING, + // There is no more data to write and stream is half-closed by the local + // side. + WRITING_DONE, + }; + + // net::BidirectionalStream::Delegate implementations: + void OnHeadersSent() override; + void OnHeadersReceived(const net::SpdyHeaderBlock& response_headers) override; + void OnDataRead(int bytes_read) override; + void OnDataSent() override; + void OnTrailersReceived(const net::SpdyHeaderBlock& trailers) override; + void OnFailed(int error) override; + // Helper method to derive OnSucceeded. + void MaybeOnSucceded(); + + void StartOnNetworkThread( + scoped_ptr<net::BidirectionalStreamRequestInfo> request_info); + void ReadDataOnNetworkThread(scoped_refptr<net::WrappedIOBuffer> read_buffer, + int buffer_size); + void WriteDataOnNetworkThread(scoped_refptr<net::WrappedIOBuffer> read_buffer, + int buffer_size, + bool end_of_stream); + void CancelOnNetworkThread(); + void DestroyOnNetworkThread(); + + // Read state is tracking reading flow. Only accessed on network thread. + // / <--- READING <--- \ + // | | + // \ / + // NOT_STARTED -> STARTED --> WAITING_FOR_READ -> READING_DONE -> SUCCESS + State read_state_; + + // Write state is tracking writing flow. Only accessed on network thread. + // / <--- WRITING <--- \ + // | | + // \ / + // NOT_STARTED -> STARTED --> WAITING_FOR_WRITE -> WRITING_DONE -> SUCCESS + State write_state_; + + bool write_end_of_stream_; + + CronetEnvironment* const environment_; + + scoped_refptr<net::WrappedIOBuffer> read_buffer_; + scoped_refptr<net::WrappedIOBuffer> write_buffer_; + scoped_ptr<net::BidirectionalStream> bidi_stream_; + Delegate* delegate_; + + DISALLOW_COPY_AND_ASSIGN(CronetBidirectionalStream); +}; + +} // namespace cronet + +#endif // COMPONENTS_CRONET_IOS_CRONET_BIDIRECTIONAL_STREAM_H_
diff --git a/components/cronet/ios/cronet_c_for_grpc.cc b/components/cronet/ios/cronet_c_for_grpc.cc new file mode 100644 index 0000000..de84d0f5 --- /dev/null +++ b/components/cronet/ios/cronet_c_for_grpc.cc
@@ -0,0 +1,270 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/cronet/ios/cronet_c_for_grpc.h" + +#include <stdbool.h> +#include <string> +#include <vector> + +#include "base/bind.h" +#include "base/location.h" +#include "base/logging.h" +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" +#include "components/cronet/ios/cronet_bidirectional_stream.h" +#include "components/cronet/ios/cronet_environment.h" +#include "net/base/io_buffer.h" +#include "net/base/net_errors.h" +#include "net/base/request_priority.h" +#include "net/http/bidirectional_stream.h" +#include "net/http/bidirectional_stream_request_info.h" +#include "net/http/http_network_session.h" +#include "net/http/http_response_headers.h" +#include "net/http/http_status_code.h" +#include "net/http/http_transaction_factory.h" +#include "net/http/http_util.h" +#include "net/spdy/spdy_header_block.h" +#include "net/ssl/ssl_info.h" +#include "net/url_request/http_user_agent_settings.h" +#include "net/url_request/url_request_context.h" +#include "url/gurl.h" + +namespace { + +class HeadersArray : public cronet_bidirectional_stream_header_array { + public: + HeadersArray(const net::SpdyHeaderBlock& header_block); + ~HeadersArray(); + + private: + DISALLOW_COPY_AND_ASSIGN(HeadersArray); + base::StringPairs headers_strings_; +}; + +HeadersArray::HeadersArray(const net::SpdyHeaderBlock& header_block) + : headers_strings_(header_block.size()) { + // Count and headers are inherited from parent structure. + count = capacity = header_block.size(); + headers = new cronet_bidirectional_stream_header[count]; + size_t i = 0; + // Copy headers into |headers_strings_| because string pieces are not + // '\0'-terminated. + for (const auto& it : header_block) { + headers_strings_[i].first = it.first.as_string(); + headers_strings_[i].second = it.second.as_string(); + headers[i].key = headers_strings_[i].first.c_str(); + headers[i].value = headers_strings_[i].second.c_str(); + ++i; + } +} + +HeadersArray::~HeadersArray() { + delete[] headers; +} + +class CronetBidirectionalStreamAdapter + : public cronet::CronetBidirectionalStream::Delegate { + public: + CronetBidirectionalStreamAdapter( + cronet_engine* engine, + cronet_bidirectional_stream* stream, + cronet_bidirectional_stream_callback* callback); + + virtual ~CronetBidirectionalStreamAdapter(); + + void OnHeadersSent() override; + + void OnHeadersReceived(const net::SpdyHeaderBlock& headers_block, + const char* negotiated_protocol) override; + + void OnDataRead(char* data, int size) override; + + void OnDataSent(const char* data) override; + + void OnTrailersReceived(const net::SpdyHeaderBlock& trailers_block) override; + + void OnSucceeded() override; + + void OnFailed(int error) override; + + void OnCanceled() override; + + static cronet::CronetBidirectionalStream* GetCronetStream( + cronet_bidirectional_stream* stream); + + static void DestroyAdapterForStream(cronet_bidirectional_stream* stream); + + private: + void DestroyOnNetworkThread(); + + // None of these objects are owned by |this|. + cronet::CronetEnvironment* cronet_environment_; + cronet::CronetBidirectionalStream* cronet_bidirectional_stream_; + // C side + cronet_bidirectional_stream* stream_; + cronet_bidirectional_stream_callback* callback_; +}; + +CronetBidirectionalStreamAdapter::CronetBidirectionalStreamAdapter( + cronet_engine* engine, + cronet_bidirectional_stream* stream, + cronet_bidirectional_stream_callback* callback) + : cronet_environment_( + reinterpret_cast<cronet::CronetEnvironment*>(engine->obj)), + stream_(stream), + callback_(callback) { + DCHECK(cronet_environment_); + cronet_bidirectional_stream_ = + new cronet::CronetBidirectionalStream(cronet_environment_, this); +} + +CronetBidirectionalStreamAdapter::~CronetBidirectionalStreamAdapter() {} + +void CronetBidirectionalStreamAdapter::OnHeadersSent() { + DCHECK(callback_->on_response_headers_received); + callback_->on_request_headers_sent(stream_); +} + +void CronetBidirectionalStreamAdapter::OnHeadersReceived( + const net::SpdyHeaderBlock& headers_block, + const char* negotiated_protocol) { + DCHECK(callback_->on_response_headers_received); + HeadersArray response_headers(headers_block); + callback_->on_response_headers_received(stream_, &response_headers, + negotiated_protocol); +} + +void CronetBidirectionalStreamAdapter::OnDataRead(char* data, int size) { + DCHECK(callback_->on_read_completed); + callback_->on_read_completed(stream_, data, size); +} + +void CronetBidirectionalStreamAdapter::OnDataSent(const char* data) { + DCHECK(callback_->on_write_completed); + callback_->on_write_completed(stream_, data); +} + +void CronetBidirectionalStreamAdapter::OnTrailersReceived( + const net::SpdyHeaderBlock& trailers_block) { + DCHECK(callback_->on_response_trailers_received); + HeadersArray response_trailers(trailers_block); + callback_->on_response_trailers_received(stream_, &response_trailers); +} + +void CronetBidirectionalStreamAdapter::OnSucceeded() { + DCHECK(callback_->on_succeded); + callback_->on_succeded(stream_); +} + +void CronetBidirectionalStreamAdapter::OnFailed(int error) { + DCHECK(callback_->on_failed); + callback_->on_failed(stream_, error); +} + +void CronetBidirectionalStreamAdapter::OnCanceled() { + DCHECK(callback_->on_canceled); + callback_->on_canceled(stream_); +} + +cronet::CronetBidirectionalStream* +CronetBidirectionalStreamAdapter::GetCronetStream( + cronet_bidirectional_stream* stream) { + DCHECK(stream); + CronetBidirectionalStreamAdapter* adapter = + static_cast<CronetBidirectionalStreamAdapter*>(stream->obj); + DCHECK(adapter->stream_ == stream); + DCHECK(adapter->cronet_bidirectional_stream_); + return adapter->cronet_bidirectional_stream_; +} + +void CronetBidirectionalStreamAdapter::DestroyAdapterForStream( + cronet_bidirectional_stream* stream) { + DCHECK(stream); + CronetBidirectionalStreamAdapter* adapter = + static_cast<CronetBidirectionalStreamAdapter*>(stream->obj); + DCHECK(adapter->stream_ == stream); + // Destroy could be called from any thread, including network thread (if + // posting task to executor throws an exception), but is posted, so |this| + // is valid until calling task is complete. + adapter->cronet_bidirectional_stream_->Destroy(); + adapter->cronet_environment_->PostToNetworkThread( + FROM_HERE, + base::Bind(&CronetBidirectionalStreamAdapter::DestroyOnNetworkThread, + base::Unretained(adapter))); +} + +void CronetBidirectionalStreamAdapter::DestroyOnNetworkThread() { + DCHECK(cronet_environment_->IsOnNetworkThread()); + delete this; +} + +} // namespace + +cronet_bidirectional_stream* cronet_bidirectional_stream_create( + cronet_engine* engine, + void* annotation, + cronet_bidirectional_stream_callback* callback) { + // Allocate C |stream| object. + cronet_bidirectional_stream* stream = new cronet_bidirectional_stream(); + // Allocate new C++ adapter that will invoke |callback|. + stream->obj = new CronetBidirectionalStreamAdapter(engine, stream, callback); + stream->annotation = annotation; + return stream; +} + +int cronet_bidirectional_stream_start( + cronet_bidirectional_stream* stream, + const char* url, + int priority, + const char* method, + const cronet_bidirectional_stream_header_array* headers, + bool end_of_stream) { + cronet::CronetBidirectionalStream* cronet_stream = + CronetBidirectionalStreamAdapter::GetCronetStream(stream); + net::HttpRequestHeaders request_headers; + if (headers) { + for (size_t i = 0; i < headers->count; ++i) { + std::string name(headers->headers[i].key); + std::string value(headers->headers[i].value); + if (!net::HttpUtil::IsValidHeaderName(name) || + !net::HttpUtil::IsValidHeaderValue(value)) { + DLOG(ERROR) << "Invalid Header " << name << "=" << value; + return i + 1; + } + request_headers.SetHeader(name, value); + } + } + return cronet_stream->Start(url, priority, method, request_headers, + end_of_stream); +} + +int cronet_bidirectional_stream_read(cronet_bidirectional_stream* stream, + char* buffer, + int capacity) { + return CronetBidirectionalStreamAdapter::GetCronetStream(stream)->ReadData( + buffer, capacity); +} + +int cronet_bidirectional_stream_write(cronet_bidirectional_stream* stream, + const char* buffer, + int count, + bool end_of_stream) { + return CronetBidirectionalStreamAdapter::GetCronetStream(stream)->WriteData( + buffer, count, end_of_stream); +} + +int cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream) { + CronetBidirectionalStreamAdapter::GetCronetStream(stream)->Cancel(); + return 1; +} + +int cronet_bidirectional_stream_destroy(cronet_bidirectional_stream* stream) { + CronetBidirectionalStreamAdapter::DestroyAdapterForStream(stream); + delete stream; + return 1; +}
diff --git a/components/cronet/ios/cronet_c_for_grpc.h b/components/cronet/ios/cronet_c_for_grpc.h new file mode 100644 index 0000000..7916450 --- /dev/null +++ b/components/cronet/ios/cronet_c_for_grpc.h
@@ -0,0 +1,203 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_ +#define COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stddef.h> + +/* Cronet Engine API. */ + +/* Opaque object representing Cronet Engine. Created and configured outside + * of this API to facilitate sharing with other components */ +typedef struct cronet_engine { + void* obj; + void* annotation; +} cronet_engine; + +/* Cronet Bidirectional Stream API */ + +/* Opaque object representing Cronet Bidirectional Stream. */ +typedef struct cronet_bidirectional_stream { + void* obj; + void* annotation; +} cronet_bidirectional_stream; + +/* A single request or response header element. */ +typedef struct cronet_bidirectional_stream_header { + const char* key; + const char* value; +} cronet_bidirectional_stream_header; + +/* Array of request or response headers or trailers. */ +typedef struct cronet_bidirectional_stream_header_array { + size_t count; + size_t capacity; + cronet_bidirectional_stream_header* headers; +} cronet_bidirectional_stream_header_array; + +/* Set of callbacks used to receive callbacks from bidirectional stream. */ +typedef struct cronet_bidirectional_stream_callback { + /* Invoked when request headers are sent. Indicates that stream has initiated + * the request. Consumer may call cronet_bidirectional_stream_write() to start + * writing data. + */ + void (*on_request_headers_sent)(cronet_bidirectional_stream* stream); + + /* Invoked when initial response headers are received. + * Consumer must call cronet_bidirectional_stream_read() to start reading. + * Consumer may call cronet_bidirectional_stream_write() to start writing or + * close the stream. Contents of |headers| is valid for duration of the call. + */ + void (*on_response_headers_received)( + cronet_bidirectional_stream* stream, + const cronet_bidirectional_stream_header_array* headers, + const char* negotiated_protocol); + + /* Invoked when data is read into the buffer passed to + * cronet_bidirectional_stream_read(). Only part of the buffer may be + * populated. To continue reading, call cronet_bidirectional_stream_read(). + * It may be invoked after on_response_trailers_received()}, if there was + * pending read data before trailers were received. + * + * If |bytes_read| is 0, it means the remote side has signaled that it will + * send no more data; future calls to cronet_bidirectional_stream_read() + * will result in the on_data_read() callback or on_succeded() callback if + * cronet_bidirectional_stream_write() was invoked with end_of_stream set to + * true. + */ + void (*on_read_completed)(cronet_bidirectional_stream* stream, + char* data, + int bytes_read); + + /** + * Invoked when all data passed to cronet_bidirectional_stream_write() is + * sent. To continue writing, call cronet_bidirectional_stream_write(). + */ + void (*on_write_completed)(cronet_bidirectional_stream* stream, + const char* data); + + /* Invoked when trailers are received before closing the stream. Only invoked + * when server sends trailers, which it may not. May be invoked while there is + * read data remaining in local buffer. Contents of |trailers| is valid for + * duration of the call. + */ + void (*on_response_trailers_received)( + cronet_bidirectional_stream* stream, + const cronet_bidirectional_stream_header_array* trailers); + + /** + * Invoked when there is no data to be read or written and the stream is + * closed successfully remotely and locally. Once invoked, no further callback + * methods will be invoked. + */ + void (*on_succeded)(cronet_bidirectional_stream* stream); + + /** + * Invoked if the stream failed for any reason after + * cronet_bidirectional_stream_start(). HTTP/2 error codes are + * mapped to chrome net error codes. Once invoked, no further callback methods + * will be invoked. + */ + void (*on_failed)(cronet_bidirectional_stream* stream, int net_error); + + /** + * Invoked if the stream was canceled via + * cronet_bidirectional_stream_cancel(). Once invoked, no further callback + * methods will be invoked. + */ + void (*on_canceled)(cronet_bidirectional_stream* stream); +} cronet_bidirectional_stream_callback; + +/* Create a new stream object that uses |engine| and |callback|. All stream + * tasks are performed asynchronously on the |engine| network thread. |callback| + * methods are invoked synchronously on the |engine| network thread, but must + * not run tasks on the current thread to prevent blocking networking operations + * and causing exceptions during shutdown. The |annotation| is stored in + * bidirectional stream for arbitrary use by application. + * + * Returned |cronet_bidirectional_stream*| is owned by the caller, and must be + * destroyed using |cronet_bidirectional_stream_destroy|. + * + * Both |calback| and |engine| must remain valid until stream is destroyed. + */ +cronet_bidirectional_stream* cronet_bidirectional_stream_create( + cronet_engine* engine, + void* annotation, + cronet_bidirectional_stream_callback* callback); + +/* TBD: The following methods return int. Should it be a custom type? */ + +/* Destroy stream object. Destroy could be called from any thread, including + * network thread, but is posted, so |stream| is valid until calling task is + * complete. + */ +int cronet_bidirectional_stream_destroy(cronet_bidirectional_stream* stream); + +/* Start the stream by sending request to |url| using |method| and |headers|. If + * |end_of_stream| is true, then no data is expected to be written. The |method| + * is HTTP verb, with PUT having a special meaning to mark idempotent request, + * which could use QUIC 0-RTT. + */ +int cronet_bidirectional_stream_start( + cronet_bidirectional_stream* stream, + const char* url, + int priority, + const char* method, + const cronet_bidirectional_stream_header_array* headers, + bool end_of_stream); + +/* Read response data into |buffer| of |capacity| length. Must only be called at + * most once in response to each invocation of the + * on_response_headers_received() and on_read_completed() methods of the + * cronet_bidirectional_stream_callback. + * Each call will result in an invocation of the callback's + * on_read_completed() method if data is read, or its on_failed() method if + * there's an error. The callback's on_succeeded() method is also invoked if + * there is no more data to read and |end_of_stream| was previously sent. + */ +int cronet_bidirectional_stream_read(cronet_bidirectional_stream* stream, + char* buffer, + int capacity); + +/* Write request data from |buffer| of |buffer_length| length. Must only be + * called at most once in response to each invocation of the + * on_request_headers_sent() and on_write_completed() methods of the + * cronet_bidirectional_stream_callback. + * Each call will result in an invocation the callback's on_write_completed() + * method if data is sent, or its on_failed() method if there's an error. + * The callback's on_succeeded() method is also invoked if |end_of_stream| is + * set and all response data has been read. + */ +int cronet_bidirectional_stream_write(cronet_bidirectional_stream* stream, + const char* buffer, + int buffer_length, + bool end_of_stream); + +/* Cancels the stream. Can be called at any time after + * cronet_bidirectional_stream_start(). The on_canceled() method of + * cronet_bidirectional_stream_callback will be invoked when cancelation + * is complete and no further callback methods will be invoked. If the + * stream has completed or has not started, calling + * cronet_bidirectional_stream_cancel() has no effect and on_canceled() will not + * be invoked. At most one callback method may be invoked after + * cronet_bidirectional_stream_cancel() has completed. + */ +int cronet_bidirectional_stream_cancel(cronet_bidirectional_stream* stream); + +/* Returns true if the |stream| was successfully started and is now done + * (succeeded, canceled, or failed). + * Returns false if the |stream| stream is not yet started or is in progress. + */ +bool cronet_bidirectional_stream_is_done(cronet_bidirectional_stream* stream); + +#ifdef __cplusplus +} +#endif + +#endif // COMPONENTS_CRONET_IOS_CRONET_C_FOR_GRPC_H_
diff --git a/components/cronet/ios/cronet_environment.cc b/components/cronet/ios/cronet_environment.cc new file mode 100644 index 0000000..00c1fd5 --- /dev/null +++ b/components/cronet/ios/cronet_environment.cc
@@ -0,0 +1,371 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/cronet/ios/cronet_environment.h" + +#include <utility> + +#include "base/at_exit.h" +#include "base/atomicops.h" +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/files/scoped_file.h" +#include "base/json/json_writer.h" +#include "base/mac/bind_objc_block.h" +#include "base/mac/foundation_util.h" +#include "base/macros.h" +#include "base/metrics/statistics_recorder.h" +#include "base/path_service.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/worker_pool.h" +#include "components/cronet/version.h" +#include "components/prefs/json_pref_store.h" +#include "components/prefs/pref_filter.h" +#include "net/base/net_errors.h" +#include "net/base/network_change_notifier.h" +#include "net/cert/cert_verify_result.h" +#include "net/dns/host_resolver.h" +#include "net/dns/mapped_host_resolver.h" +#include "net/http/http_auth_handler_factory.h" +#include "net/http/http_cache.h" +#include "net/http/http_response_headers.h" +#include "net/http/http_server_properties_impl.h" +#include "net/http/http_stream_factory.h" +#include "net/http/http_util.h" +#include "net/log/net_log.h" +#include "net/log/write_to_file_net_log_observer.h" +#include "net/proxy/proxy_service.h" +#include "net/socket/ssl_client_socket.h" +#include "net/ssl/channel_id_service.h" +#include "net/ssl/default_channel_id_store.h" +#include "net/ssl/ssl_config_service_defaults.h" +#include "net/url_request/static_http_user_agent_settings.h" +#include "net/url_request/url_request_context_storage.h" +#include "net/url_request/url_request_job_factory_impl.h" +#include "url/url_util.h" + +namespace { + +base::AtExitManager* g_at_exit_ = nullptr; +net::NetworkChangeNotifier* g_network_change_notifier = nullptr; +// MessageLoop on the main thread. +base::MessageLoop* g_main_message_loop = nullptr; + +#if USE_FAKE_CERT_VERIFIER +// TODO(mef): Remove this after GRPC testing is done. +class FakeCertVerifier : public net::CertVerifier { + public: + FakeCertVerifier() {} + + ~FakeCertVerifier() override {} + + // CertVerifier implementation + int Verify(net::X509Certificate* cert, + const std::string& hostname, + const std::string& ocsp_response, + int flags, + net::CRLSet* crl_set, + net::CertVerifyResult* verify_result, + const net::CompletionCallback& callback, + scoped_ptr<Request>* out_req, + const net::BoundNetLog& net_log) override { + // It's all good! + verify_result->verified_cert = cert; + verify_result->cert_status = MapNetErrorToCertStatus(net::OK); + return net::OK; + } +}; +#endif // USE_FAKE_CERT_VERIFIER + +} // namespace + +namespace cronet { + +bool CronetEnvironment::IsOnNetworkThread() { + return network_io_thread_->task_runner()->BelongsToCurrentThread(); +} + +void CronetEnvironment::PostToNetworkThread( + const tracked_objects::Location& from_here, + const base::Closure& task) { + network_io_thread_->task_runner()->PostTask(from_here, task); +} + +void CronetEnvironment::PostToFileUserBlockingThread( + const tracked_objects::Location& from_here, + const base::Closure& task) { + file_user_blocking_thread_->message_loop()->PostTask(from_here, task); +} + +net::URLRequestContext* CronetEnvironment::GetURLRequestContext() const { + return main_context_.get(); +} + +// static +void CronetEnvironment::Initialize() { + // DCHECK_EQ([NSThread currentThread], [NSThread mainThread]); + // This method must be called once from the main thread. + if (!g_at_exit_) + g_at_exit_ = new base::AtExitManager; + + url::Initialize(); + base::CommandLine::Init(0, nullptr); + + // Without doing this, StatisticsRecorder::FactoryGet() leaks one histogram + // per call after the first for a given name. + base::StatisticsRecorder::Initialize(); + + // Create a message loop on the UI thread. + DCHECK(!base::MessageLoop::current()); + DCHECK(!g_main_message_loop); + g_main_message_loop = new base::MessageLoopForUI(); + base::MessageLoopForUI::current()->Attach(); + // The network change notifier must be initialized so that registered + // delegates will receive callbacks. + DCHECK(!g_network_change_notifier); + g_network_change_notifier = net::NetworkChangeNotifier::Create(); +} + +void CronetEnvironment::StartNetLog(base::FilePath::StringType file_name, + bool log_bytes) { + DCHECK(file_name.length()); + PostToNetworkThread(FROM_HERE, + base::Bind(&CronetEnvironment::StartNetLogOnNetworkThread, + base::Unretained(this), file_name, log_bytes)); +} + +void CronetEnvironment::StartNetLogOnNetworkThread( + const base::FilePath::StringType& file_name, + bool log_bytes) { + DCHECK(file_name.length()); + DCHECK(net_log_); + + if (net_log_observer_) + return; + + base::FilePath files_root; + if (!PathService::Get(base::DIR_HOME, &files_root)) + return; + + base::FilePath full_path = files_root.Append(file_name); + base::ScopedFILE file(base::OpenFile(full_path, "w")); + if (!file) { + LOG(ERROR) << "Can not start NetLog to " << full_path.value(); + return; + } + + net::NetLogCaptureMode capture_mode = + log_bytes ? net::NetLogCaptureMode::IncludeSocketBytes() + : net::NetLogCaptureMode::Default(); + + net_log_observer_.reset(new net::WriteToFileNetLogObserver()); + net_log_observer_->set_capture_mode(capture_mode); + net_log_observer_->StartObserving(main_context_->net_log(), std::move(file), + nullptr, main_context_.get()); + LOG(WARNING) << "Started NetLog to " << full_path.value(); +} + +void CronetEnvironment::StopNetLog() { + base::WaitableEvent log_stopped_event(true, false); + PostToNetworkThread(FROM_HERE, + base::Bind(&CronetEnvironment::StopNetLogOnNetworkThread, + base::Unretained(this), &log_stopped_event)); + log_stopped_event.Wait(); +} + +void CronetEnvironment::StopNetLogOnNetworkThread( + base::WaitableEvent* log_stopped_event) { + if (net_log_observer_) { + DLOG(WARNING) << "Stopped NetLog."; + net_log_observer_->StopObserving(main_context_.get()); + net_log_observer_.reset(); + } + log_stopped_event->Signal(); +} + +net::HttpNetworkSession* CronetEnvironment::GetHttpNetworkSession( + net::URLRequestContext* context) { + DCHECK(context); + if (!context->http_transaction_factory()) + return nullptr; + + return context->http_transaction_factory()->GetSession(); +} + +void CronetEnvironment::AddQuicHint(const std::string& host, + int port, + int alternate_port) { + DCHECK(port == alternate_port); + quic_hints_.push_back(net::HostPortPair(host, port)); +} + +CronetEnvironment::CronetEnvironment(const std::string& user_agent_product_name) + : http2_enabled_(false), + quic_enabled_(false), + user_agent_product_name_(user_agent_product_name), + net_log_(new net::NetLog) {} + +void CronetEnvironment::Start() { +#if USE_FAKE_CERT_VERIFIER + // TODO(mef): Remove this and FakeCertVerifier after GRPC testing. + set_cert_verifier(scoped_ptr<net::CertVerifier>(new FakeCertVerifier())); +#endif // USE_FAKE_CERT_VERIFIER + + // Threads setup. + network_cache_thread_.reset(new base::Thread("Chrome Network Cache Thread")); + network_cache_thread_->StartWithOptions( + base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); + network_io_thread_.reset(new base::Thread("Chrome Network IO Thread")); + network_io_thread_->StartWithOptions( + base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); + file_thread_.reset(new base::Thread("Chrome File Thread")); + file_thread_->StartWithOptions( + base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); + file_user_blocking_thread_.reset( + new base::Thread("Chrome File User Blocking Thread")); + file_user_blocking_thread_->StartWithOptions( + base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); + + static bool ssl_key_log_file_set = false; + if (!ssl_key_log_file_set && !ssl_key_log_file_name_.empty()) { + ssl_key_log_file_set = true; + base::FilePath ssl_key_log_file; + if (!PathService::Get(base::DIR_HOME, &ssl_key_log_file)) + return; + net::SSLClientSocket::SetSSLKeyLogFile( + ssl_key_log_file.Append(ssl_key_log_file_name_), + file_thread_->task_runner()); + } + + proxy_config_service_ = net::ProxyService::CreateSystemProxyConfigService( + network_io_thread_->task_runner(), nullptr); + +#if defined(USE_NSS_VERIFIER) + net::SetURLRequestContextForNSSHttpIO(main_context_.get()); +#endif + base::subtle::MemoryBarrier(); + PostToNetworkThread(FROM_HERE, + base::Bind(&CronetEnvironment::InitializeOnNetworkThread, + base::Unretained(this))); +} + +CronetEnvironment::~CronetEnvironment() { +// net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); +#if defined(USE_NSS_VERIFIER) + net::SetURLRequestContextForNSSHttpIO(nullptr); +#endif +} + +void CronetEnvironment::InitializeOnNetworkThread() { + DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread()); + main_context_.reset(new net::URLRequestContext); + main_context_->set_net_log(net_log_.get()); + std::string user_agent(user_agent_product_name_ + + " (iOS); Cronet/" CRONET_VERSION); + main_context_->set_http_user_agent_settings( + new net::StaticHttpUserAgentSettings("en", user_agent)); + + main_context_->set_ssl_config_service(new net::SSLConfigServiceDefaults); + main_context_->set_transport_security_state( + new net::TransportSecurityState()); + http_server_properties_.reset(new net::HttpServerPropertiesImpl()); + main_context_->set_http_server_properties( + http_server_properties_->GetWeakPtr()); + + // TODO(rdsmith): Note that the ".release()" calls below are leaking + // the objects in question; this should be fixed by having an object + // corresponding to URLRequestContextStorage that actually owns those + // objects. See http://crbug.com/523858. + scoped_ptr<net::MappedHostResolver> mapped_host_resolver( + new net::MappedHostResolver( + net::HostResolver::CreateDefaultResolver(nullptr))); + + mapped_host_resolver->SetRulesFromString(host_resolver_rules_); + main_context_->set_host_resolver(mapped_host_resolver.release()); + + if (!cert_verifier_) + cert_verifier_ = net::CertVerifier::CreateDefault(); + main_context_->set_cert_verifier(cert_verifier_.get()); + + main_context_->set_http_auth_handler_factory( + net::HttpAuthHandlerRegistryFactory::CreateDefault( + main_context_->host_resolver()) + .release()); + main_context_->set_proxy_service( + net::ProxyService::CreateUsingSystemProxyResolver( + std::move(proxy_config_service_), 0, nullptr) + .release()); + + // Cache + base::FilePath cache_path; + if (!PathService::Get(base::DIR_CACHE, &cache_path)) + return; + cache_path = cache_path.Append(FILE_PATH_LITERAL("cronet")); + scoped_ptr<net::HttpCache::DefaultBackend> main_backend( + new net::HttpCache::DefaultBackend(net::DISK_CACHE, + net::CACHE_BACKEND_SIMPLE, cache_path, + 0, // Default cache size. + network_cache_thread_->task_runner())); + + net::HttpNetworkSession::Params params; + + params.host_resolver = main_context_->host_resolver(); + params.cert_verifier = main_context_->cert_verifier(); + params.channel_id_service = main_context_->channel_id_service(); + params.transport_security_state = main_context_->transport_security_state(); + params.proxy_service = main_context_->proxy_service(); + params.ssl_config_service = main_context_->ssl_config_service(); + params.http_auth_handler_factory = main_context_->http_auth_handler_factory(); + params.http_server_properties = main_context_->http_server_properties(); + params.net_log = main_context_->net_log(); + params.enable_http2 = http2_enabled(); + params.parse_alternative_services = false; + params.enable_quic = quic_enabled(); + + for (const auto& quic_hint : quic_hints_) { + net::AlternativeService alternative_service(net::AlternateProtocol::QUIC, + "", quic_hint.port()); + + main_context_->http_server_properties()->SetAlternativeService( + quic_hint, alternative_service, base::Time::Max()); + params.quic_host_whitelist.insert(quic_hint.host()); + } + + if (!params.channel_id_service) { + // The main context may not have a ChannelIDService, since it is lazily + // constructed. If not, build an ephemeral ChannelIDService with no backing + // disk store. + // TODO(ellyjones): support persisting ChannelID. + params.channel_id_service = + new net::ChannelIDService(new net::DefaultChannelIDStore(NULL), + base::WorkerPool::GetTaskRunner(true)); + } + + // TODO(mmenke): These really shouldn't be leaked. + // See https://crbug.com/523858. + net::HttpNetworkSession* http_network_session = + new net::HttpNetworkSession(params); + net::HttpCache* main_cache = + new net::HttpCache(http_network_session, std::move(main_backend), + true /* set_up_quic_server_info */); + main_context_->set_http_transaction_factory(main_cache); + + net::URLRequestJobFactoryImpl* job_factory = + new net::URLRequestJobFactoryImpl; + main_context_->set_job_factory(job_factory); + main_context_->set_net_log(net_log_.get()); +} + +std::string CronetEnvironment::user_agent() { + const net::HttpUserAgentSettings* user_agent_settings = + main_context_->http_user_agent_settings(); + if (!user_agent_settings) { + return nullptr; + } + + return user_agent_settings->GetUserAgent(); +} + +} // namespace cronet
diff --git a/components/cronet/ios/cronet_environment.h b/components/cronet/ios/cronet_environment.h new file mode 100644 index 0000000..076f0d5a --- /dev/null +++ b/components/cronet/ios/cronet_environment.h
@@ -0,0 +1,135 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CRONET_IOS_CRONET_ENVIRONMENT_H_ +#define COMPONENTS_CRONET_IOS_CRONET_ENVIRONMENT_H_ + +#include <list> + +#include "base/files/file_path.h" +#include "base/macros.h" +#include "base/message_loop/message_loop.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/thread.h" +#include "components/cronet/url_request_context_config.h" +#include "net/cert/cert_verifier.h" +#include "net/url_request/url_request.h" +#include "net/url_request/url_request_context.h" + +class JsonPrefStore; + +namespace base { +class WaitableEvent; +} // namespace base + +namespace net { +class HttpCache; +class NetworkChangeNotifier; +class NetLog; +class ProxyConfigService; +class WriteToFileNetLogObserver; +} // namespace net + +namespace cronet { +// CronetEnvironment contains all the network stack configuration +// and initialization. +class CronetEnvironment { + public: + // Initialize Cronet environment globals. Must be called only once on the + // main thread. + static void Initialize(); + + // |user_agent_product_name| will be used to generate the user-agent. + CronetEnvironment(const std::string& user_agent_product_name); + ~CronetEnvironment(); + + // Starts this instance of Cronet environment. + void Start(); + + // The full user-agent. + std::string user_agent(); + + // Creates a new net log (overwrites existing file with this name). If + // actively logging, this call is ignored. + void StartNetLog(base::FilePath::StringType file_name, bool log_bytes); + // Stops logging and flushes file. If not currently logging this call is + // ignored. + void StopNetLog(); + + void AddQuicHint(const std::string& host, int port, int alternate_port); + + // Setters and getters for |http2_enabled_|, |quic_enabled_|, and + // |forced_quic_origin_|. These only have any effect before Start() is + // called. + void set_http2_enabled(bool enabled) { http2_enabled_ = enabled; } + void set_quic_enabled(bool enabled) { quic_enabled_ = enabled; } + + bool http2_enabled() const { return http2_enabled_; } + bool quic_enabled() const { return quic_enabled_; } + + void set_cert_verifier(scoped_ptr<net::CertVerifier> cert_verifier) { + cert_verifier_ = std::move(cert_verifier); + } + + void set_host_resolver_rules(const std::string& host_resolver_rules) { + host_resolver_rules_ = host_resolver_rules; + } + + void set_ssl_key_log_file_name(const std::string& ssl_key_log_file_name) { + ssl_key_log_file_name_ = ssl_key_log_file_name; + } + + net::URLRequestContext* GetURLRequestContext() const; + + bool IsOnNetworkThread(); + + // Runs a closure on the network thread. + void PostToNetworkThread(const tracked_objects::Location& from_here, + const base::Closure& task); + + private: + // Performs initialization tasks that must happen on the network thread. + void InitializeOnNetworkThread(); + + // Runs a closure on the file user blocking thread. + void PostToFileUserBlockingThread(const tracked_objects::Location& from_here, + const base::Closure& task); + + // Helper methods that start/stop net logging on the network thread. + void StartNetLogOnNetworkThread(const base::FilePath::StringType& file_name, + bool log_bytes); + void StopNetLogOnNetworkThread(base::WaitableEvent* log_stopped_event); + + // Returns the HttpNetworkSession object from the passed in + // URLRequestContext or NULL if none exists. + net::HttpNetworkSession* GetHttpNetworkSession( + net::URLRequestContext* context); + + bool http2_enabled_; + bool quic_enabled_; + std::string host_resolver_rules_; + std::string ssl_key_log_file_name_; + + std::list<net::HostPortPair> quic_hints_; + + scoped_ptr<base::Thread> network_io_thread_; + scoped_ptr<base::Thread> network_cache_thread_; + scoped_ptr<base::Thread> file_thread_; + scoped_ptr<base::Thread> file_user_blocking_thread_; + scoped_refptr<base::SequencedTaskRunner> pref_store_worker_pool_; + scoped_refptr<JsonPrefStore> net_pref_store_; + scoped_ptr<net::CertVerifier> cert_verifier_; + scoped_ptr<net::ProxyConfigService> proxy_config_service_; + scoped_ptr<net::HttpServerProperties> http_server_properties_; + scoped_ptr<net::URLRequestContext> main_context_; + std::string user_agent_product_name_; + scoped_ptr<net::NetLog> net_log_; + scoped_ptr<net::WriteToFileNetLogObserver> net_log_observer_; + + DISALLOW_COPY_AND_ASSIGN(CronetEnvironment); +}; + +} // namespace cronet + +#endif // COMPONENTS_CRONET_IOS_CRONET_ENVIRONMENT_H_
diff --git a/components/cronet/ios/test/cronet_bidirectional_stream_test.mm b/components/cronet/ios/test/cronet_bidirectional_stream_test.mm new file mode 100644 index 0000000..6ff093a --- /dev/null +++ b/components/cronet/ios/test/cronet_bidirectional_stream_test.mm
@@ -0,0 +1,376 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import <Foundation/Foundation.h> +#include <stdint.h> +#include <list> +#include <map> +#include <string> + +#include "base/logging.h" +#include "base/mac/scoped_nsobject.h" +#include "base/strings/string_util.h" +#include "base/strings/sys_string_conversions.h" +#include "base/synchronization/waitable_event.h" +#include "components/cronet/ios/cronet_c_for_grpc.h" +#include "components/cronet/ios/cronet_environment.h" +#include "components/cronet/ios/test/quic_test_server.h" +#include "net/base/mac/url_conversions.h" +#include "net/base/net_errors.h" +#include "net/base/test_data_directory.h" +#include "net/cert/mock_cert_verifier.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/gtest_mac.h" +#include "url/gurl.h" + +namespace { +const char kTestServerHost[] = "test.example.com"; +const int kTestServerPort = 6121; +const char kTestServerUrl[] = "https://test.example.com:6121"; + +cronet_bidirectional_stream_header kTestHeaders[] = { + {"header1", "foo"}, + {"header2", "bar"}, +}; +const cronet_bidirectional_stream_header_array kTestHeadersArray = { + 2, 2, kTestHeaders}; +} // namespace + +class CronetBidirectionalStreamTest : public ::testing::Test { + protected: + CronetBidirectionalStreamTest() {} + ~CronetBidirectionalStreamTest() override {} + + void SetUp() override { + static bool initialized = false; + if (!initialized) { + initialized = true; + // Hack to work around issues with SetUp being called multiple times + // during the test, and QuicTestServer not shutting down / restarting + // gracefully. + cronet::CronetEnvironment::Initialize(); + cronet::StartQuicTestServer(); + } + + cronet_environment_ = new cronet::CronetEnvironment("CronetTest/1.0.0.0"); + cronet_environment_->set_http2_enabled(true); + cronet_environment_->set_quic_enabled(true); + cronet_environment_->set_ssl_key_log_file_name("SSLKEYLOGFILE"); + + scoped_ptr<net::MockCertVerifier> mock_cert_verifier( + new net::MockCertVerifier()); + mock_cert_verifier->set_default_result(net::OK); + + cronet_environment_->set_cert_verifier(std::move(mock_cert_verifier)); + cronet_environment_->set_host_resolver_rules( + "MAP test.example.com 127.0.0.1," + "MAP notfound.example.com ~NOTFOUND"); + cronet_environment_->AddQuicHint(kTestServerHost, kTestServerPort, + kTestServerPort); + + cronet_environment_->Start(); + + cronet_engine_.obj = cronet_environment_; + + cronet_environment_->StartNetLog("cronet_netlog.json", true); + } + + void TearDown() override { + // cronet::ShutdownQuicTestServer(); + cronet_environment_->StopNetLog(); + //[CronetEngine stopNetLog]; + //[CronetEngine uninstall]; + } + + cronet_engine* engine() { return &cronet_engine_; } + + private: + static cronet::CronetEnvironment* cronet_environment_; + static cronet_engine cronet_engine_; +}; + +cronet::CronetEnvironment* CronetBidirectionalStreamTest::cronet_environment_; +cronet_engine CronetBidirectionalStreamTest::cronet_engine_; + +class TestBidirectionalStreamCallback { + public: + enum ResponseStep { + NOTHING, + ON_REQUEST_HEADERS_SENT, + ON_RESPONSE_STARTED, + ON_READ_COMPLETED, + ON_WRITE_COMPLETED, + ON_TRAILERS, + ON_CANCELED, + ON_FAILED, + ON_SUCCEEDED + }; + + cronet_bidirectional_stream* stream; + base::WaitableEvent stream_done_event; + + // Test parameters. + std::map<std::string, std::string> request_headers; + std::list<std::string> write_data; + std::string expected_negotiated_protocol; + ResponseStep cancel_from_step; + size_t read_buffer_size; + + // Test results. + ResponseStep response_step; + char* read_buffer; + std::map<std::string, std::string> response_headers; + std::map<std::string, std::string> response_trailers; + std::vector<std::string> read_data; + int net_error; + + TestBidirectionalStreamCallback() + : stream(nullptr), + stream_done_event(true, false), + expected_negotiated_protocol("quic/1+spdy/3"), + cancel_from_step(NOTHING), + read_buffer_size(32768), + response_step(NOTHING), + read_buffer(nullptr), + net_error(0) {} + + ~TestBidirectionalStreamCallback() { + if (read_buffer) + delete read_buffer; + } + + static TestBidirectionalStreamCallback* FromStream( + cronet_bidirectional_stream* stream) { + DCHECK(stream); + return (TestBidirectionalStreamCallback*)stream->annotation; + } + + bool MaybeCancel(cronet_bidirectional_stream* stream, ResponseStep step) { + DCHECK_EQ(stream, this->stream); + response_step = step; + DLOG(WARNING) << "Step: " << step; + + if (step != cancel_from_step) + return false; + + cronet_bidirectional_stream_cancel(stream); + return true; + } + + void SignalDone() { stream_done_event.Signal(); } + + void BlockForDone() { stream_done_event.Wait(); } + + void AddWriteData(const std::string& data) { write_data.push_back(data); } + + void MaybeWriteNextData(cronet_bidirectional_stream* stream) { + DCHECK_EQ(stream, this->stream); + if (write_data.empty()) + return; + cronet_bidirectional_stream_write(stream, write_data.front().c_str(), + write_data.front().size(), + write_data.size() == 1); + } + + cronet_bidirectional_stream_callback* callback() const { return &s_callback; } + + private: + // C callbacks. + static void on_request_headers_sent_callback( + cronet_bidirectional_stream* stream) { + TestBidirectionalStreamCallback* test = FromStream(stream); + if (test->MaybeCancel(stream, ON_REQUEST_HEADERS_SENT)) + return; + test->MaybeWriteNextData(stream); + } + + static void on_response_headers_received_callback( + cronet_bidirectional_stream* stream, + const cronet_bidirectional_stream_header_array* headers, + const char* negotiated_protocol) { + TestBidirectionalStreamCallback* test = FromStream(stream); + ASSERT_EQ(test->expected_negotiated_protocol, + std::string(negotiated_protocol)); + for (size_t i = 0; i < headers->count; ++i) { + test->response_headers[headers->headers[i].key] = + headers->headers[i].value; + } + if (test->MaybeCancel(stream, ON_RESPONSE_STARTED)) + return; + test->read_buffer = new char[test->read_buffer_size]; + cronet_bidirectional_stream_read(stream, test->read_buffer, + test->read_buffer_size); + } + + static void on_read_completed_callback(cronet_bidirectional_stream* stream, + char* data, + int count) { + TestBidirectionalStreamCallback* test = FromStream(stream); + test->read_data.push_back(std::string(data, count)); + if (test->MaybeCancel(stream, ON_READ_COMPLETED)) + return; + if (count == 0) + return; + cronet_bidirectional_stream_read(stream, test->read_buffer, + test->read_buffer_size); + } + + static void on_write_completed_callback(cronet_bidirectional_stream* stream, + const char* data) { + TestBidirectionalStreamCallback* test = FromStream(stream); + ASSERT_EQ(test->write_data.front().c_str(), data); + if (test->MaybeCancel(stream, ON_WRITE_COMPLETED)) + return; + test->write_data.pop_front(); + test->MaybeWriteNextData(stream); + } + + static void on_response_trailers_received_callback( + cronet_bidirectional_stream* stream, + const cronet_bidirectional_stream_header_array* trailers) { + TestBidirectionalStreamCallback* test = FromStream(stream); + if (test->MaybeCancel(stream, ON_TRAILERS)) + return; + } + + static void on_succeded_callback(cronet_bidirectional_stream* stream) { + TestBidirectionalStreamCallback* test = FromStream(stream); + test->MaybeCancel(stream, ON_SUCCEEDED); + test->SignalDone(); + } + + static void on_failed_callback(cronet_bidirectional_stream* stream, + int net_error) { + TestBidirectionalStreamCallback* test = FromStream(stream); + test->net_error = net_error; + test->MaybeCancel(stream, ON_FAILED); + test->SignalDone(); + } + + static void on_canceled_callback(cronet_bidirectional_stream* stream) { + TestBidirectionalStreamCallback* test = FromStream(stream); + test->MaybeCancel(stream, ON_CANCELED); + test->SignalDone(); + } + + static cronet_bidirectional_stream_callback s_callback; +}; + +cronet_bidirectional_stream_callback + TestBidirectionalStreamCallback::s_callback = { + on_request_headers_sent_callback, + on_response_headers_received_callback, + on_read_completed_callback, + on_write_completed_callback, + on_response_trailers_received_callback, + on_succeded_callback, + on_failed_callback, + on_canceled_callback}; + +TEST_F(CronetBidirectionalStreamTest, StartExampleBidiStream) { + TestBidirectionalStreamCallback test; + test.AddWriteData("Hello, "); + test.AddWriteData("world!"); + test.read_buffer_size = 2; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + cronet_bidirectional_stream_start(test.stream, kTestServerUrl, 0, "POST", + &kTestHeadersArray, false); + test.BlockForDone(); + ASSERT_EQ(std::string("404"), test.response_headers[":status"]); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_SUCCEEDED, test.response_step); + ASSERT_EQ(std::string("fi"), test.read_data.front()); + ASSERT_EQ(std::string("file not found"), + base::JoinString(test.read_data, "")); + cronet_bidirectional_stream_destroy(test.stream); +} + +TEST_F(CronetBidirectionalStreamTest, CancelOnRead) { + TestBidirectionalStreamCallback test; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + test.cancel_from_step = TestBidirectionalStreamCallback::ON_READ_COMPLETED; + cronet_bidirectional_stream_start(test.stream, kTestServerUrl, 0, "POST", + &kTestHeadersArray, true); + test.BlockForDone(); + ASSERT_EQ(std::string("404"), test.response_headers[":status"]); + ASSERT_EQ(std::string("file not found"), test.read_data.front()); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_CANCELED, test.response_step); + cronet_bidirectional_stream_destroy(test.stream); +} + +TEST_F(CronetBidirectionalStreamTest, CancelOnResponse) { + TestBidirectionalStreamCallback test; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + test.cancel_from_step = TestBidirectionalStreamCallback::ON_RESPONSE_STARTED; + cronet_bidirectional_stream_start(test.stream, kTestServerUrl, 0, "POST", + &kTestHeadersArray, true); + test.BlockForDone(); + ASSERT_EQ(std::string("404"), test.response_headers[":status"]); + ASSERT_TRUE(test.read_data.empty()); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_CANCELED, test.response_step); + cronet_bidirectional_stream_destroy(test.stream); +} + +TEST_F(CronetBidirectionalStreamTest, CancelOnSucceeded) { + TestBidirectionalStreamCallback test; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + test.cancel_from_step = TestBidirectionalStreamCallback::ON_SUCCEEDED; + cronet_bidirectional_stream_start(test.stream, kTestServerUrl, 0, "POST", + &kTestHeadersArray, true); + test.BlockForDone(); + ASSERT_EQ(std::string("404"), test.response_headers[":status"]); + ASSERT_EQ(std::string("file not found"), test.read_data.front()); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_SUCCEEDED, test.response_step); + cronet_bidirectional_stream_destroy(test.stream); +} + +TEST_F(CronetBidirectionalStreamTest, ReadFailsBeforeRequestStarted) { + TestBidirectionalStreamCallback test; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + char read_buffer[1]; + cronet_bidirectional_stream_read(test.stream, read_buffer, + sizeof(read_buffer)); + test.BlockForDone(); + ASSERT_TRUE(test.read_data.empty()); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step); + ASSERT_EQ(net::ERR_UNEXPECTED, test.net_error); + cronet_bidirectional_stream_destroy(test.stream); +} + +TEST_F(CronetBidirectionalStreamTest, WriteFailsBeforeRequestStarted) { + TestBidirectionalStreamCallback test; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + cronet_bidirectional_stream_write(test.stream, "1", 1, false); + test.BlockForDone(); + ASSERT_TRUE(test.read_data.empty()); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step); + ASSERT_EQ(net::ERR_UNEXPECTED, test.net_error); + cronet_bidirectional_stream_destroy(test.stream); +} + +TEST_F(CronetBidirectionalStreamTest, FailedResolution) { + TestBidirectionalStreamCallback test; + test.stream = + cronet_bidirectional_stream_create(engine(), &test, test.callback()); + DCHECK(test.stream); + test.cancel_from_step = TestBidirectionalStreamCallback::ON_FAILED; + cronet_bidirectional_stream_start(test.stream, "https://notfound.example.com", + 0, "GET", &kTestHeadersArray, true); + test.BlockForDone(); + ASSERT_TRUE(test.read_data.empty()); + ASSERT_EQ(TestBidirectionalStreamCallback::ON_FAILED, test.response_step); + ASSERT_EQ(net::ERR_NAME_NOT_RESOLVED, test.net_error); + cronet_bidirectional_stream_destroy(test.stream); +}
diff --git a/components/cronet/ios/test/cronet_test_runner.mm b/components/cronet/ios/test/cronet_test_runner.mm new file mode 100644 index 0000000..2272531 --- /dev/null +++ b/components/cronet/ios/test/cronet_test_runner.mm
@@ -0,0 +1,11 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/gtest_mac.h" + +int main(int argc, char* argv[]) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}
diff --git a/components/cronet/ios/test/quic_test_server.cc b/components/cronet/ios/test/quic_test_server.cc new file mode 100644 index 0000000..581d737b --- /dev/null +++ b/components/cronet/ios/test/quic_test_server.cc
@@ -0,0 +1,104 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "quic_test_server.h" + +#include "base/bind.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/path_service.h" +#include "base/synchronization/waitable_event.h" +#include "base/threading/thread.h" +#include "net/base/ip_endpoint.h" +#include "net/base/test_data_directory.h" +#include "net/quic/crypto/proof_source_chromium.h" +#include "net/tools/quic/quic_in_memory_cache.h" +#include "net/tools/quic/quic_simple_server.h" + +namespace cronet { + +// This must match the certificate used (quic_test.example.com.crt and +// quic_test.example.com.key.pkcs8). +const char kFakeQuicDomain[] = "test.example.com"; +static const int kServerPort = 6121; + +base::Thread* g_quic_server_thread = nullptr; +net::QuicSimpleServer* g_quic_server = nullptr; + +void StartQuicServerOnServerThread(const base::FilePath& test_files_root, + base::WaitableEvent* server_started_event) { + DCHECK(g_quic_server_thread->task_runner()->BelongsToCurrentThread()); + DCHECK(!g_quic_server); + + // Set up in-memory cache. + /* + base::FilePath file_dir = test_files_root.Append("quic_data"); + CHECK(base::PathExists(file_dir)) << "Quic data does not exist"; + net::QuicInMemoryCache::GetInstance()->InitializeFromDirectory( + file_dir.value()); + */ + net::IPAddressNumber ip; + net::ParseIPLiteralToNumber(kFakeQuicDomain, &ip); + net::QuicConfig config; + + // Set up server certs. + base::FilePath directory; + // CHECK(base::android::GetExternalStorageDirectory(&directory)); + // directory = directory.Append("net/data/ssl/certificates"); + directory = test_files_root; + // TODO(xunjieli): Use scoped_ptr when crbug.com/545474 is fixed. + net::ProofSourceChromium* proof_source = new net::ProofSourceChromium(); + CHECK(proof_source->Initialize( + directory.Append("quic_test.example.com.crt"), + directory.Append("quic_test.example.com.key.pkcs8"), + directory.Append("quic_test.example.com.key.sct"))); + g_quic_server = new net::QuicSimpleServer(proof_source, config, + net::QuicSupportedVersions()); + + // Start listening. + int rv = g_quic_server->Listen(net::IPEndPoint(ip, kServerPort)); + CHECK_GE(rv, 0) << "Quic server fails to start"; + server_started_event->Signal(); +} + +void ShutdownOnServerThread(base::WaitableEvent* server_stopped_event) { + DCHECK(g_quic_server_thread->task_runner()->BelongsToCurrentThread()); + g_quic_server->Shutdown(); + delete g_quic_server; + g_quic_server = nullptr; + server_stopped_event->Signal(); +} + +// Quic server is currently hardcoded to run on port 6121 of the localhost on +// the device. +bool StartQuicTestServer() { + DCHECK(!g_quic_server_thread); + g_quic_server_thread = new base::Thread("quic server thread"); + base::Thread::Options thread_options; + thread_options.message_loop_type = base::MessageLoop::TYPE_IO; + bool started = g_quic_server_thread->StartWithOptions(thread_options); + DCHECK(started); + base::FilePath test_files_root; + if (!PathService::Get(base::DIR_EXE, &test_files_root)) + return false; + + base::WaitableEvent server_started_event(true, false); + g_quic_server_thread->task_runner()->PostTask( + FROM_HERE, base::Bind(&StartQuicServerOnServerThread, test_files_root, + &server_started_event)); + server_started_event.Wait(); + return true; +} + +void ShutdownQuicTestServer() { + DCHECK(!g_quic_server_thread->task_runner()->BelongsToCurrentThread()); + base::WaitableEvent server_stopped_event(true, false); + g_quic_server_thread->task_runner()->PostTask( + FROM_HERE, base::Bind(&ShutdownOnServerThread, &server_stopped_event)); + server_stopped_event.Wait(); + delete g_quic_server_thread; + g_quic_server_thread = nullptr; +} + +} // namespace cronet
diff --git a/components/cronet/ios/test/quic_test_server.h b/components/cronet/ios/test/quic_test_server.h new file mode 100644 index 0000000..2fae073 --- /dev/null +++ b/components/cronet/ios/test/quic_test_server.h
@@ -0,0 +1,16 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CRONET_IOS_TEST_QUIC_TEST_SERVER_H_ +#define COMPONENTS_CRONET_IOS_TEST_QUIC_TEST_SERVER_H_ + +namespace cronet { + +bool StartQuicTestServer(); + +void ShutdownQuicTestServer(); + +} // namespace cronet + +#endif // COMPONENTS_CRONET_IOS_TEST_QUIC_TEST_SERVER_H_
diff --git a/components/cronet/tools/cr_cronet.py b/components/cronet/tools/cr_cronet.py index 8023bc3..906657d 100755 --- a/components/cronet/tools/cr_cronet.py +++ b/components/cronet/tools/cr_cronet.py
@@ -11,15 +11,14 @@ import os import sys - def run(command, extra_options=''): command = command + ' ' + extra_options print command return os.system(command) -def build(out_dir, extra_options=''): - return run('ninja -C ' + out_dir + ' cronet_test_instrumentation_apk', +def build(out_dir, test_target, extra_options=''): + return run('ninja -C ' + out_dir + ' ' + test_target, extra_options) @@ -36,6 +35,8 @@ ' --fast-local-dev', extra_options) +def test_ios(out_dir, extra_options): + return run(out_dir + '/iossim ' + out_dir + '/cronet_test.app', extra_options) def debug(extra_options): return run('build/android/adb_gdb --start ' + \ @@ -63,23 +64,41 @@ 'stack', 'debug', 'build-debug']) + parser.add_argument('-i', '--iphoneos', action='store_true', + help='build for physical iphone') parser.add_argument('-r', '--release', action='store_true', help='use release configuration') options, extra_options_list = parser.parse_known_args() print options print extra_options_list - gyp_defines = 'GYP_DEFINES="OS=android enable_websockets=0 '+ \ + + is_os = (sys.platform == 'darwin') + if is_os: + target_os = 'ios' + test_target = 'cronet_test' + out_dir_suffix = '-iphonesimulator' + if options.iphoneos: + out_dir_suffix = '-iphoneos' + else: + target_os = 'android' + test_target = 'cronet_test_instrumentation_apk' + out_dir_suffix = '' + + gyp_defines = 'GYP_DEFINES="OS=' + target_os + ' enable_websockets=0 '+ \ 'disable_file_support=1 disable_ftp_support=1 '+ \ - 'enable_errorprone=1"' - gn_args = 'target_os="android" enable_websockets=false '+ \ + 'enable_errorprone=1 use_platform_icu_alternatives=1 ' + \ + 'disable_brotli_filter=1 use_openssl=1"' + gn_args = 'target_os="' + target_os + '" enable_websockets=false '+ \ 'disable_file_support=true disable_ftp_support=true '+ \ - 'use_errorprone_java_compiler=true' - out_dir = 'out/Debug' + 'use_errorprone_java_compiler=true use_platform_icu_alternatives=true '+ \ + 'disable_brotli_filter=true' + + out_dir = 'out/Debug' + out_dir_suffix release_arg = '' extra_options = ' '.join(extra_options_list) if options.release: - out_dir = 'out/Release' + out_dir = 'out/Release' + out_dir_suffix release_arg = ' --release' gn_args += ' is_debug=false ' @@ -90,22 +109,28 @@ if (options.command=='sync'): return run ('git pull --rebase && ' + gyp_defines + ' gclient sync') if (options.command=='build'): - return build(out_dir, extra_options) - if (options.command=='install'): - return install(release_arg) - if (options.command=='proguard'): - return run ('ninja -C ' + out_dir + ' cronet_sample_proguard_apk') - if (options.command=='test'): - return install(release_arg) or test(release_arg, extra_options) - if (options.command=='build-test'): - return build(out_dir) or install(release_arg) or \ - test(release_arg, extra_options) - if (options.command=='stack'): - return stack(out_dir) - if (options.command=='debug'): - return install(release_arg) or debug(extra_options) - if (options.command=='build-debug'): - return build(out_dir) or install(release_arg) or debug(extra_options) + return build(out_dir, test_target, extra_options) + if (not is_os): + if (options.command=='install'): + return install(release_arg) + if (options.command=='proguard'): + return run ('ninja -C ' + out_dir + ' cronet_sample_proguard_apk') + if (options.command=='test'): + return install(release_arg) or test(release_arg, extra_options) + if (options.command=='build-test'): + return build(out_dir, test_target) or install(release_arg) or \ + test(release_arg, extra_options) + if (options.command=='stack'): + return stack(out_dir) + if (options.command=='debug'): + return install(release_arg) or debug(extra_options) + if (options.command=='build-debug'): + return build(out_dir) or install(release_arg) or debug(extra_options) + else: + if (options.command=='test'): + return test_ios(out_dir, extra_options) + if (options.command=='build-test'): + return build(out_dir, test_target) or test_ios(out_dir, extra_options) parser.print_help() return 1
diff --git a/components/cronet/tools/link_dependencies.py b/components/cronet/tools/link_dependencies.py new file mode 100755 index 0000000..94e612e9 --- /dev/null +++ b/components/cronet/tools/link_dependencies.py
@@ -0,0 +1,157 @@ +#!/usr/bin/env python +# +# Copyright 2014 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. + +"""Links the deps of a binary into a static library. + +Run with a working directory, the name of a binary target, and the name of the +static library that should be produced. For example: + + $ link_dependencies.py out/Release-iphoneos \ + crnet_consumer.app/crnet_consumer \ + out/Release-iphoneos/crnet_standalone.a +""" + +import argparse +import os +import re +import subprocess +import sys + + +class SubprocessError(Exception): + pass + + +def extract_inputs(query_result, prefix=''): + """Extracts inputs from ninja query output. + + Given 'ninja -t query' output for a target, extracts all the inputs of that + target, prefixing them with an optional prefix. Inputs prefixed with '|' are + implicit, so we discard them as they shouldn't be linked into the resulting + binary (these are things like the .ninja files themselves, dep lists, and so + on). + + Example query result: + arch/crnet_consumer.armv7: + input: link + obj/[long path...]/crnet_consumer.crnet_consumer_app_delegate.armv7.o + obj/[long path...]/crnet_consumer.crnet_consumer_view_controller.armv7.o + obj/[long path...]/crnet_consumer.main.armv7.o + libcrnet.a + libdata_reduction_proxy_code_browser.a + ... many more inputs ... + liburl_util.a + | obj/content/content.actions_depends.stamp + | gen/components/data_reduction_proxy/common/version.h + | obj/ui/resources/ui_resources.actions_rules_copies.stamp + ... more implicit inputs ... + outputs: + crnet_consumer.app/crnet_consumer + + Args: + query_result: output from 'ninja -t query' + prefix: optional file system path to prefix to returned inputs + + Returns: + A list of the inputs. + """ + extracting = False + inputs = [] + for line in query_result.splitlines(): + if line.startswith(' input:'): + extracting = True + elif line.startswith(' outputs:'): + extracting = False + elif extracting and '|' not in line: + inputs.append(os.path.join(prefix, line.strip())) + return inputs + + +def query_ninja(target, workdir, prefix=''): + """Returns the inputs for the named target. + + Queries ninja for the set of inputs of the named target, then returns the list + of inputs to that target. + + Args: + target: ninja target name to query for + workdir: workdir for ninja + prefix: optional file system path to prefix to returned inputs + + Returns: + A list of file system paths to the inputs to the named target. + """ + proc = subprocess.Popen(['ninja', '-C', workdir, '-t', 'query', target], + stdout=subprocess.PIPE) + stdout, _ = proc.communicate() + return extract_inputs(stdout, prefix) + + +def is_library(target): + """Returns whether target is a library file.""" + return os.path.splitext(target)[1] in ('.a', '.o') + + +def library_deps(targets, workdir, query=query_ninja): + """Returns the set of library dependencies for the supplied targets. + + The entries in the targets list can be either a static library, an object + file, or an executable. Static libraries and object files are incorporated + directly; executables are treated as being thin executable inputs to a fat + executable link step, and have their own library dependencies added in their + place. + + Args: + targets: list of targets to include library dependencies from + workdir: working directory to run ninja queries in + query: function taking target, workdir, and prefix and returning an input + set + Returns: + Set of library dependencies. + """ + deps = set() + for target in targets: + if is_library(target): + deps.add(os.path.join(workdir, target)) + else: + deps = deps.union(query(target, workdir, workdir)) + return deps + + +def link(output, inputs): + """Links output from inputs using libtool. + + Args: + output: file system path to desired output library + inputs: list of file system paths to input libraries + """ + libtool_re = re.compile(r'^.*libtool: (?:for architecture: \S* )?' + r'file: .* has no symbols$') + p = subprocess.Popen( + ['libtool', '-o', output] + inputs, stderr=subprocess.PIPE) + _, err = p.communicate() + for line in err.splitlines(): + if not libtool_re.match(line): + print >>sys.stderr, line + if p.returncode != 0: + message = "subprocess libtool returned {0}".format(p.returncode) + raise SubprocessError(message) + + +def main(): + parser = argparse.ArgumentParser( + description='Link dependencies of a ninja target into a static library') + parser.add_argument('workdir', nargs=1, help='ninja working directory') + parser.add_argument('target', nargs=1, help='target to query for deps') + parser.add_argument('output', nargs=1, help='path to output static library') + args = parser.parse_args() + + inputs = query_ninja(args.target[0], args.workdir[0]) + link(args.output[0], list(library_deps(inputs, args.workdir[0]))) + + +if __name__ == '__main__': + main()
diff --git a/components/cronet/tools/package_ios.py b/components/cronet/tools/package_ios.py new file mode 100755 index 0000000..5ac62e3 --- /dev/null +++ b/components/cronet/tools/package_ios.py
@@ -0,0 +1,81 @@ +#!/usr/bin/python +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +package_ios.py - Build and Package Release and Rebug fat libraries for iOS. +""" + +import argparse +import os +import shutil +import sys + +def run(command, extra_options=''): + command = command + ' ' + extra_options + print command + return os.system(command) + + +def build(out_dir, test_target, extra_options=''): + return run('ninja -C ' + out_dir + ' ' + test_target, + extra_options) + + +def lipo_libraries(out_dir, input_dirs, out_lib, input_lib): + lipo = "lipo -create " + for input_dir in input_dirs: + lipo += input_dir + "/" + input_lib + " " + lipo += '-output ' + out_dir + "/" + out_lib + return run(lipo) + + +def copy_build_dir(target_dir, build_dir): + try: + shutil.copytree(build_dir, target_dir, ignore=shutil.ignore_patterns('*.a')) + except OSError as e: + print('Directory not copied. Error: %s' % e) + return 0 + +def package_ios(out_dir, build_dir, build_config): + build_dir_sim = build_dir + build_dir_dev = build_dir +'-iphoneos' + build_target = 'cronet_package' + target_dir = out_dir + "/Cronet" + return build(build_dir_sim, build_target) or \ + build(build_dir_dev, build_target) or \ + copy_build_dir(target_dir, build_dir_dev + "/cronet") or \ + lipo_libraries(target_dir, [build_dir_sim, build_dir_dev], \ + "libcronet_" + build_config + ".a", \ + "cronet/libcronet_standalone.a") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('out_dir', nargs=1, help='path to output directory') + parser.add_argument('-g', '--skip_gyp', action='store_true', + help='skip gyp') + parser.add_argument('-d', '--debug', action='store_true', + help='use release configuration') + parser.add_argument('-r', '--release', action='store_true', + help='use release configuration') + + options, extra_options_list = parser.parse_known_args() + print options + print extra_options_list + + gyp_defines = 'GYP_DEFINES="OS=ios enable_websockets=0 '+ \ + 'disable_file_support=1 disable_ftp_support=1 '+ \ + 'enable_errorprone=1 use_platform_icu_alternatives=1 ' + \ + 'disable_brotli_filter=1 use_openssl=1 ' + \ + 'target_subarch=both"' + if not options.skip_gyp: + run (gyp_defines + ' gclient runhooks') + + return package_ios(options.out_dir[0], "out/Release", "opt") or \ + package_ios(options.out_dir[0], "out/Debug", "dbg") + + +if __name__ == '__main__': + sys.exit(main())
diff --git a/components/data_reduction_proxy.gypi b/components/data_reduction_proxy.gypi index 3e14e7ea..376d0f81 100644 --- a/components/data_reduction_proxy.gypi +++ b/components/data_reduction_proxy.gypi
@@ -91,9 +91,9 @@ 'type': 'static_library', 'dependencies': [ '<@(data_reduction_proxy_core_browser_deps)', - '../net/net.gyp:net_small', - '../url/url.gyp:url_lib_use_icu_alternatives_on_android', - 'data_reduction_proxy_core_common_small', + '../net/net.gyp:net', + '../url/url.gyp:url_lib', + 'data_reduction_proxy_core_common', 'data_reduction_proxy_proto', ], 'include_dirs': [ @@ -103,22 +103,6 @@ '<@(data_reduction_proxy_core_browser_sources)' ], }, - { - # GN version: //components/data_reduction_proxy/core/common:common_small - 'target_name': 'data_reduction_proxy_core_common_small', - 'type': 'static_library', - 'dependencies': [ - '../base/base.gyp:base', - '../url/url.gyp:url_lib_use_icu_alternatives_on_android', - 'data_reduction_proxy_proto', - ], - 'include_dirs': [ - '..', - ], - 'sources': [ - '<@(data_reduction_proxy_core_common_sources)' - ], - }, ], }], ['OS!="ios"', {
diff --git a/components/data_reduction_proxy/core/browser/BUILD.gn b/components/data_reduction_proxy/core/browser/BUILD.gn index 2f5dcce3..3e9ea6b8 100644 --- a/components/data_reduction_proxy/core/browser/BUILD.gn +++ b/components/data_reduction_proxy/core/browser/BUILD.gn
@@ -52,15 +52,15 @@ deps = [ "//base", - "//components/data_reduction_proxy/core/common:common_small", + "//components/data_reduction_proxy/core/common", "//components/data_reduction_proxy/proto:data_reduction_proxy_proto", "//components/pref_registry", "//components/prefs", "//components/variations", "//crypto", - "//google_apis:google_apis_small", - "//net:net_small", - "//url:url_lib_use_icu_alternatives_on_android", + "//google_apis", + "//net:net", + "//url:url", ] } }
diff --git a/components/data_reduction_proxy/core/common/BUILD.gn b/components/data_reduction_proxy/core/common/BUILD.gn index 0d1935d..d48c8e6 100644 --- a/components/data_reduction_proxy/core/common/BUILD.gn +++ b/components/data_reduction_proxy/core/common/BUILD.gn
@@ -46,15 +46,6 @@ } } -if (is_android) { - common_tmpl("common_small") { - deps = [ - "//net:net_small", - "//url:url_lib_use_icu_alternatives_on_android", - ] - } -} - common_tmpl("common") { deps = [ "//net",
diff --git a/components/metrics.gypi b/components/metrics.gypi index 959f052..185ee54e 100644 --- a/components/metrics.gypi +++ b/components/metrics.gypi
@@ -252,6 +252,7 @@ 'type': 'static_library', 'dependencies': [ '../base/base.gyp:base', + 'component_metrics_proto', ], 'sources': [ 'metrics/leak_detector/call_stack_manager.cc',
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index 224070db..9a2d89b 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn
@@ -142,6 +142,7 @@ deps = [ "//base", + "//components/metrics/proto:proto", "//content/public/browser", ] } @@ -302,6 +303,7 @@ deps = [ ":leak_detector", "//base", + "//components/metrics/proto:proto", "//content/test:test_support", "//testing/gtest", ]
diff --git a/components/metrics/leak_detector/leak_detector.cc b/components/metrics/leak_detector/leak_detector.cc index a7151a8..45fb32e 100644 --- a/components/metrics/leak_detector/leak_detector.cc +++ b/components/metrics/leak_detector/leak_detector.cc
@@ -6,6 +6,8 @@ #include <stdint.h> +#include <algorithm> + #include "base/allocator/allocator_extension.h" #include "base/bind.h" #include "base/lazy_instance.h" @@ -24,7 +26,6 @@ namespace metrics { -using LeakReport = LeakDetector::LeakReport; using InternalLeakReport = leak_detector::LeakDetectorImpl::LeakReport; template <typename T> using InternalVector = leak_detector::LeakDetectorImpl::InternalVector<T>; @@ -100,25 +101,26 @@ return reinterpret_cast<uint64_t>(ptr) * kMultiplier; } -// Converts a vector of leak reports generated by LeakDetectorImpl -// (InternalLeakReport) to a vector of leak reports suitable for sending to -// LeakDetector's observers (LeakReport). -void GetReportsForObservers( - const InternalVector<InternalLeakReport>& leak_reports, - std::vector<LeakReport>* reports_for_observers) { - reports_for_observers->clear(); - reports_for_observers->reserve(leak_reports.size()); - for (const InternalLeakReport& report : leak_reports) { - reports_for_observers->push_back(LeakReport()); - LeakReport* new_report = &reports_for_observers->back(); +// Converts an memory leak report generated by LeakDetectorImpl +// (InternalLeakReport) to protobuf format (MemoryLeakReportProto). +MemoryLeakReportProto ConvertLeakReportToProto( + const InternalLeakReport& report) { + MemoryLeakReportProto proto; - new_report->alloc_size_bytes = report.alloc_size_bytes(); - if (!report.call_stack().empty()) { - new_report->call_stack.resize(report.call_stack().size()); - memcpy(new_report->call_stack.data(), report.call_stack().data(), - report.call_stack().size() * sizeof(report.call_stack()[0])); - } + proto.set_size_bytes(report.alloc_size_bytes()); + for (auto call_stack_entry : report.call_stack()) { + proto.add_call_stack(call_stack_entry); } + + for (const auto& entry : report.alloc_breakdown_history()) { + auto* proto_entry = proto.add_alloc_breakdown_history(); + for (const uint32_t count : entry.counts_by_size) { + proto_entry->add_counts_by_size(count); + } + proto_entry->set_count_for_call_stack(entry.count_for_call_stack); + } + + return proto; } // The only instance of LeakDetector that should be used. @@ -153,12 +155,6 @@ } // namespace -LeakDetector::LeakReport::LeakReport() {} - -LeakDetector::LeakReport::LeakReport(const LeakReport& other) = default; - -LeakDetector::LeakReport::~LeakReport() {} - // static LeakDetector* LeakDetector::GetInstance() { return g_instance.Pointer(); @@ -274,9 +270,10 @@ detector->impl_->TestForLeaks(&leak_reports); // Pass leak reports to observers. - std::vector<LeakReport> leak_reports_for_observers; - GetReportsForObservers(leak_reports, &leak_reports_for_observers); - detector->NotifyObservers(leak_reports_for_observers); + std::vector<MemoryLeakReportProto> leak_report_protos; + std::transform(leak_reports.begin(), leak_reports.end(), + leak_report_protos.begin(), &ConvertLeakReportToProto); + detector->NotifyObservers(leak_report_protos); } } @@ -319,7 +316,8 @@ return PointerToHash(ptr) < sampling_factor_; } -void LeakDetector::NotifyObservers(const std::vector<LeakReport>& reports) { +void LeakDetector::NotifyObservers( + const std::vector<MemoryLeakReportProto>& reports) { if (reports.empty()) return; @@ -331,9 +329,9 @@ return; } - for (const LeakReport& report : reports) { + { base::AutoLock lock(observers_lock_); - FOR_EACH_OBSERVER(Observer, observers_, OnLeakFound(report)); + FOR_EACH_OBSERVER(Observer, observers_, OnLeaksFound(reports)); } }
diff --git a/components/metrics/leak_detector/leak_detector.h b/components/metrics/leak_detector/leak_detector.h index 8dcba5e..bdba586 100644 --- a/components/metrics/leak_detector/leak_detector.h +++ b/components/metrics/leak_detector/leak_detector.h
@@ -18,6 +18,7 @@ #include "base/observer_list.h" #include "base/synchronization/lock.h" #include "base/threading/thread_checker.h" +#include "components/metrics/proto/memory_leak_report.pb.h" namespace base { template <typename T> @@ -48,26 +49,14 @@ // enforced with a DCHECK. class LeakDetector { public: - // Contains a report of a detected memory leak. - struct LeakReport { - LeakReport(); - LeakReport(const LeakReport& other); - ~LeakReport(); - - size_t alloc_size_bytes; - - // Unlike the CallStack struct, which consists of addresses, this call stack - // will contain offsets in the executable binary. - std::vector<uintptr_t> call_stack; - }; - // Interface for receiving leak reports. class Observer { public: virtual ~Observer() {} - // Called by leak detector to report a leak. - virtual void OnLeakFound(const LeakReport& report) = 0; + // Called by leak detector to report leaks. + virtual void OnLeaksFound( + const std::vector<MemoryLeakReportProto>& reports) = 0; }; // Returns the sole instance, or creates it if it hasn't already been created. @@ -126,8 +115,8 @@ bool ShouldSample(const void* ptr) const; // Notifies all Observers in |observers_| with the given vector of leak - // reports. - void NotifyObservers(const std::vector<LeakReport>& reports); + // report protobufs. + void NotifyObservers(const std::vector<MemoryLeakReportProto>& reports); // List of observers to notify when there's a leak report. // TODO(sque): Consider using ObserverListThreadSafe instead.
diff --git a/components/metrics/leak_detector/leak_detector_unittest.cc b/components/metrics/leak_detector/leak_detector_unittest.cc index 6f33c01..08c3024 100644 --- a/components/metrics/leak_detector/leak_detector_unittest.cc +++ b/components/metrics/leak_detector/leak_detector_unittest.cc
@@ -4,6 +4,7 @@ #include "components/metrics/leak_detector/leak_detector.h" +#include <algorithm> #include <set> #include "base/allocator/allocator_extension.h" @@ -23,34 +24,40 @@ const uint32_t kDefaultSizeSuspicionThreshold = 4; const uint32_t kDefaultCallStackSuspicionThreshold = 4; -using LeakReport = LeakDetector::LeakReport; - // Observer class that receives leak reports and stores them in |reports_|. // Only one copy of each unique report will be stored. class TestObserver : public LeakDetector::Observer { public: - // Contains a comparator function used to compare LeakReports for uniqueness. + // Contains a comparator function used to compare MemoryLeakReportProtos for + // uniqueness. struct Comparator { - bool operator()(const LeakReport& a, const LeakReport& b) const { - if (a.alloc_size_bytes != b.alloc_size_bytes) - return a.alloc_size_bytes < b.alloc_size_bytes; + bool operator()(const MemoryLeakReportProto& a, + const MemoryLeakReportProto& b) const { + if (a.size_bytes() != b.size_bytes()) + return a.size_bytes() < b.size_bytes(); - return a.call_stack < b.call_stack; + return std::lexicographical_compare(a.call_stack().begin(), + a.call_stack().end(), + b.call_stack().begin(), + b.call_stack().end()); } }; TestObserver() {} - void OnLeakFound(const LeakReport& report) override { - reports_.insert(report); + void OnLeaksFound( + const std::vector<MemoryLeakReportProto>& reports) override { + reports_.insert(reports.begin(), reports.end()); } - const std::set<LeakReport, Comparator>& reports() const { return reports_; } + const std::set<MemoryLeakReportProto, Comparator>& reports() const { + return reports_; + } private: - // Container for all leak reports received through OnLeakFound(). Stores only + // Container for all leak reports received through OnLeaksFound(). Stores only // one copy of each unique report. - std::set<LeakReport, Comparator> reports_; + std::set<MemoryLeakReportProto, Comparator> reports_; DISALLOW_COPY_AND_ASSIGN(TestObserver); }; @@ -79,21 +86,33 @@ TEST_F(LeakDetectorTest, NotifyObservers) { // Generate two sets of leak reports. - std::vector<LeakReport> reports1(3); - reports1[0].alloc_size_bytes = 8; - reports1[0].call_stack = {1, 2, 3, 4}; - reports1[1].alloc_size_bytes = 16; - reports1[1].call_stack = {5, 6, 7, 8}; - reports1[2].alloc_size_bytes = 24; - reports1[2].call_stack = {9, 10, 11, 12}; + std::vector<MemoryLeakReportProto> reports1(3); + reports1[0].set_size_bytes(8); + for (uint64_t entry : {1, 2, 3, 4}) { + reports1[0].add_call_stack(entry); + } + reports1[1].set_size_bytes(16); + for (uint64_t entry : {5, 6, 7, 8}) { + reports1[1].add_call_stack(entry); + } + reports1[2].set_size_bytes(24); + for (uint64_t entry : {9, 10, 11, 12}) { + reports1[1].add_call_stack(entry); + } - std::vector<LeakReport> reports2(3); - reports2[0].alloc_size_bytes = 32; - reports2[0].call_stack = {1, 2, 4, 8}; - reports2[1].alloc_size_bytes = 40; - reports2[1].call_stack = {16, 32, 64, 128}; - reports2[2].alloc_size_bytes = 48; - reports2[2].call_stack = {256, 512, 1024, 2048}; + std::vector<MemoryLeakReportProto> reports2(3); + reports2[0].set_size_bytes(32); + for (uint64_t entry : {1, 2, 4, 8}) { + reports2[0].add_call_stack(entry); + } + reports2[1].set_size_bytes(40); + for (uint64_t entry : {16, 32, 64, 128}) { + reports2[1].add_call_stack(entry); + } + reports2[2].set_size_bytes(48); + for (uint64_t entry : {256, 512, 1024, 2048}) { + reports2[2].add_call_stack(entry); + } // Register three observers; TestObserver obs1, obs2, obs3;
diff --git a/components/mus/ws/event_dispatcher.cc b/components/mus/ws/event_dispatcher.cc index 98e09b71..7dce130a 100644 --- a/components/mus/ws/event_dispatcher.cc +++ b/components/mus/ws/event_dispatcher.cc
@@ -53,6 +53,16 @@ return true; } +uint32_t PointerId(const ui::LocatedEvent& event) { + if (event.IsPointerEvent()) + return event.AsPointerEvent()->pointer_id(); + if (event.IsMouseWheelEvent()) + return ui::PointerEvent::kMousePointerId; + + NOTREACHED(); + return 0; +} + } // namespace //////////////////////////////////////////////////////////////////////////////// @@ -203,8 +213,8 @@ return; } - if (event.IsPointerEvent()) { - ProcessPointerEvent(*event.AsPointerEvent()); + if (event.IsPointerEvent() || event.IsMouseWheelEvent()) { + ProcessLocatedEvent(*event.AsLocatedEvent()); return; } @@ -224,8 +234,10 @@ } } -void EventDispatcher::ProcessPointerEvent(const ui::PointerEvent& event) { - const bool is_mouse_event = event.IsMousePointerEvent(); +void EventDispatcher::ProcessLocatedEvent(const ui::LocatedEvent& event) { + DCHECK(event.IsPointerEvent() || event.IsMouseWheelEvent()); + const bool is_mouse_event = + event.IsMousePointerEvent() || event.IsMouseWheelEvent(); if (is_mouse_event) mouse_pointer_last_location_ = event.location(); @@ -254,11 +266,11 @@ return; } - const int32_t pointer_id = event.pointer_id(); + const int32_t pointer_id = PointerId(event); if (!IsTrackingPointer(pointer_id) || !pointer_targets_[pointer_id].is_pointer_down) { const bool any_pointers_down = AreAnyPointersDown(); - UpdateTargetForPointer(event); + UpdateTargetForPointer(pointer_id, event); if (is_mouse_event) mouse_cursor_source_window_ = pointer_targets_[pointer_id].window; @@ -310,8 +322,8 @@ window->RemoveObserver(this); } -void EventDispatcher::UpdateTargetForPointer(const ui::PointerEvent& event) { - const int32_t pointer_id = event.pointer_id(); +void EventDispatcher::UpdateTargetForPointer(int32_t pointer_id, + const ui::LocatedEvent& event) { if (!IsTrackingPointer(pointer_id)) { StartTrackingPointer(pointer_id, PointerTargetForEvent(event)); return; @@ -322,7 +334,7 @@ pointer_target.in_nonclient_area == pointer_targets_[pointer_id].in_nonclient_area) { // The targets are the same, only set the down state to true if necessary. - // Down going to up is handled by ProcessPointerEvent(). + // Down going to up is handled by ProcessLocatedEvent(). if (pointer_target.is_pointer_down) pointer_targets_[pointer_id].is_pointer_down = true; return; @@ -344,7 +356,7 @@ } EventDispatcher::PointerTarget EventDispatcher::PointerTargetForEvent( - const ui::PointerEvent& event) const { + const ui::LocatedEvent& event) const { PointerTarget pointer_target; gfx::Point location(event.location()); ServerWindow* target_window = @@ -367,7 +379,7 @@ } void EventDispatcher::DispatchToPointerTarget(const PointerTarget& target, - const ui::PointerEvent& event) { + const ui::LocatedEvent& event) { if (!target.window) return; @@ -375,7 +387,7 @@ gfx::Transform transform(GetTransformToWindow(surface_id_, target.window)); transform.TransformPoint(&location); scoped_ptr<ui::Event> clone = ui::Event::Clone(event); - clone->AsPointerEvent()->set_location(location); + clone->AsLocatedEvent()->set_location(location); // TODO(jonross): add post-target accelerator support once accelerators // support pointer events. delegate_->DispatchInputEventToWindow(target.window, target.in_nonclient_area,
diff --git a/components/mus/ws/event_dispatcher.h b/components/mus/ws/event_dispatcher.h index 0a89e66c..81bf4a09 100644 --- a/components/mus/ws/event_dispatcher.h +++ b/components/mus/ws/event_dispatcher.h
@@ -20,7 +20,6 @@ class Event; class KeyEvent; class LocatedEvent; -class PointerEvent; } namespace mus { @@ -119,7 +118,7 @@ // when no buttons on the mouse are down. // This also generates exit events as appropriate. For example, if the mouse // moves between one window to another an exit is generated on the first. - void ProcessPointerEvent(const ui::PointerEvent& event); + void ProcessLocatedEvent(const ui::LocatedEvent& event); // Adds |pointer_target| to |pointer_targets_|. void StartTrackingPointer(int32_t pointer_id, @@ -131,17 +130,18 @@ // Starts tracking the pointer for |event|, or if already tracking the // pointer sends the appropriate event to the delegate and updates the // currently tracked PointerTarget appropriately. - void UpdateTargetForPointer(const ui::PointerEvent& event); + void UpdateTargetForPointer(int32_t pointer_id, + const ui::LocatedEvent& event); - // Returns a PointerTarget from the supplied Event. - PointerTarget PointerTargetForEvent(const ui::PointerEvent& event) const; + // Returns a PointerTarget from the supplied event. + PointerTarget PointerTargetForEvent(const ui::LocatedEvent& event) const; // Returns true if any pointers are in the pressed/down state. bool AreAnyPointersDown() const; // If |target->window| is valid, then passes the event to the delegate. void DispatchToPointerTarget(const PointerTarget& target, - const ui::PointerEvent& event); + const ui::LocatedEvent& event); // Stops sending pointer events to |window|. This does not remove the entry // for |window| from |pointer_targets_|, rather it nulls out the window. This
diff --git a/components/mus/ws/event_dispatcher_unittest.cc b/components/mus/ws/event_dispatcher_unittest.cc index 199629e..ae4f417 100644 --- a/components/mus/ws/event_dispatcher_unittest.cc +++ b/components/mus/ws/event_dispatcher_unittest.cc
@@ -138,12 +138,10 @@ ASSERT_EQ(target, details->window); ASSERT_TRUE(details->event); - ASSERT_TRUE(details->event->IsPointerEvent()); + ASSERT_TRUE(details->event->IsLocatedEvent()); ASSERT_FALSE(details->in_nonclient_area); - ui::MouseEvent* dispatched_mouse_event = - static_cast<ui::MouseEvent*>(details->event.get()); - ASSERT_EQ(root_location, dispatched_mouse_event->root_location()); - ASSERT_EQ(location, dispatched_mouse_event->location()); + ASSERT_EQ(root_location, details->event->AsLocatedEvent()->root_location()); + ASSERT_EQ(location, details->event->AsLocatedEvent()->location()); } void RunMouseEventTests(EventDispatcher* dispatcher, @@ -154,7 +152,10 @@ const MouseEventTest& test = tests[i]; ASSERT_FALSE(dispatcher_delegate->has_queued_events()) << " unexpected queued events before running " << i; - dispatcher->ProcessEvent(ui::PointerEvent(test.input_event)); + if (test.input_event.IsMouseWheelEvent()) + dispatcher->ProcessEvent(test.input_event); + else + dispatcher->ProcessEvent(ui::PointerEvent(test.input_event)); scoped_ptr<DispatchedEventDetails> details = dispatcher_delegate->GetAndAdvanceDispatchedEventDetails(); @@ -769,9 +770,7 @@ EXPECT_EQ(gfx::Point(-2, -1), details->event->AsPointerEvent()->location()); } -// TODO(moshayedi): crbug.com/590226. Enable this after we support wheel events -// in mus event dispatcher. -TEST_F(EventDispatcherTest, DISABLED_WheelWhileDown) { +TEST_F(EventDispatcherTest, WheelWhileDown) { scoped_ptr<ServerWindow> child1 = CreateChildWindow(WindowId(1, 3)); scoped_ptr<ServerWindow> child2 = CreateChildWindow(WindowId(1, 4));
diff --git a/components/mus/ws/platform_display.cc b/components/mus/ws/platform_display.cc index 0f0fab4..cc0b748 100644 --- a/components/mus/ws/platform_display.cc +++ b/components/mus/ws/platform_display.cc
@@ -358,12 +358,7 @@ } void DefaultPlatformDisplay::DispatchEvent(ui::Event* event) { - // TODO(moshayedi): crbug.com/590226. Enable this after we support wheel - // events in mus event dispatcher. - if (event->IsMouseWheelEvent()) - return; - - if (event->IsMouseEvent()) { + if (event->IsMouseEvent() && !event->IsMouseWheelEvent()) { delegate_->OnEvent(ui::PointerEvent(*event->AsMouseEvent())); } else if (event->IsTouchEvent()) { delegate_->OnEvent(ui::PointerEvent(*event->AsTouchEvent()));
diff --git a/components/nacl/loader/nacl_ipc_adapter.cc b/components/nacl/loader/nacl_ipc_adapter.cc index 42e8b5f..2613168 100644 --- a/components/nacl/loader/nacl_ipc_adapter.cc +++ b/components/nacl/loader/nacl_ipc_adapter.cc
@@ -233,9 +233,13 @@ const base::SharedMemoryHandle& handle, size_t size) { #if defined(OS_MACOSX) - return scoped_ptr<NaClDescWrapper>(new NaClDescWrapper( - NaClDescImcShmMachMake(handle.GetMemoryObject(), size))); -#else + if (handle.GetType() == base::SharedMemoryHandle::MACH) { + return scoped_ptr<NaClDescWrapper>(new NaClDescWrapper( + NaClDescImcShmMachMake(handle.GetMemoryObject(), size))); + } + CHECK_EQ(base::SharedMemoryHandle::POSIX, handle.GetType()); +#endif + return scoped_ptr<NaClDescWrapper>(new NaClDescWrapper(NaClDescImcShmMake( #if defined(OS_WIN) handle.GetHandle(), @@ -243,7 +247,6 @@ base::SharedMemory::GetFdFromSharedMemoryHandle(handle), #endif size))); -#endif } } // namespace
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb index 0bc60d6..415e2c4 100644 --- a/components/policy/resources/policy_templates_bg.xtb +++ b/components/policy/resources/policy_templates_bg.xtb
@@ -78,6 +78,7 @@ <translation id="1359553908012294236">Ако за това правило е зададено true или то не е конфигурирано, функцията за влизане като гост ще е активирана в <ph name="PRODUCT_NAME" />. Сърфирането като гост се извършва в потребителски профили в <ph name="PRODUCT_NAME" />, в които всички прозорци се отварят в режим „инкогнито“. При false използването на функцията няма да е разрешено в <ph name="PRODUCT_NAME" />.</translation> +<translation id="1363275621236827384">Активиране на изпращането на заявки за хардуерни профили към Quirks Server</translation> <translation id="1397855852561539316">URL адрес за предложения от търсещата машина по подразбиране</translation> <translation id="1398889361882383850">Позволява да зададете дали на уебсайтовете е разрешено да изпълняват автоматично приставки. Тази опция може да бъде или разрешена, или отказана за всички сайтове. @@ -671,6 +672,13 @@ Стойността на правилото трябва да се посочи в милисекунди и ще бъде променена към обхвата от 30 секунди до 24 часа.</translation> <translation id="3528000905991875314">Активиране на алтернативните страници за грешки</translation> +<translation id="3538538104630456270">Свързаната настройка се използваше преди въвеждането на функцията за повторно удостоверяване при преглед на паролите. Оттогава настройката и това правило не оказват влияние върху поведението на Chrome. Сега то е същото, както ако чрез правилото е зададено паролите да не се показват като нешифрован текст на страницата с настройки за диспечера на паролите. Това означава, че на нея ще се виждат единствено заместващи знаци и Chrome ще показва паролите само ако потребителят кликне върху „Показване“ (и извърши повторно удостоверяване, ако е приложимо). Следва оригиналното описание на правилото. + +Контролира дали паролите може да се показват като нешифрован текст в диспечера на паролите. + +Ако деактивирате настройката, диспечерът няма да разрешава съхраняваните пароли да се извеждат по този начин в прозореца му. + +В случай че активирате правилото или не го зададете, потребителите ще могат да виждат паролите си като нешифрован текст в диспечера на паролите.</translation> <translation id="3547954654003013442">Настройки за прокси сървър</translation> <translation id="3570008976476035109">Блокиране на приставките на тези сайтове</translation> <translation id="3591584750136265240">Конфигуриране на поведението при удостоверяване на данните за вход</translation> @@ -1579,6 +1587,7 @@ В случай че то е оставено незададено, списъкът с фиксирани приложения може да се променя в стартовия панел.</translation> <translation id="7132877481099023201">URL адреси, на които без подкана ще се предоставя достъп до устройствата за заснемане на видео</translation> +<translation id="7167436895080860385">Разрешаване на потребителите да показват пароли в диспечера на паролите (оттеглено)</translation> <translation id="7173856672248996428">Преходен потребителски профил</translation> <translation id="7187256234726597551">Ако е true, за устройството е разрешено отдалечено удостоверяване и автоматично ще се генерира сертификат, който ще се качи в сървъра за управление на устройства. @@ -1882,6 +1891,7 @@ <translation id="8197918588508433925">Това правило посочва разширенията, на които е разрешено да използват за отдалечено удостоверяване списъка chrome.enterprise.platformKeysPrivate.challengeUserKey() на приложния програмен интерфейс (API) за ключове за корпоративната платформа. За да ползват API, разширенията трябва да бъдат добавени към този списък. Ако някое не е в него или списъкът не е зададен, извикването към API няма да е успешно и ще се изведе код на грешка.</translation> +<translation id="8214600119442850823">Конфигурира диспечера на паролите.</translation> <translation id="8244525275280476362">Максимално забавяне преди извличане след анулиране на правило</translation> <translation id="8256688113167012935">Контролира името, което <ph name="PRODUCT_OS_NAME" /> показва на екрана за вход за съответния локален за устройството профил. @@ -2061,6 +2071,17 @@ <translation id="8858642179038618439">Принудително активиране на безопасния режим в YouTube</translation> <translation id="8864975621965365890">Потиска подканата за отхвърляне, която се показва при изобразяване на сайт от <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Начална страница</translation> +<translation id="8889588091638298603">Quirks Server предоставя конкретни за хардуера конфигурационни файлове, например +ICC профили за дисплея, с цел калибриране на монитора. + +Когато това правило е false, устройството няма да опитва да се +свързва с Quirks Server, за да изтегля конфигурационни файлове. + +В случай че правилото е true или не е зададено, +<ph name="PRODUCT_OS_NAME" /> автоматично +ще се свързва с Quirks Server, ще изтегля съответните файлове, +ако са налице, и ще ги съхранява на устройството. Например те може +да се използват за подобряване на качеството на образа на свързани монитори.</translation> <translation id="8905426178924715309">Правилото е оттеглено. Моля, вместо него използвайте ForceGoogleSafeSearch и ForceYouTubeSafetyMode. Ако зададете една от тези настройки, правилото ще бъде пренебрегнато. Налага заявките в Google Търсене в мрежата да се извършват с активирано Безопасно търсене и не разрешава на потребителите да променят тази настройка. Също така налага използването на безопасния режим в YouTube.
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb index 3d4feff1..bfe51ef 100644 --- a/components/policy/resources/policy_templates_bn.xtb +++ b/components/policy/resources/policy_templates_bn.xtb
@@ -96,6 +96,7 @@ <translation id="1359553908012294236">এই নীতিটি সত্যতে সেট থাকলে বা কনফিগার করা না থাকলে, <ph name="PRODUCT_NAME" /> অতিথি লগইন সক্ষম করবে। অতিথি লগইন হলো <ph name="PRODUCT_NAME" /> প্রোফাইল যেখানে সব উইন্ডোগুলি ছদ্মবেশী মোডে থাকে। এই নীতিটি মিথ্যাতে সেট করা থাকলে, <ph name="PRODUCT_NAME" /> অতিথি প্রোফাইলগুলিকে শুরু করার মঞ্জুরি দেয় না।</translation> +<translation id="1363275621236827384">হার্ডওয়্যার প্রোফাইলের জন্য Quirks সার্ভারে প্রশ্ন পাঠানো সক্ষম করে</translation> <translation id="1397855852561539316">ডিফল্ট অনুসন্ধান সরবরাহকারী প্রস্তাবিত URL</translation> <translation id="1398889361882383850">ওয়েবসাইটগুলিকে স্বয়ংক্রিয়ভাবে প্ল্যাগইন চালাতে দেওয়াও মঞ্জুরি দেওয়া হবে কি না আপনাকে তা সেট করার মঞ্জুরি দেয়৷ স্বয়ংক্রিয়ভাবে প্ল্যাগইন চালানো সমস্ত ওয়েবসাইটের জন্য মঞ্জুরিপ্রাপ্ত বা অস্বীকার করা যেতে পারে৷ @@ -728,6 +729,14 @@ নীতি মানটি মিলিসেকেন্ডে নির্দিষ্ট করা উচিত৷ মানের রেঞ্জ হল ৩০ সেকেন্ড থেকে ২৪ ঘণ্টা।</translation> <translation id="3528000905991875314">বিকল্প ত্রুটি পৃষ্ঠাগুলি সক্ষম করুন</translation> +<translation id="3538538104630456270">পাসওয়ার্ড দেখার জন্য পুনঃপ্রমাণীকরণ চালু করার পূর্বে সম্পর্কিত সেটিংটি ব্যবহার করা হয়েছিল। তখন থেকে, সেটিংটির এবং সেহেতু এই নীতিটির Chrome এর আচরণের উপর কোনো প্রভাব ছিল না। Chrome এর বর্তমান আচরণ এমন +যেনবা নীতিটি পাসওয়ার্ড পরিচালকের সেটিংস পৃষ্ঠায় স্পষ্ট পাঠ্য হিসাবে পাসওয়ার্ড দেখানো অক্ষম করতে সেট করা রয়েছে। সেটিংস পৃষ্ঠায় শুধুমাত্র একটি স্থানধারক রয়েছে, এবং শুধুমাত্র ব্যবহারকারী যদি "দেখান" ক্লিক করেন (এবং প্রযোজ্য ক্ষেত্রে পুনঃপ্রমাণীকরণ করেন) তাহলে Chrome পাসওয়ার্ড দেখায়। নীতিটির মূল বিবরণ নিচে দেখতে পাবেন। + + ব্যবহারকারী পাসওয়ার্ড পরিচালকে স্পষ্ট পাঠ্য হিসাবে পাসওয়ার্ড দেখতে পারবেন কিনা তার নিয়ন্ত্রণ করে। + + আপনি এই সেটিংটি অক্ষম করলে, পাসওয়ার্ড পরিচালক পাসওয়ার্ড পরিচালক উইন্ডোতে স্পষ্ট পাঠ্য হিসাবে সঞ্চিত পাসওয়ার্ডগুলি প্রদর্শনের মঞ্জুরি দেয় না। + + আপনি এই নীতিটি সক্ষম না করলে বা সেট না করলে, ব্যবহারকারিরা পাসওয়ার্ড পরিচালকে স্পষ্ট পাঠ্য হিসাবে তাদের পাসওয়ার্ড দেখতে পারেন।</translation> <translation id="3547954654003013442">প্রক্সি সেটিংস</translation> <translation id="3570008976476035109">এই সাইটগুলিতে প্ল্যাগইন অবরোধ করুন</translation> <translation id="3591584750136265240">লগইন প্রমাণীকরণ আচরণ কনফিগার করে</translation> @@ -1712,6 +1721,7 @@ যদি এই নীতি আনসেট করা হয়, ব্যবহারকারী লঞ্চার বারে পিন করা অ্যাপ্লিকেশনের তালিকায় পরিবর্তন করতে পারেন৷</translation> <translation id="7132877481099023201">এই URLগুলিকে বিজ্ঞপ্তি ছাড়াই ভিডিও ক্যাপচার ডিভাইসগুলিতে অ্যাক্সেস দেওয়া হবে</translation> +<translation id="7167436895080860385">পাসওয়ার্ড পরিচালকে পাসওয়ার্ড দেখানোর জন্য ব্যবহারকারীদের মঞ্জুরি দেয় (থামানো রয়েছে)</translation> <translation id="7173856672248996428">অল্পক্ষণস্থায়ী প্রোফাইল</translation> <translation id="7187256234726597551">যদি সত্য হয়, তাহলে ডিভাইসটির জন্য দূরবর্তী প্রত্যয়ন অনুমোদিত হবে এবং একটি শংসাপত্র স্বয়ংক্রিয়ভাবে তৈরি এবং ডিভাইস পরিচালনার সার্ভারে আপলোড হবে৷ @@ -2032,6 +2042,7 @@ <translation id="8197918588508433925">এই নীতিটি রিমোট প্রত্যয়িতের জন্য এন্টারপ্রাইজ প্ল্যাটফর্ম কীগুলির API chrome.enterprise.platformKeysPrivate.challengeUserKey() ব্যবহার করতে মঞ্জুরি প্রাপ্ত এক্সটেনশানগুলি নির্দিষ্ট করে৷ API ব্যবহার করতে এক্সটেনশানগুলিকে অবশ্যই এই তালিকায় যোগ করতে হবে৷ যদি কোনো এক্সটেনশান তালিকায় না থাকে বা তালিকাটি সেট না থাকে, তাহলে একটি ত্রুটি কোডের মাধ্যমে API এ কলটি ব্যর্থ হয়ে যাবে৷</translation> +<translation id="8214600119442850823">পাসওয়ার্ড পরিচালক কনফিগার করে।</translation> <translation id="8244525275280476362">একটি নীতি অবৈধতার পরে সর্বোচ্চ আনয়ন বিলম্ব হয়</translation> <translation id="8256688113167012935">সংশ্লিষ্ট ডিভাইস-স্থানীয় অ্যাকাউন্টের লগইন স্ক্রীনে দেখানো <ph name="PRODUCT_OS_NAME" /> অ্যাকাউন্ট নাম নিয়ন্ত্রণ করে৷ @@ -2201,6 +2212,11 @@ <translation id="8858642179038618439">YouTube নিরাপত্তা মোড বলবৎ করে</translation> <translation id="8864975621965365890">যখন একটি সাইট <ph name="PRODUCT_FRAME_NAME" /> এর দ্বারা রেন্ডার করা হয় তখন এতে প্রদর্শিত প্রত্যাখ্যানের বিজ্ঞপ্তিটিকে গোপন করে৷</translation> <translation id="8870318296973696995">হোম পৃষ্ঠা</translation> +<translation id="8889588091638298603">Quirks সার্ভার মনিটর ক্রমাঙ্কন সামঞ্জস্যপূর্ণ করতে ICC প্রদর্শন প্রোফাইলের মত হার্ডওয়্যার-নির্দিষ্ট কনফিগারেশন ফাইল সরবরাহ করে। + + এই নীতিটি মিথ্যাতে সেট করা থাকলে, ডিভাইসটি কনফিগারেশন ফাইলগুলি ডাউনলোড করতে Quirks সার্ভারের সাথে যোগাযোগ করার প্রচেষ্টা চালাবে না। + + যদি এই নীতি সত্য হিসাবে সেট বা কনফিগার করা না থাকে, তাহলে <ph name="PRODUCT_OS_NAME" /> স্বয়ংক্রিয়ভাবে Quirks সার্ভারের সাথে যোগাযোগ করবে এবং কনফিগারেশন ফাইলগুলি উপলব্ধ থাকলে সেগুলি ডাউনলোড করে ডিভাইসটিতে সংরক্ষণ করবে। এই ধরনের ফাইলগুলি, উদাহরণস্বরূপ, সংযুক্ত মনিটরের প্রদর্শন গুণমান উন্নত করার জন্য ব্যবহার করা হতে পারে।</translation> <translation id="8905426178924715309">এই সেটিংটি থামিয়ে দেওয়া হয়েছে, দয়া করে এর পরিবর্তে ‘Google নিরাপদ অনুসন্ধান বলবৎ করুন’ এবং ‘YouTube নিরাপদ মোড বলবৎ করুন’ ব্যবহার করুন। ‘Google নিরাপদ অনুসন্ধান বলবৎ করুন’ অথবা ‘YouTube নিরাপদ মোড বলবৎ করুন’ নীতিগুলি সেট করা হলে, এই নীতিকে উপেক্ষা করা হবে। কুয়েরিগুলি নিরাপদ অনুসন্ধানকে সক্রিয় হিসেবে সেট করে এর মাধ্যমে Google ওয়েব অনুসন্ধানে কাজ করায় এবং এই সেটিং পরিবর্তন করতে ব্যবহারকারীদের বাধা দেয়। এছাড়াও, এই সেটিং YouTube এ নিরাপদ মোড বলবৎ করে।
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb index 5823a19d..5a31fe4b 100644 --- a/components/policy/resources/policy_templates_ca.xtb +++ b/components/policy/resources/policy_templates_ca.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">Si aquesta política s'estableix en "true" o no es configura, <ph name="PRODUCT_NAME" /> permetrà els inicis de sessió en mode de convidat. Aquests inicis són perfils de <ph name="PRODUCT_NAME" /> on totes les finestres utilitzen el mode d'incògnit. Si aquesta política s'estableix en "false", <ph name="PRODUCT_NAME" /> no permetrà que s'iniciïn els perfils de convidat.</translation> +<translation id="1363275621236827384">Activa l'opció d'enviar consultes al servidor de Quirks per als perfils de maquinari</translation> <translation id="1397855852561539316">URL de suggeriments del proveïdor de cerca predeterminat</translation> <translation id="1398889361882383850">Permet definir si els llocs web poden executar connectors automàticament. Podeu permetre o denegar l'execució automàtica de connectors a tots els llocs web. @@ -686,6 +687,13 @@ El valor de la política s'ha d'especificar en mil·lisegons. Els valors s'estableixen en un interval de 30 segons a 24 hores.</translation> <translation id="3528000905991875314">Activa les pàgines d'error alternatives</translation> +<translation id="3538538104630456270">L'opció de configuració associada s'utilitzava abans d'introduir la reautenticació en veure contrasenyes. Des de llavors, aquesta opció i, per tant, aquesta política no afectaven el comportament de Chrome. Actualment, es comporta igual que si la política s'hagués establert per desactivar la visualització de contrasenyes en text no xifrat a la pàgina de configuració del gestor de contrasenyes. Això vol dir que la pàgina de configuració conté només un espai reservat i que Chrome només revela la contrasenya quan l'usuari fa clic a Mostra (i es torna a autenticar, si escau). A continuació teniu la descripció original de la política. + + Controla si l'usuari pot mostrar les contrasenyes en text no xifrat al gestor de contrasenyes. + + Si desactiveu aquesta opció de configuració, el gestor de contrasenyes no permetrà mostrar les contrasenyes emmagatzemades en text no xifrat a la finestra del gestor de contrasenyes. + + Si activeu aquesta política o si no la definiu, els usuaris podran veure les seves contrasenyes en text no xifrat al gestor de contrasenyes.</translation> <translation id="3547954654003013442">Configuració del servidor intermediari</translation> <translation id="3570008976476035109">Bloqueja els connectors en aquests llocs</translation> <translation id="3591584750136265240">Configura el comportament de l'autenticació d'inici de sessió</translation> @@ -1581,6 +1589,7 @@ Si no configureu aquesta política, l'usuari pot modificar la llista d'aplicacions fixades a la barra d'execució ràpida.</translation> <translation id="7132877481099023201">URL als quals els dispositius de captura de vídeo podran accedir sense confirmació.</translation> +<translation id="7167436895080860385">Permet que els usuaris mostrin les contrasenyes al gestor de contrasenyes (política obsoleta)</translation> <translation id="7173856672248996428">Perfil efímer</translation> <translation id="7187256234726597551">Si s'estableix el valor com a vertader, es permetrà el testimoni remot per al dispositiu i automàticament es crearà i es penjarà un certificat al servidor de gestió de dispositius. @@ -1883,6 +1892,7 @@ <translation id="8197918588508433925">Aquesta política especifica les extensions permeses per utilitzar l'API de claus de plataformes empresarials chrome.enterprise.platformKeysPrivate.challengeUserKey() per als testimonis remots. Les extensions s'han d'afegir a aquesta llista perquè utilitzin l'API. Si alguna extensió no s'inclou a la llista o si no es defineix la llista, les crides a l'API fallaran i tornaran un codi d'error.</translation> +<translation id="8214600119442850823">Configura el gestor de contrasenyes.</translation> <translation id="8244525275280476362">Retard màxim en l'obtenció després de la invalidació d'una política</translation> <translation id="8256688113167012935">Controla el nom del compte que <ph name="PRODUCT_OS_NAME" /> mostra a la pantalla d'inici de sessió per al compte local del dispositiu corresponent. @@ -2061,6 +2071,11 @@ <translation id="8858642179038618439">Força el mode de seguretat de YouTube</translation> <translation id="8864975621965365890">Suprimeix l'avís de desactivació que apareix quan un lloc <ph name="PRODUCT_FRAME_NAME" /> renderitza un lloc.</translation> <translation id="8870318296973696995">Pàgina d'inici</translation> +<translation id="8889588091638298603">Quirks Server proporciona fitxers de configuració específics de cada maquinari, com ara perfils de visualització ICC per ajustar el calibratge del monitor. + + Si aquesta política s'estableix en "false", el dispositiu no prova de contactar amb Quirks Server per baixar els fitxers de configuració. + + Si s'estableix en "true" o no s'estableix, <ph name="PRODUCT_OS_NAME" /> contacta automàticament amb el Quirks Server, baixa els fitxers de configuració, si estan disponibles, i els emmagatzema al dispositiu. Aquests fitxers es poden utilitzar, per exemple, per millorar la qualitat dels monitors connectats.</translation> <translation id="8905426178924715309">Aquesta política està obsoleta; substituïu-la per ForceGoogleSafeSearch i per ForceYouTubeSafetyMode. S'ignorarà si ForceGoogleSafeSearch o ForceYouTubeSafetyMode estan establertes. Força que les consultes de la Cerca web de Google es facin amb la funció SafeSearch activada i impedeix que els usuaris canviïn aquesta opció de configuració. Aquesta opció també força el mode de seguretat a YouTube.
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb index 1cbc2b8..1d48132177 100644 --- a/components/policy/resources/policy_templates_cs.xtb +++ b/components/policy/resources/policy_templates_cs.xtb
@@ -95,6 +95,7 @@ <translation id="1359553908012294236">Pokud je tato zásada nastavena na hodnotu True nebo nastavena není, prohlížeč <ph name="PRODUCT_NAME" /> povolí přihlášení hosta. Přihlášení hosta v prohlížeči <ph name="PRODUCT_NAME" /> jsou profily, ve kterých jsou všechna okna v anonymním režimu. Pokud je tato zásada nastavena na hodnotu False, <ph name="PRODUCT_NAME" /> vytváření profilů hosta nepovolí.</translation> +<translation id="1363275621236827384">Povolit dotazy na server Quirks pro hardwarové profily</translation> <translation id="1397855852561539316">URL výchozího vyhledávače pro návrhy</translation> <translation id="1398889361882383850">Umožňuje nastavit, zda weby budou moci automaticky spouštět pluginy. Automatické spouštění pluginů lze pro všechny weby povolit, nebo zakázat. @@ -720,6 +721,13 @@ Hodnotu zásady je třeba zadat v milisekundách. Hodnoty se mohou pohybovat v rozmezí od 30 sekund do 24 hodin.</translation> <translation id="3528000905991875314">Aktivovat alternativní chybové stránky</translation> +<translation id="3538538104630456270">Přidružené nastavení bylo používáno před zavedením opětovného ověření při zobrazení hesel. Od té doby nemá toto nastavení a tedy ani tato zásada na chování Chromu žádný vliv. Chrome se nyní chová stejně, jako kdyby v této zásadě bylo zobrazení hesel v čitelné podobě na stránce správce hesel zakázáno. To znamená, že stránka nastavení obsahuje pouze zástupný symbol a Chrome heslo zobrazí, jen když uživatel klikne na Zobrazit (a případně také provede opětovné ověření). Níže uvádíme původní popis zásady. + +Určuje, zda mohou uživatelé ve správci hesel zobrazit hesla jako čitelný text. + +Pokud toto nastavení deaktivujete, v okně správce hesel nebude možné zobrazit uložená hesla jako čitelný text. + +Pokud tuto zásadu aktivujete nebo ji nenastavíte, uživatelé budou ve správci hesel moci zobrazit uložená hesla jako čitelný text.</translation> <translation id="3547954654003013442">Nastavení proxy serveru</translation> <translation id="3570008976476035109">Blokovat pluginy na těchto stránkách</translation> <translation id="3591584750136265240">Konfigurace chování přihlašovacího ověření</translation> @@ -1702,6 +1710,7 @@ Pokud zásada nastavena není, uživatel seznam aplikací ve spouštěči změnit může.</translation> <translation id="7132877481099023201">Adresy URL, kterým bude udělen přístup pro záznam videa bez zobrazení výzvy</translation> +<translation id="7167436895080860385">Umožnit uživatelům zobrazit hesla ve Správci hesel (podpora ukončena)</translation> <translation id="7173856672248996428">Dočasný profil</translation> <translation id="7187256234726597551">Pokud je tato zásada nastavena na hodnotu true, bude pro zařízení povolena vzdálená atestace a bude automaticky vygenerován certifikát, který se nahraje na server správy zařízení. @@ -2021,6 +2030,7 @@ <translation id="8197918588508433925">Tato zásada určuje povolená rozšíření, která mohou ke vzdálenému ověření identity použít rozhraní Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey(). Rozšíření oprávněná používat rozhraní API musí být přidána do tohoto seznamu. Pokud rozšíření není na seznamu nebo seznam není nastaven, volání rozhraní API se nezdaří a zobrazí se kód chyby.</translation> +<translation id="8214600119442850823">Konfiguruje správce hesel.</translation> <translation id="8244525275280476362">Maximální zpoždění načítání po zneplatnění zásady</translation> <translation id="8256688113167012935">Řídí, jaký název účtu systém <ph name="PRODUCT_OS_NAME" /> zobrazí na přihlašovací obrazovce pro odpovídající místní účet v zařízení. @@ -2193,6 +2203,12 @@ <translation id="8858642179038618439">Vynutit Bezpečný režim YouTube</translation> <translation id="8864975621965365890">Potlačuje oznámení o ukončení podpory, která se zobrazuje, když je web vykreslován pomocí pluginu <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Domovská stránka</translation> +<translation id="8889588091638298603">Server Quirks poskytuje konfigurační soubory týkající se hardwaru, například profily ICC displeje pro úpravu kalibrace monitoru. + +Pokud tuto zásadu nastavíte na hodnotu False, zařízení se nepokusí kontaktovat server Quirks za účelem stažení konfiguračních souborů. + +Pokud tuto zásadu nenakonfigurujete nebo nastavíte na hodnotu True, +systém <ph name="PRODUCT_OS_NAME" /> bude sever Quirks automaticky kontaktovat, stahovat z něj dostupné konfigurační soubory a ukládat je do zařízení.Tyto soubory mohou sloužit například k vylepšení kvality zobrazení na připojených monitorech.</translation> <translation id="8905426178924715309">Podpora této zásady byla ukončena, použijte namísto ní zásady ForceGoogleSafeSearch a ForceYouTubeSafetyMode. Pokud je nastavena zásada ForceGoogleSafeSearch nebo ForceYouTubeSafetyMode, tato zásada bude ignorována. Vynutí, aby se při použití Vyhledávání Google vždy aktivovalo Bezpečné vyhledávání, a zabrání uživatelům toto nastavení změnit. Toto nastavení také vynutí bezpečný režim na YouTube.
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb index 627afe10..1e51705 100644 --- a/components/policy/resources/policy_templates_da.xtb +++ b/components/policy/resources/policy_templates_da.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">Hvis denne politik er angivet til sand eller ikke er konfigureret, aktiverer <ph name="PRODUCT_NAME" /> gæstelogins. Gæstelogins er <ph name="PRODUCT_NAME" />-profiler, hvor alle vinduer er i inkognitotilstand. Hvis denne politik er angivet til falsk, tillader <ph name="PRODUCT_NAME" /> ikke, at der startes gæsteprofiler.</translation> +<translation id="1363275621236827384">Aktivér forespørgsler til Quirks-serveren om hardwareprofiler</translation> <translation id="1397855852561539316">Foreslået webadresse fra standardsøgemaskinen</translation> <translation id="1398889361882383850">Giver dig mulighed for at angive, om websites automatisk har tilladelse til at køre plugins. Plugins, der kører automatisk, kan enten tillades eller nægtes for alle websites. @@ -688,6 +689,13 @@ Politikkens værdi skal angives i millisekunder. Værdierne fastgøres til et interval fra 30 sekunder til 24 timer.</translation> <translation id="3528000905991875314">Aktiver alternative fejlsider</translation> +<translation id="3538538104630456270">Den tilknyttede indstilling blev brugt før ny godkendelse ved visning af adgangskoder blev indført. Siden da har indstillingen og dermed denne politik ikke påvirket Chromes adfærd. Chromes nuværende adfærd er nu den samme, som hvis politikken var konfigureret til at deaktivere visning af adgangskoder i tydelig tekst på siden med indstillinger for adgangskodeadministratoren. Det betyder, at siden med indstillinger kun indeholder en pladsholder, og Chrome viser kun adgangskoden, når brugeren klikker på "Vis" (og ny godkendelse, hvis det er relevant). Den oprindelige beskrivelse af politikken er angivet nedenfor. + + Kontrollerer, om brugeren kan se adgangskoder i tydelig tekst i adgangskodeadministratoren. + + Hvis du deaktiverer denne indstilling, tillader adgangskodeadministratoren ikke visning af gemte adgangskoder i tydelig tekst i vinduet for adgangskodeadministratoren. + + Hvis du aktiverer eller ikke angiver denne politik, kan brugerne se deres adgangskoder i tydelig tekst i adgangskodeadministratoren.</translation> <translation id="3547954654003013442">Proxyindstillinger</translation> <translation id="3570008976476035109">Bloker plugins på disse websites</translation> <translation id="3591584750136265240">Konfigurer adfærden for logingodkendelse</translation> @@ -1591,6 +1599,7 @@ Hvis politikken ikke er angivet, kan brugeren ændre listen over fastgjorte apps på applikationslisten.</translation> <translation id="7132877481099023201">Webadresser, der får adgang til videooptagelsesenheder, uden at du skal give tilladelse hertil.</translation> +<translation id="7167436895080860385">Tillad, at brugerne kan se adgangskoder i adgangskodeadministratoren</translation> <translation id="7173856672248996428">Efemerisk profil</translation> <translation id="7187256234726597551">Hvis den er indstillet til sand, er fjernattestering tilladt for enheden, og der genereres og uploades automatisk et certifikat til Device Management Server. @@ -1891,6 +1900,7 @@ <translation id="8197918588508433925">Denne politik angiver de tilladte udvidelser til brug af Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() til fjernattestering. Udvidelser skal føjes til denne liste for at kunne anvende API'en Hvis en udvidelse ikke findes på listen, eller listen ikke er angivet, mislykkes kaldet til API'en med en fejlkode.</translation> +<translation id="8214600119442850823">Konfigurerer adgangskodeadministratoren.</translation> <translation id="8244525275280476362">Maksimal henteforsinkelse efter ugyldiggørelse af en politik</translation> <translation id="8256688113167012935">Styrer det kontonavn, som <ph name="PRODUCT_OS_NAME" /> viser på loginskærmen for den tilsvarende enhedslokale konto. @@ -2069,6 +2079,15 @@ <translation id="8858642179038618439">Gennemtving Beskyttet tilstand på YouTube</translation> <translation id="8864975621965365890">Undertrykker opfordringen til afvisning, som vises, når et website gengives af <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Startside</translation> +<translation id="8889588091638298603">Quirks-serveren leverer hardwarespecifikke konfigurationsfiler, som f.eks. ICC-profiler til visning, til justering af skærmkalibrering. + + Når denne politik er angivet som falsk, forsøger enheden ikke at kontakte Quirks-serveren for at downloade konfigurationsfiler. + + Hvis denne politik er angivet som sand eller ikke er konfigureret, + kontakter <ph name="PRODUCT_OS_NAME" /> + automatisk Quirks-serveren og downloader konfigurationsfiler, + hvis de er tilgængelige, som derefter gemmes på enheden. Sådanne filer + kan f.eks. anvendes til at forbedre kvaliteten af visningen af tilsluttede skærme.</translation> <translation id="8905426178924715309">Denne politik er udfaset. Brug ForceGoogleSafeSearch og ForceYouTubeSafetyMode i stedet. Denne politik ignoreres, hvis en af politikkerne ForceGoogleSafeSearch eller ForceYouTubeSafetyMode er angivet. Gennemtvinger, at forespørgsler i Google Websøgning udføres med Beskyttet søgning slået til, og forhindrer brugere i at ændre denne indstilling. Denne indstilling gennemtvinger også Beskyttet tilstand på YouTube.
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index c98f30e..a56a0be 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -81,6 +81,7 @@ <translation id="1359553908012294236">Wenn für diese Richtlinie "true" festgelegt oder wenn sie nicht konfiguriert ist, sind Gastanmeldungen in <ph name="PRODUCT_NAME" /> möglich. Anmeldungen als Gast entsprechen <ph name="PRODUCT_NAME" />-Profilen, in denen sich alle Fenster im Inkognitomodus befinden. Ist für die Richtlinie "false" festgelegt, erlaubt <ph name="PRODUCT_NAME" /> das Erstellen von Gastprofilen nicht.</translation> +<translation id="1363275621236827384">Abfragen an Quirks-Server für Hardwareprofile aktivieren</translation> <translation id="1397855852561539316">Vorschlags-URL für die Standardsuchmaschine</translation> <translation id="1398889361882383850">Mit dieser Richtlinie können Sie festlegen, ob Websites Plug-ins automatisch ausführen dürfen. Das automatische Ausführen von Plug-ins kann entweder allen Websites gestattet oder für alle Websites unterbunden werden. @@ -680,6 +681,13 @@ Der Richtlinienwert sollte in Millisekunden angegeben werden. Der Wert kann zwischen 30 Sekunden und 24 Stunden liegen.</translation> <translation id="3528000905991875314">Alternative Fehlerseiten aktivieren</translation> +<translation id="3538538104630456270">Die entsprechende Einstellung wurde verwendet, bevor die erneute Authentifizierung bei der Ansicht von Passwörtern aktiviert wurde. Seit damals haben die Einstellung und folglich auch diese Richtlinien keinen Einfluss auf das Verhalten von Chrome. Momentan werden Passwörter auf der Einstellungsseite des Passwortmanagers nicht als Klartext gezeigt. Dies bedeutet, dass die Einstellungsseite nur einen Platzhalter enthält und das Passwort in Chrome nur dann gezeigt wird, wenn der Nutzer auf "Anzeigen" klickt und sich gegebenenfalls noch einmal authentifiziert. Die ursprüngliche Beschreibung der Richtlinien finden Sie unten. + + Bestimmt, ob Nutzer Passwörter im Passwortmanager als Klartext abrufen können. + + Wenn Sie diese Einstellung deaktivieren, können sich Nutzer Passwörter im Passwortmanagerfenster nicht als Klartext anzeigen lassen. + + Sollten Sie sie aktivieren oder nicht konfigurieren, so können Nutzer ihre Passwörter im Passwortmanager als Klartext einsehen.</translation> <translation id="3547954654003013442">Proxy-Einstellungen</translation> <translation id="3570008976476035109">Plug-ins auf diesen Websites blockieren</translation> <translation id="3591584750136265240">Verhalten der Log-in-Authentifizierung konfigurieren</translation> @@ -1570,6 +1578,7 @@ Wird diese Richtlinie nicht konfiguriert, können Nutzer die Liste der in der Übersicht angezeigten Apps ändern.</translation> <translation id="7132877481099023201">URLs, denen ohne Nachfrage Zugriff auf Videoaufnahmegeräte gestattet wird</translation> +<translation id="7167436895080860385">Anzeige von Passwörtern im Passwortmanager durch Nutzer zulassen (veraltet)</translation> <translation id="7173856672248996428">Sitzungsspezifisches Profil</translation> <translation id="7187256234726597551">Bei Festlegung auf "true" ist die Remote-Bestätigung für das Gerät erlaubt. Ein Zertifikat wird automatisch erstellt und auf den Device Management Server hochgeladen. @@ -1866,6 +1875,7 @@ <translation id="8197918588508433925">Mit dieser Richtlinie wird festgelegt, welche Erweiterungen zum Zweck der Remote-Bestätigung die Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() verwenden dürfen. Damit eine Erweiterung die API verwenden darf, muss sie zu dieser Liste hinzugefügt werden. Wenn eine Erweiterung nicht in der Liste enthalten ist oder keine Liste festgelegt wurde, treten beim API-Aufruf Fehler auf und ein Fehlercode wird angezeigt.</translation> +<translation id="8214600119442850823">Konfiguriert den Passwortmanager.</translation> <translation id="8244525275280476362">Maximale Abrufverzögerung nach der Außerkraftsetzung einer Richtlinie</translation> <translation id="8256688113167012935">Gibt an, welchen Kontonamen <ph name="PRODUCT_OS_NAME" /> für das entsprechende lokale Gerätekonto auf der Anmeldeseite anzeigt. @@ -2036,6 +2046,17 @@ <translation id="8858642179038618439">YouTube-Sicherheitsmodus erzwingen</translation> <translation id="8864975621965365890">Unterdrückung des Hinweises auf Einstellung des Frames, der beim Rendern einer Website durch <ph name="PRODUCT_FRAME_NAME" /> erscheint</translation> <translation id="8870318296973696995">Startseite</translation> +<translation id="8889588091638298603">Der Quirks-Server stellt Hardware-spezifische Konfigurationsdateien bereit, wie + ICC-Displayprofile zur Anpassung der Monitorkalibierung. + + Wenn diese Richtlinien auf "false" gesetzt werden, versucht das Gerät nicht, + den Quirks-Server zu kontaktieren, damit dieser Konfigurationsdateien herunterlädt. + + Wenn diese Richtlinien auf "true" gesetzt oder nicht konfiguriert werden, kontaktiert + <ph name="PRODUCT_OS_NAME" /> + automatisch den Quirks-Server und lädt Konfigurationsdateien herunter, + sofern welche vorhanden sind, und speichert sie auf dem Gerät. Solche Dateien können beispielsweise verwendet werden, + um die Displayqualität angeschlossener Monitore zu verbessern.</translation> <translation id="8905426178924715309">Diese Richtlinie wird nicht mehr angeboten. Verwenden Sie stattdessen "ForceGoogleSafeSearch" und "ForceYouTubeSafetyMode". Die Richtlinie wird ignoriert, wenn entweder "ForceGoogleSafeSearch" oder "ForceYouTubeSafetyMode" festgelegt ist. Durch diese Richtlinie wird die Ausführung der Google Websuche mit aktivierter SafeSearch-Funktion erzwungen und verhindert, dass Nutzer die Einstellung ändern. Darüber hinaus wird die Verwendung des sicheren Modus bei YouTube erzwungen.
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb index 3ab055a..c8329c3 100644 --- a/components/policy/resources/policy_templates_el.xtb +++ b/components/policy/resources/policy_templates_el.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Αν αυτή η πολιτική έχει οριστεί ως αληθής ή δεν έχει διαμορφωθεί, το <ph name="PRODUCT_NAME" /> θα ενεργοποιήσει τις συνδέσεις επισκεπτών. Οι συνδέσεις επισκεπτών αποτελούν προφίλ του <ph name="PRODUCT_NAME" /> όπου όλα τα παράθυρα είναι στην κατάσταση ανώνυμης περιήγησης. Αν αυτή η πολιτική έχει οριστεί ως ψευδής, το <ph name="PRODUCT_NAME" /> δεν θα επιτρέπει την εκκίνηση των προφίλ επισκεπτών.</translation> +<translation id="1363275621236827384">Ενεργοποίηση ερωτημάτων στον διακομιστή Quirks, για προφίλ εξοπλισμού</translation> <translation id="1397855852561539316">Προεπιλεγμένη διεύθυνση URL προτάσεων παροχέα αναζήτησης</translation> <translation id="1398889361882383850">Σας επιτρέπει να ορίσετε εάν οι ιστότοποι θα έχουν τη δυνατότητα να εκτελούν αυτομάτως προσθήκες. Η αυτόματη εκτέλεση των προσθηκών μπορεί είτε να επιτρέπεται είτε να μην επιτρέπεται για όλους τους ιστότοπους. @@ -748,6 +749,13 @@ Η τιμή της πολιτικής θα πρέπει να καθορίζεται σε χιλιοστά του δευτερολέπτου. Οι τιμές περιλαμβάνονται σε εύρος 30 δευτερολέπτων έως 24 ωρών.</translation> <translation id="3528000905991875314">Ενεργοποίηση εναλλακτικών σελίδων σφάλματος</translation> +<translation id="3538538104630456270">Η σχετική ρύθμιση χρησιμοποιούνταν πριν από την εισαγωγή της διαδικασίας εκ νέου ελέγχου ταυτότητας κατά την προβολή κωδικών πρόσβασης. Από τότε, η ρύθμιση και συνεπώς η πολιτική της δεν επηρέασαν τη συμπεριφορά του Chrome. Η τρέχουσα συμπεριφορά του Chrome είναι πλέον ίδια με αυτήν της περίπτωσης κατά την οποία η πολιτική έχει οριστεί έτσι ώστε να απενεργοποιείται η εμφάνιση κωδικών πρόσβασης σε καθαρό κείμενο στη σελίδα ρυθμίσεων της διαχείρισης κωδικού πρόσβασης. Αυτό σημαίνει ότι η σελίδα ρυθμίσεων περιέχει απλώς ένα placeholder και το Chrome εμφανίσει τον κωδικό πρόσβασης, μόνο αν ο χρήστης κάνει κλικ στο στοιχείο "Εμφάνιση" (και εκ νέου έλεγχο ταυτότητας, αν υπάρχει). Ακολουθεί η αρχική περιγραφή της πολιτικής. + + Ελέγχει αν ο χρήστης μπορεί να εμφανίσει κωδικούς πρόσβασης σε απλό κείμενο στη διαχείριση κωδικού πρόσβασης. + + Αν απενεργοποιήσετε αυτήν τη ρύθμιση, η διαχείριση κωδικού πρόσβασης δεν επιτρέπει την εμφάνιση αποθηκευμένων κωδικών πρόσβασης σε απλό κείμενο στο παράθυρο της διαχείρισης κωδικού πρόσβασης. + + Αν ενεργοποιήσετε ή δεν ορίσετε αυτήν τη ρύθμιση, οι χρήστες θα μπορούν να προβάλλουν τους κωδικούς πρόσβασης σε απλό κείμενο στη διαχείριση κωδικού πρόσβασης.</translation> <translation id="3547954654003013442">Ρυθμίσεις διακομιστή μεσολάβησης</translation> <translation id="3570008976476035109">Αποκλεισμός προσθηκών σε αυτούς τους ιστότοπους</translation> <translation id="3591584750136265240">Διαμόρφωση της συμπεριφοράς ελέγχου ταυτότητας κατά τη σύνδεση</translation> @@ -1731,6 +1739,7 @@ Αν αυτή η πολιτική δεν ρυθμιστεί, ο χρήστης θα μπορεί να αλλάξει τη λίστα των καρφιτσωμένων εφαρμογών στη λειτουργία εκκίνησης.</translation> <translation id="7132877481099023201">Διευθύνσεις URL που θα έχουν πρόσβαση στις συσκευές καταγραφής βίντεο χωρίς ερώτηση</translation> +<translation id="7167436895080860385">Να επιτρέπεται στους χρήστες να εμφανίζουν κωδικούς πρόσβασης στη Διαχείριση κωδικού πρόσβασης (καταργήθηκε)</translation> <translation id="7173856672248996428">Εφήμερο προφίλ</translation> <translation id="7187256234726597551">Αν έχει τιμή true, θα επιτρέπεται η απομακρυσμένη διαβεβαίωση για τη συσκευή και θα δημιουργηθεί ένα πιστοποιητικό, το οποίο θα ανεβεί στο Διακομιστή διαχείρισης συσκευών. @@ -2058,6 +2067,7 @@ <translation id="8197918588508433925">Η παρούσα πολιτική καθορίζει τις επιτρεπόμενες επεκτάσεις για τη χρήση του API Enterprise Platform Keys chrome.enterprise.platformKeysPrivate.challengeUserKey() για απομακρυσμένη διαβεβαίωση. Για τη χρήση του API, οι επεκτάσεις θα πρέπει να προστίθενται σε αυτήν τη λίστα. Εάν μια επέκταση δεν περιλαμβάνεται στη λίστα, ή εάν δεν έχει οριστεί η λίστα, η κλήση προς το API θα αποτυγχάνει εμφανίζοντας έναν κωδικό σφάλματος.</translation> +<translation id="8214600119442850823">Διαμορφώνει τη διαχείριση κωδικού πρόσβασης.</translation> <translation id="8244525275280476362">Μέγιστη καθυστέρηση ανάκτησης μετά από ακύρωση πολιτικής</translation> <translation id="8256688113167012935">Ελέγχει το όνομα του λογαριασμού που εμφανίζει το <ph name="PRODUCT_OS_NAME" /> στην οθόνη σύνδεσης για τον αντίστοιχο τοπικό λογαριασμό συσκευής. @@ -2243,6 +2253,17 @@ <translation id="8858642179038618439">Υποχρεωτική ασφαλής λειτουργία YouTube</translation> <translation id="8864975621965365890">Αποκρύπτει τo μήνυμα απόρριψης που εμφανίζεται όταν ένας ιστότοπος αποδίδεται από το <ph name="PRODUCT_FRAME_NAME" /> .</translation> <translation id="8870318296973696995">Αρχική σελίδα</translation> +<translation id="8889588091638298603">Ο διακομιστής Quirks παρέχει αρχεία διαμόρφωσης για συγκεκριμένο εξοπλισμό, όπως + προφίλ προβολής ICC για την προσαρμογή της βαθμονόμησης οθόνης. + + Εάν αυτή η πολιτική ορίζεται ως εσφαλμένη, η συσκευή δεν θα επιχειρήσει να + επικοινωνήσει με τον διακομιστή Quirks για τη λήψη αρχείων διαμόρφωσης. + + Εάν αυτή η πολιτική ορίζεται ως αληθής ή δεν έχει διαμορφωθεί, τότε το + <ph name="PRODUCT_OS_NAME" /> θα + επικοινωνήσει αυτόματα με τον διακομιστή Quirks, θα κατεβάσει αρχεία διαμόρφωσης, + αν είναι διαθέσιμα, και θα τα αποθηκεύσει στη συσκευή. Αυτά τα αρχεία μπορούν, για + παράδειγμα, να χρησιμοποιηθούν για τη βελτίωση της ποιότητας εμφάνισης των προσαρτημένων οθονών.</translation> <translation id="8905426178924715309">Αυτή η πολιτική έχει καταργηθεί. Αντ' αυτής χρησιμοποιήστε τις πολιτικές ForceGoogleSafeSearch και το ForceYouTubeSafetyMode. Αυτή η πολιτική θα παραβλεφθεί, αν έχει οριστεί η πολιτική ForceGoogleSafeSearch ή η πολιτική ForceYouTubeSafetyMode. Εξαναγκάζει τα ερωτήματα στην Αναζήτηση στον Ιστό Google να εκτελούνται με την Ασφαλή Αναζήτηση να έχει οριστεί ως ενεργή και αποτρέπει την αλλαγή αυτής της ρύθμισης από τους χρήστες. Επίσης, η συγκεκριμένη ρύθμιση ενεργοποιεί υποχρεωτικά την Ασφαλή λειτουργία στο YouTube.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index e517c0f..0ec0462 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -81,6 +81,7 @@ <translation id="1359553908012294236">Si esta política no se configura o se establece en true, <ph name="PRODUCT_NAME" /> permitirá acceder como invitado. Los accesos como invitado son perfiles de <ph name="PRODUCT_NAME" /> en los que todas las ventanas están en modo de navegación de incógnito. Si esta política se establece en false, <ph name="PRODUCT_NAME" /> no permitirá que se inicien perfiles de invitado.</translation> +<translation id="1363275621236827384">Habilitar las consultas a Quirks Server para perfiles de hardware</translation> <translation id="1397855852561539316">Dirección URL sugerida para el proveedor de búsqueda predeterminado</translation> <translation id="1398889361882383850">Te permite establecer los sitios web que pueden ejecutar automáticamente los complementos. La ejecución automática de complementos puede permitirse o negarse a todos los sitios web. @@ -671,6 +672,13 @@ El valor de la política debe estar especificado en milisegundos. Los valores están fijados en un intervalo de entre 30 segundos y 24 horas.</translation> <translation id="3528000905991875314">Habilitar páginas de error alternativas</translation> +<translation id="3538538104630456270">La configuración asociada se usó antes de implementar la reautenticación para ver contraseñas. A partir de ese momento, la configuración y, por lo tanto, esta política no tienen efecto en el comportamiento de Chrome. El comportamiento actual de Chrome es como si la política se hubiera establecido para no ver las contraseñas en texto claro en las páginas de configuración del administrador de contraseñas. Esto significa que la página de configuración contiene solo un marcador de posición y Chrome mostrará la contraseña después de que el usuario haga clic en "Mostrar" (e implemente la reautenticación, si corresponde). A continuación, se muestra la descripción original de la política. + + Controla si el usuario puede mostrar contraseñas en texto claro en el administrador de contraseñas. + + Si inhabilitas esta configuración, el administrador de contraseñas no permite mostrar contraseñas guardadas en texto claro en la ventana del administrador de contraseñas. + + Si habilitas esta configuración o no estableces esta política, los usuarios pueden ver las contraseñas en texto claro en el administrador de contraseñas.</translation> <translation id="3547954654003013442">Configuración de proxy</translation> <translation id="3570008976476035109">Bloquear complementos en estos sitios</translation> <translation id="3591584750136265240">Configurar el comportamiento de autenticación en el acceso</translation> @@ -1561,6 +1569,7 @@ Si no se configura esta política, el usuario podrá cambiar la lista de aplicaciones fijas en el menú de aplicaciones.</translation> <translation id="7132877481099023201">Las URL que recibirán acceso a dispositivos de captura de video sin solicitarlo</translation> +<translation id="7167436895080860385">Permitir que los usuarios muestren las contraseñas en el administrador de contraseñas (ya no está disponible)</translation> <translation id="7173856672248996428">Perfil efímero</translation> <translation id="7187256234726597551">Si está establecida como verdadera, se permitirá la confirmación remota para el dispositivo, y se generará automáticamente un certificado que se subirá al servidor de administración de dispositivos. @@ -1852,6 +1861,7 @@ <translation id="8197918588508433925">Esta política especifica las extensiones que tienen permitido usar la API de claves de plataforma empresarial chrome.enterprise.platformKeysPrivate.challengeUserKey() para la atestación remota. Las extensiones deben agregarse a esta lista para que puedan usar la API. Si una extensión no está en la lista o si la lista no está establecida, la llamada a la API fallará y se mostrará un código de error.</translation> +<translation id="8214600119442850823">Configura el administrador de contraseñas.</translation> <translation id="8244525275280476362">Demora de recuperación máxima después de invalidar una política</translation> <translation id="8256688113167012935">Controla el nombre de cuenta <ph name="PRODUCT_OS_NAME" /> que aparece en la pantalla de acceso de la cuenta local del dispositivo que corresponda. @@ -2010,6 +2020,19 @@ <translation id="8858642179038618439">Forzar el modo de seguridad de YouTube</translation> <translation id="8864975621965365890">Elimina el mensaje de desactivación que aparece cuando <ph name="PRODUCT_FRAME_NAME" /> muestra un sitio.</translation> <translation id="8870318296973696995">Página principal</translation> +<translation id="8889588091638298603">Quirks Server proporciona archivos de configuración específicos de hardware, como + perfiles de visualización de ICC, para ajustar la calibración del monitor. + + Cuando esta política se establece como falsa, el dispositivo no intentará + comunicarse con Quirks Server para descargar archivos de configuración. + + Si esta política se establece como verdadera o no se configura, + <ph name="PRODUCT_OS_NAME" /> se comunicará + de forma automática con Quirks Server, descargará archivos de + configuración, + si están disponibles, y los guardará en el dispositivo. Estos + archivos pueden usarse, por ejemplo, para mejorar la calidad de + visualización de los monitores conectados.</translation> <translation id="8905426178924715309">Esta política dejó de estar disponible; se deben usar ForceGoogleSafeSearch y ForceYouTubeSafetyMode en su lugar. Esta política se ignorará si se establecen las políticas ForceGoogleSafeSearch o ForceYouTubeSafetyMode. Permite forzar las consultas en la Búsqueda web de Google para que se realicen con SafeSearch activado y evitar que los usuarios modifiquen esta configuración. Esta configuración también fuerza el modo de seguridad en YouTube.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index d0ac70d..018abe9 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -96,6 +96,7 @@ <translation id="1359553908012294236">Si se asigna el valor true a esta política o si esta no se configura, <ph name="PRODUCT_NAME" /> habilitará los inicios de sesión como invitado. Los inicios de sesión como invitado son perfiles de <ph name="PRODUCT_NAME" /> en los que todas las ventanas están en modo incógnito. Si se asigna el valor false a esta política, <ph name="PRODUCT_NAME" /> no permitirá que se inicien los perfiles de invitado.</translation> +<translation id="1363275621236827384">Habilitar consultas al servidor de Quirks para los perfiles de hardware</translation> <translation id="1397855852561539316">URL de sugerencia del proveedor de búsquedas predeterminadas</translation> <translation id="1398889361882383850">Permite establecer si los sitios web pueden ejecutar complementos automáticamente. La ejecución automática de complementos se puede permitir o denegar para todos los sitios web. @@ -750,6 +751,13 @@ El valor de la política debe estar especificado en milisegundos. Los valores están fijados en un intervalo de entre 30 segundos y 24 horas.</translation> <translation id="3528000905991875314">Habilitar páginas de error alternativas</translation> +<translation id="3538538104630456270">La opción asociada se utilizó antes de que se introdujese la nueva autenticación en las contraseñas visibles. Desde entonces, la opción y, por lo tanto, esta política, no han afectado al comportamiento de Chrome. El comportamiento actual de Chrome es el mismo que si se hubiese establecido la política para inhabilitar que se muestren las contraseñas sin cifrar en la página de configuración del Administrador de Contraseñas. Esto significa que la página de configuración incluye un solo marcador de posición y Chrome solo muestra la contraseña cuando el usuario hace clic en Mostrar (y al volver a autenticarse, si procede). A continuación se muestra la descripción original de la política. + + Permite controlar si las contraseñas se pueden mostrar sin cifrar a los usuarios en el Administrador de Contraseñas. + + Si inhabilitas esta opción, no se podrán ver contraseñas almacenadas sin cifrar en la ventana del Administrador de Contraseñas. + + Si habilitas esta opción o si no estableces esta política, los usuarios podrán ver sus contraseñas sin cifrar en el Administrador de Contraseñas.</translation> <translation id="3547954654003013442">Configuración de proxy</translation> <translation id="3570008976476035109">Bloquear complementos en estos sitios</translation> <translation id="3591584750136265240">Configurar el comportamiento de la autenticación de inicio de sesión</translation> @@ -1738,6 +1746,7 @@ Si no se establece la política, el usuario puede cambiar la lista de aplicaciones fijadas de la barra de aplicaciones.</translation> <translation id="7132877481099023201">URLs a las que se concederá acceso a dispositivos de captura de vídeo sin confirmación</translation> +<translation id="7167436895080860385">Permitir que los usuarios muestren contraseñas en el Administrador de Contraseñas (obsoleto)</translation> <translation id="7173856672248996428">Perfil efímero</translation> <translation id="7187256234726597551">Si el valor está establecido en True, se permitirá la confirmación remota para el dispositivo y se generará automáticamente un certificado que se subirá al servidor de administración de dispositivos. @@ -2062,6 +2071,7 @@ <translation id="8197918588508433925">Esta política especifica cuáles son las extensiones que tienen permiso para utilizar la API de claves de plataforma de empresa chrome.enterprise.platformKeysPrivate.challengeUserKey() para la confirmación remota. Las extensiones se deben añadir a esta lista para poder utilizar la API. Si no se ha creado la lista o una extensión no incluida en la lista intenta utilizar la API, se mostrará un código de error al intentar hacer la llamada a la API.</translation> +<translation id="8214600119442850823">Permite configurar el Administrador de Contraseñas.</translation> <translation id="8244525275280476362">Retraso de recuperación máximo después de validar una política</translation> <translation id="8256688113167012935">Permite controlar el nombre de la cuenta que <ph name="PRODUCT_OS_NAME" /> muestra en la pantalla de inicio de sesión para la cuenta local del dispositivo correspondiente. @@ -2255,6 +2265,17 @@ <translation id="8858642179038618439">Forzar el modo de seguridad de YouTube</translation> <translation id="8864975621965365890">Elimina el mensaje de desactivación que aparece cuando <ph name="PRODUCT_FRAME_NAME" /> muestra un sitio.</translation> <translation id="8870318296973696995">Página de inicio</translation> +<translation id="8889588091638298603">El servidor de Quirks proporciona archivos de configuración específicos del hardware, como + los perfiles de pantalla ICC para ajustar la calibración del monitor. + + Cuando se asigna el valor false a esta política, el dispositivo no intenta + ponerse en contacto con el servidor de Quirks para descargar los archivos de configuración. + + Si se asigna el valor true a esta política o si esta no se configura, + <ph name="PRODUCT_OS_NAME" /> se pondrá en contacto + automáticamente con el servidor de Quirks, descargará los archivos de configuración + si están disponibles y los almacenará en el dispositivo. Estos archivos + pueden utilizarse, por ejemplo, para mejorar la calidad de la pantalla de los monitores conectados.</translation> <translation id="8905426178924715309">Esta política está obsoleta, utiliza ForceGoogleSafeSearch y ForceYouTubeSafetyMode en su lugar. Esta política se ignorará si están establecidas ForceGoogleSafeSearch o ForceYouTubeSafetyMode. Fuerza las consultas en la Búsqueda web de Google para que se realicen con SafeSearch activado e impide que los usuarios modifiquen esta configuración. Además, esta opción fuerza el modo de seguridad en YouTube.
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb index c32205e1..aa92da4d 100644 --- a/components/policy/resources/policy_templates_et.xtb +++ b/components/policy/resources/policy_templates_et.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Kui selle reegli väärtuseks määratakse Tõene või seda ei seadistata, lubab teenus <ph name="PRODUCT_NAME" /> külaliste sisselogimise. Külaliste sisselogimised on teenuse <ph name="PRODUCT_NAME" /> profiilid, kus kõik aknad on inkognito režiimis. Kui selle reegli väärtuseks määratakse Väär, ei luba teenus <ph name="PRODUCT_NAME" /> külaliste profiile käivitada.</translation> +<translation id="1363275621236827384">Lubatakse riistvaraprofiilide päringud Quirksi serverist</translation> <translation id="1397855852561539316">Vaikeotsingupakkuja soovitatud URL</translation> <translation id="1398889361882383850">Saate määrata, kas veebisaitidel on lubatud pistikprogramme automaatselt käitada. Pistikprogrammide automaatse käitamise saab kõigi veebisaitide puhul lubada või keelata. @@ -740,6 +741,13 @@ Reegli väärtus tuleb määrata millisekundites. Väärtus peab olema vahemikus 30 sekundit kuni 24 tundi.</translation> <translation id="3528000905991875314">Luba alternatiivsed vealehed</translation> +<translation id="3538538104630456270">Seotud seadet kasutati enne, kui uuesti autentimine paroolide vaatamisel kasutusele võeti. Alates sellest ei mõjutanud see seade ja sellest tulenevalt ka see reegel käitumist Chrome'is. Chrome'i praegune käitumine on sama, nagu keelaks see reegel paroolide kuvamise tavatekstina paroolihalduri seadete lehel. See tähendab, et seadete leht sisaldab ainult kohahoidjat ja Chrome kuvab parooli ainult siis, kui kasutaja klõpsab käsul „Kuva” (ning autendib uuesti, kui see on kohaldatav). Allpool on reegli algne kirjeldus. + + Juhib seda, kas kasutaja võib paroolihalduris paroole tavatekstina kuvada. + + Seade keelamisel ei luba paroolihaldur salvestatud paroole paroolihalduri aknas tavatekstina kuvada. + + Kui lubate reegli või jätate selle määramata, siis saavad kasutajad paroolihalduris paroole tavatekstina vaadata.</translation> <translation id="3547954654003013442">Puhverserveri seaded</translation> <translation id="3570008976476035109">Blokeeri pistikprogrammid nendel saitidel</translation> <translation id="3591584750136265240">Sisselogimise autentimise käitumise seadistamine</translation> @@ -1733,6 +1741,7 @@ Kui jätate eeskirja määramata, siis võib kasutaja käivitis kinnitatud rakenduste loendit muuta.</translation> <translation id="7132877481099023201">URL-id, millele antakse ilma küsimata juurdepääs videojäädvustusseadmetele</translation> +<translation id="7167436895080860385">Lubage kasutajatel paroolihalduris paroole kuvada (tugi on katkestatud)</translation> <translation id="7173856672248996428">Kaduvad profiilid</translation> <translation id="7187256234726597551">Kui see on seatud väärtusele Tõene, on seadme kaugkinnitus lubatud ning sertifikaat luuakse ja laaditakse seadmehaldusserverisse üles automaatselt. @@ -2054,6 +2063,7 @@ <translation id="8197918588508433925">Reegel määrab lubatud laiendused, mida kasutada kaugatesteerimisel Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() jaoks. API kasutamiseks tuleb laiendused loendisse kanda. Kui laiendust loendis pole või kui loendit pole koostatud, siis kõne API-le ebaõnnestub ja saate vastuseks veakoodi.</translation> +<translation id="8214600119442850823">Seadistatakse paroolihaldur.</translation> <translation id="8244525275280476362">Maksimaalne toomisviivitus pärast reegli kehtetuks tunnistamist</translation> <translation id="8256688113167012935">Juhib konto nime, mida <ph name="PRODUCT_OS_NAME" /> sisselogimiskuval vastava seadmepõhise konto jaoks näitab. @@ -2239,6 +2249,17 @@ <translation id="8858642179038618439">YouTube’i ohutu režiimi jõustamine</translation> <translation id="8864975621965365890">Keelab tagasilükkamisviiba, mis kuvatakse, kui saiti renderdab <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Avaleht</translation> +<translation id="8889588091638298603">Quirksi server pakub riistvarapõhiseid konfiguratsioonifaile, nagu + ICC ekraaniprofiilid, et saaksite monitori kalibreerimist kohandada. + + Kui selle reegli väärtuseks määratakse Väär, ei ürita seade Quirksi + serveriga konfiguratsioonifailide allalaadimiseks ühendust võtta. + + Kui selle reegli väärtuseks määratakse Tõene või seda ei seadistata, + võtab teenus <ph name="PRODUCT_OS_NAME" /> + Quirksi serveriga automaatselt ühendust, laadib konfiguratsioonifailid alla, + kui need on saadaval, ja salvestab need seadmesse. Neid faile võib + näiteks kasutada ühendatud monitoride pildikvaliteedi parandamiseks.</translation> <translation id="8905426178924715309">Selle reegli tugi on katkestatud, kasutage selle asemel reegleid ForceGoogleSafeSearch ja ForceYouTubeSafetyMode. Seda reeglit eiratakse, kui reegel ForceGoogleSafeSearch või ForceYouTubeSafetyMode on määratud. Sunnib Google'i veebiotsingute tegemisel kasutama SafeSearchi ja takistab kasutajatel seade muutmist. See seade jõustab turvarežiimi ka YouTube'is.
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb index a87942d..b9af9eb 100644 --- a/components/policy/resources/policy_templates_fa.xtb +++ b/components/policy/resources/policy_templates_fa.xtb
@@ -79,6 +79,7 @@ <translation id="1359553908012294236">اگر این خطمشی روی درست یا پیکربندی نشده تنظیم شود، <ph name="PRODUCT_NAME" /> ورود به سیستم مهمان را فعال میکند. ورود به سیستم مهمان، نمایه <ph name="PRODUCT_NAME" /> است که در آن تمام پنجرهها در حالت ناشناس عمل میکنند. اگر این خطمشی روی نادرست تنظیم شود، <ph name="PRODUCT_NAME" /> به نمایههای مهمان اجازه شروع نمیدهد.</translation> +<translation id="1363275621236827384">فعال کردن پُرسمانها در Quirks Server برای نمایههای سختافزاری</translation> <translation id="1397855852561539316">URL پیشنهاد شده توسط موتور جستجوی پیشفرض</translation> <translation id="1398889361882383850">به شما امکان میدهد تنظیم کنید آیا وبسایتها اجازه دارند افزایهها را خودکار اجرا کنند یا نه. اجرای خودکار افزایهها را میتوان برای همه وبسایتها مجاز کرد یا برای همه وبسایتها رد کرد. با کلیک روی «برای اجرا»، به افزایهها اجازه داده میشود که اجرا شوند اما کاربر برای شروع اجرا باید آنها را کلیک کند. @@ -677,6 +678,13 @@ مقدار خطمشی باید بر حسب میلی ثانیه باشد. مقادیر در محدوده ۳۰ ثانیه تا ۲۴ ساعت نگهداشته میشوند.</translation> <translation id="3528000905991875314">فعال کردن صفحات خطای جایگزین</translation> +<translation id="3538538104630456270">تنظیم مرتبط، قبل از معرفی احراز هویت مجدد مربوط به تماشای گذرواژهها استفاده شد. از آن پس، این تنظیم و در نتیجه این خطمشی تأثیری بر رفتار Chrome نداشتند. اکنون رفتار فعلی Chrome مانند زمانی است که خطمشی روی غیرفعال کردن نمایش گذرواژهها بهصورت متن آشکار در صفحه تنظیمات مدیر گذرواژه تنظیم شده باشد. به این معنی که آن صفحه تنظیمات فقط حاوی یک جایبان است و فقط با کلیک کردن کاربر روی «نمایش» (و احراز هویت مجدد در صورت امکان) Chrome گذرواژه را نشان میدهد. شرح اصلی خطمشی در زیر آمده است. + + کنترل میکند کاربر میتواند گذرواژهها را بهصورت متن آشکار در مدیر گذرواژه نشان دهد یا خیر. + + اگر این تنظیم را غیرفعال کنید، مدیر گذرواژه اجازه نمیدهد گذرواژههای ذخیرهشده بهصورت متن آشکار در پنجره مدیر گذرواژه نشان داده شود. + + اگر این خطمشی را فعال نکنید یا آن را تنظیم نکنید، کاربران میتوانند گذرواژههایشان را بهصورت متن آشکار در مدیر گذرواژه ببینند.</translation> <translation id="3547954654003013442">تنظیمات پروکسی</translation> <translation id="3570008976476035109">مسدود بودن افزایه در این سایتها</translation> <translation id="3591584750136265240">پیکربندی رفتار احراز هویت ورود به سیستم</translation> @@ -1564,6 +1572,7 @@ اگر این خطمشی تنظیم نشود٬ کاربر میتواند فهرست برنامههای پین شده را در راه انداز تغییر دهد.</translation> <translation id="7132877481099023201">نشانیهای وب که بدون سؤال از کاربر اجازه دسترسی به دستگاههای ضبط ویدیو را خواهند داشت</translation> +<translation id="7167436895080860385">امکان دادن به کاربران برای نمایش گذرواژهها در مدیر گذرواژه (منسوخشده)</translation> <translation id="7173856672248996428">نمایه موقت</translation> <translation id="7187256234726597551">چنانچه روی صحیح تنظیم شده باشد، به دستگاه اجازهٔ تأیید هویت از راه دور داده میشود و گواهینامهای بهطور خودکار تولید شده و در سرور مدیریت دستگاه آپلود میگردد. @@ -1858,6 +1867,7 @@ <translation id="8197918588508433925">این خطمشی افزودنیهای مجاز برای تأیید هویت از راه دور با Enterprise Platform Keys API به نام chrome.enterprise.platformKeysPrivate.challengeUserKey() را تعیین میکند. افزودنیها باید برای استفاده از API به این فهرست اضافه شوند. اگر افزودنیای در فهرست نباشد یا فهرست تنظیم نشده باشد، فراخوانی API به همراه کد خطایی شکست خواهد خورد.</translation> +<translation id="8214600119442850823">مدیر گذرواژه را پیکربندی میکند.</translation> <translation id="8244525275280476362">حداکثر تأخیر واکشی پس از ابطال قانون</translation> <translation id="8256688113167012935">کنترل میکند نام حساب <ph name="PRODUCT_OS_NAME" /> در صفحه ورود به سیستم برای حساب موردنظر داخل دستگاه نشان داده شود. @@ -2025,6 +2035,17 @@ <translation id="8858642179038618439">حالت ایمنی اجباری YouTube</translation> <translation id="8864975621965365890">درخواست برگرداندن را که هنگام اجرای سایت توسط <ph name="PRODUCT_FRAME_NAME" /> تولید میشود، متوقف میکند.</translation> <translation id="8870318296973696995">صفحهٔ اصلی</translation> +<translation id="8889588091638298603">Quirks Server فایلهای پیکربندی مخصوص سختافزار را ارائه میکند، مانند + نمایههای نمایشگر ICC برای تنظیم کالیبراسیون نمایشگر. + + وقتی این خطمشی روی «نادرست» تنظیم شود، دستگاه تلاش نخواهد کرد برای + بارگیری فایلهای پیکربندی با Quirks Server تماس برقرار کند. + + اگر خطمشی روی «درست» تنظیم شود یا پیکربندی نشود، + <ph name="PRODUCT_OS_NAME" /> بهطور خودکار با Quirks Server ارتباط برقرار میکند و فایلهای + پیکربندی را (اگر موجود باشند) بارگیری میکند و آنها را در دستگاه ذخیره + میکند. چنین فایلهایی ممکن است بهطور مثال برای بهبود کیفیت نمایش + نمایشگرهای متصل استفاده شوند.</translation> <translation id="8905426178924715309">این خطمشی منسوخ شده است، لطفاً بهجای آن از ForceGoogleSafeSearch و ForceYouTubeSafetyMode استفاده کنید. اگر ForceGoogleSafeSearch یا ForceYouTubeSafetyMode تنظیم شوند، این خطمشی نادیده گرفته میشود. جستجوها در «جستجوی وب Google» را مجبور میکند با حالت فعال «جستجوی ایمن» انجام شوند و کاربران نمیتوانند این تنظیم را تغییر دهند. این تنظیم همچنین «حالت ایمنی» اجباری را در YouTube فعال میکند.
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb index 8cc0819..0e946d05 100644 --- a/components/policy/resources/policy_templates_fi.xtb +++ b/components/policy/resources/policy_templates_fi.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">Jos tämän käytännön arvoksi asetetaan Tosi tai sitä ei määritetä, <ph name="PRODUCT_NAME" /> sallii vieraskirjautumisen. Vieraskirjautumisessa <ph name="PRODUCT_NAME" /> käyttää profiilia, jonka kaikki ikkunat avataan incognito-tilassa. Jos tämän käytännön arvoksi asetetaan Epätosi, <ph name="PRODUCT_NAME" /> ei salli kirjautumista vierasprofiililla.</translation> +<translation id="1363275621236827384">Salli laiteprofiilien lähettää kyselyitä Quirks Serverille</translation> <translation id="1397855852561539316">Oletushakupalvelun ehdottama URL-osoite</translation> <translation id="1398889361882383850">Voit määrittää, saavatko sivustot suorittaa laajennuksia automaattisesti. Laajennuksien automaattinen suorittaminen voidaan joko sallia kaikille sivustoille tai kieltää kaikilta sivustoilta. @@ -680,6 +681,13 @@ Käytännön arvot tulee määrittää millisekunteina. Arvoja voi valita väliltä 30 sekuntia – 24 tuntia.</translation> <translation id="3528000905991875314">Ota vaihtoehtoiset virhesivut käyttöön</translation> +<translation id="3538538104630456270">Mainittua asetusta käytettiin ennen kuin salasanojen tarkastelun uudelleentodennus otettiin käyttöön. Siitä lähtien asetuksella ja sen myötä tällä käytännöllä ei ole ollut vaikutusta Chromen toimintaan. Chrome toimii tällä hetkellä samoin kuin jos käytäntö olisi määritetty poistamaan käytöstä salasanojen näyttäminen tekstinä salasanan hallinnan asetussivulla. Tämä tarkoittaa sitä, että asetussivu sisältää vain paikkamerkin ja Chrome näyttää salasanan vain jos käyttäjä klikkaa Näytä (ja uudelleentodennuksen yhteydessä soveltuvissa tapauksissa). Alla on käytännön alkuperäinen kuvaus. + + Hallinnoi, voiko käyttäjä näyttää salasanoja tekstinä salasanan hallinnassa. + + Jos poistat tämän asetuksen käytöstä, salasanan hallinta ei salli tallennettujen salasanojen näyttämistä tekstinä salasanan hallinnan ikkunassa. + + Jos otat tämän käytännön käyttöön tai et määritä sitä ollenkaan, käyttäjät voivat nähdä salasanansa tekstinä salasanan hallinnassa.</translation> <translation id="3547954654003013442">Välityspalvelimen asetukset</translation> <translation id="3570008976476035109">Estä laajennukset näissä sivustoissa</translation> <translation id="3591584750136265240">Määritä kirjautumistodennuksen käytös.</translation> @@ -1578,6 +1586,7 @@ Jos käytäntöä ei ole määritetty, käyttäjä voi vaihtaa käynnistyspalkkiin kiinnitettyjä sovelluksia.</translation> <translation id="7132877481099023201">URL-osoitteet, joille sallitaan pääsy videon kaappauslaitteisiin erikseen lupaa kysymättä</translation> +<translation id="7167436895080860385">Anna käyttäjien katsella salasanoja salasanan hallinnassa (vanhentunut)</translation> <translation id="7173856672248996428">Lyhytkestoinen profiili</translation> <translation id="7187256234726597551">Jos arvo on tosi, etätodennus on sallittu laitteelle ja varmenne luodaan automaattisesti ja lähetetään laitteenhallintapalvelimelle. @@ -1873,6 +1882,7 @@ <translation id="8197918588508433925">Tämä käytäntö määrittää sovellukset, jotka voivat käyttää Enterprise Platform Keys -sovellusliittymää chrome.enterprise.platformKeysPrivate.challengeUserKey() etätodennukseen. Vain tähän luetteloon lisätyt sovellukset voivat käyttää sovellusliittymää. Jos laajennusta ei ole lisätty luetteloon tai luetteloa ei ole määritetty, sen sovellusliittymäkutsu epäonnistuu ja palauttaa virhekoodin.</translation> +<translation id="8214600119442850823">Määrittää salasanan hallinnan.</translation> <translation id="8244525275280476362">Noudon enimmäisviive käytännön kumoamisen jälkeen</translation> <translation id="8256688113167012935">Hallinnoi tilin nimeä, jonka <ph name="PRODUCT_OS_NAME" /> näyttää kunkin laitteeseen lisätyn tilin kirjautumisruudussa. @@ -2043,6 +2053,17 @@ <translation id="8858642179038618439">Pakota YouTuben rajoitettu tila käyttöön</translation> <translation id="8864975621965365890">Torjuu hylkäyskehotuksen, joka tulee näkyviin, kun sivu on hahmonnettu tuotteella <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Etusivu</translation> +<translation id="8889588091638298603">Quirks Server tarjoaa laitekohtaisia määritystiedostoja, kuten + ICC-näyttöprofiileja näytön kalibrointiin. + + Jos tämän käytännön arvoksi on määritetty epätosi, laite ei yritä + ottaa yhteyttä Quirks Serveriin määritystietojen lataamista varten. + + Jos tämä käytäntö on tosi tai sitä ei ole määritetty, + <ph name="PRODUCT_OS_NAME" /> ottaa + automaattisesti yhteyttä Quirks Serveriin ja lataa määritystiedostot, + jos ne ovat saatavilla, ja tallentaa ne laitteelle. Näitä tiedostoja voidaan + käyttää esimerkiksi liitettyjen näyttöjen laadun parantamiseen.</translation> <translation id="8905426178924715309">Tämä käytäntö on vanhentunut, ja sen tilalla tulee käyttää käytäntöjä ForceGoogleSafeSearch ja ForceYouTubeSafetyMode. Tämä käytäntö ohitetaan, jos joko ForceGoogleSafeSearch tai ForceYouTubeSafetyMode on asetettu. Pakottaa SafeSearch-tilan käyttöön Google-haun kyselyissä ja estää käyttäjiä muuttamasta asetusta. Lisäksi tämä käytäntö pakottaa rajoitetun tilan käyttöön YouTubessa.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 5ccea5f..4b56baa 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Si cette règle est définie sur "True" ou n'est pas définie, <ph name="PRODUCT_NAME" /> autorisera les connexions en tant qu'invité. Les connexions en tant qu'invité correspondent à des profils <ph name="PRODUCT_NAME" /> où toutes les fenêtres s'ouvrent en mode navigation privée. Si cette règle est définie sur "False", <ph name="PRODUCT_NAME" /> n'autorisera pas la création de profils d'invités.</translation> +<translation id="1363275621236827384">Activer l'envoi de requêtes de profils matériels à Quirks Server</translation> <translation id="1397855852561539316">URL de suggestions de recherche du moteur de recherche par défaut</translation> <translation id="1398889361882383850">Permet d'indiquer si les sites Web sont autorisés à exécuter des plug-ins automatiquement. L'exécution automatique des plug-ins peut-être soit autorisée pour tous les sites Web, soit refusée pour tous les sites Web. @@ -753,6 +754,13 @@ La valeur de la règle doit être indiquée en millisecondes. Les valeurs doivent être comprises entre 30 secondes et 24 heures.</translation> <translation id="3528000905991875314">Activer les pages d'erreur alternatives</translation> +<translation id="3538538104630456270">Le paramètre associé était utilisé avant la mise en œuvre de la nouvelle authentification lors de la consultation des mots de passe. Depuis lors, le paramètre et la règle correspondante sont sans effet sur le fonctionnement de Chrome. Le fonctionnement actuel de Chrome est le même que si cette règle était définie sur la désactivation de l'affichage des mots de passe en texte clair dans la page des paramètres du gestionnaire de mots de passe. Cela signifie que la page des paramètres contient seulement un espace réservé, et que l'utilisateur doit cliquer sur "Afficher" (et saisir une nouvelle fois son mot de passe, si nécessaire) pour que Chrome affiche le mot de passe. La description initiale de la règle suit. + + Détermine si l'utilisateur peut afficher les mots de passe en texte clair dans le gestionnaire de mots de passe. + + Si vous désactivez cette règle, le gestionnaire de mots de passe n'autorisera pas l'affichage des mots de passe enregistrés en texte clair dans la fenêtre du gestionnaire de mots de passe. + + Si vous activez ou si vous ne configurez pas cette règle, les utilisateurs pourront voir leurs mots de passe en texte clair dans le gestionnaire de mots de passe.</translation> <translation id="3547954654003013442">Paramètres de proxy</translation> <translation id="3570008976476035109">Bloquer les plug-ins sur ces sites</translation> <translation id="3591584750136265240">Configurer le mode d'authentification lors de la connexion</translation> @@ -1756,6 +1764,7 @@ Si cette règle n'est pas configurée, l'utilisateur a la possibilité de modifier la liste des applications épinglées dans le lanceur d'applications.</translation> <translation id="7132877481099023201">URL autorisées à accéder aux appareils de capture vidéo sans avis préalable</translation> +<translation id="7167436895080860385">Permet aux utilisateurs d'afficher les mots de passe dans le gestionnaire de mots de passe (obsolète).</translation> <translation id="7173856672248996428">Profil éphémère</translation> <translation id="7187256234726597551">Si cette règle est définie sur "True", l'attestation à distance est autorisée pour l'appareil, et un certificat est automatiquement généré et importé sur le serveur de gestion des appareils. @@ -2080,6 +2089,7 @@ <translation id="8197918588508433925">Cette règle définit les extensions autorisées à utiliser l'API Enterprise Platform Keys "chrome.enterprise.platformKeysPrivate.challengeUserKey()" pour l'attestation à distance. Pour pouvoir utiliser l'API, les extensions doivent être ajoutées à cette liste. Si une extension ne figure pas dans la liste, ou si la liste n'est pas définie, l'appel vers l'API échoue, et un code d'erreur est renvoyé.</translation> +<translation id="8214600119442850823">Configure le gestionnaire de mot de passe.</translation> <translation id="8244525275280476362">Délai maximal de récupération après le rejet d'une règle</translation> <translation id="8256688113167012935">Définit quel nom de compte s'affiche sur l'écran de connexion de <ph name="PRODUCT_OS_NAME" /> pour le compte local de l'appareil correspondant. @@ -2273,6 +2283,17 @@ <translation id="8858642179038618439">Forcer le mode sécurisé de YouTube</translation> <translation id="8864975621965365890">Supprime l'invite de fermeture qui s'affiche lors du rendu d'un site par <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Page d'accueil</translation> +<translation id="8889588091638298603">Quirks Server fournit les fichiers de configuration propres au matériel tels que + les profils d'affichage ICC pour régler la calibration du moniteur. + + Si cette règle est définie sur "False", l'appareil n'essaiera pas de + contacter Quirks Server pour télécharger les fichiers de configuration. + + Si cette règle est définie sur "True" ou si elle n'est pas définie, alors + <ph name="PRODUCT_OS_NAME" /> va + automatiquement contacter Quirks Server et télécharger les fichiers de configuration, + s'ils sont disponibles, et les enregistrer sur l'appareil. Ces fichiers pourront, par + exemple, être utilisés pour améliorer la qualité d'affichage des moniteurs connectés.</translation> <translation id="8905426178924715309">Cette règle est abandonnée. Veuillez utiliser ForceGoogleSafeSearch et ForceYouTubeSafetyMode de préférence. Cette règle sera ignorée si des règles ForceGoogleSafeSearch ou ForceYouTubeSafetyMode sont configurées. Cette règle entraîne l'activation obligatoire de SafeSearch pour les recherches sur le Web Google. Ce paramètre ne peut pas être modifié par l'utilisateur. Le mode sécurisé de YouTube est également activé.
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb index 59cee58b..ddfc4d6 100644 --- a/components/policy/resources/policy_templates_gu.xtb +++ b/components/policy/resources/policy_templates_gu.xtb
@@ -98,6 +98,7 @@ <translation id="1359553908012294236">જો આ નીતિ true પર સેટ કરવામાં આવે છે અથવા ગોઠવવામાં આવી નથી, તો <ph name="PRODUCT_NAME" /> અતિથિ લોગિન્સને સક્ષમ કરશે. અતિથિ લોગિન્સ એ <ph name="PRODUCT_NAME" /> પ્રોફાઇલ્સ છે જ્યાં બધી જ વિંડોઝ છુપા મોડમાં હોય છે. જો આ નીતિને false પર સેટ કરવામાં આવે, તો <ph name="PRODUCT_NAME" />, અતિથિ પ્રોફાઇલ્સને પ્રારંભ કરવાની મંજૂરી આપશે નહીં.</translation> +<translation id="1363275621236827384">હાર્ડવેર પ્રોફાઇલ્સ માટે Quirks સર્વર પર ક્વેરીઝ સક્ષમ કરો</translation> <translation id="1397855852561539316">ડિફૉલ્ટ શોધ પ્રદાતાURL સૂચવે છે</translation> <translation id="1398889361882383850">વેબસાઇટ્સને સ્વયંચાલિત રીતે પ્લગિન્સ ચલાવવાની મંજૂરી આપવી કે નહીં તે સેટ કરવાની તમને મંજૂરી આપે છે. સ્વયંચાલિત રીતે પ્લગિન્સ ચલાવવું તમામ વેબસાઇટ્સ માટે મંજૂર કરી શકાય છે અથવા તમામ વેબસાઇટ માટે નકારી શકાય છે. @@ -741,6 +742,13 @@ નીતિ મૂલ્ય મિલિસેકન્ડ્સમાં ઉલ્લેખિત હોવું જોઈએ. મૂલ્યો 30 સેકંડથી 24 કલાકની રેંજમાં જોડાયેલ હોય છે.</translation> <translation id="3528000905991875314">વૈકલ્પિક ભૂલ પૃષ્ઠો સક્ષમ કરો</translation> +<translation id="3538538104630456270">પાસવર્ડ્સ જોવાનું રજૂ કરવા પર પુનઃપ્રમાણીકરણ પહેલાં સંલગ્ન સેટિંગ્સનો ઉપયોગ કરવામાં આવ્યો હતો. ત્યારથી સેટિંગ અને તેથી આ નીતિ Chrome ના વર્તન પર કોઇ અસર કરતી નથી. જો નીતિ પાસવર્ડ સંચાલક સેટિંગ્સ પૃષ્ઠમાં સ્પષ્ટ ટેક્સ્ટમાં પાસવર્ડ્સ બતાવવાનું અક્ષમ કરો પર સેટ કરવામાં આવી હતી તો Chrome નું હાલનું વર્તન સમાન રહે છે. તેનો અર્થ એમ કે સેટિંગ્સ પૃષ્ઠ માત્ર એક પ્લેસહોલ્ડર સમાવે છે અને વપરાશકર્તા "બતાવો" (અને પુનઃપ્રમાણીકરણ, જો લાગુ હોય) ક્લિક કરે માત્ર ત્યારે જ Chrome પાસવર્ડ બતાવે છે. નીતિનું મૂળ વર્ણન નીચે મુજબ છે. + + વપરાશકર્તા પાસવર્ડ સંચાલકમાં સ્પષ્ટ ટેક્સ્ટમાં પાસવર્ડ બતાવી શકે કે નહીં તેનું નિયંત્રણ કરે છે. + + જો તમે આ સેટિંગને અક્ષમ કરો, તો પાસવર્ડ સંચાલક, પાસવર્ડ સંચાલક વિંડોમાં સ્પષ્ટ ટેક્સ્ટમાં સંગ્રહિત પાસવર્ડ્સ બતાવવાની મંજૂરી આપતું નથી. + + જો તમે આ નીતિ સક્ષમ કરો અથવા સેટ ન કરો તો વપરાશકર્તાઓ પાસવર્ડ સંચાલકમાં સ્પષ્ટ ટેક્સ્ટમાં તેમના પાસવર્ડ્સ જોઇ શકે છે.</translation> <translation id="3547954654003013442">પ્રોક્સી સેટિંગ્સ</translation> <translation id="3570008976476035109">આ સાઇટ્સ પર પ્લગિન્સને મંજૂરી આપો</translation> <translation id="3591584750136265240">લોગિન પ્રમાણીકરણ વર્તણૂંકને ગોઠવો</translation> @@ -1733,6 +1741,7 @@ જો આ નીતિને અનસેટ છોડેલી છે, તો વપરાશકર્તા લૉન્ચરમાં પિન કરેલી એપ્લિકેશંસની સૂચીને બદલી શકશે.</translation> <translation id="7132877481099023201">URL કે જેને વિના સંકેતે વિડિઓ કેપ્ચર ઉપકરણોની ઍક્સેસ આપવામાં આવશે</translation> +<translation id="7167436895080860385">વપરાશકર્તાને પાસવર્ડ સંચાલકમાં પાસવર્ડ બતાવવાની મંજૂરી આપો (ટાળેલ)</translation> <translation id="7173856672248996428">ક્ષણિક પ્રોફાઇલ</translation> <translation id="7187256234726597551">જો ટ્રૂ હોય, તો ઉપકરણ અને પ્રમાણપત્ર માટે મંજૂરી આપેલ રિમોટ પ્રમાણન આપમેળે બનશે અને ઉપકરણ સંચાલન સર્વર પર અપલોડ થશે. @@ -2056,6 +2065,7 @@ આ નીતિ સક્રિય નિર્દેશિકા ડોમેન સાથે ન જોડાયેલ Windows આવૃત્તિઓ પર ઉપલબ્ધ નથી.</translation> <translation id="8197918588508433925">આ નીતિ દૂરસ્થ પ્રમાણન માટે એન્ટરપ્રાઇઝ પ્લેટફોર્મ કીઝ API chrome.enterprise.platformKeysPrivate.challengeUserKey() નો ઉપયોગ કરવા માટેનાં મંજૂર એક્સ્ટેન્શન્સને ઉલ્લેખિત કરે છે. API નો ઉપયોગ કરવા માટે એક્સ્ટેન્શન્સને આ સૂચિમાં ઉમેરવા આવશ્યક છે. જો કોઈ એક્સ્ટેન્શન સૂચિમાં નથી, અથવા તો સૂચિ સેટ કરેલી નથી, તો API પરનો કૉલ એક ભૂલ કોડ સાથે નિષ્ફળ થશે.</translation> +<translation id="8214600119442850823">પાસવર્ડ સંચાલકને ગોઠવે છે.</translation> <translation id="8244525275280476362">કોઈ નીતિ અમાન્યતા પછીનો મહત્તમ આનયન વિલંબ</translation> <translation id="8256688113167012935">સંબંધિત ઉપકરણ-સ્થાનિક એકાઉન્ટ માટે લૉગિન સ્ક્રીન પર <ph name="PRODUCT_OS_NAME" /> નામ બતાવે છે તેને નિયંત્રિત કરે છે. @@ -2250,6 +2260,18 @@ <translation id="8858642179038618439">YouTube સલામતી મોડને ફરજ પાડવી</translation> <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" /> દ્વારા કોઈ સાઇટ રેન્ડર કરવામાં આવે ત્યારે દેખાતા ટર્નડાઉન સંકેતને નાબૂદ કરે છે.</translation> <translation id="8870318296973696995">હોમ પેજ</translation> +<translation id="8889588091638298603">Quirks સર્વર હાર્ડવેર-મુજબની ગોઠવણી ફાઇલો પ્રદાન કરે છે, જેમ કે + મોનિટર માપનને સમાયોજિત કરવા માટે ICC પ્રદર્શન પ્રોફાઇલ્સ. + + જ્યારે આ નીતિ false પર સેટ કરેલ હોય, ત્યારે ગોઠવણી ફાઇલોને ડાઉનલોડ + કરવા માટે ઉપકરણ Quirks સર્વરનો સંપર્ક કરવાનો પ્રયાસ કરશે નહીં. + + જો આ નીતિ true હોય અથવા ગોઠવેલ ન હોય ત્યારે + <ph name="PRODUCT_OS_NAME" /> આપમેળે + Quirks સર્વરનો સંપર્ક કરશે અને જો ઉપલબ્ધ હોય, તો ગોઠવણી ફાઇલો + ડાઉનલોડ કરશે અને તેમને ઉપકરણ પર સંગ્રહિત કરશે. આવી ફાઇલોનો ઉપયોગ + કદાચ, ઉદાહરણ તરીકે, જોડાયેલ મોનિટર્સની પ્રદર્શન ગુણવત્તાને બહેતર + બનાવવા માટે કરવામાં આવે છે.</translation> <translation id="8905426178924715309">આ નીતિ ટાળવામાં આવી છે, કૃપા કરીને તેને બદલે ForceGoogleSafeSearch અને ForceYouTubeSafetyMode નો ઉપયોગ કરો. જો ForceGoogleSafeSearch અથવા ForceYouTubeSafetyMode નીતિને સેટ કરવામાં આવી હશે, તો આ નીતિને અવગણવામાં આવશે. ક્વેરીઝને Google વેબ શોધમાં સક્રિય પર સેટ સલામત શોધ સાથે પૂર્ણ કરવાની ફરજ પાડે છે અને વપરાશકર્તાઓને આ સેટિંગ બદલતાં અટકાવે છે. આ સેટિંગ YouTube પર સલામત મોડને પણ ફરજ પાડે છે.
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb index 9e606d6f..f3d28b2 100644 --- a/components/policy/resources/policy_templates_hi.xtb +++ b/components/policy/resources/policy_templates_hi.xtb
@@ -93,6 +93,7 @@ <translation id="1359553908012294236">यदि यह नीति सत्य पर सेट है या कॉन्फ़िगर नहीं है, तो <ph name="PRODUCT_NAME" /> के द्वारा अतिथि प्रवेश को सक्षम किया जाएगा. अतिथि प्रवेश वे <ph name="PRODUCT_NAME" /> प्रोफ़ाइल हैं जहां सभी विंडो गुप्त मोड में होती हैं. यदि यह नीति असत्य पर सेट है, तो <ph name="PRODUCT_NAME" /> अतिथि प्रोफ़ाइल को प्रारंभ करने की अनुमति नहीं देगा.</translation> +<translation id="1363275621236827384">हार्डवेयर प्रोफ़ाइल के लिए Quirks Server में क्वेरी सक्षम करें</translation> <translation id="1397855852561539316">सामान्य खोज प्रदाता सुझाव URL</translation> <translation id="1398889361882383850">आपको यह सेट करने देती है कि वेबसाइटों को अपने आप प्लग इन चलाने की अनुमति है या नहीं. अपने आप चलने वाले प्लग इन की या तो सभी वेबसाइटों के लिए अनुमति दी जा सकती है या सभी वेबसाइटों के लिए अनुमति अस्वीकृत की जा सकती है. @@ -719,6 +720,13 @@ नीति का मान मिलीसेकंड में निर्दिष्ट किया जाना चाहिए. मानों को 30 सेकंड से 24 घंटे की सीमा में क्लैम्प किया जाता है.</translation> <translation id="3528000905991875314">वैकल्पिक त्रुटि पृष्ठों को सक्षम करें</translation> +<translation id="3538538104630456270">पासवर्ड देखने के लिए पुनः प्रमाणीकरण के शुरू होने से पहले संबद्ध सेटिंग का उपयोग किया था. तब से, उस सेटिंग का और इस पॉलिसी का Chrome के व्यवहार पर कोई प्रभाव नहीं पड़ता था. यदि पॉलिसी को पासवर्ड प्रबंधक सेटिंग पृष्ठ में स्पष्ट रूप से लेख में पासवर्ड दिखाना अक्षम करने पर सेट किया गया था, तो Chrome का वर्तमान व्यवहार अभी वही है. इसका अर्थ यह है कि सेटिंग पृष्ठ में बस प्लेसहोल्डर है और उपयोगकर्ता द्वारा केवल “दिखाएं” (और यदि लागू हो, तो पुनः प्रमाणीकरण) क्लिक करने पर Chrome पासवर्ड दिखा देता है. नीति का मूलभूत वर्णन निम्न का पालन करता है. + + यह नियंत्रित करती है कि क्या उपयोगकर्ता पासवर्ड प्रबंधक में पासवर्ड को स्पष्ट रूप से लेख में दिखा सकता है. + + यदि आप इस सेटिंग को अक्षम करते हैं, तो पासवर्ड प्रबंधक संग्रहीत पासवर्ड को पासवर्ड प्रबंधक विंडो में नहीं दिखाने देता. + + यदि आप इस पॉलिसी को सक्षम करते हैं या सेट नहीं करते हैं, तो उपयोगकर्ता पासवर्ड प्रबंधक में अपने पासवर्ड को स्पष्ट रूप से लेख में देख सकेंगे.</translation> <translation id="3547954654003013442">प्रॉक्सी सेटिंग</translation> <translation id="3570008976476035109">इन साइटों पर प्लग इन अवरुद्ध करें</translation> <translation id="3591584750136265240">लॉगिन प्रमाणीकरण व्यवहार काॅन्फ़िगर करें</translation> @@ -1681,6 +1689,7 @@ यदि यह नीति सेट किए बिना छोड़ दी जाती है, तो उपयोगकर्ता लॉन्चर में पिन किए गए ऐप्स की सूची बदल सकता है.</translation> <translation id="7132877481099023201">ऐसे URL जिन्हें संकेत किए बिना ही वीडियो कैप्चर डिवाइस की एक्सेस दी जाएगी</translation> +<translation id="7167436895080860385">उपयोगकर्ताओं को पासवर्ड प्रबंधक में पासवर्ड दिखाने की अनुमति दें (बहिष्कृत)</translation> <translation id="7173856672248996428">अल्पकालिक प्रोफ़ाइल</translation> <translation id="7187256234726597551">सही होने पर, दूरस्थ अनुप्रमाणन डिवाइस के लिए अनुमत होता है और एक प्रमाणपत्र अपने आप जनरेट हो जाएगा तथा डिवाइस प्रबंधन सर्वर पर अपलोड कर दिया जाएगा. @@ -1992,6 +2001,7 @@ <translation id="8197918588508433925">यह नीति दूरस्थ अनुप्रमाणन के लिए Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() का उपयोग करने के लिए अनुमत एक्सटेंशन निर्दिष्ट करती है. API का उपयोग करने के लिए एक्सटेंशन को इस सूची में जोड़ा जाना चाहिए. यदि कोई एक्सटेंशन सूची में नहीं है, या सूची सेट नहीं की जाती, तो API को किया जाने वाला एक कॉल त्रुटि के साथ विफल हो जाएगा.</translation> +<translation id="8214600119442850823">पासवर्ड प्रबंधक को कॉन्फ़िगर करती है.</translation> <translation id="8244525275280476362">नीति अमान्यकरण से पहले अधिकतम फ़ेच विलंब</translation> <translation id="8256688113167012935">अनुरूप डिवाइस-स्थानीय खाते की प्रवेश स्क्रीन पर दिखने वाले खाता नाम <ph name="PRODUCT_OS_NAME" /> को नियंत्रित करता है. @@ -2169,6 +2179,17 @@ <translation id="8858642179038618439">बलपूर्वक YouTube सुरक्षित मोड</translation> <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" /> द्वारा किसी साइट को रेंडर किए जाने पर दिखाई देने वाले टर्नडाउन संकेत को छिपा देती है.</translation> <translation id="8870318296973696995">मुख्यपृष्ठ</translation> +<translation id="8889588091638298603">Quirks Server हार्डवेयर-विशिष्ट कॉन्फ़िगरेशन फ़ाइलें प्रदान करता है, जैसे + मॉनीटर कैलिब्रेशन एडजस्ट करने के लिए ICC प्रदर्शन प्रोफ़ाइल. + + जब इस पॉलिसी को गलत पर सेट किया जाता है, तो डिवाइस कॉन्फ़िगरेशन फ़ाइलों + को डाउनलोड करने के लिए Quirks Server से संपर्क करने का प्रयास नहीं करेगा. + + यदि यह पॉलिसी सत्य पर सेट है या कॉन्फ़िगर नहीं की गई है, तो + <ph name="PRODUCT_OS_NAME" /> अपने आप + Quirks Server से संपर्क करेगा और, यदि उपलब्ध हो, तो कॉन्फ़िगरेशन फ़ाइलों को डाउनलोड करेगा, + और उन्हें डिवाइस पर संग्रहीत करेगा. उदाहरण के लिए, हो सकता है कि ऐसी फ़ाइलों का उपयोग + अटैच किए गए मॉनीटर के प्रदर्शन की गुणवत्ता को बेहतर बनाने के लिए किया जाए.</translation> <translation id="8905426178924715309">इस पॉलिसी को बहिष्कृत किया गया है, कृपया इसके स्थान पर ForceGoogleSafeSearch और ForceYouTubeSafetyMode का उपयोग करें. यदि ForceGoogleSafeSearch या ForceYouTubeSafetyMode पॉलिसी सेट की जाती हैं, तो इस पॉलिसी को अनदेखा कर दिया जाएगा. यह Google वेब खोज में की जाने वाली क्वेरी को सक्रिय पर सेट की गई सुरक्षित खोज के साथ किए जाने के लिए बाध्य करती है और उपयोगकर्ताओं को यह सेटिंग बदलने से रोकती है. यह सेटिंग YouTube पर सुरक्षा मोड को भी बाध्य करती है.
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb index 37fcdd1..60548745 100644 --- a/components/policy/resources/policy_templates_hr.xtb +++ b/components/policy/resources/policy_templates_hr.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">Ako se pravilo postavi na "True" ili se ne konfigurira, <ph name="PRODUCT_NAME" /> omogućit će prijave gostiju. Prijave gostiju predstavljaju profile preglednika <ph name="PRODUCT_NAME" /> u kojima se svi prozori otvaraju u anonimnom načinu. Ako se pravilo postavi na "False", <ph name="PRODUCT_NAME" /> neće dopustiti pokretanje profila gostiju.</translation> +<translation id="1363275621236827384">Omogući slanje upita Quirksovu poslužitelju za hardverske profile</translation> <translation id="1397855852561539316">Predloženi URL zadanog davatelja usluge pretraživanja</translation> <translation id="1398889361882383850">Omogućuje vam da postavite hoće li web-lokacijama biti dopušteno automatsko pokretanje dodataka. Automatsko pokretanje dodataka može biti dopušteno za sve web-lokacije ili odbijeno za sve web-lokacije. @@ -680,6 +681,13 @@ Vrijednost pravila treba navesti u milisekundama. Vrijednosti su ograničene u rasponu od 30 sekundi do 24 sata.</translation> <translation id="3528000905991875314">Omogući alternativne stranice pogrešaka</translation> +<translation id="3538538104630456270">Povezana postavka upotrijebljena je prije uvođenja ponovne autentifikacije za prikaz zaporki. Od tada ta postavka pa ni ovo pravilo nisu utjecali na ponašanje Chromea. Trenutačno ponašanje Chromea sada je isto kao da se tim pravilom onemogućuje prikaz čitljivog teksta zaporki na stranici postavki upravitelja zaporki. To znači da stranica postavki sadrži samo rezervirano mjesto, a Chrome će prikazati zaporku tek kad korisnik klikne "Prikaži" (i izvrši ponovnu autentifikaciju ako je primjenjivo). Izvorni opis pravila naveden je u nastavku. + + Upravlja time može li korisnik prikazati zaporke čitljivim tekstom u upravitelju zaporki. + + Ako onemogućite tu postavku, upravitelj zaporki ne dopušta prikaz spremljenih zaporki čitljivim tekstom u prozoru upravitelja zaporki. + + Ako omogućite tu postavku ili ne postavite pravilo, korisnicima se zaporke u upravitelju zaporki prikazuju čitljivim tekstom.</translation> <translation id="3547954654003013442">Proxy postavke</translation> <translation id="3570008976476035109">Blokiraj dodatke na ovim web-lokacijama</translation> <translation id="3591584750136265240">Konfiguriraj ponašanje autentifikacije tijekom prijave</translation> @@ -1577,6 +1585,7 @@ Ako se to pravilo ne postavi, korisnik može mijenjati popis prikvačenih aplikacija u pokretaču.</translation> <translation id="7132877481099023201">URL-ovi koji će dobiti pristup uređajima za videosnimanje bez postavljanja upita</translation> +<translation id="7167436895080860385">Omogući korisnicima prikazivanje zaporki u upravitelju zaporki (zastarjelo)</translation> <translation id="7173856672248996428">Kratkotrajni profil</translation> <translation id="7187256234726597551">Ako je točno, daljinsko atestiranje dopušteno je za uređaj i certifikat će se automatski generirati i prenijeti na poslužitelj za upravljanje uređajem. @@ -1872,6 +1881,7 @@ <translation id="8197918588508433925">To pravilo određuje dopuštena proširenja za upotrebu API-ja Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() za daljinsko atestiranje. Proširenja se moraju dodati na taj popis da bi upotrebljavala taj API. Ako proširenje nije na popisu ili ako popis nije postavljen, poziv API-ju vratit će kôd pogreške.</translation> +<translation id="8214600119442850823">Konfigurira upravitelja zaporki.</translation> <translation id="8244525275280476362">Maksimalna odgoda dohvaćanja nakon poništavanja valjanosti pravila</translation> <translation id="8256688113167012935">Kontrolira naziv računa koji prikazuje proizvod <ph name="PRODUCT_OS_NAME" /> na zaslonu prijave za odgovarajući lokalni račun na uređaju. @@ -2045,6 +2055,17 @@ <translation id="8858642179038618439">Nametni Siguran način rada na YouTubeu</translation> <translation id="8864975621965365890">Zaustavlja upit za odbijanje koji se pojavljuje kada web-lokaciju generira <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Početna stranica</translation> +<translation id="8889588091638298603">Quirksov poslužitelj pruža konfiguracijske datoteke za hardver, primjerice + profile ICC zaslona za kalibriranje monitora. + + Kad se to pravilo postavi na "false", uređaj neće pokušavati + kontaktirati Quirksov poslužitelj radi preuzimanja konfiguracijskih datoteka. + + Ako se pravilo postavi na "true" ili se ne konfigurira, + operativni sustav <ph name="PRODUCT_OS_NAME" /> + automatski će kontaktirati Quirksov poslužitelj i preuzeti konfiguracijske datoteke + ako su dostupne i pohraniti ih na uređaj. Pomoću tih se datoteka, na primjer, + može poboljšati kvaliteta prikaza priključenih monitora.</translation> <translation id="8905426178924715309">To je pravilo obustavljeno, pa umjesto njega upotrijebite "ForceGoogleSafeSearch" i "ForceYouTubeSafetyMode". Pravilo će se zanemariti ako se postave pravila "ForceGoogleSafeSearch" ili "ForceYouTubeSafetyMode". Nameće da se upiti u Google pretraživanju weba provode uz aktivirano Sigurno pretraživanje i korisnicima sprječava promjenu te postavke. Ta postavka nameće i Siguran način rada na YouTubeu.
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb index f903a5e..9549e204 100644 --- a/components/policy/resources/policy_templates_hu.xtb +++ b/components/policy/resources/policy_templates_hu.xtb
@@ -81,6 +81,7 @@ <translation id="1359553908012294236">Ha a házirend értéke igaz, vagy ha nincs beállítva, akkor a <ph name="PRODUCT_NAME" /> engedélyezi a vendégüzemmódban történő bejelentkezést. A vendégüzemmód olyan profil a <ph name="PRODUCT_NAME" /> böngészőben, amelyben az összes ablak inkognitómódban van. Ha a házirend értéke hamis, a <ph name="PRODUCT_NAME" /> nem teszi lehetővé vendégprofilok indítását.</translation> +<translation id="1363275621236827384">Lekérdezések engedélyezése a Quirks Server felé a hardverprofiloknál</translation> <translation id="1397855852561539316">Alapértelmezett keresési szolgáltató javasolt URL-je</translation> <translation id="1398889361882383850">Lehetővé teszi annak beállítását, hogy a webhelyek számára engedélyezett-e a bővítmények automatikus futtatása. A bővítmények automatikus futtatását az összes webhely számára engedélyezheti, illetve megtagadhatja. @@ -682,6 +683,13 @@ Az irányelv értékét ezredmásodpercben kell megadni. Az értékek 30 másodperc és 24 óra közé eshetnek.</translation> <translation id="3528000905991875314">Alternatív hibaoldalak engedélyezése</translation> +<translation id="3538538104630456270">A kapcsolódó beállítás még azelőtt volt használatban, hogy a jelszavak megtekintésénél való újrahitelesítést bevezettük. A módosítás óta a beállítás nem volt hatással a Chrome viselkedésére (ennek következtében a házirend sem). A Chrome jelenlegi viselkedése ugyanaz, mintha a házirendnél az lenne beállítva, hogy nem jelenhetnek meg a jelszavak látható szövegként a jelszókezelő beállításainak oldalán. Ez azt jelenti, hogy a beállítások oldala csak egy helyőrzőt tartalmaz, és a Chrome csak akkor jeleníti meg a jelszót, ha a felhasználó rákattint a „Megjelenítés” lehetőségre (és szükség esetén újrahitelesít). A házirend eredeti leírása alább látható. + + Azt szabályozza, hogy a felhasználók megjeleníthetik-e jelszavaikat egyszerű szövegként a jelszókezelőben. + + Ha kikapcsolja ezt a beállítást, a jelszókezelő nem engedi a tárolt jelszavak egyszerű szövegként való megjelenítését a jelszókezelő ablakában.. + + Ha bekapcsolja, vagy nem állítja be ezt a beállítást, a felhasználók megtekinthetik egyszerű szövegként a tárolt jelszavakat a jelszókezelőben.</translation> <translation id="3547954654003013442">Proxybeállítások</translation> <translation id="3570008976476035109">Bővítmények tiltása ezeken a webhelyeken</translation> <translation id="3591584750136265240">Bejelentkezési hitelesítési viselkedés konfigurálása</translation> @@ -1579,6 +1587,7 @@ Ha nincs beállítva, akkor a felhasználó módosíthatja az indítóban rögzített alkalmazások listáját.</translation> <translation id="7132877481099023201">Azon URL-ek, amelyek rákérdezés nélkül hozzáférést kapnak a videorögzítő eszközökhöz</translation> +<translation id="7167436895080860385">Lehetővé teszi, hogy a felhasználók megjelenítsék a jelszavakat a Jelszókezelőben (megszüntetve)</translation> <translation id="7173856672248996428">Ideiglenes profil</translation> <translation id="7187256234726597551">Ha igaz, akkor az eszköz használhatja a távoli tanúsítást, és a rendszer automatikusan létrehoz és feltölt egy tanúsítványt az eszközkezelő szerverre. @@ -1875,6 +1884,7 @@ <translation id="8197918588508433925">Ez a házirend adja meg, hogy mely bővítmények számára engedélyezett az Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() paraméterének használata a távoli tanúsításhoz. Az API használatához fel kell venni a bővítményeket erre a listára. Ha egy bővítmény nincs a listán, vagy a lista nincs beállítva, akkor az API hívása hibakóddal leáll.</translation> +<translation id="8214600119442850823">A jelszókezelőt konfigurálja</translation> <translation id="8244525275280476362">Maximális lehívási késleltetés házirend-érvénytelenítés után</translation> <translation id="8256688113167012935">A(z) <ph name="PRODUCT_OS_NAME" /> által az eszköz megfelelő helyi fiókjának a bejelentkezési képernyőn megjelenített fióknevét szabályozza. @@ -2046,6 +2056,17 @@ <translation id="8858642179038618439">A YouTube Biztonságos módjának kényszerítése</translation> <translation id="8864975621965365890">Elrejti a kikapcsolási figyelmeztetést, amely akkor jelenik meg, ha egy webhelyet a(z) <ph name="PRODUCT_FRAME_NAME" /> jeleníti meg.</translation> <translation id="8870318296973696995">Kezdőoldal</translation> +<translation id="8889588091638298603">A Quirks Server hardverspecifikus konfigurációs fájlokat, például + ICC megjelenítési profilokat biztosít a monitor kalibrálásához. + + Ha a házirend értéke hamis, akkor az eszköz nem próbál kapcsolatba + lépni a Quirks Serverrel a konfigurációs fájlok letöltése érdekében. + + Ha a házirend értéke igaz, vagy nincs konfigurálva, akkor a + <ph name="PRODUCT_OS_NAME" /> automatikusan felveszi + a kapcsolatot a Quirks Serverrel, és letölti a konfigurációs fájlokat + (ha rendelkezésre állnak), majd az eszközön tárolja őket. Az ilyen fájlok + használhatók például arra, hogy javítsák a csatlakozó monitorok képminőségét.</translation> <translation id="8905426178924715309">Ez a házirend elavult, kérjük, használja helyette a ForceGoogleSafeSearch és a ForceYouTubeSafetyMode házirendet. Ha a ForceGoogleSafeSearch vagy a ForceYouTubeSafetyMode be van állítva, akkor ezt a házirendet figyelmen kívül hagyja a böngésző. Hatására a Google Internetes Kereső bekapcsolt Biztonságos Keresés mellett végez lekérdezéseket, és megakadályozza, hogy a felhasználók módosítsák ezt a beállítást. Ezenkívül a YouTube-on is aktiválja a Biztonságos módot.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 0ec2ad6..cd7e7be 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">Jika kebijakan ini disetel ke True atau tidak dikonfigurasi, <ph name="PRODUCT_NAME" /> akan mengaktifkan proses masuk tamu. Proses masuk tamu adalah profil <ph name="PRODUCT_NAME" /> dengan semua jendela dalam mode penyamaran. Jika kebijakan ini disetel ke False, <ph name="PRODUCT_NAME" /> tidak akan mengizinkan profil tamu dimulai.</translation> +<translation id="1363275621236827384">Mengaktifkan kueri ke Quirks Server untuk profil perangkat keras</translation> <translation id="1397855852561539316">URL saran penyedia penelusuran default</translation> <translation id="1398889361882383850">Memungkinkan Anda untuk menyetel apakah situs web diizinkan untuk menjalankan plugin secara otomatis. Plugin yang berjalan secara otomatis dapat diizinkan untuk semua situs web atau ditolak untuk semua situs web. @@ -685,6 +686,13 @@ Nilai kebijakan harus ditentukan dalam milidetik. Nilai ditetapkan dengan rentang antara 30 detik hingga 24 jam.</translation> <translation id="3528000905991875314">Mengaktifkan laman kesalahan alternatif</translation> +<translation id="3538538104630456270">Setelan yang dikaitkan telah digunakan sebelum autentikasi ulang lihat sandi diperkenalkan. Oleh karena itu, setelan dan kebijakan ini tidak berpengaruh pada perilaku Chrome. Perilaku Chrome saat ini sama dengan jika kebijakan ini disetel untuk menonaktifkan menampilkan sandi dalam teks yang jelas di laman setelan pengelola sandi. Artinya, laman setelan tersebut hanya berisi placeholder, dan Chrome hanya akan menampilkan sandi saat pengguna mengeklik "Tampilkan" (dan autentikasi ulang, jika berlaku). Deskripsi asli kebijakan ini tercantum di bawah. + + Mengontrol apakah pengguna dapat menampilkan sandi dalam teks yang jelas di pengelola sandi atau tidak. + + Jika Anda menonaktifkan setelan ini, pengelola sandi tidak mengizinkan penampilan sandi tersimpan dalam teks yang jelas di jendela pengelola sandi. + + Jika Anda mengaktifkan atau tidak menyetel kebijakan ini, pengguna dapat melihat sandinya dalam teks yang jelas di pengelola sandi.</translation> <translation id="3547954654003013442">Setelan proxy</translation> <translation id="3570008976476035109">Mencekal plugin di situs ini</translation> <translation id="3591584750136265240">Mengonfigurasi perilaku autentikasi proses masuk</translation> @@ -1582,6 +1590,7 @@ Jika kebijakan ini dibiarkan tanpa disetel, pengguna dapat mengubah daftar aplikasi tersemat pada peluncur.</translation> <translation id="7132877481099023201">URL yang akan diberi akses ke perangkat perekam video tanpa peringatan</translation> +<translation id="7167436895080860385">Mengizinkan pengguna menampilkan sandi di Pengelola Sandi (tak lagi digunakan)</translation> <translation id="7173856672248996428">Profil singkat</translation> <translation id="7187256234726597551">Jika true, pengesahan jarak jauh diizinkan untuk perangkat dan sertifikat akan otomatis dibuat serta diunggah ke Server Pengelolaan Perangkat. @@ -1878,6 +1887,7 @@ <translation id="8197918588508433925">Kebijakan ini menentukan ekstensi yang diizinkan untuk menggunakan API Kunci Platform Perusahaan chrome.enterprise.platformKeysPrivate.challengeUserKey() untuk pengesahan jarak jauh. Ekstensi harus ditambahkan ke daftar ini untuk menggunakan API. Jika ekstensi tidak ada dalam daftar, atau daftar tidak disetel, panggilan ke API akan gagal dengan suatu kode kesalahan.</translation> +<translation id="8214600119442850823">Mengonfigurasi pengelola sandi.</translation> <translation id="8244525275280476362">Penundaan mengambil maksimum setelah kebijakan invalidasi</translation> <translation id="8256688113167012935">Mengontrol nama akun yang ditampilkan <ph name="PRODUCT_OS_NAME" /> di layar masuk untuk akun lokal perangkat yang sesuai. @@ -2047,6 +2057,17 @@ <translation id="8858642179038618439">Memaksakan Mode Perlindungan YouTube</translation> <translation id="8864975621965365890">Menimpa permintaan penghentian yang muncul saat situs dirender oleh <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Beranda</translation> +<translation id="8889588091638298603">Quirks Server menyediakan file konfigurasi khusus perangkat keras, seperti + profil tampilan ICC untuk menyesuaikan kalibrasi monitor. + + Jika kebijakan ini disetel ke False, perangkat tidak akan mencoba + menghubungi Quirks Server untuk mengunduh file konfigurasi. + + Jika kebijakan ini disetel ke True atau tidak dikonfigurasi, + <ph name="PRODUCT_OS_NAME" /> akan + otomatis menghubungi Quirks Server dan mengunduh file konfigurasi, + jika tersedia, dan menyimpannya di perangkat. File tersebut dapat, + misalnya, digunakan untuk meningkatkan kualitas tampilan monitor yang terpasang.</translation> <translation id="8905426178924715309">Kebijakan ini tidak digunakan lagi, gunakan ForceGoogleSafeSearch dan ForceYouTubeSafetyMode sebagai gantinya. Kebijakan ini akan diabaikan jika kebijakan ForceGoogleSafeSearch atau ForceYouTubeSafetyMode disetel. Memaksa kueri di Google Penelusuran Web untuk dilakukan dengan TelusurAman yang diaktifkan, dan mencegah pengguna mengubah setelan ini. Setelan ini juga memaksa Mode Perlindungan di YouTube.
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb index d7ba2ae..89e96a3 100644 --- a/components/policy/resources/policy_templates_iw.xtb +++ b/components/policy/resources/policy_templates_iw.xtb
@@ -81,6 +81,7 @@ <translation id="1359553908012294236">אם מדיניות זו מוגדרת כ-true או אינה מוגדרת, <ph name="PRODUCT_NAME" /> יאפשר התחברויות של אורחים. התחברויות של אורחים הן פרופילים של <ph name="PRODUCT_NAME" /> שבהם כל החלונות הם במצב גלישה בסתר. אם מדיניות זו מוגדרת כ-false, <ph name="PRODUCT_NAME" /> לא יאפשר להפעיל פרופילים של אורחים.</translation> +<translation id="1363275621236827384">התר שליחת שאילתות אל Quirks Server בנושא פרופילים של חומרה</translation> <translation id="1397855852561539316">כתובת אתר שמציעה ספק חיפוש המוגדר כברירת מחדל</translation> <translation id="1398889361882383850">מאפשר לקבוע אם מותר לאתרים להפעיל יישומי פלאגין באופן אוטומטי. הפעלה אוטומטית של יישומי פלאגין יכולה להיות מותרת בכל האתרים או אסורה בכל האתרים. @@ -679,6 +680,13 @@ יש לציין את ערך המדיניות באלפיות השנייה. הערכים מוגבלים לטווח של 30 שניות עד 24 שעות.</translation> <translation id="3528000905991875314">הפעל דפי שגיאה חלופיים</translation> +<translation id="3538538104630456270">ההגדרה המשויכת קדמה לשימוש באימות מחדש בעת הצגת סיסמאות. מאז השינוי אין להגדרה הזו השפעה על ההתנהגות של Chrome, ולכן גם למדיניות הזו אין עליה השפעה. ההתנהגות הנוכחית של Chrome זהה להתנהגות במצב שבו המדיניות הזו מושבתת, והסיסמאות מוצגות כטקסט גלוי בדף ההגדרות של מנהל הסיסמאות. המשמעות היא שדף ההגדרות מציג רק placeholder, ורק לאחר שהמשתמש לוחץ על 'הצג' (ומאמת מחדש את זהותו, במקרה הצורך) Chrome מציג את הסיסמה. להלן התיאור המקורי של המדיניות. + + קובעת האם המשתמש רשאי להציג סיסמאות בטקסט גלוי במנהל הסיסמאות. + + אם תשבית את ההגדרה הזו, מנהל הסיסמאות לא יתיר הצגה של סיסמאות מאוחסנות כטקסט גלוי בחלון מנהל הסיסמאות. + + אם תפעיל את המדיניות או לא תגדיר אותה, משתמשים יוכלו להציג את הסיסמאות שלהם כטקסט גלוי במנהל הסיסמאות.</translation> <translation id="3547954654003013442">הגדרות Proxy</translation> <translation id="3570008976476035109">חסום יישומי פלאגין באתרים אלה</translation> <translation id="3591584750136265240">הגדרה של התנהגות האימות בהתחברות</translation> @@ -1557,6 +1565,7 @@ אם מדיניות זו אינה מוגדרת, המשתמש רשאי לשנות את רשימת היישומים המוצמדים במפעיל.</translation> <translation id="7132877481099023201">כתובות אתרים שיקבלו גישה למכשירי צילום וידאו ללא הצגת בקשה</translation> +<translation id="7167436895080860385">התר למשתמשים להציג סיסמאות במנהל הסיסמאות (יצא משימוש)</translation> <translation id="7173856672248996428">פרופיל זמני</translation> <translation id="7187256234726597551">אם המדיניות מוגדרת ל-True, הזדהות מרחוק מותרת במכשיר ואישור יונפק ויועלה אוטומטית לשרת ניהול המכשיר. @@ -1851,6 +1860,7 @@ <translation id="8197918588508433925">מדיניות זו מציינת את התוספים המורשים לשימוש בממשק ה-API של Enterprise Platform Keys chrome.enterprise.platformKeysPrivate.challengeUserKey() עבור הזדהות מרחוק. כדי שתוספים יוכלו להשתמש בממשק ה-API, יש להוסיף אותם לרשימה זו. אם תוסף אינו כלול ברשימה, או אם הרשימה אינה מוגדרת, הקריאה לממשק ה-API תיכשל בצירוף קוד שגיאה.</translation> +<translation id="8214600119442850823">מגדירה את מנהל הסיסמאות.</translation> <translation id="8244525275280476362">העיכוב המרבי לאחזור לאחר ביטול תוקף של מדיניות</translation> <translation id="8256688113167012935">מדיניות זו קובעת את שם החשבון <ph name="PRODUCT_OS_NAME" /> המוצג במסך ההתחברות עבור החשבון המתאים המקומי במכשיר. @@ -2013,6 +2023,17 @@ <translation id="8858642179038618439">אילוץ מצב בטיחות של YouTube</translation> <translation id="8864975621965365890">מניעת השאלה לפני ביטול המופיעה כאשר אתר מוצג על ידי <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">דף הבית</translation> +<translation id="8889588091638298603">ה-Quirks Server מספק קובצי תצורה שהם ספציפיים לרכיבי חומרה מסוימים, כמו + פרופילי תצוגה של ICC המשמשים להתאמה של כיול הצג. + + כשמדיניות זו מוגדרת כ-false, המכשיר לא ינסה ליצור קשר עם Quirks Server + להורדה של קובצי התצורה. + + אם המדיניות הזו מוגדרת כ-true או שאינה מוגדרת, + <ph name="PRODUCT_OS_NAME" /> יצור קשר + באופן אוטומטי עם Quirks Server, יוריד קובצי תצורה אם הם זמינים + ויאחסן אותם במכשיר. הקבצים האלה יכולים לשמש, לדוגמה, + כדי לשפר את איכות התצוגה בצגים המחוברים.</translation> <translation id="8905426178924715309">מדיניות זו הוצאה משימוש. השתמש ב-ForceGoogleSafeSearch וב-ForceYouTubeSafetyMode במקומה. מדיניות זו לא תובא בחשבון אם ForceGoogleSafeSearch או ForceYouTubeSafetyMode יוגדרו. מדיניות זו מאלצת ביצוע שאילתות בחיפוש האינטרנט של Google כאשר 'חיפוש בטוח' מוגדר כ'פעיל' ומונעת את השינוי של הגדרה זו על ידי המשתמשים. הגדרה זו גם מאלצת את YouTube לפעול במצב בטוח.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index fee8eb9..2cb2ff5 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -81,6 +81,7 @@ <translation id="1359553908012294236">このポリシーが true に設定されているか未設定の場合、<ph name="PRODUCT_NAME" /> ではゲストモードでのログインが可能です。ゲストモードでのログインには、すべてのウィンドウをシークレット モードで表示する <ph name="PRODUCT_NAME" /> プロフィールが適用されます。 このポリシーが false に設定されている場合、ゲストモードのプロフィールで <ph name="PRODUCT_NAME" /> を使用することはできません。</translation> +<translation id="1363275621236827384">ハードウェア プロファイルを Quirks サーバーに問い合わせられるようにする</translation> <translation id="1397855852561539316">デフォルト検索プロバイダ サジェスト URL</translation> <translation id="1398889361882383850">ウェブサイトに対してプラグインの自動実行を許可するかどうかを設定できます。プラグインの自動実行は、すべてのウェブサイトに対して許可または禁止できます。 @@ -679,6 +680,13 @@ ポリシーの値はミリ秒で指定します。値の範囲は 30 秒~24 時間です。</translation> <translation id="3528000905991875314">別のエラー ページを有効にする</translation> +<translation id="3538538104630456270">このポリシーに関連付けられている設定は以前使用されていましたが、パスワード表示での再認証が導入されて以降、その設定(したがってこのポリシー)は Chrome の動作に影響しなくなりました。現在の Chrome の動作は、パスワード マネージャの設定ページでパスワードの平文表示を無効にするようポリシーを設定した場合と同じになります。つまり、設定ページには単にプレースホルダが表示され、ユーザーが [表示] をクリックして(再認証が必要な場合は再認証を行って)初めて Chrome にパスワードが表示されます。ポリシーの元の説明は次のとおりです。 + + パスワード マネージャでパスワードの平文表示を可能にするかどうかを管理します。 + + この設定を無効にした場合、保存したパスワードをパスワード マネージャ ウィンドウで平文表示することはできなくなります。 + + この設定を有効にするか未設定のままにした場合、ユーザーはパスワード マネージャでパスワードを平文表示できます。</translation> <translation id="3547954654003013442">プロキシ設定</translation> <translation id="3570008976476035109">これらのサイトのプラグインをブロックする</translation> <translation id="3591584750136265240">ログイン認証の動作を設定する</translation> @@ -1574,6 +1582,7 @@ このポリシーを設定していないと、ランチャーの固定アプリのリストをユーザーが変更できます。</translation> <translation id="7132877481099023201">ユーザー確認なしで動画キャプチャ デバイスへのアクセスが許可される URL</translation> +<translation id="7167436895080860385">パスワード マネージャでパスワードを表示できるようにする(サポート終了)</translation> <translation id="7173856672248996428">一時的なプロフィール</translation> <translation id="7187256234726597551">true の場合は、リモート認証がこのデバイスに対して許可され、証明書が自動的に生成されてデバイス管理サーバーにアップロードされます。 @@ -1871,6 +1880,7 @@ <translation id="8197918588508433925">このポリシーでは、リモート認証に Enterprise Platform Key API の chrome.enterprise.platformKeysPrivate.challengeUserKey() の使用が許可された拡張機能が指定されます。この API を使用するには、このリストに拡張機能を追加する必要があります。 拡張機能がリストに追加されていないか、またはリストが設定されていない場合、API 呼び出しは失敗し、エラー コードが返されます。</translation> +<translation id="8214600119442850823">パスワード マネージャを設定します。</translation> <translation id="8244525275280476362">ポリシーの失効から取得までの最大時間</translation> <translation id="8256688113167012935">対応するデバイスのローカル アカウントに対し、ログイン画面でアカウント名 <ph name="PRODUCT_OS_NAME" /> を表示するかどうかを指定します。 @@ -2039,6 +2049,18 @@ <translation id="8858642179038618439">YouTube のセーフモードを強制的に有効にする</translation> <translation id="8864975621965365890">サイトが <ph name="PRODUCT_FRAME_NAME" /> によってレンダリングされるときに表示されるサポート終了メッセージを抑制します。</translation> <translation id="8870318296973696995">ホームページ</translation> +<translation id="8889588091638298603">Quirks サーバーからはハードウェア固有の設定ファイルが提供されます。 + 例: モニターのキャリブレーションを調整する ICC ディスプレイ + プロファイルなど + + このポリシーを false に設定した場合、端末から Quirks サーバーへの + 接続と設定ファイルのダウンロードは行われません。 + + このポリシーを true に設定するか未設定のままにした場合、 + <ph name="PRODUCT_OS_NAME" /> から Quirks サーバーに自動接続が行われ、 + 設定ファイルがある場合はダウンロードされて端末に保存されます。 + こうした設定ファイルは、接続しているモニターの画質向上などの + 目的で使用されます。</translation> <translation id="8905426178924715309">このポリシーはサポート終了となりました。代わりに ForceGoogleSafeSearch と ForceYouTubeSafetyMode を使用してください。ForceGoogleSafeSearch ポリシーまたは ForceYouTubeSafetyMode ポリシーのいずれかが設定されている場合、このポリシーは無視されます。 Google ウェブ検索のクエリの実行時に SafeSearch を強制適用するとともに、ユーザーによるこの設定の変更を禁止します。この設定により、YouTube でもセーフモードが強制適用されます。
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb index 57b3f2c0..38d24bc 100644 --- a/components/policy/resources/policy_templates_kn.xtb +++ b/components/policy/resources/policy_templates_kn.xtb
@@ -84,6 +84,7 @@ <translation id="1359553908012294236">ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದ್ದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದೇ ಇದ್ದರೆ, <ph name="PRODUCT_NAME" /> ಅತಿಥಿ ಲಾಗಿನ್ಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. ಅತಿಥಿ ಲಾಗಿನ್ಗಳು <ph name="PRODUCT_NAME" /> ಪ್ರೊಫೈಲ್ಗಳಾಗಿದ್ದು ಇಲ್ಲಿ ಎಲ್ಲಾ ವಿಂಡೊಗಳು ಅಜ್ಞಾತ ಮೋಡ್ನಲ್ಲಿರುತ್ತವೆ. ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದರೆ, ಅತಿಥಿ ಪ್ರೊಫೈಲ್ಗಳು ಪ್ರಾರಂಭಗೊಳ್ಳಲು <ph name="PRODUCT_NAME" /> ಅನುಮತಿಸುವುದಿಲ್ಲ.</translation> +<translation id="1363275621236827384">ಹಾರ್ಡ್ವೇರ್ ಪ್ರೊಫೈಲ್ಗಳಿಗಾಗಿ Quirks ಸರ್ವರ್ಗೆ ಪ್ರಶ್ನೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="1397855852561539316">ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ಪೂರೈಕೆದಾರ ಸೂಚಿಸುವ URL</translation> <translation id="1398889361882383850">ವೆಬ್ಸೈಟ್ಗಳು ಪ್ಲಗಿನ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಚಾಲನೆಗೊಳ್ಳುವಂತೆ ಮಾಡಲು ಅಥವಾ ಮಾಡದೇ ಇರಲು ನಿಮಗೆ ಅನುಮತಿ ಒದಗಿಸುತ್ತದೆ. ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಚಾಲನೆ ಮಾಡುವಂತಹ ಪ್ಲಗಿನ್ಗಳನ್ನು ಎಲ್ಲ ವೆಬ್ಸೈಟ್ಗಳಿಗೂ ಅನುಮತಿಸಬಹುದು ಅಥವಾ ಎಲ್ಲ ವೆಬ್ಸೈಟ್ಗಳಿಗೂ ನಿರಾಕರಿಸಬಹುದಾಗಿದೆ. @@ -665,6 +666,13 @@ ನೀತಿ ಮೌಲ್ಯವನ್ನು ಮಿಲಿಸೆಕೆಂಡ್ಗಳಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು. ಮೌಲ್ಯಗಳನ್ನು 30 ಸೆಕೆಂಡ್ಗಳಿಂದ 24 ಗಂಟೆಗಳ ವ್ಯಾಪ್ತಿಗೆ ಹಿಡಿದಿಡಲಾಗಿದೆ.</translation> <translation id="3528000905991875314">ಪರ್ಯಾಯ ದೋಷ ಪುಟಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸು</translation> +<translation id="3538538104630456270">ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ವೀಕ್ಷಿಸುವುದಕ್ಕೆ ಮರುದೃಢೀಕರಣದ ಮೊದಲು ಬಳಸಿದ ಸಂಬಂಧಿಸಿದ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಜಾರಿಗೊಳಿಸಲಾಗಿದೆ. ಆ ಸಮಯದಿಂದ, ಸೆಟ್ಟಿಂಗ್ ಮತ್ತು ಈ ನೀತಿಯು Chrome ನಡವಳಿಕೆಯ ಮೇಲೆ ಯಾವುದೇ ಪರಿಣಾಮವನ್ನು ಹೊಂದಿರಲಿಲ್ಲ. Chrome ನ ಪ್ರಸ್ತುತ ನಡವಳಿಕೆಯು ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ ಸೆಟ್ಟಿಂಗ್ಗಳ ಪುಟದಲ್ಲಿ ಸ್ಪಷ್ಟ ಪಠ್ಯದಲ್ಲಿ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೋರಿಸುವುದನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವುದಕ್ಕೆ ನೀತಿಯನ್ನು ಹೊಂದಿಸಲಾಗಿರುವಂತೆಯೇ ಇದೆ. ಇದರರ್ಥ ಸೆಟ್ಟಿಂಗ್ಗಳ ಪುಟವು ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ ಮತ್ತು ಬಳಕೆದಾರರು "ತೋರಿಸು" (ಮತ್ತು ಅನ್ವಯಿಸಿದರೆ, ಮರುದೃಢೀಕರಿಸುವುದು) ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು Chrome ತೋರಿಸುತ್ತದೆ. ನೀತಿಯ ಮೂಲ ವಿವರಣೆಯು ಈ ಕೆಳಗಿನಂತಿದೆ + + ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ನಲ್ಲಿ ಸ್ಪಷ್ಟ ಪಠ್ಯದಲ್ಲಿ ಬಳಕೆದಾರರು ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೋರಿಸಬಹುದೇ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. + + ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ ವಿಂಡೋದಲ್ಲಿ ಸ್ಪಷ್ಟ ಪಠ್ಯದಲ್ಲಿ ಸಂಗ್ರಹಿಸಿದ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೋರಿಸುವುದಕ್ಕೆ ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ ಅನುಮತಿಸುವುದಿಲ್ಲ. + + ನೀವು ಈ ನೀತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ ಅಥವಾ ಹೊಂದಿಸದೇ ಇದ್ದರೆ, ಬಳಕೆದಾರರು ತಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ನಲ್ಲಿ ಸ್ಪಷ್ಟ ಪಠ್ಯದಲ್ಲಿ ವೀಕ್ಷಿಸಬಹುದು.</translation> <translation id="3547954654003013442">ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳು</translation> <translation id="3570008976476035109">ಈ ಸೈಟ್ಗಳಲ್ಲಿನ ಪ್ಲಗಿನ್ಗಳನ್ನು ನಿರ್ಬಂಧಿಸು</translation> <translation id="3591584750136265240">ಲಾಗಿನ್ ಪ್ರಮಾಣೀಕರಣ ನಡವಳಿಕೆಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation> @@ -1567,6 +1575,7 @@ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆ ಬಿಟ್ಟರೆ, ಲಾಂಚರ್ನಲ್ಲಿರುವ ಪಿನ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಪಟ್ಟಿಯನ್ನು ಬಳಕೆದಾರರು ಬದಲಾಯಿಸಬಹುದು.</translation> <translation id="7132877481099023201">ಪ್ರಾಂಪ್ಟ್ ಇಲ್ಲದೆಯೇ ವೀಡಿಯೊ ಸರೆಹಿಡಿಯುವಿಕೆ ಸಾಧನಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಪೂರೈಸುವಂತಹ URL ಗಳು</translation> +<translation id="7167436895080860385">ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ನಲ್ಲಿ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತೋರಿಸಲು ಬಳಕೆದಾರರಿಗೆ ಅನುಮತಿಸಿ (ತಡೆಹಿಡಿಯಲಾಗಿದೆ)</translation> <translation id="7173856672248996428">ಅಲ್ಪಕಾಲಿಕ ಪ್ರೊಫೈಲ್</translation> <translation id="7187256234726597551">ಸರಿ ಎಂದಾದರೆ, ಸಾಧನಕ್ಕಾಗಿ ರಿಮೋಟ್ ದೃಢೀಕರಣವನ್ನು ಅನುಮತಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಸಾಧನ ನಿರ್ವಹಣೆ ಸರ್ವರ್ಗೆ ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ. @@ -1861,6 +1870,7 @@ <translation id="8197918588508433925">ರಿಮೋಟ್ ದೃಢೀಕರಣಕ್ಕಾಗಿ ಎಂಟರ್ಪ್ರೈಸ್ ಪ್ಲ್ಯಾಟ್ಫಾರ್ಮ್ ಕೀಗಳ API chrome.enterprise.platformKeysPrivate.challengeUserKey() ಅನ್ನು ಬಳಸಲು ಈ ನೀತಿಯು ಅನುಮತಿಸಲಾದ ವಿಸ್ತರಣೆಗಳನ್ನು ಸೂಚಿಸುತ್ತದೆ. API ಬಳಸಲು ವಿಸ್ತರಣೆಗಳನ್ನು ಈ ಪಟ್ಟಿಗೆ ಸೇರಿಸಬೇಕು. ವಿಸ್ತರಣೆಯು ಈ ಪಟ್ಟಿಯಲ್ಲಿರದಿದ್ದರೆ, ಅಥವಾ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, API ಗೆ ಮಾಡುವ ಕರೆಯು ದೋಷದ ಕೋಡ್ನೊಂದಿಗೆ ವಿಫಲವಾಗುತ್ತದೆ.</translation> +<translation id="8214600119442850823">ಪಾಸ್ವರ್ಡ್ ಮ್ಯಾನೇಜರ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ.</translation> <translation id="8244525275280476362">ನೀತಿಯ ಅಮಾನ್ಯೀಕರಣದ ಬಳಿಕ ಗರಿಷ್ಟ ಪಡೆಯುವಿಕೆ ವಿಳಂಬ</translation> <translation id="8256688113167012935">ಅನುಗುಣವಾದ ಸಾಧನ-ಸ್ಥಳೀಯ ಖಾತೆಗಾಗಿ ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುವ ಖಾತೆ ಹೆಸರು <ph name="PRODUCT_OS_NAME" /> ಅನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. @@ -2022,6 +2032,13 @@ <translation id="8858642179038618439">YouTube ಸುರಕ್ಷಿತ ಮೋಡ್ ಜಾರಿಗೊಳಿಸಿ</translation> <translation id="8864975621965365890">ಸೈಟ್ ಅನ್ನು <ph name="PRODUCT_FRAME_NAME" /> ಮೂಲಕ ತೋರಿಸುತ್ತಿರುವಾಗ ಗೋಚರಿಸುವಂತಹ ಟರ್ನ್ಡೌನ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ನಿಗ್ರಹಿಸುತ್ತದೆ.</translation> <translation id="8870318296973696995">ಮುಖ ಪುಟ</translation> +<translation id="8889588091638298603">ಮಾನಿಟರ್ ಕ್ಯಾಲಿಬ್ರೇಶನ್ ಅನ್ನು ಸರಿಹೊಂದಿಸುವುದಕ್ಕಾಗಿ ICC ಪ್ರದರ್ಶನ ಪ್ರೊಫೈಲ್ಗಳಂತಹ ಹಾರ್ಡ್ವೇರ್-ನಿರ್ದಿಷ್ಟ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗಳನ್ನು Quirks ಸರ್ವರ್ ಒದಗಿಸುತ್ತದೆ. + + ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದಾಗ, ಸಾಧನವು ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡುವುದಕ್ಕಾಗಿ Quirks ಸರ್ವರ್ ಸಂಪರ್ಕಿಸಲು ಪ್ರಯತ್ನಿಸುವುದಿಲ್ಲ. + + ಈ ನೀತಿಯು ನಿಜವಾಗಿದ್ದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದೇ ಇದ್ದರೆ ಆಗ Quirks ಸರ್ವರ್ ಅನ್ನು + <ph name="PRODUCT_OS_NAME" /> ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸುತ್ತದೆ ಮತ್ತು ಲಭ್ಯವಿದ್ದರೆ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡುತ್ತದೆ ಮತ್ತು + ಅವುಗಳನ್ನು ಸಾಧನದಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಅಂತಹ ಫೈಲ್ಗಳನ್ನು ಉದಾಹರಣೆಗಾಗಿ ಲಗತ್ತಿಸಿದ ಮಾನಿಟರ್ಗಳ ಪ್ರದರ್ಶನ ಗುಣಮಟ್ಟ ಸುಧಾರಿಸಲು ಬಳಸಬಹುದು.</translation> <translation id="8905426178924715309">ಈ ನೀತಿಯನ್ನು ತಡೆಹಿಡಿಯಲಾಗಿದೆ. ಬದಲಿಗೆ ForceGoogleSafeSearch ಮತ್ತು ForceYouTubeSafetyMode ಬಳಸಿ. ForceGoogleSafeSearch ಅಥವಾ ForceYouTubeSafetyMode ನೀತಿಗಳಲ್ಲಿ ಯಾವುದನ್ನಾದರೂ ಹೊಂದಿಸಿದ್ದರೆ ಈ ನೀತಿಯನ್ನು ನಿರ್ಲಕ್ಷಿಸಲಾಗುತ್ತದೆ. ಸಕ್ರಿಯ ಎಂದು ಹೊಂದಿಸಲಾಗಿರುವ SafeSearch ಜೊತೆ ಮಾಡಲು Google ವೆಬ್ ಹುಡುಕಾಟದಲ್ಲಿ ಪ್ರಶ್ನೆಗಳನ್ನು ಹೇರುತ್ತದೆ ಹಾಗೂ ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬಳಕೆದಾರರು ಬದಲಾಯಿಸದಂತೆ ತಡೆಯುತ್ತದೆ. YouTube ನಲ್ಲಿ ಸುರಕ್ಷತೆ ಮೋಡ್ ಅನ್ನು ಸಹ ಈ ಸೆಟ್ಟಿಂಗ್ ಹೇರುತ್ತದೆ.
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index 897e0300..123c3e2e4 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">이 정책이 'true'로 설정되거나 설정되지 않으면 <ph name="PRODUCT_NAME" />에서 게스트 로그인을 사용합니다. 게스트 로그인은 모든 창이 시크릿 모드로 실행되는 <ph name="PRODUCT_NAME" /> 프로필입니다. 이 정책이 'false'로 설정되면 <ph name="PRODUCT_NAME" />에서 게스트 프로필을 사용할 수 없습니다.</translation> +<translation id="1363275621236827384">하드웨어 프로필 Quirks 서버에 검색어를 사용합니다.</translation> <translation id="1397855852561539316">기본 검색 공급자 추천 URL</translation> <translation id="1398889361882383850">웹사이트의 플러그인 자동 실행 여부를 설정하도록 합니다. 플러그인 자동 실행은 모든 웹사이트에 대해 허용하거나 모든 웹사이트에 대해 거부할 수 있습니다. @@ -748,6 +749,13 @@ 이 정책 값은 밀리초로 지정되어야 하며 30초에서 24시간 범위 내로 잘립니다.</translation> <translation id="3528000905991875314">대체 오류 페이지 사용</translation> +<translation id="3538538104630456270">비밀번호 조회를 위한 재인증이 시작되기 전에 관련 설정이 사용되었습니다. 이후 설정과 이 정책이 Chrome의 작동에 영향을 주지 않았습니다. 현재 Chrome은 비밀번호 관리자 설정 페이지에서 일반 텍스트로 비밀번호 표시를 사용 중지하도록 정책이 설정된 것과 동일하게 작동합니다. 따라서 설정 페이지에는 자리 표시자만 포함되어 있으며, 사용자가 '표시'를 클릭하는 경우(해당하는 경우 다시 인증)에만 Chrome에서 비밀번호를 표시합니다. 정책의 원본 설명은 아래와 같습니다. + + 사용자가 비밀번호 관리자에서 일반 텍스트로 비밀번호를 표시할 수 있는지 여부를 관리합니다. + + 이 설정을 사용 중지하면 비밀번호 관리자가 비밀번호 관리자 창에 저장된 비밀번호를 일반 텍스트로 표시할 수 없습니다. + + 이 설정을 사용하거나 이 정책을 설정하지 않으면 사용자가 비밀번호 관리자에서 일반 텍스트로 비밀번호를 볼 수 있습니다.</translation> <translation id="3547954654003013442">프록시 설정</translation> <translation id="3570008976476035109">이 사이트에서 플러그인 차단</translation> <translation id="3591584750136265240">로그인 인증 동작 설정</translation> @@ -1739,6 +1747,7 @@ 해당 정책이 설정되지 않은 경우 사용자는 실행기에서 고정된 앱의 목록을 변경할 수 있습니다.</translation> <translation id="7132877481099023201">별도 메시지를 표시하지 않고 동영상 캡처 기기에 대한 액세스 권한이 부여되는 URL입니다.</translation> +<translation id="7167436895080860385">사용자가 비밀번호 관리자에 비밀번호를 표시할 수 있도록 허용(지원 중단됨)</translation> <translation id="7173856672248996428">임시 프로필</translation> <translation id="7187256234726597551">true로 설정한 경우 기기에서 원격 인증이 허용되며 인증서가 자동으로 생성되어 기기 관리 서버로 업로드됩니다. @@ -2065,6 +2074,7 @@ <translation id="8197918588508433925">이 정책은 원격 인증에 엔터프라이즈 플랫폼 키 API chrome.enterprise.platformKeysPrivate.challengeUserKey()를 사용하도록 허용된 확장 프로그램을 지정합니다. API를 사용하려면 확장 프로그램을 이 목록에 추가해야 합니다. 확장 프로그램이 목록에 없거나 목록이 설정되지 않은 경우, API에 대한 호출 시 오류 코드가 표시되며 호출에 실패합니다.</translation> +<translation id="8214600119442850823">비밀번호 관리자를 구성합니다.</translation> <translation id="8244525275280476362">정책 무효화 후 최대 가져오기 지연</translation> <translation id="8256688113167012935">계정 이름 <ph name="PRODUCT_OS_NAME" />을(를) 해당 기기 로컬 계정의 로그인 화면에 표시할 것인지 제어합니다. @@ -2250,6 +2260,17 @@ <translation id="8858642179038618439">YouTube 안전 모드를 강제로 사용합니다.</translation> <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" />에서 사이트를 렌더링할 때 나타나는 종료 프롬프트를 표시하지 않습니다.</translation> <translation id="8870318296973696995">홈페이지</translation> +<translation id="8889588091638298603">Quirks 서버에서는 하드웨어별 구성 파일을 제공합니다. 예를 들면, + ICC 디스플레이 프로필로 모니터를 보정합니다. + + 이 정책을 false로 설정하면 기기에서 구성 파일을 다운로드하기 위해 + Quirks 서버로 연결을 시도하지 않습니다. + + 이 정책을 true로 설정하거나 설정하지 않으면 + <ph name="PRODUCT_OS_NAME" />에서 + 자동으로 Quirks 서버에 연결하고 구성 파일을 다운로드하며 + 가능한 경우 기기에 파일을 저장합니다. 예를 들어 이러한 파일은 + 연결된 모니터의 디스플레이 품질 개선에 사용될 수 있습니다.</translation> <translation id="8905426178924715309">이 정책은 지원 중단되었으므로 대신 ForceGoogleSafeSearch 및 ForceYouTubeSafetyMode를 사용하시기 바랍니다. ForceGoogleSafeSearch 또는 ForceYouTubeSafetyMode 정책이 설정된 경우 이 정책이 무시됩니다. 세이프서치가 활성화되도록 설정된 상태에서 Google 웹 검색이 이루어지며 사용자가 이 설정을 바꾸지 못하도록 합니다. 또한 이 설정은 YouTube에서 안전 모드를 사용하도록 합니다.
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb index 33d6e07..2da1ca5 100644 --- a/components/policy/resources/policy_templates_lt.xtb +++ b/components/policy/resources/policy_templates_lt.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Jei ši politika nustatyta į „true“ arba yra nesukonfigūruota, „<ph name="PRODUCT_NAME" />“ įgalins svečių prisijungimą. Svečių prisijungimas yra „<ph name="PRODUCT_NAME" />“ profiliai, kur visi langai naudojami inkognito režimu. Jei ši politika nustatyta į „false“, „<ph name="PRODUCT_NAME" />“ neleis pradėti svečio profilių.</translation> +<translation id="1363275621236827384">Įgalinti užklausas į „Quirks Server“, skirtas aparatinės įrangos profiliams</translation> <translation id="1397855852561539316">Numatytojo paieškos teikėjo siūlymo URL</translation> <translation id="1398889361882383850">Leidžiama nustatyti, ar svetainėms leidžiama automatiškai paleisti papildinius. Galima leisti visoms svetainėms automatiškai paleisti papildinius arba neleisti to padaryti. @@ -750,6 +751,13 @@ Politikos vertė turi būti nurodyta milisekundėmis. Vertė gali būti nuo 30 sekundžių iki 24 valandų.</translation> <translation id="3528000905991875314">Įgalinti kitus klaidų puslapius</translation> +<translation id="3538538104630456270">Susijęs nustatymas buvo naudojamas anksčiau, prieš įvedant pakartotinį autentifikavimą norint matyti slaptažodžius. Nuo tada nustatymas ir ši politika neturi jokio poveikio „Chrome“ elgsenai. Dabar „Chrome“ veikia taip, tarsi politika būtų nustatyta išjungti slaptažodžių rodymą nešifruotu tekstu slaptažodžių tvarkytuvės puslapyje. Tai reiškia, kad nustatymų puslapyje yra tik rezervuota vieta, o „Chrome“ slaptažodį rodo tik tada, kai naudotojas spustelėja „Rodyti“ (ir atlieka pakartotinį autentifikavimą, jei taikoma). Toliau pateiktas originalus politikos aprašas. + + Valdo, ar naudotojas gali rodyti slaptažodžius nešifruotu tekstu slaptažodžių tvarkytuvėje. + + Jei išjungsite šį nustatymą, slaptažodžių tvarkytuvė neleis rodyti išsaugotų slaptažodžių nešifruotu tekstu slaptažodžių tvarkytuvės lange. + + Jei įgalinsite šią politiką ar jos nenustatysite, naudotojai galės peržiūrėti savo slaptažodžius nešifruotu tekstu slaptažodžių tvarkytuvėje.</translation> <translation id="3547954654003013442">Įgaliotojo serverio nustatymai</translation> <translation id="3570008976476035109">Blokuoti papildinius šiose svetainėse</translation> <translation id="3591584750136265240">Konfigūruoti prisijungimo autentifikavimo elgseną</translation> @@ -1750,6 +1758,7 @@ Jei ši politika paliekama nenustatyta, naudotojas gali pakeisti paleidimo priemonėje prisegtų programų sąrašą.</translation> <translation id="7132877481099023201">URL, kuriems bus suteikta prieiga prie vaizdo įrašų užfiksavimo įrenginių be paraginimo</translation> +<translation id="7167436895080860385">Leisti naudotojams rodyti slaptažodžius slaptažodžių tvarkytuvėje (nebenaudojama)</translation> <translation id="7173856672248996428">Efemeriškas profilis</translation> <translation id="7187256234726597551">Jei ši politika nustatyta, leidžiama nuotoliniu būdu patvirtinti įrenginį, o sertifikatas bus automatiškai sugeneruotas ir įkeltas į įrenginių tvarkymo serverį. @@ -2078,6 +2087,7 @@ <translation id="8197918588508433925">Šioje politikoje nustatomi plėtiniai, kuriems leidžiama naudoti įmonės platformos raktų API „chrome.enterprise.platformKeysPrivate.challengeUserKey()“ patvirtinant nuotoliniu būdu. Plėtiniai turi būti pridėti prie šio sąrašo, kad galėtų naudoti API. Jei plėtinio nėra sąraše arba sąrašas nenustatytas, kreipiantis į API įvyks klaida ir bus pateiktas jos kodas.</translation> +<translation id="8214600119442850823">Konfigūruoja slaptažodžių tvarkytuvę.</translation> <translation id="8244525275280476362">Maksimali gavimo delsa atšaukus politiką</translation> <translation id="8256688113167012935">Valdomas paskyros pavadinimas, kurį „<ph name="PRODUCT_OS_NAME" />“ rodo atitinkamo įrenginio vietinės paskyros prisijungimo ekrane. @@ -2271,6 +2281,17 @@ <translation id="8858642179038618439">Priverstinis „YouTube“ saugos režimas</translation> <translation id="8864975621965365890">Nerodomas raginimas išjungti, kuris rodomas, kai svetainę pateikia „<ph name="PRODUCT_FRAME_NAME" />“.</translation> <translation id="8870318296973696995">Pagrindinis puslapis</translation> +<translation id="8889588091638298603">„Quirks Server“ teikia konkrečios aparatinės įrangos konfigūracijos failus, pvz., + ICC vaizdo profilius, kad koreguotų monitoriaus kalibravimą. + + Kai ši politika nustatyta į „false“, įrenginys nebandys + susisiekti su „Quirks Server“, kad atsisiųstų konfigūracijos failus. + + Jei ši politika nustatyta į „true“ arba nenustatyta, + „<ph name="PRODUCT_OS_NAME" />“ + automatiškai susisieks su „Quirks Server“ ir atsisiųs konfigūracijos failus + (jei įmanoma) ir saugos juos įrenginyje. Pvz., tokie failai gali + būti naudojami siekiant pagerinti prijungtų monitorių vaizdo kokybę.</translation> <translation id="8905426178924715309">Ši politika nebenaudojama. Vietoje jos naudokite „ForceGoogleSafeSearch“ ir „ForceYouTubeSafetyMode“. Šios politikos nepaisoma, jei nustatyta politika „ForceGoogleSafeSearch“ arba „ForceYouTubeSafetyMode“. „Google“ žiniatinklio paieškos užklausos priverstinai vykdomos naudojant suaktyvintą Saugią paiešką, o naudotojams neleidžiama keisti šio nustatymo. Pasirinkus šį nustatymą taip pat priverstinai įjungiamas saugos režimas sistemoje „YouTube“.
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb index e1d22e8..9974a243 100644 --- a/components/policy/resources/policy_templates_lv.xtb +++ b/components/policy/resources/policy_templates_lv.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Ja šai politikai ir iestatīta vērtība Patiesa vai ja politika nav konfigurēta, pārlūkā <ph name="PRODUCT_NAME" /> tiek iespējota pieteikšanās viesa režīmā. Piesakoties viesa režīmā, tiek izveidoti <ph name="PRODUCT_NAME" /> profili, kuros visi logi ir inkognito režīmā. Ja šai politikai ir iestatīta vērtība Nepatiesa, pārlūkā <ph name="PRODUCT_NAME" /> nevar izveidot viesu profilus.</translation> +<translation id="1363275621236827384">Iespējot Quirks servera vaicājumus aparatūras profiliem</translation> <translation id="1397855852561539316">Noklusējuma meklētājprogrammas ieteikumu URL</translation> <translation id="1398889361882383850">Ļauj iestatīt, vai vietnes varēs automātiski izpildīt spraudņus. Automātiski izpildāmus spraudņus var atļaut vai aizliegt visām vietnēm. @@ -751,6 +752,13 @@ Politikas vērtība ir jānorāda milisekundēs. Vērtība ir jānorāda diapazonā no 30 sekundēm līdz 24 stundām.</translation> <translation id="3528000905991875314">Iespējo alternatīvas kļūdu lapas</translation> +<translation id="3538538104630456270">Šis saistītais iestatījums tika izmantots, pirms tika ieviesta atkārtotā autentifikācija paroļu skatīšanai. Tāpēc šis iestatījums un šī politika neietekmē Chrome darbību. Pašlaik Chrome darbojas tā, it kā politika būtu iestatīta nerādīt paroles nešifrētā tekstā paroļu pārvaldnieka iestatījumu lapā. Tas nozīmē, ka iestatījumu lapā ir redzams tikai vietturis, un Chrome parāda paroli tikai tad, ja lietotājs noklikšķina uz “Rādīt” (un atkārtoti autentificējas, ja piemērojams). Tālāk redzams sākotnējais politikas apraksts. + + Nosaka, vai paroles paroļu pārvaldniekā ir redzamas nešifrētā tekstā. + + Ja šis iestatījums ir atspējots, paroļu pārvaldnieks neļauj paroļu pārvaldnieka logā rādīt saglabātās paroles nešifrētā tekstā. + + Ja šī politika ir iespējota vai nav iestatīta, paroles paroļu pārvaldniekā ir redzamas nešifrētā tekstā.</translation> <translation id="3547954654003013442">Starpniekservera iestatījumi</translation> <translation id="3570008976476035109">Bloķē spraudņus šajās vietnēs</translation> <translation id="3591584750136265240">Pieteikšanās autentifikācijas darbības konfigurēšana</translation> @@ -1747,6 +1755,7 @@ Ja šī politika netiek iestatīta, lietotājs var mainīt piesprausto lietotņu sarakstu palaišanas lapā.</translation> <translation id="7132877481099023201">Vietrāži URL, kuriem tiks nodrošināta piekļuve video tveršanas ierīcēm bez uzvednes parādīšanas.</translation> +<translation id="7167436895080860385">Atļauj rādīt paroles paroļu pārvaldniekā (atspējota)</translation> <translation id="7173856672248996428">Īslaicīgs profils</translation> <translation id="7187256234726597551">Ja politika ir iestatīta uz “true”, ierīcei ir atļauta attālā apstiprināšana un tiks automātiski izveidots sertifikāts, kas tiks augšupielādēts ierīču pārvaldības serverī. @@ -2076,6 +2085,7 @@ <translation id="8197918588508433925">Šajā politikā ir norādīti paplašinājumi, kuros atļauts attālinātajai apstiprināšanai izmantot uzņēmumu platformu atslēgu (Enterprise Platform Keys) API chrome.enterprise.platformKeysPrivate.challengeUserKey(). Lai izmantotu šo API, paplašinājumiem ir jābūt pievienotiem šajā sarakstā. Ja paplašinājums nav iekļauts sarakstā vai ja saraksts nav iestatīts, API izsaukumi neizdosies un tiks rādīts kļūdas kods.</translation> +<translation id="8214600119442850823">Konfigurē paroļu pārvaldnieku.</translation> <translation id="8244525275280476362">Maksimāla ieneses aizkave pēc politikas atzīšanas par nederīgu</translation> <translation id="8256688113167012935">Kontrolējiet konta nosaukumu, kas tiek rādīts <ph name="PRODUCT_OS_NAME" /> pieteikšanās ekrānā attiecīgajam ierīces lokālajam kontam. @@ -2271,6 +2281,17 @@ <translation id="8858642179038618439">YouTube piespiedu drošības režīms</translation> <translation id="8864975621965365890">Aizliedz noraidīšanas uzvedni, kas tiek parādīta, ja vietni renderē spraudnis <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Sākumlapa</translation> +<translation id="8889588091638298603">Quirks serveris nodrošina aparatūras konfigurācijas failus, piemēram, + lai pielāgotu ICC attēlojuma profilus monitora kalibrācijai. + + Ja šīs politikas iestatījums ir “False”, ierīce nemēģinās sazināties ar + Quirks serveri, lai lejupielādētu konfigurācijas failus. + + Ja šīs politikas iestatījums ir “True” vai tā nav konfigurēta, + <ph name="PRODUCT_OS_NAME" /> + automātiski sazināsies ar Quirks serveri, lejupielādēs konfigurācijas failus + (ja pieejami) un saglabās tos ierīcē. Šādi faili, piemēram, var tikt izmantoti + pievienoto monitoru attēlojuma kvalitātes uzlabošanai.</translation> <translation id="8905426178924715309">Šī politika ir novecojusi. Lūdzu, tās vietā izmantojiet politikas ForceGoogleSafeSearch un ForceYouTubeSafetyMode. Ja ir iestatīta politika ForceGoogleSafeSearch vai ForceYouTubeSafetyMode, šī politika tiek ignorēta. Ja ir iestatīta šī politika, pakalpojumā “Google meklēšana tīmeklī” ievadītajiem vaicājumiem vienmēr tiek aktivizēts filtrs Droša meklēšana un lietotāji nevar mainīt šo iestatījumu, savukārt pakalpojumā YouTube tiek veikta drošā režīma piespiedu iespējošana.
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb index 9f5f74ae..d8532e06 100644 --- a/components/policy/resources/policy_templates_ml.xtb +++ b/components/policy/resources/policy_templates_ml.xtb
@@ -95,6 +95,7 @@ <translation id="1359553908012294236">ഈ നയം "true" എന്ന് സജ്ജമാക്കുകയാണെങ്കിലോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയാണെങ്കിലോ, <ph name="PRODUCT_NAME" /> അതിഥി ലോഗിന്നുകളെ പ്രവർത്തനക്ഷമമാക്കും. എല്ലാ വിൻഡോകളും ആൾമാറാട്ട മോഡിൽ ആയിരിക്കുമ്പോൾ അതിഥി ലോഗിന്നുകൾ <ph name="PRODUCT_NAME" /> പ്രൊഫൈലുകളായിരിക്കും.. ഈ നയം 'false' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ, ആരംഭിക്കുന്നതിന് <ph name="PRODUCT_NAME" /> അതിഥി പ്രൊഫൈലുകളെ അനുവദിക്കില്ല.</translation> +<translation id="1363275621236827384">ഹാർഡ്വെയർ പ്രൊഫൈലുകൾക്കായി Quirks സെർവറിലേക്കുള്ള ചോദ്യങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="1397855852561539316">സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവ് നിര്ദേശിക്കുന്ന URL</translation> <translation id="1398889361882383850">പ്ലഗിനുകൾ യാന്ത്രികമായി പ്രവർത്തിപ്പിക്കാൻ വെബ്സൈറ്റുകളെ അനുവദിക്കണമോ എന്നത് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. യാന്ത്രികമായി പ്രവർത്തിക്കുന്ന പ്ലഗിനുകൾ എല്ലാ വെബ്സൈറ്റുകളിലും അനുവദനീയമായിരിക്കാം അല്ലെങ്കിൽ നിരസിക്കുന്നതായിരിക്കാം. @@ -752,6 +753,13 @@ നയ മൂല്യം മില്ലിസെക്കൻഡുകളിലായിരിക്കണം. മൂല്യങ്ങൾ 30 സെക്കൻഡ് മുതൽ 24 മണിക്കൂർ വരെയുള്ള ശ്രേണിയിലാക്കിയിരിക്കുന്നു.</translation> <translation id="3528000905991875314">സമാന്തര പിശക് പേജുകള് പ്രാപ്തമാക്കുക</translation> +<translation id="3538538104630456270">വിശ്വാസ്യത ഉറപ്പാക്കുന്ന സംവിധാനം അവതരിപ്പിക്കുന്നതിന് മുമ്പ്, പാസ്വേഡുകൾ കാണുന്നത് പ്രവർത്തനക്ഷമമാക്കാൻ ബന്ധപ്പെട്ട സജ്ജീകരണമാണ് ഉപയോഗിച്ചിരുന്നത്. അന്ന് മുതൽ, ഈ ക്രമീകരണത്തിനും ഈ നയത്തിനും Chrome-ന്റെ പ്രവർത്തനരീതിയിൽ യാതൊരു സ്വാധീനവും ഇല്ല. പാസ്വേഡ് മാനേജർ ക്രമീകരണ പേജിലെ 'ടെക്സ്റ്റ് മായ്ക്കുക' എന്നതിൽ പാസ്വേഡുകൾ കാണിക്കുന്നത് പ്രവർത്തനരഹിതമാക്കുക എന്ന് സജ്ജമാക്കിയിട്ടുണ്ടെങ്കിൽ, അതിന് സമാനമാണ് ഇപ്പോൾ നിലവിലുള്ള Chrome-ന്റെ പ്രവർത്തനരീതി. ക്രമീകരണ പേജിൽ ഒരു പ്ലെയ്സ്ഹോൾഡർ മാത്രമേ അടങ്ങിയിട്ടുള്ളൂ എന്നും ഉപയോക്താവ്, "കാണിക്കുക" (ഒപ്പം ബാധകമെങ്കിൽ വീണ്ടും വിശ്വാസ്യത ഉറപ്പാക്കുന്നു) എന്നതിൽ ക്ലിക്കുചെയ്യുമ്പോൾ മാത്രമേ Chrome, പാസ്വേഡ് കാണിക്കുകയുള്ളൂ എന്നുമാണ് ഇത് അർത്ഥമാക്കുന്നത്. നയത്തിന്റെ യഥാർത്ഥ വിവരണം ഇനിപ്പറയുന്നതാണ്. + + പാസ്വേഡ് മാനേജറിലെ 'ടെക്സ്റ്റ് മായ്ക്കുക' എന്നതിൽ ഉപയോക്താവ് പാസ്വേഡുകൾ കാണിക്കാനിടയുണ്ടോ എന്ന് നിയന്ത്രിക്കുന്നു. + + നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിൽ, പാസ്വേഡ് മാനേജർ വിൻഡോയിലെ 'ടെക്സ്റ്റ് മായ്ക്കുക' എന്നതിൽ സംഭരിച്ച പാസ്വേഡുകൾ കാണിക്കാൻ പാസ്വേഡ് മാനേജർ അനുവദിക്കില്ല. + + നിങ്ങൾ പ്രവർത്തനക്ഷമമാക്കുകയോ ഈ നയം സജ്ജമാക്കാതിരിക്കുകയോ ചെയ്താൽ, ഉപയോക്താക്കൾക്ക് പാസ്വേഡ് മാനേജറിലെ 'ടെക്സ്റ്റ് മായ്ക്കുക' എന്നതിൽ അവരുടെ പാസ്വേഡുകൾ കാണാനാകും.</translation> <translation id="3547954654003013442">പ്രോക്സി ക്രമീകരണം</translation> <translation id="3570008976476035109">ഈ സൈറ്റുകളില് പ്ലഗിനുകള് തടയുക</translation> <translation id="3591584750136265240">ലോഗിൻ പരിശോധിച്ചുറപ്പിക്കൽ പ്രവർത്തന രീതി കോൺഫിഗർ ചെയ്യുക</translation> @@ -1752,6 +1760,7 @@ ഈ നയം സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, ഉപയോക്താവിന് ലോഞ്ചറിലെ പിൻ ചെയ്ത അപ്ലിക്കേഷനുകളുടെ ലിസ്റ്റ് മാറ്റാൻ കഴിയുന്നതാണ്.</translation> <translation id="7132877481099023201">ആവശ്യപ്പെടാതെ തന്നെ വീഡിയോ എടുക്കുന്ന ഉപകരണങ്ങളിലേക്ക് ആക്സസ്സ് നൽകുന്ന URL-കൾ</translation> +<translation id="7167436895080860385">പാസ്വേഡ് മാനേജറിൽ പാസ്വേഡുകൾ കാണിക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുക (അവസാനിപ്പിച്ചു)</translation> <translation id="7173856672248996428">കുറഞ്ഞ കാലയളവിലേക്കുള്ള പ്രൊഫൈൽ</translation> <translation id="7187256234726597551">true എങ്കിൽ, ഉപകരണത്തിന് വിദൂര അറ്റസ്റ്റേഷൻ അനുവദനീയമാണ് ഒപ്പം സർട്ടിഫിക്കറ്റ് യാന്ത്രികമായി സൃഷ്ടിച്ച് ഉപകരണ മാനേജുമെന്റ് സെർവറിൽ അപ്ലോഡുചെയ്യും. @@ -2080,6 +2089,7 @@ <translation id="8197918588508433925">വിദൂര അറ്റസ്റ്റേഷനായി, ഈ നയം എന്റർപ്രൈസ് പ്ലാറ്റ്ഫോം കീകൾ API chrome.enterprise.platformKeysPrivate.challengeUserKey() ഉപയോഗിക്കാൻ അനുവദനീയമായ വിപുലീകരണങ്ങൾ വ്യക്തമാക്കുന്നു. API ഉപയോഗിക്കാൻ വിപുലീകരണങ്ങൾ ഈ ലിസ്റ്റിൽ ചേർക്കണം. ഒരു വിപുലീകരണം ലിസ്റ്റിൽ ഇല്ലെങ്കിലോ ലിസ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലെങ്കിലുമോ API-ലേക്കുള്ള കോൾ ഒരു പിശക് കോഡോടെ പരാജയപ്പെടും.</translation> +<translation id="8214600119442850823">പാസ്വേഡ് മാനേജർ കോൺഫിഗർ ചെയ്യുന്നു.</translation> <translation id="8244525275280476362">നയ അസാധുവാക്കലിന് ശേഷമുള്ള പരമാവധി ലഭ്യമാക്കൽ കാലതാമസം</translation> <translation id="8256688113167012935">അനുബന്ധ ഉപകരണ-പ്രാദേശിക അക്കൗണ്ടിനായി ലോഗ്ഇൻ സ്ക്രീനിൽ കാണിച്ചിരിക്കുന്ന <ph name="PRODUCT_OS_NAME" /> അക്കൗണ്ട് പേര് നിയന്ത്രിക്കുന്നു. @@ -2277,6 +2287,17 @@ <translation id="8858642179038618439">YouTube സുരക്ഷ മോഡ് ഫോഴ്സുചെയ്യുക</translation> <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" />, ഒരു സൈറ്റ് റെൻഡർ ചെയ്തിരിക്കുമ്പോൾ ദൃശ്യമാകുന്ന നിരസിക്കൽ ആവശ്യം നിയന്ത്രിക്കുക.</translation> <translation id="8870318296973696995">ഹോം പേജ്</translation> +<translation id="8889588091638298603">Quirks സെർവർ, മോണിറ്റർ കാലിബറേഷൻ ക്രമീകരിക്കുന്നതിന്, ICC ഡിസ്പ്ലേ + പ്രൊഫൈലുകൾ പോലുള്ള ഹാർഡ്വെയർ-നിർദ്ദിഷ്ട കോൺഫിഗറേഷൻ ഫയലുകൾ നൽകുന്നു. + + ഈ നയം തെറ്റാണെന്ന് സജ്ജമാക്കിയിരിക്കുമ്പോൾ, കോൺഫിഗറേഷൻ ഫയലുകൾ + ഡൗൺലോഡുചെയ്യാൻ ഉപകരണം Quirks സെർവറിനെ ബന്ധപ്പെടാൻ ശ്രമിക്കില്ല. + + ഈ നയം ശരിയാണെങ്കിലോ കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിലോ, + <ph name="PRODUCT_OS_NAME" /> Quirks സെർവറിനെ സ്വയം ബന്ധപ്പെടുകയും കോൺഫിഗറേഷൻ + ഫയലുകൾ ലഭ്യമാണെങ്കിൽ അവ ഡൗൺലോഡുചെയ്ത്, + ഉപകരണത്തിൽ സംഭരിക്കുകയും ചെയ്യും. ഉദാഹരണത്തിന് അത്തരം ഫയലുകൾ, + അറ്റാച്ചുചെയ്തിരിക്കുന്ന മോണിറ്ററുകളുടെ ഡിസ്പ്ലേ നിലവാരം മെച്ചപ്പെടുത്താൻ ഉപയോഗിക്കാം.</translation> <translation id="8905426178924715309">ഈ നയം ഒഴിവാക്കിയിരിക്കുന്നു, പകരം ForceGoogleSafeSearch, ForceYouTubeSafetyMode എന്നിവ ഉപയോഗിക്കുക. ForceGoogleSafeSearch അല്ലെങ്കിൽ ForceYouTubeSafetyMode നയങ്ങൾ സജ്ജമാക്കുകയാണെങ്കിൽ, ഈ നയം അവഗണിക്കപ്പെടും Google വെബ് തിരയലിലെ SafeSearch ഉപയോഗിച്ച് ചെയ്യേണ്ട തിരയൽ ചോദ്യങ്ങളെ നിർബന്ധമായി സജീവമാക്കുകയും ഉപയോക്താക്കൾ ഈ ക്രമീകരണം മാറ്റുന്നത് തടയുകയും ചെയ്യുന്നു. ഈ ക്രമീകരണം YouTube-ലെ സുരക്ഷാമോഡിനേയും ഫോഴ്സുചെയ്യുന്നു.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 0dfe821..14682bd 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -92,6 +92,7 @@ <translation id="1359553908012294236">Als dit beleid is ingesteld op 'waar' of niet is geconfigureerd, schakelt <ph name="PRODUCT_NAME" /> gast-logins in. Gast-logins zijn profielen van <ph name="PRODUCT_NAME" /> waarbij alle vensters in de incognitomodus worden geopend. Als dit beleid is ingesteld op 'onwaar', staat <ph name="PRODUCT_NAME" /> niet toe dat er gastprofielen worden gestart.</translation> +<translation id="1363275621236827384">Query's naar de Quirks Server inschakelen voor hardwareprofielen</translation> <translation id="1397855852561539316">Voorgestelde URL voor standaardzoekprovider</translation> <translation id="1398889361882383850">Hiermee kun je instellen of websites automatisch plug-ins mogen uitvoeren. Het automatisch uitvoeren van plug-ins kan ofwel worden toegestaan voor alle websites, ofwel worden geweigerd voor alle websites. @@ -740,6 +741,13 @@ De beleidswaarde moet worden opgegeven in milliseconden. Waarden worden afgerond tot een bereik van 30 seconden tot 24 uur.</translation> <translation id="3528000905991875314">Alternatieve foutpagina's inschakelen</translation> +<translation id="3538538104630456270">De bijbehorende instelling werd gebruikt voordat hernieuwde verificatie voor het weergeven van wachtwoorden werd geïntroduceerd. Sindsdien hebben de instelling en dit beleid geen invloed gehad op het gedrag van Chrome. Het huidige gedrag van Chrome is nu gelijk aan het gedrag als het beleid was ingesteld om het weergeven van wachtwoorden als leesbare tekst op de pagina met instellingen voor Wachtwoordbeheer uit te schakelen. Dat betekent dat de pagina met instellingen alleen een tijdelijke aanduiding bevat. Chrome laat het wachtwoord alleen zien als de gebruiker op Weergeven klikt (en zo nodig de hernieuwde verificatie uitvoert). De oorspronkelijke beschrijving van het beleid volgt hieronder. + + Hiermee wordt bepaald of de gebruiker wachtwoorden als leesbare tekst mag weergeven in Wachtwoordbeheer. + + Als je deze instelling uitschakelt, staat Wachtwoordbeheer de gebruiker niet toe opgeslagen wachtwoorden als leesbare tekst weer te geven in het venster van Wachtwoordbeheer. + + Als je deze instelling inschakelt of niet configureert, kunnen gebruikers hun wachtwoorden als leesbare tekst bekijken in Wachtwoordbeheer.</translation> <translation id="3547954654003013442">Proxyinstellingen</translation> <translation id="3570008976476035109">Plug-ins blokkeren op deze sites</translation> <translation id="3591584750136265240">Het verificatiegedrag voor inloggen configureren</translation> @@ -1732,6 +1740,7 @@ Als het beleid niet is ingesteld, kan de gebruiker de lijst met vastgezette apps in het opstartprogramma wijzigen.</translation> <translation id="7132877481099023201">URL's die zonder prompt toegang krijgen tot apparaten voor het vastleggen van video</translation> +<translation id="7167436895080860385">Gebruikers toestaan wachtwoorden weer te geven in Wachtwoordbeheer (beëindigd)</translation> <translation id="7173856672248996428">Kort geldig profiel</translation> <translation id="7187256234726597551">Als je 'waar' heeft ingesteld, wordt toestemming op afstand toegestaan voor het apparaat en wordt er automatisch een certificaat gegenereerd en naar de Device Management Server geüpload. @@ -2054,6 +2063,7 @@ <translation id="8197918588508433925">Dit beleid geeft aan welke extensies de Enterprise Platform Keys-API chrome.enterprise.platformKeysPrivate.challengeUserKey() mogen gebruiken voor externe bevestiging. Je moet extensies aan deze lijst toevoegen om de API te kunnen gebruiken. Als een extensie niet in de lijst voorkomt, of als de lijst niet is ingesteld, mislukt het aanroepen van de API en wordt een foutcode weergegeven.</translation> +<translation id="8214600119442850823">Hiermee wordt Wachtwoordbeheer geconfigureerd.</translation> <translation id="8244525275280476362">Maximum vertraging voor ophalen na ongeldigverklaring voor beleid</translation> <translation id="8256688113167012935">Hiermee wordt de weergave van de accountnaam in <ph name="PRODUCT_OS_NAME" /> op het aanmeldscherm beheerd voor het bijbehorende lokale account van het apparaat. @@ -2242,6 +2252,11 @@ <translation id="8858642179038618439">Beperkte modus van YouTube afdwingen</translation> <translation id="8864975621965365890">Hiermee onderdruk je de prompt die wordt weergegeven wanneer een site wordt weergegeven door <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Startpagina</translation> +<translation id="8889588091638298603">De Quirks Server levert hardwarespecifieke configuratiebestanden, zoals ICC-displayprofielen om de beeldschermkalibratie aan te passen. + + Als dit beleid is ingesteld op 'false', maakt het apparaat geen verbinding met de Quirks Server om configuratiebestanden te downloaden. + + Als dit beleid is ingesteld op 'true' of niet is geconfigureerd, maakt <ph name="PRODUCT_OS_NAME" /> automatisch verbinding met de Quirks Server en worden configuratiebestanden (indien beschikbaar) gedownload en opslagen op het apparaat. Dergelijke bestanden kunnen bijvoorbeeld worden gebruikt om de weergavekwaliteit van aangesloten beeldschermen te verbeteren.</translation> <translation id="8905426178924715309">Dit beleid is verouderd. Gebruik in plaats hiervan ForceGoogleSafeSearch en ForceYouTubeSafetyMode. Dit beleid wordt genegeerd als het beleid ForceGoogleSafeSearch of ForceYouTubeSafetyMode is ingesteld. Hiermee wordt afgedwongen dat zoekopdrachten in Google Zoeken worden uitgevoerd wanneer SafeSearch is ingesteld op 'actief', en wordt voorkomen dat gebruikers deze instelling kunnen wijzigen. Met deze instelling wordt ook de Beperkte modus op YouTube afgedwongen.
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb index f5990c935..69aac4d8 100644 --- a/components/policy/resources/policy_templates_no.xtb +++ b/components/policy/resources/policy_templates_no.xtb
@@ -92,6 +92,7 @@ <translation id="1359553908012294236">Hvis denne regelen settes til true (sann) eller ikke konfigureres, slås gjestepålogginger på i <ph name="PRODUCT_NAME" />. Gjestepålogginger er <ph name="PRODUCT_NAME" />-profiler der alle vinduene er i inkognitomodus. Hvis denne regelen settes til false (usann), tillater ikke <ph name="PRODUCT_NAME" /> at gjesteprofiler startes.</translation> +<translation id="1363275621236827384">Slå på forespørsler til Quirks Server for maskinvareprofiler</translation> <translation id="1397855852561539316">Foreslått nettadresse for standard søkeleverandør</translation> <translation id="1398889361882383850">Med denne retningslinjen kan du angi hvorvidt nettsteder har tillatelse til å kjøre programtillegg automatisk. Automatisk kjøring av programtillegg kan enten tillates eller nektes for alle nettsteder. @@ -719,6 +720,13 @@ Verdien for innstillingen må spesifiseres i millisekunder. Verdier settes innenfor et spenn fra 30 sekunder til 24 timer.</translation> <translation id="3528000905991875314">Aktiver alternative feilsider</translation> +<translation id="3538538104630456270">Den tilknyttede innstillingen ble brukt før vi implementerte ny autentisering for visning av passord. Etter dette har ikke innstillingen – og dermed heller ikke denne retningslinjen – hatt noen innvirkning på atferden til Chrome. Den nåværende atferden til Chrome er den samme som hvis retningslinjen hadde vært konfigurert til å slå av visningen av passord i klartekst på innstillingssiden i passordbehandlingen. Det betyr at innstillingssiden bare har en plassholder, og brukeren må klikke på «Vis» (og eventuelt utføre en ny autentisering) for å se passordet i Chrome. Den originale beskrivelsen av retningslinjen er som følger. + + Kontrollerer om brukeren kan vise passord i klartekst i passordbehandlingen. + + Hvis du deaktiverer denne innstillingen, tillater ikke passordbehandlingen at lagrede passord vises i klartekst i vinduet til passordbehandlingen. + + Hvis du aktiverer eller ikke angir denne retningslinjen, kan brukerne se passordene i klartekst i passordbehandlingen.</translation> <translation id="3547954654003013442">Innstillinger for proxy-tjener</translation> <translation id="3570008976476035109">Blokkér programtillegg på disse nettstedene</translation> <translation id="3591584750136265240">Konfigurer autentiseringsatferden ved pålogging</translation> @@ -1687,6 +1695,7 @@ Hvis denne innstillingen ikke angis, kan brukeren endre listen over programmer som er festet i programlisten.</translation> <translation id="7132877481099023201">Nettadresser som uten forespørsel blir gitt tilgang til enheter med videoopptak</translation> +<translation id="7167436895080860385">Gi brukere tillatelse til å se passord i passordbehandlingen</translation> <translation id="7173856672248996428">Midlertidig profil</translation> <translation id="7187256234726597551">Hvis angitt til «true», tillates ekstern bekreftelse for enheten, og et sertifikat genereres automatisk og lastes opp til administreringstjeneren for enheten. @@ -2008,6 +2017,7 @@ <translation id="8197918588508433925">Denne innstillingen angir hvilke utvidelser som har tillatelse til å bruke Enterprise Platform Keys API-en chrome.enterprise.platformKeysPrivate.challengeUserKey() for ekstern attestering. Utvidelser må legges til på listen for å bruke API-en. Hvis en utvidelse ikke er på listen, eller listen ikke er angitt, vil kall av API-en returnere en feilkode.</translation> +<translation id="8214600119442850823">Konfigurerer passordbehandlingen.</translation> <translation id="8244525275280476362">Maksimal innlastingsforsinkelse etter ugyldiggjøring av en innstilling</translation> <translation id="8256688113167012935">Kontrollerer hvilket kontonavn <ph name="PRODUCT_OS_NAME" /> viser på påloggingsskjermen for enhetens tilhørende lokale konto. @@ -2188,6 +2198,18 @@ <translation id="8858642179038618439">Bruk tvungen sikkerhetsmodus i YouTube</translation> <translation id="8864975621965365890">Ignorerer avslagsforespørselen som vises når et nettsted gjengis av <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Startside</translation> +<translation id="8889588091638298603">Med Quirks Server får du konfigurasjonsfiler som er spesifikke for ulike typer + maskinvare, for eksempel ICC-visningsprofiler du kan bruke for å justere + skjermkalibreringer. + + Når denne retningslinjen er satt til «false» (usann), prøver ikke enheten + å kontakte Quirks Server for å laste ned konfigurasjonsfiler. + + Hvis denne retningslinjen er satt til «true» (sann) eller ikke er konfigurert, + kontakter <ph name="PRODUCT_OS_NAME" /> + Quirks Server automatisk, laster ned eventuelle tilgjengelige + konfigurasjonsfiler og lagrer dem på enheten. Slike filer kan for eksempel + brukes for å forbedre visningskvaliteten på tilkoblede skjermer.</translation> <translation id="8905426178924715309">Denne regelen er avviklet. Bruk ForceGoogleSafeSearch og ForceYouTubeSafetyMode i stedet. Denne regelen ignoreres hvis ForceGoogleSafeSearch eller ForceYouTubeSafetyMode er spesifisert. Tvinger søkene i Google Nettsøk til å gjøres med Sikkert Søk slått på, og hindrer brukerne i å endre denne innstillingen. Denne regelen tvinger også frem bruk av sikkerhetsmodus i YouTube.
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb index 07568bc8..be4a5587 100644 --- a/components/policy/resources/policy_templates_pl.xtb +++ b/components/policy/resources/policy_templates_pl.xtb
@@ -81,6 +81,7 @@ <translation id="1359553908012294236">Jeśli ta zasada jest włączona lub nieskonfigurowana, <ph name="PRODUCT_NAME" /> będzie umożliwiać logowanie się w trybie gościa. Dane logowania gościa to profile <ph name="PRODUCT_NAME" />, dla których wszystkie okna otwierają się w trybie incognito. Jeśli zasada jest wyłączona, <ph name="PRODUCT_NAME" /> nie zezwala na uruchamianie sesji gościa.</translation> +<translation id="1363275621236827384">Włącz wysyłanie zapytań o profile sprzętowe do Quirks Server</translation> <translation id="1397855852561539316">Adres URL usługi propozycji od domyślnego dostawcy wyszukiwania</translation> <translation id="1398889361882383850">Pozwala określić, czy strony będą mogły automatycznie uruchamiać wtyczki. Automatyczne uruchamianie wtyczek może być dozwolone dla wszystkich witryn lub zabronione dla wszystkich witryn. @@ -681,6 +682,13 @@ Wartość opcji należy podać w milisekundach. Wartości są dopasowywane do przedziału od 30 sekund od 24 godzin.</translation> <translation id="3528000905991875314">Włącz alternatywne strony błędów</translation> +<translation id="3538538104630456270">To ustawienie było używane przed wprowadzeniem ponownego uwierzytelniania przy wyświetleniu haseł. Po wprowadzeniu ponownego uwierzytelniania ustawienie i zasada nie mają żadnego wpływu na działanie Chrome. Obecnie Chrome działa tak, jakby zasada wyłączała wyświetlanie tekstu haseł na stronie ustawień menedżera haseł. Oznacza to, że na stronie ustawień znajduje się tylko element zastępczy, a dopiero po kliknięciu przez użytkownika „Pokaż” (i ponownym uwierzytelnieniu, jeśli jest wymagane) Chrome pokaże hasło. Poniżej wcześniejszy opis tej zasady. + + Pozwala określić, czy użytkownik może wyświetlać tekst haseł w menedżerze haseł. + + Jeśli wyłączysz to ustawienie, w oknie menedżera haseł nie będzie można wyświetlać tekstu przechowywanych haseł. + + W przypadku włączenia lub nieskonfigurowania tej zasady użytkownicy będą mogli wyświetlać tekst haseł w menedżerze haseł.</translation> <translation id="3547954654003013442">Ustawienia serwera proxy</translation> <translation id="3570008976476035109">Blokuj wtyczki w tych witrynach</translation> <translation id="3591584750136265240">Skonfiguruj sposób uwierzytelniania logowania</translation> @@ -1570,6 +1578,7 @@ Jeśli zasada nie jest ustawiona, użytkownik może zmieniać listę aplikacji przypiętych w programie uruchamiającym.</translation> <translation id="7132877481099023201">Adresy URL, które bez pytania otrzymają dostęp do urządzeń do nagrywania filmów</translation> +<translation id="7167436895080860385">Zezwalaj użytkownikom na pokazywanie haseł w menedżerze haseł (wycofane)</translation> <translation id="7173856672248996428">Profil tymczasowy</translation> <translation id="7187256234726597551">Jeśli zasada ma wartość „prawda”, zdalne poświadczanie na potrzeby urządzenia jest dozwolone, a certyfikat jest automatycznie generowany i przesyłany na serwer zarządzania urządzeniami. @@ -1866,6 +1875,7 @@ <translation id="8197918588508433925">Ta zasada określa dozwolone rozszerzenia do użycia z funkcją chrome.enterprise.platformKeysPrivate.challengeUserKey() interfejsu API Enterprise Platform Keys do zdalnego poświadczania. Rozszerzenia muszą zostać dodane do tej listy, by były używane z interfejsem API. Jeśli rozszerzenie nie znajduje się na liście, lub lista nie jest ustawiona, wywołanie interfejsu API zakończy się błędem.</translation> +<translation id="8214600119442850823">Pozwala skonfigurować menedżera haseł.</translation> <translation id="8244525275280476362">Maksymalne opóźnienie pobrania po unieważnieniu zasady</translation> <translation id="8256688113167012935">Określa nazwę konta, którą <ph name="PRODUCT_OS_NAME" /> pokazuje na ekranie logowania dla danego lokalnego konta na urządzeniu. @@ -2033,6 +2043,17 @@ <translation id="8858642179038618439">Wymuś tryb bezpieczny w YouTube</translation> <translation id="8864975621965365890">Pomija monit o odinstalowanie wyświetlany wtedy, gdy witryna jest renderowana przez <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Strona startowa</translation> +<translation id="8889588091638298603">Quirks Server dostarcza pliki konfiguracyjne dla określonych urządzeń, takie jak + profile ICC do kalibracji monitorów. + + W przypadku wyłączenia tej zasady urządzenie nie będzie próbować + pobrać plików konfiguracyjnych z Quirks Server. + + Gdy zasada jest włączona lub nie została skonfigurowana, + <ph name="PRODUCT_OS_NAME" /> będzie + automatycznie pobierać pliki konfiguracyjne z Quirks Server + (jeśli będą dostępne) i zapisywać je na urządzeniu. Takie pliki mogą + na przykład poprawiać jakość obrazu na podłączonych monitorach.</translation> <translation id="8905426178924715309">Ta zasada została wycofana. Zamiast niej użyj ForceGoogleSafeSearch lub ForceYouTubeSafetyMode. Zasada zostanie zignorowana, jeśli ustawiona zostanie zasada ForceGoogleSafeSearch lub ForceYouTubeSafetyMode. Wymusza realizację zapytań w wyszukiwarce Google przy użyciu filtra SafeSearch i uniemożliwia użytkownikom zmianę tego ustawienia. To ustawienie wymusza też włączenie Trybu bezpiecznego w YouTube.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index b4fb600..5285cbe2 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -78,6 +78,7 @@ <translation id="1359553908012294236">Se esta política é definida como "true" ou não é configurada, o <ph name="PRODUCT_NAME" /> ativa os logins de convidados. Os logins de convidados são perfis do <ph name="PRODUCT_NAME" /> nos quais todas as janelas ficam no modo de navegação anônima. Se esta política é definida como "false", o <ph name="PRODUCT_NAME" /> não permite que perfis de convidados sejam iniciados.</translation> +<translation id="1363275621236827384">Permitir consultas no Servidor Quirks para perfis de hardware</translation> <translation id="1397855852561539316">URL sugerido do provedor de pesquisa padrão</translation> <translation id="1398889361882383850">Permite definir se os websites estão autorizados a executar plug-ins automaticamente. A execução automática de plug-ins pode ser permitida ou negada para todos os websites. @@ -666,6 +667,13 @@ O valor da política deve ser especificado em milissegundos, Os valores são fixados em um intervalo de 30 segundos a 24 horas.</translation> <translation id="3528000905991875314">Ativar páginas de erro alternativas</translation> +<translation id="3538538104630456270">A configuração associada foi usada antes da reautenticação de exibição de senhas ser introduzida. Desde então, a configuração e, portanto, esta política, não tiveram efeito no comportamento do Chrome. O comportamento atual do Chrome é o mesmo que seria caso a política estivesse definida para desativar a exibição de senhas em texto não criptografado na página de configurações do gerenciador de senha. Isso significa que a página de configurações contém apenas um marcador, e somente depois que usuário clicar em "Mostrar" (e fizer a reautenticação, se aplicável) o Chrome mostrará a senha. Veja abaixo a descrição original da política. + + Controla se o usuário pode exibir senhas em texto não criptografado no gerenciador de senhas. + + Se você desativar essa configuração, o gerenciador de senhas não permitirá a exibição de senhas armazenadas em texto não criptografado na janela do gerenciador de senhas. + + Se você ativar ou não definir esta política, os usuários poderão ver as próprias senhas em texto não criptografado no gerenciador de senhas.</translation> <translation id="3547954654003013442">Configurações de proxy</translation> <translation id="3570008976476035109">Bloquear plug-ins nestes sites</translation> <translation id="3591584750136265240">Configura o comportamento de autenticação de login</translation> @@ -1553,6 +1561,7 @@ Se esta política for deixada sem configuração, o usuário pode alterar a lista de aplicativos fixados no iniciador.</translation> <translation id="7132877481099023201">URLs que terão acesso a dispositivos de captura de vídeo sem solicitação</translation> +<translation id="7167436895080860385">Permitir que os usuários exibam senhas no gerenciador de senhas (uso suspenso)</translation> <translation id="7173856672248996428">Perfil temporário</translation> <translation id="7187256234726597551">Se for definida como "verdadeira", a declaração remota será permitida para o dispositivo e um certificado será gerado automaticamente e enviado ao Servidor de gerenciamento de dispositivos. @@ -1849,6 +1858,7 @@ <translation id="8197918588508433925">Esta política especifica as extensões que podem usar a API Enterprise Platform Keys chrome.enterprise.platformKeysPrivate.challengeUserKey() para declaração remota. As extensões devem ser adicionadas a esta lista para usar a API. Se uma extensão não estiver na lista ou se a lista não estiver definida, a chamada para a API falhará com um código de erro.</translation> +<translation id="8214600119442850823">Configura o gerenciador de senhas.</translation> <translation id="8244525275280476362">Atraso máximo de busca após a invalidação de uma política</translation> <translation id="8256688113167012935">Controla o nome da conta que o <ph name="PRODUCT_OS_NAME" /> mostra na tela de login para a conta local de dispositivo correspondente. @@ -2014,6 +2024,17 @@ <translation id="8858642179038618439">Forçar modo de segurança do YouTube</translation> <translation id="8864975621965365890">Remove a solicitação de recusa que aparece quando um site é processado pelo <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Página inicial</translation> +<translation id="8889588091638298603">O Servidor Quirks fornece arquivos de configuração específicos de hardware, como + perfis de exibição ICC para ajustar a calibragem do monitor. + + Quando esta política é definida como false, o dispositivo não tenta + entrar em contato com o Servidor Quirks para fazer o download de arquivos de configuração. + + Se esta política é definida como true ou não é configurada, + o <ph name="PRODUCT_OS_NAME" /> entra + em contato com o Servidor Quirks automaticamente e faz o download dos arquivos de configuração, + se eles estão disponíveis, e os armazena no dispositivo. Esses arquivos podem ser usados, + por exemplo, para melhorar a qualidade de exibição dos monitores acoplados.</translation> <translation id="8905426178924715309">O uso desta política está suspenso. Use ForceGoogleSafeSearch e ForceYouTubeSafetyMode em vez dela. Esta política é ignorada se a política ForceGoogleSafeSearch ou a ForceYouTubeSafetyMode estão configuradas. Força as consultas no Google Web Search a serem feitas com o SafeSearch ativado e impede que os usuários alterem essa configuração, a qual também força o Modo de segurança do YouTube.
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb index 3fe36ee0..a729ea2 100644 --- a/components/policy/resources/policy_templates_pt-PT.xtb +++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -89,6 +89,7 @@ <translation id="1359553908012294236">Se esta política for definida como verdadeira ou não for configurada, o <ph name="PRODUCT_NAME" /> permite inícios de sessão de convidados. Os inícios de sessão de convidados são perfis do <ph name="PRODUCT_NAME" /> em que todas as janelas estão no modo de navegação anónima. Se esta política for definida como falsa, o <ph name="PRODUCT_NAME" /> não permite que os perfis de convidado sejam iniciados.</translation> +<translation id="1363275621236827384">Ativar consultas ao Servidor Quirks para perfis de hardware</translation> <translation id="1397855852561539316">URL de sugestão do fornecedor de pesquisas padrão</translation> <translation id="1398889361882383850">Permite-lhe definir se os Websites têm automaticamente permissão para executar plug-ins. Os plug-ins automaticamente em execução podem ser permitidos para todos os Websites ou negados para todos os Websites. @@ -691,6 +692,13 @@ O valor da política deverá ser especificado em milissegundos. Os valores estão limitados a um intervalo entre 30 segundos e 24 horas.</translation> <translation id="3528000905991875314">Ativar páginas de erro alternativas</translation> +<translation id="3538538104630456270">A definição associada era utilizada antes da introdução da reautenticação durante a visualização de palavras-passe. Depois disso, a definição e, consequentemente, esta política deixaram de afetar o comportamento do Chrome. Atualmente, o Chrome comporta-se como se a política estivesse definida para desativar a apresentação das palavras-passe em texto não codificado na página de definições do gestor de palavras-passe. Isto significa que a página de definições inclui apenas um marcador de posição e o Chrome só mostra a palavra-passe depois de o utilizador clicar em "Mostrar" (e efetuar a reautenticação, se aplicável). Segue-se a descrição original da política. + + Controla se os utilizadores podem mostrar palavras-passe em texto não codificado no gestor de palavras-passe. + + Se desativar esta definição, o gestor de palavras-passe não permite mostrar as palavras-passe armazenadas em texto não codificado na janela do gestor. + + Se ativar ou não definir esta política, os utilizadores podem ver as palavras-passe em texto não codificado no gestor de palavras-passe.</translation> <translation id="3547954654003013442">Definições de proxy</translation> <translation id="3570008976476035109">Bloquear plug-ins nestes sites</translation> <translation id="3591584750136265240">Configurar o comportamento de autenticação de início de sessão</translation> @@ -1588,6 +1596,7 @@ Se esta política não for configurada, o utilizador pode alterar a lista de aplicações fixadas no iniciador.</translation> <translation id="7132877481099023201">URLs aos quais será concedido acesso a dispositivos de captura de vídeo imediatamente</translation> +<translation id="7167436895080860385">Permitir que os utilizadores mostrem palavras-passe no Gestor de palavras-passe (descontinuado)</translation> <translation id="7173856672248996428">Perfil efémero</translation> <translation id="7187256234726597551">Se verdadeira, a comprovação remota é permitida para o dispositivo e será automaticamente gerado um certificado e carregado para o Servidor de Gestão de Dispositivos. @@ -1884,6 +1893,7 @@ <translation id="8197918588508433925">Esta política especifica as extensões com a permissão para utilizar a API Enterprise Platform Keys chrome.enterprise.platformKeysPrivate.challengeUserKey() para a comprovação remota. As extensões têm de ser adicionadas a esta lista para poderem utilizar a API. Se uma extensão não estiver na lista ou a lista não estiver definida, a chamada para a API falhará e resultará num código de erro.</translation> +<translation id="8214600119442850823">Configura o gestor de palavras-passe.</translation> <translation id="8244525275280476362">Atraso máximo na obtenção após a invalidação de uma política</translation> <translation id="8256688113167012935">Controla o nome da conta mostrado pelo <ph name="PRODUCT_OS_NAME" /> no ecrã de início de sessão para a conta local do dispositivo correspondente. @@ -2053,6 +2063,17 @@ <translation id="8858642179038618439">Forçar o Modo de segurança do YouTube</translation> <translation id="8864975621965365890">Suprime o pedido de recusa que aparece quando um site é convertido por <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Página inicial</translation> +<translation id="8889588091638298603">O Servidor Quirks fornece ficheiros de configuração específicos do hardware, como + perfis de visualização ICC para ajustar a calibração do monitor. + + Quando esta política está definida como falsa, o dispositivo não tenta + contactar o Servidor Quirks para transferir ficheiros de configuração. + + Se esta política estiver definida como verdadeira ou não estiver configurada, + o <ph name="PRODUCT_OS_NAME" /> + contacta automaticamente o Servidor Quirks, transfere os ficheiros de configuração, + se estiverem disponíveis, e armazena-os no dispositivo. Estes ficheiros podem + ser utilizados, por exemplo, para melhorar a qualidade de visualização dos monitores ligados.</translation> <translation id="8905426178924715309">Esta política foi descontinuada. Utilize ForceGoogleSafeSearch e ForceYouTubeSafetyMode em alternativa. Esta política é ignorada se as políticas ForceGoogleSafeSearch ou ForceYouTubeSafetyMode forem definidas. Força a execução de consultas na Pesquisa Web do Google através da Pesquisa segura definida como ativa e impede os utilizadores de alterar esta definição. Esta definição também força o Modo de segurança no YouTube.
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb index 9fd297e..c666d7ee 100644 --- a/components/policy/resources/policy_templates_ro.xtb +++ b/components/policy/resources/policy_templates_ro.xtb
@@ -83,6 +83,7 @@ <translation id="1359553908012294236">Dacă această politică este activată sau nu este configurată, <ph name="PRODUCT_NAME" /> va permite conectările ca invitat. Conectările ca invitat sunt profiluri <ph name="PRODUCT_NAME" /> în care toate ferestrele sunt în modul incognito. Dacă această politică este dezactivată, <ph name="PRODUCT_NAME" /> nu va permite crearea profilurilor pentru invitați.</translation> +<translation id="1363275621236827384">Activează interogările către Quirks Server pentru profilurile hardware</translation> <translation id="1397855852561539316">Adresă URL de sugerare a furnizorului de căutare prestabilit</translation> <translation id="1398889361882383850">Puteți să setați permisiunea ca site-urile web să ruleze pluginuri în mod automat. Rularea automată a pluginurilor poate fi permisă sau refuzată pentru toate site-urile web în bloc. @@ -692,6 +693,13 @@ Valoarea politicii trebuie specificată în milisecunde. Valorile variază între 30 de secunde și 24 de ore.</translation> <translation id="3528000905991875314">Activează pagini de eroare alternative</translation> +<translation id="3538538104630456270">Setarea asociată a fost folosită înainte să fie introdusă reautentificarea la afișarea parolelor. De atunci, setarea și, prin urmare, această politică nu au avut niciun efect asupra comportamentului browserului Chrome. Browserul Chrome se comportă în prezent ca și când politica a fost setată astfel încât să se dezactiveze afișarea parolelor în text clar pe pagina de setări a managerului de parole. Acest lucru înseamnă că pagina de setări include numai un substituent, iar Chrome afișează parola numai dacă utilizatorul dă clic pe „Afișează” (și se reautentifică, dacă este cazul). Mai jos, urmează descrierea originală a politicii. + + Stabilește dacă utilizatorul poate afișa parolele în text clar în managerul de parole. + + Dacă dezactivezi această setare, managerul de parole nu permite afișarea în text clar în fereastra managerului de parole a parolelor stocate. + + Dacă activezi sau nu configurezi această politică, utilizatorii pot vedea parolele în text clar în managerul de parole.</translation> <translation id="3547954654003013442">Setări proxy</translation> <translation id="3570008976476035109">Blochează pluginurile pe aceste site-uri</translation> <translation id="3591584750136265240">Configurează comportamentul de autentificare la conectare</translation> @@ -1600,6 +1608,7 @@ Dacă această politică este lăsată nesetată, utilizatorul poate modifica lista cu aplicații fixate din lansator.</translation> <translation id="7132877481099023201">Adresele URL cărora li se va acorda acces automat la dispozitivele de capturare a conținutului video</translation> +<translation id="7167436895080860385">Permite utilizatorilor să afișeze parolele în managerul de parole (s-a renunțat la dezvoltare)</translation> <translation id="7173856672248996428">Profil efemer</translation> <translation id="7187256234726597551">Dacă această politică este activată, atestarea la distanță este permisă pentru dispozitiv. De asemenea, un certificat va fi generat și încărcat în mod automat pe Serverul de gestionare a dispozitivelor. @@ -1898,6 +1907,7 @@ <translation id="8197918588508433925">Această politică specifică extensiile cărora li se permite să utilizeze API-ul Enterprise Platform Keys chrome.enterprise.platformKeysPrivate.challengeUserKey() pentru atestarea la distanță. Extensiile trebuie să fie adăugate în această listă pentru a utiliza API-ul. Dacă o extensie nu este în listă sau dacă lista nu este configurată, apelul către API nu va reuși și va genera un cod de eroare.</translation> +<translation id="8214600119442850823">Configurează managerul de parole.</translation> <translation id="8244525275280476362">Întârzierea maximă la preluare după invalidarea unei politici</translation> <translation id="8256688113167012935">Controlează numele de cont afișat de <ph name="PRODUCT_OS_NAME" /> pe ecranul de pornire pentru contul local corespondent de pe gadget. @@ -2073,6 +2083,17 @@ <translation id="8858642179038618439">Forțează Modul sigur pe YouTube</translation> <translation id="8864975621965365890">Elimină solicitarea de refuzare care apare atunci când un site web este redat de <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Pagina de pornire</translation> +<translation id="8889588091638298603">Quirks Server oferă fișiere de configurare specifice hardware-ului, cum ar fi + profiluri de afișare ICC pentru ajustarea calibrării monitorului. + + Când această politică este dezactivată, dispozitivul nu va încerca + să contacteze Quirks Server pentru a descărca fișierele de configurare. + + Dacă această politică este activată sau nu este configurată, + <ph name="PRODUCT_OS_NAME" /> va + contacta automat Quirks Server și va descărca fișierele de configurare, + dacă sunt disponibile, apoi le va stoca pe dispozitiv. Astfel de fișiere pot, de + exemplu, să fie folosite pentru a îmbunătăți calitatea afișării de pe monitoarele atașate.</translation> <translation id="8905426178924715309">Această politică este învechită. Folosește ForceGoogleSafeSearch și ForceYouTubeSafetyMode. Această politică va fi ignorată dacă sunt configurate politicile ForceGoogleSafeSearch sau ForceYouTubeSafetyMode. Forțează activarea Căutării sigure pentru interogările de pe Căutarea Google pe web și nu permite utilizatorilor să modifice această setare. De asemenea, această setare impune Modul sigur pe YouTube.
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb index 2b5a9c7..91d7722e 100644 --- a/components/policy/resources/policy_templates_sk.xtb +++ b/components/policy/resources/policy_templates_sk.xtb
@@ -96,6 +96,7 @@ <translation id="1359553908012294236">Ak je toto pravidlo nastavené na možnosť True alebo nie je nakonfigurované, prehliadač <ph name="PRODUCT_NAME" /> povolí prihlasovanie hostí. Prihlásenia hostí sú profily prehliadača <ph name="PRODUCT_NAME" />, v ktorých sú všetky okná v režime inkognito. Ak je toto pravidlo nastavené na možnosť False, prehliadač <ph name="PRODUCT_NAME" /> nepovolí spustenie profilov hostí.</translation> +<translation id="1363275621236827384">Povoľte dopyty na serveri Quirks pre hardvérové profily</translation> <translation id="1397855852561539316">Webová adresa návrhu predvoleného poskytovateľa vyhľadávania</translation> <translation id="1398889361882383850">Umožňuje nastaviť, či môžu webové stránky automaticky spúšťať doplnky. Automatické spúšťanie doplnkov môže byť pre všetky webové stránky povolené alebo zakázané. @@ -746,6 +747,14 @@ Hodnota pravidla by mala byť uvedená v milisekundách. Hodnoty musia byť v rozsahu od 30 sekúnd do 24 hodín.</translation> <translation id="3528000905991875314">Povoliť alternatívne chybové stránky</translation> +<translation id="3538538104630456270">Toto súvisiace nastavenie sa používalo predtým, ako bolo prestavené opätovné overenie pri zobrazovaní hesiel. Odvtedy nemalo toto nastavenie, a teda ani toto pravidlo, žiadny vplyv na správanie Chromu. Aktuálne správanie Chromu je teraz rovnaké, ako keby bolo toto pravidlo nastavené na možnosť, ktorá zakazuje zobrazovanie hesiel formou čitateľného textu na stránke s nastaveniami správcu hesiel. Znamená to, že stránka s nastaveniami obsahuje iba zástupný symbol a Chrome zobrazí heslo iba po kliknutí na možnosť Zobraziť (a po opätovnom overení, ak ho používate). Pôvodný popis tohto pravidla je uvedený nižšie. + + Určuje, či môžu používatelia zobraziť heslá v správcovi hesiel formou čitateľného textu. + + +Ak toto nastavenie zakážete, v okne správcu hesiel nebude možné zobraziť uložené heslá formou čitateľného textu. + + Ak toto nastavenie povolíte alebo ho nenastavíte, používatelia budú môcť v správcovi hesiel zobraziť uložené heslá formou čitateľného textu.</translation> <translation id="3547954654003013442">Nastavenia servera proxy</translation> <translation id="3570008976476035109">Blokovať doplnky na týchto stránkach</translation> <translation id="3591584750136265240">Konfigurácia správania pri overovaní prihlasovacích údajov</translation> @@ -1738,6 +1747,7 @@ Ak toto pravidlo nastavené nie je, používateľ zoznam aplikácií v spúšťači zmeniť môže.</translation> <translation id="7132877481099023201">Webové adresy, ktorým bude udelený prístup k zariadeniam na zaznamenávanie videa bez zobrazenia výzvy</translation> +<translation id="7167436895080860385">Povoliť používateľom zobraziť heslá v Správcovi hesiel (podpora bola ukončená)</translation> <translation id="7173856672248996428">Efemérny profil</translation> <translation id="7187256234726597551">Ak je toto pravidlo nastavené na hodnotu true, pre zariadenia sa povolí vzdialené overenie a certifikát sa automaticky vygeneruje a odovzdá na server na správu zariadení. @@ -2059,6 +2069,7 @@ <translation id="8197918588508433925">Toto pravidlo určuje, pre ktoré rozšírenia bude povolené vzdialené prihlásenie pomocou metódy chrome.enterprise.platformKeysPrivate.challengeUserKey() rozhrania Enterprise Platform Keys API. Aby mohli rozšírenia používať toto rozhranie API, musia byť pridané do tohto zoznamu. Ak sa rozšírenie na zozname nenachádza alebo zoznam nie je vytvorený, volania rozhrania API zlyhajú a nahlásia kód chyby.</translation> +<translation id="8214600119442850823">Umožňuje konfiguráciu správcu hesiel.</translation> <translation id="8244525275280476362">Maximálne oneskorenie načítania po zrušení platnosti pravidla</translation> <translation id="8256688113167012935">Ovláda názov účtu, ktorý systém <ph name="PRODUCT_OS_NAME" /> zobrazí na obrazovke prihlásenia pre zodpovedajúci miestny účet na zariadení. @@ -2236,6 +2247,17 @@ <translation id="8858642179038618439">Vynútenie Bezpečnostného režimu v službe YouTube</translation> <translation id="8864975621965365890">Potlačí výzvu o zamietnutie, ktorá sa zobrazí pri vykreslení stránky rámcom <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Domovská stránka</translation> +<translation id="8889588091638298603">Server Quirks poskytuje konfiguračné súbory pre konkrétny hardvér, ako + napríklad profily obrazoviek ICC na úpravu kalibrácie monitorov. + + Keď toto pravidlo nastavíte na možnosť False, zariadenie sa nepokúsi + kontaktovať server Quirks a stiahnuť konfiguračné súbory. + + Ak toto pravidlo nastavíte na možnosť True alebo ho nenakonfigurujete, + systém <ph name="PRODUCT_OS_NAME" /> + automaticky kontaktuje server Quirks a stiahne konfiguračné súbory, + ak budú k dispozícii, a uloží ich na zariadení. Tieto súbory je možné + použiť napríklad na vylepšenie kvality zobrazenia na pripojených monitoroch.</translation> <translation id="8905426178924715309">Podpora tohto pravidla je ukončená. Použite namiesto neho pravidlá ForceGoogleSafeSearch a ForceYouTubeSafetyMode. Ak nastavíte pravidlo ForceGoogleSafeSearch alebo ForceYouTubeSafetyMode, pôvodné pravidlo sa bude ignorovať. Vynucuje vyhľadávanie dopytov vo Vyhľadávaní Google na webe pomocou aktívneho Bezpečného vyhľadávania a zabraňuje používateľom toto nastavenie zmeniť. Toto nastavenie tiež vynucuje použitie Bezpečného režimu v službe YouTube.
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb index e95f324e..fdffb271 100644 --- a/components/policy/resources/policy_templates_sl.xtb +++ b/components/policy/resources/policy_templates_sl.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Če je ta pravilnik omogočen ali ni nastavljen, <ph name="PRODUCT_NAME" /> omogoči prijave gostov. Prijave gostov so profili v brskalniku <ph name="PRODUCT_NAME" />, v katerih so vsa okna v načinu brez beleženja zgodovine. Če je ta pravilnik onemogočen, <ph name="PRODUCT_NAME" /> ne dovoli profilov gosta.</translation> +<translation id="1363275621236827384">Omogoči poizvedbe strežniku Quirks Server za profile strojne opreme.</translation> <translation id="1397855852561539316">Privzeti URL iskalnika za predlog</translation> <translation id="1398889361882383850">Omogoča nastavitev, ali je spletnim mestom dovoljeno samodejno izvajati vtičnike. Samodejno izvajanje vtičnikov je mogoče dovoliti za vsa spletna mesta ali zavrniti za vsa spletna mesta. @@ -750,6 +751,13 @@ Vrednost pravilnika mora biti navedena v milisekundah. Vrednosti so v obsegu od 30 sekund do 24 ur.</translation> <translation id="3528000905991875314">Omogoči nadomestne strani za napake</translation> +<translation id="3538538104630456270">Povezana nastavitev je bila uporabljena pred uvedbo vnovičnega preverjanja pristnosti ob ogledu gesel. Od takrat nastavitev in posledično ta pravilnik nimata nobenega vpliva na način delovanja Chroma. Trenuten način delovanja Chroma je zdaj enak, kot da bi bil pravilnik nastavljen tako, da onemogoča prikaz nešifriranih gesel na strani z nastavitvami upravitelja gesel. To pomeni, da je na strani z nastavitvami samo nadomestni znak in Chrome geslo prikaže šele, ko uporabnik klikne »Pokaži« (in po vnovičnem preverjanju pristnosti, če je potrebno). Izvirni opis pravilnika je spodaj. + + Določa, ali lahko uporabnik v upravitelju gesel pokaže nešifrirana gesla. + + Če to nastavitev onemogočite, upravitelj gesel ne dovoli prikaza shranjenih gesel v nešifrirani obliki v oknu upravitelja gesel. + + Če ta pravilnik omogočite ali ga ne nastavite, si lahko uporabniki v upravitelju gesel svoja gesla ogledajo v nešifrirani obliki.</translation> <translation id="3547954654003013442">Nastavitve proxyja</translation> <translation id="3570008976476035109">Blokiraj vtičnike na teh mestih</translation> <translation id="3591584750136265240">Konfiguriranje preverjanja pristnosti pri prijavi</translation> @@ -1750,6 +1758,7 @@ Če pravilnik ni nastavljen, lahko uporabnik spremeni seznam pripetih aplikacij v zaganjalniku.</translation> <translation id="7132877481099023201">URL-ji, ki jim bo brez poziva dovoljen dostop do naprav za zajem videa</translation> +<translation id="7167436895080860385">Dovoli uporabnikom, da pokažejo gesla v upravitelju gesel (zastarelo).</translation> <translation id="7173856672248996428">Kratkotrajni profil</translation> <translation id="7187256234726597551">Če je ta pravilnik vklopljen, bo za to napravo dovoljeno oddaljeno potrjevanje in samodejno bo ustvarjeno potrdilo, ki bo preneseno v strežnik za upravljanje naprav. @@ -2076,6 +2085,7 @@ <translation id="8197918588508433925">Ta pravilnik določa dovoljene razširitve, ki lahko uporabljajo API Enterprise Platform Keys chrome.enterprise.platformKeysPrivate.challengeUserKey() za potrditev na daljavo. Razširitve, ki lahko uporabljajo API, morate dodati na ta seznam. Če razširitve ni na seznamu ali seznam ni nastavljen, poziv API-ju ne bo uspel in bo prikazano sporočilo o napaki.</translation> +<translation id="8214600119442850823">Konfigurira upravitelja gesel.</translation> <translation id="8244525275280476362">Največja zakasnitev za prenos po zavrnitvi preverjanja pravilnika</translation> <translation id="8256688113167012935">Nadzira prikaz imena računa na zaslonu za prijavo v sistemu <ph name="PRODUCT_OS_NAME" /> za ustrezen lokalni račun za napravo. @@ -2269,6 +2279,17 @@ <translation id="8858642179038618439">Vsiljenje varnega načina v YouTubu</translation> <translation id="8864975621965365890">Ne prikaže poziva za preklop, ki se prikaže, ko se spletno mesto upodablja z <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Domača stran</translation> +<translation id="8889588091638298603">Strežnik Quirks Server ponuja konfiguracijske datoteke za posamezne komponente strojne opreme, kot so + prikazovalni profili ICC za prilagajanje umerjanja monitorja. + + Če je ta pravilnik nastavljen na »False«, naprava ne bo poskušala + vzpostaviti stika s strežnikom Quirks Server in prenesti konfiguracijskih datotek. + + Če je ta pravilnik nastavljen na »True« ali ni konfiguriran, + bo <ph name="PRODUCT_OS_NAME" /> + samodejno vzpostavil stik s strežnikom Quirks Server in prenesel konfiguracijske + datoteke, če so na voljo, ter jih shranil v napravi. Te datoteke je mogoče + na primer uporabiti za izboljšanje kakovosti prikaza priključenih monitorjev.</translation> <translation id="8905426178924715309">Ta pravilnik je zastarel, uporabite ForceGoogleSafeSearch in ForceYouTubeSafetyMode. Ta pravilnik bo prezrt, če je nastavljen pravilnik ForceGoogleSafeSearch ali ForceYouTubeSafetyMode. Uveljavi izvajanje poizvedb v Google Spletnem iskanju z aktiviranim Varnim iskanjem in uporabnikom prepreči spreminjanje te nastavitve. Ta nastavitev uveljavi tudi varni način v YouTubu.
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb index 0b96053a..6a83f15 100644 --- a/components/policy/resources/policy_templates_sr.xtb +++ b/components/policy/resources/policy_templates_sr.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Ако подесите ове смернице на Тачно или их не конфигуришете, <ph name="PRODUCT_NAME" /> ће омогућити пријављивање гостију. Гости се пријављују помоћу <ph name="PRODUCT_NAME" /> профила на којима су сви прозори у режиму без архивирања. Ако подесите ове смернице на Нетачно, <ph name="PRODUCT_NAME" /> неће дозволити покретање профила гостију.</translation> +<translation id="1363275621236827384">Омогућава упите за Quirks сервер за профиле хардвера</translation> <translation id="1397855852561539316">URL адреса за предлог подразумеваног добављача претраге</translation> <translation id="1398889361882383850">Омогућава вам да подесите да ли ће веб-сајтовима бити дозвољено да аутоматски покрећу додатне компоненте. Аутоматско покретање додатних компоненти може да буде или дозвољено или забрањено за све веб-сајтове. @@ -741,6 +742,13 @@ Вредност за ове смернице би требало да буде наведена у милисекундама. Вредности су придружене опсегу од 30 секунди до 24 сата.</translation> <translation id="3528000905991875314">Омогући алтернативне странице са грешкама</translation> +<translation id="3538538104630456270">Повезано подешавање је коришћено пре него што је представљена поновна потврда аутентичности за преглед лозинки. Од тада ово подешавање и, самим тим, ове смернице нису имали утицај на понашање Chrome-а. Актуелно понашање Chrome-а сада је исто као да су онемогућене смернице за приказивање лозинки у јасном тексту на страници подешавања менаџера лозинки. То значи да страница подешавања садржи само чувар места и да Chrome приказује лозинку само када корисник кликне на „Прикажи“ (и после поновне потврде аутентичности ако је применљиво). Оригинални опис смерница наведен је у наставку. + + Контролише да ли корисник сме да прегледа лозинке у јасном тексту у менаџеру лозинки. + + Ако онемогућите ово подешавање, менаџер лозинки не допушта приказивање сачуваних лозинки у јасном тексту у свом прозору. + + Ако омогућите или не подесите ово подешавање, корисници могу да виде лозинке у јасном тексту у менаџеру лозинки.</translation> <translation id="3547954654003013442">Подешавања проксија</translation> <translation id="3570008976476035109">Блокирај додатне компоненте на овим сајтовима</translation> <translation id="3591584750136265240">Конфигурише понашање при потврди аутентичности за пријављивање</translation> @@ -1727,6 +1735,7 @@ Ако ове смернице не буду подешене, корисник може да промени листу закачених апликација у покретачу.</translation> <translation id="7132877481099023201">URL-ови којима ће бити одобрен приступ уређајима за снимање видео садржаја без приказивања упита</translation> +<translation id="7167436895080860385">Омогућава корисницима преглед лозинки у Менаџеру лозинке (застарело)</translation> <translation id="7173856672248996428">Привремен профил</translation> <translation id="7187256234726597551">Ако су подешене на тачно, даљинска потврда је омогућена за уређај и сертификат ће бити аутоматски генерисан и отпремљен на сервер за управљање уређајима. @@ -2054,6 +2063,7 @@ <translation id="8197918588508433925">Ове смернице наводе додатке којима је дозвољено да користе API Кључеви платформи за предузећа chrome.enterprise.platformKeysPrivate.challengeUserKey() за даљинску потврду. Додаци морају да буду додати на ову листу да би користили API. Ако се додатак не налази на листи или листа није подешена, активација API-ја неће успети и приказаће се кôд грешке.</translation> +<translation id="8214600119442850823">Конфигурише менаџера лозинке.</translation> <translation id="8244525275280476362">Максимално кашњење при преузимању после поништавања смерница</translation> <translation id="8256688113167012935">Контролише назив налога који <ph name="PRODUCT_OS_NAME" /> приказује на екрану за пријављивање за одговарајући локални налог на уређају. @@ -2239,6 +2249,17 @@ <translation id="8858642179038618439">Наметни Безбедни режим на YouTube-у</translation> <translation id="8864975621965365890">Спречава приказивање упита за одбијање који се појављује када <ph name="PRODUCT_FRAME_NAME" /> приказује сајт.</translation> <translation id="8870318296973696995">Почетна страница</translation> +<translation id="8889588091638298603">Quirks сервер обезбеђује посебне конфигурационе датотеке за хардвер, попут + ICC профила за екран ради подешавања калибрације монитора. + + Када су ове смернице подешене на Нетачно, уређај неће покушавати да + контактира Quirks сервер ради преузимања конфигурационих датотека. + + Ако су ове смернице подешене на Тачно или нису конфигурисане, + <ph name="PRODUCT_OS_NAME" /> ће + аутоматски да контактира Quirks сервер и преузеће конфигурационе датотеке + ако су доступне и сачуваће их на уређају. На пример, такве датотеке + могу да се користе за побољшање квалитета приказа на прикљученим мониторима.</translation> <translation id="8905426178924715309">Ове смернице су застареле. Требало би да користите смернице ForceGoogleSafeSearch и ForceYouTubeSafetyMode. Ове смернице ће бити занемарене ако подесите смернице ForceGoogleSafeSearch или ForceYouTubeSafetyMode. Намећу претрагу упита у Google веб-претрази са активираном Сигурном претрагом и спречавају кориснике да мењају то подешавање. Ово подешавање намеће и Безбедни режим на YouTube-у.
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb index 67594143..899da9d 100644 --- a/components/policy/resources/policy_templates_sv.xtb +++ b/components/policy/resources/policy_templates_sv.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Om den här principen är inställd på sant, eller om den inte är konfigurerad, aktiveras gästinloggning i <ph name="PRODUCT_NAME" />. Gästinloggningar är profiler i <ph name="PRODUCT_NAME" /> där alla fönster öppnas i inkognitoläge. Om principen är inställd på falskt tillåts ingen användning av gästprofiler i <ph name="PRODUCT_NAME" />.</translation> +<translation id="1363275621236827384">Aktivera frågor till Quirks-servern (servern för maskinvaruspecifik information) om maskinvaruprofiler</translation> <translation id="1397855852561539316">Standardsökleverantörens förslagsadress</translation> <translation id="1398889361882383850">Gör det möjligt att ange om webbplatser får köra plugin-program automatiskt. Det går att tillåta eller neka att plugin-program körs automatiskt för alla webbplatser. @@ -754,6 +755,13 @@ Policyvärdet ska anges i millisekunder. Värden anges inom ett intervall från 30 sekunder till 24 timmar.</translation> <translation id="3528000905991875314">Aktivera alternativa felsidor</translation> +<translation id="3538538104630456270">Inställningen som hör ihop med den här principen användes innan vi införde systemet med att göra om autentiseringen efter att lösenorden visats. Sedan dess har inställningen – och därmed principen – inte haft någon inverkan på hur Chrome fungerar. Nu fungerar Chrome som om principen vore inställd på att inaktivera visning i klartext av lösenord på lösenordshanterarens inställningssida. Det innebär att det bara finns en platshållare på inställningssidan, och lösenordet visas bara om användaren klickar på Visa (och gör om autentiseringen i tillämpliga fall). Den ursprungliga beskrivningen av principen följer nedan. + + Styr om användaren kan visa lösenord i klartext i lösenordshanteraren. + + Om du inaktiverar den här inställningen går det inte att visa sparade lösenord i klartext i lösenordshanteraren. + + Om du aktiverar principen eller om den inte konfigureras kan användarnas lösenord visas i klartext i lösenordshanteraren.</translation> <translation id="3547954654003013442">Proxyinställningar</translation> <translation id="3570008976476035109">Blockera plugin-program för dessa webbplatser</translation> <translation id="3591584750136265240">Konfigurera vad som ska göras vid inloggningsautentisering</translation> @@ -1756,6 +1764,7 @@ Om den här policyn inte ställs in kan användaren ändra listan med fasta appar i startfältet.</translation> <translation id="7132877481099023201">Webbadresser som ska beviljas åtkomst till videoinspelningsenheter utan meddelande</translation> +<translation id="7167436895080860385">Tillåt att användarnas lösenord visas i lösenordshanteraren (utfasad)</translation> <translation id="7173856672248996428">Kortlivad profil</translation> <translation id="7187256234726597551">Om detta är sant är vidimering på distans tillåtet för enheten och ett certifikat genereras automatiskt. Det laddas upp till enhetshanteringsservern. @@ -2083,6 +2092,7 @@ <translation id="8197918588508433925">Policyn specificerar vilka tillägg som får använda API:et för Enterprise Platform Keys – chrome.enterprise.platformKeysPrivate.challengeUserKey() – för fjärrattestering. Tillägg måste anges på den här listan om de ska kunna använda API:et. Om ett tillägg inte finns med på listan, eller om listan inte har fastställts, kommer anslutningen till API:et att misslyckas och en felkod att visas.</translation> +<translation id="8214600119442850823">Konfigurerar lösenordshanteraren.</translation> <translation id="8244525275280476362">Längsta fördröjning av hämtning efter en ogiltigförklarad policy</translation> <translation id="8256688113167012935">Kontrollerar hur kontonamnet <ph name="PRODUCT_OS_NAME" /> visas på inloggningssidan för motsvarande lokala konto på enheten. @@ -2278,6 +2288,17 @@ <translation id="8858642179038618439">Tvinga fram Säkert läge på YouTube</translation> <translation id="8864975621965365890">Ser till att avvisningsmeddelandet som visas när en webbplats renderas av <ph name="PRODUCT_FRAME_NAME" /> inte visas.</translation> <translation id="8870318296973696995">Startsida</translation> +<translation id="8889588091638298603">Quirks-servern tillhandahåller maskinvaruspecifika konfigurationsfiler, t.ex. + ICC-bildskärmsprofiler som används för färgkalibrering av skärmen. + + När principen är inställd på falskt försöker enheten inte kontakta + Quirks-servern för att ladda ned konfigurationsfiler. + + Om principen är inställd på sant eller om den inte har konfigurerats + kommer <ph name="PRODUCT_OS_NAME" /> + automatiskt att kontakta Quirks-servern och ladda ned konfigurationsfiler + (i mån av tillgång) och spara dem på enheten. Sådana filer kan till + exempel användas för att förbättra visningskvaliteten på anslutna skärmar.</translation> <translation id="8905426178924715309">Den här principen har fasats ut. Använd ForceGoogleSafeSearch och ForceYouTubeSafetyMode i stället. Principen ignoreras om antingen ForceGoogleSafeSearch eller ForceYouTubeSafetyMode har angetts. Sökfrågor i Googles webbsökning görs obligatoriskt med SafeSearch aktiverat och användarna förhindras att ändra inställningen. Med den här inställningen blir även Säkert läge obligatoriskt på YouTube.
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb index fbdfda0..ba9942f 100644 --- a/components/policy/resources/policy_templates_sw.xtb +++ b/components/policy/resources/policy_templates_sw.xtb
@@ -95,6 +95,7 @@ <translation id="1359553908012294236">Sera hii ikiwekwa kuwa ndivyo au isisanidiwe, <ph name="PRODUCT_NAME" /> itawasha kipengee cha wageni kuingia katika akaunti. Kuingia katika akaunti kwa wageni ni wasifu wa <ph name="PRODUCT_NAME" /> ambapo madirisha yote yako katika hali fiche. Sera hii ikiwekwa kuwa sivyo, <ph name="PRODUCT_NAME" /> haitaruhusu wasifu wa wageni kuanzishwa.</translation> +<translation id="1363275621236827384">Washa kipengele cha hoja za Seva ya Quirks ya wasifu wa maunzi</translation> <translation id="1397855852561539316">Mtoa huduma chaguo-msingi wa utafutaji anapendekeza URL</translation> <translation id="1398889361882383850">Inakuruhusu kuweka ikiwa tovuti zinaruhusiwa kuendesha programu jalizi kiotomatiki. Kuendesha programu jalizi kiotomatiki kunaweza kuruhusiwa kwa tovuti zote au kukataliwa kwa tovuti zote. @@ -735,6 +736,13 @@ Thamani ya sera inastahili kubainishwa katika milisekunde. Thamani zinabanwa kwenye masafa ya sekunde 30 hadi saa 24.</translation> <translation id="3528000905991875314">Wezesha kurasa badala za hitilafu</translation> +<translation id="3538538104630456270">Mipangilio husika ilitumiwa kabla ya kuanzishwa kwa uthibitishaji upya wa kuangalia manenosiri. Tangu wakati huo, mipangilio na sera hii haijaathiri utendaji wa Chrome. Utendaji wa sasa wa Chrome ni sawa na kana kwamba sera iliwekwa ili kuzima kipengele cha kuonyesha manenosiri katika maandishi yanayosomeka katika ukurasa wa mipangilio ya kidhibiti cha manenosiri. Hii inamaanisha kwamba ukurasa wa mipangilio una kishikilia nafasi pekee, na Chrome huonyesha nenosiri wakati mtumiaji anapobofya "Onyesha" (na kuthibitisha upya, iwapo kunatumika). Maelezo ya asili ya sera yanafuata hapa chini. + + Hudhibiti iwapo mtumiaji anaweza kuonyesha manenosiri katika maandishi yanayosomeka katika kidhibiti cha manenosiri. + + Ukiizima mipangilio hii, kidhibiti cha manenosiri hakiruhusu kuonyesha manenosiri yaliyohifadhiwa katika maandishi yanayosomeka katika dirisha la kidhibiti cha manenosiri. + + Ukiwasha au usipoweka sera hii, watumiaji wanaweza kuona manenosiri yao katika maandishi yanayosomeka katika kidhibiti cha manenosiri.</translation> <translation id="3547954654003013442">Mipangilio ya proksi</translation> <translation id="3570008976476035109">Zuia programu jalizi katika tovuti hizi</translation> <translation id="3591584750136265240">Weka mipangilio ya tabia ya kithibitishaji cha kuingia katika akaunti</translation> @@ -1719,6 +1727,7 @@ Ikiwa sera hii itaachwa bila kuwekwa, huenda mtumiaji akabadilisha orodha ya programu zilizobanwa katika kizinduzi.</translation> <translation id="7132877481099023201">URL ambazo zitapewa ufikiaji wa vifaa vya kunasa video bila ushawishi</translation> +<translation id="7167436895080860385">Waruhusu watumiaji kuonyesha manenosiri katika Kidhibiti cha Manenosiri (hakutumiki tena)</translation> <translation id="7173856672248996428">Mfumo wa Muda Mfupi</translation> <translation id="7187256234726597551">Kama ni kweli, ushuhuda wa mbali huruhusiwa kwa ajili ya kifaa na cheti kitazalishwa kiotomatiki na kupakiwa kwenye Seva ya Udhibiti wa Kifaa. Kama imewekwa kuwa haitumiki, au kama haijawekwa, hakuna cheti kitakachozalishwa na kupiga simu kwenyeAPI ya Kiendelezi chaenterprise.platformKeysPrivate zitashindwa.</translation> @@ -2038,6 +2047,7 @@ <translation id="8197918588508433925">Sera hii inabainisha viendelezi vilivyoruhusiwa ili kutumia Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() kwa uthibitishaji wa mbali. Lazima viendelezi viongezwe kwenye orodha hii ili kutumia API. Iwapo kiendelezi hakipo kwenye orodha, au orodha haijawekwa, upigaji simu katika API utashindwa kwa msimbo wa hitilafu.</translation> +<translation id="8214600119442850823">Husanidi kidhibiti cha manenosiri.</translation> <translation id="8244525275280476362">Upeo wa juu wa ucheleweshaji wa kuleta baada ya kutothibitisha sera</translation> <translation id="8256688113167012935">Hudhibiti jina la akaunti <ph name="PRODUCT_OS_NAME" /> inayoonekana kwenye skrini ya kuingia kwa ajili ya akaunti ya kifaa cha karibu nawe inayolingana. @@ -2225,6 +2235,16 @@ <translation id="8858642179038618439">Lazimisha Hali Salama ya YouTube</translation> <translation id="8864975621965365890">Didimiza kukataa kuuliza ambako huonekana tovuti inapotolewa na <ph name="PRODUCT_FRAME_NAME" /> .</translation> <translation id="8870318296973696995">Ukurasa wa Kwanza</translation> +<translation id="8889588091638298603">Seva ya Quirks hutoa faili mahususi za kusanidi maunzi, kama vile + wasifu wa onyesho la ICC ili kurekebisha upimaji wa kiwambo. + + Sera hii ikiwekwa katika hali ya sivyo, kifaa hakitajaribu + kuwasiliana na Seva ya Quirks ili kupakua faili za kusanidi. + + Sera hii ikiwekwa katika hali ya ndivyo au isiposanidiwa, basi + <ph name="PRODUCT_OS_NAME" /> itawasiliana na + Seva ya Quirks kiotomatiki na kupakua faili za kusanidi, + kama zipo, na kuzihifadhi kwenye kifaa. Kwa mfano, faili kama hizo zinaweza kutumiwa kuimarisha ubora wa onyesho la viwambo vilivyoambatishwa.</translation> <translation id="8905426178924715309">Sera hii imeacha kuendesha huduma, tafadhali tumia ForceGoogleSafeSearch na ForceYouTubeSafetyMode. Sera hii itapuuzwa ikiwa sera za ForceGoogleSafeSearch au ForceYouTubeSafetyMode zitawekwa. Hulazimisha hoja katika Utafutaji wa Wavuti wa Google kufanywa SafeSearch ikiwa imewashwa na huzuia watumiaji kubadilisha mipangilio hii. Mipangilio hii pia hulazimisha Hali Salama kwenye YouTube.
diff --git a/components/policy/resources/policy_templates_ta.xtb b/components/policy/resources/policy_templates_ta.xtb index 6b5a8c33..764809d 100644 --- a/components/policy/resources/policy_templates_ta.xtb +++ b/components/policy/resources/policy_templates_ta.xtb
@@ -76,6 +76,7 @@ <translation id="1359553908012294236">இந்தக் கொள்கை true என அமைக்கப்பட்டிருந்தாலோ அல்லது உள்ளமைக்கப்படாமல் இருந்தாலோ, விருந்தினர் உள்நுழைவுகளை <ph name="PRODUCT_NAME" /> இயக்கும். விருந்தினர் உள்நுழைவுகள் என்பவை அனைத்துச் சாளரங்களும் மறைநிலைப் பயன்முறையில் இருக்கும் <ph name="PRODUCT_NAME" /> சுயவிவரங்களாகும். இந்தக் கொள்கை false என அமைக்கப்பட்டால், விருந்தினர் சுயவிவரங்களைத் தொடங்க <ph name="PRODUCT_NAME" /> அனுமதிக்காது.</translation> +<translation id="1363275621236827384">வன்பொருள் சுயவிவரங்களுக்காக க்விர்க்ஸ் சேவையகத்தில் வினவல்களை இயக்கு</translation> <translation id="1397855852561539316">இயல்புநிலை தேடல் வழங்குநர் பரிந்துரை URL</translation> <translation id="1398889361882383850">இணையதளங்கள் தானாக செருகுநிரல்களை இயக்க அனுமதி உள்ளதா என்பதை அமைக்க உங்களை அனுமதிக்கிறது. செருகுல்நிரல்களைத் தானாக இயக்குவது எல்லா இணையதளங்களுக்கும் அனுமதிக்கப்படலாம் அல்லது நிராகரிக்கப்படலாம். @@ -670,6 +671,13 @@ மில்லிவினாடிகளில் கொள்கையின் மதிப்பு குறிப்பிடப்பட வேண்டும். மதிப்புகள் 30 வினாடிகள் முதல் 24 மணிநேரம் வரை என்ற வரம்பைக் கொண்டவை.</translation> <translation id="3528000905991875314">மாற்று பிழைப் பக்கங்களை இயக்கு</translation> +<translation id="3538538104630456270">கடவுச்சொற்களைக் காட்டுவதற்கான மறுஅங்கீகாரத்தை அறிமுகப்படுத்துவதற்கு முன்பாக, தொடர்புடைய அமைப்பு பயன்படுத்தப்பட்டது. அதன் பிறகு, அமைப்பும் இந்தக் கொள்கையும் Chrome இன் நடத்தையில் எந்தவித விளைவையும் ஏற்படுத்தவில்லை. கடவுச்சொல் நிர்வாகி அமைப்புகள் பக்கத்தில் தெளிவான உரையாகக் கடவுச்சொற்கள் காட்டப்படுவதை முடக்கும்படி கொள்கையை அமைத்தால் எப்படி இருக்குமோ, அதுபோல் Chrome இன் தற்போதைய நடத்தை உள்ளது. அதாவது அமைப்புகள் பக்கத்தில் ஒதுக்கிடம் மட்டுமே உள்ளது, மேலும் பயனர் "காட்டு" (மற்றும் பொருந்துமெனில் மறுஅங்கீகாரமளிப்பது) என்பதைக் கிளிக் செய்யும் போது மட்டுமே Chrome கடவுச்சொற்களைக் காட்டும். கொள்கையின் அசல் விளக்கம் பின்வரும்படி கீழே உள்ளது. + + கடவுச்சொல் நிர்வாகியில் தெளிவான உரையாகக் கடவுச்சொற்களைப் பயனர் காட்டலாமா என்பதைக் கட்டுப்படுத்தும். + + இந்த அமைப்பை முடக்கினால், கடவுச்சொல் நிர்வாகிச் சாளரத்தில் தெளிவான உரையாக, சேமிக்கப்பட்ட கடவுச்சொற்களைக் காட்ட கடவுச்சொல் நிர்வாகி அனுமதிக்காது. + + இயக்கினால் அல்லது இந்தக் கொள்கையை அமைக்கவில்லை என்றால், கடவுச்சொல் நிர்வாகியில் தெளிவான உரையில் தங்கள் கடவுச்சொற்களைப் பயனர்கள் பார்க்கலாம்.</translation> <translation id="3547954654003013442">ப்ராக்ஸி அமைப்புகள்</translation> <translation id="3570008976476035109">இந்த தளங்களில் செருகுநிரல்களைத் தடு</translation> <translation id="3591584750136265240">உள்நுழைவு அங்கீகரிப்புச் செயல்பாட்டை உள்ளமை</translation> @@ -1562,6 +1570,7 @@ இந்த கொள்கை உள்ளமைக்கப்படாமல் இருந்தால், தொடக்கத்தில் பின்செய்யப்பட்ட பயன்பாடுகளின் பட்டியலைப் பயனர் மாற்றலாம்.</translation> <translation id="7132877481099023201">அறிவுறுத்தல் இல்லாமல் வீடியோ படமெடுப்புச் சாதனங்களுக்கு அணுகல் வழங்கப்படும் URLகள்.</translation> +<translation id="7167436895080860385">கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்களைக் காட்ட, பயனர்களை அனுமதி (தடுக்கப்பட்டது)</translation> <translation id="7173856672248996428">குறுங்கால சுயவிவரம்</translation> <translation id="7187256234726597551">சரி எனில், சாதனத்திற்கான தொலைநிலை சான்றளிப்பு அனுமதிக்கப்படும், மேலும் சான்றிதழ் தானாகவே உருவாக்கப்பட்டு, சாதன மேலாண்மை சேவையகத்தில் பதிவேற்றப்படும். @@ -1855,6 +1864,7 @@ <translation id="8197918588508433925">இந்தக் கொள்கையானது, தொலைநிலை சான்றொப்பத்திற்கான நிறுவன இயங்குதள விசைகள் API chrome.enterprise.platformKeysPrivate.challengeUserKey() ஐப் பயன்படுத்த அனுமதிக்கப்படும் நீட்டிப்புகளைக் குறிப்பிடுகிறது. API ஐப் பயன்படுத்த இந்தப் பட்டியலில் நீட்டிப்புகளைச் சேர்க்க வேண்டும். பட்டியலில் நீட்டிப்பு இல்லையெனில் அல்லது பட்டியல் அமைக்கப்படவில்லை எனில், API க்கான அழைப்பானது, பிழைக் குறியீட்டுடன் தோல்வியடையும்.</translation> +<translation id="8214600119442850823">கடவுச்சொல் நிர்வாகியை உள்ளமைக்கும்.</translation> <translation id="8244525275280476362">கொள்கையைச் செல்லாததாக்கிய பின் பெறுவதில் ஏற்படும் அதிகபட்ச தாமதம்</translation> <translation id="8256688113167012935">தொடர்புடைய சாதன-அகக் கணக்கிற்கான உள்நுழைவுத் திரையில் காண்பிக்கப்படும் கணக்குப் பெயரை <ph name="PRODUCT_OS_NAME" /> கட்டுப்படுத்தலாம். @@ -2012,6 +2022,17 @@ <translation id="8858642179038618439">YouTube பாதுகாப்புப் பயன்முறையைச் செயல்படுத்தும்</translation> <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" /> ஆல் தளம் வழங்கப்படும்போது தோன்றும் இயக்க அறிவுறுத்துதலை முடக்கும்</translation> <translation id="8870318296973696995">முகப்புப் பக்கம்</translation> +<translation id="8889588091638298603">மானிட்டர் அளவுத்திருத்தத்தைச் சரிசெய்யும், ICC காட்சி சுயவிவரங்களைப் போன்று, + வன்பொருள் சார்ந்த உள்ளமைவுக் கோப்புகளை க்விர்க்ஸ் சேவையகம் வழங்குகிறது. + + இந்தக் கொள்கை தவறு என அமைக்கப்பட்டால், உள்ளமைவுக் கோப்புகளை + இறக்குவதற்காக க்விர்க்ஸ் சேவையகத்தைத் தொடர்புகொள்ள சாதனம் முயலாது. + + இந்தக் கொள்கை சரி என அமைக்கப்பட்டால் அல்லது உள்ளமைக்கப்படவில்லை என்றால், + <ph name="PRODUCT_OS_NAME" /> தானாகவே + க்விர்க்ஸ் சேவையகத்தைத் தொடர்புகொண்டு, உள்ளமைவுக் கோப்புகளை இறக்கும். + முடிந்தால், சாதனத்தில் அவற்றைச் சேமிக்கும். எடுத்துக்காட்டாக, இணைக்கப்பட்ட மானிட்டர்களின் காட்சித் தரத்தை + மேம்படுத்த அத்தகைய கோப்புகள் பயன்படுத்தப்படலாம்.</translation> <translation id="8905426178924715309">இந்தக் கொள்கை தடுக்கப்பட்டுள்ளது, அதற்குப் பதிலாக ForceGoogleSafeSearch, ForceYouTubeSafetyMode ஆகியவற்றைப் பயன்படுத்தவும். ForceGoogleSafeSearch, ForceYouTubeSafetyMode ஆகிய கொள்கைகளில் ஏதேனும் ஒன்று அமைக்கப்பட்டிருந்தாலும் இந்தக் கொள்கை நிராகரிக்கப்படும். Google வலைத் தேடலில் பாதுகாப்பானத் தேடலைச் செயல்படுத்தியபடி, வினவல்கள் செயலாக்கப்படும், மேலும் இந்த அமைப்பைப் பயனர்கள் மாற்றுவதையும் தடுக்கும். இந்த அமைப்பு YouTube இலும் பாதுகாப்புப் பயன்முறையைச் செயல்படுத்தும்.
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb index c540747..18962b3d 100644 --- a/components/policy/resources/policy_templates_te.xtb +++ b/components/policy/resources/policy_templates_te.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">ఈ విధానాన్ని ఒప్పుకు సెట్ చేస్తే లేదా కాన్ఫిగర్ చేయకుంటే, <ph name="PRODUCT_NAME" /> అతిథి లాగిన్లను అనుమతిస్తుంది. అతిథి లాగిన్లు అంటే అన్ని విండోలు అజ్ఞాత మోడ్లో ఉండే <ph name="PRODUCT_NAME" /> ప్రొఫైల్లు. ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, <ph name="PRODUCT_NAME" /> అతిథి ప్రొఫైల్లు ప్రారంభించడానికి అనుమతించదు.</translation> +<translation id="1363275621236827384">హార్డ్వేర్ ప్రొఫైల్ల కోసం Quirks Serverకు ప్రశ్నలను ప్రారంభించు</translation> <translation id="1397855852561539316">డిఫాల్ట్ శోధన అందింపుదారు URLని సిఫార్సు చేసింది</translation> <translation id="1398889361882383850">ప్లగిన్లను స్వయంచాలకంగా అమలు చేయడానికి వెబ్సైట్లు అనుమతించబడ్డాయో లేదో సెట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. స్వయంచాలకంగా అమలు అయ్యే ప్లగిన్లు అన్ని వెబ్సైట్లకు అనుమతించబడతాయి లేదా అన్ని వెబ్సైట్లకు తిరస్కరించబడతాయి. @@ -687,6 +688,13 @@ విధానం విలువను మిల్లీసెకన్లలో పేర్కొనాలి. విలువలు 30 సెకన్ల నుండి 24 గంటల పరిధికి పరిమితి చేయబడ్డాయి.</translation> <translation id="3528000905991875314">ప్రత్యామ్నాయ లోప పేజీలని ప్రారంభించు</translation> +<translation id="3538538104630456270">పాస్వర్డ్ల వీక్షణపై పునఃప్రమాణీకరణను అమలు చేయడం ప్రారంభించడానికి ముందు అనుబంధిత సెట్టింగ్ ఉపయోగించబడింది. అప్పటి నుండి, సెట్టింగ్ మరియు ఈ విధానం Chrome ప్రవర్తనపై ఎలాంటి ప్రభావం చూపలేదు. Chrome ప్రస్తుత ప్రవర్తన ఇప్పుడు పాస్వర్డ్ నిర్వాహికి సెట్టింగ్ల పేజీలో పాస్వర్డ్లను స్పష్టమైన వచన రూపంలో చూపడం నిలిపివేసేలా విధానాన్ని సెట్ చేసినప్పుడు ఉండే విధంగా ఉంది. అనగా సెట్టింగ్ల పేజీ ప్లేస్హోల్డర్ని మాత్రమే కలిగి ఉంటుంది మరియు వినియోగదారు "చూపు" (మరియు వర్తించే సందర్భంలో పునఃప్రమాణీకరించడం) క్లిక్ చేసినప్పుడు మాత్రమే Chrome పాస్వర్డ్ను చూపుతుంది. అసలు విధాన వివరణ దిగువ పేర్కొనబడింది. + + వినియోగదారు పాస్వర్డ్ నిర్వాహికిలో పాస్వర్డ్లను స్పష్టమైన వచన రూపంలో చూపవచ్చో లేదో నియంత్రిస్తుంది. + + మీరు ఈ సెట్టింగ్ను నిలిపివేస్తే, పాస్వర్డ్ నిర్వాహికి విండోలో నిల్వ చేయబడిన పాస్వర్డ్లను స్పష్టమైన వచన రూపంలో చూపడానికి పాస్వర్డ్ నిర్వాహికి అనుమతించదు. + + మీరు ప్రారంభిస్తే లేదా ఈ విధానాన్ని సెట్ చేయకపోతే, వినియోగదారులు పాస్వర్డ్ నిర్వాహికిలో వారి పాస్వర్డ్లను స్పష్టమైన వచన రూపంలో వీక్షించగలరు.</translation> <translation id="3547954654003013442">ప్రాక్సీ సెట్టింగ్లు</translation> <translation id="3570008976476035109">ఈ సైట్లలో ప్లగ్ఇన్లని బ్లాక్ చెయ్యి</translation> <translation id="3591584750136265240">లాగిన్ ప్రామాణీకరణ ప్రవర్తనను కాన్ఫిగర్ చేయండి</translation> @@ -1594,6 +1602,7 @@ ఈ విధానాన్ని సెట్ చేయకుండా వదిలివేస్తే, వినియోగదారు లాంచర్లో పిన్ చేసిన అనువర్తనాల జాబితాను మార్చవచ్చు.</translation> <translation id="7132877481099023201">ప్రాంప్ట్ చేయబడకుండా వీడియో క్యాప్చర్ పరికరాలకు ప్రాప్యత మంజూరు చేయబడే URLలు</translation> +<translation id="7167436895080860385">పాస్వర్డ్ నిర్వాహికిలో పాస్వర్డ్లను చూపడానికి వినియోగదారులను అనుమతించు (నిలిపివేయబడింది)</translation> <translation id="7173856672248996428">అశాశ్వత ప్రొఫైల్</translation> <translation id="7187256234726597551">ఒప్పు అయితే, పరికరం కోసం రిమోట్ ప్రామాణీకరణ అనుమతించబడుతుంది మరియు ప్రమాణపత్రం స్వయంచాలకంగా రూపొందించబడుతుంది మరియు పరికర నిర్వహణ సర్వర్కు అప్లోడ్ చేయబడుతుంది. @@ -1892,6 +1901,7 @@ <translation id="8197918588508433925">ఈ విధానం రిమోట్ ధృవీకరణ కోసం ఎంటర్ప్రైజ్ ప్లాట్ఫారమ్ కీల API chrome.enterprise.platformKeysPrivate.challengeUserKey()ని ఉపయోగించడానికి అనుమతించబడిన పొడిగింపులను పేర్కొంటుంది. APIని ఉపయోగించడానికి పొడిగింపులు తప్పనిసరిగా ఈ జాబితాకు జోడించబడాలి. జాబితాలో పొడిగింపు లేకపోతే లేదా జాబితాను సెట్ చేయకపోతే, APIకి కాల్ లోపం కోడ్తో విఫలమవుతుంది.</translation> +<translation id="8214600119442850823">పాస్వర్డ్ నిర్వాహికిని కాన్ఫిగర్ చేస్తుంది.</translation> <translation id="8244525275280476362">విధాన అప్రామాణీకరణ తర్వాత పొందడంలో గరిష్ట ఆలస్యం</translation> <translation id="8256688113167012935">సంబంధిత పరికర-స్థానిక ఖాతాకు లాగిన్ స్క్రీన్పై <ph name="PRODUCT_OS_NAME" /> చూపే ఖాతా పేరును నియంత్రిస్తుంది. @@ -2066,6 +2076,16 @@ <translation id="8858642179038618439">నిర్బంధ YouTube భద్రతా మోడ్</translation> <translation id="8864975621965365890">సైట్ <ph name="PRODUCT_FRAME_NAME" /> ద్వారా అమలు చేయబడినప్పుడు ప్రాంప్ట్ చేయబడే అవకాశాన్ని నియంత్రిస్తుంది.</translation> <translation id="8870318296973696995">హోమ్ పేజీ</translation> +<translation id="8889588091638298603">Quirks Server మానిటర్ క్రమాంకనాన్ని సర్దుబాటు చేయడానికి ICC డిస్ప్లే ప్రొఫైల్ల వంటి + హార్డ్వేర్-నిర్దిష్ట కాన్ఫిగరేషన్ ఫైల్లను అందిస్తుంది. + + ఈ విధానాన్ని తప్పుకి సెట్ చేసినప్పుడు, పరికరం కాన్ఫిగరేషన్ ఫైల్లను డౌన్లోడ్ చేయడం కోసం + Quirks Serverను సంప్రదించడానికి ప్రయత్నించదు. + + ఈ విధానం ఒప్పు అయితే లేదా కాన్ఫిగర్ చేయకపోతే, అప్పుడు <ph name="PRODUCT_OS_NAME" /> స్వయంచాలకంగా + Quirks Serverని సంప్రదించి, అందుబాటులో ఉన్న పక్షంలో కాన్ఫిగరేషన్ ఫైల్లను డౌన్లోడ్ చేసి, ఆపై + వాటిని పరికరంలో నిల్వ చేస్తుంది. అటువంటి ఫైల్లు + జోడించబడిన మానిటర్ల డిస్ప్లే నాణ్యతను మెరుగుపరచడం మొదలైన వాటి కోసం ఉపయోగించబడవచ్చు.</translation> <translation id="8905426178924715309">ఈ విధానం నిలిపివేయబడుతోంది, దయచేసి బదులుగా ForceGoogleSafeSearch మరియు ForceYouTubeSafetyMode ఉపయోగించండి. ForceGoogleSafeSearch లేదా ForceYouTubeSafetyMode విధానాలను సెట్ చేస్తే ఈ విధానం విస్మరించబడుతుంది. Google వెబ్ శోధనలో సురక్షితశోధనను సక్రియంగా ఉంచి ప్రశ్నలు శోధించేలా నిర్బంధిస్తుంది మరియు వినియోగదారులు ఈ సెట్టింగ్ను మార్చకుండా నిరోధిస్తుంది. ఈ సెట్టింగ్ YouTubeలో సురక్షిత మోడ్ను కూడా నిర్బంధిస్తుంది.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 8f2a3a43..88f2c15 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">หากตั้งค่านโยบายนี้เป็น True หรือไม่ได้กำหนดค่า <ph name="PRODUCT_NAME" /> จะเปิดใช้การเข้าสู่ระบบแบบผู้เยี่ยมชม การเข้าสู่ระบบแบบผู้เยี่ยมชมเป็นโปรไฟล์ของ <ph name="PRODUCT_NAME" /> ซึ่งหน้าต่างทุกบานจะอยู่ในโหมดไม่ระบุตัวตน หากตั้งค่านโยบายนี้เป็น False <ph name="PRODUCT_NAME" /> จะไม่อนุญาตให้เริ่มต้นโปรไฟล์ผู้เยี่ยมชม</translation> +<translation id="1363275621236827384">เปิดใช้คำค้นหาไปยังเซิร์ฟเวอร์ Quirks สำหรับโปรไฟล์ฮาร์ดแวร์</translation> <translation id="1397855852561539316">URL ที่แนะนำโดยผู้ให้บริการการค้นหาเริ่มต้น</translation> <translation id="1398889361882383850">ช่วยให้คุณสามารถตั้งค่าได้ว่าจะอนุญาตให้เว็บไซต์ใดเรียกใช้ปลั๊กอินโดยอัตโนมัติบ้าง สามารถอนุญาตหรือปฏิเสธการเรียกใช้ปลั๊กอินโดยอัตโนมัติสำหรับเว็บไซต์ทั้งหมดได้ @@ -678,6 +679,13 @@ ควรระบุค่าของนโยบายเป็นมิลลิวินาที โดยจำกัดช่วงของค่าอยู่ที่ 30 วินาทีถึง 24 ชั่วโมง</translation> <translation id="3528000905991875314">เปิดใช้งานหน้าเว็บแสดงข้อผิดพลาดสำรอง</translation> +<translation id="3538538104630456270">มีการใช้การตั้งค่าที่เชื่อมโยงกันก่อนการตรวจสอบสิทธิ์อีกครั้งเมื่อใช้การดูรหัสผ่าน ด้วยเหตุนี้ การตั้งค่าและนโยบายนี้จึงไม่มีผลกระทบต่อพฤติกรรมของ Chrome ซึ่งพฤติกรรมปัจจุบันของ Chrome จะเหมือนกับการตั้งค่านโยบายที่ปิดการแสดงรหัสผ่านอย่างชัดเจนในหน้าการตั้งค่าตัวจัดการรหัสผ่าน ซึ่งหมายความว่าหน้าการตั้งค่าจะมีเพียงแค่ตัวยึดตำแหน่ง และ Chrome จะแสดงรหัสผ่านก็ต่อเมื่อผู้ใช้คลิก "แสดง" (และทำการตรวจสอบสิทธิ์อีกครั้ง หากจำเป็น) คำอธิบายนโยบายดั้งเดิมมีตามที่แสดงไว้ด้านล่างดังนี้ + + ควบคุมว่าจะให้ผู้ใช้แสดงรหัสผ่านอย่างชัดเจนในตัวจัดการรหัสผ่านหรือไม่ + + หากคุณปิดใช้การตั้งค่านี้ ตัวจัดการรหัสผ่านจะไม่อนุญาตให้แสดงรหัสผ่านที่เก็บไว้อย่างชัดเจนในหน้าต่างตัวจัดการรหัสผ่าน + + หากคุณเปิดใช้หรือไม่ได้ตั้งค่านโยบายนี้ ผู้ใช้สามารถดูรหัสผ่านของตนได้อย่างชัดเจนในตัวจัดการรหัสผ่าน</translation> <translation id="3547954654003013442">การตั้งค่าพร็อกซี</translation> <translation id="3570008976476035109">ปิดกั้นปลั๊กอินบนไซต์เหล่านี้</translation> <translation id="3591584750136265240">กำหนดค่าลักษณะการตรวจสอบสิทธิ์ของการเข้าสู่ระบบ</translation> @@ -1576,6 +1584,7 @@ หากไม่มีการตั้งค่านโยบายนี้เอาไว้ ผู้ใช้อาจสามารถเปลี่ยนแปลงรายการของแอปพลิเคัชที่ตรึงในตัวเรียกใช้งาน</translation> <translation id="7132877481099023201">URL ที่จะได้รับสิทธิ์การเข้าถึงอุปกรณ์จับภาพวิดีโอโดยไม่ต้องแจ้ง</translation> +<translation id="7167436895080860385">อนุญาตให้ผู้ใช้แสดงรหัสผ่านในตัวจัดการรหัสผ่าน (เลิกใช้งานแล้ว)</translation> <translation id="7173856672248996428">โปรไฟล์ชั่วคราว</translation> <translation id="7187256234726597551">หากถูกตั้งค่าเป็น "จริง" การรับรองระยะไกลที่ได้รับอนุญาตสำหรับอุปกรณ์และใบรับรองจะถูกสร้างและอัปโหลดไปยังเซิร์ฟเวอร์การจัดการอุปกรณ์โดยอัตโนมัติ @@ -1876,6 +1885,7 @@ <translation id="8197918588508433925">นโยบายนี้ระบุส่วนขยายที่ได้รับอนุญาตในการใช้ API คีย์แพลตฟอร์มของบริษัท chrome.enterprise.platformKeysPrivate.challengeUserKey() สำหรับการยืนยันจากระยะไกล โดยต้องเพิ่มส่วนขยายลงในรายการนี้เพื่อใช้ API หากส่วนขยายไม่อยู่ในรายการ หรือรายการไม่ได้รับการตั้งค่า การเรียกไปยัง API จะล้มเหลวโดยมีรหัสข้อผิดพลาด</translation> +<translation id="8214600119442850823">กำหนดค่าตัวจัดการรหัสผ่าน</translation> <translation id="8244525275280476362">การหน่วงเวลาสูงสุดในการดึงข้อมูลภายหลังการลบล้างนโยบาย</translation> <translation id="8256688113167012935">ควบคุมชื่อบัญชี <ph name="PRODUCT_OS_NAME" /> ที่แสดงในหน้าลงชื่อเข้าใช้สำหรับบัญชีภายในอุปกรณ์ที่เกี่ยวข้องกัน @@ -2045,6 +2055,17 @@ <translation id="8858642179038618439">บังคับใช้โหมดปลอดภัยของ YouTube</translation> <translation id="8864975621965365890">ระงับการแจ้งเรื่องการปฏิเสธ ซึ่งจะปรากฏขึ้นเมื่อไซต์แสดงผลโดย <ph name="PRODUCT_FRAME_NAME" /></translation> <translation id="8870318296973696995">หน้าแรก</translation> +<translation id="8889588091638298603">เซิร์ฟเวอร์ Quirks มีไฟล์การกำหนดค่าเฉพาะฮาร์ดแวร์ เช่น + โปรไฟล์การแสดง ICC เพื่อปรับการปรับเทียบจอภาพ + + เมื่อตั้งค่านโยบายนี้เป็น False อุปกรณ์จะไม่พยายาม + ติดต่อเซิร์ฟเวอร์ Quirks เพื่อดาวน์โหลดไฟล์การกำหนดค่า + + หากตั้งค่านโยบายนี้เป็น True หรือไม่กำหนดค่า + <ph name="PRODUCT_OS_NAME" /> จะ + ติดต่อเซิร์ฟเวอร์ Quirks โดยอัตโนมัติและดาวน์โหลดไฟล์การกำหนดค่าโดยอัตโนมัติ + หากมี และเก็บไฟล์เหล่านั้นไว้ในอุปกรณ์ ซึ่งไฟล์เหล่านั้น + อาจใช้เพื่อปรับปรุงคุณภาพของจอแสดงผลที่เชื่อมต่อกับจอภาพ</translation> <translation id="8905426178924715309">นโยบายนี้เลิกใช้แล้ว โปรดใช้ ForceGoogleSafeSearch และ ForceYouTubeSafetyMode แทน ระบบจะไม่สนใจนโยบายนี้หากมีการตั้งค่านโยบาย ForceGoogleSafeSearch หรือ ForceYouTubeSafetyMode ไว้ บังคับให้เปิดใช้การค้นหาปลอดภัยเมื่อค้นหาใน Google ค้นเว็บ และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่านี้ การตั้งค่าดังกล่าวยังบังคับใช้โหมดปลอดภัยบน YouTube ด้วย
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 138b9684..c419b34 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Bu politika doğru seçeneğine ayarlanırsa veya yapılandırılmazsa <ph name="PRODUCT_NAME" />, misafir modunda giriş yapılmasına izin verir. Misafir modunda girişler, tüm pencerelerin gizli modda açıldığı <ph name="PRODUCT_NAME" /> profilleridir. Bu politika yanlış seçeneğine ayarlanırsa, <ph name="PRODUCT_NAME" /> misafir profillerinin başlatılmasına izin vermez.</translation> +<translation id="1363275621236827384">Quirks Sunucusu'ndan donanım profillerini sorgulamayı etkinleştir</translation> <translation id="1397855852561539316">Arama önerileri için varsayılan arama sağlayıcı URL'si</translation> <translation id="1398889361882383850">Web sitelerinin, eklentileri otomatik olarak çalıştırmalarına izin verilip verilmeyeceğini ayarlamanızı sağlar. Otomatik olarak çalışan eklentilere ya bütün web sitelerinde izin verilebilir ya da bunlar web sitelerinin tümünde reddedilebilir. @@ -754,6 +755,13 @@ Politika değeri milisaniye olarak belirtilmelidir. Değerler 30 saniye ile 24 saat arasında olabilir.</translation> <translation id="3528000905991875314">Alternatif hata sayfalarını etkinleştir</translation> +<translation id="3538538104630456270">İlişkili ayar, şifrelerin görüntülenmesinde yeniden kimlik doğrulaması kullanılmaya başlamadan önce kullanılıyordu. O zamandan beri, bu ayarın ve dolayısıyla bu politikanın Chrome davranışı üzerinde herhangi bir etkisi olmadı. Şu anda Chrome'un geçerli davranışı, politikanın, şifre yöneticisi ayarları sayfasında şifreleri açık metin olarak göstermeyi devre dışı bırakacak şekilde ayarlanmasıyla aynıdır. Yani ayarlar sayfası, yalnızca bir yer tutucu içerir ve Chrome, yalnızca kullanıcının "Göster"i tıklamasıyla (ve uygulanıyorsa yeniden kimlik doğrulaması yapmasıyla) şifreyi gösterir. Politikanın asıl açıklaması aşağıda belirtilmiştir. + +Kullanıcının, şifreleri şifre yöneticisinde açık metin olarak gösterip gösteremeyeceğini denetler. + +Bu ayarı devre dışı bırakırsanız, şifre yöneticisi saklanmış olan şifreleri şifre yöneticisi penceresinde açık metin olarak göstermeye izin vermez. + +Bu ayarı etkinleştirirseniz veya yapılandırmazsanız kullanıcılar şifrelerini şifre yöneticisi penceresinde açık metin olarak görüntüleyebilirler.</translation> <translation id="3547954654003013442">Proxy ayarları</translation> <translation id="3570008976476035109">Bu sitelerde eklentileri engelle</translation> <translation id="3591584750136265240">Giriş için kimlik doğrulama yöntemini yapılandır</translation> @@ -1748,6 +1756,7 @@ Bu politika ayarlanmadan bırakılırsa, kullanıcı başlatıcıdaki sabitlenmiş uygulamalar listesini değiştirebilir.</translation> <translation id="7132877481099023201">Soru sorulmadan video yakalama cihazlarına erişim verilecek URL'ler</translation> +<translation id="7167436895080860385">Kullanıcıların şifreleri Şifre Yöneticisi'nde görüntülemelerine izin ver (kullanımdan kalktı)</translation> <translation id="7173856672248996428">Geçici profil</translation> <translation id="7187256234726597551">True (doğru) olduğunda, cihaz için uzaktan doğrulamaya izin verilir, otomatik olarak bir sertifika oluşturulup Cihaz Yönetim Sunucusuna yüklenir. @@ -2064,6 +2073,7 @@ <translation id="8197918588508433925">Bu politika, uzaktan doğrulama için chrome.enterprise.platformKeysPrivate.challengeUserKey() Kurumsal Platform Anahtarları API'sını kullanmasına izin verilen uzantıları belirtir. API'yı kullanmak için uzantılar bu listeye eklenmelidir. Bir uzantı listede yoksa veya liste ayarlanmamışsa, API'ya yapılan çağrılar başarısız olur ve hata kodu görüntülenir.</translation> +<translation id="8214600119442850823">Şifre yöneticisini yapılandırır.</translation> <translation id="8244525275280476362">Bir politika iptal edildikten sonra maksimum getirme gecikmesi</translation> <translation id="8256688113167012935">Hesap adının (<ph name="PRODUCT_OS_NAME" />) ilgili cihaz-yerel hesap için giriş ekranında görüntülenip görüntülenmeyeceğini kontrol eder. @@ -2251,6 +2261,16 @@ <translation id="8858642179038618439">YouTube Güvenlik Modunu zorla</translation> <translation id="8864975621965365890">Bir site <ph name="PRODUCT_FRAME_NAME" /> tarafından oluşturulduğunda görülen reddetme sorusunu engeller.</translation> <translation id="8870318296973696995">Ana sayfa</translation> +<translation id="8889588091638298603">Quirks Sunucusu, monitör kalibrasyonunu ayarlamaya yönelik ICC görüntü + profilleri gibi donanıma özel yapılandırma dosyaları sağlar. + + Bu politika false (yanlış) değerine ayarlandığında cihaz, yapılandırma + dosyalarını indirmek için Quirks Sunucusu ile iletişim kurmayı denemez. + + Bu politika true (doğru) değerine ayarlanırsa veya yapılandırılmamışsa + <ph name="PRODUCT_OS_NAME" />, Quirks Sunucusu ile otomatik olarak iletişim kurar + ve varsa yapılandırma dosyalarını indirip cihaza kaydeder. Bu tür dosyalar, + örneğin bağlı monitörlerin görüntü kalitesini iyileştirmek için kullanılabilir.</translation> <translation id="8905426178924715309">Bu politika kullanımdan kaldırılmıştır. Bunun yerine lütfen ForceGoogleSafeSearch'ü ve ForceYouTubeSafetyMode'u kullanın. ForceGoogleSafeSearch veya ForceYouTubeSafetyMode politikası ayarlanırsa bu politika yoksayılır. Google Web Araması'ndaki sorguların Güvenli Arama etkin olarak ayarlanmış halde yapılmasını sağlar ve kullanıcıların bu ayarı değiştirmesini önler. Bu ayar aynı zamanda YouTube'da da Güvenli Mod'un kullanılmasını sağlar.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 12eac832..dce7c34 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">Якщо це правило не налаштовано або має значення "true", <ph name="PRODUCT_NAME" /> увімкне перегляд у гостьовому режимі. У цьому режимі <ph name="PRODUCT_NAME" /> відкриває анонімні вікна. Якщо для цього правила встановлено значення "false", <ph name="PRODUCT_NAME" /> не дозволятиме вмикати гостьовий режим.</translation> +<translation id="1363275621236827384">Дозволити запитувати профілі апаратного забезпечення на сервері Quirks</translation> <translation id="1397855852561539316">URL-адреса для пропозицій пошукової служби за умовчанням</translation> <translation id="1398889361882383850">Дозволяє визначати, чи можуть веб-сайти автоматично запускати плагіни. Автоматичний запуск плагінів можна дозволити для всіх веб-сайтів або заборонити для всіх веб-сайтів. @@ -687,6 +688,13 @@ Значення правила вказується в мілісекундах. Діапазоні значень – від 30 секунд до 24 годин.</translation> <translation id="3528000905991875314">Увімкнути додаткові сторінки з помилками</translation> +<translation id="3538538104630456270">Пов’язане налаштування використовувалося, перш ніж ми запровадили повторну автентифікацію для перегляду паролів. Відтоді це налаштування, а отже й правило, не впливають на роботу Chrome. Зараз Chrome працює так, ніби це правило вимикає показ паролів як відкритого тексту на сторінці налаштувань диспетчера паролів. Це означає, що на сторінці налаштувань є тільки заповнювач, а Chrome показує пароль, лише коли користувач натискає "Показати" (і проходить повторну автентифікацію, якщо потрібно). Нижче наведено початковий опис правила. + + Указує, чи користувач може показувати паролі як відкритий текст у диспетчері паролів. + + Якщо вимкнути це налаштування, диспетчер паролів не дозволить показувати збережені паролі як відкритий текст. + + Якщо ввімкнути або не налаштувати це правило, користувачі зможуть переглядати свої паролі як відкритий текст у диспетчері паролів.</translation> <translation id="3547954654003013442">Налаштування проксі-сервера</translation> <translation id="3570008976476035109">Блокувати плагіни на цих сайтах</translation> <translation id="3591584750136265240">Налаштування автентифікації під час входу</translation> @@ -1583,6 +1591,7 @@ Якщо це правило не встановлено, користувач може змінювати список закріплених програм на панелі запуску.</translation> <translation id="7132877481099023201">URL-адреси, яким завжди надаватиметься доступ до пристроїв запису відео</translation> +<translation id="7167436895080860385">Дозволити користувачам показувати паролі в диспетчері паролів (більше не підтримується)</translation> <translation id="7173856672248996428">Тимчасовий профіль</translation> <translation id="7187256234726597551">Якщо для цього правила встановлено значення "true", віддалене засвідчення для пристрою дозволено, а сертифікат автоматично створюватиметься та завантажуватиметься на сервер керування пристроями (Device Management Server). @@ -1878,6 +1887,7 @@ <translation id="8197918588508433925">Це правило визначає розширення, яким дозволено використовувати API ключів корпоративної платформи chrome.enterprise.platformKeysPrivate.challengeUserKey() для віддаленого засвідчення. Щоб скористатися API, розширення потрібно додати в цей список. Якщо розширення немає в списку або список не налаштовано, запити до API закінчуватимуться помилкою.</translation> +<translation id="8214600119442850823">Визначає налаштування диспетчера паролів.</translation> <translation id="8244525275280476362">Максимальна затримка отримання після анулювання правила</translation> <translation id="8256688113167012935">Контролюється, як <ph name="PRODUCT_OS_NAME" /> відображає ім’я облікового запису на екрані входу для відповідних локальних облікових записів у пристрої. @@ -2048,6 +2058,20 @@ <translation id="8858642179038618439">Примусово активувати Безпечний режим YouTube</translation> <translation id="8864975621965365890">Забороняє запити на вимкнення, які з’являються, коли <ph name="PRODUCT_FRAME_NAME" /> обробляє сайт.</translation> <translation id="8870318296973696995">Домашня сторінка</translation> +<translation id="8889588091638298603">На сервері Quirks є файли конфігурації апаратного + забезпечення, як-от профілі зображення ICC для калібрування + моніторів. + + Якщо для цього правила вибрано значення "false", + пристрій не зв’язується із сервером Quirks, щоб + завантажити файли конфігурації. + + Якщо для цього правила вибрано значення "true" або його + не налаштовано, <ph name="PRODUCT_OS_NAME" /> автоматично + зв’язується із сервером Quirks, завантажує файли + конфігурації (якщо вони доступні), і зберігає їх на + пристрої. Ці файли допомагають, наприклад, покращити + якість зображення приєднаних моніторів.</translation> <translation id="8905426178924715309">Це правило більше не використовується. Натомість застосовуйте правила "ForceGoogleSafeSearch" і "ForceYouTubeSafetyMode". Це правило ігноруватиметься, якщо налаштувати "ForceGoogleSafeSearch" або "ForceYouTubeSafetyMode". Примусово активує Безпечний пошук для запитів у Веб-пошуку Google. Користувачі не можуть змінювати це налаштування. Це правило також примусово активує Безпечний режим на YouTube.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 0761347..c2703dba 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -97,6 +97,7 @@ <translation id="1359553908012294236">Nếu chính sách này được đặt thành true hoặc không được định cấu hình, <ph name="PRODUCT_NAME" /> sẽ bật chế độ đăng nhập khách. Chế độ đăng nhập khách là hồ sơ <ph name="PRODUCT_NAME" /> trong đó tất cả cửa sổ đều ở chế độ ẩn danh. Nếu chính sách này được đặt thành false, <ph name="PRODUCT_NAME" /> sẽ không cho phép bắt đầu hồ sơ khách.</translation> +<translation id="1363275621236827384">Bật truy vấn cấu hình phần cứng tới Máy chủ Quirks</translation> <translation id="1397855852561539316">URL đề xuất của nhà cung cấp dịch vụ tìm kiếm mặc định</translation> <translation id="1398889361882383850">Cho phép bạn đặt có cho phép các trang web tự động chạy plugin không. Bạn có thể cho phép hoặc không cho phép tất cả các trang web tự động chạy plugin. @@ -745,6 +746,13 @@ Giá trị chính sách phải được chỉ định bằng mili giây. Giá trị trong khoảng 30 giây đến 24 giờ.</translation> <translation id="3528000905991875314">Bật các trang lỗi thay thế</translation> +<translation id="3538538104630456270">Sử dụng cài đặt được liên kết trước khi đưa vào xác thực lại việc xem mật khẩu. Kể từ đó, cài đặt và do đó chính sách này không ảnh hưởng đến hoạt động của Chrome. Hoạt động hiện tại của Chrome bây giờ giống như thể chính sách đã được đặt thành tắt hiển thị mật khẩu ở dạng văn bản rõ ràng trong trang cài đặt của trình quản lý mật khẩu. Điều đó có nghĩa là trang cài đặt chỉ chứa một trình giữ chỗ và chỉ khi người dùng nhấp vào "Hiển thị" (và xác thực lại, nếu có) thì Chrome mới hiển thị mật khẩu. Mô tả gốc của chính sách như sau. + + Kiểm soát việc người dùng có thể hiển thị mật khẩu ở dạng văn bản rõ ràng trong trình quản lý mật khẩu hay không. + + Nếu bạn tắt cài đặt này, trình quản lý mật khẩu sẽ không cho phép hiển thị mật khẩu được lưu trữ ở dạng văn bản rõ ràng trong cửa sổ trình quản lý mật khẩu. + + Nếu bạn bật hoặc không đặt chính sách này, người dùng có thể xem mật khẩu của họ ở dạng văn bản rõ ràng trong trình quản lý mật khẩu.</translation> <translation id="3547954654003013442">Cài đặt proxy</translation> <translation id="3570008976476035109">Chặn plugin trên các trang web này</translation> <translation id="3591584750136265240">Định cấu hình hành vi xác thực thông tin đăng nhập</translation> @@ -1731,6 +1739,7 @@ Nếu chính sách này không được đặt, người dùng có thể thay đổi danh sách các ứng dụng được ghim trong trình chạy.</translation> <translation id="7132877481099023201">Các URL sẽ được cấp quyền truy cập thiết bị quay video mà không cần phải hiển thị lời nhắc</translation> +<translation id="7167436895080860385">Cho phép người dùng hiển thị mật khẩu trong Trình quản lý mật khẩu (không dùng nữa)</translation> <translation id="7173856672248996428">Cấu hình tạm thời</translation> <translation id="7187256234726597551">Nếu được đặt thành true, cho phép xác nhận từ xa cho thiết bị và chứng chỉ sẽ tự động được tạo và tải lên Máy chủ quản lý thiết bị. @@ -2048,6 +2057,7 @@ <translation id="8197918588508433925">Chính sách này nêu rõ các tiện ích cụ thể để sử dụng API khóa nền tảng doanh nghiệp chrome.enterprise.platformKeysPrivate.challengeUserKey() để chứng thực từ xa. Các tiện ích phải được thêm vào danh sách này để sử dụng API. Nếu tiện ích không có trong danh sách hoặc danh sách không được đặt thì cuộc gọi đến API sẽ không thực hiện được với mã lỗi.</translation> +<translation id="8214600119442850823">Định cấu hình trình quản lý mật khẩu.</translation> <translation id="8244525275280476362">Độ trễ tìm nạp tối đa sau khi hủy hiệu lực chính sách</translation> <translation id="8256688113167012935">Kiểm soát tên tài khoản <ph name="PRODUCT_OS_NAME" /> hiển thị trên màn hình đăng nhập cho tài khoản trong thiết bị tương ứng. @@ -2232,6 +2242,17 @@ <translation id="8858642179038618439">Bật Chế độ an toàn trên YouTube</translation> <translation id="8864975621965365890">Loại bỏ lời nhắc từ chối xuất hiện khi một trang web được hiển thị bởi <ph name="PRODUCT_FRAME_NAME" />.</translation> <translation id="8870318296973696995">Trang chủ</translation> +<translation id="8889588091638298603">Máy chủ Quirks cung cấp các tệp cấu hình dành riêng cho phần cứng, chẳng hạn như + Cấu hình hiển thị ICC để hiệu chỉnh màn hình. + + Khi chính sách này được đặt thành false, thiết bị sẽ không tìm cách liên hệ + với Máy chủ Quirks để tải xuống các tệp cấu hình. + + Nếu chính sách này là true hoặc không được định cấu hình thì + <ph name="PRODUCT_OS_NAME" /> sẽ + tự động liên hệ với Máy chủ Quirks và tải xuống các tệp cấu hình, + nếu có, rồi lưu trữ các tệp này trên thiết bị. Các tệp này có thể + được sử dụng để cải thiện chất lượng hiển thị của màn hình gắn vào chẳng hạn.</translation> <translation id="8905426178924715309">Chính sách này không được dùng nữa, vui lòng sử dụng ForceGoogleSafeSearch và ForceYouTubeSafetyMode. Chính sách này sẽ bị bỏ qua nếu bạn đặt chính sách ForceGoogleSafeSearch hoặc ForceYouTubeSafetyMode. Buộc hoàn tất các truy vấn trong Google Web Search bằng cách đặt Tìm kiếm an toàn thành hiện hoạt và ngăn người dùng thay đổi cài đặt này. Cài đặt này cũng bắt buộc bật Chế độ an toàn trên YouTube.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index c592d01..494a998 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -80,6 +80,7 @@ <translation id="1359553908012294236">如果此政策设为 true 或未配置,<ph name="PRODUCT_NAME" /> 将允许使用访客身份登录。访客身份是指 <ph name="PRODUCT_NAME" /> 个人资料,使用此类个人资料登录后,所有窗口均处于隐身模式。 如果此政策设为 false,<ph name="PRODUCT_NAME" /> 将禁止使用访客个人资料登录。</translation> +<translation id="1363275621236827384">允许在 Quirks Server 中查询硬件配置文件</translation> <translation id="1397855852561539316">默认搜索服务提供商建议网址</translation> <translation id="1398889361882383850">可让您设置是否允许网站自动运行插件。您可以允许所有网站或拒绝所有网站自动运行插件。 @@ -662,6 +663,13 @@ 该策略值应该以毫秒为单位。值的范围限定在 30 秒到 24 小时之间。</translation> <translation id="3528000905991875314">启用备用的错误页面</translation> +<translation id="3538538104630456270">在我们推出“查看密码时需重新验证”这一规定之前,使用的是相关设置。自这一规定推出后,相关设置以及此政策便不再对 Chrome 的行为有任何影响。Chrome 的当前行为等同于此政策设为在密码管理器设置页面中禁止以明文形式显示密码。这意味着,设置页面中包含的只是一个占位符,仅当用户点击“显示”(并进行重新验证,如果适用的话)后,Chrome 才会显示相应密码。此政策的原始描述如下所示: + + 控制用户是否可以在密码管理器中以明文形式显示密码。 + + 如果您停用了此设置,密码管理器将不允许在密码管理器窗口中以明文形式显示存储的密码。 + + 如果您启用了此政策或未设置此政策,用户将可以在密码管理器中查看以明文形式显示的密码。</translation> <translation id="3547954654003013442">代理设置</translation> <translation id="3570008976476035109">在这些网站上阻止插件</translation> <translation id="3591584750136265240">配置登录身份验证行为</translation> @@ -1547,6 +1555,7 @@ 如果未设置此政策,用户就可以在启动程序中更改固定应用的列表。</translation> <translation id="7132877481099023201">无需提示用户即可使用视频捕获设备的网址</translation> +<translation id="7167436895080860385">允许用户在密码管理器中显示密码(已弃用)</translation> <translation id="7173856672248996428">临时个人资料</translation> <translation id="7187256234726597551">如果此政策的值为 True,则系统将允许此设备进行远程认证,然后自动生成证书并将其上传到设备管理服务器。 @@ -1844,6 +1853,7 @@ <translation id="8197918588508433925">此政策指定了允许使用 Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() 进行远程认证的扩展程序。只有添加到此列表中的扩展程序才能使用该 API。 如果扩展程序不在此列表中,或者未设置此列表,则会导致无法调用 API,并返回错误代码。</translation> +<translation id="8214600119442850823">配置密码管理器。</translation> <translation id="8244525275280476362">政策失效后的最大提取延迟</translation> <translation id="8256688113167012935">控制 <ph name="PRODUCT_OS_NAME" />在登录屏幕上为相应的设备本地帐户显示的帐户名。 @@ -1996,6 +2006,11 @@ <translation id="8858642179038618439">强制启用 YouTube 安全模式</translation> <translation id="8864975621965365890">浏览使用 <ph name="PRODUCT_FRAME_NAME" />呈现的网站时,阻止显示“停止支持”的提示。</translation> <translation id="8870318296973696995">主页</translation> +<translation id="8889588091638298603">Quirks Server 可提供硬件方面的配置文件(例如 ICC 显示配置文件),以调整显示器校准。 + + 如果此政策设为 false,设备将不会尝试联系 Quirks Server 来下载配置文件。 + + 如果此政策设为 true 或未设置,<ph name="PRODUCT_OS_NAME" />将自动联系 Quirks Server 并下载配置文件(如果有),然后将这些文件存储在设备上。此类文件可能会用于多种目的,例如改善所连接的显示器的显示质量。</translation> <translation id="8905426178924715309">此政策已弃用,请改用 ForceGoogleSafeSearch 和 ForceYouTubeSafetyMode。如果设置了 ForceGoogleSafeSearch 或 ForceYouTubeSafetyMode 政策,此政策将被忽略。 强制启用安全搜索功能来处理 Google 网页搜索中的查询,并禁止用户更改此设置。此设置还会强制在 YouTube 中启用安全模式。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index b0622f2..224030b 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -82,6 +82,7 @@ <translation id="1359553908012294236">如果將這項政策設為 True 或未設定,<ph name="PRODUCT_NAME" /> 會啟用訪客登入。訪客登入是 <ph name="PRODUCT_NAME" /> 設定檔,其中的所有視窗都處於無痕模式。 如果將這項政策設為 False,<ph name="PRODUCT_NAME" /> 將會禁止啟動訪客設定檔。</translation> +<translation id="1363275621236827384">允許在 Quirks Server 中查詢硬體設定檔</translation> <translation id="1397855852561539316">預設搜尋引擎建議網址</translation> <translation id="1398889361882383850">讓您設定是否要允許網站自動執行外掛程式。您可以允許或禁止所有網站自動執行外掛程式。 @@ -681,6 +682,13 @@ 您必須以毫秒為單位指定這項政策的值。值的範圍必須介於 30 秒至 24 小時。</translation> <translation id="3528000905991875314">啟用替代的錯誤網頁</translation> +<translation id="3538538104630456270">先前我們以類似設定來控制使用者是否可查看密碼,不過在新增重新驗證功能後,該設定與這項政策已不再適用於 Chrome 的運作方式。目前 Chrome 的運作方式等同在密碼管理員設定頁面中設定停止以純文字顯示密碼的政策。也就是說,設定頁面只會顯示預留位置,使用者必須點選 [顯示] 並重新驗證 (如果適用),Chrome 才會顯示密碼。這項政策的原始說明如下: + + 控制使用者是否能在密碼管理員中看到實際的密碼內容。 + + 如果您停用這項設定,密碼管理員就會禁止在密碼管理員視窗中以純文字顯示儲存的密碼。 + + 如果您啟用或未設定這項政策,使用者即可在密碼管理員中看到實際的密碼內容。</translation> <translation id="3547954654003013442">Proxy 設定</translation> <translation id="3570008976476035109">封鎖這些網站的外掛程式</translation> <translation id="3591584750136265240">設定登入驗證行為</translation> @@ -1574,6 +1582,7 @@ 如果未設定這項政策,使用者就可以變更啟動器中的固定應用程式清單。</translation> <translation id="7132877481099023201">系統會直接授權存取視訊擷取裝置而不需提示的網址</translation> +<translation id="7167436895080860385">允許使用者在密碼管理員中顯示密碼 (已不適用)</translation> <translation id="7173856672248996428">暫時設定檔</translation> <translation id="7187256234726597551">如果您將這項政策設為 True,系統即會允許裝置的遠端證明並自動產生憑證,然後將憑證上傳至裝置管理伺服器。 @@ -1869,6 +1878,7 @@ <translation id="8197918588508433925">這項政策可指定允許透過 Enterprise Platform Keys API chrome.enterprise.platformKeysPrivate.challengeUserKey() 進行遠端證明的擴充功能。使用方法是將擴充功能經由 API 加入清單中。 如果清單中並無擴充功能,或是尚未設定清單,則會導致無法呼叫 API,並顯示錯誤代碼。</translation> +<translation id="8214600119442850823">設定密碼管理員</translation> <translation id="8244525275280476362">政策失效後的最大擷取延遲</translation> <translation id="8256688113167012935">控制 <ph name="PRODUCT_OS_NAME" /> 在登入畫面上顯示的帳戶名稱,以表示相對應的裝置本機帳戶。 @@ -2028,6 +2038,17 @@ <translation id="8858642179038618439">強制採用 YouTube 安全模式</translation> <translation id="8864975621965365890">瀏覽使用 <ph name="PRODUCT_FRAME_NAME" />轉譯的網站時,隱藏停止支援提示。</translation> <translation id="8870318296973696995">首頁</translation> +<translation id="8889588091638298603">Quirks Server 可提供特定硬體的設定檔,例如 + 可供調整螢幕校正的 ICC 顯示設定檔。 + + 當這項政策設為 False 時,裝置就無法 + 與 Quirks Server 連線來下載設定檔。 + + 如果這項政策設為 True 或未設定, + <ph name="PRODUCT_OS_NAME" /> 就會 + 自動連線至 Quirks Server,將可用的設定檔 + 下載並儲存到裝置上。這類檔案可能用於 + 改善連接螢幕的顯示品質。</translation> <translation id="8905426178924715309">這項政策已不適用,請改用 ForceGoogleSafeSearch 和 ForceYouTubeSafetyMode。如果設定 ForceGoogleSafeSearch 或 ForceYouTubeSafetyMode 政策,系統將會忽略這項政策。 強制啟用安全搜尋服務,處理 Google 網頁搜尋中的查詢,並且防止使用者變更這項設定。這項設定也會強制執行 YouTube 安全模式。
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb index 3be9001..fae3e25 100644 --- a/components/strings/components_strings_am.xtb +++ b/components/strings/components_strings_am.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">የተሳሳተ የምንነት ለዪ</translation> <translation id="1232569758102978740">ርዕስ አልባ</translation> <translation id="1254117744268754948">አቃፊ ይምረጡ</translation> -<translation id="1270699273812232624">ንጥሎችን ፍቀድ</translation> <translation id="1285320974508926690">ይህን ጣቢያ በጭራሽ አትተርጉም</translation> <translation id="129553762522093515">በቅርብ ጊዜ የተዘጉ</translation> <translation id="1339601241726513588">የምዝገባ ጎራ፦</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">በማጣራት ላይ</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> የእርስዎን የመግቢያ እውቅና ማረጋገጫ አልተቀበለም፣ ወይም ደግሞ የመግቢያ እውቅና ማረጋገጫዎ ጊዜው አልፎበት ሊሆን ይችላል።</translation> <translation id="194030505837763158">ወደ <ph name="LINK" /> ሂድ</translation> -<translation id="1958820272620550857">ንጥሎችን አግድ</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> እልባቶች</translation> <translation id="1973335181906896915">የመለያ ቁጥር መስጠት ላይ ስህተት</translation> <translation id="1974060860693918893">የላቀ</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">የእሴት መታወቂያ፦</translation> <translation id="3109728660330352905">ይህን ገጽ ለማየት ፍቃድ የለዎትም።</translation> <translation id="3118046075435288765">አገልጋዩ ሳይታሰብ ግንኙነቱን ዘግቶታል።</translation> -<translation id="31454997771848827">የቡድን ጎራዎች</translation> <translation id="3145945101586104090">ምላሹን መግለጥ አልተሳካም</translation> <translation id="3147485256806412701">ይህ ጣቢያ አዲስ ተመሳስሎ የተፈጠረ ከፍተኛ ደረጃ ጎራን እየተጠቀመ ነው።</translation> <translation id="3150653042067488994">ጊዜያዊ የአገልጋይ ስህተት</translation> @@ -325,7 +322,6 @@ <translation id="4258748452823770588">መጥፎ ፊርማ</translation> <translation id="4268298190799576220">Chrome የእርስዎን ካርድ በዚህ ጊዜ ላይ ለማረጋገጥ አልቻለም። እባክዎ ቆይተው እንደገና ይሞክሩ።</translation> <translation id="4269787794583293679">(ምንም የተጠቃሚ ስም የለም)</translation> -<translation id="4278390842282768270">ተፈቅዷል</translation> <translation id="4300246636397505754">የወላጅ አስተያየት ጥቆማዎች</translation> <translation id="4304224509867189079">ይግቡ</translation> <translation id="4325863107915753736">ጽሑፉን ማግኘት አልተቻለም</translation> @@ -524,7 +520,6 @@ <translation id="6753269504797312559">የመምሪያ እሴት</translation> <translation id="6757797048963528358">የእርስዎ መሣሪያ ተኝቷል።</translation> <translation id="6781404225664080496">ወደዚህ ዩአርኤል የሚቀርቡ ጥያቄዎች ለጊዜው ታግደዋል።</translation> -<translation id="6800914069727136216">በይዘት ጥቅል ውስጥ</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> ላይ ያለው ድረ-ገጽ በአሁኑ ጊዜ አይገኝም። ከአቅም በላይ ስራ በዝቶበት ወይም ለጥገና ከስራ ውጪ ተደርጎ ሊሆን ይችላል።</translation> <translation id="6831043979455480757">መተርጎም</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb index 8ab11cf0..117ef7dd 100644 --- a/components/strings/components_strings_ar.xtb +++ b/components/strings/components_strings_ar.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">معرف الكيان خاطئ</translation> <translation id="1232569758102978740">بلا عنوان</translation> <translation id="1254117744268754948">اختيار مجلد</translation> -<translation id="1270699273812232624">السماح بالعناصر</translation> <translation id="1285320974508926690">عدم ترجمة هذا الموقع مطلقًا</translation> <translation id="129553762522093515">المغلقة حديثًا</translation> <translation id="1339601241726513588">نطاق التسجيل:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">التصفية</translation> <translation id="1911837502049945214">لم يقبل <ph name="HOST_NAME" /> شهادة تسجيل الدخول أو ربما انتهت صلاحية شهادة تسجيل الدخول.</translation> <translation id="194030505837763158">الانتقال إلى <ph name="LINK" /></translation> -<translation id="1958820272620550857">حظر العناصر</translation> <translation id="1962204205936693436">إشارات <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">خطأ أثناء التسلسل</translation> <translation id="1974060860693918893">إعدادات متقدمة</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">رقم تعريف الأصل:</translation> <translation id="3109728660330352905">ليس لديك إذن بعرض هذه الصفحة.</translation> <translation id="3118046075435288765">أغلق الخادم الاتصال على نحو غير متوقع.</translation> -<translation id="31454997771848827">نطاقات المجموعات</translation> <translation id="3145945101586104090">أخفق فك تشفير الاستجابة</translation> <translation id="3147485256806412701">هذا الموقع يستخدم نطاق مستوى أعلى عام جديد.</translation> <translation id="3150653042067488994">خطأ مؤقت في الخادم</translation> @@ -326,7 +323,6 @@ <translation id="4258748452823770588">توقيع غير صالح</translation> <translation id="4268298190799576220">لم يتمكن Chromium من التحقق من بطاقتك في الوقت الحالي. يُرجى إعادة المحاولة في وقت لاحق.</translation> <translation id="4269787794583293679">(اسم المستخدم غير موجود)</translation> -<translation id="4278390842282768270">مسموح بها</translation> <translation id="4300246636397505754">اقتراحات الآباء</translation> <translation id="4304224509867189079">تسجيل الدخول</translation> <translation id="4325863107915753736">أخفق العثور على المقالة</translation> @@ -523,7 +519,6 @@ <translation id="6753269504797312559">قيمة السياسة</translation> <translation id="6757797048963528358">خضع جهازك إلى وضع السكون.</translation> <translation id="6781404225664080496">لقد تم منع الطلبات إلى عنوان URL هذا مؤقتًا.</translation> -<translation id="6800914069727136216">في حزمة المحتوى</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">صفحة الويب على <ph name="URL" /> غير متاحة حاليًا.. ربما تكون هناك زيادة في تحميلها أو أنها معطلة لأسباب تتعلق بالصيانة.</translation> <translation id="6831043979455480757">ترجمة</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb index 3a5d8e8..e28b0b4 100644 --- a/components/strings/components_strings_bg.xtb +++ b/components/strings/components_strings_bg.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Грешен идентификатор на обект</translation> <translation id="1232569758102978740">Неозаглавен</translation> <translation id="1254117744268754948">Избор на папка</translation> -<translation id="1270699273812232624">Разрешаване на елементите</translation> <translation id="1285320974508926690">Този сайт да не се превежда никога</translation> <translation id="129553762522093515">Наскоро затворени</translation> <translation id="1339601241726513588">Домейн за записване:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Филтриране</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> не прие сертификата ви за вход или той може да е с изтекла валидност.</translation> <translation id="194030505837763158">Към <ph name="LINK" /></translation> -<translation id="1958820272620550857">Блокиране на елементите</translation> <translation id="1962204205936693436">Отметки от <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Грешка при сериализирането</translation> <translation id="1974060860693918893">Разширени</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID на актива:</translation> <translation id="3109728660330352905">Нямате пълномощия за преглед на тази страница.</translation> <translation id="3118046075435288765">Сървърът неочаквано прекъсна връзката.</translation> -<translation id="31454997771848827">Домейни на групи</translation> <translation id="3145945101586104090">Декодирането на отговора не бе успешно</translation> <translation id="3147485256806412701">Този сайт използва нов общ домейн от първо ниво.</translation> <translation id="3150653042067488994">Временна грешка в сървъра</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Валидността на сертификата за този сайт изтича през 2016 г., а съответната верига съдържа сертификат, подписан с SHA-1.</translation> <translation id="382518646247711829">Ако използвате прокси сървър...</translation> <translation id="3828924085048779000">Не може пропускът да не се попълни.</translation> +<translation id="3845539888601087042">Показва се историята от устройствата, на които сте влезли в профила си. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Назад</translation> <translation id="3858027520442213535">Актуализиране на датата и часа</translation> <translation id="3884278016824448484">Идентификационният номер на устройството е несъвместим</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Невалиден подпис</translation> <translation id="4268298190799576220">Chromium не можа да потвърди картата ви. Моля, опитайте отново по-късно.</translation> <translation id="4269787794583293679">(Няма потребителско име)</translation> -<translation id="4278390842282768270">Разрешено</translation> <translation id="4300246636397505754">Основни предложения</translation> <translation id="4304224509867189079">Вход</translation> <translation id="4325863107915753736">Намирането на статията не бе успешно</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Изчистване на данните за сърфирането...</translation> <translation id="5430298929874300616">Премахване на отметката</translation> <translation id="5431657950005405462">Файлът ви не бе намерен</translation> +<translation id="5435775191620395718">Показва се историята от това устройство. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">При потвърждаване на схемата възникна грешка в/ъв „<ph name="ERROR_PATH" />“: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Показване на всички запазени страници</translation> <translation id="5452270690849572955">Тази страница на <ph name="HOST_NAME" /> не може да бъде намерена</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Стойност за правилото</translation> <translation id="6757797048963528358">Устройството ви премина в спящ режим.</translation> <translation id="6781404225664080496">Временно спряхме заявките до този URL адрес.</translation> -<translation id="6800914069727136216">В пакет със съдържание</translation> <translation id="6820686453637990663">Код за сигурност</translation> <translation id="6830600606572693159">Уеб страницата на адрес <ph name="URL" /> понастоящем не е налице. Възможно е да е претоварена или да не работи поради профилактика.</translation> <translation id="6831043979455480757">Превод</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Готово</translation> <translation id="8738058698779197622">За установяване на сигурна връзка е необходимо часовникът ви да е верен. Това е така, защото сертификатите, с които уебсайтовете се идентифицират, са валидни само за конкретни периоди от време. Тъй като часовникът на устройството ви не е верен, Chromium не може да потвърди тези сертификати.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">DNS адресът</abbr> на <ph name="HOST_NAME" /> не можа да бъде намерен. Проблемът се диагностицира.</translation> +<translation id="8741995161408053644">Възможно е в профила ви в Google да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Възстановяване на изтриването</translation> <translation id="8798099450830957504">По подразбиране</translation> <translation id="8804164990146287819">Декларация за поверителност</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index baf6cfd..0eaa2f5 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">ভুল সত্তা সনাক্তকারী</translation> <translation id="1232569758102978740">শিরোনামহীন</translation> <translation id="1254117744268754948">ফোল্ডার চয়ন করুন</translation> -<translation id="1270699273812232624">আইটেমগুলিকে মঞ্জুরি দিন</translation> <translation id="1285320974508926690">কখনই এই সাইটটিকে অনুবাদ করবেন না</translation> <translation id="129553762522093515">সম্প্রতি বন্ধ হয়েছে</translation> <translation id="1339601241726513588">ডোমেন নথিভুক্ত করুন:</translation> @@ -87,7 +86,6 @@ <translation id="1898423065542865115">ফিল্টার হচ্ছে</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> আপনার লগইন শংসাপত্রটি স্বীকার করেনি, অথবা আপনার লগইন শংসাপত্রের মেয়াদ হয়ত শেষ হয়ে গেছে।</translation> <translation id="194030505837763158"><ph name="LINK" /> এ যান</translation> -<translation id="1958820272620550857">আইটেমগুলি অবরুদ্ধ করুন</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> বুকমার্কগুলি</translation> <translation id="1973335181906896915">ধারাবাহিকতাতে ত্রুটি</translation> <translation id="1974060860693918893">উন্নত</translation> @@ -211,7 +209,6 @@ <translation id="3105172416063519923">সম্পদ আইডি:</translation> <translation id="3109728660330352905">আপনার এই পৃষ্ঠাটি দেখার জন্য অনুমোদন নেই।</translation> <translation id="3118046075435288765">সার্ভার অপ্রত্যাশিতভাবে সংযোগ বন্ধ করেছে৷</translation> -<translation id="31454997771848827">গোষ্ঠী ডোমেনগগুলি</translation> <translation id="3145945101586104090">প্রতিক্রিয়া ডিকোড করতে ব্যর্থ হয়েছে</translation> <translation id="3147485256806412701">এই সাইটটি একটি নতুন জেনেরিক উচ্চ স্তরের ডোমেন ব্যবহার করছে৷</translation> <translation id="3150653042067488994">সাময়িক সার্ভার ত্রুটি</translation> @@ -291,6 +288,7 @@ <translation id="3788090790273268753">২০১৬ সালে এই সাইটের শংসাপত্র মেয়াদোত্তীর্ণ হবে, এবং শংসাপত্র শৃঙ্খলে SHA-1 ব্যবহার করে স্বাক্ষর করা একটি শংসাপত্র রয়েছে।</translation> <translation id="382518646247711829">যদি আপনি একটি প্রক্সি সার্ভার ব্যবহার করেন...</translation> <translation id="3828924085048779000">ফাঁকা পাসফ্রেজের অনুমতি নেই৷</translation> +<translation id="3845539888601087042">আপনার সাইন ইন করা ডিভাইসগুলি থেকে ইতিহাস দেখাচ্ছে। <ph name="BEGIN_LINK" />আরো জানুন<ph name="END_LINK" />।</translation> <translation id="385051799172605136">ফিরুন</translation> <translation id="3858027520442213535">তারিখ এবং সময় আপডেট করুন</translation> <translation id="3884278016824448484">পরস্পর বিরোধী ডিভাইস সনাক্তকারী</translation> @@ -326,7 +324,6 @@ <translation id="4258748452823770588">ত্রুটিপূর্ণ স্বাক্ষর</translation> <translation id="4268298190799576220">Chromium এই মুহূর্তে আপনার কার্ড যাচাই করতে অক্ষম হয়েছে৷ দয়া করে পরে আবার চেষ্টা করুন৷</translation> <translation id="4269787794583293679">(কোনো ব্যবহারকারীর নাম নেই)</translation> -<translation id="4278390842282768270">মঞ্জুরিপ্রাপ্ত</translation> <translation id="4300246636397505754">মূল প্রস্তাবনাগুলি</translation> <translation id="4304224509867189079">লগ ইন</translation> <translation id="4325863107915753736">নিবন্ধ খুঁজে পেতে ব্যর্থ হয়েছে</translation> @@ -411,6 +408,7 @@ <translation id="5421136146218899937">ব্রাউজিং ডেটা সাফ করুন...</translation> <translation id="5430298929874300616">বুকমার্ক সরান</translation> <translation id="5431657950005405462">আপনার ফাইলটি পাওয়া যায়নি</translation> +<translation id="5435775191620395718">এই ডিভাইস থেকে ইতিহাস দেখাচ্ছে। <ph name="BEGIN_LINK" />আরো জানুন<ph name="END_LINK" />।</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" এ স্কিমা বৈধতার ত্রুটি হয়েছে: <ph name="ERROR" /></translation> <translation id="5447330194051379405">সব সংরক্ষিত পৃষ্ঠা দেখান</translation> <translation id="5452270690849572955">এই <ph name="HOST_NAME" /> পৃষ্ঠাটি পাওয়া যাচ্ছে না</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">নীতি মান</translation> <translation id="6757797048963528358">আপনার ডিভাইস নিদ্রা মোডে গিয়েছে।</translation> <translation id="6781404225664080496">এই URL এ অনুরোধ পাঠানো অস্থায়ীভাবে বন্ধ রাখা হয়েছে।</translation> -<translation id="6800914069727136216">সামগ্রী প্যাকের মধ্যে</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"> <ph name="URL" />তে থাকা ওয়েবপৃষ্ঠাটি বর্তমানে অনুপলব্ধ৷ রক্ষণাবেক্ষণের জন্য এটি ওভারলোড বা ডাউন হয়ে থাকতে পারে৷</translation> <translation id="6831043979455480757">অনুবাদ</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">সম্পন্ন হয়েছে</translation> <translation id="8738058698779197622">নিরাপদ নেটওয়ার্ক সংযোগ স্থাপন করতে আপনার ঘড়িকে সঠিকভাবে সেট করতে হবে৷ নিরাপদ সংযোগ স্থাপন করার জন্য নিজেদের সনাক্ত করার জন্য ওয়েবসাইটগুলি যে শংসাপত্রগুলি ব্যবহার করে, সেগুলি শুধুমাত্র নির্দিষ্ট সময়ের জন্য বৈধ থাকে৷ যেহেতু আপনার ডিভাইসের ঘড়িটি ভুল, সেই জন্য Chromium সঠিকভাবে শংসাপত্রগুলি পরীক্ষা করতে পারে না৷</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> এর <abbr id="dnsDefinition">DNS ঠিকানা</abbr> পাওয়া যায়নি। সমস্যা নির্ণয় করা হচ্ছে।</translation> +<translation id="8741995161408053644"><ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> এ আপনার Google অ্যাকাউন্টের অন্যান্য ধরনের ব্রাউজিং ইতিহাস থাকতে পারে।</translation> <translation id="8790007591277257123">&মুছে ফেলাকে পুনরায় করুন</translation> <translation id="8798099450830957504">ডিফল্ট</translation> <translation id="8804164990146287819">গোপনীয়তা নীতি</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index 516e4a3..5841d53b 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -36,7 +36,6 @@ <translation id="1228893227497259893">Identificador d'entitat incorrecte</translation> <translation id="1232569758102978740">Sense títol</translation> <translation id="1254117744268754948">Selecció de la carpeta</translation> -<translation id="1270699273812232624">Permet els elements</translation> <translation id="1285320974508926690">No tradueixis mai aquest lloc</translation> <translation id="129553762522093515">Tancades recentment</translation> <translation id="1339601241726513588">Domini d'inscripció:</translation> @@ -83,7 +82,6 @@ <translation id="1898423065542865115">Filtratge</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> no ha acceptat el certificat d'inici de sessió, o potser ha caducat.</translation> <translation id="194030505837763158">Vés a <ph name="LINK" /></translation> -<translation id="1958820272620550857">Bloqueja elements</translation> <translation id="1962204205936693436">Adreces d'interès de <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Error de serialització</translation> <translation id="1974060860693918893">Configuració avançada</translation> @@ -207,7 +205,6 @@ <translation id="3105172416063519923">Identificador de l'element:</translation> <translation id="3109728660330352905">No teniu permís per veure aquesta pàgina.</translation> <translation id="3118046075435288765">El servidor ha tancat la connexió de manera inesperada.</translation> -<translation id="31454997771848827">Agrupa dominis</translation> <translation id="3145945101586104090">No s'ha pogut descodificar la resposta</translation> <translation id="3147485256806412701">En aquest lloc s'utilitza un nou domini genèric de nivell superior.</translation> <translation id="3150653042067488994">Error temporal del servidor</translation> @@ -287,6 +284,7 @@ <translation id="3788090790273268753">El certificat d'aquest lloc caduca al 2016, i la cadena de certificats conté un certificat que s'ha signat amb SHA-1.</translation> <translation id="382518646247711829">Si feu servir un servidor intermediari...</translation> <translation id="3828924085048779000">Les frases de contrasenya no poder estar buides.</translation> +<translation id="3845539888601087042">Es mostra l'historial dels dispositius en què heu iniciat la sessió. <ph name="BEGIN_LINK" />Obteniu més informació<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Enrere</translation> <translation id="3858027520442213535">Actualitza la data i l'hora</translation> <translation id="3884278016824448484">L'identificador del dispositiu ja s'està utilitzant</translation> @@ -322,7 +320,6 @@ <translation id="4258748452823770588">Signatura errònia</translation> <translation id="4268298190799576220">En aquest moment Chromium no ha pogut verificar la vostra targeta. Torneu-ho a provar més tard.</translation> <translation id="4269787794583293679">(Sense nom d'usuari)</translation> -<translation id="4278390842282768270">Permeses</translation> <translation id="4300246636397505754">Suggeriments per als responsables</translation> <translation id="4304224509867189079">Accedeix</translation> <translation id="4325863107915753736">No s'ha pogut trobar l'article</translation> @@ -407,6 +404,7 @@ <translation id="5421136146218899937">Esborra les dades de navegació...</translation> <translation id="5430298929874300616">Suprimeix l'adreça d'interès</translation> <translation id="5431657950005405462">No s'ha trobat el fitxer</translation> +<translation id="5435775191620395718">Es mostra l'historial d'aquest dispositiu. <ph name="BEGIN_LINK" />Obteniu més informació<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Error de validació de l'esquema a "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Mostra totes les pàgines desades</translation> <translation id="5452270690849572955">No s'ha trobat aquesta pàgina de <ph name="HOST_NAME" /></translation> @@ -519,7 +517,6 @@ <translation id="6753269504797312559">Valor de la política</translation> <translation id="6757797048963528358">El dispositiu ha entrat en mode de repòs.</translation> <translation id="6781404225664080496">Les sol·licituds a aquest URL s'han restringit de manera temporal.</translation> -<translation id="6800914069727136216">Al paquet de contingut</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">En aquests moments, la pàgina web de <ph name="URL" /> no està disponible. Pot ser que estigui sobrecarregada o bé que s'hi estiguin realitzant tasques de manteniment.</translation> <translation id="6831043979455480757">Tradueix</translation> @@ -695,6 +692,7 @@ <translation id="8730621377337864115">Fet</translation> <translation id="8738058698779197622">Per establir una connexió segura, el rellotge ha d'estar ben ajustat, perquè els certificats que els llocs web fan servir per identificar-se només són vàlids per a períodes de temps concrets. Com que el rellotge del dispositiu no està ben ajustat, Chromium no pot verificar aquests certificats.</translation> <translation id="8740359287975076522">No s'ha trobat l'<abbr id="dnsDefinition">adreça DNS</abbr> de <ph name="HOST_NAME" />. S'està diagnosticant el problema.</translation> +<translation id="8741995161408053644">És possible que el vostre compte de Google tingui altres formes de l'historial de navegació a l'adreça <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Refés la supressió</translation> <translation id="8798099450830957504">Predeterminat</translation> <translation id="8804164990146287819">Política de privadesa</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 0b23402..64d2c56c 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -36,7 +36,6 @@ <translation id="1228893227497259893">Nesprávný identifikátor subjektu</translation> <translation id="1232569758102978740">Bez názvu</translation> <translation id="1254117744268754948">Výběr složky</translation> -<translation id="1270699273812232624">Povolit položky</translation> <translation id="1285320974508926690">Tento web nikdy nepřekládat</translation> <translation id="129553762522093515">Nedávno zavřené</translation> <translation id="1339601241726513588">Doména registrace:</translation> @@ -83,7 +82,6 @@ <translation id="1898423065542865115">Filtrování</translation> <translation id="1911837502049945214">Web <ph name="HOST_NAME" /> nepřijal přihlašovací certifikát. Je možné, že platnost certifikátu vypršela.</translation> <translation id="194030505837763158">Přejít na odkaz <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokovat položky</translation> <translation id="1962204205936693436">Záložky domény <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Chyba serializace</translation> <translation id="1974060860693918893">Rozšířená nastavení</translation> @@ -200,7 +198,6 @@ <translation id="3105172416063519923">ID díla:</translation> <translation id="3109728660330352905">K zobrazení této stránky nemáte oprávnění.</translation> <translation id="3118046075435288765">Server neočekávaně ukončil připojení.</translation> -<translation id="31454997771848827">Seskupit domény</translation> <translation id="3145945101586104090">Dekódování odpovědi se nezdařilo</translation> <translation id="3147485256806412701">Tento web používá novou generickou doménu nejvyšší úrovně.</translation> <translation id="3150653042067488994">Dočasná chyba serveru</translation> @@ -276,6 +273,7 @@ <translation id="3788090790273268753">Certifikát těchto webových stránek vyprší v roce 2016 a řetězec certifikátů obsahuje certifikát podepsaný pomocí technologie SHA-1.</translation> <translation id="382518646247711829">Pokud používáte proxy server...</translation> <translation id="3828924085048779000">Prázdná heslová fráze není povolena.</translation> +<translation id="3845539888601087042">Zobrazuje se historie z vašich přihlášených zařízení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="385051799172605136">Zpět</translation> <translation id="3858027520442213535">Aktualizovat datum a čas</translation> <translation id="3884278016824448484">Konfliktní identifikátor zařízení</translation> @@ -311,7 +309,6 @@ <translation id="4258748452823770588">Chybný podpis</translation> <translation id="4268298190799576220">Prohlížeč Chromium vaši kartu aktuálně nemohl ověřit. Zkuste to znovu později.</translation> <translation id="4269787794583293679">(Žádné uživatelské jméno)</translation> -<translation id="4278390842282768270">Povoleno</translation> <translation id="4300246636397505754">Návrhy rodičů</translation> <translation id="4304224509867189079">Přihlásit se</translation> <translation id="4325863107915753736">Článek nebyl nalezen</translation> @@ -396,6 +393,7 @@ <translation id="5421136146218899937">Vymazat údaje o prohlížení...</translation> <translation id="5430298929874300616">Odstranit záložku</translation> <translation id="5431657950005405462">Soubor nebyl nalezen</translation> +<translation id="5435775191620395718">Zobrazuje se historie z tohoto zařízení. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Chyba validace schématu v místě <ph name="ERROR_PATH" />: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Zobrazit všechny uložené stránky</translation> <translation id="5452270690849572955">Tuto stránku na webu <ph name="HOST_NAME" /> nelze najít</translation> @@ -505,7 +503,6 @@ <translation id="6753269504797312559">Hodnota zásady</translation> <translation id="6757797048963528358">Zařízení přešlo do režimu spánku.</translation> <translation id="6781404225664080496">Požadavky na tuto adresu URL jsou dočasně pozastaveny.</translation> -<translation id="6800914069727136216">V balíčku obsahu</translation> <translation id="6820686453637990663">Bezpečnostní kód platební karty (CVC)</translation> <translation id="6830600606572693159">Stránky na adrese <ph name="URL" /> nejsou v tuto chvíli k dispozici. Důvodem může být přetížení nebo provádění údržby.</translation> <translation id="6831043979455480757">Přeložit</translation> @@ -667,6 +664,7 @@ <translation id="8730621377337864115">Hotovo</translation> <translation id="8738058698779197622">Aby bylo možné navázat zabezpečené spojení, hodiny musejí být nastaveny správně. Důvodem je, že certifikáty, pomocí kterých se weby identifikují, platí pouze pro pevně daná období. Jelikož hodiny v zařízení nejsou nastaveny správně, prohlížeč Chromium tyto certifikáty nemůže ověřit.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">Adresu DNS</abbr> webu <ph name="HOST_NAME" /> nelze najít. Diagnostikování problému…</translation> +<translation id="8741995161408053644">Na stránce <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> mohou být k dispozici další formy historie prohlížení zaznamenané ve vašem účtu Google.</translation> <translation id="8790007591277257123">&Opakovat smazání</translation> <translation id="8798099450830957504">Výchozí</translation> <translation id="8804164990146287819">Zásady ochrany soukromí</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index 00b65220..31d00285 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Forkert enheds-id</translation> <translation id="1232569758102978740">Ikke-navngivet</translation> <translation id="1254117744268754948">Vælg mappe</translation> -<translation id="1270699273812232624">Tillad elementer</translation> <translation id="1285320974508926690">Oversæt aldrig dette website</translation> <translation id="129553762522093515">Senest lukkede</translation> <translation id="1339601241726513588">Registreringsdomæne:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrering</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> accepterede ikke dit logincertifikat, eller dit logincertifikat er muligvis udløbet.</translation> <translation id="194030505837763158">Gå til <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokerede elementer</translation> <translation id="1962204205936693436">Bogmærker fra <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Serialiseringsfejl</translation> <translation id="1974060860693918893">Avanceret</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Aktiv-id:</translation> <translation id="3109728660330352905">Du har ikke tilladelse til at se denne side.</translation> <translation id="3118046075435288765">Serveren lukkede forbindelsen uventet.</translation> -<translation id="31454997771848827">Gruppens domæner</translation> <translation id="3145945101586104090">Svaret kunne ikke afkodes</translation> <translation id="3147485256806412701">Dette website anvender et nyt generisk domæne på øverste niveau.</translation> <translation id="3150653042067488994">Midlertidig serverfejl</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Certifikatet for dette website udløber i 2016, og certifikatkæden indeholder et certifikat, der er signeret med SHA-1.</translation> <translation id="382518646247711829">Hvis du bruger en proxyserver...</translation> <translation id="3828924085048779000">Tomme adgangssætninger er ikke tilladt.</translation> +<translation id="3845539888601087042">Viser historik fra de enheder, hvor du er logget ind. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Tilbage</translation> <translation id="3858027520442213535">Opdater dato og tid</translation> <translation id="3884278016824448484">Modstridende enheds-id</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Forkert signatur</translation> <translation id="4268298190799576220">Chrome kan ikke bekræfte dit kort i øjeblikket. Prøv igen senere.</translation> <translation id="4269787794583293679">(Intet brugernavn)</translation> -<translation id="4278390842282768270">Tilladt</translation> <translation id="4300246636397505754">Forslag fra forældre</translation> <translation id="4304224509867189079">Log ind</translation> <translation id="4325863107915753736">Artiklen blev ikke fundet.</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Ryd browserdata...</translation> <translation id="5430298929874300616">Fjern bogmærke</translation> <translation id="5431657950005405462">Din fil blev ikke fundet</translation> +<translation id="5435775191620395718">Viser historik fra denne enhed. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Skemavalideringsfejl på "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Vis alle gemte sider</translation> <translation id="5452270690849572955">Denne side fra <ph name="HOST_NAME" /> kan ikke findes</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Politikkens værdi</translation> <translation id="6757797048963528358">Din enhed gik i dvale.</translation> <translation id="6781404225664080496">Anmodninger til denne webadresse er midlertidigt deaktiveret.</translation> -<translation id="6800914069727136216">I indholdspakke</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Websiden på <ph name="URL" /> er ikke tilgængelig lige nu. Den kan enten være overbelastet eller under vedligeholdelse.</translation> <translation id="6831043979455480757">Oversæt</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Fuldført</translation> <translation id="8738058698779197622">For at kunne oprette en sikker forbindelse skal dit ur være indstillet korrekt. Det er vigtigt, da de certifikater, som websites bruger til at identificere sig selv, kun er gyldige i bestemte tidsperioder. Da uret på din enhed går forkert, kan Chromium ikke bekræfte disse certifikater.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">DNS-adressen</abbr> for <ph name="HOST_NAME" /> kunne ikke findes. Diagnosticerer problemet.</translation> +<translation id="8741995161408053644">Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Annuller fortryd sletning</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8804164990146287819">Privatlivspolitik</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 5385148..17474104 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -40,7 +40,6 @@ <translation id="1228893227497259893">Falsche Entitätskennung</translation> <translation id="1232569758102978740">Unbenannt</translation> <translation id="1254117744268754948">Ordner wählen</translation> -<translation id="1270699273812232624">Elemente zulassen</translation> <translation id="1285320974508926690">Diese Website nie übersetzen</translation> <translation id="129553762522093515">Kürzlich geschlossen</translation> <translation id="1339601241726513588">Anmeldedomain:</translation> @@ -87,7 +86,6 @@ <translation id="1898423065542865115">Filtern</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> hat Ihr Anmeldezertifikat nicht akzeptiert oder Ihr Anmeldezertifikat ist möglicherweise abgelaufen.</translation> <translation id="194030505837763158">Besuchen Sie die Seite <ph name="LINK" />.</translation> -<translation id="1958820272620550857">Elemente blockieren</translation> <translation id="1962204205936693436"><ph name="DOMAIN" />-Lesezeichen</translation> <translation id="1973335181906896915">Fehler bei der Serialisierung</translation> <translation id="1974060860693918893">Erweitert</translation> @@ -211,7 +209,6 @@ <translation id="3105172416063519923">Geräte-ID:</translation> <translation id="3109728660330352905">Sie sind nicht zum Aufrufen dieser Seite autorisiert.</translation> <translation id="3118046075435288765">Server hat die Verbindung unerwartet geschlossen.</translation> -<translation id="31454997771848827">Nach Domain gruppieren</translation> <translation id="3145945101586104090">Fehler beim Dekodieren der Antwort</translation> <translation id="3147485256806412701">Diese Website verwendet eine neue allgemeine Top-Level-Domain.</translation> <translation id="3150653042067488994">Vorübergehender Serverfehler</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Das Zertifikat für diese Website läuft 2016 ab und die Zertifikatskette enthält ein Zertifikat mit SHA-1-Signatur.</translation> <translation id="382518646247711829">Falls Sie einen Proxyserver verwenden...</translation> <translation id="3828924085048779000">Eine leere Passphrase ist nicht zulässig.</translation> +<translation id="3845539888601087042">Der Verlauf für alle Geräte, auf denen Sie angemeldet sind, wird angezeigt. <ph name="BEGIN_LINK" />Weitere Informationen.<ph name="END_LINK" /></translation> <translation id="385051799172605136">Zurück</translation> <translation id="3858027520442213535">Datum und Uhrzeit aktualisieren</translation> <translation id="3884278016824448484">In Konflikt stehende Gerätekennung</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Fehlerhafte Signatur</translation> <translation id="4268298190799576220">Chromium kann Ihre Karte momentan nicht verifizieren. Bitte versuchen Sie es später noch einmal.</translation> <translation id="4269787794583293679">(Kein Nutzername)</translation> -<translation id="4278390842282768270">Zugelassen</translation> <translation id="4300246636397505754">Vorschläge für Eltern</translation> <translation id="4304224509867189079">Anmelden</translation> <translation id="4325863107915753736">Der Artikel wurde nicht gefunden.</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Browserdaten löschen...</translation> <translation id="5430298929874300616">Lesezeichen löschen</translation> <translation id="5431657950005405462">Ihre Datei wurde nicht gefunden</translation> +<translation id="5435775191620395718">Der Verlauf für dieses Gerät wird angezeigt. <ph name="BEGIN_LINK" />Weitere Informationen.<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Schemavalidierungsfehler in "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Alle gespeicherten Seiten anzeigen</translation> <translation id="5452270690849572955">Diese <ph name="HOST_NAME" />-Seite wurde nicht gefunden</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Wert der Richtlinie</translation> <translation id="6757797048963528358">Ihr Gerät ist im Ruhemodus.</translation> <translation id="6781404225664080496">Anfragen an diese URL wurden vorübergehend reduziert.</translation> -<translation id="6800914069727136216">Gehört zu Inhaltspaket</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Die Webseite unter <ph name="URL" /> ist zurzeit nicht verfügbar. Möglicherweise ist sie überlastet oder wird gerade gewartet.</translation> <translation id="6831043979455480757">Übersetzen</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Fertig</translation> <translation id="8738058698779197622">Zum Aufbau einer sicheren Verbindung muss die Uhrzeit richtig eingestellt sein. Der Grund hierfür ist, dass Websites sich mithilfe von Zertifikaten identifizieren, die nur für einen bestimmten Zeitraum gelten. Da die Uhrzeit Ihres Geräts falsch ist, kann Chromium diese Zertifikate nicht bestätigen.</translation> <translation id="8740359287975076522">Die <abbr id="dnsDefinition">DNS-Adresse</abbr> von <ph name="HOST_NAME" /> wurde nicht gefunden. Eine Problemdiagnose wird durchgeführt.</translation> +<translation id="8741995161408053644">Möglicherweise sind in Ihrem Google-Konto noch andere Formen des Browserverlaufs unter <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> vorhanden.</translation> <translation id="8790007591277257123">&Löschen wiederholen</translation> <translation id="8798099450830957504">Standardeinstellung</translation> <translation id="8804164990146287819">Datenschutzerklärung</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index daf049ba..2a00e127 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Εσφαλμένο αναγνωριστικό οντότητας</translation> <translation id="1232569758102978740">Χωρίς τίτλο</translation> <translation id="1254117744268754948">Επιλογή φακέλου</translation> -<translation id="1270699273812232624">Να επιτρέπονται τα στοιχεία</translation> <translation id="1285320974508926690">Να μην γίνεται ποτέ μετάφραση αυτού του ιστότοπου</translation> <translation id="129553762522093515">Έκλεισαν πρόσφατα</translation> <translation id="1339601241726513588">Τομέας εγγραφής:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Φιλτράρισμα</translation> <translation id="1911837502049945214">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> δεν αποδέχτηκε το πιστοποιητικό σύνδεσής σας ή το πιστοποιητικό σύνδεσης ενδέχεται να έχει λήξει.</translation> <translation id="194030505837763158">Μετάβαση στο σύνδεσμο <ph name="LINK" /></translation> -<translation id="1958820272620550857">Αποκλεισμός στοιχείων</translation> <translation id="1962204205936693436">Σελιδοδείκτες <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Σφάλμα σειριοποίησης</translation> <translation id="1974060860693918893">Σύνθετες</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Αναγνωριστικό στοιχείο:</translation> <translation id="3109728660330352905">Δεν έχετε εξουσιοδότηση για την προβολή αυτής της σελίδας.</translation> <translation id="3118046075435288765">Ο διακομιστής τερμάτισε απροσδόκητα τη σύνδεση.</translation> -<translation id="31454997771848827">Τομείς ομάδας</translation> <translation id="3145945101586104090">Αποτυχία αποκωδικοποίησης απόκρισης</translation> <translation id="3147485256806412701">Αυτός ο ιστότοπος χρησιμοποιεί έναν γενικό τομέα ανώτερου επιπέδου.</translation> <translation id="3150653042067488994">Προσωρινό σφάλμα διακομιστή</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Το πιστοποιητικό για αυτόν τον ιστότοπο λήγει το 2016 και η αλυσίδα πιστοποιητικών περιέχει ένα πιστοποιητικό το οποίο έχει υπογραφεί με SHA-1.</translation> <translation id="382518646247711829">Εάν χρησιμοποιείτε διακομιστή μεσολάβησης…</translation> <translation id="3828924085048779000">Δεν επιτρέπεται να είναι κενή η φράση πρόσβασης.</translation> +<translation id="3845539888601087042">Εμφάνιση ιστορικού από τις συνδεδεμένες συσκευές σας. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Πίσω</translation> <translation id="3858027520442213535">Ενημέρωση ημερομηνίας και ώρας</translation> <translation id="3884278016824448484">Αναγνωριστικό συσκευής που προκαλεί διένεξη</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Εσφαλμένη υπογραφή</translation> <translation id="4268298190799576220">Δεν ήταν δυνατή η επαλήθευση της κάρτας σας από το Chromium αυτήν τη στιγμή. Δοκιμάστε ξανά αργότερα.</translation> <translation id="4269787794583293679">(Χωρίς όνομα χρήστη)</translation> -<translation id="4278390842282768270">Επιτρέπεται</translation> <translation id="4300246636397505754">Γονικές προτάσεις</translation> <translation id="4304224509867189079">Σύνδεση</translation> <translation id="4325863107915753736">Αποτυχία εύρεσης άρθρου</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Διαγραφή δεδομένων περιήγησης...</translation> <translation id="5430298929874300616">Κατάργηση σελιδοδείκτη</translation> <translation id="5431657950005405462">Το αρχείο σας δεν βρέθηκε</translation> +<translation id="5435775191620395718">Εμφάνιση ιστορικού από αυτήν τη συσκευή. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Σφάλμα επαλήθευσης σχήματος σε "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Εμφάνιση όλων των αποθηκευμένων σελίδων</translation> <translation id="5452270690849572955">Δεν είναι δυνατός ο εντοπισμός αυτής της σελίδας του κεντρικού υπολογιστή <ph name="HOST_NAME" /></translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Τιμή πολιτικής</translation> <translation id="6757797048963528358">Η συσκευή σας τέθηκε σε αδράνεια.</translation> <translation id="6781404225664080496">Τα αιτήματα γι' αυτήν τη διεύθυνση URL έχουν τεθεί σε αναμονή προσωρινά.</translation> -<translation id="6800914069727136216">Σε πακέτο περιεχομένου</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Η ιστοσελίδα στο <ph name="URL" /> δεν είναι διαθέσιμη προς το παρόν. Μπορεί να είναι υπερφορτωμένη ή εκτός λειτουργίας για συντήρηση.</translation> <translation id="6831043979455480757">Μετάφραση</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Ολοκληρώθηκε</translation> <translation id="8738058698779197622">Για την επίτευξη μιας ασφαλούς σύνδεσης, θα πρέπει να γίνει σωστή ρύθμιση του ρολογιού σας. Αυτό οφείλεται στο γεγονός ότι τα πιστοποιητικά που χρησιμοποιούν οι ιστότοποι για την ταυτοποίησή τους είναι έγκυρα μόνο για συγκεκριμένες χρονικές περιόδους. Εφόσον το ρολόι της συσκευής σας δεν είναι σωστά ρυθμισμένο, το Chromium δεν μπορεί να επαληθεύσει αυτά τα πιστοποιητικά.</translation> <translation id="8740359287975076522">Δεν ήταν δυνατός ο εντοπισμός της <abbr id="dnsDefinition">διεύθυνσης DNS</abbr> του κεντρικού υπολογιστή <ph name="HOST_NAME" />. Γίνεται διάγνωση του προβλήματος.</translation> +<translation id="8741995161408053644">Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Επανάληψη διαγραφής</translation> <translation id="8798099450830957504">Προεπιλογή</translation> <translation id="8804164990146287819">Πολιτική Απορρήτου</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb index 54fec25..e9e13e5d 100644 --- a/components/strings/components_strings_en-GB.xtb +++ b/components/strings/components_strings_en-GB.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Wrong entity identifier</translation> <translation id="1232569758102978740">Untitled</translation> <translation id="1254117744268754948">Choose Folder</translation> -<translation id="1270699273812232624">Allow items</translation> <translation id="1285320974508926690">Never translate this site</translation> <translation id="129553762522093515">Recently closed</translation> <translation id="1339601241726513588">Enrolment domain:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtering</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> didn’t accept your login certificate or your login certificate may have expired.</translation> <translation id="194030505837763158">Go to <ph name="LINK" /></translation> -<translation id="1958820272620550857">Block items</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> Bookmarks</translation> <translation id="1973335181906896915">Serialisation error</translation> <translation id="1974060860693918893">Advanced</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Asset ID:</translation> <translation id="3109728660330352905">You don't have authorisation to view this page.</translation> <translation id="3118046075435288765">The server closed the connection unexpectedly.</translation> -<translation id="31454997771848827">Group domains</translation> <translation id="3145945101586104090">Failed to decode response</translation> <translation id="3147485256806412701">This site is using a new generic top-level domain.</translation> <translation id="3150653042067488994">Temporary server error</translation> @@ -326,7 +323,6 @@ <translation id="4258748452823770588">Bad signature</translation> <translation id="4268298190799576220">Chromium was unable to verify your card at this time. Please try again later.</translation> <translation id="4269787794583293679">(No username)</translation> -<translation id="4278390842282768270">Allowed</translation> <translation id="4300246636397505754">Parent suggestions</translation> <translation id="4304224509867189079">Log In</translation> <translation id="4325863107915753736">Failed to find article</translation> @@ -524,7 +520,6 @@ <translation id="6753269504797312559">Policy Value</translation> <translation id="6757797048963528358">Your device went to sleep.</translation> <translation id="6781404225664080496">Requests to this URL have been temporarily throttled.</translation> -<translation id="6800914069727136216">In content pack</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">The web page at <ph name="URL" /> is currently unavailable. It may be overloaded or down for maintenance.</translation> <translation id="6831043979455480757">Translate</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 4590582..bf9642e 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -38,7 +38,6 @@ <translation id="1228893227497259893">El identificador de la entidad es incorrecto.</translation> <translation id="1232569758102978740">Sin título</translation> <translation id="1254117744268754948">Seleccionar carpeta</translation> -<translation id="1270699273812232624">Permitir elementos</translation> <translation id="1285320974508926690">Nunca traducir este sitio</translation> <translation id="129553762522093515">Cerrado recientemente</translation> <translation id="1339601241726513588">Inscripción de dominio:</translation> @@ -85,7 +84,6 @@ <translation id="1898423065542865115">Filtrado</translation> <translation id="1911837502049945214">O bien <ph name="HOST_NAME" /> no aceptó tu certificado de acceso, o es posible que tu certificado de acceso haya expirado.</translation> <translation id="194030505837763158">Ir a <ph name="LINK" /></translation> -<translation id="1958820272620550857">Bloquear elementos</translation> <translation id="1962204205936693436">Marcadores de <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Error de serialización</translation> <translation id="1974060860693918893">Avanzada</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">ID de recurso:</translation> <translation id="3109728660330352905">No tienes autorización para ver esta página.</translation> <translation id="3118046075435288765">El servidor ha cerrado la conexión de forma inesperada.</translation> -<translation id="31454997771848827">Dominios de grupo</translation> <translation id="3145945101586104090">Se produjo un error al decodificar respuesta.</translation> <translation id="3147485256806412701">El sitio está usando un nuevo dominio genérico de nivel superior.</translation> <translation id="3150653042067488994">Error temporal del servidor</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">El certificado de este sitio web vence en 2016 y la cadena del certificado contiene un certificado que se firmó con SHA-1.</translation> <translation id="382518646247711829">Si utilizas un servidor proxy...</translation> <translation id="3828924085048779000">No se permite una frase de contraseña vacía.</translation> +<translation id="3845539888601087042">Se muestra el historial de los dispositivos a los que accediste. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Atrás</translation> <translation id="3858027520442213535">Actualizar fecha y hora</translation> <translation id="3884278016824448484">Hay un identificador de dispositivo en conflicto.</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Firma no válida</translation> <translation id="4268298190799576220">Chrome no pudo verificar tu tarjeta. Vuelve a intentarlo más tarde.</translation> <translation id="4269787794583293679">(Sin nombre de usuario)</translation> -<translation id="4278390842282768270">Permitido</translation> <translation id="4300246636397505754">Sugerencias para padres</translation> <translation id="4304224509867189079">Acceder</translation> <translation id="4325863107915753736">No se pudo encontrar el artículo</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Borrar datos de navegación...</translation> <translation id="5430298929874300616">Eliminar marcador</translation> <translation id="5431657950005405462">No se encontró tu archivo</translation> +<translation id="5435775191620395718">Se muestra el historial de este dispositivo. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Error de validación de esquema en "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Mostrar todas las páginas que se guardaron</translation> <translation id="5452270690849572955">No se encuentra esta página <ph name="HOST_NAME" /></translation> @@ -520,7 +518,6 @@ <translation id="6753269504797312559">Valor de la política</translation> <translation id="6757797048963528358">El dispositivo se suspendió.</translation> <translation id="6781404225664080496">Se interrumpieron temporalmente las solicitudes a esta URL.</translation> -<translation id="6800914069727136216">En paquete de contenido</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">La página web en <ph name="URL" /> no está disponible en este momento. Es posible que esté sobrecargado o no disponible por mantenimiento.</translation> <translation id="6831043979455480757">Traducir</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">Listo</translation> <translation id="8738058698779197622">Para establecer una conexión segura, el reloj debe estar configurado correctamente. Esto se debe a que los certificados que usan los sitios web para su identificación solo son válidos por períodos de tiempo específicos. Debido a que la configuración del reloj del dispositivo es incorrecta, Chromium no puede verificar estos certificados.</translation> <translation id="8740359287975076522">No se encontró <ph name="HOST_NAME" />’s <abbr id="dnsDefinition">DNS address</abbr>. Se está diagnosticando el problema.</translation> +<translation id="8741995161408053644">Es posible que tu cuenta de Google tenga otros formularios del historial de navegación en <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Rehacer Eliminar</translation> <translation id="8798099450830957504">Predeterminado</translation> <translation id="8804164990146287819">Política de privacidad</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index ce348a2..bd7dd33 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Identificador de entidad incorrecto</translation> <translation id="1232569758102978740">Sin título</translation> <translation id="1254117744268754948">Seleccionar carpeta</translation> -<translation id="1270699273812232624">Permitir elementos</translation> <translation id="1285320974508926690">No traducir nunca este sitio</translation> <translation id="129553762522093515">Cerrado recientemente</translation> <translation id="1339601241726513588">Dominio de registro:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrado</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> no ha aceptado el certificado de inicio de sesión o puede que este haya caducado.</translation> <translation id="194030505837763158">Ir a <ph name="LINK" /></translation> -<translation id="1958820272620550857">Elementos bloqueados</translation> <translation id="1962204205936693436">Marcadores de <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Error de serialización</translation> <translation id="1974060860693918893">Opciones avanzadas</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID de recurso:</translation> <translation id="3109728660330352905">No tienes autorización para ver esta página.</translation> <translation id="3118046075435288765">El servidor ha cerrado la conexión de forma inesperada.</translation> -<translation id="31454997771848827">Agrupar dominios</translation> <translation id="3145945101586104090">Error al decodificar respuesta</translation> <translation id="3147485256806412701">Este sitio utiliza un nuevo dominio genérico de nivel superior.</translation> <translation id="3150653042067488994">Error de servidor temporal</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">El certificado de este sitio web vence en 2016 y la cadena de certificados incluye un certificado firmado con SHA-1.</translation> <translation id="382518646247711829">Si utilizas un servidor proxy...</translation> <translation id="3828924085048779000">La frase de contraseña no puede estar vacía.</translation> +<translation id="3845539888601087042">Mostrando historial de dispositivos en los que has iniciado sesión. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Atrás</translation> <translation id="3858027520442213535">Actualizar fecha y hora</translation> <translation id="3884278016824448484">Identificador de dispositivo en conflicto</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Firma errónea</translation> <translation id="4268298190799576220">Chromium no ha podido verificar tu tarjeta en este momento. Vuelve a intentarlo más tarde.</translation> <translation id="4269787794583293679">(Ningún nombre de usuario)</translation> -<translation id="4278390842282768270">Permitido</translation> <translation id="4300246636397505754">Sugerencias de padres</translation> <translation id="4304224509867189079">Iniciar sesión</translation> <translation id="4325863107915753736">Error al buscar el artículo</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Borrar datos de navegación...</translation> <translation id="5430298929874300616">Eliminar marcador</translation> <translation id="5431657950005405462">No se ha encontrado tu archivo</translation> +<translation id="5435775191620395718">Mostrando historial de este dispositivo. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Error de validación de esquema en "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Mostrar todas las páginas guardadas</translation> <translation id="5452270690849572955">No se puede encontrar esta página (<ph name="HOST_NAME" />)</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Valor de la política</translation> <translation id="6757797048963528358">El dispositivo se ha suspendido.</translation> <translation id="6781404225664080496">Las solicitudes para acceder a esta URL se han detenido de forma temporal.</translation> -<translation id="6800914069727136216">En paquete de contenido</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">La página web de la URL <ph name="URL" /> no está disponible en este momento. Es posible que esté sobrecargada o inactiva debido a tareas de mantenimiento.</translation> <translation id="6831043979455480757">Traducir</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Listo</translation> <translation id="8738058698779197622">Para establecer una conexión segura, tu reloj debe estar correctamente configurado. Esto se debe a que los certificados utilizados por los sitios web para identificarse son solo válidos durante períodos específicos de tiempo. Dado que la hora de tu dispositivo no es correcta, Chromium no puede verificar estos certificados.</translation> <translation id="8740359287975076522">No se ha podido encontrar la <abbr id="dnsDefinition">dirección DNS</abbr> de la página <ph name="HOST_NAME" />. Se está diagnosticando el problema.</translation> +<translation id="8741995161408053644">Es posible que tu cuenta de Google tenga otras formas del historial de navegación en la página <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Rehacer eliminación</translation> <translation id="8798099450830957504">Predeterminado</translation> <translation id="8804164990146287819">Política de Privacidad</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 18bbfc1c..3d9a1fe 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Üksuse vale identifikaator</translation> <translation id="1232569758102978740">Pealkirjata</translation> <translation id="1254117744268754948">Kausta valimine</translation> -<translation id="1270699273812232624">Luba üksused</translation> <translation id="1285320974508926690">Ära kunagi seda saiti tõlgi</translation> <translation id="129553762522093515">Viimati suletud</translation> <translation id="1339601241726513588">Registreerimisdomeen:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtreerimine</translation> <translation id="1911837502049945214">Host <ph name="HOST_NAME" /> ei aktsepteerinud teie sisselogimise sertifikaati või see võib olla aegunud.</translation> <translation id="194030505837763158">Avage <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokeeri üksused</translation> <translation id="1962204205936693436">Domeeni <ph name="DOMAIN" /> järjehoidjad</translation> <translation id="1973335181906896915">Viga jadaks teisendamisel</translation> <translation id="1974060860693918893">Täpsemad</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Vara ID:</translation> <translation id="3109728660330352905">Teil pole volitust selle lehe vaatamiseks.</translation> <translation id="3118046075435288765">Server sulges ühenduse ootamatult.</translation> -<translation id="31454997771848827">Rühma domeenid</translation> <translation id="3145945101586104090">Vastuse dekodeerimine ebaõnnestus</translation> <translation id="3147485256806412701">See sait kasutab uut üldist üladomeeni.</translation> <translation id="3150653042067488994">Serveris ilmnes ajutine viga</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Selle saidi sertifikaat aegub 2016. aastal ja sertifikaadiahel sisaldab sertifikaati, mis on allkirjastatud SHA-1-ga.</translation> <translation id="382518646247711829">Kui kasutate puhverserverit ...</translation> <translation id="3828924085048779000">Tühi parool ei ole lubatud.</translation> +<translation id="3845539888601087042">Kuvatakse ajalugu teie sisselogitud seadmetest. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Tagasi</translation> <translation id="3858027520442213535">Värskenda kuupäeva ja kellaaega</translation> <translation id="3884278016824448484">Seadme identifikaator on konfliktne</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Sobimatu allkiri</translation> <translation id="4268298190799576220">Chromium ei saanud praegu teie kaarti kinnitada. Proovige hiljem uuesti.</translation> <translation id="4269787794583293679">(Kasutajanimi puudub)</translation> -<translation id="4278390842282768270">Lubatud</translation> <translation id="4300246636397505754">Vanema soovitused</translation> <translation id="4304224509867189079">Logi sisse</translation> <translation id="4325863107915753736">Artiklit ei leitud</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Sirvimisandmete kustutamine ...</translation> <translation id="5430298929874300616">Järjehoidja eemaldamine</translation> <translation id="5431657950005405462">Teie faili ei leitud</translation> +<translation id="5435775191620395718">Kuvatakse ajalugu sellest seadmest. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Skeemi valideerimise viga asukohas „<ph name="ERROR_PATH" />”: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Kuva kõik salvestatud lehed</translation> <translation id="5452270690849572955">Hosti <ph name="HOST_NAME" /> lehte ei leita</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Reegli väärtus</translation> <translation id="6757797048963528358">Teie seade lülitus unerežiimile.</translation> <translation id="6781404225664080496">Päringud sellele URL-ile on ajutiselt peatatud.</translation> -<translation id="6800914069727136216">Sisupaketis</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Veebileht pole aadressil <ph name="URL" /> praegu saadaval. See võib olla üle koormatud või hooldamiseks seisatud.</translation> <translation id="6831043979455480757">Tõlgi</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Valmis</translation> <translation id="8738058698779197622">Turvalise ühenduse loomiseks peab kell olema õigesti seadistatud. See on nii, kuna sertifikaadid, mida veebisaidid kasutavad enda tuvastamiseks, kehtivad ainult teatud perioodi jooksul. Kuna teie seadme kell on vale, ei saa Chromium neid sertifikaate kinnitada.</translation> <translation id="8740359287975076522">Hosti <ph name="HOST_NAME" /> <abbr id="dnsDefinition">DNS-aadressi</abbr> ei leitud. Probleemi diagnoositakse.</translation> +<translation id="8741995161408053644">Aadressil <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> võib teie Google'i kontol olla muus vormis sirvimisajalugu.</translation> <translation id="8790007591277257123">&Kustuta uuesti</translation> <translation id="8798099450830957504">Vaikimisi</translation> <translation id="8804164990146287819">Privaatsuseeskirjad</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb index 273e61b..b8bc49d 100644 --- a/components/strings/components_strings_fa.xtb +++ b/components/strings/components_strings_fa.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">شناسه entity نادرست</translation> <translation id="1232569758102978740">بدون عنوان</translation> <translation id="1254117744268754948">انتخاب پوشه</translation> -<translation id="1270699273812232624">اجازه به موارد</translation> <translation id="1285320974508926690">این سایت هرگز ترجمه نشود</translation> <translation id="129553762522093515">اخیراً بسته شده</translation> <translation id="1339601241726513588">دامنه ثبتنام:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">فیلتر کردن</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> گواهی ثبت ورود شما را نپذیرفت، یا ممکن است گواهی ثبت ورود شما منقضی شده باشد.</translation> <translation id="194030505837763158">رفتن به <ph name="LINK" /></translation> -<translation id="1958820272620550857">مسدود کردن موارد</translation> <translation id="1962204205936693436">نشانکهای <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">خطای ترتیب</translation> <translation id="1974060860693918893">پیشرفته</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">شناسه دارایی:</translation> <translation id="3109728660330352905">شما اجازه مشاهده این صفحه را ندارید.</translation> <translation id="3118046075435288765">سرور به طول غیرمنتظرهای اتصال را قطع کرد.</translation> -<translation id="31454997771848827">دامنههای گروهی</translation> <translation id="3145945101586104090">رمزگشایی پاسخ انجام نشد</translation> <translation id="3147485256806412701">این سایت از یک دامنه سطح بالای عمومی جدید استفاده میکند.</translation> <translation id="3150653042067488994">خطای موقت سرور</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">گواهی این سایت در سال ۲۰۱۶ منقضی میشود و زنجیره گواهی حاوی یک گواهی با امضای SHA-1 است.</translation> <translation id="382518646247711829">اگر از سرور پراکسی استفاده میکنید...</translation> <translation id="3828924085048779000">عبارت عبور خالی مجاز نیست.</translation> +<translation id="3845539888601087042">در حال نمایش سابقه از دستگاههایی که در آنها به سیستم وارد شدهاید. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" />.</translation> <translation id="385051799172605136">بازگشت</translation> <translation id="3858027520442213535">بهروزرسانی تاریخ و زمان</translation> <translation id="3884278016824448484">شناسه دستگاه یکسان نیست</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">امضای نادرست</translation> <translation id="4268298190799576220">Chromium در حال حاضر نمیتواند کارتتان را تأیید کند. لطفاً بعداً دوباره امتحان کنید.</translation> <translation id="4269787794583293679">(بدون نام کاربری)</translation> -<translation id="4278390842282768270">مجاز است</translation> <translation id="4300246636397505754">پیشنهادات والدین</translation> <translation id="4304224509867189079">ورود به سیستم</translation> <translation id="4325863107915753736">مقاله یافت نشد.</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">پاک کردن دادههای مرور...</translation> <translation id="5430298929874300616">حذف نشانک</translation> <translation id="5431657950005405462">فایل شما پیدا نشد</translation> +<translation id="5435775191620395718">در حال نمایش سابقه از این دستگاه. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">خطای تأیید طرح در «<ph name="ERROR_PATH" />»: <ph name="ERROR" /></translation> <translation id="5447330194051379405">نمایش همه صفحههای ذخیره شده</translation> <translation id="5452270690849572955">صفحه <ph name="HOST_NAME" /> پیدا نمیشود</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">مقدار خطمشی</translation> <translation id="6757797048963528358">دستگاهتان به خواب رفته است.</translation> <translation id="6781404225664080496">درخواستهای ارسالی به این نشانی وب موقتاً متوقف شدهاند.</translation> -<translation id="6800914069727136216">در بسته محتوا</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">صفحهٔ وب موجود در <ph name="URL" /> در حال حاضر موجود نیست. ممکن است بیش از حد مشغول باشد یا برای انجام تعمیرات در دسترس نباشد.</translation> <translation id="6831043979455480757">ترجمه</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">تمام</translation> <translation id="8738058698779197622">به منظور برقراری یک اتصال امن، لازم است که ساعت شما به درستی تنظیم شود. زیرا گواهینامههایی که وبسایتها برای شناسایی خودشان استفاده میکنند تنها برای دورههای زمانی خاصی معتبر هستند. از آنجایی که ساعت دستگاه نادرست است، Chromium نمیتواند این گواهینامهها را تأیید کند.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" />’s <abbr id="dnsDefinition">آدرس DNS</abbr> پیدا نشد. درحال بررسی برای تشخیص مشکل.</translation> +<translation id="8741995161408053644">ممکن است حساب Google شما اشکال سابقه مرور دیگری در <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> داشته باشد.</translation> <translation id="8790007591277257123">&انجام مجدد حذف</translation> <translation id="8798099450830957504">پیشفرض</translation> <translation id="8804164990146287819">خطمشی رازداری</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index f0b54c3..3470e76f 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Väärä entiteettitunnus</translation> <translation id="1232569758102978740">Nimetön</translation> <translation id="1254117744268754948">Valitse kansio</translation> -<translation id="1270699273812232624">Salli kohteet</translation> <translation id="1285320974508926690">Älä käännä tätä sivustoa</translation> <translation id="129553762522093515">Hiljattain suljetut välilehdet</translation> <translation id="1339601241726513588">Käyttöönoton verkkotunnus:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Suodatus</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> ei hyväksynyt kirjautumisvarmennettasi, tai kirjautumisvarmenteesi on voinut vanhentua.</translation> <translation id="194030505837763158">Siirry osoitteeseen <ph name="LINK" /></translation> -<translation id="1958820272620550857">Estä kohteet</translation> <translation id="1962204205936693436">Verkkotunnuksen <ph name="DOMAIN" /> kirjanmerkit</translation> <translation id="1973335181906896915">Sarjaesittämisen virhe</translation> <translation id="1974060860693918893">Lisäasetukset</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">Laitteen tunnus:</translation> <translation id="3109728660330352905">Sinulla ei ole oikeutta tarkastella tätä sivua.</translation> <translation id="3118046075435288765">Palvelin katkaisi yhteyden.</translation> -<translation id="31454997771848827">Ryhmittele verkkotunnukset</translation> <translation id="3145945101586104090">Vastauksen purkaminen epäonnistui</translation> <translation id="3147485256806412701">Tämä sivusto käyttää uutta yleistä ylätason verkkotunnusta.</translation> <translation id="3150653042067488994">Tilapäinen palvelinvirhe</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Tämän sivuston varmenne vanhenee vuonna 2016, ja varmenneketju sisältää varmenteen, joka on allekirjoitettu SHA-1:llä.</translation> <translation id="382518646247711829">Jos käytät välityspalvelinta…</translation> <translation id="3828924085048779000">Tunnuslause ei voi olla tyhjä.</translation> +<translation id="3845539888601087042">Näytetään kirjautuneiden laitteiden historia. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation> <translation id="385051799172605136">Edellinen</translation> <translation id="3858027520442213535">Päivitä päivämäärä ja aika</translation> <translation id="3884278016824448484">Ristiriitainen laitteen tunnus</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Virheellinen allekirjoitus</translation> <translation id="4268298190799576220">Chromium ei voinut vahvistaa korttiasi. Yritä myöhemmin uudelleen.</translation> <translation id="4269787794583293679">(Ei käyttäjänimeä)</translation> -<translation id="4278390842282768270">Sallittu</translation> <translation id="4300246636397505754">Ylätason ehdotukset</translation> <translation id="4304224509867189079">Kirjaudu sisään</translation> <translation id="4325863107915753736">Artikkelia ei löydy</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Poista selaustiedot...</translation> <translation id="5430298929874300616">Poista kirjanmerkki</translation> <translation id="5431657950005405462">Tiedostoasi ei löydy</translation> +<translation id="5435775191620395718">Näytetään tämän laitteen historia. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Mallin todennusvirhe kohdassa <ph name="ERROR_PATH" />: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Näytä kaikki tallennetut sivut</translation> <translation id="5452270690849572955">Tätä sivuston <ph name="HOST_NAME" /> sivua ei löydy.</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Käytännön arvo</translation> <translation id="6757797048963528358">Laitteesi siirtyi virransäästötilaan.</translation> <translation id="6781404225664080496">Tämän URL-osoitteen pyyntöjä rajoitetaan tilapäisesti.</translation> -<translation id="6800914069727136216">Sisältöpaketissa</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Verkkosivusto osoitteessa <ph name="URL" /> ei ole juuri nyt käytettävissä. Se saattaa olla ylikuormitettu tai suljettuna ylläpitotoimien vuoksi.</translation> <translation id="6831043979455480757">Käännä</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">Valmis</translation> <translation id="8738058698779197622">Kellosi täytyy asettaa oikeaan aikaan, jotta salattu yhteys voidaan muodostaa. Tämä johtuu siitä, että verkkosivustojen tunnistamisessa käytettävät varmenteet ovat voimassa vain tiettyinä ajanjaksoina. Chromium ei voi vahvistaa varmenteita, koska laitteesi kello on väärässä ajassa.</translation> <translation id="8740359287975076522">Sivuston <ph name="HOST_NAME" /> <abbr id="dnsDefinition">DNS-osoitetta</abbr> ei löydy. Ongelmaa diagnosoidaan.</translation> +<translation id="8741995161408053644">Google-tililläsi voi olla muita selaushistoriatietoja osoitteessa <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Toista poisto</translation> <translation id="8798099450830957504">Oletus</translation> <translation id="8804164990146287819">Tietosuojakäytäntö</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 849d4d0..6a147912 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Maling tagatukoy ng entity</translation> <translation id="1232569758102978740">Walang pamagat</translation> <translation id="1254117744268754948">Pumili ng Folder</translation> -<translation id="1270699273812232624">Payagan ang mga item</translation> <translation id="1285320974508926690">Huwag isalin kailanman ang site na ito</translation> <translation id="129553762522093515">Kamakailang isinara</translation> <translation id="1339601241726513588">Domain ng pagpapatala:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Pagfi-filter</translation> <translation id="1911837502049945214">Hindi tinanggap ng <ph name="HOST_NAME" /> ang iyong certificate sa pag-log in, o maaaring nag-expire na ang iyong certificate sa pag-log in.</translation> <translation id="194030505837763158">Pumunta sa <ph name="LINK" /></translation> -<translation id="1958820272620550857">I-block ang mga item</translation> <translation id="1962204205936693436">Mga Bookmark ng <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Error sa serialization</translation> <translation id="1974060860693918893">Advanced</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Asset ID:</translation> <translation id="3109728660330352905">Wala kang pahintulot na tingnan ang page na ito.</translation> <translation id="3118046075435288765">Hindi inaasahang masara ng server ang koneksyon.</translation> -<translation id="31454997771848827">Pagpangkatin ang mga domain</translation> <translation id="3145945101586104090">Nabigong i-decode ang tugon</translation> <translation id="3147485256806412701">Gumagamit ang site na ito ng isang bagong generic top-level na domain.</translation> <translation id="3150653042067488994">Pansamantalang error sa server</translation> @@ -326,7 +323,6 @@ <translation id="4258748452823770588">Maling lagda</translation> <translation id="4268298190799576220">Hindi na-verify ng Chromium ang iyong card sa pagkakataong ito. Pakisubukang muli sa ibang pagkakataon.</translation> <translation id="4269787794583293679">(Walang username)</translation> -<translation id="4278390842282768270">Pinapayagan</translation> <translation id="4300246636397505754">Mga suhestyon ng magulang</translation> <translation id="4304224509867189079">Mag-log In</translation> <translation id="4325863107915753736">Hindi nahanap ang artikulo</translation> @@ -524,7 +520,6 @@ <translation id="6753269504797312559">Halaga ng patakaran</translation> <translation id="6757797048963528358">Nag-sleep ang iyong device.</translation> <translation id="6781404225664080496">Pansamantalang pinipigilan ang mga kahilingan sa URL na ito.</translation> -<translation id="6800914069727136216">Sa pack ng nilalaman</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Kasalukuyang hindi available ang webpage sa <ph name="URL" />. Maaaring overloaded ito o hindi pinagana para sa maintenance.</translation> <translation id="6831043979455480757">Isalin</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb index ccd8ec6..23f966b 100644 --- a/components/strings/components_strings_fr.xtb +++ b/components/strings/components_strings_fr.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Identifiant d'entité incorrect.</translation> <translation id="1232569758102978740">Sans titre</translation> <translation id="1254117744268754948">Sélectionner un dossier</translation> -<translation id="1270699273812232624">Autoriser les éléments</translation> <translation id="1285320974508926690">Ne jamais traduire ce site</translation> <translation id="129553762522093515">Récemment fermés</translation> <translation id="1339601241726513588">Domaine d'enregistrement :</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrage</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> n'a pas accepté votre certificat de connexion, ou ce dernier a peut-être expiré.</translation> <translation id="194030505837763158">Accédez à <ph name="LINK" /></translation> -<translation id="1958820272620550857">Bloquer des éléments</translation> <translation id="1962204205936693436">Favoris du domaine <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Erreur de sérialisation.</translation> <translation id="1974060860693918893">Paramètres avancés</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID d'élément :</translation> <translation id="3109728660330352905">Vous n'êtes pas autorisé à consulter cette page.</translation> <translation id="3118046075435288765">Le serveur a mis fin à la connexion de manière inattendue.</translation> -<translation id="31454997771848827">Regrouper les domaines</translation> <translation id="3145945101586104090">Échec du décodage de la réponse.</translation> <translation id="3147485256806412701">Ce site utilise un nouveau domaine générique de premier niveau.</translation> <translation id="3150653042067488994">Erreur temporaire du serveur.</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Le certificat de ce site arrive à expiration en 2016, et la chaîne de certificats contient un certificat signé avec SHA-1.</translation> <translation id="382518646247711829">Si vous utilisez un serveur proxy…</translation> <translation id="3828924085048779000">La phrase secrète est obligatoire.</translation> +<translation id="3845539888601087042">Affichage de l'historique des appareils auxquels vous êtes connecté. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="385051799172605136">Retour</translation> <translation id="3858027520442213535">Mettre à jour la date et l'heure</translation> <translation id="3884278016824448484">Identifiant de l'appareil en conflit.</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Signature incorrecte.</translation> <translation id="4268298190799576220">Impossible de valider votre carte dans Chromium pour le moment. Veuillez réessayer ultérieurement.</translation> <translation id="4269787794583293679">(aucun nom d'utilisateur)</translation> -<translation id="4278390842282768270">Autorisé</translation> <translation id="4300246636397505754">Suggestions des parents</translation> <translation id="4304224509867189079">Se connecter</translation> <translation id="4325863107915753736">Échec de la recherche de l'article.</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Effacer les données de navigation...</translation> <translation id="5430298929874300616">Supprimer le favori</translation> <translation id="5431657950005405462">Votre fichier est introuvable</translation> +<translation id="5435775191620395718">Affichage de l'historique de cet appareil. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Erreur de validation du schéma au niveau de "<ph name="ERROR_PATH" />" : <ph name="ERROR" /></translation> <translation id="5447330194051379405">Afficher toutes les pages enregistrées</translation> <translation id="5452270690849572955">Cette page du site <ph name="HOST_NAME" /> est introuvable</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Valeur de la règle</translation> <translation id="6757797048963528358">Votre appareil s'est mis en veille.</translation> <translation id="6781404225664080496">Les requêtes à cette URL ont été temporairement suspendues.</translation> -<translation id="6800914069727136216">Dans le pack de contenu</translation> <translation id="6820686453637990663">Cryptogramme</translation> <translation id="6830600606572693159">La page Web <ph name="URL" /> n'est pas disponible pour le moment. Cela peut être dû à une surcharge ou à une opération de maintenance.</translation> <translation id="6831043979455480757">Traduire</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">OK</translation> <translation id="8738058698779197622">Afin d'établir une connexion sécurisée, votre horloge doit être réglée correctement. Les certificats permettant aux sites Web de s'identifier sont en effet valides pendant une période précise. Si l'horloge de votre appareil est incorrecte, Chromium n'est pas en mesure de vérifier la validité des certificats.</translation> <translation id="8740359287975076522">L'<abbr id="dnsDefinition">adresse DNS</abbr> de <ph name="HOST_NAME" /> est introuvable. Identification du problème…</translation> +<translation id="8741995161408053644">Votre compte Google conserve peut- être d'autres formes d'historique de navigation sur la page <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Rétablir la suppression</translation> <translation id="8798099450830957504">Par défaut</translation> <translation id="8804164990146287819">Règles de confidentialité</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 09bf636..44825a14 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">ખોટો અસ્તિત્વ ઓળખકર્તા</translation> <translation id="1232569758102978740">શીર્ષક વિનાનું</translation> <translation id="1254117744268754948">ફોલ્ડર પસંદ કરો</translation> -<translation id="1270699273812232624">આઇટમ્સને મંજૂરી આપો</translation> <translation id="1285320974508926690">આ સાઇટનું ક્યારેય ભાષાંતર કરશો નહીં</translation> <translation id="129553762522093515">તાજેતરમાં બંધ કરેલા</translation> <translation id="1339601241726513588">નોંધણી ડોમેન:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">ફિલ્ટરિંગ</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> એ તમારું લોગિન પ્રમાણપત્ર સ્વીકાર્યું ન હતું અથવા કદાચ તમારા લોગિન પ્રમાણપત્રની સમયસીમા સમાપ્ત થઈ ગઈ છે.</translation> <translation id="194030505837763158"><ph name="LINK" /> પર જાઓ</translation> -<translation id="1958820272620550857">આઇટમ્સને અવરોધિત કરો</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> બુકમાર્ક્સ</translation> <translation id="1973335181906896915">અનુક્રમાંકન ભૂલ</translation> <translation id="1974060860693918893">વિગતવાર</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">સંપત્તિ ID:</translation> <translation id="3109728660330352905">તમને આ પૃષ્ઠને જોવાની અધિકૃતિ નથી.</translation> <translation id="3118046075435288765">સર્વરે અણધારી રીતે કનેક્શન બંધ કર્યું છે.</translation> -<translation id="31454997771848827">જૂથ ડોમેન્સ</translation> <translation id="3145945101586104090">પ્રતિક્રિયા ડિકોડ કરવી નિષ્ફળ થઇ</translation> <translation id="3147485256806412701">આ સાઇટ જેનરિક શીર્ષ-સ્તરના ડોમેનનો ઉપયોગ કરે છે.</translation> <translation id="3150653042067488994">અસ્થાયી સર્વર ભૂલ</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">આ સાઇટ માટેનું પ્રમાણપત્ર 2016 માં સમાપ્ત થાય છે અને પ્રમાણપત્ર શ્રૃંખલા SHA-1 નો ઉપયોગ કરીને સહી કરેલ પ્રમાણપત્ર ધરાવે છે.</translation> <translation id="382518646247711829">જો તમે કોઈ પ્રોક્સી સર્વરનો ઉપયોગ કરો છો...</translation> <translation id="3828924085048779000">ખાલી પાસફ્રેઝને અનુમતિ નથી. </translation> +<translation id="3845539888601087042">તમે સાઇન ઇન થયેલા હોય તેવા ઉપકરણોમાંથી ઇતિહાસ બતાવી રહ્યાં છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" />.</translation> <translation id="385051799172605136">પાછળ</translation> <translation id="3858027520442213535">તારીખ અને સમય અપડેટ કરો</translation> <translation id="3884278016824448484">વિરોધાભાસી ઉપકરણ ઓળખકર્તા</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">ખરાબ હસ્તાક્ષર</translation> <translation id="4268298190799576220">આ સમયે Chromium તમારું કાર્ડ ચકાસવા અસમર્થ હતું. કૃપા કરીને પછી ફરીથી પ્રયત્ન કરશો.</translation> <translation id="4269787794583293679">(કોઇ વપરાશકર્તાનામ નથી)</translation> -<translation id="4278390842282768270">મંજૂર</translation> <translation id="4300246636397505754">પેરેન્ટ સૂચનો</translation> <translation id="4304224509867189079">લૉગ ઇન કરો</translation> <translation id="4325863107915753736">લેખ શોધવામાં નિષ્ફળ થયાં</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">બ્રાઉઝિંગ ડેટા સાફ કરો...</translation> <translation id="5430298929874300616">બુકમાર્ક દૂર કરો</translation> <translation id="5431657950005405462">તમારી ફાઇલ મળી ન હતી</translation> +<translation id="5435775191620395718">આ ઉપકરણમાંથી ઇતિહાસ બતાવી રહ્યાં છે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" પર સ્કીમા માન્યતા ભૂલ: <ph name="ERROR" /></translation> <translation id="5447330194051379405">બધા સાચવેલા પૃષ્ઠો બતાવો</translation> <translation id="5452270690849572955">આ <ph name="HOST_NAME" /> પૃષ્ઠ શોધી શકાતું નથી</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">નીતિ મૂલ્ય</translation> <translation id="6757797048963528358">તમારું ઉપકરણ નિષ્ક્રિય થઈ ગયું હતું.</translation> <translation id="6781404225664080496">આ URL ને કરાયેલ વિનંતીઓને અસ્થાયી રૂપે નિયંત્રિત કરવામાં આવી છે.</translation> -<translation id="6800914069727136216">સામગ્રી પેકમાં</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> પરનું વેબપૃષ્ઠ હાલમાં અનુપલબ્ધ છે. તે કદાચ ઑવરલોડ થઈ ગયું છે અથવા જાળવણી કાર્ય માટે બંધ કરેલું છે.</translation> <translation id="6831043979455480757">અનુવાદ કરો</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">થઈ ગયું</translation> <translation id="8738058698779197622">એક સુરક્ષિત કનેક્શન સ્થાપિત કરવા માટે, તમારું ઘડિયાળ યોગ્ય રીતે સેટ હોવું જરૂરી છે. આનું કારણ એ કે વેબસાઇટ્સ તેઓને ઓળખવા માટે જે પ્રમાણપત્રોનો ઉપયોગ કરે છે તે ચોક્કસ સમય અવધિ માટે જ માન્ય હોય છે. તમારા ઉપકરણની ઘડિયાળ ખોટી હોવાને લીધે, Chromium આ પ્રમાણપત્રોને ચકાસી શકતું નથી.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> નું <abbr id="dnsDefinition">DNS સરનામું</abbr> શોધી શકાયું નથી. સમસ્યાનું નિદાન કરી રહ્યાં છીએ.</translation> +<translation id="8741995161408053644">તમારા Google એકાઉન્ટમાં <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> પર બ્રાઉઝિંગ ઇતિહાસના અન્ય સ્વરૂપો હોઇ શકે છે.</translation> <translation id="8790007591277257123">&કાઢી નાખવું ફરી કરો</translation> <translation id="8798099450830957504">ડિફૉલ્ટ</translation> <translation id="8804164990146287819">ગોપનીયતા નીતિ</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb index 137124b9..5156aebb 100644 --- a/components/strings/components_strings_hi.xtb +++ b/components/strings/components_strings_hi.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">गलत इकाई पहचानकर्ता</translation> <translation id="1232569758102978740">शीर्षक रहित</translation> <translation id="1254117744268754948">फ़ोल्डर चुनें</translation> -<translation id="1270699273812232624">आइटम की अनुमति दें</translation> <translation id="1285320974508926690">कभी भी इस साइट का अनुवाद न करें</translation> <translation id="129553762522093515">हाल ही में बंद किए गए</translation> <translation id="1339601241726513588">नामांकन डोमेन:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">फ़िल्टर किया जा रहा है</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> ने आपका लॉगिन प्रमाणपत्र स्वीकार नहीं किया या हो सकता है कि आपके लॉगिन प्रमाणपत्र की समय सीमा समाप्त हो गई हो.</translation> <translation id="194030505837763158"><ph name="LINK" /> पर जाएं</translation> -<translation id="1958820272620550857">आइटम अवरूद्ध करें</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> बुकमार्क</translation> <translation id="1973335181906896915">क्रमबद्ध करने में त्रुटि</translation> <translation id="1974060860693918893">उन्नत</translation> @@ -208,7 +206,6 @@ <translation id="3105172416063519923">एसेट आईडी:</translation> <translation id="3109728660330352905">आपके पास इस पृष्ठ को देखने के लिए प्राधिकरण नहीं है.</translation> <translation id="3118046075435288765">सर्वर ने अनपेक्षित रूप से कनेक्शन बंद कर दिया है.</translation> -<translation id="31454997771848827">समूह डोमेन</translation> <translation id="3145945101586104090">उत्तर डीकोड करने में विफल</translation> <translation id="3147485256806412701">यह साइट एक नए जेनेरिक शीर्ष-स्तरीय डोमेन का उपयोग कर रही है.</translation> <translation id="3150653042067488994">अस्थायी सर्वर त्रुटि</translation> @@ -288,6 +285,7 @@ <translation id="3788090790273268753">इस साइट के लिए प्रमाणपत्र की समय-सीमा 2016 में समाप्त होगी और प्रमाणपत्र की श्रृंखला में, SHA-1 का उपयोग करके हस्ताक्षर किया गया प्रमाणपत्र शामिल है.</translation> <translation id="382518646247711829">यदि आप प्रॉक्सी सर्वर का उपयोग करते हैं...</translation> <translation id="3828924085048779000">खाली पासफ़्रेज़ की अनुमति नहीं है.</translation> +<translation id="3845539888601087042">आपके प्रवेश किए गए डिवाइस का इतिहास दिखाया जा रहा है. <ph name="BEGIN_LINK" />अधिक जानें<ph name="END_LINK" />.</translation> <translation id="385051799172605136">वापस</translation> <translation id="3858027520442213535">दिनांक और समय अपडेट करें</translation> <translation id="3884278016824448484">विरोधाभासी डिवाइस पहचानकर्ता</translation> @@ -323,7 +321,6 @@ <translation id="4258748452823770588">खराब हस्ताक्षर</translation> <translation id="4268298190799576220">क्रोमियम इस समय आपका कार्ड सत्यापित नहीं कर सका. कृपया बाद में पुन: प्रयास करें.</translation> <translation id="4269787794583293679">(कोई उपयोगकर्ता नाम नहीं)</translation> -<translation id="4278390842282768270">अनुमति है</translation> <translation id="4300246636397505754">अभिभावक सुझाव</translation> <translation id="4304224509867189079">प्रवेश करें</translation> <translation id="4325863107915753736">लेख ढूंढ़ने में विफल</translation> @@ -408,6 +405,7 @@ <translation id="5421136146218899937">ब्राउज़िंग डेटा साफ़ करें...</translation> <translation id="5430298929874300616">बुकमार्क निकालें</translation> <translation id="5431657950005405462">आपकी फ़ाइल नहीं मिली</translation> +<translation id="5435775191620395718">इस डिवाइस का इतिहास दिखाया जा रहा है. <ph name="BEGIN_LINK" />अधिक जानें<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" पर स्कीमा सत्यापन त्रुटि: <ph name="ERROR" /></translation> <translation id="5447330194051379405">सभी सहेजे गए पृष्ठ दिखाएं</translation> <translation id="5452270690849572955">यह <ph name="HOST_NAME" /> पृष्ठ प्राप्त नहीं किया जा सकता</translation> @@ -520,7 +518,6 @@ <translation id="6753269504797312559">नीति मान</translation> <translation id="6757797048963528358">आपका डिवाइस निष्क्रिय हो गया है.</translation> <translation id="6781404225664080496">इस URL के अनुरोधों को अस्थायी रूप से रोक दिया गया है.</translation> -<translation id="6800914069727136216">सामग्री पैक में</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> पर वेबपृष्ठ वर्तमान में अनुपलब्ध है. संभवतः यह ओवरलोड हो गया है या रखरखाव के लिए बंद कर दिया है.</translation> <translation id="6831043979455480757">अनुवाद करें</translation> @@ -693,6 +690,7 @@ <translation id="8730621377337864115">पूर्ण</translation> <translation id="8738058698779197622">सुरक्षित कनेक्शन स्थापित करने के लिए, आपकी घड़ी को ठीक से सेट किए जाने की आवश्यकता है. ऐसा इसलिए क्योंकि वेबसाइटों द्वारा स्वयं की पहचान करने के लिए उपयोग किए जाने वाले प्रमाण पत्र केवल विशिष्ट समयावधियों के लिए ही मान्य होते हैं. चूंकि आपके डिवाइस की घड़ी गलत है, इसलिए क्रोमियम इन प्रमाणपत्रों को सत्यापित नहीं कर सकता.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> का <abbr id="dnsDefinition">DNS पता</abbr> प्राप्त नहीं किया जा सका. समस्या का निदान किया जा रहा है.</translation> +<translation id="8741995161408053644">आपके Google खाते में <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> पर ब्राउज़िंग इतिहास के अन्य प्रकार हो सकते हैं.</translation> <translation id="8790007591277257123">&हटाना फिर से करें</translation> <translation id="8798099450830957504">सामान्य</translation> <translation id="8804164990146287819">गोपनीयता नीति</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index 9b96206..601445d 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Pogrešan identifikator entiteta</translation> <translation id="1232569758102978740">Neimenovano</translation> <translation id="1254117744268754948">Odabir mape</translation> -<translation id="1270699273812232624">Dopusti stavke</translation> <translation id="1285320974508926690">Nikad nemoj prevoditi ovu web-lokaciju</translation> <translation id="129553762522093515">Nedavno zatvoreno</translation> <translation id="1339601241726513588">Domena upisa:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtriranje</translation> <translation id="1911837502049945214">Host <ph name="HOST_NAME" /> nije prihvatio certifikat za prijavu ili je certifikat za prijavu možda istekao.</translation> <translation id="194030505837763158">Posjetite <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokirane stavke</translation> <translation id="1962204205936693436">Oznake s domene <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Pogreška postavljanja u seriju</translation> <translation id="1974060860693918893">Napredno</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID uređaja:</translation> <translation id="3109728660330352905">Nemate ovlaštenje za prikaz te stranice.</translation> <translation id="3118046075435288765">Poslužitelj je neočekivano prekinuo vezu.</translation> -<translation id="31454997771848827">Domene grupe</translation> <translation id="3145945101586104090">Dekodiranje odgovora nije uspjelo</translation> <translation id="3147485256806412701">Ta web-lokacija upotrebljava novu generičku vršnu domenu.</translation> <translation id="3150653042067488994">Privremena pogreška poslužitelja</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">Certifikat za ovu web-lokaciju istječe 2016., a lanac certifikata sadrži certifikat s SHA-1 potpisom.</translation> <translation id="382518646247711829">Ako upotrebljavate proxy poslužitelj...</translation> <translation id="3828924085048779000">Prazne zaporke nisu dopuštene.</translation> +<translation id="3845539888601087042">Prikazuje se povijest s uređaja na kojima se prijavljujete. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Natrag</translation> <translation id="3858027520442213535">Ažuriraj datum i vrijeme</translation> <translation id="3884278016824448484">Identifikator uređaja sukobljen je</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">Potpis nije valjan</translation> <translation id="4268298190799576220">Chromium nije uspio potvrditi vašu karticu u ovom trenutku. Pokušajte ponovo kasnije.</translation> <translation id="4269787794583293679">(Nema korisničkog imena)</translation> -<translation id="4278390842282768270">Dopušteno</translation> <translation id="4300246636397505754">Nadređeni prijedlozi</translation> <translation id="4304224509867189079">Prijavi se</translation> <translation id="4325863107915753736">Članak nije pronađen</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">Obriši podatke pregledavanja...</translation> <translation id="5430298929874300616">Ukloni oznaku</translation> <translation id="5431657950005405462">Datoteka nije pronađena</translation> +<translation id="5435775191620395718">Prikazuje se povijest s ovog uređaja. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Pogreška provjere sheme na lokaciji "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Prikaži sve spremljene stranice</translation> <translation id="5452270690849572955">Tu stranicu na <ph name="HOST_NAME" /> nije moguće pronaći</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">Vrijednost pravila</translation> <translation id="6757797048963528358">Uređaj je u stanju mirovanja.</translation> <translation id="6781404225664080496">Zahtjevi za taj URL privremeno su ograničeni.</translation> -<translation id="6800914069727136216">U paketu sadržaja</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Web-stranica na <ph name="URL" /> trenutno nije dostupna. Možda je preopterećena ili isključena zbog održavanja.</translation> <translation id="6831043979455480757">Prevedi</translation> @@ -697,6 +694,7 @@ <translation id="8730621377337864115">Gotovo</translation> <translation id="8738058698779197622">Za uspostavu sigurne veze sat mora biti točno postavljen. To je zato što certifikati koje web-lokacije upotrebljavaju za međusobnu identifikaciju vrijede samo određeno vrijeme. Budući da sat na vašem uređaju nije točan, Chromium ne može potvrditi te certifikate.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">DNS adresa</abbr> hosta <ph name="HOST_NAME" /> nije pronađena. U tijeku je dijagnosticiranje problema.</translation> +<translation id="8741995161408053644">Na Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Ponovi brisanje</translation> <translation id="8798099450830957504">Zadano</translation> <translation id="8804164990146287819">Pravila o privatnosti</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index 95480928..af1233a 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Helytelen entitásazonosító</translation> <translation id="1232569758102978740">Névtelen</translation> <translation id="1254117744268754948">Mappa kiválasztása</translation> -<translation id="1270699273812232624">Elemek engedélyezése</translation> <translation id="1285320974508926690">Ezt a webhelyet soha ne fordítsa le</translation> <translation id="129553762522093515">Mostanában bezárt</translation> <translation id="1339601241726513588">Regisztrációs domain:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Szűrés</translation> <translation id="1911837502049945214">A(z) <ph name="HOST_NAME" /> nem fogadta el az Ön bejelentkezési tanúsítványát, vagy a bejelentkezési tanúsítvány lejárt.</translation> <translation id="194030505837763158">Ugrás ide: <ph name="LINK" /></translation> -<translation id="1958820272620550857">Elemek letiltása</translation> <translation id="1962204205936693436">A(z) <ph name="DOMAIN" /> könyvjelzői</translation> <translation id="1973335181906896915">Szerializálási hiba</translation> <translation id="1974060860693918893">Speciális</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Tartalomazonosító:</translation> <translation id="3109728660330352905">Nincs jogosultsága az oldal megjelenítésére.</translation> <translation id="3118046075435288765">A szerver váratlanul megszakította a kapcsolatot.</translation> -<translation id="31454997771848827">Domainek csoportosítása</translation> <translation id="3145945101586104090">Nem sikerült dekódolni a választ</translation> <translation id="3147485256806412701">Ez a webhely új, általános felső szintű domaint használ.</translation> <translation id="3150653042067488994">Átmeneti szerverhiba</translation> @@ -288,6 +285,7 @@ <translation id="3788090790273268753">A webhely tanúsítványa 2016-ban jár le, a tanúsítványlánc pedig tartalmaz egy SHA-1 titkosítással aláírt tanúsítványt.</translation> <translation id="382518646247711829">Ha proxyszervert használ...</translation> <translation id="3828924085048779000">Az üres összetett jelszó nem engedélyezett.</translation> +<translation id="3845539888601087042">Előzmények megjelenítése bejelentkezett eszközeiről. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Vissza</translation> <translation id="3858027520442213535">Dátum és idő frissítése</translation> <translation id="3884278016824448484">Eszközazonosító-ütközés</translation> @@ -323,7 +321,6 @@ <translation id="4258748452823770588">Rossz aláírás</translation> <translation id="4268298190799576220">A Chromium ez alkalommal nem tudta azonosítani kártyáját. Próbálja újra később.</translation> <translation id="4269787794583293679">(Nincs felhasználónév)</translation> -<translation id="4278390842282768270">Engedélyezve</translation> <translation id="4300246636397505754">Szülői javaslatok</translation> <translation id="4304224509867189079">Bejelentkezés</translation> <translation id="4325863107915753736">Nem sikerült megtalálni a cikket</translation> @@ -408,6 +405,7 @@ <translation id="5421136146218899937">Böngészési adatok törlése...</translation> <translation id="5430298929874300616">Könyvjelző törlése</translation> <translation id="5431657950005405462">A fájl nem található</translation> +<translation id="5435775191620395718">Előzmények megjelenítése erről az eszközről. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Sémaérvényesítési hiba a következőnél: „<ph name="ERROR_PATH" />”: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Az összes mentett oldal megjelenítése</translation> <translation id="5452270690849572955">Ez a(z) <ph name="HOST_NAME" /> oldal nem található</translation> @@ -519,7 +517,6 @@ <translation id="6753269504797312559">Házirend értéke</translation> <translation id="6757797048963528358">Eszköze alvó üzemmódba váltott.</translation> <translation id="6781404225664080496">Az erre az URL-re irányuló kérések átmenetileg korlátozva vannak.</translation> -<translation id="6800914069727136216">Tartalomcsomagban</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">A(z) <ph name="URL" /> helyen lévő weboldal pillanatnyilag nem érhető el. Lehetséges, hogy túlterhelt, vagy karbantartás miatt nem működik.</translation> <translation id="6831043979455480757">Fordítás</translation> @@ -695,6 +692,7 @@ <translation id="8730621377337864115">Kész</translation> <translation id="8738058698779197622">Biztonságos kapcsolat létrehozásához az órát pontosan be kell állítani. Ez azért szükséges, mert a webhelyek által az azonosításukra használt tanúsítványok csak adott ideig érvényesek. Mivel az eszköz órája nem pontos, a Chromium nem tudja ellenőrizni ezeket a tanúsítványokat.</translation> <translation id="8740359287975076522">A(z) <ph name="HOST_NAME" /> <abbr id="dnsDefinition">DNS-címe</abbr> nem található. A probléma diagnosztizálása folyamatban van.</translation> +<translation id="8741995161408053644">Előfordulhat, hogy a böngészési előzmények más formái még megtalálhatók Google-fiókjában a <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> címen.</translation> <translation id="8790007591277257123">&Törlés újra</translation> <translation id="8798099450830957504">Alapértelmezett</translation> <translation id="8804164990146287819">Adatvédelmi irányelvek</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 720db84..55e039f 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Pengidentifikasi entitas salah</translation> <translation id="1232569758102978740">Tanpa Judul</translation> <translation id="1254117744268754948">Pilih Folder</translation> -<translation id="1270699273812232624">Izinkan item</translation> <translation id="1285320974508926690">Jangan pernah terjemahkan situs ini</translation> <translation id="129553762522093515">Barusan ditutup</translation> <translation id="1339601241726513588">Domain pendaftaran:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Pemfilteran</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> tidak menerima sertifikat masuk Anda, atau sertifikat masuk mungkin telah habis masa berlakunya.</translation> <translation id="194030505837763158">Buka <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokir item</translation> <translation id="1962204205936693436">Bookmark <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Kesalahan serialisasi</translation> <translation id="1974060860693918893">Lanjutan</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID Aset:</translation> <translation id="3109728660330352905">Anda tidak memiliki otorisasi untuk melihat laman ini.</translation> <translation id="3118046075435288765">Server tiba-tiba memutuskan sambungan.</translation> -<translation id="31454997771848827">Domain grup</translation> <translation id="3145945101586104090">Gagal mendekodekan tanggapan</translation> <translation id="3147485256806412701">Situs ini menggunakan domain tingkat atas generik baru.</translation> <translation id="3150653042067488994">Kesalahan server sementara</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Sertifikat untuk situs ini berakhir masa berlakunya pada tahun 2016, dan rantai sertifikat tersebut berisi sertifikat yang ditandatangani menggunakan SHA-1.</translation> <translation id="382518646247711829">Jika Anda menggunakan server proxy...</translation> <translation id="3828924085048779000">Frasa sandi kosong tidak dibolehkan.</translation> +<translation id="3845539888601087042">Menampilkan riwayat dari perangkat yang Anda gunakan untuk masuk. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Mundur</translation> <translation id="3858027520442213535">Perbarui tanggal dan waktu</translation> <translation id="3884278016824448484">Pengenal perangkat bertentangan</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Tanda tangan salah</translation> <translation id="4268298190799576220">Saat ini Chromium tidak dapat memverifikasi kartu. Coba lagi nanti.</translation> <translation id="4269787794583293679">(Tidak ada nama pengguna)</translation> -<translation id="4278390842282768270">Diizinkan</translation> <translation id="4300246636397505754">Saran induk</translation> <translation id="4304224509867189079">Log In</translation> <translation id="4325863107915753736">Gagal menemukan artikel</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Hapus data penjelajahan...</translation> <translation id="5430298929874300616">Buang bookmark</translation> <translation id="5431657950005405462">File Anda tidak ditemukan</translation> +<translation id="5435775191620395718">Menampilkan riwayat dari perangkat ini. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Kesalahan validasi skema di "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Tampilkan semua laman tersimpan</translation> <translation id="5452270690849572955">Laman <ph name="HOST_NAME" /> ini tidak dapat ditemukan</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Nilai kebijakan</translation> <translation id="6757797048963528358">Perangkat Anda sedang dalam mode tidur.</translation> <translation id="6781404225664080496">Permintaan untuk URL ini telah dihentikan untuk sementara.</translation> -<translation id="6800914069727136216">Dalam paket konten</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Saat ini laman web di <ph name="URL" /> tidak tersedia. Mungkin laman web sedang kelebihan muatan atau terganggu karena ada perawatan.</translation> <translation id="6831043979455480757">Terjemahkan</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Selesai</translation> <translation id="8738058698779197622">Untuk membuat sambungan aman, jam perlu disetel dengan benar. Hal ini karena sertifikat yang digunakan situs web untuk mengidentifikasi situs web tersebut hanya valid untuk jangka waktu tertentu. Karena jam perangkat tidak benar, Chromium tidak dapat memverifikasi sertifikat ini.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">Alamat DNS</abbr> <ph name="HOST_NAME" /> tidak dapat ditemukan. Mendiagnosis masalah.</translation> +<translation id="8741995161408053644">Akun Google Anda mungkin memiliki bentuk riwayat penjelajahan lainnya di <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Ulangi penghapusan</translation> <translation id="8798099450830957504">Default</translation> <translation id="8804164990146287819">Kebijakan Privasi</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb index 69317caf..a8702a0 100644 --- a/components/strings/components_strings_it.xtb +++ b/components/strings/components_strings_it.xtb
@@ -36,7 +36,6 @@ <translation id="1228893227497259893">Identificatore entità errato</translation> <translation id="1232569758102978740">Senza titolo</translation> <translation id="1254117744268754948">Scegli cartella</translation> -<translation id="1270699273812232624">Consenti elementi</translation> <translation id="1285320974508926690">Non tradurre mai questo sito</translation> <translation id="129553762522093515">Chiuse di recente</translation> <translation id="1339601241726513588">Dominio registrazione:</translation> @@ -83,7 +82,6 @@ <translation id="1898423065542865115">Filtri</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> non ha accettato il certificato di accesso oppure il certificato di accesso potrebbe essere scaduto.</translation> <translation id="194030505837763158">Vai al link: <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blocca elementi</translation> <translation id="1962204205936693436">Segnalibri di <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Errore di serializzazione</translation> <translation id="1974060860693918893">Avanzate</translation> @@ -200,7 +198,6 @@ <translation id="3105172416063519923">ID asset:</translation> <translation id="3109728660330352905">Non sei autorizzato a visualizzare questa pagina.</translation> <translation id="3118046075435288765">Il server ha inaspettatamente chiuso la connessione.</translation> -<translation id="31454997771848827">Raggruppa domini</translation> <translation id="3145945101586104090">Decodifica della risposta non riuscita</translation> <translation id="3147485256806412701">Questo sito ha un nuovo dominio di primo livello generico.</translation> <translation id="3150653042067488994">Errore temporaneo del server</translation> @@ -313,7 +310,6 @@ <translation id="4258748452823770588">Firma errata</translation> <translation id="4268298190799576220">Al momento non è possibile verificare la carta in Chromium. Riprova più tardi.</translation> <translation id="4269787794583293679">(Nessun nome utente)</translation> -<translation id="4278390842282768270">Consentiti</translation> <translation id="4300246636397505754">Suggerimenti per i genitori</translation> <translation id="4304224509867189079">Accedi</translation> <translation id="4325863107915753736">Impossibile trovare l'articolo</translation> @@ -508,7 +504,6 @@ <translation id="6753269504797312559">Valore norma</translation> <translation id="6757797048963528358">Il dispositivo è entrato in modalità sospensione.</translation> <translation id="6781404225664080496">Le richieste verso questo URL sono state temporaneamente bloccate.</translation> -<translation id="6800914069727136216">Nel pacchetto di contenuti</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">La pagina web all'indirizzo <ph name="URL" /> non è al momento disponibile. Potrebbe essere sovraccarica o non disponibile per manutenzione.</translation> <translation id="6831043979455480757">Traduci</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index e51f309..ec4312d 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -38,7 +38,6 @@ <translation id="1228893227497259893">מזהה יישות שגוי</translation> <translation id="1232569758102978740">ללא שם</translation> <translation id="1254117744268754948">בחר תיקייה</translation> -<translation id="1270699273812232624">אפשר פריטים</translation> <translation id="1285320974508926690">לעולם אל תתרגם אתר זה</translation> <translation id="129553762522093515">נסגרו לאחרונה</translation> <translation id="1339601241726513588">דומיין הרשמה:</translation> @@ -85,7 +84,6 @@ <translation id="1898423065542865115">סינון</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> לא אישר את אישור ההתחברות שלך, או שפג תוקפו של אישור ההתחברות.</translation> <translation id="194030505837763158">עבור ל-<ph name="LINK" /></translation> -<translation id="1958820272620550857">חסום פריטים</translation> <translation id="1962204205936693436">סימניות של <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">שגיאה בעריכה בסידרה</translation> <translation id="1974060860693918893">מתקדם</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">מזהה נכס:</translation> <translation id="3109728660330352905">אין לך הרשאה להציג את הדף הזה.</translation> <translation id="3118046075435288765">השרת סגר את החיבור באופן בלתי צפוי.</translation> -<translation id="31454997771848827">דומיינים קבוצתיים</translation> <translation id="3145945101586104090">פענוח התגובה נכשל</translation> <translation id="3147485256806412701">האתר הזה משתמש בדומיין גנרי חדש ברמה עליונה.</translation> <translation id="3150653042067488994">שגיאת שרת זמנית</translation> @@ -292,6 +289,7 @@ <translation id="3788090790273268753">תוקף האישור של האתר הזה יפוג ב-2016 ושרשרת האישורים מכילה אישור שנחתם באמצעות SHA-1.</translation> <translation id="382518646247711829">אם אתה משתמש בשרת Proxy...</translation> <translation id="3828924085048779000">אין אפשרות להשתמש במשפט-סיסמה ריק.</translation> +<translation id="3845539888601087042">מציג היסטוריה מהמכשירים שבהם אתה מחובר לחשבון. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" />.</translation> <translation id="385051799172605136">חזור</translation> <translation id="3858027520442213535">עדכן את התאריך והשעה</translation> <translation id="3884278016824448484">מזהה מכשיר מתנגש</translation> @@ -327,7 +325,6 @@ <translation id="4258748452823770588">חתימה שגויה</translation> <translation id="4268298190799576220">ל-Chromium אין כרגע אפשרות לאמת את הכרטיס. נסה שוב מאוחר יותר.</translation> <translation id="4269787794583293679">(אין שם משתמש)</translation> -<translation id="4278390842282768270">מותר</translation> <translation id="4300246636397505754">הצעות להורים</translation> <translation id="4304224509867189079">היכנס</translation> <translation id="4325863107915753736">לא ניתן היה למצוא את הפריט</translation> @@ -416,6 +413,7 @@ <translation id="5421136146218899937">נקה נתוני גלישה...</translation> <translation id="5430298929874300616">הסר סימניה</translation> <translation id="5431657950005405462">הקובץ לא נמצא</translation> +<translation id="5435775191620395718">מציג היסטוריה מהמכשיר הזה. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">שגיאת אימות סכימה ב-"<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">הצג את כל הדפים השמורים</translation> <translation id="5452270690849572955">לא ניתן למצוא את הדף של <ph name="HOST_NAME" /></translation> @@ -529,7 +527,6 @@ <translation id="6753269504797312559">ערך מדיניות</translation> <translation id="6757797048963528358">המכשיר עבר למצב שינה.</translation> <translation id="6781404225664080496">שליחת בקשות אל כתובת האתר הזו הופסקה באופן זמני.</translation> -<translation id="6800914069727136216">בחבילת תוכן</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">דף האינטרנט <ph name="URL" /> אינו זמין כעת. ייתכן שהוא בעומס יתר או שהושבת לצורך תחזוקה.</translation> <translation id="6831043979455480757">תרגם</translation> @@ -705,6 +702,7 @@ <translation id="8730621377337864115">בוצע</translation> <translation id="8738058698779197622">כדי ליצור חיבור מאובטח, השעון צריך להיות מוגדר כהלכה. הסיבה לכך היא שהאישורים שבהם אתרים משתמשים כדי לזהות את עצמם תקפים רק למשך פרקי זמן מסוימים. מאחר שהשעון במכשיר שלך שגוי, Chromium לא יכול לאמת את האישורים האלו.</translation> <translation id="8740359287975076522">לא ניתן היה למצוא את <abbr id="dnsDefinition">כתובת ה-DNS</abbr> של <ph name="HOST_NAME" />. מאבחן את הבעיה.</translation> +<translation id="8741995161408053644">ייתכן שתוכל לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google בכתובת <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&ביצוע מחדש של מחיקה</translation> <translation id="8798099450830957504">ברירת מחדל</translation> <translation id="8804164990146287819">מדיניות פרטיות</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 67b1249..ba92ab7 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">エンティティ識別子が正しくありません</translation> <translation id="1232569758102978740">無題</translation> <translation id="1254117744268754948">フォルダの選択</translation> -<translation id="1270699273812232624">アイテムを許可</translation> <translation id="1285320974508926690">このサイトは翻訳しない</translation> <translation id="129553762522093515">最近閉じたタブ</translation> <translation id="1339601241726513588">登録ドメイン:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">フィルタ</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> でログイン証明書が承認されなかった、またはログイン証明書の有効期限が切れている可能性があります。</translation> <translation id="194030505837763158"><ph name="LINK" /> に移動します</translation> -<translation id="1958820272620550857">アイテムをブロック</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> のブックマーク</translation> <translation id="1973335181906896915">シリアル化エラーです</translation> <translation id="1974060860693918893">詳細設定</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">アセット ID:</translation> <translation id="3109728660330352905">このページを表示する権限がありません。</translation> <translation id="3118046075435288765">サーバーが途中で接続を切断しました。</translation> -<translation id="31454997771848827">グループのドメイン</translation> <translation id="3145945101586104090">応答をデコードできませんでした</translation> <translation id="3147485256806412701">このサイトは新しいジェネリック トップレベル ドメインを使用しています。</translation> <translation id="3150653042067488994">一時的なサーバー エラーです</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">このサイトの証明書は 2016 年まで有効で、証明書チェーンには SHA-1 を使って署名された証明書が含まれています。</translation> <translation id="382518646247711829">プロキシ サーバーを使用している場合...</translation> <translation id="3828924085048779000">パスフレーズは必ず指定してください。</translation> +<translation id="3845539888601087042">ログインしている端末の履歴を表示しています。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="385051799172605136">戻る</translation> <translation id="3858027520442213535">日時を更新</translation> <translation id="3884278016824448484">競合するデバイス識別子です</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">署名が不適切です</translation> <translation id="4268298190799576220">現在、Chromium でカードを確認できません。しばらくしてからもう一度お試しください。</translation> <translation id="4269787794583293679">(ユーザー名なし)</translation> -<translation id="4278390842282768270">許可</translation> <translation id="4300246636397505754">保護者からのおすすめ</translation> <translation id="4304224509867189079">ログイン</translation> <translation id="4325863107915753736">記事が見つかりませんでした</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">閲覧履歴データの消去...</translation> <translation id="5430298929874300616">ブックマークを削除</translation> <translation id="5431657950005405462">ファイルが見つかりませんでした</translation> +<translation id="5435775191620395718">この端末の履歴を表示しています。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="5439770059721715174">「<ph name="ERROR_PATH" />」でスキーマ確認エラー: <ph name="ERROR" /></translation> <translation id="5447330194051379405">すべての保存ページを表示</translation> <translation id="5452270690849572955">この <ph name="HOST_NAME" /> ページが見つかりません</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">ポリシーの値</translation> <translation id="6757797048963528358">デバイスがスリープ状態です。</translation> <translation id="6781404225664080496">この URL へのリクエストは一時的に制限されています。</translation> -<translation id="6800914069727136216">コンテンツ パック内</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">ウェブページ(<ph name="URL" />)は現在表示できません。アクセスが集中しているか、メンテナンスのために停止している可能性があります。</translation> <translation id="6831043979455480757">翻訳</translation> @@ -692,6 +689,7 @@ <translation id="8730621377337864115">完了</translation> <translation id="8738058698779197622">安全な接続を確立するには時計が正しく設定されている必要があります。この理由は、本物のウェブサイトであることを示すためにウェブサイトで使用される証明書には、有効期間(発効日時と失効日時)が設定されているためです。デバイスの時計が正しくないため、Chromium ではこれらの証明書を確認できません。</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> の <abbr id="dnsDefinition">DNS アドレス</abbr>が見つかりませんでした。問題を診断しています。</translation> +<translation id="8741995161408053644">Google アカウントでの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> に残ることがあります。</translation> <translation id="8790007591277257123">削除のやり直し(&R)</translation> <translation id="8798099450830957504">既定</translation> <translation id="8804164990146287819">プライバシー ポリシー</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 5b012e77..b5532da 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -38,7 +38,6 @@ <translation id="1228893227497259893">ತಪ್ಪಾದ ಅಸ್ತಿತ್ವದ ಗುರುತು</translation> <translation id="1232569758102978740">ಶೀರ್ಷಿಕೆರಹಿತ</translation> <translation id="1254117744268754948">ಫೋಲ್ಡರ್ ಆರಿಸಿ</translation> -<translation id="1270699273812232624">ಐಟಂಗಳನ್ನು ಅನುಮತಿಸು</translation> <translation id="1285320974508926690">ಈ ಸೈಟ್ ಅನ್ನು ಎಂದಿಗೂ ಭಾಷಾಂತರಿಸದಿರಿ</translation> <translation id="129553762522093515">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಲಾಗಿರುವುದು</translation> <translation id="1339601241726513588">ಡೊಮೇನ್ ದಾಖಲಾತಿ:</translation> @@ -85,7 +84,6 @@ <translation id="1898423065542865115">ಫಿಲ್ಟರಿಂಗ್</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> ನಿಮ್ಮ ಲಾಗಿನ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸ್ವೀಕರಿಸಲಿಲ್ಲ ಅಥವಾ ನಿಮ್ಮ ಲಾಗಿನ್ ಪ್ರಮಾಣಪತ್ರವು ಅವಧಿ ಮೀರಿರಬಹುದು.</translation> <translation id="194030505837763158"><ph name="LINK" /> ಗೆ ಹೋಗಿ</translation> -<translation id="1958820272620550857">ಐಟಂಗಳನ್ನು ನಿರ್ಬಂಧಿಸು</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> ಬುಕ್ಮಾರ್ಕ್ಗಳು</translation> <translation id="1973335181906896915">ಅನುಕ್ರಮಗೊಳಿಸುವಿಕೆಯ ದೋಷ</translation> <translation id="1974060860693918893">ಸುಧಾರಿತ</translation> @@ -206,7 +204,6 @@ <translation id="3105172416063519923">ಸ್ವತ್ತು ID:</translation> <translation id="3109728660330352905">ಈ ಪುಟ ವೀಕ್ಷಿಸುವ ಅಧಿಕಾರ ನಿಮಗಿಲ್ಲ</translation> <translation id="3118046075435288765">ಸಂಪರ್ಕವನ್ನು ಸರ್ವರ್ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಮುಚ್ಚಿದೆ</translation> -<translation id="31454997771848827">ಗುಂಪು ಡೊಮೇನ್ಗಳು</translation> <translation id="3145945101586104090">ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಡೀಕೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ</translation> <translation id="3147485256806412701">ಈ ಸೈಟ್ ಹೊಸ ಸಾರ್ವತ್ರಿಕ ಉನ್ನತ ಮಟ್ಟದ ಡೊಮೇನ್ ಬಳಸುತ್ತಿದೆ.</translation> <translation id="3150653042067488994">ತಾತ್ಕಾಲಿಕ ಸರ್ವರ್ ದೋಷ</translation> @@ -283,6 +280,7 @@ <translation id="3788090790273268753">ಈ ಸೈಟ್ಗೆ ಪ್ರಮಾಣಪತ್ರದ ಅವಧಿಯು 2016 ರಲ್ಲಿ ಮುಕ್ತಾಯಗೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಪ್ರಮಾಣಪತ್ರ ಸರಣಿಯು SHA-1 ಬಳಸಿಕೊಂಡು ಸಹಿ ಮಾಡಲಾದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.</translation> <translation id="382518646247711829">ನೀವು ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್ ಬಳಸಿದರೆ...</translation> <translation id="3828924085048779000">ಖಾಲಿ ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ.</translation> +<translation id="3845539888601087042">ನಿಮ್ಮ ಸೈನ್-ಇನ್ ಮಾಡಿದ ಸಾಧನಗಳಿಂದ ಇತಿಹಾಸವನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" />.</translation> <translation id="385051799172605136">ಹಿಂದೆ</translation> <translation id="3858027520442213535">ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ನವೀಕರಿಸಿ</translation> <translation id="3884278016824448484">ಸಂಘರ್ಷಗೊಳ್ಳುತ್ತಿರುವ ಸಾಧನ ಗುರುತಿಸುವಿಕೆ</translation> @@ -318,7 +316,6 @@ <translation id="4258748452823770588">ತಪ್ಪಾದ ಸಹಿ</translation> <translation id="4268298190799576220">ಈ ಸಮಯದಲ್ಲಿ Chromium ಗೆ ನಿಮ್ಮ ಕಾರ್ಡ್ ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="4269787794583293679">(ಯಾವುದು ಬಳಕೆದಾರಹೆಸರಿಲ್ಲ)</translation> -<translation id="4278390842282768270">ಅನುಮತಿಸಲಾಗಿದೆ</translation> <translation id="4300246636397505754">ಪೋಷಕ ಸಲಹೆಗಳು</translation> <translation id="4304224509867189079">ಲಾಗ್ ಇನ್</translation> <translation id="4325863107915753736">ಲೇಖನ ಕಂಡುಬರಲಿಲ್ಲ</translation> @@ -403,6 +400,7 @@ <translation id="5421136146218899937">ಬ್ರೌಸಿಂಗ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ...</translation> <translation id="5430298929874300616">ಬುಕ್ಮಾರ್ಕ್ ತೆಗೆದುಹಾಕಿ</translation> <translation id="5431657950005405462">ನಿಮ್ಮ ಫೈಲ್ ಕಂಡುಬಂದಿಲ್ಲ</translation> +<translation id="5435775191620395718">ಈ ಸಾಧನದಿಂದ ಇತಿಹಾಸವನ್ನು ತೋರಿಸಲಾಗುತ್ತಿದೆ. <ph name="BEGIN_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" ನಲ್ಲಿ ಸ್ಕೀಮಾ ಮೌಲ್ವೀಕರಣ ದೋಷ: <ph name="ERROR" /></translation> <translation id="5447330194051379405">ಎಲ್ಲಾ ಉಳಿಸಿದ ಪುಟಗಳನ್ನು ತೋರಿಸು</translation> <translation id="5452270690849572955">ಈ <ph name="HOST_NAME" /> ಪುಟ ಕಂಡುಬರುವುದಿಲ್ಲ</translation> @@ -512,7 +510,6 @@ <translation id="6753269504797312559">ನೀತಿ ಮೌಲ್ಯ</translation> <translation id="6757797048963528358">ನಿಮ್ಮ ಸಾಧನವು ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗಿದೆ.</translation> <translation id="6781404225664080496">ಈ URL ವಿನಂತಿಗಳನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಯಂತ್ರಿಸಲಾಗಿದೆ.</translation> -<translation id="6800914069727136216">ಸಂದರ್ಭಕ್ಕನುಗುಣವಾದ ಪ್ಯಾಕ್</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> ರಲ್ಲಿ ವೆಬ್ಪುಟವು ಪ್ರಸ್ತುತ ಲಭ್ಯವಿಲ್ಲ. ನಿರ್ವಹಣೆಗಾಗಿ ಇದು ಓವರ್ ಲೋಡ್ ಆಗಿರಬಹುದು ಅಥವಾ ಸ್ಥಗಿತಗೊಂಡಿರಬಹುದು. </translation> <translation id="6831043979455480757">ಅನುವಾದಿಸು</translation> @@ -686,6 +683,7 @@ <translation id="8730621377337864115">ಮುಗಿದಿದೆ</translation> <translation id="8738058698779197622">ಸುರಕ್ಷಿತ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು, ನಿಮ್ಮ ಗಡಿಯಾರವನ್ನು ಸರಿಯಾಗಿ ಹೊಂದಿಸುವ ಅಗತ್ಯವಿದೆ. ವೆಬ್ಸೈಟ್ಗಳು ತಮ್ಮನ್ನು ಗುರುತಿಸಲು ಬಳಸುವ ಪ್ರಮಾಣಪತ್ರಗಳು ಸಮಯದ ನಿರ್ದಿಷ್ಟ ಅವಧಿಗಳಲ್ಲಿ ಮಾತ್ರ ಮಾನ್ಯವಾಗಿರುವ ಕಾರಣ ಹೀಗಾಗುತ್ತದೆ. ನಿಮ್ಮ ಸಾಧನದ ಗಡಿಯಾರವು ತಪ್ಪಾಗಿರುವ ಕಾರಣ, Chromium ಗೆ ಈ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> ನ <abbr id="dnsDefinition">DNS ವಿಳಾಸ</abbr> ಕಂಡುಬರಲಿಲ್ಲ. ಸಮಸ್ಯೆಯನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗುತ್ತಿದೆ.</translation> +<translation id="8741995161408053644">ನಿಮ್ಮ Google ಖಾತೆಯು <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> ನಲ್ಲಿ ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸದ ಇತರ ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿರಬಹುದು.</translation> <translation id="8790007591277257123">&ಅಳಿಸುವುದನ್ನು ಮತ್ತೆಮಾಡು</translation> <translation id="8798099450830957504">ಡೀಫಾಲ್ಟ್</translation> <translation id="8804164990146287819">ಗೌಪ್ಯತಾ ನೀತಿ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index 5da006df..3586ecc 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">잘못된 개체 식별자</translation> <translation id="1232569758102978740">제목 없음</translation> <translation id="1254117744268754948">폴더 선택</translation> -<translation id="1270699273812232624">항목 허용</translation> <translation id="1285320974508926690">이 사이트 번역 안함</translation> <translation id="129553762522093515">최근에 닫은 탭</translation> <translation id="1339601241726513588">등록 도메인:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">필터링</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" />에서 로그인 인증서를 승인하지 않았거나 로그인 인증서가 만료되었을 수 있습니다.</translation> <translation id="194030505837763158"><ph name="LINK" />(으)로 이동</translation> -<translation id="1958820272620550857">항목 차단</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> 북마크</translation> <translation id="1973335181906896915">일련화 오류</translation> <translation id="1974060860693918893">고급</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">애셋 ID:</translation> <translation id="3109728660330352905">이 페이지를 볼 수 있는 권한이 없습니다.</translation> <translation id="3118046075435288765">서버 연결이 갑자기 종료되었습니다.</translation> -<translation id="31454997771848827">도메인 그룹화</translation> <translation id="3145945101586104090">응답 디코딩 실패</translation> <translation id="3147485256806412701">이 사이트는 새로운 기본 최상위 도메인을 사용합니다.</translation> <translation id="3150653042067488994">일시적인 서버 오류</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">이 사이트의 인증서는 2016년에 만료되며 인증서 체인에는 SHA-1을 사용하여 서명된 인증서가 포함되어 있습니다.</translation> <translation id="382518646247711829">프록시 서버를 사용하는 경우</translation> <translation id="3828924085048779000">암호를 빈 칸으로 두어서는 안 됩니다.</translation> +<translation id="3845539888601087042">로그인한 기기의 방문 기록을 표시합니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="385051799172605136">뒤로</translation> <translation id="3858027520442213535">시간과 날짜 업데이트</translation> <translation id="3884278016824448484">기기 식별자 충돌</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">잘못된 서명</translation> <translation id="4268298190799576220">현재 Chromium에서 카드를 확인할 수 없습니다. 나중에 다시 시도해 주세요.</translation> <translation id="4269787794583293679">(사용자 이름 없음)</translation> -<translation id="4278390842282768270">허용됨</translation> <translation id="4300246636397505754">상위 추천</translation> <translation id="4304224509867189079">로그인</translation> <translation id="4325863107915753736">도움말을 찾지 못했습니다.</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">인터넷 사용 기록 삭제...</translation> <translation id="5430298929874300616">북마크 삭제</translation> <translation id="5431657950005405462">파일을 찾을 수 없음</translation> +<translation id="5435775191620395718">이 기기의 방문 기록을 표시합니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="5439770059721715174">'<ph name="ERROR_PATH" />'에서 스키마 유효성 검사 오류: <ph name="ERROR" /></translation> <translation id="5447330194051379405">저장된 페이지 모두 표시</translation> <translation id="5452270690849572955"><ph name="HOST_NAME" /> 페이지를 찾을 수 없음</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">정책 값</translation> <translation id="6757797048963528358">기기가 절전 모드 상태입니다.</translation> <translation id="6781404225664080496">이 URL에 대한 요청이 일시적으로 중지되었습니다.</translation> -<translation id="6800914069727136216">콘텐츠 팩</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" />의 웹페이지는 현재 사용할 수 없습니다. 웹페이지가 오버로드되었거나 유지보수를 위해 다운되었을 수 있습니다.</translation> <translation id="6831043979455480757">번역</translation> @@ -697,6 +694,7 @@ <translation id="8730621377337864115">완료</translation> <translation id="8738058698779197622">보안 연결을 설정하려면 시계가 올바로 설정되어 있어야 합니다. 웹사이트가 자신을 식별하는 데 사용하는 인증서가 특정 기간에만 유효하기 때문입니다. 기기의 시계가 잘못 설정되어 Chromium에서 이 인증서를 확인할 수 없습니다.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" />의 <abbr id="dnsDefinition">DNS 주소</abbr>를 찾을 수 없습니다. 문제를 진단하는 중입니다.</translation> +<translation id="8741995161408053644"><ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />에서 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation> <translation id="8790007591277257123">삭제 다시 실행(&R)</translation> <translation id="8798099450830957504">기본값</translation> <translation id="8804164990146287819">개인정보취급방침</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 232672a..bf9bf65f 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Netinkamas subjekto identifikatorius</translation> <translation id="1232569758102978740">Be pavadinimo</translation> <translation id="1254117744268754948">Pasirinkti aplanką</translation> -<translation id="1270699273812232624">Leisti elementus</translation> <translation id="1285320974508926690">Niekada neversti šios svetainės</translation> <translation id="129553762522093515">Neseniai uždarytas</translation> <translation id="1339601241726513588">Registracijos domenas:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtravimas</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> nepriėmė jūsų prisijungimo sertifikato arba prisijungimo sertifikato galiojimas gali būti pasibaigęs.</translation> <translation id="194030505837763158">Apsilankykite <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokuoti elementai</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> žymės</translation> <translation id="1973335181906896915">Serijinio rengimo klaida</translation> <translation id="1974060860693918893">Išplėstiniai</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Ištekliaus ID:</translation> <translation id="3109728660330352905">Neturite prieigos teisės žiūrėti šį puslapį.</translation> <translation id="3118046075435288765">Serveris netikėtai nutraukė ryšį.</translation> -<translation id="31454997771848827">Grupuoti pagal domenus</translation> <translation id="3145945101586104090">Iššifruojant atsakymą įvyko klaida</translation> <translation id="3147485256806412701">Ši svetainė naudoja naują bendrą aukščiausio lygio domeną.</translation> <translation id="3150653042067488994">Laikina serverio klaida</translation> @@ -291,6 +288,7 @@ <translation id="3788090790273268753">Šios svetainės sertifikato galiojimo laikas baigiasi 2016 m., o sertifikatų grandinėje yra sertifikatas, pasirašytas naudojant SHA-1.</translation> <translation id="382518646247711829">Jei naudojate tarpinį serverį…</translation> <translation id="3828924085048779000">Neleidžiama naudoti tuščios slaptafrazės.</translation> +<translation id="3845539888601087042">Rodoma įrenginių, kuriuose esate prisijungę, istorija. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Grįžti</translation> <translation id="3858027520442213535">Atnaujinti datą ir laiką</translation> <translation id="3884278016824448484">Nesuderinamas įrenginio identifikatorius</translation> @@ -326,7 +324,6 @@ <translation id="4258748452823770588">Netinkamas parašas</translation> <translation id="4268298190799576220">Šiuo metu „Chromium“ negali patvirtinti jūsų kortelės. Bandykite dar kartą vėliau.</translation> <translation id="4269787794583293679">(Nėra naudotojo vardo)</translation> -<translation id="4278390842282768270">Leidžiama</translation> <translation id="4300246636397505754">Pasiūlymai tėvams</translation> <translation id="4304224509867189079">Prisijungti</translation> <translation id="4325863107915753736">Nepavyko rasti straipsnio</translation> @@ -411,6 +408,7 @@ <translation id="5421136146218899937">Išvalyti naršymo duomenis...</translation> <translation id="5430298929874300616">Pašalinti žymę</translation> <translation id="5431657950005405462">Failas nerastas</translation> +<translation id="5435775191620395718">Rodoma šio įrenginio istorija. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Schemos patvirtinimo klaida „<ph name="ERROR_PATH" />“: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Rodyti visus išsaugotus puslapius</translation> <translation id="5452270690849572955">Nepavyksta rasti šio <ph name="HOST_NAME" /> puslapio</translation> @@ -523,7 +521,6 @@ <translation id="6753269504797312559">Politikos vertė</translation> <translation id="6757797048963528358">Įjungta įrenginio miego būsena.</translation> <translation id="6781404225664080496">Užklausos šiuo URL laikinai nevykdomos.</translation> -<translation id="6800914069727136216">Turinio pakete</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Šiuo metu <ph name="URL" /> tinklalapis negalimas. Jis gali būti per daug apkrautas arba neveikiantis dėl techninės priežiūros.</translation> <translation id="6831043979455480757">Vertėjas</translation> @@ -699,6 +696,7 @@ <translation id="8730621377337864115">Atlikta</translation> <translation id="8738058698779197622">Jei norite užmegzti saugų ryšį, turėsite tinkamai nustatyti laikrodį. To reikalaujama todėl, kad svetainių tapatybei įrodyti naudojami sertifikatai galioja tik tam tikrą laikotarpį. Kadangi įrenginio laikrodis nustatytas netinkamai, „Chromium“ negali tinkamai patvirtinti sertifikatų.</translation> <translation id="8740359287975076522">Nepavyko rasti <ph name="HOST_NAME" /> <abbr id="dnsDefinition">DNS adreso</abbr>. Nustatoma problema.</translation> +<translation id="8741995161408053644">Adresu <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> gali būti pateikta kitų formų jūsų „Google“ paskyros istorija.</translation> <translation id="8790007591277257123">&Ištrinti dar kartą</translation> <translation id="8798099450830957504">Numatytasis</translation> <translation id="8804164990146287819">Privatumo politika</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index 5a571e8..5f1dd4181 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Nepareizs vienības identifikators</translation> <translation id="1232569758102978740">Bez nosaukuma</translation> <translation id="1254117744268754948">Mapes izvēle</translation> -<translation id="1270699273812232624">Atļaut vienumus</translation> <translation id="1285320974508926690">Nekad netulkot šo vietni</translation> <translation id="129553762522093515">Nesen aizvērtas</translation> <translation id="1339601241726513588">Reģistrācijas domēns:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrēšana</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> nepieņēma jūsu pieteikšanās sertifikātu, vai arī pieteikšanās sertifikāta derīgums ir beidzies.</translation> <translation id="194030505837763158">Apmeklējiet vietni <ph name="LINK" /></translation> -<translation id="1958820272620550857">Bloķēt vienumus</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> grāmatzīmes</translation> <translation id="1973335181906896915">Radās serializēšanas kļūda.</translation> <translation id="1974060860693918893">Papildu</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Līdzekļa ID:</translation> <translation id="3109728660330352905">Jums nav pilnvaru, lai skatītu šo lapu.</translation> <translation id="3118046075435288765">Serveris negaidīti pārtrauca savienojumu.</translation> -<translation id="31454997771848827">Grupēt domēnus</translation> <translation id="3145945101586104090">Neizdevās atšifrēt atbildi.</translation> <translation id="3147485256806412701">Šī vietne izmanto jaunu vispārēju augšējā līmeņa domēnu.</translation> <translation id="3150653042067488994">Īslaicīga servera kļūda</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">Šīs vietnes sertifikāta derīgums beidzas 2016. gadā, un sertifikātu ķēdē ir iekļauts sertifikāts, kas ir parakstīts, izmantojot SHA-1.</translation> <translation id="382518646247711829">Ja izmantojat starpniekserveri...</translation> <translation id="3828924085048779000">Tukša ieejas frāze nav atļauta.</translation> +<translation id="3845539888601087042">Tiek rādīta vēsture no ierīcēm, kurās esat pierakstījies. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Atpakaļ</translation> <translation id="3858027520442213535">Atjaunināt datumu un laiku</translation> <translation id="3884278016824448484">Ierīces identifikators rada konfliktu.</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">Paraksts nav derīgs.</translation> <translation id="4268298190799576220">Chromium pašlaik nevar verificēt jūsu karti. Lūdzu, vēlāk mēģiniet vēlreiz.</translation> <translation id="4269787794583293679">(Nav lietotājvārda)</translation> -<translation id="4278390842282768270">Atļauts</translation> <translation id="4300246636397505754">Vecāku ieteikumi</translation> <translation id="4304224509867189079">Pieteikšanās</translation> <translation id="4325863107915753736">Rakstu neizdevās atrast.</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">Notīrīt pārlūkošanas datus</translation> <translation id="5430298929874300616">Noņemt grāmatzīmi</translation> <translation id="5431657950005405462">Fails nav atrasts</translation> +<translation id="5435775191620395718">Tiek rādīta vēsture no šīs ierīces. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Šeit tika atklāta shēmas validēšanas kļūda: <ph name="ERROR_PATH" />. Kļūdas ziņojums: <ph name="ERROR" />.</translation> <translation id="5447330194051379405">Rādīt visas saglabātās lapas</translation> <translation id="5452270690849572955">Šo vietnes <ph name="HOST_NAME" /> lapu nevar atrast</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">Politikas vērtība</translation> <translation id="6757797048963528358">Ierīce tika pārslēgta miega režīmā.</translation> <translation id="6781404225664080496">Šī URL pieprasījumi īslaicīgi tiks noraidīti.</translation> -<translation id="6800914069727136216">Satura pakotnē</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> tīmekļa lapa pašlaik nav pieejama. Tā var būt pārslogota vai nedarbojas uzturēšanas darbu dēļ.</translation> <translation id="6831043979455480757">Tulkot</translation> @@ -697,6 +694,7 @@ <translation id="8730621377337864115">Gatavs</translation> <translation id="8738058698779197622">Lai izveidotu drošu savienojumu, ir jāiestata pareizs pulksteņa laiks. Tas ir nepieciešams, jo sertifikāti, kurus vietnes izmanto, lai tiktu identificētas, ir derīgi tikai noteiktos laika periodos. Tā kā jūsu ierīces pulkstenis nav pareizi iestatīts, Chromium nevar verificēt šos sertifikātus.</translation> <translation id="8740359287975076522">Nevarēja atrast <ph name="HOST_NAME" /> <abbr id="dnsDefinition">DNS adresi</abbr>. Notiek problēmas diagnosticēšana.</translation> +<translation id="8741995161408053644">Jūsu Google kontam var būt cita veida pārlūkošanas vēstures dati vietnē <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Atcelt dzēšanas atsaukšanu</translation> <translation id="8798099450830957504">Noklusējums</translation> <translation id="8804164990146287819">Konfidencialitātes politika</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 628dc954..f194451 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">തെറ്റായ എന്റിറ്റി ഐഡന്റിഫയർ</translation> <translation id="1232569758102978740">ശീര്ഷകമില്ലാത്ത</translation> <translation id="1254117744268754948">ഫോൾഡർ തിരഞ്ഞെടുക്കുക</translation> -<translation id="1270699273812232624">ഇനങ്ങൾ അനുവദിക്കുക</translation> <translation id="1285320974508926690">ഈ സൈറ്റ് ഒരിക്കലും വിവര്ത്തനം ചെയ്യരുത്</translation> <translation id="129553762522093515">സമീപകാലത്ത് അടച്ചവ</translation> <translation id="1339601241726513588">എൻറോൾമെന്റ് ഡൊമെയ്ൻ:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">ഫിൽട്ടർ ചെയ്യുന്നു</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" />, നിങ്ങളുടെ ലോഗിൻ സർട്ടിഫിക്കറ്റ് അംഗീകരിച്ചില്ല അല്ലെങ്കിൽ ലോഗിൻ സർട്ടിഫിക്കറ്റ് കാലഹരണപ്പെട്ടതാകാം.</translation> <translation id="194030505837763158"><ph name="LINK" />-ലേക്ക് പോകുക</translation> -<translation id="1958820272620550857">ഇനങ്ങൾ തടയുക</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> ബുക്ക്മാർക്കുകൾ</translation> <translation id="1973335181906896915">സീരിയലൈസേഷൻ പിശക്</translation> <translation id="1974060860693918893">നൂതനം</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">അസറ്റ് ഐഡി:</translation> <translation id="3109728660330352905">നിങ്ങൾക്ക് ഈ പേജ് കാണാനുള്ള അംഗീകാരമില്ല.</translation> <translation id="3118046075435288765">സെര്വര് അപ്രതീക്ഷിതമായി കണക്ഷന് അടച്ചു.</translation> -<translation id="31454997771848827">ഗ്രൂപ്പ് ഡൊമെയ്നുകൾ</translation> <translation id="3145945101586104090">പ്രതികരണം ഡീകോഡ് ചെയ്യുന്നത് പരാജയപ്പെട്ടു</translation> <translation id="3147485256806412701">ഈ സൈറ്റ് പുതിയ ജനറിക് ഉയർന്ന ലെവൽ ഡൊമെയ്ൻ ഉപയോഗിക്കുന്നു.</translation> <translation id="3150653042067488994">താൽക്കാലികമായ സെർവർ പിശക്</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">ഈ സൈറ്റിനായുള്ള സർട്ടിഫിക്കറ്റ് 2016-ൽ കാലഹരണപ്പെടും ഒപ്പം സർട്ടിഫിക്കറ്റ് ചെയിനിൽ SHA-1 ഉപയോഗിച്ച് സൈൻ ചെയ്ത ഒരു സർട്ടിഫിക്കറ്റ് അടങ്ങിയിരിക്കുകയും ചെയ്യുന്നു.</translation> <translation id="382518646247711829">നിങ്ങൾ ഒരു പ്രോക്സി സെർവർ ഉപയോഗിക്കുന്നെങ്കിൽ...</translation> <translation id="3828924085048779000">ശൂന്യ പാസ്ഫ്രെയ്സ് അനുവദനീയമല്ല.</translation> +<translation id="3845539888601087042">നിങ്ങൾ സൈൻ ഇൻ ചെയ്തിരിക്കുന്ന ഉപകരണങ്ങളിൽ നിന്നുള്ള ചരിത്രം കാണിക്കുന്നു. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" />.</translation> <translation id="385051799172605136">പിന്നോട്ട്</translation> <translation id="3858027520442213535">തീയതിയും സമയവും അപ്ഡേറ്റുചെയ്യുക</translation> <translation id="3884278016824448484">വിരുദ്ധ ഉപകരണ ഐഡന്റിഫയർ</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">മോശം സിഗ്നേച്ചർ</translation> <translation id="4268298190799576220">Chromium-ത്തിന് ഇപ്പോൾ നിങ്ങളുടെ കാർഡ് പരിശോധിപ്പിച്ചുറപ്പിക്കാനായില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="4269787794583293679">(ഉപയോക്തൃനാമമില്ല)</translation> -<translation id="4278390842282768270">അനുവദനീയം</translation> <translation id="4300246636397505754">പാരന്റ് നിർദ്ദേശങ്ങൾ</translation> <translation id="4304224509867189079">ലോഗ് ഇന് ചെയ്യുക</translation> <translation id="4325863107915753736">ലേഖനം കണ്ടെത്തുന്നത് പരാജയപ്പെട്ടു</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">ബ്രൌസിംഗ് ഡാറ്റാ മായ്ക്കുന്നു</translation> <translation id="5430298929874300616">ബുക്ക്മാർക്ക് നീക്കംചെയ്യുക</translation> <translation id="5431657950005405462">നിങ്ങളുടെ ഫയൽ കണ്ടെത്തിയില്ല</translation> +<translation id="5435775191620395718">ഈ ഉപകരണത്തിൽ നിന്നുള്ള ചരിത്രം കാണിക്കുന്നു. <ph name="BEGIN_LINK" />കൂടുതലറിയുക<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" എന്നതിൽ സ്കീമ മൂല്ല്യനിർണ്ണയ പിശക്: <ph name="ERROR" /></translation> <translation id="5447330194051379405">സംരക്ഷിച്ച എല്ലാ പേജുകളും കാണിക്കുക</translation> <translation id="5452270690849572955">ഈ <ph name="HOST_NAME" /> പേജ് കണ്ടെത്താനായില്ല</translation> @@ -520,7 +518,6 @@ <translation id="6753269504797312559">നയ മൂല്യം</translation> <translation id="6757797048963528358">നിങ്ങളുടെ ഉപകരണം സുഷുപ്തിയിലായി.</translation> <translation id="6781404225664080496">ഈ URL-ലേക്കുള്ള അഭ്യർത്ഥനകൾ താൽക്കാലികമായി നിർത്തിവച്ചിരിക്കുന്നു.</translation> -<translation id="6800914069727136216">ഉള്ളടക്ക പായ്ക്കിൽ</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> എന്നതിലെ വെബ്പേജ് നിലവില് ലഭ്യമല്ല. അത് ഓവര്ലോഡ് ആയിരിക്കുകയോ പുനര്നിര്മ്മാണത്തിലായിരിക്കുകയോ ആവാം.</translation> <translation id="6831043979455480757">വിവർത്തനം ചെയ്യുക</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">പൂർത്തിയാക്കി</translation> <translation id="8738058698779197622">ഒരു സുരക്ഷിത കണക്ഷൻ സ്ഥാപിക്കുന്നതിന്, നിങ്ങളുടെ ക്ലോക്ക് ശരിയായി സജ്ജീകരിക്കേണ്ടതുണ്ട്. വെബ്സൈറ്റുകൾ സ്വയം തിരിച്ചറിയുന്നതിന് ഉപയോഗിക്കുന്ന സർട്ടിഫിക്കറ്റുകൾ, നിർദ്ദിഷ്ട സമയ പരിധിയ്ക്ക് മാത്രമായി സാധുതയുള്ളതിനാലാണിത്. നിങ്ങളുടെ ഉപകരണത്തിന്റെ ക്ലോക്ക് തെറ്റായിരിക്കുന്നതിനാൽ, Chromium-ന് ഈ സർട്ടിഫിക്കറ്റുകൾ പരിശോധിച്ചുറപ്പിക്കാനാവില്ല.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> ഹോസ്റ്റിന്റെ <abbr id="dnsDefinition">DNS വിലാസം</abbr> കണ്ടെത്താനായില്ല. പ്രശ്നം നിർണ്ണയിക്കുന്നു.</translation> +<translation id="8741995161408053644">നിങ്ങളുടെ Google അക്കൗണ്ടിന് <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> എന്നതിൽ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation> <translation id="8790007591277257123">&ഇല്ലാതാക്കുന്നത് വീണ്ടും ചെയ്യുക</translation> <translation id="8798099450830957504">സ്ഥിരസ്ഥിതി</translation> <translation id="8804164990146287819">സ്വകാര്യത നയം</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 7a40ff6..357e08e 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">चुकीचा अस्तित्व ओळखकर्ता</translation> <translation id="1232569758102978740">अशीर्षकांकित</translation> <translation id="1254117744268754948">फोल्डर निवडा</translation> -<translation id="1270699273812232624">आयटमला अनुमती द्या</translation> <translation id="1285320974508926690">या साइटचा कधीही अनुवाद करु नका</translation> <translation id="129553762522093515">अलीकडे बंद केलेले</translation> <translation id="1339601241726513588">नावनोंदणी डोमेन:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">फिल्टर करणे</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> नी आपले लॉग इन प्रमाणपत्र स्वीकारले नाही किंवा कदाचित आपले लॉग इन प्रमाणपत्र कालबाह्य झाले असावे.</translation> <translation id="194030505837763158"><ph name="LINK" /> दुव्याकडे जा</translation> -<translation id="1958820272620550857">आयटम अवरोधित करा</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> बुकमार्क</translation> <translation id="1973335181906896915">क्रमीकरण त्रुटी</translation> <translation id="1974060860693918893">प्रगत</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">मालमत्ता ID:</translation> <translation id="3109728660330352905">हे पृष्ठ पाहण्यासाठी आपण प्राधिकृत नाही.</translation> <translation id="3118046075435288765">सर्व्हरने अनपेक्षितरित्या कनेक्शन बंद केले.</translation> -<translation id="31454997771848827">गट डोमेन</translation> <translation id="3145945101586104090">प्रतिसाद डीकोड करण्यात अयशस्वी</translation> <translation id="3147485256806412701">ही साइट एक नवीन सामान्य शीर्ष-स्तरीय डोमेन वापरत आहे.</translation> <translation id="3150653042067488994">तात्पुरती सर्व्हर त्रुटी</translation> @@ -325,7 +322,6 @@ <translation id="4258748452823770588">खराब स्वाक्षरी</translation> <translation id="4268298190799576220">Chromium यावेळी आपले कार्ड सत्यापित करण्यात अक्षम होते. कृपया नंतर पुन्हा प्रयत्न करा.</translation> <translation id="4269787794583293679">(वापरकर्तानाव नाही)</translation> -<translation id="4278390842282768270">अनुमत</translation> <translation id="4300246636397505754">पालक सूचना</translation> <translation id="4304224509867189079">लॉग इन</translation> <translation id="4325863107915753736">लेख शोधण्यात अयशस्वी</translation> @@ -524,7 +520,6 @@ <translation id="6753269504797312559">धोरण मूल्य</translation> <translation id="6757797048963528358">आपले डिव्हाइस निष्क्रीय झाले.</translation> <translation id="6781404225664080496">या URL कडे विनंत्या पाठविणे तात्पुरते बंद केले गेले आहे.</translation> -<translation id="6800914069727136216">सामग्री पॅकमध्ये</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> येथील वेबपृष्ठ सध्या अनुपलब्ध आहे. ते ओव्हरलोड असावे किंवा देखरेखीसाठी डाउन असावे.</translation> <translation id="6831043979455480757">अनुवाद करा</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index f738d0f..55fead44 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Pengecam entiti yang salah</translation> <translation id="1232569758102978740">Tidak Bertajuk</translation> <translation id="1254117744268754948">Pilih Folder</translation> -<translation id="1270699273812232624">Benarkan item</translation> <translation id="1285320974508926690">Jangan sekali-kali menterjemahkan tapak ini</translation> <translation id="129553762522093515">Ditutup baru-baru ini</translation> <translation id="1339601241726513588">Domain pendaftaran:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Penapisan</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> tidak menerima sijil log masuk anda atau sijil log masuk anda telah tamat tempoh.</translation> <translation id="194030505837763158">Pergi ke <ph name="LINK" /></translation> -<translation id="1958820272620550857">Sekat item</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> Penanda halaman</translation> <translation id="1973335181906896915">Ralat penyirian</translation> <translation id="1974060860693918893">Lanjutan</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID Aset:</translation> <translation id="3109728660330352905">Anda tidak mempunyai kebenaran untuk melihat halaman ini.</translation> <translation id="3118046075435288765">Pelayan menutup sambungan tanpa disangka-sangka.</translation> -<translation id="31454997771848827">Kumpulan domain</translation> <translation id="3145945101586104090">Gagal menyahkod balasan</translation> <translation id="3147485256806412701">Tapak ini menggunakan domain tahap atas generik baharu.</translation> <translation id="3150653042067488994">Ralat pelayan sementara</translation> @@ -327,7 +324,6 @@ <translation id="4258748452823770588">Tandatangan tidak elok</translation> <translation id="4268298190799576220">Chromium tidak dapat mengesahkan kad anda pada masa ini. Sila cuba lagi nanti.</translation> <translation id="4269787794583293679">(Tiada nama pengguna)</translation> -<translation id="4278390842282768270">Dibenarkan</translation> <translation id="4300246636397505754">Cadangan ibu bapa</translation> <translation id="4304224509867189079">Log Masuk</translation> <translation id="4325863107915753736">Gagal menemui artikel</translation> @@ -525,7 +521,6 @@ <translation id="6753269504797312559">Nilai dasar</translation> <translation id="6757797048963528358">Peranti anda tidak aktif.</translation> <translation id="6781404225664080496">Permintaan ke URL ini telah didikitkan untuk sementara waktu.</translation> -<translation id="6800914069727136216">Dalam pek kandungan</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Halaman web di <ph name="URL" /> kini tidak tersedia. Ia mungkin terlebih muatan atau tergendala akibat penyelenggaraan.</translation> <translation id="6831043979455480757">Terjemah</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb index 6fdbf52..7e206292 100644 --- a/components/strings/components_strings_nl.xtb +++ b/components/strings/components_strings_nl.xtb
@@ -36,7 +36,6 @@ <translation id="1228893227497259893">Onjuiste entiteits-ID</translation> <translation id="1232569758102978740">Naamloos</translation> <translation id="1254117744268754948">Map kiezen</translation> -<translation id="1270699273812232624">Items toestaan</translation> <translation id="1285320974508926690">Deze site nooit vertalen</translation> <translation id="129553762522093515">Recent gesloten</translation> <translation id="1339601241726513588">Inschrijvingsdomein:</translation> @@ -83,7 +82,6 @@ <translation id="1898423065542865115">Filteren</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> heeft je inlogcertificaat niet geaccepteerd of je inlogcertificaat is mogelijk verlopen.</translation> <translation id="194030505837763158">Ga naar <ph name="LINK" /></translation> -<translation id="1958820272620550857">Items blokkeren</translation> <translation id="1962204205936693436">Bladwijzers voor <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Serialisatiefout</translation> <translation id="1974060860693918893">Geavanceerd</translation> @@ -200,7 +198,6 @@ <translation id="3105172416063519923">Item-ID:</translation> <translation id="3109728660330352905">Je hebt geen toestemming om deze pagina te bekijken.</translation> <translation id="3118046075435288765">De server heeft de verbinding onverwacht verbroken.</translation> -<translation id="31454997771848827">Domeinen groeperen</translation> <translation id="3145945101586104090">Kan reactie niet decoderen</translation> <translation id="3147485256806412701">Deze site gebruikt een nieuw algemeen hoofddomein.</translation> <translation id="3150653042067488994">Tijdelijke serverfout</translation> @@ -276,6 +273,7 @@ <translation id="3788090790273268753">Het certificaat voor deze site verloopt in 2016 en de certificaatketen bevat een certificaat dat is ondertekend met SHA-1.</translation> <translation id="382518646247711829">Als je een proxyserver gebruikt...</translation> <translation id="3828924085048779000">Een lege wachtwoordzin is niet toegestaan.</translation> +<translation id="3845539888601087042">Geschiedenis van je ingelogde apparaten wordt weergegeven. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Vorige</translation> <translation id="3858027520442213535">Datum en tijd updaten</translation> <translation id="3884278016824448484">Conflicterende apparaat-ID's</translation> @@ -311,7 +309,6 @@ <translation id="4258748452823770588">Onjuiste handtekening</translation> <translation id="4268298190799576220">Chromium kan je kaart momenteel niet verifiëren. Probeer het later opnieuw.</translation> <translation id="4269787794583293679">(Geen gebruikersnaam)</translation> -<translation id="4278390842282768270">Toegestaan</translation> <translation id="4300246636397505754">Bovenliggende suggesties</translation> <translation id="4304224509867189079">Inloggen</translation> <translation id="4325863107915753736">Kan artikel niet vinden</translation> @@ -396,6 +393,7 @@ <translation id="5421136146218899937">Browsegegevens wissen...</translation> <translation id="5430298929874300616">Bladwijzer verwijderen</translation> <translation id="5431657950005405462">Je bestand is niet gevonden</translation> +<translation id="5435775191620395718">Geschiedenis van dit apparaat wordt weergegeven. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Schemavalidatiefout op '<ph name="ERROR_PATH" />': <ph name="ERROR" /></translation> <translation id="5447330194051379405">Alle opgeslagen pagina's weergeven</translation> <translation id="5452270690849572955">Deze pagina op <ph name="HOST_NAME" /> kan niet worden gevonden</translation> @@ -505,7 +503,6 @@ <translation id="6753269504797312559">Beleidswaarde</translation> <translation id="6757797048963528358">De slaapstand van je apparaat is geactiveerd.</translation> <translation id="6781404225664080496">Verzoeken naar deze URL zijn tijdelijk afgebroken.</translation> -<translation id="6800914069727136216">In inhoudspakket</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">De webpagina op <ph name="URL" /> is momenteel niet beschikbaar. De pagina bevat wellicht teveel verkeer of is offline wegens onderhoud.</translation> <translation id="6831043979455480757">Vertalen</translation> @@ -667,6 +664,7 @@ <translation id="8730621377337864115">Gereed</translation> <translation id="8738058698779197622">Als je een veilige verbinding tot stand wilt brengen, moet je klok goed zijn ingesteld. Dit moet omdat de certificaten die deze websites gebruiken om zichzelf te identificeren, slechts gedurende bepaalde perioden geldig zijn. Aangezien de klok van je apparaat niet goed is ingesteld, kan Chromium deze certificaten niet verifiëren.</translation> <translation id="8740359287975076522">Het <abbr id="dnsDefinition">DNS-adres</abbr> van <ph name="HOST_NAME" /> kan niet worden gevonden. Er wordt een diagnose van het probleem uitgevoerd.</translation> +<translation id="8741995161408053644">Voor je Google-account kunnen andere vormen van browsegeschiedenis beschikbaar zijn via <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Opnieuw verwijderen</translation> <translation id="8798099450830957504">Standaard</translation> <translation id="8804164990146287819">Privacybeleid</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 867f29b..a1fc10f 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Feil enhetsidentifikator</translation> <translation id="1232569758102978740">Uten tittel</translation> <translation id="1254117744268754948">Valg av mappe</translation> -<translation id="1270699273812232624">Tillat elementer</translation> <translation id="1285320974508926690">Oversett aldri dette nettstedet</translation> <translation id="129553762522093515">Nylig lukket</translation> <translation id="1339601241726513588">Registreringsdomene:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrering</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> godtok ikke påloggingssertifikatet ditt, eller påloggingssertifikatet kan ha utløpt.</translation> <translation id="194030505837763158">Gå til <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokkerte elementer</translation> <translation id="1962204205936693436"><ph name="DOMAIN" />-bokmerker</translation> <translation id="1973335181906896915">Serialiseringsfeil</translation> <translation id="1974060860693918893">Avansert</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Ressurs-ID:</translation> <translation id="3109728660330352905">Du har ikke autorisasjon til å se denne siden.</translation> <translation id="3118046075435288765">Tjeneren avsluttet tilkoblingen uventet.</translation> -<translation id="31454997771848827">Gruppedomener</translation> <translation id="3145945101586104090">Kunne ikke avkode responsen</translation> <translation id="3147485256806412701">Dette nettstedet bruker et nytt generisk toppdomene.</translation> <translation id="3150653042067488994">Midlertidig tjenerfeil</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Sertifikatet for dette nettstedet utløper i 2016, og sertifikatkjeden inneholder et sertifikat som er signert med SHA-1.</translation> <translation id="382518646247711829">Hvis du bruker en mellomtjener...</translation> <translation id="3828924085048779000">Tom passordfrase er ikke tillatt.</translation> +<translation id="3845539888601087042">Viser loggen fra enhetene du er logget på. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Tilbake</translation> <translation id="3858027520442213535">Oppdater dato og klokkeslett</translation> <translation id="3884278016824448484">Motstridende enhetsidentifikator</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Dårlig signatur</translation> <translation id="4268298190799576220">Chromium kunne ikke bekrefte kortet ditt akkurat nå. Prøv igjen senere.</translation> <translation id="4269787794583293679">(Uten brukernavn)</translation> -<translation id="4278390842282768270">Tillatt</translation> <translation id="4300246636397505754">Overordnede forslag</translation> <translation id="4304224509867189079">Logg på</translation> <translation id="4325863107915753736">Artikkelen ble ikke funnet</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Slett nettleserdata</translation> <translation id="5430298929874300616">Fjern bokmerke</translation> <translation id="5431657950005405462">Filen ble ikke funnet</translation> +<translation id="5435775191620395718">Viser loggen fra denne enheten. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Skjemavalideringsfeil i «<ph name="ERROR_PATH" />»: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Vis alle de lagrede sidene</translation> <translation id="5452270690849572955">Denne siden på <ph name="HOST_NAME" /> ble ikke funnet</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Retningslinjeverdi</translation> <translation id="6757797048963528358">Enheten din gikk inn i hvilemodus.</translation> <translation id="6781404225664080496">Forespørsler til denne nettadressen blir midlertidig stanset.</translation> -<translation id="6800914069727136216">I innholdspakke</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Nettsiden på <ph name="URL" /> er for tiden utilgjengelig. Den kan være overbelastet eller under vedlikehold.</translation> <translation id="6831043979455480757">Oversett</translation> @@ -700,6 +697,7 @@ <translation id="8730621377337864115">Ferdig</translation> <translation id="8738058698779197622">Klokken din må være riktig stilt for at du skal kunne opprette en sikker forbindelse. Sertifikatene som nettsteder bruker til å identifisere seg med, er nemlig bare gyldige i en viss tid. Siden enhetens klokke er feil, kan ikke Chromium kontrollere disse sertifikatene.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">DNS-adressen</abbr> til <ph name="HOST_NAME" /> ble ikke funnet. Problemet diagnostiseres.</translation> +<translation id="8741995161408053644">Google-kontoen din kan ha andre typer nettlesingslogger på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Slett likevel</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8804164990146287819">Personvernregler</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 4057512..a48b219 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Błędny identyfikator elementu</translation> <translation id="1232569758102978740">Bez tytułu</translation> <translation id="1254117744268754948">Wybierz folder</translation> -<translation id="1270699273812232624">Zezwól na elementy</translation> <translation id="1285320974508926690">Nigdy nie tłumacz tej witryny</translation> <translation id="129553762522093515">Ostatnio zamknięte</translation> <translation id="1339601241726513588">Domena rejestracji:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrowanie</translation> <translation id="1911837502049945214">Serwer <ph name="HOST_NAME" /> nie zaakceptował Twojego certyfikatu logowania albo ten certyfikat wygasł.</translation> <translation id="194030505837763158">Wejdź na <ph name="LINK" /></translation> -<translation id="1958820272620550857">Zablokuj elementy</translation> <translation id="1962204205936693436">Zakładki z <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Podczas przekształcania do postaci szeregowej wystąpił błąd</translation> <translation id="1974060860693918893">Zaawansowane</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">Identyfikator zasobu:</translation> <translation id="3109728660330352905">Nie masz autoryzacji do wyświetlania tej strony.</translation> <translation id="3118046075435288765">Serwer nieoczekiwanie zakończył połączenie.</translation> -<translation id="31454997771848827">Grupuj domeny</translation> <translation id="3145945101586104090">Dekodowanie odpowiedzi nie powiodło się</translation> <translation id="3147485256806412701">Witryna korzysta z nowej domeny funkcjonalnej najwyższego poziomu.</translation> <translation id="3150653042067488994">Tymczasowy błąd serwera</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">Certyfikat tej witryny wygasa w 2016 roku, a łańcuch certyfikatów zawiera certyfikat podpisany algorytmem SHA-1.</translation> <translation id="382518646247711829">Jeśli używasz serwera proxy...</translation> <translation id="3828924085048779000">Puste hasło jest niedozwolone.</translation> +<translation id="3845539888601087042">Wyświetlam historię z zalogowanych urządzeń. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="385051799172605136">Wstecz</translation> <translation id="3858027520442213535">Zaktualizuj datę i godzinę</translation> <translation id="3884278016824448484">Konflikt identyfikatorów urządzeń</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">Nieprawidłowy podpis</translation> <translation id="4268298190799576220">Chromium nie może obecnie zweryfikować karty. Spróbuj ponownie później.</translation> <translation id="4269787794583293679">(Brak nazwy użytkownika)</translation> -<translation id="4278390842282768270">Dopuszczone</translation> <translation id="4300246636397505754">Propozycje rodziców</translation> <translation id="4304224509867189079">Zaloguj się</translation> <translation id="4325863107915753736">Nie udało się znaleźć artykułu</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">Wyczyść dane przeglądania...</translation> <translation id="5430298929874300616">Usuń zakładkę</translation> <translation id="5431657950005405462">Nie znaleziono pliku</translation> +<translation id="5435775191620395718">Wyświetlam historię z tego urządzenia. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Błąd podczas sprawdzania poprawności schematu – „<ph name="ERROR_PATH" />”: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Pokaż wszystkie zapisane strony</translation> <translation id="5452270690849572955">Nie można znaleźć tej strony na <ph name="HOST_NAME" /></translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">Wartość zasady</translation> <translation id="6757797048963528358">Twoje urządzenie przeszło w tryb uśpienia.</translation> <translation id="6781404225664080496">Żądania do tego adresu URL są tymczasowo ograniczane.</translation> -<translation id="6800914069727136216">W pakiecie zawartości</translation> <translation id="6820686453637990663">Kod CVC</translation> <translation id="6830600606572693159">Strona internetowa pod adresem <ph name="URL" /> jest obecnie niedostępna. Może być przeciążona lub wyłączona na czas konserwacji.</translation> <translation id="6831043979455480757">Tłumacz</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">Gotowe</translation> <translation id="8738058698779197622">Aby nawiązać bezpieczne połączenie, Twój zegar musi mieć ustawioną prawidłową godzinę. Jest to wymagane, ponieważ certyfikaty używane do identyfikacji stron internetowych są ważne tylko przez określony czas. Ponieważ zegar Twojego urządzenia nie jest ustawiony prawidłowo, Chromium nie może zweryfikować tych certyfikatów.</translation> <translation id="8740359287975076522">Nie znaleziono <abbr id="dnsDefinition">adresu DNS</abbr> serwera <ph name="HOST_NAME" />. Diagnozujemy problem.</translation> +<translation id="8741995161408053644">Inne rodzaje historii przeglądania mogą być nadal dostępne na Twoim koncie Google na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Ponów usunięcie</translation> <translation id="8798099450830957504">Domyślny</translation> <translation id="8804164990146287819">Polityka prywatności</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 0bcc684c..ec45661 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Identificador de entidade incorreto</translation> <translation id="1232569758102978740">Sem título</translation> <translation id="1254117744268754948">Escolher pasta</translation> -<translation id="1270699273812232624">Permitir itens</translation> <translation id="1285320974508926690">Nunca traduzir este site</translation> <translation id="129553762522093515">Recentemente fechadas</translation> <translation id="1339601241726513588">Domínio de inscrição:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtragem</translation> <translation id="1911837502049945214">O cetificado de login não foi aceito por <ph name="HOST_NAME" /> ou talvez tenha expirado.</translation> <translation id="194030505837763158">Ir para <ph name="LINK" /></translation> -<translation id="1958820272620550857">Itens bloqueados</translation> <translation id="1962204205936693436">Favoritos de <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Erro de serialização</translation> <translation id="1974060860693918893">Avançado</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Código do recurso:</translation> <translation id="3109728660330352905">Você não tem autorização para ver esta página.</translation> <translation id="3118046075435288765">O servidor encerrou a conexão inesperadamente.</translation> -<translation id="31454997771848827">Domínios do grupo</translation> <translation id="3145945101586104090">Falha ao decodificar resposta</translation> <translation id="3147485256806412701">Este site está usando um novo domínio de nível mais alto genérico.</translation> <translation id="3150653042067488994">Erro temporário do servidor</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">O certificado deste site expira em 2016. A cadeia de certificados contém um certificado assinado com SHA-1.</translation> <translation id="382518646247711829">Se você usa um servidor proxy...</translation> <translation id="3828924085048779000">Uma senha vazia não é permitida.</translation> +<translation id="3845539888601087042">Exibindo histórico dos seus dispositivos conectados. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Voltar</translation> <translation id="3858027520442213535">Atualizar data e hora</translation> <translation id="3884278016824448484">Identificador de dispositivo em conflito</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Assinatura inválida</translation> <translation id="4268298190799576220">Não foi possível verificar seu cartão com o Chromium no momento. Tente novamente mais tarde.</translation> <translation id="4269787794583293679">Sem nome de usuário</translation> -<translation id="4278390842282768270">Permitido</translation> <translation id="4300246636397505754">Sugestões para pais</translation> <translation id="4304224509867189079">Fazer login</translation> <translation id="4325863107915753736">Falha ao encontrar artigo</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Limpar dados de navegação...</translation> <translation id="5430298929874300616">Remover favorito</translation> <translation id="5431657950005405462">O arquivo não foi encontrado</translation> +<translation id="5435775191620395718">Exibindo histórico deste dispositivo. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Erro de validação de esquema em "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Mostrar todas as páginas salvas</translation> <translation id="5452270690849572955">Não foi possível encontrar a página deste <ph name="HOST_NAME" /></translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Valor da política</translation> <translation id="6757797048963528358">O dispositivo entrou em modo de suspensão.</translation> <translation id="6781404225664080496">As solicitações para esse URL foram suspensas temporariamente.</translation> -<translation id="6800914069727136216">No pacote de conteúdo</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">A página da web <ph name="URL" /> não está disponível no momento. Ela pode estar sobrecarregada ou fora de operação para manutenção.</translation> <translation id="6831043979455480757">Traduzir</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Concluído</translation> <translation id="8738058698779197622">Para estabelecer uma conexão segura, o relógio precisa ser ajustado corretamente. Isso ocorre porque os certificados que os websites usam para se identificar são válidos apenas por períodos específicos. Como o relógio do seu dispositivo está incorreto, o Chromium não pode verificar esses certificados.</translation> <translation id="8740359287975076522">Não foi possível encontrar o <abbr id="dnsDefinition">endereço DNS</abbr> de <ph name="HOST_NAME" />. Diagnosticando o problema.</translation> +<translation id="8741995161408053644">Sua Conta do Google pode ter outras formas de histórico de navegação em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Refazer excluir</translation> <translation id="8798099450830957504">Padrão</translation> <translation id="8804164990146287819">Política de Privacidade</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 3cc421f5..4a81d2ab 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Identificador de entidade errado</translation> <translation id="1232569758102978740">Sem nome</translation> <translation id="1254117744268754948">Escolher Pasta</translation> -<translation id="1270699273812232624">Permitir itens</translation> <translation id="1285320974508926690">Nunca traduzir este site</translation> <translation id="129553762522093515">Fechados recentemente</translation> <translation id="1339601241726513588">Domínio de inscrição:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtragem</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> não aceitou o certificado de início de sessão ou o certificado de início de sessão pode ter expirado.</translation> <translation id="194030505837763158">Aceder a <ph name="LINK" /></translation> -<translation id="1958820272620550857">Bloquear Itens</translation> <translation id="1962204205936693436">Marcadores de <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Erro de serialização</translation> <translation id="1974060860693918893">Avançadas</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID de recurso:</translation> <translation id="3109728660330352905">Não tem autorização para ver esta página.</translation> <translation id="3118046075435288765">O servidor fechou a ligação inesperadamente.</translation> -<translation id="31454997771848827">Domínios de grupos</translation> <translation id="3145945101586104090">Falha ao descodificar resposta</translation> <translation id="3147485256806412701">Este site está a utilizar um novo domínio de nível superior genérico.</translation> <translation id="3150653042067488994">Erro temporário do servidor</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">O certificado deste site expira em 2016 e a cadeia de certificados inclui um certificado assinado através de SHA-1.</translation> <translation id="382518646247711829">Se utilizar um servidor de proxy...</translation> <translation id="3828924085048779000">Não é permitida uma frase de acesso vazia.</translation> +<translation id="3845539888601087042">A mostrar o histórico do seus dispositivos com sessão iniciada. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Anterior</translation> <translation id="3858027520442213535">Atualizar a data e a hora</translation> <translation id="3884278016824448484">Identificador do dispositivo em conflito</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Assinatura incorreta</translation> <translation id="4268298190799576220">Desta vez, o Chrome não conseguiu validar o seu cartão. Tente novamente mais tarde.</translation> <translation id="4269787794583293679">(Sem nome de utilizador)</translation> -<translation id="4278390842282768270">Permitidos:</translation> <translation id="4300246636397505754">Sugestões superiores</translation> <translation id="4304224509867189079">Iniciar sessão</translation> <translation id="4325863107915753736">Falha ao encontrar o artigo</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Limpar dados de navegação...</translation> <translation id="5430298929874300616">Remover marcador</translation> <translation id="5431657950005405462">O ficheiro não foi encontrado</translation> +<translation id="5435775191620395718">A mostrar o histórico deste dispositivo. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Erro de validação de esquema em "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Mostrar todas as páginas guardadas</translation> <translation id="5452270690849572955">Não é possível encontrar esta página de <ph name="HOST_NAME" /></translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Valor da política</translation> <translation id="6757797048963528358">O dispositivo entrou em suspensão.</translation> <translation id="6781404225664080496">Os pedidos a este URL foram temporariamente limitados.</translation> -<translation id="6800914069727136216">Num pacote de conteúdo</translation> <translation id="6820686453637990663">Código de segurança</translation> <translation id="6830600606572693159">De momento, a página Web em <ph name="URL" /> está indisponível. Poderá estar sobrecarregada ou em manutenção.</translation> <translation id="6831043979455480757">Traduzir</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Concluído</translation> <translation id="8738058698779197622">Para estabelecer uma ligação segura, o relógio tem de ser definido corretamente. Isto deve-se ao facto de os certificados que os Websites utilizam para se identificarem serem apenas válidos para períodos de tempo específicos. Uma vez que o relógio do seu dispositivo está incorreto, o Chromium não consegue validar estes certificados.</translation> <translation id="8740359287975076522">Não foi possível encontrar o <abbr id="dnsDefinition">endereço DNS</abbr> de <ph name="HOST_NAME" />. Estamos a diagnosticar o problema.</translation> +<translation id="8741995161408053644">A sua Conta Google pode ter outras formas do histórico de navegação em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Refazer eliminação</translation> <translation id="8798099450830957504">Predefinição</translation> <translation id="8804164990146287819">Política de Privacidade</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index c958cb2..2eaa2b8 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Identificator greșit pentru entitate</translation> <translation id="1232569758102978740">Fără titlu</translation> <translation id="1254117744268754948">Alegeți dosarul</translation> -<translation id="1270699273812232624">Permiteți aceste elemente</translation> <translation id="1285320974508926690">Nu traduce niciodată acest site</translation> <translation id="129553762522093515">Închise recent</translation> <translation id="1339601241726513588">Domeniu de înregistrare:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrarea</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> nu a acceptat certificatul de conectare sau certificatul de conectare a expirat.</translation> <translation id="194030505837763158">Accesați <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blocați elementele</translation> <translation id="1962204205936693436">Marcaje <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Eroare de serializare</translation> <translation id="1974060860693918893">Avansate</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">ID articol:</translation> <translation id="3109728660330352905">Nu ești autorizat(ă) să vezi această pagină.</translation> <translation id="3118046075435288765">Serverul a închis conexiunea în mod neașteptat.</translation> -<translation id="31454997771848827">Grupați după domenii</translation> <translation id="3145945101586104090">Răspunsul nu a putut fi decodificat</translation> <translation id="3147485256806412701">Acest site folosește un nou domeniu generic de nivel superior.</translation> <translation id="3150653042067488994">Eroare temporară de server</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">Certificatul pentru acest site expiră în 2016, iar lanțul de certificate conține un certificat semnat cu SHA-1.</translation> <translation id="382518646247711829">Dacă utilizați un server proxy...</translation> <translation id="3828924085048779000">Trebuie să fie introdusă expresia de acces.</translation> +<translation id="3845539888601087042">Se afișează istoricul de pe dispozitivele pe care te-ai conectat. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Înapoi</translation> <translation id="3858027520442213535">Actualizează data și ora</translation> <translation id="3884278016824448484">Identificator de gadget în conflict</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">Semnătură greșită</translation> <translation id="4268298190799576220">Momentan, Chromium nu a putut să verifice cardul. Încearcă din nou mai târziu.</translation> <translation id="4269787794583293679">(Niciun nume de utilizator)</translation> -<translation id="4278390842282768270">Se permite</translation> <translation id="4300246636397505754">Sugestii parentale</translation> <translation id="4304224509867189079">Conectează-te</translation> <translation id="4325863107915753736">Articolul nu a fost găsit</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">Șterge datele de navigare...</translation> <translation id="5430298929874300616">Elimină marcajul</translation> <translation id="5431657950005405462">Fișierul nu a fost găsit</translation> +<translation id="5435775191620395718">Se afișează istoricul de pe acest dispozitiv. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Eroare de validare a schemei la „<ph name="ERROR_PATH" />”: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Afișează toate paginile salvate</translation> <translation id="5452270690849572955">Această pagină de pe <ph name="HOST_NAME" /> nu poate fi găsită</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">Valoarea politicii</translation> <translation id="6757797048963528358">Dispozitivul este inactiv.</translation> <translation id="6781404225664080496">Solicitările către această adresă URL au fost limitate temporar.</translation> -<translation id="6800914069727136216">În pachetul de conținut</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Pagina web de la <ph name="URL" /> nu este disponibilă momentan. Poate fi supraîncărcată sau dezactivată pentru lucrări de întreținere.</translation> <translation id="6831043979455480757">Tradu</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">Terminat</translation> <translation id="8738058698779197622">Pentru a stabili o conexiune securizată, ceasul trebuie să fie setat corect. Aceasta deoarece certificatele pe care site-urile le folosesc pentru a se identifica sunt valabile numai pentru anumite intervale de timp. Din moment ce ora de pe dispozitiv este incorectă, Chromium nu poate verifica aceste certificate.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">Adresa DNS</abbr> pentru <ph name="HOST_NAME" /> nu a putut fi găsită. Se diagnostichează problema.</translation> +<translation id="8741995161408053644">Contul Google poate să ofere alte forme ale istoricului de navigare la <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Repetați ștergerea</translation> <translation id="8798099450830957504">Prestabilit</translation> <translation id="8804164990146287819">Politica de confidențialitate</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb index b03d6634..d739574b 100644 --- a/components/strings/components_strings_ru.xtb +++ b/components/strings/components_strings_ru.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Неверный идентификатор объекта</translation> <translation id="1232569758102978740">Без имени</translation> <translation id="1254117744268754948">Выбор папки</translation> -<translation id="1270699273812232624">Разрешить для выбранных элементов</translation> <translation id="1285320974508926690">Никогда не переводить этот сайт</translation> <translation id="129553762522093515">Недавно закрытые</translation> <translation id="1339601241726513588">Регистрация домена:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Фильтры</translation> <translation id="1911837502049945214">Ваш сертификат отклонен сайтом <ph name="HOST_NAME" /> или просрочен.</translation> <translation id="194030505837763158">Перейдите по ссылке: <ph name="LINK" /></translation> -<translation id="1958820272620550857">Блокировать элементы</translation> <translation id="1962204205936693436">Закладки <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Не удалось выполнить сериализацию</translation> <translation id="1974060860693918893">Дополнительные</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Идентификатор объекта:</translation> <translation id="3109728660330352905">У вас нет прав для просмотра этой страницы.</translation> <translation id="3118046075435288765">Сервер неожиданно разорвал соединение.</translation> -<translation id="31454997771848827">Домены группы</translation> <translation id="3145945101586104090">Не удалось декодировать ответ</translation> <translation id="3147485256806412701">Этот сайт использует новый общий домен верхнего уровня.</translation> <translation id="3150653042067488994">Временные неполадки на сервере</translation> @@ -325,7 +322,6 @@ <translation id="4258748452823770588">Подпись недействительна</translation> <translation id="4268298190799576220">Не удалось проверить данные карты. Повторите попытку позже.</translation> <translation id="4269787794583293679">(Не указано)</translation> -<translation id="4278390842282768270">Разрешены</translation> <translation id="4300246636397505754">Подсказки для родительских элементов</translation> <translation id="4304224509867189079">Вход</translation> <translation id="4325863107915753736">Не удалось найти статью</translation> @@ -523,7 +519,6 @@ <translation id="6753269504797312559">Значение правила</translation> <translation id="6757797048963528358">Устройство находится в спящем режиме.</translation> <translation id="6781404225664080496">Запросы к URL приостановлены.</translation> -<translation id="6800914069727136216">В пакете контента</translation> <translation id="6820686453637990663">Код CVC</translation> <translation id="6830600606572693159">Веб-страница по адресу <ph name="URL" /> в настоящее время недоступна. Возможно, она перегружена запросами или отключена для обслуживания.</translation> <translation id="6831043979455480757">Перевести</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index b0d4f22..a4b19f8 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -36,7 +36,6 @@ <translation id="1228893227497259893">Nesprávny identifikátor entity</translation> <translation id="1232569758102978740">Bez názvu</translation> <translation id="1254117744268754948">Vybrať priečinok</translation> -<translation id="1270699273812232624">Povoliť položky</translation> <translation id="1285320974508926690">Nikdy neprekladať tieto webové stránky</translation> <translation id="129553762522093515">Naposledy zatvorené</translation> <translation id="1339601241726513588">Doména registrácie:</translation> @@ -83,7 +82,6 @@ <translation id="1898423065542865115">Filtrovanie</translation> <translation id="1911837502049945214">Web <ph name="HOST_NAME" /> neakceptoval váš prihlasovací certifikát alebo platnosť certifikátu vypršala.</translation> <translation id="194030505837763158">Prejdite na stránku <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokovať položky</translation> <translation id="1962204205936693436">Záložky (<ph name="DOMAIN" />)</translation> <translation id="1973335181906896915">Chyba serializácie</translation> <translation id="1974060860693918893">Rozšírené</translation> @@ -200,7 +198,6 @@ <translation id="3105172416063519923">Identifikátor obsahu:</translation> <translation id="3109728660330352905">Nemáte povolenie na zobrazenie tejto stránky.</translation> <translation id="3118046075435288765">Server neočakávane ukončil spojenie.</translation> -<translation id="31454997771848827">Skupinové domény</translation> <translation id="3145945101586104090">Odpoveď sa nepodarilo dekódovať</translation> <translation id="3147485256806412701">Táto stránka využíva novú všeobecnú doménu najvyššej úrovne</translation> <translation id="3150653042067488994">Dočasná chyba servera</translation> @@ -276,6 +273,7 @@ <translation id="3788090790273268753">Platnosť certifikátu pre tieto stránky vyprší v roku 2016 a reťazec certifikátu obsahuje certifikát podpísaný pomocou funkcie SHA-1.</translation> <translation id="382518646247711829">Ak používate server proxy...</translation> <translation id="3828924085048779000">Prístupová fráza nemôže byť prázdna.</translation> +<translation id="3845539888601087042">Zobrazuje sa história zo zariadení, na ktorých ste prihlásený/-á. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="385051799172605136">Naspäť</translation> <translation id="3858027520442213535">Aktualizovať dátum a čas</translation> <translation id="3884278016824448484">Kolidujúci identifikátor zariadenia</translation> @@ -311,7 +309,6 @@ <translation id="4258748452823770588">Chybný podpis</translation> <translation id="4268298190799576220">Prehliadaču Chromium sa nepodarilo overiť vašu kartu. Skúste to znova neskôr.</translation> <translation id="4269787794583293679">(Žiadne používateľské meno)</translation> -<translation id="4278390842282768270">Povolené</translation> <translation id="4300246636397505754">Návrhy rodiča</translation> <translation id="4304224509867189079">Prihlásiť</translation> <translation id="4325863107915753736">Článok sa nepodarilo nájsť</translation> @@ -396,6 +393,7 @@ <translation id="5421136146218899937">Odstrániť údaje prehliadania...</translation> <translation id="5430298929874300616">Odstrániť záložku</translation> <translation id="5431657950005405462">Súbor sa nenašiel</translation> +<translation id="5435775191620395718">Zobrazuje sa história z tohto zariadenia. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Pri overení schémy sa vyskytla chyba na mieste <ph name="ERROR_PATH" />: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Zobraziť všetky uložené stránky</translation> <translation id="5452270690849572955">Táto stránka webu <ph name="HOST_NAME" /> sa nenašla</translation> @@ -505,7 +503,6 @@ <translation id="6753269504797312559">Hodnota pravidla</translation> <translation id="6757797048963528358">Vaše zariadenie prešlo do režimu spánku.</translation> <translation id="6781404225664080496">Žiadosti na túto webovú adresu boli dočasne obmedzené.</translation> -<translation id="6800914069727136216">V balíku s obsahom</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Webová stránka na adrese <ph name="URL" /> momentálne nie je k dispozícii. Môže byť preťažená alebo na nej prebieha údržba.</translation> <translation id="6831043979455480757">Preložiť</translation> @@ -667,6 +664,7 @@ <translation id="8730621377337864115">Hotovo</translation> <translation id="8738058698779197622">Ak chcete nadviazať zabezpečené pripojenie, vaše hodiny musia byť nastavené správne. Je to preto, že certifikáty, ktoré webové stránky používajú na vlastnú identifikáciu, sú platné iba určitý čas. Keďže nie sú hodiny vášho zariadenia nastavené správne, Chromium nemôže tieto certifikáty overiť.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">Adresa DNS</abbr> webu <ph name="HOST_NAME" /> sa nenašla. Problém sa diagnostikuje.</translation> +<translation id="8741995161408053644">Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Znova vymazať</translation> <translation id="8798099450830957504">Predvolené</translation> <translation id="8804164990146287819">Pravidlá ochrany súkromia</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 14417c7..deec5cc 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Napačni identifikator subjekta</translation> <translation id="1232569758102978740">Brez naslova</translation> <translation id="1254117744268754948">Izbira mape</translation> -<translation id="1270699273812232624">Dovoli elemente</translation> <translation id="1285320974508926690">Nikoli ne prevedi tega spletnega mesta</translation> <translation id="129553762522093515">Nedavno zaprto</translation> <translation id="1339601241726513588">Domena za prijavo:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtriranje</translation> <translation id="1911837502049945214">Spletno mesto <ph name="HOST_NAME" /> ni sprejelo potrdila za prijavo ali pa je to poteklo.</translation> <translation id="194030505837763158">Pojdite na <ph name="LINK" /></translation> -<translation id="1958820272620550857">Blokiraj elemente</translation> <translation id="1962204205936693436">Zaznamki domene <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Napaka pri serializaciji</translation> <translation id="1974060860693918893">Dodatno</translation> @@ -211,7 +209,6 @@ <translation id="3105172416063519923">ID sredstva:</translation> <translation id="3109728660330352905">Nimate dovoljenja za ogled te strani.</translation> <translation id="3118046075435288765">Strežnik je nepričakovano prekinil povezavo.</translation> -<translation id="31454997771848827">Razvrsti po domenah</translation> <translation id="3145945101586104090">Dekodiranje odziva ni uspelo</translation> <translation id="3147485256806412701">To spletno mesto uporablja novo generično vrhnjo domeno.</translation> <translation id="3150653042067488994">Začasna napaka strežnika</translation> @@ -291,6 +288,7 @@ <translation id="3788090790273268753">Potrdilo za to spletno mesto poteče leta 2016 in veriga potrdil vsebuje potrdilo, podpisano z algoritmom SHA-1.</translation> <translation id="382518646247711829">Če uporabite namestniški strežnik ...</translation> <translation id="3828924085048779000">Prazno geslo ni dovoljeno.</translation> +<translation id="3845539888601087042">Prikazana je zgodovina iz naprav, v katere ste prijavljeni. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="385051799172605136">Nazaj</translation> <translation id="3858027520442213535">Posodobi datum in uro</translation> <translation id="3884278016824448484">Identifikator naprave je v sporu</translation> @@ -326,7 +324,6 @@ <translation id="4258748452823770588">Napačen podpis</translation> <translation id="4268298190799576220">Chromium trenutno ni mogel preveriti vaše kartice. Poskusite znova pozneje.</translation> <translation id="4269787794583293679">(Ni uporabniškega imena)</translation> -<translation id="4278390842282768270">Dovoljeno</translation> <translation id="4300246636397505754">Predlogi staršev</translation> <translation id="4304224509867189079">Prijava</translation> <translation id="4325863107915753736">Članka ni bilo mogoče najti</translation> @@ -411,6 +408,7 @@ <translation id="5421136146218899937">Izbriši podatke brskanja ...</translation> <translation id="5430298929874300616">Odstrani zaznamek</translation> <translation id="5431657950005405462">Datoteke ni bilo mogoče najti</translation> +<translation id="5435775191620395718">Prikazana je zgodovina iz te naprave. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="5439770059721715174">Napaka preverjanja sheme pri »<ph name="ERROR_PATH" />«: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Pokaži vse shranjene strani</translation> <translation id="5452270690849572955">Te strani spletnega mesta <ph name="HOST_NAME" /> ni mogoče najti</translation> @@ -523,7 +521,6 @@ <translation id="6753269504797312559">Vrednost pravilnika</translation> <translation id="6757797048963528358">Naprava je preklopila v stanje pripravljenosti.</translation> <translation id="6781404225664080496">Zahteve za ta URL so začasno zaustavljene.</translation> -<translation id="6800914069727136216">V paketu vsebine</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Spletna stran na naslovu <ph name="URL" /> trenutno ni na voljo. Morda je preobremenjena ali nedosegljiva zaradi vzdrževanja.</translation> <translation id="6831043979455480757">Prevedi</translation> @@ -699,6 +696,7 @@ <translation id="8730621377337864115">Končano</translation> <translation id="8738058698779197622">Če želite vzpostaviti varno povezavo, mora biti ura pravilno nastavljena. Potrdila, ki jih uporabljajo spletna mesta za prepoznavanje, namreč veljajo samo določen čas. Ker je ura sistema nepravilna, Chromium teh potrdil ne more preveriti.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">Naslova DNS</abbr> spletnega mesta <ph name="HOST_NAME" /> ni bilo mogoče najti. Poteka diagnosticiranje težave.</translation> +<translation id="8741995161408053644">V Google Računu so morda druge vrste zgodovine brskanja na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Uveljavi izbris</translation> <translation id="8798099450830957504">Privzeto</translation> <translation id="8804164990146287819">Pravilnik o zasebnosti</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb index f0562ad4..0128a8db 100644 --- a/components/strings/components_strings_sr.xtb +++ b/components/strings/components_strings_sr.xtb
@@ -38,7 +38,6 @@ <translation id="1228893227497259893">Погрешан идентификатор ентитета</translation> <translation id="1232569758102978740">Ненасловљено</translation> <translation id="1254117744268754948">Избор директоријума</translation> -<translation id="1270699273812232624">Дозволи ставке</translation> <translation id="1285320974508926690">Никад не преводи овај сајт</translation> <translation id="129553762522093515">Недавно затворено</translation> <translation id="1339601241726513588">Домен уписнице:</translation> @@ -85,7 +84,6 @@ <translation id="1898423065542865115">Филтрирање</translation> <translation id="1911837502049945214">Хост <ph name="HOST_NAME" /> није прихватио сертификат за пријављивање или је сертификат за пријављивање можда истекао.</translation> <translation id="194030505837763158">Идите на <ph name="LINK" /></translation> -<translation id="1958820272620550857">Блокирај ставке</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> – обележивачи</translation> <translation id="1973335181906896915">Грешка при серијализацији</translation> <translation id="1974060860693918893">Напредне опције</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">ИД елемента:</translation> <translation id="3109728660330352905">Немате овлашћење да прегледате ову страницу.</translation> <translation id="3118046075435288765">Сервер је неочекивано прекинуо везу.</translation> -<translation id="31454997771848827">Групиши домене</translation> <translation id="3145945101586104090">Декодирање одговора није успело</translation> <translation id="3147485256806412701">Овај сајт користи нови генерички домен највишег нивоа.</translation> <translation id="3150653042067488994">Привремена грешка на серверу</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">Сертификат за овај сајт истиче 2016, а ланац сертификата садржи сертификат потписан помоћу алгоритма SHA-1.</translation> <translation id="382518646247711829">Ако користите прокси сервер...</translation> <translation id="3828924085048779000">Није дозвољено да поље за приступну фразу буде празно.</translation> +<translation id="3845539888601087042">Приказујемо историју са уређаја на које сте пријављени. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Назад</translation> <translation id="3858027520442213535">Ажурирајте датум и време</translation> <translation id="3884278016824448484">Неусаглашени идентификатор уређаја</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">Неисправан потпис</translation> <translation id="4268298190799576220">Chromium овог пута није успео да верификује картицу. Покушајте поново касније.</translation> <translation id="4269787794583293679">(Без корисничког имена)</translation> -<translation id="4278390842282768270">Дозвољено</translation> <translation id="4300246636397505754">Предлози родитеља</translation> <translation id="4304224509867189079">Пријављивање</translation> <translation id="4325863107915753736">Нисмо успели да пронађемо чланак</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">Обриши податке прегледања...</translation> <translation id="5430298929874300616">Уклоните обележивач</translation> <translation id="5431657950005405462">Датотека није пронађена</translation> +<translation id="5435775191620395718">Приказујемо историју са овог уређаја. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Грешка у валидацији шеме на „<ph name="ERROR_PATH" />“: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Прикажи све сачуване странице</translation> <translation id="5452270690849572955">Није могуће пронаћи ову страницу хоста <ph name="HOST_NAME" /></translation> @@ -518,7 +516,6 @@ <translation id="6753269504797312559">Вредност смерница</translation> <translation id="6757797048963528358">Уређај је прешао у режим спавања.</translation> <translation id="6781404225664080496">Захтеви за овај URL су привремено онемогућени.</translation> -<translation id="6800914069727136216">У пакету садржаја</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Веб-страница на адреси <ph name="URL" /> тренутно је недоступна. Можда је преоптерећена или неактивна због одржавања.</translation> <translation id="6831043979455480757">Преведи</translation> @@ -687,6 +684,7 @@ <translation id="8730621377337864115">Готово</translation> <translation id="8738058698779197622">Да бисте успоставили безбедну везу, сат на уређају мора да буде тачан. То је зато што сертификати које веб-сајтови користе за идентификацију важе само одређени временски период. Пошто сат на вашем уређају није тачан, Chromium не може да верификује ове сертификате.</translation> <translation id="8740359287975076522">Нисмо успели да пронађемо <abbr id="dnsDefinition">DNS адресу</abbr> хоста <ph name="HOST_NAME" />. Покушавамо да утврдимо у чему је проблем.</translation> +<translation id="8741995161408053644">Google налог има друге облике историје прегледања на <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Понови брисање</translation> <translation id="8798099450830957504">Подразумевано</translation> <translation id="8804164990146287819">Политика приватности</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb index bb6756c..fc9ec3eb 100644 --- a/components/strings/components_strings_sv.xtb +++ b/components/strings/components_strings_sv.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Fel enhetsidentifierare</translation> <translation id="1232569758102978740">Namnlös</translation> <translation id="1254117744268754948">Välj mapp</translation> -<translation id="1270699273812232624">Tillåt objekt</translation> <translation id="1285320974508926690">Översätt aldrig den här webbplatsen</translation> <translation id="129553762522093515">Nyligen stängda</translation> <translation id="1339601241726513588">Registreringsdomän:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtrering</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> godkände inte inloggningscertifikatet eller så har inloggningscertifikatet upphört att gälla.</translation> <translation id="194030505837763158">Öppna <ph name="LINK" /></translation> -<translation id="1958820272620550857">Spärra objekt</translation> <translation id="1962204205936693436">Bokmärken på <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Serieproduktionsfel</translation> <translation id="1974060860693918893">Avancerat</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Tillgångs-id:</translation> <translation id="3109728660330352905">Du är inte behörig att se den här sidan.</translation> <translation id="3118046075435288765">Servern kopplade oväntat från anslutningen.</translation> -<translation id="31454997771848827">Gruppdomäner</translation> <translation id="3145945101586104090">Det gick inte att avkoda svaret</translation> <translation id="3147485256806412701">Webbplatsen har en ny generisk toppnivådomän.</translation> <translation id="3150653042067488994">Tillfälligt serverfel</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Certifikatet för den här webbplatsen går ut 2016. Certifikatkedjan innehåller ett certifikat som signerades med SHA-1.</translation> <translation id="382518646247711829">Om du använder en proxyserver ...</translation> <translation id="3828924085048779000">Lösenfrasen får inte vara tom.</translation> +<translation id="3845539888601087042">Historik från enheter som du är inloggad på visas. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Bakåt</translation> <translation id="3858027520442213535">Uppdatera datum och tid</translation> <translation id="3884278016824448484">Motstridiga enhetsidentifierare</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Felaktig signatur</translation> <translation id="4268298190799576220">Chromium kunde inte verifiera kortet. Försök igen senare.</translation> <translation id="4269787794583293679">(Inget användarnamn)</translation> -<translation id="4278390842282768270">Tillåtet</translation> <translation id="4300246636397505754">Föräldratips</translation> <translation id="4304224509867189079">Logga in</translation> <translation id="4325863107915753736">Det gick inte att hitta artikeln</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Ta bort webbinformation...</translation> <translation id="5430298929874300616">Ta bort bokmärke</translation> <translation id="5431657950005405462">Filen hittades inte</translation> +<translation id="5435775191620395718">Historik från den här enheten visas. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Schemavalideringsfel i <ph name="ERROR_PATH" />: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Visa alla sparade sidor</translation> <translation id="5452270690849572955">Sidan på <ph name="HOST_NAME" /> kan inte hittas</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Policyvärde</translation> <translation id="6757797048963528358">Enheten gick i viloläge.</translation> <translation id="6781404225664080496">Begäranden till den här webbadressen har stoppats tillfälligt.</translation> -<translation id="6800914069727136216">I innehållspaket</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Webbsidan <ph name="URL" /> är inte tillgänglig just nu. Den kan vara överbelastad eller ligga nere för underhåll.</translation> <translation id="6831043979455480757">Översätt</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Klart</translation> <translation id="8738058698779197622">Om du vill upprätta en säker anslutning måste klockan vara rätt inställd. Det beror på att certifikaten som webbplatserna använder för att identifiera sig endast är giltiga under vissa tidsperioder. Chromium kan inte verifiera certifikaten eftersom klockan på enheten inte stämmer.</translation> <translation id="8740359287975076522">Det gick inte att hitta <ph name="HOST_NAME" />s <abbr id="dnsDefinition">DNS-adress</abbr>. Diagnostiserar problemet.</translation> +<translation id="8741995161408053644">Andra former av webbhistorik för Google-kontot kan finnas på <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Gör om Ta bort</translation> <translation id="8798099450830957504">Standard</translation> <translation id="8804164990146287819">Sekretesspolicy</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb index b51cb20..0cbd162 100644 --- a/components/strings/components_strings_sw.xtb +++ b/components/strings/components_strings_sw.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Kitambulisho cha huluki kisicho halali</translation> <translation id="1232569758102978740">Hakina Jina</translation> <translation id="1254117744268754948">Chagua Folda</translation> -<translation id="1270699273812232624">Ruhusu vipengee</translation> <translation id="1285320974508926690">Kamwe usitafsiri tovuti hii</translation> <translation id="129553762522093515">Vilivyofungwa hivi karibuni</translation> <translation id="1339601241726513588">Kikoa cha kujiandikisha:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Kuchuja</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> haikukubali cheti chako cha kuingia katika akaunti, au huenda muda wa cheti chako cha kuingia katika akaunti umekwisha.</translation> <translation id="194030505837763158">Nenda kwenye <ph name="LINK" /></translation> -<translation id="1958820272620550857">Zuia vipengee</translation> <translation id="1962204205936693436">Alamisho za <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Hitilafu ya namba tambulishi</translation> <translation id="1974060860693918893">Mipangilio ya kina</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Kitambulisho cha Kipengee:</translation> <translation id="3109728660330352905">Huna idhini ya kuona ukurasa huu.</translation> <translation id="3118046075435288765">Seva iliufunga muunganisho bila kutarajia.</translation> -<translation id="31454997771848827">Vikoa vya kikundi</translation> <translation id="3145945101586104090">Imeshindwa kusimbua jibu</translation> <translation id="3147485256806412701">Tovuti hii inatumia kikoa kipya cha ngazi ya juu.</translation> <translation id="3150653042067488994">Hitilfau ya muda ya seva</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Cheti cha tovuti hii kitakwisha muda mwaka wa 2016, na msururu wa cheti una cheti kilichotiwa sahihi kwa kutumia SHA-1.</translation> <translation id="382518646247711829">Ukitumia seva mbadala...</translation> <translation id="3828924085048779000">Kaulisiri tupu hairuhusiwi.</translation> +<translation id="3845539888601087042">Inaonyesha historia kutoka vifaa vyako ulivyotumia kuingia katika akaunti. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Nyuma</translation> <translation id="3858027520442213535">Sasisha tarehe na saa</translation> <translation id="3884278016824448484">Kitambulisho cha kifaa kinachokinzana</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Sahihi mbaya</translation> <translation id="4268298190799576220">Chromium haikuthibitisha kadi yako wakati huu. Tafadhali jaribu tena baadaye.</translation> <translation id="4269787794583293679">(Hakuna jina la mtumiaji)</translation> -<translation id="4278390842282768270">Vilivyoruhusiwa</translation> <translation id="4300246636397505754">Mapendekezo ya wazazi</translation> <translation id="4304224509867189079">Ingia</translation> <translation id="4325863107915753736">Haikupata makala</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Futa data ya kuvinjari...</translation> <translation id="5430298929874300616">Ondoa alamisho</translation> <translation id="5431657950005405462">Faili yako haikupatikana</translation> +<translation id="5435775191620395718">Inaonyesha historia kutoka kifaa hiki. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Hitilafu katika uhalalishaji wa Skima " <ph name="ERROR_PATH" /> ": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Onyesha kurasa zote zilizohifadhiwa</translation> <translation id="5452270690849572955">Ukurasa wa <ph name="HOST_NAME" /> hii haukupatikana</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">Thamani ya sera</translation> <translation id="6757797048963528358">Kifaa chako kiko katika hali tuli.</translation> <translation id="6781404225664080496">Maombi yanayotumwa kwenye URL hii yamesimamishwa kwa muda.</translation> -<translation id="6800914069727136216">Kifurushi katika maudhui</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Ukurasa wa wavuti katika <ph name="URL" /> haupatikani kwa sasa. Huenda umezidishwa kiwango au unarekebishwa.</translation> <translation id="6831043979455480757">Tafsiri</translation> @@ -697,6 +694,7 @@ <translation id="8730621377337864115">Nimemaliza</translation> <translation id="8738058698779197622">Ili kutambua muunganisho salama, saa yako inahitaji kuwekwa sahihi. Hii ni kwa sababu vyeti ambavyo tovuti hutumia kujitambua ni sahihi kwa vipindi mahususi pekee. Kwa kuwa saa ya kifaa chako si sahihi, Chromium haiwezi kuthibitisha vyeti hivi.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> <abbr id="dnsDefinition">anwani ya DNS</abbr> haikupatikana. Tatizo linachunguzwa.</translation> +<translation id="8741995161408053644">Huenda Akaunti yako ya Google ina aina nyingine za historia ya kuvinjari kwenye <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">Rudia kufuta</translation> <translation id="8798099450830957504">Chaguo Msingi</translation> <translation id="8804164990146287819">Sera ya Faragha</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index b537462d..50f58a20 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -38,7 +38,6 @@ <translation id="1228893227497259893">தவறான உட்பொருள் அடையாளங்காட்டி</translation> <translation id="1232569758102978740">தலைப்பிடாதது</translation> <translation id="1254117744268754948">கோப்புறையைத் தேர்வுசெய்யவும்</translation> -<translation id="1270699273812232624">உருப்படிகளை அனுமதி</translation> <translation id="1285320974508926690">இந்த தளத்தை எப்போதும் மொழிபெயர்க்க வேண்டாம்</translation> <translation id="129553762522093515">சமீபத்தில் மூடியவை</translation> <translation id="1339601241726513588">பதிவுக் களம்:</translation> @@ -85,7 +84,6 @@ <translation id="1898423065542865115">வடிகட்டுதல்</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> உங்கள் உள்நுழைவுச் சான்றிதழை ஏற்கவில்லை அல்லது உங்கள் உள்நுழைவுச் சான்றிதழ் காலாவதியாகியிருக்கலாம்.</translation> <translation id="194030505837763158"><ph name="LINK" /> க்குச் செல்க</translation> -<translation id="1958820272620550857">உருப்படிகளைத் தடு</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> புத்தகக்குறிகள்</translation> <translation id="1973335181906896915">தொடராக்க பிழை</translation> <translation id="1974060860693918893">மேம்பட்டவை</translation> @@ -207,7 +205,6 @@ <translation id="3105172416063519923">பண்பு ஐடி:</translation> <translation id="3109728660330352905">இந்தப் பக்கத்தைக் காண உங்களுக்கு அங்கீகாரம் அளிக்கப்படவில்லை.</translation> <translation id="3118046075435288765">சேவையகம் எதிர்பாராதவிதமாக இணைப்பைத் துண்டித்துவிட்டது.</translation> -<translation id="31454997771848827">குழு களங்கள்</translation> <translation id="3145945101586104090">பதிலைக் குறிநீக்கம் செய்வதில் தோல்வி</translation> <translation id="3147485256806412701">இந்தத் தளம் ஒரு புதிய பொதுவான உயர்-நிலை டொமைனைப் பயன்படுத்துகிறது.</translation> <translation id="3150653042067488994">தற்காலிக சேவையகப் பிழை</translation> @@ -284,6 +281,7 @@ <translation id="3788090790273268753">இந்தத் தளத்திற்கான சான்றிதழ் 2016 ஆம் ஆண்டு காலாவதியாகும், மேலும் சான்றிதழ் சங்கிலியில் SHA-1ஐப் பயன்படுத்திக் கையொப்பமிட்ட சான்றிதழ் உள்ளது.</translation> <translation id="382518646247711829">நீங்கள் பிராக்சி சர்வரைப் பயன்படுத்தினால்....</translation> <translation id="3828924085048779000">வெற்று கடவுச்சொற்றொடருக்கு அனுமதியில்லை.</translation> +<translation id="3845539888601087042">நீங்கள் உள்நுழைந்திருக்கும் சாதனங்களிலிருந்து வரலாற்றைக் காட்டுகிறது. <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" />.</translation> <translation id="385051799172605136">முந்தைய பக்கம்</translation> <translation id="3858027520442213535">தேதியையும் நேரத்தையும் புதுப்பி</translation> <translation id="3884278016824448484">முரண்பாடான சாதன அடையாளங்காட்டி</translation> @@ -319,7 +317,6 @@ <translation id="4258748452823770588">தவறான கையொப்பம்</translation> <translation id="4268298190799576220">இப்போது உங்கள் கார்டை Chromium ஆல் சரிபார்க்க முடியவில்லை. பின்னர் முயற்சிக்கவும்.</translation> <translation id="4269787794583293679">(பயனர்பெயர் இல்லை)</translation> -<translation id="4278390842282768270">அனுமதிக்கப்பட்டது</translation> <translation id="4300246636397505754">மூலப் பரிந்துரைகள்</translation> <translation id="4304224509867189079">உள்நுழை</translation> <translation id="4325863107915753736">கட்டுரையைக் கண்டறிய முடியவில்லை</translation> @@ -404,6 +401,7 @@ <translation id="5421136146218899937">உலாவல் தரவை அழி...</translation> <translation id="5430298929874300616">புத்தகக்குறியை அகற்று</translation> <translation id="5431657950005405462">உங்கள் கோப்பு இல்லை</translation> +<translation id="5435775191620395718">இந்தச் சாதனத்திலிருந்து வரலாற்றைக் காட்டுகிறது. <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" திட்டமுறை சரிபார்ப்புப் பிழை: <ph name="ERROR" /></translation> <translation id="5447330194051379405">அனைத்து சேமிக்கப்பட்ட பக்கங்களையும் காட்டு</translation> <translation id="5452270690849572955">இந்த <ph name="HOST_NAME" /> பக்கத்தைக் கண்டறிய முடியவில்லை</translation> @@ -513,7 +511,6 @@ <translation id="6753269504797312559">கொள்கை மதிப்பு</translation> <translation id="6757797048963528358">உங்கள் சாதனம் உறக்கநிலைக்குச் சென்றது.</translation> <translation id="6781404225664080496">இந்த URLக்கான கோரிக்கைகள் தற்காலிகமாகக் கட்டுப்படுத்தப்பட்டுள்ளன.</translation> -<translation id="6800914069727136216">உள்ளடக்க தொகுப்பில்</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> இல் உள்ள வலைப்பக்கம் தற்போது கிடைக்கவில்லை. அது அதிக சுமையில் இருக்கலாம் அல்லது பராமரிப்பின் காரணமாக செயல்படாமல் இருக்கலாம்.</translation> <translation id="6831043979455480757">மொழிபெயர்</translation> @@ -685,6 +682,7 @@ <translation id="8730621377337864115">முடிந்தது</translation> <translation id="8738058698779197622">பாதுகாப்பான இணைப்பை அமைக்க, கடிகாரம் சரியாக அமைக்கப்பட வேண்டும். இதற்குக் காரணம், இணையதளங்கள் தங்களைத் தானே அடையாளப்படுத்த பயன்படுத்தும் சான்றிதழ்கள் குறிப்பிட்ட காலநேரத்திற்கே செல்லுபடியாகும். உங்கள் சாதனத்தின் கடிகாரம் தவறாக இருந்தால், Chromium இந்தச் சான்றிதழ்களைச் சரிபார்க்காது.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" />’s <abbr id="dnsDefinition">DNS முகவரியைக்</abbr> கண்டறிய முடியவில்லை. சிக்கலை ஆய்வு செய்கிறது.</translation> +<translation id="8741995161408053644">உங்கள் Google கணக்கு <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> என்ற தளத்தில் உலாவல் வரலாறு தொடர்பான பிற தகவல்களைக் கொண்டிருக்கலாம்.</translation> <translation id="8790007591277257123">&நீக்குதலை மீண்டும் செய்</translation> <translation id="8798099450830957504">இயல்புநிலை</translation> <translation id="8804164990146287819">தனியுரிமைக் கொள்கை</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 8e3752c7..f471f02 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">ఎంటిటీ ఐడెంటిఫైయర్ చెల్లదు</translation> <translation id="1232569758102978740">శీర్షికలేనిది</translation> <translation id="1254117744268754948">ఫోల్డర్ను ఎంచుకోండి</translation> -<translation id="1270699273812232624">అంశాలను అనుమతించు</translation> <translation id="1285320974508926690">ఈ సైట్ను అనువదించవద్దు</translation> <translation id="129553762522093515">ఇటీవల మూసివెయ్యబడినవి</translation> <translation id="1339601241726513588">నమోదిత డొమైన్:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">ఫిల్టరింగ్</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> మీ లాగిన్ ప్రమాణపత్రాన్ని ఆమోదించలేదు లేదా మీ లాగిన్ ప్రమాణపత్రం గడువు ముగిసి ఉండవచ్చు.</translation> <translation id="194030505837763158"><ph name="LINK" />కి వెళ్లండి</translation> -<translation id="1958820272620550857">అంశాలను బ్లాక్ చేయి</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> బుక్మార్క్లు</translation> <translation id="1973335181906896915">శ్రేణిగా రూపొందించడంలో లోపం</translation> <translation id="1974060860693918893">ఆధునిక</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">అసెట్ ID:</translation> <translation id="3109728660330352905">మీకు ఈ పేజీని వీక్షించడానికి అధికారం లేదు.</translation> <translation id="3118046075435288765">సర్వర్ ఊహించని విధంగా కనెక్షన్ని మూసివేసింది.</translation> -<translation id="31454997771848827">సమూహ డొమైన్లు</translation> <translation id="3145945101586104090">ప్రతిస్పందనను డీకోడ్ చేయడంలో విఫలమైంది</translation> <translation id="3147485256806412701">ఈ సైట్ కొత్త సాధారణ అగ్ర-స్థాయి డొమైన్ను ఉపయోగిస్తోంది.</translation> <translation id="3150653042067488994">తాత్కాలిక సర్వర్ లోపం</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">ఈ సైట్ ప్రమాణపత్రానికి 2016లో గడువు ముగుస్తుంది, ప్రమాణపత్రం గొలుసులో SHA-1ని ఉపయోగించి సంతకం చేసిన ప్రమాణపత్రం ఉంది.</translation> <translation id="382518646247711829">మీరు ప్రాక్సీ సర్వర్ను ఉపయోగిస్తే...</translation> <translation id="3828924085048779000">ఖాళీ పాస్ఫ్రేజ్ అనుమతించబడదు.</translation> +<translation id="3845539888601087042">మీరు సైన్-ఇన్ చేసిన పరికరాల నుండి చరిత్రను చూపుతోంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" />.</translation> <translation id="385051799172605136">వెనుకకు</translation> <translation id="3858027520442213535">తేదీ మరియు సమయాన్ని నవీకరించు</translation> <translation id="3884278016824448484">వైరుధ్యమైన పరికరం ఐడెంటిఫైయర్</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">చెల్లని సంతకం</translation> <translation id="4268298190799576220">Chromium ప్రస్తుతం మీ కార్డ్ను ధృవీకరించలేకపోయింది. దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="4269787794583293679">(వినియోగదారు పేరు లేదు)</translation> -<translation id="4278390842282768270">అనుమతించబడింది</translation> <translation id="4300246636397505754">తల్లి/తండ్రి సూచనలు</translation> <translation id="4304224509867189079">లాగిన్</translation> <translation id="4325863107915753736">కథనాన్ని కనుగొనడం విఫలమైంది</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">బ్రౌజింగ్ డేటాను క్లియర్ చెయ్యి...</translation> <translation id="5430298929874300616">బుక్మార్క్ని తీసివేయి</translation> <translation id="5431657950005405462">మీ ఫైల్ కనుగొనబడలేదు</translation> +<translation id="5435775191620395718">ఈ పరికరం నుండి చరిత్రను చూపుతోంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />"లో స్కీమా ప్రామాణీకరణ లోపం: <ph name="ERROR" /></translation> <translation id="5447330194051379405">సేవ్ చేసిన అన్ని పేజీలను చూపు</translation> <translation id="5452270690849572955">ఈ <ph name="HOST_NAME" /> పేజీ కనుగొనబడలేదు</translation> @@ -520,7 +518,6 @@ <translation id="6753269504797312559">విధానం విలువ</translation> <translation id="6757797048963528358">మీ పరికరం నిద్రావస్థకి వెళ్లింది.</translation> <translation id="6781404225664080496">ఈ URLకి అభ్యర్థనలు తాత్కాలికంగా నియంత్రించబడ్డాయి.</translation> -<translation id="6800914069727136216">కంటెంట్ ప్యాక్లో</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> వద్ద ఉన్న వెబ్పేజీ ప్రస్తుతానికి అందుబాటులో లేదు. నిర్వహణ కోసం ఇది ఎక్కవ లేదా తక్కవ కావచ్చు.</translation> <translation id="6831043979455480757">అనువదించు</translation> @@ -696,6 +693,7 @@ <translation id="8730621377337864115">పూర్తయింది</translation> <translation id="8738058698779197622">సురక్షిత కనెక్షన్ను ఏర్పాటు చేయడానికి, మీ గడియారాన్ని సరైన సమయానికి సెట్ చేయాలి. ఎందుకంటే వెబ్సైట్లు వాటిని గుర్తించడానికి ఉపయోగించే ప్రమాణపత్రాలు నిర్దిష్ట కాలవ్యవధుల్లో మాత్రమే చెల్లుబాటు అవుతాయి. మీ పరికరం యొక్క గడియారం సమయం తప్పుగా ఉన్నందున, Chromium ఈ ప్రమాణపత్రాలను ధృవీకరించడానికి వీలుపడలేదు.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> <abbr id="dnsDefinition">DNS చిరునామా</abbr> కనుగొనబడలేదు. సమస్యను నిర్ధారిస్తోంది.</translation> +<translation id="8741995161408053644">మీ Google ఖాతా <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />లో ఇతర బ్రౌజింగ్ చరిత్ర రూపాలను కలిగి ఉండవచ్చు.</translation> <translation id="8790007591277257123">&తొలగించడాన్ని పునరావృతం చేయి</translation> <translation id="8798099450830957504">డిఫాల్ట్</translation> <translation id="8804164990146287819">గోప్యతా విధానం</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb index c02abe7..ac24fa4 100644 --- a/components/strings/components_strings_th.xtb +++ b/components/strings/components_strings_th.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">ตัวระบุเอนทิตีไม่ถูกต้อง</translation> <translation id="1232569758102978740">ไม่ระบุชื่อ</translation> <translation id="1254117744268754948">เลือกโฟลเดอร์</translation> -<translation id="1270699273812232624">อนุญาตรายการ</translation> <translation id="1285320974508926690">ไม่ต้องแปลไซต์นี้</translation> <translation id="129553762522093515">เพิ่งปิด</translation> <translation id="1339601241726513588">โดเมนการลงทะเบียน:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">การกรอง</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> ไม่ยอมรับใบรับรองการเข้าสู่ระบบหรือใบรับรองการเข้าสู่ระบบอาจหมดอายุแล้ว</translation> <translation id="194030505837763158">ไปที่ <ph name="LINK" /></translation> -<translation id="1958820272620550857">บล็อกรายการ</translation> <translation id="1962204205936693436">บุ๊กมาร์กของ <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">ข้อผิดพลาดในการจัดเรียง</translation> <translation id="1974060860693918893">ขั้นสูง</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">รหัสสินทรัพย์:</translation> <translation id="3109728660330352905">คุณไม่มีสิทธิ์ดูหน้านี้</translation> <translation id="3118046075435288765">เซิร์ฟเวอร์ปิดการเชื่อมต่อโดยไม่คาดคิด</translation> -<translation id="31454997771848827">โดเมนกลุ่ม</translation> <translation id="3145945101586104090">การถอดรหัสการตอบกลับล้มเหลว</translation> <translation id="3147485256806412701">เว็บไซต์นี้ใช้โดเมนระดับบนสุดทั่วไปใหม่</translation> <translation id="3150653042067488994">ข้อผิดพลาดชั่วคราวของเซิร์ฟเวอร์</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">ใบรับรองของเว็บไซต์นี้จะหมดอายุในปี 2016 และกลุ่มใบรับรองนี้ประกอบด้วยใบรับรองที่ลงนามโดยใช้ SHA-1</translation> <translation id="382518646247711829">หากคุณใช้พร็อกซีเซิร์ฟเวอร์...</translation> <translation id="3828924085048779000">ข้อความรหัสผ่านต้องไม่เว้นว่างไว้</translation> +<translation id="3845539888601087042">กำลังแสดงประวัติการเข้าชมจากอุปกรณ์ที่คุณลงชื่อเข้าใช้ <ph name="BEGIN_LINK" />เรียนรู้เพิ่มเติม<ph name="END_LINK" /></translation> <translation id="385051799172605136">กลับ</translation> <translation id="3858027520442213535">อัปเดตวันที่และเวลา</translation> <translation id="3884278016824448484">ตัวชี้อุปกรณ์ขัดแย้งกัน</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">ลายเซ็นไม่เหมาะสม</translation> <translation id="4268298190799576220">Chromium ไม่สามารถยืนยันบัตรของคุณได้ในขณะนี้ โปรดลองอีกครั้งในภายหลัง</translation> <translation id="4269787794583293679">(ไม่มีชื่อผู้ใช้)</translation> -<translation id="4278390842282768270">อนุญาตแล้ว</translation> <translation id="4300246636397505754">คำแนะนำระดับบนสุด</translation> <translation id="4304224509867189079">เข้าสู่ระบบ</translation> <translation id="4325863107915753736">การค้นหาบทความล้มเหลว</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">ล้างข้อมูลการท่องเว็บ...</translation> <translation id="5430298929874300616">นำบุ๊กมาร์กออก</translation> <translation id="5431657950005405462">ไม่พบไฟล์ของคุณ</translation> +<translation id="5435775191620395718">กำลังแสดงประวัติการเข้าชมจากอุปกรณ์นี้ <ph name="BEGIN_LINK" />เรียนรู้เพิ่มเติม<ph name="END_LINK" /></translation> <translation id="5439770059721715174">ข้อผิดพลาดในการตรวจสอบรูปแบบที่ "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">แสดงหน้าที่บันทึกไว้ทั้งหมด</translation> <translation id="5452270690849572955">ไม่พบหน้า <ph name="HOST_NAME" /> นี้</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">ค่านโยบาย</translation> <translation id="6757797048963528358">อุปกรณ์ของคุณเข้าสู่โหมดสลีปแล้ว</translation> <translation id="6781404225664080496">คำขอที่ส่งไปยัง URL นี้ถูกควบคุมชั่วคราว</translation> -<translation id="6800914069727136216">ในแพคเนื้อหา</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">หน้าเว็บที่ <ph name="URL" /> ไม่สามารถใช้งานได้ในขณะนี้ หน้าเว็บอาจกำลังถูกเรียกใช้งานมากเกินไปหรือถูกปิดเพื่อซ่อมบำรุง</translation> <translation id="6831043979455480757">แปลภาษา</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">เสร็จสิ้น</translation> <translation id="8738058698779197622">หากต้องเริ่มการเชื่อมต่อที่ปลอดภัย นาฬิกาจะต้องตั้งค่าไว้อย่างถูกต้อง เนื่องจากใบรับรองที่เว็บไซต์ใช้เพื่อระบุตนเองจะใช้ได้เฉพาะช่วงเวลาหนึ่งเท่านั้น นาฬิกาของอุปกรณ์ไม่ถูกต้อง Chromium จึงไม่สามารถยืนยันใบรับรองเหล่านี้ได้</translation> <translation id="8740359287975076522">ไม่พบ<abbr id="dnsDefinition">ที่อยู่ DNS</abbr> ของ <ph name="HOST_NAME" /> กำลังวินิจฉัยปัญหา</translation> +<translation id="8741995161408053644">บัญชี Google ของคุณอาจมีประวัติการท่องเว็บในรูปแบบอื่นๆ ที่ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation> <translation id="8790007591277257123">&ทำซ้ำการนำออก</translation> <translation id="8798099450830957504">ค่าเริ่มต้น</translation> <translation id="8804164990146287819">นโยบายส่วนบุคคล</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index 35e5869..461edb3 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Yanlış varlık tanımlayıcı</translation> <translation id="1232569758102978740">Adsız</translation> <translation id="1254117744268754948">Klasör Seçin</translation> -<translation id="1270699273812232624">Öğelere izin ver</translation> <translation id="1285320974508926690">Bu siteyi hiçbir zaman çevirme</translation> <translation id="129553762522093515">Son kapatılan</translation> <translation id="1339601241726513588">Kayıt alan adı:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Filtreleme</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> giriş sertifikanızı kabul etmedi veya giriş sertifikanızın son kullanım tarihi geçmiş olabilir.</translation> <translation id="194030505837763158"><ph name="LINK" /> adresine git</translation> -<translation id="1958820272620550857">Öğeleri engelle</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> Yer İşaretleri</translation> <translation id="1973335181906896915">Serileştirme hatası</translation> <translation id="1974060860693918893">Gelişmiş</translation> @@ -209,7 +207,6 @@ <translation id="3105172416063519923">Öğe Kimliği:</translation> <translation id="3109728660330352905">Bu sayfayı görüntüleme yetkiniz yok.</translation> <translation id="3118046075435288765">Sunucu, bağlantıyı beklenmedik bir şekilde kapattı.</translation> -<translation id="31454997771848827">Alan adlarını grupla</translation> <translation id="3145945101586104090">Yanıtın kodu çözülemedi</translation> <translation id="3147485256806412701">Bu site, yeni bir genel üst düzey alan adı kullanıyor.</translation> <translation id="3150653042067488994">Geçici sunucu hatası</translation> @@ -289,6 +286,7 @@ <translation id="3788090790273268753">Bu siteye ilişkin sertifikanın süresi 2016'da doluyor ve sertifika zinciri, SHA-1 kullanılarak imzalanmış bir sertifika içeriyor.</translation> <translation id="382518646247711829">Proxy sunucu kullanıyorsanız...</translation> <translation id="3828924085048779000">Boş parolaya izin verilmez.</translation> +<translation id="3845539888601087042">Oturum açtığınız cihazlardan geçmiş bilgileri gösteriliyor. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Geri</translation> <translation id="3858027520442213535">Tarih ve saati güncelle</translation> <translation id="3884278016824448484">Çakışan cihaz tanımlayıcısı</translation> @@ -324,7 +322,6 @@ <translation id="4258748452823770588">İmza yanlış</translation> <translation id="4268298190799576220">Chromium, şu anda kartınızı doğrulayamıyor. Lütfen daha sonra tekrar deneyin.</translation> <translation id="4269787794583293679">(Kullanıcı adı yok)</translation> -<translation id="4278390842282768270">İzin verildi</translation> <translation id="4300246636397505754">Ebeveyn önerileri</translation> <translation id="4304224509867189079">Giriş Yap</translation> <translation id="4325863107915753736">Makale bulunamadı</translation> @@ -409,6 +406,7 @@ <translation id="5421136146218899937">Tarama verilerini temizle...</translation> <translation id="5430298929874300616">Yer işaretini kaldır</translation> <translation id="5431657950005405462">Dosyanız bulunamadı</translation> +<translation id="5435775191620395718">Bu cihazdan geçmiş bilgileri gösteriliyor. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">"<ph name="ERROR_PATH" />" üzerinde şema doğrulama hatası: <ph name="ERROR" /></translation> <translation id="5447330194051379405">Kaydedilen tüm sayfaları göster</translation> <translation id="5452270690849572955">Bu <ph name="HOST_NAME" /> sayfası bulunamıyor</translation> @@ -521,7 +519,6 @@ <translation id="6753269504797312559">Politika değeri</translation> <translation id="6757797048963528358">Cihazınız uyku moduna geçti.</translation> <translation id="6781404225664080496">Bu URL'ye gelen istekler geçici olarak sınırlandırılıyor</translation> -<translation id="6800914069727136216">İçerik paketi içinde</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159"><ph name="URL" /> adresindeki web sayfası şu anda kullanılamıyor. Aşırı yüklenmiş veya bakım için kapatılmış olabilir.</translation> <translation id="6831043979455480757">Çevir</translation> @@ -697,6 +694,7 @@ <translation id="8730621377337864115">Bitti</translation> <translation id="8738058698779197622">Güvenli bir bağlantı kurmak için saatinizin doğru ayarlanmış olması gerekir. Bunun sebebi, web sitelerinin kendilerini tanımlamak için kullandıkları sertifikaların sadece belli süreler için geçerli olmasıdır. Cihazınızın saati yanlış olduğundan, Chromium bu sertifikaları doğrulayamaz.</translation> <translation id="8740359287975076522"><ph name="HOST_NAME" /> ana makinesinin <abbr id="dnsDefinition">DNS adresi</abbr> bulunamadı. Sorun teşhis ediliyor.</translation> +<translation id="8741995161408053644">Google Hesabınızın <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> adresinde başka biçimlerde tarama geçmişi olabilir.</translation> <translation id="8790007591277257123">Silmeyi &yeniden yap</translation> <translation id="8798099450830957504">Varsayılan</translation> <translation id="8804164990146287819">Gizlilik Politikası</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb index 595de5f3..bffd9a91 100644 --- a/components/strings/components_strings_uk.xtb +++ b/components/strings/components_strings_uk.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Неправильний ідентифікатор організації</translation> <translation id="1232569758102978740">Без імені</translation> <translation id="1254117744268754948">Вибрати папку</translation> -<translation id="1270699273812232624">Дозволити елементи</translation> <translation id="1285320974508926690">Ніколи не перекладати цей сайт</translation> <translation id="129553762522093515">Нещодавно закриті</translation> <translation id="1339601241726513588">Домен реєстрації:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Фільтрування</translation> <translation id="1911837502049945214">Хост <ph name="HOST_NAME" /> не прийняв ваш сертифікат входу або термін дії сертифіката закінчився.</translation> <translation id="194030505837763158">Перейдіть за адресою <ph name="LINK" /></translation> -<translation id="1958820272620550857">Блокувати елементи</translation> <translation id="1962204205936693436">Закладки <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Помилка серіалізації</translation> <translation id="1974060860693918893">Розширені</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">Ідентифікатор об’єкта:</translation> <translation id="3109728660330352905">У вас немає дозволу переглядати цю сторінку.</translation> <translation id="3118046075435288765">Сервер несподівано перервав з’єднання.</translation> -<translation id="31454997771848827">Групувати домени</translation> <translation id="3145945101586104090">Помилка декодування відповіді</translation> <translation id="3147485256806412701">Цей сайт використовує новий загальний домен верхнього рівня.</translation> <translation id="3150653042067488994">Тимчасова помилка сервера</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Термін дії сертифіката для цього сайту закінчується 2016 року. Ланцюжок сертифіката містить сертифікат, підписаний за допомогою SHA-1.</translation> <translation id="382518646247711829">Якщо ви використовуєте проксі-сервер…</translation> <translation id="3828924085048779000">Порожня парольна фраза заборонена.</translation> +<translation id="3845539888601087042">Показано історію з пристроїв, на яких ви ввійшли в обліковий запис. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Назад</translation> <translation id="3858027520442213535">Оновити дату й час</translation> <translation id="3884278016824448484">Конфліктуючий ідентифікатор пристрою</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Недійсний підпис</translation> <translation id="4268298190799576220">Chromium не вдалося підтвердити вашу картку. Спробуйте пізніше.</translation> <translation id="4269787794583293679">(Немає імені користувача)</translation> -<translation id="4278390842282768270">Дозволено</translation> <translation id="4300246636397505754">Поради для батьків</translation> <translation id="4304224509867189079">Вхід</translation> <translation id="4325863107915753736">Статтю не знайдено</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Очистити дані веб-перегляду...</translation> <translation id="5430298929874300616">Видалити закладку</translation> <translation id="5431657950005405462">Файл не знайдено</translation> +<translation id="5435775191620395718">Показано історію з цього пристрою. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Помилка перевірки схеми за адресою "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Показати всі збережені сторінки</translation> <translation id="5452270690849572955">Сторінку хосту <ph name="HOST_NAME" /> не знайдено</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Значення правила</translation> <translation id="6757797048963528358">Ваш пристрій перейшов у режим сну.</translation> <translation id="6781404225664080496">Запити на цю URL-адресу тимчасово не надсилаються.</translation> -<translation id="6800914069727136216">У пакеті вмісту</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Веб-сторінка за адресою <ph name="URL" /> наразі недоступна. Можливо, вона перевантажена або перебуває на стадії технічного обслуговування.</translation> <translation id="6831043979455480757">Перекласти</translation> @@ -697,6 +694,7 @@ <translation id="8730621377337864115">Готово</translation> <translation id="8738058698779197622">Щоб установити безпечне з’єднання, потрібно правильно вказати час, оскільки сертифікати, які веб-сайти використовують для самоідентифікації дійсні лише протягом певного періоду часу. Час на вашому пристрої неправильний, тому Chromium не може перевірити сертифікати.</translation> <translation id="8740359287975076522"><abbr id="dnsDefinition">Адресу DNS</abbr> хосту <ph name="HOST_NAME" /> не знайдено. Діагностика проблеми.</translation> +<translation id="8741995161408053644">У вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> можуть бути інші форми історії веб-перегляду.</translation> <translation id="8790007591277257123">&Повторити видалення</translation> <translation id="8798099450830957504">За умовчанням</translation> <translation id="8804164990146287819">Політика конфіденційності</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 7b42b77..e74b5d7 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">Số nhận dạng tổ chức không đúng</translation> <translation id="1232569758102978740">Không tên</translation> <translation id="1254117744268754948">Chọn thư mục</translation> -<translation id="1270699273812232624">Cho phép mục</translation> <translation id="1285320974508926690">Không bao giờ dịch trang web này</translation> <translation id="129553762522093515">Các tab đã đóng gần đây</translation> <translation id="1339601241726513588">Tên miền đăng ký:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">Lọc</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> không chấp nhận chứng chỉ đăng nhập của bạn hoặc chứng chỉ đăng nhập của bạn có thể đã hết hạn.</translation> <translation id="194030505837763158">Truy cập <ph name="LINK" /></translation> -<translation id="1958820272620550857">Chặn các mục</translation> <translation id="1962204205936693436">Dấu trang của <ph name="DOMAIN" /></translation> <translation id="1973335181906896915">Lỗi nối tiếp hóa</translation> <translation id="1974060860693918893">Nâng cao</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">ID phần tử:</translation> <translation id="3109728660330352905">Bạn không có quyền xem trang này.</translation> <translation id="3118046075435288765">Máy chủ đã bất ngờ đóng kết nối.</translation> -<translation id="31454997771848827">Miền nhóm</translation> <translation id="3145945101586104090">Không thể giải mã phản hồi</translation> <translation id="3147485256806412701">Trang web này đang sử dụng miền chung mới cấp cao nhất.</translation> <translation id="3150653042067488994">Lỗi máy chủ tạm thời</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">Chứng chỉ cho trang web này sẽ hết hạn vào năm 2016, đồng thời, chuỗi chứng chỉ này chứa một chứng chỉ đã ký bằng SHA-1.</translation> <translation id="382518646247711829">Nếu bạn sử dụng máy chủ proxy...</translation> <translation id="3828924085048779000">Không cho phép cụm mật khẩu trống.</translation> +<translation id="3845539888601087042">Hiển thị lịch sử từ các thiết bị bạn đã đăng nhập. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" />.</translation> <translation id="385051799172605136">Quay lại</translation> <translation id="3858027520442213535">Cập nhật ngày và giờ</translation> <translation id="3884278016824448484">Số nhận dạng thiết bị xung đột</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">Chữ ký không hợp lệ</translation> <translation id="4268298190799576220">Chromium không thể xác minh thẻ của bạn vào lúc này. Vui lòng thử lại sau.</translation> <translation id="4269787794583293679">(Không có tên người dùng)</translation> -<translation id="4278390842282768270">Được cho phép</translation> <translation id="4300246636397505754">Đề xuất chính</translation> <translation id="4304224509867189079">Đăng nhập</translation> <translation id="4325863107915753736">Không tìm được bài viết</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">Xóa dữ liệu duyệt web...</translation> <translation id="5430298929874300616">Xóa dấu trang</translation> <translation id="5431657950005405462">Không tìm thấy tệp của bạn</translation> +<translation id="5435775191620395718">Hiển thị lịch sử từ thiết bị này. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" />.</translation> <translation id="5439770059721715174">Lỗi xác thực lược đồ tại "<ph name="ERROR_PATH" />": <ph name="ERROR" /></translation> <translation id="5447330194051379405">Hiển thị tất cả các trang đã lưu</translation> <translation id="5452270690849572955">Không thể tìm thấy trang <ph name="HOST_NAME" /> này</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">Giá trị chính sách</translation> <translation id="6757797048963528358">Thiết bị của bạn đã chuyển sang chế độ ngủ.</translation> <translation id="6781404225664080496">Yêu cầu tới URL này đã tạm thời bị chặn.</translation> -<translation id="6800914069727136216">Trong gói nội dung</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">Trang web tại <ph name="URL" /> hiện không có. Trang này có thể đã bị quá tải hoặc đang ngừng hoạt động để bảo trì.</translation> <translation id="6831043979455480757">Dịch</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">Hoàn tất</translation> <translation id="8738058698779197622">Để thiết lập kết nối an toàn, bạn cần đặt thời gian đúng cho đồng hồ. Nguyên nhân là do chứng chỉ mà các trang web dùng để tự nhận dạng chỉ có hiệu lực trong khoảng thời gian cụ thể. Vì đồng hồ trên thiết bị của bạn không đúng nên Chromium không thể xác minh các chứng chỉ này.</translation> <translation id="8740359287975076522">Không thể tìm thấy <abbr id="dnsDefinition">địa chỉ DNS</abbr> của <ph name="HOST_NAME" />. Đang chẩn đoán sự cố.</translation> +<translation id="8741995161408053644">Tài khoản Google có thể có các biểu mẫu lịch sử duyệt web khác tại <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="8790007591277257123">&Làm lại xóa</translation> <translation id="8798099450830957504">Mặc định</translation> <translation id="8804164990146287819">Chính sách bảo mật</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index 014acb3..67dc19ab 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -37,7 +37,6 @@ <translation id="1228893227497259893">实体标识符有误</translation> <translation id="1232569758102978740">无标题</translation> <translation id="1254117744268754948">选择文件夹</translation> -<translation id="1270699273812232624">允许历史记录项</translation> <translation id="1285320974508926690">一律不翻译此网站</translation> <translation id="129553762522093515">最近关闭的标签页</translation> <translation id="1339601241726513588">注册域:</translation> @@ -84,7 +83,6 @@ <translation id="1898423065542865115">过滤</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> 不接受您的登录证书,或者您的登录证书可能已过期。</translation> <translation id="194030505837763158">请访问<ph name="LINK" /></translation> -<translation id="1958820272620550857">拦截历史记录项</translation> <translation id="1962204205936693436"><ph name="DOMAIN" />书签</translation> <translation id="1973335181906896915">序列化错误</translation> <translation id="1974060860693918893">高级</translation> @@ -202,7 +200,6 @@ <translation id="3105172416063519923">资产 ID:</translation> <translation id="3109728660330352905">您未获授权,无法查看此网页。</translation> <translation id="3118046075435288765">服务器意外关闭了连接。</translation> -<translation id="31454997771848827">按域分组</translation> <translation id="3145945101586104090">无法对响应解码</translation> <translation id="3147485256806412701">此网站使用的是新的通用顶级域名。</translation> <translation id="3150653042067488994">服务器临时错误</translation> @@ -279,6 +276,7 @@ <translation id="3788090790273268753">此网站的证书将于 2016 年过期,并且此网站的证书链包含使用 SHA-1 签署的证书。</translation> <translation id="382518646247711829">如果您使用代理服务器…</translation> <translation id="3828924085048779000">请勿使用空密码。</translation> +<translation id="3845539888601087042">目前显示的是您登录过的设备中的历史记录。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" />。</translation> <translation id="385051799172605136">后退</translation> <translation id="3858027520442213535">更新日期和时间</translation> <translation id="3884278016824448484">设备标识符存在冲突</translation> @@ -314,7 +312,6 @@ <translation id="4258748452823770588">签名无效</translation> <translation id="4268298190799576220">Chromium 目前无法验证您的信用卡,请稍后重试。</translation> <translation id="4269787794583293679">(无用户名)</translation> -<translation id="4278390842282768270">允许的 Cookie</translation> <translation id="4300246636397505754">家长建议</translation> <translation id="4304224509867189079">登录</translation> <translation id="4325863107915753736">找不到文章</translation> @@ -399,6 +396,7 @@ <translation id="5421136146218899937">清除浏览数据...</translation> <translation id="5430298929874300616">移除书签</translation> <translation id="5431657950005405462">找不到您的文件</translation> +<translation id="5435775191620395718">目前显示的是此设备中的历史记录。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" />。</translation> <translation id="5439770059721715174">“<ph name="ERROR_PATH" />”中存在模式验证错误:<ph name="ERROR" /></translation> <translation id="5447330194051379405">显示所有已保存的网页</translation> <translation id="5452270690849572955">找不到 <ph name="HOST_NAME" /> 的网页</translation> @@ -508,7 +506,6 @@ <translation id="6753269504797312559">政策值</translation> <translation id="6757797048963528358">您的设备已进入休眠模式。</translation> <translation id="6781404225664080496">已暂时禁止向此网址发送请求。</translation> -<translation id="6800914069727136216">在内容包中</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">网址为 <ph name="URL" /> 的网页目前无法访问。该网页可能已超载或关闭进行维护。</translation> <translation id="6831043979455480757">翻译</translation> @@ -673,6 +670,7 @@ <translation id="8730621377337864115">完成</translation> <translation id="8738058698779197622">要建立安全连接,您的时钟设置必须正确。这是因为,网站用于证明身份的证书仅在特定时间段有效。由于您设备的时钟不正确,因此 Chromium 无法验证这些证书。</translation> <translation id="8740359287975076522">无法找到 <ph name="HOST_NAME" /> 的 <abbr id="dnsDefinition">DNS 地址</abbr>。正在诊断该问题。</translation> +<translation id="8741995161408053644">您的 Google 帐户在 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 上可能有其他形式的浏览记录。</translation> <translation id="8790007591277257123">恢复删除(&R)</translation> <translation id="8798099450830957504">默认</translation> <translation id="8804164990146287819">隐私权政策</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 0c82a18..b473a73 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -39,7 +39,6 @@ <translation id="1228893227497259893">實體識別碼錯誤</translation> <translation id="1232569758102978740">未命名</translation> <translation id="1254117744268754948">選擇資料夾</translation> -<translation id="1270699273812232624">允許項目</translation> <translation id="1285320974508926690">一律不翻譯此網站</translation> <translation id="129553762522093515">最近關閉的分頁</translation> <translation id="1339601241726513588">註冊網域:</translation> @@ -86,7 +85,6 @@ <translation id="1898423065542865115">篩選</translation> <translation id="1911837502049945214"><ph name="HOST_NAME" /> 不接受您的登入憑證,或是您的登入憑證可能已過期。</translation> <translation id="194030505837763158">前往 <ph name="LINK" /></translation> -<translation id="1958820272620550857">已封鎖項目</translation> <translation id="1962204205936693436"><ph name="DOMAIN" /> 書籤</translation> <translation id="1973335181906896915">序列化錯誤</translation> <translation id="1974060860693918893">進階</translation> @@ -210,7 +208,6 @@ <translation id="3105172416063519923">資產 ID:</translation> <translation id="3109728660330352905">您未獲得授權,無法瀏覽這個網頁。</translation> <translation id="3118046075435288765">伺服器意外中斷連線。</translation> -<translation id="31454997771848827">群組網域</translation> <translation id="3145945101586104090">無法將回應解碼</translation> <translation id="3147485256806412701">這個網站使用的是最新通用頂層網域。</translation> <translation id="3150653042067488994">伺服器暫時發生錯誤</translation> @@ -290,6 +287,7 @@ <translation id="3788090790273268753">這個網站的憑證將於 2016 年到期,且憑證鏈結包含使用 SHA-1 進行簽署的憑證。</translation> <translation id="382518646247711829">如果您使用 Proxy 伺服器...</translation> <translation id="3828924085048779000">通關密語欄位不得留空。</translation> +<translation id="3845539888601087042">目前顯示的歷史紀錄來源包括您已登入帳戶的所有裝置。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="385051799172605136">返回</translation> <translation id="3858027520442213535">更新日期和時間</translation> <translation id="3884278016824448484">裝置識別碼發生衝突</translation> @@ -325,7 +323,6 @@ <translation id="4258748452823770588">簽名有誤</translation> <translation id="4268298190799576220">Chromium 目前無法驗證您的信用卡,請稍後再試。</translation> <translation id="4269787794583293679">(沒有使用者名稱)</translation> -<translation id="4278390842282768270">允許</translation> <translation id="4300246636397505754">家長建議</translation> <translation id="4304224509867189079">登入</translation> <translation id="4325863107915753736">找不到文章</translation> @@ -410,6 +407,7 @@ <translation id="5421136146218899937">清除瀏覽資料...</translation> <translation id="5430298929874300616">移除書籤</translation> <translation id="5431657950005405462">找不到您的檔案</translation> +<translation id="5435775191620395718">目前顯示這個裝置的歷史紀錄。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="5439770059721715174">「<ph name="ERROR_PATH" />」發生架構驗證錯誤:<ph name="ERROR" /></translation> <translation id="5447330194051379405">顯示所有儲存的網頁</translation> <translation id="5452270690849572955">找不到 <ph name="HOST_NAME" /> 網頁</translation> @@ -522,7 +520,6 @@ <translation id="6753269504797312559">政策值</translation> <translation id="6757797048963528358">您的裝置已進入睡眠模式。</translation> <translation id="6781404225664080496">目前暫時限制傳送要求至這個網址。</translation> -<translation id="6800914069727136216">在內容套件中</translation> <translation id="6820686453637990663">CVC</translation> <translation id="6830600606572693159">位於 <ph name="URL" /> 的網頁目前無法使用,可能因為超載或為了維護而關閉中。</translation> <translation id="6831043979455480757">翻譯</translation> @@ -698,6 +695,7 @@ <translation id="8730621377337864115">完成</translation> <translation id="8738058698779197622">您必須正確設定時鐘,才能建立安全連線。這是因為網站驗證身分時所使用的憑證僅於特定一段時間內有效。由於您裝置的時鐘不正確,因此 Chromium 無法驗證這些憑證。</translation> <translation id="8740359287975076522">找不到 <ph name="HOST_NAME" /> 的 <abbr id="dnsDefinition">DNS 位址</abbr>,正在診斷問題。</translation> +<translation id="8741995161408053644">您仍可前往 <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> 存取 Google 帳戶中保存的各種瀏覽紀錄。</translation> <translation id="8790007591277257123">重做刪除(&R)</translation> <translation id="8798099450830957504">預設</translation> <translation id="8804164990146287819">隱私權政策</translation>
diff --git a/components/sync_sessions/sessions_sync_manager.cc b/components/sync_sessions/sessions_sync_manager.cc index 0b9eb7e5..209fea22a 100644 --- a/components/sync_sessions/sessions_sync_manager.cc +++ b/components/sync_sessions/sessions_sync_manager.cc
@@ -43,7 +43,7 @@ // Default number of days without activity after which a session is considered // stale and becomes a candidate for garbage collection. -const size_t kDefaultStaleSessionThresholdDays = 14; // 2 weeks. +const int kDefaultStaleSessionThresholdDays = 14; // 2 weeks. // Comparator function for use with std::sort that will sort tabs by // descending timestamp (i.e., most recent first). @@ -515,6 +515,16 @@ // deletions, the header node will be updated and foreign tab will // get deleted. DisassociateForeignSession(session.session_tag()); + } else if (session.has_tab()) { + // The challenge here is that we don't know if this tab deletion is + // being processed before or after the parent was updated to no longer + // references the tab. Or, even more extreme, the parent has been + // deleted as well. Tell the tracker to do what it can. The header's + // update will mostly get us into the correct state, the only thing + // this deletion needs to accomplish is make sure we never tell sync + // to delete this tab later during garbage collection. + session_tracker_.DeleteForeignTab(session.session_tag(), + session.tab_node_id()); } break; case syncer::SyncChange::ACTION_ADD: @@ -523,9 +533,6 @@ // We should only ever receive a change to our own machine's session // info if encryption was turned on. In that case, the data is still // the same, so we can ignore. - // TODO(skym): Is it really safe to return here? Why not continue? - // Couldn't there be multiple SessionSpecifics in the SyncChangeList - // that contain different session tags? LOG(WARNING) << "Dropping modification to local session."; return syncer::SyncError(); } @@ -558,7 +565,8 @@ bool SessionsSyncManager::GetAllForeignSessions( std::vector<const sync_driver::SyncedSession*>* sessions) { - if (!session_tracker_.LookupAllForeignSessions(sessions)) + if (!session_tracker_.LookupAllForeignSessions( + sessions, SyncedSessionTracker::PRESENTABLE)) return false; std::sort(sessions->begin(), sessions->end(), SessionsRecencyComparator); return true; @@ -571,8 +579,6 @@ bool found_current_header = false; for (syncer::SyncDataList::const_iterator it = sync_data.begin(); it != sync_data.end(); ++it) { - // TODO(skym): Why don't we ever look at data.change_type()? Why is this - // code path so much different from ProcessSyncChanges? const syncer::SyncData& data = *it; DCHECK(data.GetSpecifics().has_session()); const sync_pb::SessionSpecifics& specifics = data.GetSpecifics().session(); @@ -608,6 +614,16 @@ } } } + + // Cleanup all foreign sessions, since orphaned tabs may have been added after + // the header. + std::vector<const sync_driver::SyncedSession*> sessions; + session_tracker_.LookupAllForeignSessions(&sessions, + SyncedSessionTracker::RAW); + for (const auto* session : sessions) { + session_tracker_.CleanupSession(session->session_tag); + } + return found_current_header; } @@ -663,6 +679,10 @@ if (session_tracker_.LookupSessionTab(foreign_session_tag, tab_id, &existing_tab) && existing_tab->timestamp > modification_time) { + // Force the tracker to remember this tab node id, even if it isn't + // currently being used. + session_tracker_.GetTab(foreign_session_tag, tab_id, + specifics.tab_node_id()); DVLOG(1) << "Ignoring " << foreign_session_tag << "'s session tab " << tab_id << " with earlier modification time"; return; @@ -740,7 +760,8 @@ break; } } - session_header->modified_time = mtime; + session_header->modified_time = + std::max(mtime, session_header->modified_time); } // static @@ -811,16 +832,12 @@ std::set<int> tab_node_ids_to_delete; session_tracker_.LookupTabNodeIds(tag, &tab_node_ids_to_delete); - if (!DisassociateForeignSession(tag)) { - // We don't have any data for this session, our work here is done! - return; + if (DisassociateForeignSession(tag)) { + // Only tell sync to delete the header if there was one. + change_output->push_back( + syncer::SyncChange(FROM_HERE, SyncChange::ACTION_DELETE, + SyncData::CreateLocalDelete(tag, syncer::SESSIONS))); } - - // Prepare deletes for the meta-node as well as individual tab nodes. - change_output->push_back( - syncer::SyncChange(FROM_HERE, SyncChange::ACTION_DELETE, - SyncData::CreateLocalDelete(tag, syncer::SESSIONS))); - for (std::set<int>::const_iterator it = tab_node_ids_to_delete.begin(); it != tab_node_ids_to_delete.end(); ++it) { change_output->push_back(syncer::SyncChange( @@ -834,11 +851,7 @@ bool SessionsSyncManager::DisassociateForeignSession( const std::string& foreign_session_tag) { - if (foreign_session_tag == current_machine_tag()) { - DVLOG(1) << "Local session deleted! Doing nothing until a navigation is " - << "triggered."; - return false; - } + DCHECK_NE(foreign_session_tag, current_machine_tag()); DVLOG(1) << "Disassociating session " << foreign_session_tag; return session_tracker_.DeleteSession(foreign_session_tag); } @@ -1030,22 +1043,18 @@ void SessionsSyncManager::DoGarbageCollection() { std::vector<const sync_driver::SyncedSession*> sessions; - if (!GetAllForeignSessions(&sessions)) + if (!session_tracker_.LookupAllForeignSessions(&sessions, + SyncedSessionTracker::RAW)) return; // No foreign sessions. // Iterate through all the sessions and delete any with age older than // |stale_session_threshold_days_|. syncer::SyncChangeList changes; - for (std::vector<const sync_driver::SyncedSession*>::const_iterator iter = - sessions.begin(); - iter != sessions.end(); ++iter) { - const sync_driver::SyncedSession* session = *iter; + for (const auto* session : sessions) { int session_age_in_days = (base::Time::Now() - session->modified_time).InDays(); - std::string session_tag = session->session_tag; - if (session_age_in_days > 0 && // If false, local clock is not trustworty. - static_cast<size_t>(session_age_in_days) > - stale_session_threshold_days_) { + if (session_age_in_days > stale_session_threshold_days_) { + std::string session_tag = session->session_tag; DVLOG(1) << "Found stale session " << session_tag << " with age " << session_age_in_days << ", deleting."; DeleteForeignSessionInternal(session_tag, &changes);
diff --git a/components/sync_sessions/sessions_sync_manager.h b/components/sync_sessions/sessions_sync_manager.h index ba48b24b..dcce6b0 100644 --- a/components/sync_sessions/sessions_sync_manager.h +++ b/components/sync_sessions/sessions_sync_manager.h
@@ -160,6 +160,10 @@ FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, BlockedNavigations); FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, DeleteForeignSession); FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, + ProcessForeignDeleteTabsWithShadowing); + FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, + ProcessForeignDeleteTabsWithReusedNodeIds); + FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, SaveUnassociatedNodesForReassociation); FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, MergeDeletesCorruptNode); FRIEND_TEST_ALL_PREFIXES(SessionsSyncManagerTest, @@ -342,7 +346,7 @@ // Number of days without activity after which we consider a session to be // stale and a candidate for garbage collection. - size_t stale_session_threshold_days_; + int stale_session_threshold_days_; scoped_ptr<LocalSessionEventRouter> local_event_router_;
diff --git a/components/sync_sessions/synced_session.h b/components/sync_sessions/synced_session.h index 5e9d7ba..d9696dc 100644 --- a/components/sync_sessions/synced_session.h +++ b/components/sync_sessions/synced_session.h
@@ -6,6 +6,7 @@ #define COMPONENTS_SYNC_SESSIONS_SYNCED_SESSION_H_ #include <map> +#include <set> #include <string> #include "base/macros.h" @@ -51,13 +52,25 @@ // Type of device this session is from. DeviceType device_type; - // Last time this session was modified remotely. + // Last time this session was modified remotely. This is the max of the header + // and all children tab mtimes. base::Time modified_time; // Map of windows that make up this session. Windowws are owned by the session // itself and free'd on destruction. SyncedWindowMap windows; + // A tab node id is part of the identifier for the sync tab objects. Tab node + // ids are not used for interacting with the model/browser tabs. However, when + // when we want to delete a foreign session, we use these values to inform + // sync which tabs to delete. We are extracting these tab node ids from + // individual session (tab, not header) specifics, but store them here in the + // SyncedSession during runtime. We do this because tab node ids may be reused + // for different tabs, and tracking which tab id is currently associated with + // each tab node id is both difficult and unnecessary. See comments at + // SyncedSessionTracker::GetTabImpl for a concrete example of id reuse. + std::set<int> tab_node_ids; + // Converts the DeviceType enum value to a string. This is used // in the NTP handler for foreign sessions for matching session // types to an icon style.
diff --git a/components/sync_sessions/synced_session_tracker.cc b/components/sync_sessions/synced_session_tracker.cc index 5dbcf14..abff52e7 100644 --- a/components/sync_sessions/synced_session_tracker.cc +++ b/components/sync_sessions/synced_session_tracker.cc
@@ -28,6 +28,19 @@ return false; } +// Presentable means |foreign_session| must have syncable content. +bool IsPresentable(sync_sessions::SyncSessionsClient* sessions_client, + sync_driver::SyncedSession* foreign_session) { + for (sync_driver::SyncedSession::SyncedWindowMap::const_iterator iter = + foreign_session->windows.begin(); + iter != foreign_session->windows.end(); ++iter) { + if (ShouldSyncSessionWindow(sessions_client, *(iter->second))) { + return true; + } + } + return false; +} + } // namespace SyncedSessionTracker::SyncedSessionTracker( @@ -44,29 +57,18 @@ } bool SyncedSessionTracker::LookupAllForeignSessions( - std::vector<const sync_driver::SyncedSession*>* sessions) const { + std::vector<const sync_driver::SyncedSession*>* sessions, + SessionLookup lookup) const { DCHECK(sessions); sessions->clear(); - // Fill vector of sessions from our synced session map. for (SyncedSessionMap::const_iterator i = synced_session_map_.begin(); i != synced_session_map_.end(); ++i) { - // Only include foreign sessions with open tabs. sync_driver::SyncedSession* foreign_session = i->second; - if (i->first != local_session_tag_ && !foreign_session->windows.empty()) { - bool found_tabs = false; - for (sync_driver::SyncedSession::SyncedWindowMap::const_iterator iter = - foreign_session->windows.begin(); - iter != foreign_session->windows.end(); ++iter) { - if (ShouldSyncSessionWindow(sessions_client_, *(iter->second))) { - found_tabs = true; - break; - } - } - if (found_tabs) - sessions->push_back(foreign_session); + if (i->first != local_session_tag_ && + (lookup == RAW || IsPresentable(sessions_client_, foreign_session))) { + sessions->push_back(foreign_session); } } - return !sessions->empty(); } @@ -95,34 +97,31 @@ SyncedTabMap::const_iterator tab_map_iter = synced_tab_map_.find(tag); if (tab_map_iter == synced_tab_map_.end()) { // We have no record of this session. - *tab = NULL; + *tab = nullptr; return false; } IDToSessionTabMap::const_iterator tab_iter = tab_map_iter->second.find(tab_id); if (tab_iter == tab_map_iter->second.end()) { // We have no record of this tab. - *tab = NULL; + *tab = nullptr; return false; } *tab = tab_iter->second.tab_ptr; return true; } -bool SyncedSessionTracker::LookupTabNodeIds(const std::string& session_tag, +void SyncedSessionTracker::LookupTabNodeIds(const std::string& session_tag, std::set<int>* tab_node_ids) { tab_node_ids->clear(); - SyncedTabMap::const_iterator tab_map_iter = synced_tab_map_.find(session_tag); - if (tab_map_iter == synced_tab_map_.end()) - return false; - - IDToSessionTabMap::const_iterator tab_iter = tab_map_iter->second.begin(); - while (tab_iter != tab_map_iter->second.end()) { - if (tab_iter->second.tab_node_id != TabNodePool::kInvalidTabNodeID) - tab_node_ids->insert(tab_iter->second.tab_node_id); - ++tab_iter; + SyncedSessionMap::const_iterator session_iter = + synced_session_map_.find(session_tag); + if (session_iter != synced_session_map_.end()) { + tab_node_ids->insert(session_iter->second->tab_node_ids.begin(), + session_iter->second->tab_node_ids.end()); } - return true; + // Incase an invalid node id was included, remove it. + tab_node_ids->erase(TabNodePool::kInvalidTabNodeID); } bool SyncedSessionTracker::LookupLocalSession( @@ -153,23 +152,30 @@ } bool SyncedSessionTracker::DeleteSession(const std::string& session_tag) { - bool found_session = false; + // Cleanup first, which will take care of orphaned SessionTab and + // SessionWindow objects. The SyncedSession destructor will only delete things + // that it is currently the parent of. + CleanupSession(session_tag); + + bool header_existed = false; SyncedSessionMap::iterator iter = synced_session_map_.find(session_tag); if (iter != synced_session_map_.end()) { sync_driver::SyncedSession* session = iter->second; + // An implicitly created session that has children tabs but no header node + // will have never had the device_type changed from unset. + header_existed = + session->device_type != sync_driver::SyncedSession::TYPE_UNSET; synced_session_map_.erase(iter); // SyncedSession's destructor will trigger deletion of windows which will in - // turn trigger the deletion of tabs. This doens't affect wrappers. + // turn trigger the deletion of tabs. This doesn't affect wrappers. delete session; - found_session = true; } + // These two erase(...) calls only affect the wrappers. synced_window_map_.erase(session_tag); - // It's possible there was no header node but there were tab nodes. - if (synced_tab_map_.erase(session_tag) > 0) { - found_session = true; - } - return found_session; + synced_tab_map_.erase(session_tag); + + return header_existed; } void SyncedSessionTracker::ResetSessionTracking( @@ -198,8 +204,17 @@ } } +void SyncedSessionTracker::DeleteForeignTab(const std::string& session_tag, + int tab_node_id) { + SyncedSessionMap::const_iterator session_iter = + synced_session_map_.find(session_tag); + if (session_iter != synced_session_map_.end()) { + session_iter->second->tab_node_ids.erase(tab_node_id); + } +} + bool SyncedSessionTracker::DeleteOldSessionWindowIfNecessary( - SessionWindowWrapper window_wrapper) { + const SessionWindowWrapper& window_wrapper) { if (!window_wrapper.owned) { DVLOG(1) << "Deleting closed window " << window_wrapper.window_ptr->window_id.id(); @@ -213,7 +228,7 @@ } bool SyncedSessionTracker::DeleteOldSessionTabIfNecessary( - SessionTabWrapper tab_wrapper) { + const SessionTabWrapper& tab_wrapper) { if (!tab_wrapper.owned) { if (VLOG_IS_ON(1)) { sessions::SessionTab* tab_ptr = tab_wrapper.tab_ptr; @@ -265,7 +280,7 @@ void SyncedSessionTracker::PutWindowInSession(const std::string& session_tag, SessionID::id_type window_id) { - sessions::SessionWindow* window_ptr = NULL; + sessions::SessionWindow* window_ptr = nullptr; IDToSessionWindowMap::iterator iter = synced_window_map_[session_tag].find(window_id); if (iter != synced_window_map_[session_tag].end()) { @@ -306,10 +321,6 @@ // We know that we will eventually process (via GetTab) every single tab node // in the system, so we permit ourselves to use kInvalidTabNodeID here and // rely on the later update to build the mapping (or a restart). - // TODO(tim): Bug 98892. Update comment when Sync API conversion finishes to - // mention that in the meantime, the only ill effect is that we may not be - // able to fully clean up a stale foreign session, but it will get garbage - // collected eventually. sessions::SessionTab* tab_ptr = GetTabImpl(session_tag, tab_id, TabNodePool::kInvalidTabNodeID); @@ -338,7 +349,7 @@ std::vector<sessions::SessionTab*>& window_tabs = GetSession(session_tag)->windows[window_id]->tabs; if (window_tabs.size() <= tab_index) { - window_tabs.resize(tab_index + 1, NULL); + window_tabs.resize(tab_index + 1, nullptr); } DCHECK(!window_tabs[tab_index]); window_tabs[tab_index] = tab_ptr; @@ -356,7 +367,7 @@ const std::string& session_tag, SessionID::id_type tab_id, int tab_node_id) { - sessions::SessionTab* tab_ptr = NULL; + sessions::SessionTab* tab_ptr = nullptr; IDToSessionTabMap::iterator iter = synced_tab_map_[session_tag].find(tab_id); if (iter != synced_tab_map_[session_tag].end()) { tab_ptr = iter->second.tab_ptr; @@ -381,8 +392,8 @@ // the tab itself, so the tab node id wasn't available at the time and // is currenlty kInvalidTabNodeID. // - // In both cases, we update the tab_node_id. - iter->second.tab_node_id = tab_node_id; + // In both cases, we can safely throw it into the set of node ids. + GetSession(session_tag)->tab_node_ids.insert(tab_node_id); } if (VLOG_IS_ON(1)) { @@ -403,8 +414,9 @@ tab_ptr = new sessions::SessionTab(); tab_ptr->tab_id.set_id(tab_id); synced_tab_map_[session_tag][tab_id] = - SessionTabWrapper(tab_ptr, NOT_OWNED, tab_node_id); + SessionTabWrapper(tab_ptr, NOT_OWNED); unmapped_tabs_.insert(tab_ptr); + GetSession(session_tag)->tab_node_ids.insert(tab_node_id); DVLOG(1) << "Getting " << (session_tag == local_session_tag_ ? "local session" : session_tag) @@ -416,6 +428,13 @@ } void SyncedSessionTracker::Clear() { + // Cleanup first, which will take care of orphaned SessionTab and + // SessionWindow objects. The SyncedSession destructor will only delete things + // that is currently parents. + for (const auto& kv : synced_session_map_) { + CleanupSession(kv.first); + } + // Delete SyncedSession objects (which also deletes all their windows/tabs). STLDeleteValues(&synced_session_map_);
diff --git a/components/sync_sessions/synced_session_tracker.h b/components/sync_sessions/synced_session_tracker.h index a45a80e..4fab1c3 100644 --- a/components/sync_sessions/synced_session_tracker.h +++ b/components/sync_sessions/synced_session_tracker.h
@@ -31,6 +31,12 @@ // the local session (whose tag we maintain separately). class SyncedSessionTracker { public: + // Different ways to lookup/filter tabs. + enum SessionLookup { + RAW, // Return all foreign sessions. + PRESENTABLE // Have one window with at least one tab with syncable content. + }; + explicit SyncedSessionTracker( sync_sessions::SyncSessionsClient* sessions_client); ~SyncedSessionTracker(); @@ -40,10 +46,12 @@ // Fill a preallocated vector with all foreign sessions we're tracking (skips // the local session object). SyncedSession ownership remains within the - // SyncedSessionTracker. + // SyncedSessionTracker. Lookup parameter is used to decide which foreign tabs + // should be include. // Returns true if we had foreign sessions to fill it with, false otherwise. bool LookupAllForeignSessions( - std::vector<const sync_driver::SyncedSession*>* sessions) const; + std::vector<const sync_driver::SyncedSession*>* sessions, + SessionLookup lookup) const; // Attempts to look up the session windows associatd with the session given // by |session_tag|. Ownership Of SessionWindows stays within the @@ -71,7 +79,7 @@ bool LookupLocalSession(const sync_driver::SyncedSession** output) const; // Returns a pointer to the SyncedSession object associated with - // |session_tag|. If none exists, creates one. Ownership of the + // |session_tag|. If none exists, creates one. Ownership of the // SyncedSession remains within the SyncedSessionTracker. sync_driver::SyncedSession* GetSession(const std::string& session_tag); @@ -89,6 +97,15 @@ // windows and tabs not owned. void ResetSessionTracking(const std::string& session_tag); + // Tracks the deletion of a foreign tab by removing the given |tab_node_id| + // from the parent session. Doesn't actually remove any tab objects because + // the header may have or may not have already been updated to no longer + // parent this tab. Regardless, when the header is updated then cleanup will + // remove the actual tab data. However, this method always needs to be called + // upon foreign tab deletion, otherwise LookupTabNodeIds(...) may return + // already deleted tab node ids. + void DeleteForeignTab(const std::string& session_tag, int tab_node_id); + // Deletes those windows and tabs associated with |session_tag| that are no // longer owned. // See ResetSessionTracking(...). @@ -122,15 +139,7 @@ // Fills |tab_node_ids| with the tab node ids (see GetTab) for all the tabs* // associated with the session having tag |session_tag|. - // Returns false if we don't have any record of the session. If no tabs were - // found as part of the session, the return value will be true but - // |tab_node_ids| will be empty. - // - // * - note that this only returns the ids we're aware of; it's possible we - // don't have the latest tab state from a foreign session and it's also - // possible we just haven't updated the tab_node_id for a tab yet, so the - // result list should not be treated as authoritative. - bool LookupTabNodeIds(const std::string& session_tag, + void LookupTabNodeIds(const std::string& session_tag, std::set<int>* tab_node_ids); // Free the memory for all dynamically allocated objects and clear the @@ -176,21 +185,13 @@ // mapped tabs, unmapped tabs are owned by the unmapped_tabs_ container). // Note, we pair pointers with bools so that we can track what is owned and // what can be deleted (see ResetSessionTracking(..) and CleanupSession(..) - // above). - // The wrappers also serve as a convenient place to augment state stored in - // SessionTab for sync purposes, such as |tab_node_id|. - // IsOwned is used as a wrapper constructor parameter for readability. + // above). IsOwned is used as a wrapper constructor parameter for readability. struct SessionTabWrapper { - SessionTabWrapper() - : tab_ptr(NULL), - owned(false), - tab_node_id(TabNodePool::kInvalidTabNodeID) {} - SessionTabWrapper(sessions::SessionTab* tab_ptr, - OwnedState owned, - int tab_node_id) - : tab_ptr(tab_ptr), - owned(owned == IS_OWNED), - tab_node_id(tab_node_id) {} + SessionTabWrapper() : tab_ptr(NULL), owned(false) {} + + SessionTabWrapper(sessions::SessionTab* tab_ptr, OwnedState owned) + : tab_ptr(tab_ptr), owned(owned == IS_OWNED) {} + sessions::SessionTab* tab_ptr; // This is used as part of a mark-and-sweep approach to garbage @@ -198,11 +199,6 @@ // ResetSessionTracking will clear |owned| bits, and if it is not claimed // by a window by the time CleanupSession is called it will be deleted. bool owned; - - // This lets us identify the sync node that is "backing" this tab in the - // sync model, whether it is part of a local or foreign session. The - // "tab node id" is described in session_specifics.proto. - int tab_node_id; }; typedef std::map<SessionID::id_type, SessionTabWrapper> IDToSessionTabMap; typedef std::map<std::string, IDToSessionTabMap> SyncedTabMap; @@ -221,8 +217,9 @@ typedef std::map<std::string, sync_driver::SyncedSession*> SyncedSessionMap; // Helper methods for deleting SessionWindows and SessionTabs without owners. - bool DeleteOldSessionWindowIfNecessary(SessionWindowWrapper window_wrapper); - bool DeleteOldSessionTabIfNecessary(SessionTabWrapper tab_wrapper); + bool DeleteOldSessionWindowIfNecessary( + const SessionWindowWrapper& window_wrapper); + bool DeleteOldSessionTabIfNecessary(const SessionTabWrapper& tab_wrapper); // Implementation for GetTab(...) above, permits invalid tab_node_id. sessions::SessionTab* GetTabImpl(const std::string& session_tag,
diff --git a/components/sync_sessions/synced_session_tracker_unittest.cc b/components/sync_sessions/synced_session_tracker_unittest.cc index f7886e3d..0b3c034 100644 --- a/components/sync_sessions/synced_session_tracker_unittest.cc +++ b/components/sync_sessions/synced_session_tracker_unittest.cc
@@ -70,7 +70,8 @@ TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { std::vector<const sync_driver::SyncedSession*> sessions; - ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); + ASSERT_FALSE(GetTracker()->LookupAllForeignSessions( + &sessions, SyncedSessionTracker::PRESENTABLE)); GetTracker()->GetSession("tag1"); GetTracker()->PutWindowInSession("tag1", 0); GetTracker()->PutTabInWindow("tag1", 0, 15, 0); @@ -88,10 +89,15 @@ tab->navigations.push_back( sessions::SerializedNavigationEntryTestHelper::CreateNavigation( kInvalidUrl, "title")); - ASSERT_TRUE(GetTracker()->LookupAllForeignSessions(&sessions)); + ASSERT_TRUE(GetTracker()->LookupAllForeignSessions( + &sessions, SyncedSessionTracker::PRESENTABLE)); // Only the session with a valid window and tab gets returned. ASSERT_EQ(1U, sessions.size()); ASSERT_EQ("tag1", sessions[0]->session_tag); + + ASSERT_TRUE(GetTracker()->LookupAllForeignSessions( + &sessions, SyncedSessionTracker::RAW)); + ASSERT_EQ(3U, sessions.size()); } TEST_F(SyncedSessionTrackerTest, LookupSessionWindows) { @@ -133,19 +139,20 @@ tabs1.push_back(GetTracker()->GetTab(tag1, 1, 1)); tabs1.push_back(GetTracker()->GetTab(tag1, 2, 2)); ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); - ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); + ASSERT_EQ(1U, GetTracker()->num_synced_sessions()); temp_tab = GetTracker()->GetTab(tag1, 0, 0); // Already created. ASSERT_EQ(3U, GetTracker()->num_synced_tabs(tag1)); - ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); + ASSERT_EQ(1U, GetTracker()->num_synced_sessions()); ASSERT_EQ(tabs1[0], temp_tab); tabs2.push_back(GetTracker()->GetTab(tag2, 0, 0)); ASSERT_EQ(1U, GetTracker()->num_synced_tabs(tag2)); - ASSERT_EQ(0U, GetTracker()->num_synced_sessions()); + ASSERT_EQ(2U, GetTracker()->num_synced_sessions()); ASSERT_FALSE(GetTracker()->DeleteSession(tag3)); sync_driver::SyncedSession* session = GetTracker()->GetSession(tag1); sync_driver::SyncedSession* session2 = GetTracker()->GetSession(tag2); sync_driver::SyncedSession* session3 = GetTracker()->GetSession(tag3); + session3->device_type = sync_driver::SyncedSession::TYPE_OTHER; ASSERT_EQ(3U, GetTracker()->num_synced_sessions()); ASSERT_TRUE(session); @@ -176,7 +183,11 @@ // The sessions don't have valid tabs, lookup should not succeed. std::vector<const sync_driver::SyncedSession*> sessions; - ASSERT_FALSE(GetTracker()->LookupAllForeignSessions(&sessions)); + ASSERT_FALSE(GetTracker()->LookupAllForeignSessions( + &sessions, SyncedSessionTracker::PRESENTABLE)); + ASSERT_TRUE(GetTracker()->LookupAllForeignSessions( + &sessions, SyncedSessionTracker::RAW)); + ASSERT_EQ(2U, sessions.size()); GetTracker()->Clear(); ASSERT_EQ(0U, GetTracker()->num_synced_tabs(tag1)); @@ -210,49 +221,63 @@ GetTracker()->GetTab(tag1, 1, 1); GetTracker()->GetTab(tag1, 2, 2); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); + GetTracker()->LookupTabNodeIds(tag1, &result); EXPECT_EQ(2U, result.size()); EXPECT_FALSE(result.end() == result.find(1)); EXPECT_FALSE(result.end() == result.find(2)); - EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); + GetTracker()->LookupTabNodeIds(tag2, &result); + EXPECT_TRUE(result.empty()); GetTracker()->PutWindowInSession(tag1, 0); GetTracker()->PutTabInWindow(tag1, 0, 3, 0); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); + GetTracker()->LookupTabNodeIds(tag1, &result); EXPECT_EQ(2U, result.size()); GetTracker()->GetTab(tag1, 3, 3); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); + GetTracker()->LookupTabNodeIds(tag1, &result); EXPECT_EQ(3U, result.size()); EXPECT_FALSE(result.end() == result.find(3)); GetTracker()->GetTab(tag2, 1, 21); GetTracker()->GetTab(tag2, 2, 22); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); + GetTracker()->LookupTabNodeIds(tag2, &result); EXPECT_EQ(2U, result.size()); EXPECT_FALSE(result.end() == result.find(21)); EXPECT_FALSE(result.end() == result.find(22)); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag1, &result)); + GetTracker()->LookupTabNodeIds(tag1, &result); EXPECT_EQ(3U, result.size()); EXPECT_FALSE(result.end() == result.find(1)); EXPECT_FALSE(result.end() == result.find(2)); - EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); + GetTracker()->LookupTabNodeIds(tag3, &result); + EXPECT_TRUE(result.empty()); GetTracker()->PutWindowInSession(tag3, 1); GetTracker()->PutTabInWindow(tag3, 1, 5, 0); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag3, &result)); + GetTracker()->LookupTabNodeIds(tag3, &result); EXPECT_TRUE(result.empty()); - EXPECT_TRUE(GetTracker()->DeleteSession(tag3)); - EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag3, &result)); + EXPECT_FALSE(GetTracker()->DeleteSession(tag3)); + GetTracker()->LookupTabNodeIds(tag3, &result); + EXPECT_TRUE(result.empty()); - EXPECT_TRUE(GetTracker()->DeleteSession(tag1)); - EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag1, &result)); - EXPECT_TRUE(GetTracker()->LookupTabNodeIds(tag2, &result)); + EXPECT_FALSE(GetTracker()->DeleteSession(tag1)); + GetTracker()->LookupTabNodeIds(tag1, &result); + EXPECT_TRUE(result.empty()); + GetTracker()->LookupTabNodeIds(tag2, &result); EXPECT_EQ(2U, result.size()); EXPECT_FALSE(result.end() == result.find(21)); EXPECT_FALSE(result.end() == result.find(22)); - EXPECT_TRUE(GetTracker()->DeleteSession(tag2)); - EXPECT_FALSE(GetTracker()->LookupTabNodeIds(tag2, &result)); + + GetTracker()->GetTab(tag2, 1, 21); + GetTracker()->GetTab(tag2, 2, 23); + GetTracker()->LookupTabNodeIds(tag2, &result); + EXPECT_EQ(3U, result.size()); + EXPECT_FALSE(result.end() == result.find(21)); + EXPECT_FALSE(result.end() == result.find(22)); + EXPECT_FALSE(result.end() == result.find(23)); + + EXPECT_FALSE(GetTracker()->DeleteSession(tag2)); + GetTracker()->LookupTabNodeIds(tag2, &result); + EXPECT_TRUE(result.empty()); } TEST_F(SyncedSessionTrackerTest, SessionTracking) { @@ -315,4 +340,32 @@ // SyncedSessionTracker. } +TEST_F(SyncedSessionTrackerTest, DeleteForeignTab) { + std::string session_tag = "session_tag"; + int tab_id_1 = 1; + int tab_id_2 = 2; + int tab_node_id_3 = 3; + int tab_node_id_4 = 4; + std::set<int> result; + + GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_3); + GetTracker()->GetTab(session_tag, tab_id_1, tab_node_id_4); + GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_3); + GetTracker()->GetTab(session_tag, tab_id_2, tab_node_id_4); + + GetTracker()->LookupTabNodeIds(session_tag, &result); + EXPECT_EQ(2U, result.size()); + EXPECT_TRUE(result.find(tab_node_id_3) != result.end()); + EXPECT_TRUE(result.find(tab_node_id_4) != result.end()); + + GetTracker()->DeleteForeignTab(session_tag, tab_node_id_3); + GetTracker()->LookupTabNodeIds(session_tag, &result); + EXPECT_EQ(1U, result.size()); + EXPECT_TRUE(result.find(tab_node_id_4) != result.end()); + + GetTracker()->DeleteForeignTab(session_tag, tab_node_id_4); + GetTracker()->LookupTabNodeIds(session_tag, &result); + EXPECT_TRUE(result.empty()); +} + } // namespace browser_sync
diff --git a/components/test_runner/BUILD.gn b/components/test_runner/BUILD.gn index ed4e3db..1c443be 100644 --- a/components/test_runner/BUILD.gn +++ b/components/test_runner/BUILD.gn
@@ -24,6 +24,8 @@ "gamepad_controller.h", "gc_controller.cc", "gc_controller.h", + "layout_and_paint_async_then.cc", + "layout_and_paint_async_then.h", "layout_dump.cc", "layout_dump.h", "layout_test_runtime_flags.cc",
diff --git a/components/test_runner/layout_and_paint_async_then.cc b/components/test_runner/layout_and_paint_async_then.cc new file mode 100644 index 0000000..b2834d2 --- /dev/null +++ b/components/test_runner/layout_and_paint_async_then.cc
@@ -0,0 +1,60 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/test_runner/layout_and_paint_async_then.h" + +#include "base/callback.h" +#include "base/trace_event/trace_event.h" +#include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h" +#include "third_party/WebKit/public/web/WebPagePopup.h" +#include "third_party/WebKit/public/web/WebWidget.h" + +namespace test_runner { + +namespace { + +class LayoutAndPaintCallback : public blink::WebLayoutAndPaintAsyncCallback { + public: + LayoutAndPaintCallback(const base::Closure& callback) + : callback_(callback), wait_for_popup_(false) {} + virtual ~LayoutAndPaintCallback() {} + + void set_wait_for_popup(bool wait) { wait_for_popup_ = wait; } + + // WebLayoutAndPaintAsyncCallback implementation. + void didLayoutAndPaint() override; + + private: + base::Closure callback_; + bool wait_for_popup_; +}; + +void LayoutAndPaintCallback::didLayoutAndPaint() { + TRACE_EVENT0("shell", "LayoutAndPaintCallback::didLayoutAndPaint"); + if (wait_for_popup_) { + wait_for_popup_ = false; + return; + } + + if (!callback_.is_null()) + callback_.Run(); + delete this; +} + +} // namespace + +void LayoutAndPaintAsyncThen(blink::WebWidget* web_widget, + const base::Closure& callback) { + TRACE_EVENT0("shell", "LayoutAndPaintAsyncThen"); + + LayoutAndPaintCallback* layout_and_paint_callback = + new LayoutAndPaintCallback(callback); + web_widget->layoutAndPaintAsync(layout_and_paint_callback); + if (blink::WebPagePopup* popup = web_widget->pagePopup()) { + layout_and_paint_callback->set_wait_for_popup(true); + popup->layoutAndPaintAsync(layout_and_paint_callback); + } +} + +} // namespace test_runner
diff --git a/components/test_runner/layout_and_paint_async_then.h b/components/test_runner/layout_and_paint_async_then.h new file mode 100644 index 0000000..be8ee491 --- /dev/null +++ b/components/test_runner/layout_and_paint_async_then.h
@@ -0,0 +1,25 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_TEST_RUNNER_LAYOUT_AND_PAINT_ASYNC_THEN_H_ +#define COMPONENTS_TEST_RUNNER_LAYOUT_AND_PAINT_ASYNC_THEN_H_ + +#include "base/callback_forward.h" +#include "components/test_runner/test_runner_export.h" + +namespace blink { +class WebWidget; +} // namespace blink + +namespace test_runner { + +// Triggers a layout and paint of |web_widget| and its popup (if any). +// Calls |callback| after the layout and paint happens (for both the +// |web_widget| and its popup (if any)). +TEST_RUNNER_EXPORT void LayoutAndPaintAsyncThen(blink::WebWidget* web_widget, + const base::Closure& callback); + +} // namespace test_runner + +#endif // COMPONENTS_TEST_RUNNER_LAYOUT_AND_PAINT_ASYNC_THEN_H_
diff --git a/components/test_runner/test_interfaces.cc b/components/test_runner/test_interfaces.cc index 3e7d65f1..a12cc49 100644 --- a/components/test_runner/test_interfaces.cc +++ b/components/test_runner/test_interfaces.cc
@@ -43,17 +43,17 @@ } TestInterfaces::~TestInterfaces() { - accessibility_controller_->SetWebView(0); - event_sender_->SetWebView(0); + accessibility_controller_->SetWebView(nullptr); + event_sender_->SetWebView(nullptr); // gamepad_controller_ doesn't depend on WebView. - text_input_controller_->SetWebView(NULL); - test_runner_->SetWebView(0, 0); + text_input_controller_->SetWebView(nullptr); + test_runner_->SetWebView(nullptr); - accessibility_controller_->SetDelegate(0); - event_sender_->SetDelegate(0); - // gamepad_controller_ ignores SetDelegate(0) + accessibility_controller_->SetDelegate(nullptr); + event_sender_->SetDelegate(nullptr); + // gamepad_controller_ ignores SetDelegate(nullptr) // text_input_controller_ doesn't depend on WebTestDelegate. - test_runner_->SetDelegate(0); + test_runner_->SetDelegate(nullptr); } void TestInterfaces::SetWebView(blink::WebView* web_view, @@ -62,7 +62,7 @@ event_sender_->SetWebView(web_view); // gamepad_controller_ doesn't depend on WebView. text_input_controller_->SetWebView(web_view); - test_runner_->SetWebView(web_view, proxy); + test_runner_->SetWebView(web_view); } void TestInterfaces::SetDelegate(WebTestDelegate* delegate) {
diff --git a/components/test_runner/test_runner.cc b/components/test_runner/test_runner.cc index 09a0690..39855fd 100644 --- a/components/test_runner/test_runner.cc +++ b/components/test_runner/test_runner.cc
@@ -15,6 +15,7 @@ #include "base/strings/stringprintf.h" #include "build/build_config.h" #include "components/test_runner/app_banner_client.h" +#include "components/test_runner/layout_and_paint_async_then.h" #include "components/test_runner/layout_dump.h" #include "components/test_runner/mock_content_settings_client.h" #include "components/test_runner/mock_credential_manager_client.h" @@ -1597,9 +1598,8 @@ speech_recognizer_->SetDelegate(delegate); } -void TestRunner::SetWebView(WebView* webView, WebTestProxyBase* proxy) { +void TestRunner::SetWebView(WebView* webView) { web_view_ = webView; - proxy_ = proxy; } void TestRunner::Reset() { @@ -1845,7 +1845,7 @@ return; } - test_runner::DumpPixelsAsync(proxy_->web_view(), layout_test_runtime_flags_, + test_runner::DumpPixelsAsync(web_view_, layout_test_runtime_flags_, delegate_->GetDeviceScaleFactorForTest(), callback); } @@ -2632,7 +2632,7 @@ layout_test_runtime_flags_.set_accept_languages(accept_languages); OnLayoutTestRuntimeFlagsChanged(); - proxy_->web_view()->acceptLanguagesChanged(); + web_view_->acceptLanguagesChanged(); } void TestRunner::SetPluginsEnabled(bool enabled) { @@ -2885,7 +2885,7 @@ } void TestRunner::SetWindowIsKey(bool value) { - SetFocus(proxy_->web_view(), value); + SetFocus(web_view_, value); } void TestRunner::SetFocus(blink::WebView* web_view, bool focus) { @@ -3046,11 +3046,12 @@ } void TestRunner::LayoutAndPaintAsync() { - proxy_->LayoutAndPaintAsyncThen(base::Closure()); + test_runner::LayoutAndPaintAsyncThen(web_view_, base::Closure()); } void TestRunner::LayoutAndPaintAsyncThen(v8::Local<v8::Function> callback) { - proxy_->LayoutAndPaintAsyncThen(CreateClosureThatPostsV8Callback(callback)); + test_runner::LayoutAndPaintAsyncThen( + web_view_, CreateClosureThatPostsV8Callback(callback)); } void TestRunner::GetManifestThen(v8::Local<v8::Function> callback) { @@ -3080,7 +3081,7 @@ } DumpPixelsAsync( - proxy_->web_view(), + web_view_, base::Bind(&TestRunner::CapturePixelsCallback, weak_factory_.GetWeakPtr(), base::Passed(std::move(persistent_callback)))); } @@ -3115,7 +3116,7 @@ } CopyImageAtAndCapturePixels( - proxy_->web_view(), x, y, + web_view_, x, y, base::Bind(&TestRunner::CapturePixelsCallback, weak_factory_.GetWeakPtr(), base::Passed(std::move(persistent_callback)))); }
diff --git a/components/test_runner/test_runner.gyp b/components/test_runner/test_runner.gyp index f873329..2a41757 100644 --- a/components/test_runner/test_runner.gyp +++ b/components/test_runner/test_runner.gyp
@@ -51,6 +51,8 @@ 'gamepad_controller.h', 'gc_controller.cc', 'gc_controller.h', + 'layout_and_paint_async_then.cc', + 'layout_and_paint_async_then.h', 'layout_dump.cc', 'layout_dump.h', 'layout_test_runtime_flags.cc',
diff --git a/components/test_runner/test_runner.h b/components/test_runner/test_runner.h index ea3380a..2ab35da 100644 --- a/components/test_runner/test_runner.h +++ b/components/test_runner/test_runner.h
@@ -59,7 +59,7 @@ void Install(blink::WebFrame* frame); void SetDelegate(WebTestDelegate*); - void SetWebView(blink::WebView*, WebTestProxyBase*); + void SetWebView(blink::WebView*); void Reset(); @@ -790,7 +790,6 @@ TestInterfaces* test_interfaces_; WebTestDelegate* delegate_; blink::WebView* web_view_; - WebTestProxyBase* proxy_; // This is non-0 IFF a load is in progress. blink::WebFrame* top_loading_frame_;
diff --git a/components/test_runner/web_test_delegate.h b/components/test_runner/web_test_delegate.h index 8cf9138d..2c214e2 100644 --- a/components/test_runner/web_test_delegate.h +++ b/components/test_runner/web_test_delegate.h
@@ -234,10 +234,6 @@ // Returns true if resource requests to external URLs should be permitted. virtual bool AllowExternalPages() = 0; - // Returns a text dump the back/forward history for the WebView associated - // with the given WebTestProxyBase. - virtual std::string DumpHistoryForWindow(WebTestProxyBase* proxy) = 0; - // Fetch the manifest for a given WebView from the given url. virtual void FetchManifest( blink::WebView* view,
diff --git a/components/test_runner/web_test_interfaces.cc b/components/test_runner/web_test_interfaces.cc index 032de93e..37423cc 100644 --- a/components/test_runner/web_test_interfaces.cc +++ b/components/test_runner/web_test_interfaces.cc
@@ -15,6 +15,7 @@ #include "components/test_runner/test_interfaces.h" #include "components/test_runner/test_runner.h" #include "components/test_runner/web_frame_test_client.h" +#include "components/test_runner/web_test_proxy.h" #include "components/test_runner/web_view_test_client.h" using namespace blink; @@ -110,4 +111,11 @@ web_test_proxy_base)); } +std::vector<blink::WebView*> WebTestInterfaces::GetWindowList() { + std::vector<blink::WebView*> result; + for (WebTestProxyBase* proxy : interfaces_->GetWindowList()) + result.push_back(proxy->web_view()); + return result; +} + } // namespace test_runner
diff --git a/components/test_runner/web_test_interfaces.h b/components/test_runner/web_test_interfaces.h index 0c12ef6..29942c1 100644 --- a/components/test_runner/web_test_interfaces.h +++ b/components/test_runner/web_test_interfaces.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_TEST_RUNNER_WEB_TEST_INTERFACES_H_ #define COMPONENTS_TEST_RUNNER_WEB_TEST_INTERFACES_H_ +#include <vector> + #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "components/test_runner/test_runner_export.h" @@ -79,6 +81,9 @@ scoped_ptr<WebViewTestClient> CreateWebViewTestClient( WebTestProxyBase* web_test_proxy_base); + // Gets a list of currently opened windows created by the current test. + std::vector<blink::WebView*> GetWindowList(); + private: scoped_ptr<TestInterfaces> interfaces_;
diff --git a/components/test_runner/web_test_proxy.cc b/components/test_runner/web_test_proxy.cc index ed62aa3..75298cc 100644 --- a/components/test_runner/web_test_proxy.cc +++ b/components/test_runner/web_test_proxy.cc
@@ -7,76 +7,14 @@ #include <stddef.h> #include <stdint.h> -#include <cctype> - -#include "base/callback_helpers.h" -#include "base/command_line.h" -#include "base/logging.h" -#include "base/strings/string_util.h" -#include "base/thread_task_runner_handle.h" -#include "base/trace_event/trace_event.h" -#include "components/test_runner/mock_credential_manager_client.h" #include "components/test_runner/mock_screen_orientation_client.h" -#include "components/test_runner/spell_check_client.h" -#include "components/test_runner/test_common.h" #include "components/test_runner/test_interfaces.h" -#include "components/test_runner/test_plugin.h" #include "components/test_runner/test_runner.h" #include "components/test_runner/web_test_delegate.h" #include "components/test_runner/web_test_interfaces.h" -#include "components/test_runner/web_test_runner.h" -#include "third_party/WebKit/public/platform/WebLayoutAndPaintAsyncCallback.h" -#include "third_party/WebKit/public/platform/WebURLError.h" -#include "third_party/WebKit/public/platform/WebURLRequest.h" -#include "third_party/WebKit/public/platform/WebURLResponse.h" -#include "third_party/WebKit/public/web/WebAXEnums.h" -#include "third_party/WebKit/public/web/WebAXObject.h" -#include "third_party/WebKit/public/web/WebDocument.h" -#include "third_party/WebKit/public/web/WebElement.h" -#include "third_party/WebKit/public/web/WebHistoryItem.h" -#include "third_party/WebKit/public/web/WebLocalFrame.h" -#include "third_party/WebKit/public/web/WebNode.h" -#include "third_party/WebKit/public/web/WebPagePopup.h" -#include "third_party/WebKit/public/web/WebPluginParams.h" -#include "third_party/WebKit/public/web/WebPrintParams.h" -#include "third_party/WebKit/public/web/WebRange.h" -#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" -#include "third_party/WebKit/public/web/WebView.h" namespace test_runner { -namespace { - -class LayoutAndPaintCallback : public blink::WebLayoutAndPaintAsyncCallback { - public: - LayoutAndPaintCallback(const base::Closure& callback) - : callback_(callback), wait_for_popup_(false) { - } - virtual ~LayoutAndPaintCallback() { - } - - void set_wait_for_popup(bool wait) { wait_for_popup_ = wait; } - - // WebLayoutAndPaintAsyncCallback implementation. - void didLayoutAndPaint() override; - - private: - base::Closure callback_; - bool wait_for_popup_; -}; - -std::string DumpAllBackForwardLists(TestInterfaces* interfaces, - WebTestDelegate* delegate) { - std::string result; - const std::vector<WebTestProxyBase*>& window_list = - interfaces->GetWindowList(); - for (size_t i = 0; i < window_list.size(); ++i) - result.append(delegate->DumpHistoryForWindow(window_list.at(i))); - return result; -} - -} // namespace - WebTestProxyBase::WebTestProxyBase() : test_interfaces_(nullptr), delegate_(nullptr), @@ -92,34 +30,6 @@ test_interfaces_->WindowOpened(this); } -std::string WebTestProxyBase::DumpBackForwardLists() { - return DumpAllBackForwardLists(test_interfaces_, delegate_); -} - -void LayoutAndPaintCallback::didLayoutAndPaint() { - TRACE_EVENT0("shell", "LayoutAndPaintCallback::didLayoutAndPaint"); - if (wait_for_popup_) { - wait_for_popup_ = false; - return; - } - - if (!callback_.is_null()) - callback_.Run(); - delete this; -} - -void WebTestProxyBase::LayoutAndPaintAsyncThen(const base::Closure& callback) { - TRACE_EVENT0("shell", "WebTestProxyBase::LayoutAndPaintAsyncThen"); - - LayoutAndPaintCallback* layout_and_paint_callback = - new LayoutAndPaintCallback(callback); - web_widget_->layoutAndPaintAsync(layout_and_paint_callback); - if (blink::WebPagePopup* popup = web_widget_->pagePopup()) { - layout_and_paint_callback->set_wait_for_popup(true); - popup->layoutAndPaintAsync(layout_and_paint_callback); - } -} - void WebTestProxyBase::GetScreenOrientationForTesting( blink::WebScreenInfo& screen_info) { MockScreenOrientationClient* mock_client =
diff --git a/components/test_runner/web_test_proxy.h b/components/test_runner/web_test_proxy.h index 408ac87..7a8ab62 100644 --- a/components/test_runner/web_test_proxy.h +++ b/components/test_runner/web_test_proxy.h
@@ -81,10 +81,6 @@ void SetInterfaces(WebTestInterfaces* interfaces); - std::string DumpBackForwardLists(); - - void LayoutAndPaintAsyncThen(const base::Closure& callback); - void GetScreenOrientationForTesting(blink::WebScreenInfo&); protected:
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index db66fc6..c1ee66e 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -357,8 +357,6 @@ "speech/endpointer/energy_endpointer.h", "speech/endpointer/energy_endpointer_params.cc", "speech/endpointer/energy_endpointer_params.h", - "speech/google_streaming_remote_engine.cc", - "speech/google_streaming_remote_engine.h", "speech/speech_recognition_engine.cc", "speech/speech_recognition_engine.h", "speech/speech_recognizer_impl.cc",
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc index 17c72919..e5c82fa2 100644 --- a/content/browser/accessibility/browser_accessibility_manager.cc +++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -393,7 +393,16 @@ continue; ui::AXNode* node = obj->node(); node->SetLocation(params[i].new_location); - obj->OnLocationChanged(); + } + SendLocationChangeEvents(params); +} + +void BrowserAccessibilityManager::SendLocationChangeEvents( + const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { + for (size_t i = 0; i < params.size(); ++i) { + BrowserAccessibility* obj = GetFromID(params[i].id); + if (obj) + obj->OnLocationChanged(); } }
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h index 55530761..9c3251ea 100644 --- a/content/browser/accessibility/browser_accessibility_manager.h +++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -240,8 +240,8 @@ const std::vector<AXEventNotificationDetails>& details); // Called when the renderer process updates the location of accessibility - // objects. - virtual void OnLocationChanges( + // objects. Calls SendLocationChangeEvents(), which can be overridden. + void OnLocationChanges( const std::vector<AccessibilityHostMsg_LocationChangeParams>& params); // Called when a new find in page result is received. We hold on to this @@ -366,6 +366,12 @@ BrowserAccessibilityDelegate* delegate, BrowserAccessibilityFactory* factory); + // Send platform-specific notifications to each of these objects that + // their location has changed. This is called by OnLocationChanges + // after it's updated the internal data structure. + virtual void SendLocationChangeEvents( + const std::vector<AccessibilityHostMsg_LocationChangeParams>& params); + private: // The following states keep track of whether or not the // on-screen keyboard is allowed to be shown.
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.cc b/content/browser/accessibility/browser_accessibility_manager_android.cc index 20599dc..b0d8c9c 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.cc +++ b/content/browser/accessibility/browser_accessibility_manager_android.cc
@@ -208,7 +208,8 @@ if (event_type == ui::AX_EVENT_TREE_CHANGED) return; - // Layout changes are handled in OnLocationChanges. + // Layout changes are handled in OnLocationChanges and + // SendLocationChangeEvents. if (event_type == ui::AX_EVENT_LAYOUT_COMPLETE) return; @@ -281,7 +282,7 @@ } } -void BrowserAccessibilityManagerAndroid::OnLocationChanges( +void BrowserAccessibilityManagerAndroid::SendLocationChangeEvents( const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { // Android is not very efficient at handling notifications, and location // changes in particular are frequent and not time-critical. If a lot of @@ -297,7 +298,7 @@ return; } - BrowserAccessibilityManager::OnLocationChanges(params); + BrowserAccessibilityManager::SendLocationChangeEvents(params); } base::android::ScopedJavaLocalRef<jstring>
diff --git a/content/browser/accessibility/browser_accessibility_manager_android.h b/content/browser/accessibility/browser_accessibility_manager_android.h index 367e254..981af00 100644 --- a/content/browser/accessibility/browser_accessibility_manager_android.h +++ b/content/browser/accessibility/browser_accessibility_manager_android.h
@@ -76,10 +76,10 @@ bool ShouldExposePasswordText(); - // Implementation of BrowserAccessibilityManager. + // BrowserAccessibilityManager overrides. void NotifyAccessibilityEvent(ui::AXEvent event_type, BrowserAccessibility* node) override; - void OnLocationChanges( + void SendLocationChangeEvents( const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) override;
diff --git a/content/browser/compositor/software_output_device_mus.cc b/content/browser/compositor/software_output_device_mus.cc index a577a2fc5..7ff131c 100644 --- a/content/browser/compositor/software_output_device_mus.cc +++ b/content/browser/compositor/software_output_device_mus.cc
@@ -42,23 +42,23 @@ widget, bitmap_uploader::kBitmapUploaderForAcceleratedWidget)); DCHECK(uploader); - SkImageInfo info; - size_t rowBytes; - const void* addr = surface_->peekPixels(&info, &rowBytes); + SkPixmap pixmap; + surface_->peekPixels(&pixmap); - if (!addr) { + if (!pixmap.addr()) { LOG(WARNING) << "SoftwareOutputDeviceMus: skia surface did not provide us " "with pixels"; return; } - const unsigned char* pixels = static_cast<const unsigned char*>(addr); + const unsigned char* pixels = static_cast<const unsigned char*>( + pixmap.addr()); // TODO(rjkroege): This makes an additional copy. Improve the // bitmap_uploader API to remove. std::unique_ptr<std::vector<unsigned char>> data( new std::vector<unsigned char>( - pixels, pixels + rowBytes * viewport_pixel_size_.height())); + pixels, pixels + pixmap.rowBytes() * viewport_pixel_size_.height())); uploader->SetBitmap(viewport_pixel_size_.width(), viewport_pixel_size_.height(), std::move(data), bitmap_uploader::BitmapUploader::BGRA);
diff --git a/content/browser/compositor/software_output_device_x11.cc b/content/browser/compositor/software_output_device_x11.cc index 7bf743f5a..d2e6606 100644 --- a/content/browser/compositor/software_output_device_x11.cc +++ b/content/browser/compositor/software_output_device_x11.cc
@@ -62,9 +62,8 @@ XImage image; memset(&image, 0, sizeof(image)); - SkImageInfo info; - size_t rowBytes; - const void* addr = surface_->peekPixels(&info, &rowBytes); + SkPixmap skia_pixmap; + surface_->peekPixels(&skia_pixmap); image.width = viewport_pixel_size_.width(); image.height = viewport_pixel_size_.height(); image.depth = 32; @@ -73,11 +72,12 @@ image.byte_order = LSBFirst; image.bitmap_unit = 8; image.bitmap_bit_order = LSBFirst; - image.bytes_per_line = rowBytes; + image.bytes_per_line = skia_pixmap.rowBytes(); image.red_mask = 0xff; image.green_mask = 0xff00; image.blue_mask = 0xff0000; - image.data = const_cast<char*>(static_cast<const char*>(addr)); + image.data = const_cast<char*>(static_cast<const char*>( + skia_pixmap.addr())); XPutImage(display_, pixmap, @@ -116,14 +116,13 @@ } // TODO(jbauman): Switch to XShmPutImage since it's async. - SkImageInfo info; - size_t rowBytes; - const void* addr = surface_->peekPixels(&info, &rowBytes); + SkPixmap pixmap; + surface_->peekPixels(&pixmap); gfx::PutARGBImage( display_, attributes_.visual, attributes_.depth, compositor_->widget(), - gc_, static_cast<const uint8_t*>(addr), viewport_pixel_size_.width(), - viewport_pixel_size_.height(), rect.x(), rect.y(), rect.x(), rect.y(), - rect.width(), rect.height()); + gc_, static_cast<const uint8_t*>(pixmap.addr()), + viewport_pixel_size_.width(), viewport_pixel_size_.height(), rect.x(), + rect.y(), rect.x(), rect.y(), rect.width(), rect.height()); } } // namespace content
diff --git a/content/browser/download/base_file.cc b/content/browser/download/base_file.cc index ad34a7f..e34970f7 100644 --- a/content/browser/download/base_file.cc +++ b/content/browser/download/base_file.cc
@@ -219,18 +219,24 @@ const size_t kMinBufferSize = secure_hash_->GetHashLength(); const size_t kMaxBufferSize = 1024 * 512; + static_assert(kMaxBufferSize <= std::numeric_limits<int>::max(), + "kMaxBufferSize must fit on an int"); // The size of the buffer is: // - at least kMinBufferSize so that we can use it to hold the hash as well. // - at most kMaxBufferSize so that there's a reasonable bound. // - not larger than |bytes_so_far_| unless bytes_so_far_ is less than the // hash size. - std::vector<char> buffer(std::max( - kMinBufferSize, std::min<size_t>(kMaxBufferSize, bytes_so_far_))); + std::vector<char> buffer(std::max<int64_t>( + kMinBufferSize, std::min<int64_t>(kMaxBufferSize, bytes_so_far_))); int64_t current_position = 0; while (current_position < bytes_so_far_) { - int length = file_.ReadAtCurrentPos(&buffer.front(), buffer.size()); + // While std::min needs to work with int64_t, the result is always at most + // kMaxBufferSize, which fits on an int. + int bytes_to_read = + std::min<int64_t>(buffer.size(), bytes_so_far_ - current_position); + int length = file_.ReadAtCurrentPos(&buffer.front(), bytes_to_read); if (length == -1) { return LogInterruptReason("Reading partial file", logging::GetLastSystemErrorCode(),
diff --git a/content/browser/download/base_file_unittest.cc b/content/browser/download/base_file_unittest.cc index a3008a9..48a8042 100644 --- a/content/browser/download/base_file_unittest.cc +++ b/content/browser/download/base_file_unittest.cc
@@ -517,7 +517,8 @@ // file is known and matches the existing contents. TEST_F(BaseFileTest, ExistingBaseFileKnownHash) { base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); - ASSERT_TRUE(base::WriteFile(file_path, kTestData1, kTestDataLength1)); + ASSERT_EQ(kTestDataLength1, + base::WriteFile(file_path, kTestData1, kTestDataLength1)); std::string hash_so_far(std::begin(kHashOfTestData1), std::end(kHashOfTestData1)); @@ -535,7 +536,8 @@ // file is unknown. TEST_F(BaseFileTest, ExistingBaseFileUnknownHash) { base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); - ASSERT_TRUE(base::WriteFile(file_path, kTestData1, kTestDataLength1)); + ASSERT_EQ(kTestDataLength1, + base::WriteFile(file_path, kTestData1, kTestDataLength1)); EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, base_file_->Initialize(file_path, base::FilePath(), base::File(), @@ -550,7 +552,8 @@ // Open an existing file. The contentsof the file doesn't match the known hash. TEST_F(BaseFileTest, ExistingBaseFileIncorrectHash) { base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); - ASSERT_TRUE(base::WriteFile(file_path, kTestData2, kTestDataLength2)); + ASSERT_EQ(kTestDataLength2, + base::WriteFile(file_path, kTestData2, kTestDataLength2)); std::string hash_so_far(std::begin(kHashOfTestData1), std::end(kHashOfTestData1)); @@ -565,7 +568,8 @@ TEST_F(BaseFileTest, ExistingBaseFileLargeSizeKnownHash) { base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); std::string big_buffer(1024 * 200, 'a'); - ASSERT_TRUE(base::WriteFile(file_path, big_buffer.data(), big_buffer.size())); + ASSERT_EQ(static_cast<int>(big_buffer.size()), + base::WriteFile(file_path, big_buffer.data(), big_buffer.size())); // Hash of partial file (1024*200 * 'a') const uint8_t kExpectedPartialHash[] = { @@ -594,7 +598,8 @@ TEST_F(BaseFileTest, ExistingBaseFileLargeSizeIncorrectHash) { base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); std::string big_buffer(1024 * 200, 'a'); - ASSERT_TRUE(base::WriteFile(file_path, big_buffer.data(), big_buffer.size())); + ASSERT_EQ(static_cast<int>(big_buffer.size()), + base::WriteFile(file_path, big_buffer.data(), big_buffer.size())); // Incorrect hash of partial file (1024*200 * 'a') const uint8_t kExpectedPartialHash[] = { @@ -614,7 +619,8 @@ // Open an existing file. The size of the file is too short. TEST_F(BaseFileTest, ExistingBaseFileTooShort) { base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); - ASSERT_TRUE(base::WriteFile(file_path, kTestData1, kTestDataLength1)); + ASSERT_EQ(kTestDataLength1, + base::WriteFile(file_path, kTestData1, kTestDataLength1)); EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_TOO_SHORT, base_file_->Initialize(file_path, base::FilePath(), base::File(), @@ -629,7 +635,8 @@ std::string contents; contents.append(kTestData1); contents.append("Something extra"); - ASSERT_TRUE(base::WriteFile(file_path, contents.data(), contents.size())); + ASSERT_EQ(static_cast<int>(contents.size()), + base::WriteFile(file_path, contents.data(), contents.size())); std::string hash_so_far(std::begin(kHashOfTestData1), std::end(kHashOfTestData1)); @@ -650,7 +657,8 @@ std::string contents; contents.append(kTestData1); contents.append("Something extra"); - ASSERT_TRUE(base::WriteFile(file_path, contents.data(), contents.size())); + ASSERT_EQ(static_cast<int>(contents.size()), + base::WriteFile(file_path, contents.data(), contents.size())); EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, base_file_->Initialize(file_path, base::FilePath(), base::File(), @@ -662,6 +670,36 @@ ExpectHashValue(kHashOfTestData1To3, base_file_->Finish()); } +// Similar to ExistingBaseFileKnownHashTooLong test, but with a file large +// enough to requre multiple Read()s to complete. This provides additional code +// coverage for the CalculatePartialHash() logic. +TEST_F(BaseFileTest, ExistingBaseFileUnknownHashTooLongForLargeFile) { + base::FilePath file_path = temp_dir_.path().AppendASCII("existing"); + const size_t kFileSize = 1024 * 1024; + const size_t kIntermediateSize = kFileSize / 2 + 111; + // |contents| is 100 bytes longer than kIntermediateSize. The latter is the + // expected size. + std::string contents(kIntermediateSize + 100, 'a'); + ASSERT_EQ(static_cast<int>(contents.size()), + base::WriteFile(file_path, contents.data(), contents.size())); + + EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, + base_file_->Initialize(file_path, base::FilePath(), base::File(), + kIntermediateSize, std::string(), + std::unique_ptr<crypto::SecureHash>())); + // The extra bytes should be stripped during Initialize(). + contents.resize(kIntermediateSize, 'a'); + set_expected_data(contents); + std::string new_data(kFileSize - kIntermediateSize, 'a'); + ASSERT_TRUE(AppendDataToFile(new_data)); + const uint8_t kExpectedHash[] = { + 0x9b, 0xc1, 0xb2, 0xa2, 0x88, 0xb2, 0x6a, 0xf7, 0x25, 0x7a, 0x36, + 0x27, 0x7a, 0xe3, 0x81, 0x6a, 0x7d, 0x4f, 0x16, 0xe8, 0x9c, 0x1e, + 0x7e, 0x77, 0xd0, 0xa5, 0xc4, 0x8b, 0xad, 0x62, 0xb3, 0x60, + }; + ExpectHashValue(kExpectedHash, base_file_->Finish()); +} + // Test that a temporary file is created in the default download directory. TEST_F(BaseFileTest, CreatedInDefaultDirectory) { ASSERT_TRUE(base_file_->full_path().empty());
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc index c67735c..d6521d73 100644 --- a/content/browser/download/download_browsertest.cc +++ b/content/browser/download/download_browsertest.cc
@@ -2225,6 +2225,74 @@ EXPECT_EQ(parameters.size, completed_requests[1].transferred_byte_count); } +IN_PROC_BROWSER_TEST_F(DownloadContentTest, ResumeRestoredDownload_LongFile) { + // These numbers are sufficiently large that the intermediate file won't be + // read in a single Read(). + const int kFileSize = 1024 * 1024; + const int kIntermediateSize = kFileSize / 2 + 111; + + TestDownloadRequestHandler request_handler; + TestDownloadRequestHandler::Parameters parameters; + parameters.size = kFileSize; + request_handler.StartServing(parameters); + + base::FilePath intermediate_file_path = + GetDownloadDirectory().AppendASCII("intermediate"); + std::vector<GURL> url_chain; + + // Size of file is slightly longer than the size known to DownloadItem. + std::vector<char> buffer(kIntermediateSize + 100); + request_handler.GetPatternBytes( + parameters.pattern_generator_seed, 0, buffer.size(), buffer.data()); + ASSERT_EQ( + kIntermediateSize + 100, + base::WriteFile(intermediate_file_path, buffer.data(), buffer.size())); + url_chain.push_back(request_handler.url()); + + DownloadItem* download = DownloadManagerForShell(shell())->CreateDownloadItem( + "F7FB1F59-7DE1-4845-AFDB-8A688F70F583", + 1, + intermediate_file_path, + base::FilePath(), + url_chain, + GURL(), + GURL(), + GURL(), + "application/octet-stream", + "application/octet-stream", + base::Time::Now(), + base::Time(), + parameters.etag, + std::string(), + kIntermediateSize, + parameters.size, + std::string(), + DownloadItem::INTERRUPTED, + DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, + DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, + false); + + download->Resume(); + WaitForCompletion(download); + + EXPECT_FALSE(base::PathExists(intermediate_file_path)); + ReadAndVerifyFileContents(parameters.pattern_generator_seed, + parameters.size, + download->GetTargetFilePath()); + + TestDownloadRequestHandler::CompletedRequests completed_requests; + request_handler.GetCompletedRequestInfo(&completed_requests); + + // There should be only one request. The intermediate file should be truncated + // to the expected size, and the request should be issued for the remainder. + // + // TODO(asanka): Ideally we'll check that the intermediate file matches + // expectations prior to issuing the first resumption request. + ASSERT_EQ(1u, completed_requests.size()); + EXPECT_EQ(parameters.size - kIntermediateSize, + completed_requests[0].transferred_byte_count); +} + // Check that the cookie policy is correctly updated when downloading a file // that redirects cross origin. IN_PROC_BROWSER_TEST_F(DownloadContentTest, CookiePolicy) {
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index 5a636bc..1cb9675c 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -43,7 +43,6 @@ #include "content/public/browser/render_widget_host_view_frame_subscriber.h" #include "content/public/common/content_client.h" #include "content/public/common/content_switches.h" -#include "content/public/common/mojo_channel_switches.h" #include "content/public/common/result_codes.h" #include "content/public/common/sandbox_type.h" #include "content/public/common/sandboxed_process_launcher_delegate.h" @@ -246,16 +245,6 @@ // Block this DLL even if it is not loaded by the browser process. policy->AddDllToUnload(L"cmsetac.dll"); -#ifdef USE_AURA - // GPU also needs to add sections to the browser for aura - // TODO(jschuh): refactor the GPU channel to remove this. crbug.com/128786 - result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, - sandbox::TargetPolicy::HANDLES_DUP_BROKER, - L"Section"); - if (result != sandbox::SBOX_ALL_OK) - return false; -#endif - if (cmd_line_->HasSwitch(switches::kEnableLogging)) { base::string16 log_file_path = logging::GetLogFileFullPath(); if (!log_file_path.empty()) { @@ -548,8 +537,8 @@ if (channel_id.empty()) return false; - DCHECK(!mojo_application_host_); - mojo_application_host_.reset(new MojoApplicationHost); + if (!SetupMojo()) + return false; gpu::GpuPreferences gpu_preferences = GetGpuPreferencesFromCommandLine(); if (in_process_) { @@ -557,8 +546,7 @@ DCHECK(g_gpu_main_thread_factory); in_process_gpu_thread_.reset( g_gpu_main_thread_factory(InProcessChildThreadParams( - channel_id, base::MessageLoop::current()->task_runner(), - std::string(), mojo_application_host_->GetToken()), + channel_id, base::MessageLoop::current()->task_runner()), gpu_preferences)); base::Thread::Options options; #if defined(OS_WIN) @@ -581,6 +569,12 @@ return true; } +bool GpuProcessHost::SetupMojo() { + DCHECK(!mojo_application_host_); + mojo_application_host_.reset(new MojoApplicationHost); + return mojo_application_host_->Init(); +} + void GpuProcessHost::RouteOnUIThread(const IPC::Message& message) { BrowserThread::PostTask( BrowserThread::UI, @@ -904,6 +898,14 @@ void GpuProcessHost::OnProcessLaunched() { UMA_HISTOGRAM_TIMES("GPU.GPUProcessLaunchTime", base::TimeTicks::Now() - init_start_time_); + + base::ProcessHandle handle; + if (in_process_) + handle = base::GetCurrentProcessHandle(); + else + handle = process_->GetData().handle; + + mojo_application_host_->Activate(this, handle); } void GpuProcessHost::OnProcessLaunchFailed() { @@ -975,8 +977,6 @@ #endif cmd_line->AppendSwitchASCII(switches::kProcessType, switches::kGpuProcess); cmd_line->AppendSwitchASCII(switches::kProcessChannelID, channel_id); - cmd_line->AppendSwitchASCII(switches::kMojoApplicationChannelToken, - mojo_application_host_->GetToken()); #if defined(OS_WIN) if (GetContentClient()->browser()->ShouldUseWindowsPrefetchArgument())
diff --git a/content/browser/gpu/gpu_process_host.h b/content/browser/gpu/gpu_process_host.h index 18b9d2d..63c75df 100644 --- a/content/browser/gpu/gpu_process_host.h +++ b/content/browser/gpu/gpu_process_host.h
@@ -172,6 +172,9 @@ bool Init(); + // Sets up mojo support in GPU process. Returns false upon failure. + bool SetupMojo(); + // Post an IPC message to the UI shim's message handler on the UI thread. void RouteOnUIThread(const IPC::Message& message);
diff --git a/content/browser/mojo/mojo_application_host.cc b/content/browser/mojo/mojo_application_host.cc index f2b110e..df6a964 100644 --- a/content/browser/mojo/mojo_application_host.cc +++ b/content/browser/mojo/mojo_application_host.cc
@@ -6,9 +6,12 @@ #include <utility> -#include "base/logging.h" #include "build/build_config.h" +#include "content/common/mojo/mojo_messages.h" +#include "content/public/browser/browser_thread.h" +#include "ipc/ipc_sender.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/edk/embedder/platform_channel_pair.h" namespace content { namespace { @@ -38,22 +41,70 @@ } // namespace -MojoApplicationHost::MojoApplicationHost() - : token_(mojo::edk::GenerateRandomToken()) { +MojoApplicationHost::MojoApplicationHost() : did_activate_(false) { #if defined(OS_ANDROID) service_registry_android_ = ServiceRegistryAndroid::Create(&service_registry_); #endif - - mojo::ScopedMessagePipeHandle pipe = - mojo::edk::CreateParentMessagePipe(token_); - DCHECK(pipe.is_valid()); - application_setup_.reset(new ApplicationSetupImpl( - &service_registry_, - mojo::MakeRequest<mojom::ApplicationSetup>(std::move(pipe)))); } MojoApplicationHost::~MojoApplicationHost() { } +bool MojoApplicationHost::Init() { + DCHECK(!client_handle_.is_valid()) << "Already initialized!"; + + mojo::edk::PlatformChannelPair channel_pair; + + scoped_refptr<base::TaskRunner> io_task_runner; + if (io_task_runner_override_) { + io_task_runner = io_task_runner_override_; + } else { + io_task_runner = + BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO) + ->task_runner(); + } + + // Forward this to the client once we know its process handle. + client_handle_ = channel_pair.PassClientHandle(); + mojo::ScopedMessagePipeHandle pipe = channel_init_.Init( + channel_pair.PassServerHandle().release().handle, io_task_runner); + application_setup_.reset(new ApplicationSetupImpl( + &service_registry_, + mojo::MakeRequest<mojom::ApplicationSetup>(std::move(pipe)))); + return true; +} + +void MojoApplicationHost::Activate(IPC::Sender* sender, + base::ProcessHandle process_handle) { + DCHECK(!did_activate_); + DCHECK(client_handle_.is_valid()); + + base::PlatformFile client_file = client_handle_.release().handle; + did_activate_ = sender->Send(new MojoMsg_Activate( + IPC::GetPlatformFileForTransit(client_file, true))); +} + +std::string MojoApplicationHost::InitWithToken() { + DCHECK(!client_handle_.is_valid()) << "Already initialized!"; + DCHECK(!did_activate_); + + std::string token = mojo::edk::GenerateRandomToken(); + mojo::ScopedMessagePipeHandle pipe = + mojo::edk::CreateParentMessagePipe(token); + DCHECK(pipe.is_valid()); + application_setup_.reset(new ApplicationSetupImpl( + &service_registry_, + mojo::MakeRequest<mojom::ApplicationSetup>(std::move(pipe)))); + + did_activate_ = true; + return token; +} + +void MojoApplicationHost::OverrideIOTaskRunnerForTest( + scoped_refptr<base::TaskRunner> io_task_runner) { + io_task_runner_override_ = io_task_runner; +} + + } // namespace content
diff --git a/content/browser/mojo/mojo_application_host.h b/content/browser/mojo/mojo_application_host.h index b1bc026..50fdfdf 100644 --- a/content/browser/mojo/mojo_application_host.h +++ b/content/browser/mojo/mojo_application_host.h
@@ -9,9 +9,13 @@ #include <string> #include "base/macros.h" +#include "base/process/process_handle.h" #include "build/build_config.h" #include "content/common/application_setup.mojom.h" +#include "content/common/mojo/channel_init.h" #include "content/common/mojo/service_registry_impl.h" +#include "mojo/edk/embedder/scoped_platform_handle.h" +#include "mojo/public/cpp/system/message_pipe.h" #if defined(OS_ANDROID) #include "content/public/browser/android/service_registry_android.h" @@ -24,18 +28,24 @@ namespace content { // MojoApplicationHost represents the code needed on the browser side to setup -// a child process as a Mojo application. The child process should use the token -// from GetToken() to initialize its MojoApplication. MojoApplicationHost makes -// the ServiceRegistry interface available so that child-provided services can -// be invoked. +// a child process as a Mojo application via Chrome IPC. The child process +// should use MojoApplication to handle messages generated by an instance of +// MojoApplicationHost. MojoApplicationHost makes the ServiceRegistry interface +// available so that child-provided services can be invoked. class CONTENT_EXPORT MojoApplicationHost { public: MojoApplicationHost(); ~MojoApplicationHost(); - // Returns a token to pass to the child process to initialize its - // MojoApplication. - const std::string& GetToken() { return token_; } + // Two-phase initialization: + // 1- Init makes service_registry() available synchronously. + // 2- Activate establishes the actual connection to the peer process. + bool Init(); + void Activate(IPC::Sender* sender, base::ProcessHandle process_handle); + + // Use a shared token to initialize the application. Returns a token to pass + // to the child process. + std::string InitWithToken(); ServiceRegistry* service_registry() { return &service_registry_; } @@ -45,12 +55,20 @@ } #endif + void OverrideIOTaskRunnerForTest( + scoped_refptr<base::TaskRunner> io_task_runner); + private: - const std::string token_; + ChannelInit channel_init_; + mojo::edk::ScopedPlatformHandle client_handle_; + + bool did_activate_; std::unique_ptr<mojom::ApplicationSetup> application_setup_; ServiceRegistryImpl service_registry_; + scoped_refptr<base::TaskRunner> io_task_runner_override_; + #if defined(OS_ANDROID) std::unique_ptr<ServiceRegistryAndroid> service_registry_android_; #endif
diff --git a/content/browser/mojo/mojo_child_connection.cc b/content/browser/mojo/mojo_child_connection.cc index 6da74e2..333271a 100644 --- a/content/browser/mojo/mojo_child_connection.cc +++ b/content/browser/mojo/mojo_child_connection.cc
@@ -7,128 +7,47 @@ #include <stdint.h> #include <utility> -#include "base/macros.h" -#include "base/strings/stringprintf.h" -#include "base/thread_task_runner_handle.h" -#include "build/build_config.h" -#include "content/browser/mojo/constants.h" -#include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_process_host.h" -#include "content/public/browser/render_process_host_observer.h" #include "content/public/common/mojo_shell_connection.h" -#include "ipc/ipc_sender.h" #include "mojo/edk/embedder/embedder.h" #include "mojo/public/cpp/system/message_pipe.h" #include "services/shell/public/cpp/connector.h" -#include "services/shell/public/interfaces/shell.mojom.h" +#include "services/shell/public/cpp/identity.h" #include "services/shell/public/interfaces/shell_client.mojom.h" namespace content { -namespace { -const char kMojoRenderProcessHostConnection[] = - "mojo_render_process_host_connection"; - -class RenderProcessHostConnection : public base::SupportsUserData::Data { - public: - explicit RenderProcessHostConnection( - std::unique_ptr<shell::Connection> connection) - : connection_(std::move(connection)) {} - ~RenderProcessHostConnection() override {} - - shell::Connection* get() const { return connection_.get(); } - - private: - std::unique_ptr<shell::Connection> connection_; - - DISALLOW_COPY_AND_ASSIGN(RenderProcessHostConnection); -}; - -void SetMojoConnection(RenderProcessHost* render_process_host, - std::unique_ptr<shell::Connection> connection) { - render_process_host->SetUserData( - kMojoRenderProcessHostConnection, - new RenderProcessHostConnection(std::move(connection))); -} - -class PIDSender : public RenderProcessHostObserver { - public: - PIDSender(RenderProcessHost* host, shell::mojom::PIDReceiverPtr pid_receiver) - : host_(host), pid_receiver_(std::move(pid_receiver)) { - pid_receiver_.set_connection_error_handler([this]() { delete this; }); - DCHECK(!host_->IsReady()); - host_->AddObserver(this); - } - ~PIDSender() override { - if (host_) - host_->RemoveObserver(this); - } - - private: - // Overridden from RenderProcessHostObserver: - void RenderProcessReady(RenderProcessHost* host) override { - pid_receiver_->SetPID(base::GetProcId(host->GetHandle())); - delete this; - } - - void RenderProcessHostDestroyed(RenderProcessHost* host) override { - DCHECK_EQ(host_, host); - host_ = nullptr; - } - - RenderProcessHost* host_; - shell::mojom::PIDReceiverPtr pid_receiver_; - - DISALLOW_COPY_AND_ASSIGN(PIDSender); -}; - -} // namespace - -std::string MojoConnectToChild(int child_process_id, - int instance_id, - RenderProcessHost* render_process_host) { - // Generate a token and create a pipe which is bound to it. This pipe is - // passed to the shell if one is available. - std::string pipe_token = mojo::edk::GenerateRandomToken(); +MojoChildConnection::MojoChildConnection(const std::string& application_name, + const std::string& instance_id) + : shell_client_token_(mojo::edk::GenerateRandomToken()) { mojo::ScopedMessagePipeHandle shell_client_pipe = - mojo::edk::CreateParentMessagePipe(pipe_token); + mojo::edk::CreateParentMessagePipe(shell_client_token_); // Some process types get created before the main message loop. In this case // the shell request pipe will simply be closed, and the child can detect // this. if (!MojoShellConnection::Get()) - return pipe_token; + return; shell::mojom::ShellClientPtr client; client.Bind(mojo::InterfacePtrInfo<shell::mojom::ShellClient>( std::move(shell_client_pipe), 0u)); - shell::mojom::PIDReceiverPtr pid_receiver; shell::mojom::PIDReceiverRequest pid_receiver_request = - GetProxy(&pid_receiver); - // PIDSender manages its own lifetime. - new PIDSender(render_process_host, std::move(pid_receiver)); + GetProxy(&pid_receiver_); - shell::Identity target( - kRendererMojoApplicationName, shell::mojom::kInheritUserID, - base::StringPrintf("%d_%d", child_process_id, instance_id)); + shell::Identity target(application_name, shell::mojom::kInheritUserID, + instance_id); shell::Connector::ConnectParams params(target); params.set_client_process_connection(std::move(client), std::move(pid_receiver_request)); - std::unique_ptr<shell::Connection> connection = - MojoShellConnection::Get()->GetConnector()->Connect(¶ms); - - // Store the connection on the RPH so client code can access it later via - // GetMojoConnection(). - SetMojoConnection(render_process_host, std::move(connection)); - - return pipe_token; + connection_ = MojoShellConnection::Get()->GetConnector()->Connect(¶ms); } -shell::Connection* GetMojoConnection(RenderProcessHost* render_process_host) { - RenderProcessHostConnection* connection = - static_cast<RenderProcessHostConnection*>( - render_process_host->GetUserData(kMojoRenderProcessHostConnection)); - return connection ? connection->get() : nullptr; +MojoChildConnection::~MojoChildConnection() {} + +void MojoChildConnection::SetProcessHandle(base::ProcessHandle handle) { + DCHECK(pid_receiver_.is_bound()); + pid_receiver_->SetPID(base::GetProcId(handle)); + pid_receiver_.reset(); } } // namespace content
diff --git a/content/browser/mojo/mojo_child_connection.h b/content/browser/mojo/mojo_child_connection.h index 6ee88bb..36944272 100644 --- a/content/browser/mojo/mojo_child_connection.h +++ b/content/browser/mojo/mojo_child_connection.h
@@ -5,10 +5,12 @@ #ifndef CONTENT_BROWSER_MOJO_MOJO_CHILD_CONNECTION_H_ #define CONTENT_BROWSER_MOJO_MOJO_CHILD_CONNECTION_H_ +#include <memory> #include <string> +#include "base/macros.h" #include "base/process/process_handle.h" -#include "services/shell/public/interfaces/shell.mojom.h" +#include "services/shell/public/interfaces/connector.mojom.h" namespace shell { class Connection; @@ -16,20 +18,39 @@ namespace content { -class RenderProcessHost; +// Helper class to establish a connection between the shell and a single child +// process. Process hosts can use this when launching new processes which +// should be registered with the shell. +class MojoChildConnection { + public: + // Prepares a new child connection for a child process which will be + // identified to the shell as |application_name|. |instance_id| must be + // unique among all child connections using the same |application_name|. + MojoChildConnection(const std::string& application_name, + const std::string& instance_id); + ~MojoChildConnection(); -// Establish a shell::Connection to the child process, using a pipe created for -// that purpose. Returns a token that should be passed to the child process and -// exchanged for a pipe there. That pipe can in turn be passed to -// MojoShellConnectionImpl::BindToMessagePipe() to initialize the child's -// shell connection. -std::string MojoConnectToChild(int child_process_id, - int instance_id, - RenderProcessHost* render_process_host); + shell::Connection* connection() const { + return connection_.get(); + } -// Returns a mojo connection to the provided render process host. This -// connection was opened when MojoConnectToChild() was called. -shell::Connection* GetMojoConnection(RenderProcessHost* render_process_host); + // A token which must be passed to the child process via + // |switches::kPrimordialPipeToken| in order for the child to initialize its + // end of the shell connection pipe. + std::string shell_client_token() const { return shell_client_token_; } + + // Sets the child connection's process handle. This should be called as soon + // as the process has been launched, and the connection will not be fully + // functional until this is called. + void SetProcessHandle(base::ProcessHandle handle); + + private: + const std::string shell_client_token_; + std::unique_ptr<shell::Connection> connection_; + shell::mojom::PIDReceiverPtr pid_receiver_; + + DISALLOW_COPY_AND_ASSIGN(MojoChildConnection); +}; } // namespace content
diff --git a/content/browser/renderer_host/input/non_blocking_event_browsertest.cc b/content/browser/renderer_host/input/non_blocking_event_browsertest.cc index 1c3bd74..b80c567 100644 --- a/content/browser/renderer_host/input/non_blocking_event_browsertest.cc +++ b/content/browser/renderer_host/input/non_blocking_event_browsertest.cc
@@ -57,6 +57,24 @@ " document.title='ready';" "</script>"; +const char kPassiveTouchStartBlockingTouchEndDataURL[] = + "data:text/html;charset=utf-8," + "<!DOCTYPE html>" + "<meta name='viewport' content='width=device-width'/>" + "<style>" + "html, body {" + " margin: 0;" + "}" + ".spacer { height: 10000px; }" + "</style>" + "<div class=spacer></div>" + "<script>" + " document.addEventListener('touchstart', function(e) { while(true) {} }, " + "{'passive': true});" + " document.addEventListener('touchend', function(e) { while(true) {} });" + " document.title='ready';" + "</script>"; + } // namespace namespace content { @@ -76,8 +94,8 @@ } protected: - void LoadURL() { - const GURL data_url(kNonBlockingEventDataURL); + void LoadURL(const char* page_data) { + const GURL data_url(page_data); NavigateToURL(shell(), data_url); RenderWidgetHostImpl* host = GetWidgetHost(); @@ -168,7 +186,7 @@ }; IN_PROC_BROWSER_TEST_F(NonBlockingEventBrowserTest, MouseWheel) { - LoadURL(); + LoadURL(kNonBlockingEventDataURL); DoWheelScroll(); } @@ -179,7 +197,21 @@ #define MAYBE_TouchStart TouchStart #endif IN_PROC_BROWSER_TEST_F(NonBlockingEventBrowserTest, MAYBE_TouchStart) { - LoadURL(); + LoadURL(kNonBlockingEventDataURL); + DoTouchScroll(); +} + +// Disabled on MacOS because it doesn't support touch input. +#if defined(OS_MACOSX) +#define MAYBE_PassiveTouchStartBlockingTouchEnd \ + DISABLED_PassiveTouchStartBlockingTouchEnd +#else +#define MAYBE_PassiveTouchStartBlockingTouchEnd \ + PassiveTouchStartBlockingTouchEnd +#endif +IN_PROC_BROWSER_TEST_F(NonBlockingEventBrowserTest, + MAYBE_PassiveTouchStartBlockingTouchEnd) { + LoadURL(kPassiveTouchStartBlockingTouchEndDataURL); DoTouchScroll(); }
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 7b5f9ff..2e6511c 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -35,6 +35,7 @@ #include "base/single_thread_task_runner.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/stringprintf.h" #include "base/supports_user_data.h" #include "base/sys_info.h" #include "base/threading/thread.h" @@ -84,6 +85,7 @@ #include "content/browser/memory/memory_message_filter.h" #include "content/browser/message_port_message_filter.h" #include "content/browser/mime_registry_message_filter.h" +#include "content/browser/mojo/constants.h" #include "content/browser/mojo/mojo_application_host.h" #include "content/browser/mojo/mojo_child_connection.h" #include "content/browser/notifications/notification_message_filter.h" @@ -126,6 +128,8 @@ #include "content/common/frame_messages.h" #include "content/common/gpu_host_messages.h" #include "content/common/in_process_child_thread_params.h" +#include "content/common/mojo/channel_init.h" +#include "content/common/mojo/mojo_messages.h" #include "content/common/mojo/mojo_shell_connection_impl.h" #include "content/common/render_process_messages.h" #include "content/common/resource_messages.h" @@ -694,7 +698,9 @@ if (channel_) return true; - shell_pipe_token_ = MojoConnectToChild(id_, instance_id_++, this); + mojo_child_connection_.reset(new MojoChildConnection( + kRendererMojoApplicationName, + base::StringPrintf("%d_%d", id_, instance_id_++))); base::CommandLine::StringType renderer_prefix; // A command prefix is something prepended to the command line of the spawned @@ -730,6 +736,9 @@ content::BrowserThread::IO)); #endif + // Setup the Mojo channel. + mojo_application_host_->Init(); + // Call the embedder first so that their IPC filters have priority. GetContentClient()->browser()->RenderProcessWillLaunch(this); @@ -749,7 +758,7 @@ channel_id, BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO) ->task_runner(), - mojo_channel_token_, mojo_application_host_->GetToken()))); + in_process_renderer_handle_.release()))); base::Thread::Options options; #if defined(OS_WIN) && !defined(OS_MACOSX) @@ -808,9 +817,16 @@ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); if (ShouldUseMojoChannel()) { VLOG(1) << "Mojo Channel is enabled on host"; - mojo_channel_token_ = mojo::edk::GenerateRandomToken(); - mojo::ScopedMessagePipeHandle handle = - mojo::edk::CreateParentMessagePipe(mojo_channel_token_); + mojo::ScopedMessagePipeHandle handle; + + if (run_renderer_in_process()) { + mojo::MessagePipe pipe; + handle = std::move(pipe.handle0); + in_process_renderer_handle_ = std::move(pipe.handle1); + } else { + mojo_channel_token_ = mojo::edk::GenerateRandomToken(); + handle = mojo::edk::CreateParentMessagePipe(mojo_channel_token_); + } // Do NOT expand ifdef or run time condition checks here! Synchronous // IPCs from browser process are banned. It is only narrowly allowed @@ -1111,6 +1127,11 @@ return mojo_application_host_->service_registry(); } +shell::Connection* RenderProcessHostImpl::GetChildConnection() { + DCHECK(mojo_child_connection_); + return mojo_child_connection_->connection(); +} + std::unique_ptr<base::SharedPersistentMemoryAllocator> RenderProcessHostImpl::TakeMetricsAllocator() { return std::move(metrics_allocator_); @@ -1369,8 +1390,6 @@ command_line->AppendSwitchASCII(switches::kMojoChannelToken, mojo_channel_token_); } - command_line->AppendSwitchASCII(switches::kMojoApplicationChannelToken, - mojo_application_host_->GetToken()); } void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer( @@ -1619,10 +1638,9 @@ } } - if (!shell_pipe_token_.empty()) { - renderer_cmd->AppendSwitchASCII(switches::kPrimordialPipeToken, - shell_pipe_token_); - } + DCHECK(mojo_child_connection_); + renderer_cmd->AppendSwitchASCII(switches::kPrimordialPipeToken, + mojo_child_connection_->shell_client_token()); #if defined(OS_WIN) && !defined(OFFICIAL_BUILD) // Needed because we can't show the dialog from the sandbox. Don't pass @@ -2578,6 +2596,11 @@ DCHECK(child_process_launcher_->GetProcess().IsValid()); DCHECK(!is_process_backgrounded_); + if (mojo_child_connection_) { + mojo_child_connection_->SetProcessHandle( + child_process_launcher_->GetProcess().Handle()); + } + // Not all platforms launch processes in the same backgrounded state. Make // sure |is_process_backgrounded_| reflects this platform's initial process // state. @@ -2608,6 +2631,11 @@ Source<RenderProcessHost>(this), NotificationService::NoDetails()); + // Allow Mojo to be setup before the renderer sees any Chrome IPC messages. + // This way, Mojo can be safely used from the renderer in response to any + // Chrome IPC message. + mojo_application_host_->Activate(this, GetHandle()); + while (!queued_messages_.empty()) { Send(queued_messages_.front()); queued_messages_.pop();
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index d1585ac..f09c68a0 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -57,6 +57,7 @@ class InProcessChildThreadParams; class MessagePortMessageFilter; class MojoApplicationHost; +class MojoChildConnection; class NotificationMessageFilter; #if defined(ENABLE_WEBRTC) class P2PSocketDispatcherHost; @@ -159,6 +160,7 @@ void ResumeDeferredNavigation(const GlobalRequestID& request_id) override; void NotifyTimezoneChange(const std::string& timezone) override; ServiceRegistry* GetServiceRegistry() override; + shell::Connection* GetChildConnection() override; std::unique_ptr<base::SharedPersistentMemoryAllocator> TakeMetricsAllocator() override; const base::TimeTicks& GetInitTimeForNavigationMetrics() const override; @@ -368,10 +370,7 @@ base::FilePath GetEventLogFilePathWithExtensions(const base::FilePath& file); #endif - // The token to be passed to the child process and exchanged for a message - // pipe to the shell. - std::string shell_pipe_token_; - + std::unique_ptr<MojoChildConnection> mojo_child_connection_; std::unique_ptr<MojoApplicationHost> mojo_application_host_; // The registered IPC listener objects. When this list is empty, we should
diff --git a/content/browser/renderer_host/render_widget_host_view_mus.cc b/content/browser/renderer_host/render_widget_host_view_mus.cc index 44eb199..a1701347c 100644 --- a/content/browser/renderer_host/render_widget_host_view_mus.cc +++ b/content/browser/renderer_host/render_widget_host_view_mus.cc
@@ -9,7 +9,6 @@ #include "build/build_config.h" #include "components/mus/public/cpp/window.h" #include "components/mus/public/cpp/window_tree_connection.h" -#include "content/browser/mojo/mojo_child_connection.h" #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/common/render_widget_window_tree_client_factory.mojom.h" @@ -40,7 +39,7 @@ // Connect to the renderer, pass it a WindowTreeClient interface request // and embed that client inside our mus window. mojom::RenderWidgetWindowTreeClientFactoryPtr factory; - GetMojoConnection(host_->GetProcess())->GetInterface(&factory); + host_->GetProcess()->GetChildConnection()->GetInterface(&factory); mus::mojom::WindowTreeClientPtr window_tree_client; factory->CreateWindowTreeClientForRenderWidget(
diff --git a/content/browser/speech/google_streaming_remote_engine.cc b/content/browser/speech/google_streaming_remote_engine.cc deleted file mode 100644 index 2f7e365..0000000 --- a/content/browser/speech/google_streaming_remote_engine.cc +++ /dev/null
@@ -1,642 +0,0 @@ -// Copyright (c) 2012 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 "content/browser/speech/google_streaming_remote_engine.h" - -#include <algorithm> -#include <vector> - -#include "base/big_endian.h" -#include "base/bind.h" -#include "base/rand_util.h" -#include "base/strings/string_number_conversions.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/time/time.h" -#include "content/browser/speech/audio_buffer.h" -#include "content/browser/speech/proto/google_streaming_api.pb.h" -#include "content/public/common/speech_recognition_error.h" -#include "content/public/common/speech_recognition_result.h" -#include "google_apis/google_api_keys.h" -#include "net/base/escape.h" -#include "net/base/load_flags.h" -#include "net/url_request/http_user_agent_settings.h" -#include "net/url_request/url_fetcher.h" -#include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_getter.h" -#include "net/url_request/url_request_status.h" - -using net::URLFetcher; - -namespace content { -namespace { - -const char kWebServiceBaseUrl[] = - "https://www.google.com/speech-api/full-duplex/v1"; -const char kDownstreamUrl[] = "/down?"; -const char kUpstreamUrl[] = "/up?"; - -// This matches the maximum maxAlternatives value supported by the server. -const uint32_t kMaxMaxAlternatives = 30; - -// TODO(hans): Remove this and other logging when we don't need it anymore. -void DumpResponse(const std::string& response) { - DVLOG(1) << "------------"; - proto::SpeechRecognitionEvent event; - if (!event.ParseFromString(response)) { - DVLOG(1) << "Parse failed!"; - return; - } - if (event.has_status()) - DVLOG(1) << "STATUS\t" << event.status(); - if (event.has_endpoint()) - DVLOG(1) << "ENDPOINT\t" << event.endpoint(); - for (int i = 0; i < event.result_size(); ++i) { - DVLOG(1) << "RESULT #" << i << ":"; - const proto::SpeechRecognitionResult& res = event.result(i); - if (res.has_final()) - DVLOG(1) << " final:\t" << res.final(); - if (res.has_stability()) - DVLOG(1) << " STABILITY:\t" << res.stability(); - for (int j = 0; j < res.alternative_size(); ++j) { - const proto::SpeechRecognitionAlternative& alt = - res.alternative(j); - if (alt.has_confidence()) - DVLOG(1) << " CONFIDENCE:\t" << alt.confidence(); - if (alt.has_transcript()) - DVLOG(1) << " TRANSCRIPT:\t" << alt.transcript(); - } - } -} - -} // namespace - -const int GoogleStreamingRemoteEngine::kAudioPacketIntervalMs = 100; -const int GoogleStreamingRemoteEngine::kUpstreamUrlFetcherIdForTesting = 0; -const int GoogleStreamingRemoteEngine::kDownstreamUrlFetcherIdForTesting = 1; -const int GoogleStreamingRemoteEngine::kWebserviceStatusNoError = 0; -const int GoogleStreamingRemoteEngine::kWebserviceStatusErrorNoMatch = 5; - -GoogleStreamingRemoteEngine::GoogleStreamingRemoteEngine( - net::URLRequestContextGetter* context) - : url_context_(context), - previous_response_length_(0), - got_last_definitive_result_(false), - is_dispatching_event_(false), - use_framed_post_data_(false), - state_(STATE_IDLE) {} - -GoogleStreamingRemoteEngine::~GoogleStreamingRemoteEngine() {} - -void GoogleStreamingRemoteEngine::SetConfig( - const SpeechRecognitionEngineConfig& config) { - config_ = config; -} - -void GoogleStreamingRemoteEngine::StartRecognition() { - FSMEventArgs event_args(EVENT_START_RECOGNITION); - DispatchEvent(event_args); -} - -void GoogleStreamingRemoteEngine::EndRecognition() { - FSMEventArgs event_args(EVENT_END_RECOGNITION); - DispatchEvent(event_args); -} - -void GoogleStreamingRemoteEngine::TakeAudioChunk(const AudioChunk& data) { - FSMEventArgs event_args(EVENT_AUDIO_CHUNK); - event_args.audio_data = &data; - DispatchEvent(event_args); -} - -void GoogleStreamingRemoteEngine::AudioChunksEnded() { - FSMEventArgs event_args(EVENT_AUDIO_CHUNKS_ENDED); - DispatchEvent(event_args); -} - -void GoogleStreamingRemoteEngine::OnURLFetchComplete(const URLFetcher* source) { - const bool kResponseComplete = true; - DispatchHTTPResponse(source, kResponseComplete); -} - -void GoogleStreamingRemoteEngine::OnURLFetchDownloadProgress( - const URLFetcher* source, - int64_t current, - int64_t total) { - const bool kPartialResponse = false; - DispatchHTTPResponse(source, kPartialResponse); -} - -void GoogleStreamingRemoteEngine::DispatchHTTPResponse(const URLFetcher* source, - bool end_of_response) { - DCHECK(CalledOnValidThread()); - DCHECK(source); - const bool response_is_good = source->GetStatus().is_success() && - source->GetResponseCode() == 200; - std::string response; - if (response_is_good) - source->GetResponseAsString(&response); - const size_t current_response_length = response.size(); - - DVLOG(1) << (source == downstream_fetcher_.get() ? "Downstream" : "Upstream") - << "HTTP, code: " << source->GetResponseCode() - << " length: " << current_response_length - << " eor: " << end_of_response; - - // URLFetcher provides always the entire response buffer, but we are only - // interested in the fresh data introduced by the last chunk. Therefore, we - // drop the previous content we have already processed. - if (current_response_length != 0) { - DCHECK_GE(current_response_length, previous_response_length_); - response.erase(0, previous_response_length_); - previous_response_length_ = current_response_length; - } - - if (!response_is_good && source == downstream_fetcher_.get()) { - DVLOG(1) << "Downstream error " << source->GetResponseCode(); - FSMEventArgs event_args(EVENT_DOWNSTREAM_ERROR); - DispatchEvent(event_args); - return; - } - if (!response_is_good && source == upstream_fetcher_.get()) { - DVLOG(1) << "Upstream error " << source->GetResponseCode() - << " EOR " << end_of_response; - FSMEventArgs event_args(EVENT_UPSTREAM_ERROR); - DispatchEvent(event_args); - return; - } - - // Ignore incoming data on the upstream connection. - if (source == upstream_fetcher_.get()) - return; - - DCHECK(response_is_good && source == downstream_fetcher_.get()); - - // The downstream response is organized in chunks, whose size is determined - // by a 4 bytes prefix, transparently handled by the ChunkedByteBuffer class. - // Such chunks are sent by the speech recognition webservice over the HTTP - // downstream channel using HTTP chunked transfer (unrelated to our chunks). - // This function is called every time an HTTP chunk is received by the - // url fetcher. However there isn't any particular matching beween our - // protocol chunks and HTTP chunks, in the sense that a single HTTP chunk can - // contain a portion of one chunk or even more chunks together. - chunked_byte_buffer_.Append(response); - - // A single HTTP chunk can contain more than one data chunk, thus the while. - while (chunked_byte_buffer_.HasChunks()) { - FSMEventArgs event_args(EVENT_DOWNSTREAM_RESPONSE); - event_args.response = chunked_byte_buffer_.PopChunk(); - DCHECK(event_args.response.get()); - DumpResponse(std::string(event_args.response->begin(), - event_args.response->end())); - DispatchEvent(event_args); - } - if (end_of_response) { - FSMEventArgs event_args(EVENT_DOWNSTREAM_CLOSED); - DispatchEvent(event_args); - } -} - -bool GoogleStreamingRemoteEngine::IsRecognitionPending() const { - DCHECK(CalledOnValidThread()); - return state_ != STATE_IDLE; -} - -int GoogleStreamingRemoteEngine::GetDesiredAudioChunkDurationMs() const { - return kAudioPacketIntervalMs; -} - -// ----------------------- Core FSM implementation --------------------------- - -void GoogleStreamingRemoteEngine::DispatchEvent( - const FSMEventArgs& event_args) { - DCHECK(CalledOnValidThread()); - DCHECK_LE(event_args.event, EVENT_MAX_VALUE); - DCHECK_LE(state_, STATE_MAX_VALUE); - - // Event dispatching must be sequential, otherwise it will break all the rules - // and the assumptions of the finite state automata model. - DCHECK(!is_dispatching_event_); - is_dispatching_event_ = true; - - state_ = ExecuteTransitionAndGetNextState(event_args); - - is_dispatching_event_ = false; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::ExecuteTransitionAndGetNextState( - const FSMEventArgs& event_args) { - const FSMEvent event = event_args.event; - switch (state_) { - case STATE_IDLE: - switch (event) { - case EVENT_START_RECOGNITION: - return ConnectBothStreams(event_args); - case EVENT_END_RECOGNITION: - // Note AUDIO_CHUNK and AUDIO_END events can remain enqueued in case of - // abort, so we just silently drop them here. - case EVENT_AUDIO_CHUNK: - case EVENT_AUDIO_CHUNKS_ENDED: - // DOWNSTREAM_CLOSED can be received if we end up here due to an error. - case EVENT_DOWNSTREAM_CLOSED: - return DoNothing(event_args); - case EVENT_UPSTREAM_ERROR: - case EVENT_DOWNSTREAM_ERROR: - case EVENT_DOWNSTREAM_RESPONSE: - return NotFeasible(event_args); - } - break; - case STATE_BOTH_STREAMS_CONNECTED: - switch (event) { - case EVENT_AUDIO_CHUNK: - return TransmitAudioUpstream(event_args); - case EVENT_DOWNSTREAM_RESPONSE: - return ProcessDownstreamResponse(event_args); - case EVENT_AUDIO_CHUNKS_ENDED: - return CloseUpstreamAndWaitForResults(event_args); - case EVENT_END_RECOGNITION: - return AbortSilently(event_args); - case EVENT_UPSTREAM_ERROR: - case EVENT_DOWNSTREAM_ERROR: - case EVENT_DOWNSTREAM_CLOSED: - return AbortWithError(event_args); - case EVENT_START_RECOGNITION: - return NotFeasible(event_args); - } - break; - case STATE_WAITING_DOWNSTREAM_RESULTS: - switch (event) { - case EVENT_DOWNSTREAM_RESPONSE: - return ProcessDownstreamResponse(event_args); - case EVENT_DOWNSTREAM_CLOSED: - return RaiseNoMatchErrorIfGotNoResults(event_args); - case EVENT_END_RECOGNITION: - return AbortSilently(event_args); - case EVENT_UPSTREAM_ERROR: - case EVENT_DOWNSTREAM_ERROR: - return AbortWithError(event_args); - case EVENT_START_RECOGNITION: - case EVENT_AUDIO_CHUNK: - case EVENT_AUDIO_CHUNKS_ENDED: - return NotFeasible(event_args); - } - break; - } - return NotFeasible(event_args); -} - -// ----------- Contract for all the FSM evolution functions below ------------- -// - Are guaranteed to be executed in the same thread (IO, except for tests); -// - Are guaranteed to be not reentrant (themselves and each other); -// - event_args members are guaranteed to be stable during the call; - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::ConnectBothStreams(const FSMEventArgs&) { - DCHECK(!upstream_fetcher_.get()); - DCHECK(!downstream_fetcher_.get()); - - encoder_.reset(new AudioEncoder(config_.audio_sample_rate, - config_.audio_num_bits_per_sample)); - DCHECK(encoder_.get()); - const std::string request_key = GenerateRequestKey(); - - // Only use the framed post data format when a preamble needs to be logged. - use_framed_post_data_ = (config_.preamble && - !config_.preamble->sample_data.empty() && - !config_.auth_token.empty() && - !config_.auth_scope.empty()); - if (use_framed_post_data_) { - preamble_encoder_.reset(new AudioEncoder( - config_.preamble->sample_rate, - config_.preamble->sample_depth * 8)); - } - - // Setup downstream fetcher. - std::vector<std::string> downstream_args; - downstream_args.push_back( - "key=" + net::EscapeQueryParamValue(google_apis::GetAPIKey(), true)); - downstream_args.push_back("pair=" + request_key); - downstream_args.push_back("output=pb"); - GURL downstream_url(std::string(kWebServiceBaseUrl) + - std::string(kDownstreamUrl) + - base::JoinString(downstream_args, "&")); - - downstream_fetcher_ = URLFetcher::Create( - kDownstreamUrlFetcherIdForTesting, downstream_url, URLFetcher::GET, this); - downstream_fetcher_->SetRequestContext(url_context_.get()); - downstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | - net::LOAD_DO_NOT_SEND_COOKIES | - net::LOAD_DO_NOT_SEND_AUTH_DATA); - downstream_fetcher_->Start(); - - // Setup upstream fetcher. - // TODO(hans): Support for user-selected grammars. - std::vector<std::string> upstream_args; - upstream_args.push_back("key=" + - net::EscapeQueryParamValue(google_apis::GetAPIKey(), true)); - upstream_args.push_back("pair=" + request_key); - upstream_args.push_back("output=pb"); - upstream_args.push_back( - "lang=" + net::EscapeQueryParamValue(GetAcceptedLanguages(), true)); - upstream_args.push_back( - config_.filter_profanities ? "pFilter=2" : "pFilter=0"); - if (config_.max_hypotheses > 0U) { - uint32_t max_alternatives = - std::min(kMaxMaxAlternatives, config_.max_hypotheses); - upstream_args.push_back("maxAlternatives=" + - base::UintToString(max_alternatives)); - } - upstream_args.push_back("app=chromium"); - if (!config_.hardware_info.empty()) { - upstream_args.push_back( - "xhw=" + net::EscapeQueryParamValue(config_.hardware_info, true)); - } - for (const SpeechRecognitionGrammar& grammar : config_.grammars) { - std::string grammar_value( - base::DoubleToString(grammar.weight) + ":" + grammar.url); - upstream_args.push_back( - "grammar=" + net::EscapeQueryParamValue(grammar_value, true)); - } - if (config_.continuous) - upstream_args.push_back("continuous"); - else - upstream_args.push_back("endpoint=1"); - if (config_.interim_results) - upstream_args.push_back("interim"); - if (!config_.auth_token.empty() && !config_.auth_scope.empty()) { - upstream_args.push_back( - "authScope=" + net::EscapeQueryParamValue(config_.auth_scope, true)); - upstream_args.push_back( - "authToken=" + net::EscapeQueryParamValue(config_.auth_token, true)); - } - if (use_framed_post_data_) { - std::string audio_format; - if (preamble_encoder_) - audio_format = preamble_encoder_->GetMimeType() + ","; - audio_format += encoder_->GetMimeType(); - upstream_args.push_back( - "audioFormat=" + net::EscapeQueryParamValue(audio_format, true)); - } - GURL upstream_url(std::string(kWebServiceBaseUrl) + - std::string(kUpstreamUrl) + - base::JoinString(upstream_args, "&")); - - upstream_fetcher_ = URLFetcher::Create(kUpstreamUrlFetcherIdForTesting, - upstream_url, URLFetcher::POST, this); - if (use_framed_post_data_) - upstream_fetcher_->SetChunkedUpload("application/octet-stream"); - else - upstream_fetcher_->SetChunkedUpload(encoder_->GetMimeType()); - upstream_fetcher_->SetRequestContext(url_context_.get()); - upstream_fetcher_->SetReferrer(config_.origin_url); - upstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | - net::LOAD_DO_NOT_SEND_COOKIES | - net::LOAD_DO_NOT_SEND_AUTH_DATA); - upstream_fetcher_->Start(); - previous_response_length_ = 0; - - if (preamble_encoder_) { - // Encode and send preamble right away. - scoped_refptr<AudioChunk> chunk = new AudioChunk( - reinterpret_cast<const uint8_t*>(config_.preamble->sample_data.data()), - config_.preamble->sample_data.size(), config_.preamble->sample_depth); - preamble_encoder_->Encode(*chunk); - preamble_encoder_->Flush(); - scoped_refptr<AudioChunk> encoded_data( - preamble_encoder_->GetEncodedDataAndClear()); - UploadAudioChunk(encoded_data->AsString(), FRAME_PREAMBLE_AUDIO, false); - } - return STATE_BOTH_STREAMS_CONNECTED; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::TransmitAudioUpstream( - const FSMEventArgs& event_args) { - DCHECK(upstream_fetcher_.get()); - DCHECK(event_args.audio_data.get()); - const AudioChunk& audio = *(event_args.audio_data.get()); - - DCHECK_EQ(audio.bytes_per_sample(), config_.audio_num_bits_per_sample / 8); - encoder_->Encode(audio); - scoped_refptr<AudioChunk> encoded_data(encoder_->GetEncodedDataAndClear()); - UploadAudioChunk(encoded_data->AsString(), FRAME_RECOGNITION_AUDIO, false); - return state_; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::ProcessDownstreamResponse( - const FSMEventArgs& event_args) { - DCHECK(event_args.response.get()); - - proto::SpeechRecognitionEvent ws_event; - if (!ws_event.ParseFromString(std::string(event_args.response->begin(), - event_args.response->end()))) - return AbortWithError(event_args); - - if (ws_event.has_status()) { - switch (ws_event.status()) { - case proto::SpeechRecognitionEvent::STATUS_SUCCESS: - break; - case proto::SpeechRecognitionEvent::STATUS_NO_SPEECH: - return Abort(SPEECH_RECOGNITION_ERROR_NO_SPEECH); - case proto::SpeechRecognitionEvent::STATUS_ABORTED: - return Abort(SPEECH_RECOGNITION_ERROR_ABORTED); - case proto::SpeechRecognitionEvent::STATUS_AUDIO_CAPTURE: - return Abort(SPEECH_RECOGNITION_ERROR_AUDIO_CAPTURE); - case proto::SpeechRecognitionEvent::STATUS_NETWORK: - return Abort(SPEECH_RECOGNITION_ERROR_NETWORK); - case proto::SpeechRecognitionEvent::STATUS_NOT_ALLOWED: - return Abort(SPEECH_RECOGNITION_ERROR_NOT_ALLOWED); - case proto::SpeechRecognitionEvent::STATUS_SERVICE_NOT_ALLOWED: - return Abort(SPEECH_RECOGNITION_ERROR_SERVICE_NOT_ALLOWED); - case proto::SpeechRecognitionEvent::STATUS_BAD_GRAMMAR: - return Abort(SPEECH_RECOGNITION_ERROR_BAD_GRAMMAR); - case proto::SpeechRecognitionEvent::STATUS_LANGUAGE_NOT_SUPPORTED: - return Abort(SPEECH_RECOGNITION_ERROR_LANGUAGE_NOT_SUPPORTED); - } - } - - if (!config_.continuous && ws_event.has_endpoint() && - ws_event.endpoint() == proto::SpeechRecognitionEvent::END_OF_UTTERANCE) { - delegate()->OnSpeechRecognitionEngineEndOfUtterance(); - } - - SpeechRecognitionResults results; - for (int i = 0; i < ws_event.result_size(); ++i) { - const proto::SpeechRecognitionResult& ws_result = ws_event.result(i); - results.push_back(SpeechRecognitionResult()); - SpeechRecognitionResult& result = results.back(); - result.is_provisional = !(ws_result.has_final() && ws_result.final()); - - if (!result.is_provisional) - got_last_definitive_result_ = true; - - for (int j = 0; j < ws_result.alternative_size(); ++j) { - const proto::SpeechRecognitionAlternative& ws_alternative = - ws_result.alternative(j); - SpeechRecognitionHypothesis hypothesis; - if (ws_alternative.has_confidence()) - hypothesis.confidence = ws_alternative.confidence(); - else if (ws_result.has_stability()) - hypothesis.confidence = ws_result.stability(); - DCHECK(ws_alternative.has_transcript()); - // TODO(hans): Perhaps the transcript should be required in the proto? - if (ws_alternative.has_transcript()) - hypothesis.utterance = base::UTF8ToUTF16(ws_alternative.transcript()); - - result.hypotheses.push_back(hypothesis); - } - } - if (results.size()) { - delegate()->OnSpeechRecognitionEngineResults(results); - } - - return state_; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::RaiseNoMatchErrorIfGotNoResults( - const FSMEventArgs& event_args) { - if (!got_last_definitive_result_) { - // Provide an empty result to notify that recognition is ended with no - // errors, yet neither any further results. - delegate()->OnSpeechRecognitionEngineResults(SpeechRecognitionResults()); - } - return AbortSilently(event_args); -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::CloseUpstreamAndWaitForResults( - const FSMEventArgs&) { - DCHECK(upstream_fetcher_.get()); - DCHECK(encoder_.get()); - - DVLOG(1) << "Closing upstream."; - - // The encoder requires a non-empty final buffer. So we encode a packet - // of silence in case encoder had no data already. - size_t sample_count = - config_.audio_sample_rate * kAudioPacketIntervalMs / 1000; - scoped_refptr<AudioChunk> dummy_chunk = new AudioChunk( - sample_count * sizeof(int16_t), encoder_->GetBitsPerSample() / 8); - encoder_->Encode(*dummy_chunk.get()); - encoder_->Flush(); - scoped_refptr<AudioChunk> encoded_dummy_data = - encoder_->GetEncodedDataAndClear(); - DCHECK(!encoded_dummy_data->IsEmpty()); - encoder_.reset(); - - UploadAudioChunk(encoded_dummy_data->AsString(), - FRAME_RECOGNITION_AUDIO, - true); - got_last_definitive_result_ = false; - return STATE_WAITING_DOWNSTREAM_RESULTS; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::CloseDownstream(const FSMEventArgs&) { - DCHECK(!upstream_fetcher_.get()); - DCHECK(downstream_fetcher_.get()); - - DVLOG(1) << "Closing downstream."; - downstream_fetcher_.reset(); - return STATE_IDLE; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::AbortSilently(const FSMEventArgs&) { - return Abort(SPEECH_RECOGNITION_ERROR_NONE); -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::AbortWithError(const FSMEventArgs&) { - return Abort(SPEECH_RECOGNITION_ERROR_NETWORK); -} - -GoogleStreamingRemoteEngine::FSMState GoogleStreamingRemoteEngine::Abort( - SpeechRecognitionErrorCode error_code) { - DVLOG(1) << "Aborting with error " << error_code; - - if (error_code != SPEECH_RECOGNITION_ERROR_NONE) { - delegate()->OnSpeechRecognitionEngineError( - SpeechRecognitionError(error_code)); - } - downstream_fetcher_.reset(); - upstream_fetcher_.reset(); - encoder_.reset(); - return STATE_IDLE; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::DoNothing(const FSMEventArgs&) { - return state_; -} - -GoogleStreamingRemoteEngine::FSMState -GoogleStreamingRemoteEngine::NotFeasible(const FSMEventArgs& event_args) { - NOTREACHED() << "Unfeasible event " << event_args.event - << " in state " << state_; - return state_; -} - -std::string GoogleStreamingRemoteEngine::GetAcceptedLanguages() const { - std::string langs = config_.language; - if (langs.empty() && url_context_.get()) { - // If no language is provided then we use the first from the accepted - // language list. If this list is empty then it defaults to "en-US". - // Example of the contents of this list: "es,en-GB;q=0.8", "" - net::URLRequestContext* request_context = - url_context_->GetURLRequestContext(); - DCHECK(request_context); - // TODO(pauljensen): GoogleStreamingRemoteEngine should be constructed with - // a reference to the HttpUserAgentSettings rather than accessing the - // accept language through the URLRequestContext. - if (request_context->http_user_agent_settings()) { - std::string accepted_language_list = - request_context->http_user_agent_settings()->GetAcceptLanguage(); - size_t separator = accepted_language_list.find_first_of(",;"); - if (separator != std::string::npos) - langs = accepted_language_list.substr(0, separator); - } - } - if (langs.empty()) - langs = "en-US"; - return langs; -} - -// TODO(primiano): Is there any utility in the codebase that already does this? -std::string GoogleStreamingRemoteEngine::GenerateRequestKey() const { - const int64_t kKeepLowBytes = 0x00000000FFFFFFFFLL; - const int64_t kKeepHighBytes = 0xFFFFFFFF00000000LL; - - // Just keep the least significant bits of timestamp, in order to reduce - // probability of collisions. - int64_t key = (base::Time::Now().ToInternalValue() & kKeepLowBytes) | - (base::RandUint64() & kKeepHighBytes); - return base::HexEncode(reinterpret_cast<void*>(&key), sizeof(key)); -} - -void GoogleStreamingRemoteEngine::UploadAudioChunk(const std::string& data, - FrameType type, - bool is_final) { - if (use_framed_post_data_) { - std::string frame(data.size() + 8, 0); - base::WriteBigEndian(&frame[0], static_cast<uint32_t>(data.size())); - base::WriteBigEndian(&frame[4], static_cast<uint32_t>(type)); - frame.replace(8, data.size(), data); - upstream_fetcher_->AppendChunkToUpload(frame, is_final); - } else { - upstream_fetcher_->AppendChunkToUpload(data, is_final); - } -} - -GoogleStreamingRemoteEngine::FSMEventArgs::FSMEventArgs(FSMEvent event_value) - : event(event_value) { -} - -GoogleStreamingRemoteEngine::FSMEventArgs::~FSMEventArgs() { -} - -} // namespace content
diff --git a/content/browser/speech/google_streaming_remote_engine.h b/content/browser/speech/google_streaming_remote_engine.h deleted file mode 100644 index e2fcf22..0000000 --- a/content/browser/speech/google_streaming_remote_engine.h +++ /dev/null
@@ -1,178 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_BROWSER_SPEECH_GOOGLE_STREAMING_REMOTE_ENGINE_H_ -#define CONTENT_BROWSER_SPEECH_GOOGLE_STREAMING_REMOTE_ENGINE_H_ - -#include <stddef.h> -#include <stdint.h> - -#include <memory> -#include <string> -#include <vector> - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/threading/non_thread_safe.h" -#include "content/browser/speech/audio_encoder.h" -#include "content/browser/speech/chunked_byte_buffer.h" -#include "content/browser/speech/speech_recognition_engine.h" -#include "content/common/content_export.h" -#include "content/public/common/speech_recognition_error.h" -#include "net/url_request/url_fetcher_delegate.h" - -namespace net { -class URLRequestContextGetter; -} - -namespace content { - -class AudioChunk; -struct SpeechRecognitionError; -struct SpeechRecognitionResult; - -// Implements a SpeechRecognitionEngine supporting continuous recognition by -// means of interaction with Google streaming speech recognition webservice. -// More in details, this class establishes two HTTP(S) connections with the -// webservice, for each session, herein called "upstream" and "downstream". -// Audio chunks are sent on the upstream by means of a chunked HTTP POST upload. -// Recognition results are retrieved in a full-duplex fashion (i.e. while -// pushing audio on the upstream) on the downstream by means of a chunked -// HTTP GET request. Pairing between the two stream is handled through a -// randomly generated key, unique for each request, which is passed in the -// &pair= arg to both stream request URLs. -// In the case of a regular session, the upstream is closed when the audio -// capture ends (notified through a |AudioChunksEnded| call) and the downstream -// waits for a corresponding server closure (eventually some late results can -// come after closing the upstream). -// Both stream are guaranteed to be closed when |EndRecognition| call is issued. -class CONTENT_EXPORT GoogleStreamingRemoteEngine - : public NON_EXPORTED_BASE(SpeechRecognitionEngine), - public net::URLFetcherDelegate, - public NON_EXPORTED_BASE(base::NonThreadSafe) { - public: - // Duration of each audio packet. - static const int kAudioPacketIntervalMs; - - // IDs passed to URLFetcher::Create(). Used for testing. - static const int kUpstreamUrlFetcherIdForTesting; - static const int kDownstreamUrlFetcherIdForTesting; - - explicit GoogleStreamingRemoteEngine(net::URLRequestContextGetter* context); - ~GoogleStreamingRemoteEngine() override; - - // SpeechRecognitionEngine methods. - void SetConfig(const SpeechRecognitionEngineConfig& config) override; - void StartRecognition() override; - void EndRecognition() override; - void TakeAudioChunk(const AudioChunk& data) override; - void AudioChunksEnded() override; - bool IsRecognitionPending() const override; - int GetDesiredAudioChunkDurationMs() const override; - - // net::URLFetcherDelegate methods. - void OnURLFetchComplete(const net::URLFetcher* source) override; - void OnURLFetchDownloadProgress(const net::URLFetcher* source, - int64_t current, - int64_t total) override; - - private: - // Response status codes from the speech recognition webservice. - static const int kWebserviceStatusNoError; - static const int kWebserviceStatusErrorNoMatch; - - // Frame type for framed POST data. Do NOT change these. They must match - // values the server expects. - enum FrameType { - FRAME_PREAMBLE_AUDIO = 0, - FRAME_RECOGNITION_AUDIO = 1 - }; - - // Data types for the internal Finite State Machine (FSM). - enum FSMState { - STATE_IDLE = 0, - STATE_BOTH_STREAMS_CONNECTED, - STATE_WAITING_DOWNSTREAM_RESULTS, - STATE_MAX_VALUE = STATE_WAITING_DOWNSTREAM_RESULTS - }; - - enum FSMEvent { - EVENT_END_RECOGNITION = 0, - EVENT_START_RECOGNITION, - EVENT_AUDIO_CHUNK, - EVENT_AUDIO_CHUNKS_ENDED, - EVENT_UPSTREAM_ERROR, - EVENT_DOWNSTREAM_ERROR, - EVENT_DOWNSTREAM_RESPONSE, - EVENT_DOWNSTREAM_CLOSED, - EVENT_MAX_VALUE = EVENT_DOWNSTREAM_CLOSED - }; - - struct FSMEventArgs { - explicit FSMEventArgs(FSMEvent event_value); - ~FSMEventArgs(); - - FSMEvent event; - - // In case of EVENT_AUDIO_CHUNK, holds the chunk pushed by |TakeAudioChunk|. - scoped_refptr<const AudioChunk> audio_data; - - // In case of EVENT_DOWNSTREAM_RESPONSE, hold the current chunk bytes. - std::unique_ptr<std::vector<uint8_t>> response; - - private: - DISALLOW_COPY_AND_ASSIGN(FSMEventArgs); - }; - - // Invoked by both upstream and downstream URLFetcher callbacks to handle - // new chunk data, connection closed or errors notifications. - void DispatchHTTPResponse(const net::URLFetcher* source, - bool end_of_response); - - // Entry point for pushing any new external event into the recognizer FSM. - void DispatchEvent(const FSMEventArgs& event_args); - - // Defines the behavior of the recognizer FSM, selecting the appropriate - // transition according to the current state and event. - FSMState ExecuteTransitionAndGetNextState(const FSMEventArgs& event_args); - - // The methods below handle transitions of the recognizer FSM. - FSMState ConnectBothStreams(const FSMEventArgs& event_args); - FSMState TransmitAudioUpstream(const FSMEventArgs& event_args); - FSMState ProcessDownstreamResponse(const FSMEventArgs& event_args); - FSMState RaiseNoMatchErrorIfGotNoResults(const FSMEventArgs& event_args); - FSMState CloseUpstreamAndWaitForResults(const FSMEventArgs& event_args); - FSMState CloseDownstream(const FSMEventArgs& event_args); - FSMState AbortSilently(const FSMEventArgs& event_args); - FSMState AbortWithError(const FSMEventArgs& event_args); - FSMState Abort(SpeechRecognitionErrorCode error); - FSMState DoNothing(const FSMEventArgs& event_args); - FSMState NotFeasible(const FSMEventArgs& event_args); - - std::string GetAcceptedLanguages() const; - std::string GenerateRequestKey() const; - - // Upload a single chunk of audio data. Handles both unframed and framed - // upload formats, and uses the appropriate one. - void UploadAudioChunk(const std::string& data, FrameType type, bool is_final); - - SpeechRecognitionEngineConfig config_; - std::unique_ptr<net::URLFetcher> upstream_fetcher_; - std::unique_ptr<net::URLFetcher> downstream_fetcher_; - scoped_refptr<net::URLRequestContextGetter> url_context_; - std::unique_ptr<AudioEncoder> encoder_; - std::unique_ptr<AudioEncoder> preamble_encoder_; - ChunkedByteBuffer chunked_byte_buffer_; - size_t previous_response_length_; - bool got_last_definitive_result_; - bool is_dispatching_event_; - bool use_framed_post_data_; - FSMState state_; - - DISALLOW_COPY_AND_ASSIGN(GoogleStreamingRemoteEngine); -}; - -} // namespace content - -#endif // CONTENT_BROWSER_SPEECH_GOOGLE_STREAMING_REMOTE_ENGINE_H_
diff --git a/content/browser/speech/speech_recognition_browsertest.cc b/content/browser/speech/speech_recognition_browsertest.cc index c9aa4d8..7087f36c 100644 --- a/content/browser/speech/speech_recognition_browsertest.cc +++ b/content/browser/speech/speech_recognition_browsertest.cc
@@ -15,7 +15,7 @@ #include "base/single_thread_task_runner.h" #include "base/strings/utf_string_conversions.h" #include "base/thread_task_runner_handle.h" -#include "content/browser/speech/google_streaming_remote_engine.h" +#include "content/browser/speech/speech_recognition_engine.h" #include "content/browser/speech/speech_recognition_manager_impl.h" #include "content/browser/speech/speech_recognizer_impl.h" #include "content/public/browser/browser_thread.h" @@ -79,7 +79,7 @@ const int capture_packet_interval_ms = (1000 * controller->audio_parameters().frames_per_buffer()) / controller->audio_parameters().sample_rate(); - ASSERT_EQ(GoogleStreamingRemoteEngine::kAudioPacketIntervalMs, + ASSERT_EQ(SpeechRecognitionEngine::kAudioPacketIntervalMs, capture_packet_interval_ms); FeedAudioController(500 /* ms */, /*noise=*/ false); FeedAudioController(1000 /* ms */, /*noise=*/ true);
diff --git a/content/browser/speech/speech_recognition_engine.cc b/content/browser/speech/speech_recognition_engine.cc index e3b236b..071e655c 100644 --- a/content/browser/speech/speech_recognition_engine.cc +++ b/content/browser/speech/speech_recognition_engine.cc
@@ -4,13 +4,77 @@ #include "content/browser/speech/speech_recognition_engine.h" +#include <algorithm> +#include <vector> + +#include "base/big_endian.h" +#include "base/bind.h" +#include "base/rand_util.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" +#include "base/time/time.h" +#include "content/browser/speech/audio_buffer.h" +#include "content/browser/speech/proto/google_streaming_api.pb.h" +#include "content/public/common/speech_recognition_error.h" +#include "content/public/common/speech_recognition_result.h" +#include "google_apis/google_api_keys.h" +#include "net/base/escape.h" +#include "net/base/load_flags.h" +#include "net/url_request/http_user_agent_settings.h" +#include "net/url_request/url_fetcher.h" +#include "net/url_request/url_request_context.h" +#include "net/url_request/url_request_context_getter.h" +#include "net/url_request/url_request_status.h" + +using net::URLFetcher; + +namespace content { namespace { + +const char kWebServiceBaseUrl[] = + "https://www.google.com/speech-api/full-duplex/v1"; +const char kDownstreamUrl[] = "/down?"; +const char kUpstreamUrl[] = "/up?"; + +// This matches the maximum maxAlternatives value supported by the server. +const uint32_t kMaxMaxAlternatives = 30; + +// TODO(hans): Remove this and other logging when we don't need it anymore. +void DumpResponse(const std::string& response) { + DVLOG(1) << "------------"; + proto::SpeechRecognitionEvent event; + if (!event.ParseFromString(response)) { + DVLOG(1) << "Parse failed!"; + return; + } + if (event.has_status()) + DVLOG(1) << "STATUS\t" << event.status(); + if (event.has_endpoint()) + DVLOG(1) << "ENDPOINT\t" << event.endpoint(); + for (int i = 0; i < event.result_size(); ++i) { + DVLOG(1) << "RESULT #" << i << ":"; + const proto::SpeechRecognitionResult& res = event.result(i); + if (res.has_final()) + DVLOG(1) << " final:\t" << res.final(); + if (res.has_stability()) + DVLOG(1) << " STABILITY:\t" << res.stability(); + for (int j = 0; j < res.alternative_size(); ++j) { + const proto::SpeechRecognitionAlternative& alt = + res.alternative(j); + if (alt.has_confidence()) + DVLOG(1) << " CONFIDENCE:\t" << alt.confidence(); + if (alt.has_transcript()) + DVLOG(1) << " TRANSCRIPT:\t" << alt.transcript(); + } + } +} + const int kDefaultConfigSampleRate = 8000; const int kDefaultConfigBitsPerSample = 16; const uint32_t kDefaultMaxHypotheses = 1; -} // namespace -namespace content { +} // namespace SpeechRecognitionEngine::Config::Config() : filter_profanities(false), @@ -18,10 +82,570 @@ interim_results(true), max_hypotheses(kDefaultMaxHypotheses), audio_sample_rate(kDefaultConfigSampleRate), - audio_num_bits_per_sample(kDefaultConfigBitsPerSample) { + audio_num_bits_per_sample(kDefaultConfigBitsPerSample) {} + +SpeechRecognitionEngine::Config::~Config() {} + +const int SpeechRecognitionEngine::kAudioPacketIntervalMs = 100; +const int SpeechRecognitionEngine::kUpstreamUrlFetcherIdForTesting = 0; +const int SpeechRecognitionEngine::kDownstreamUrlFetcherIdForTesting = 1; +const int SpeechRecognitionEngine::kWebserviceStatusNoError = 0; +const int SpeechRecognitionEngine::kWebserviceStatusErrorNoMatch = 5; + +SpeechRecognitionEngine::SpeechRecognitionEngine( + net::URLRequestContextGetter* context) + : url_context_(context), + previous_response_length_(0), + got_last_definitive_result_(false), + is_dispatching_event_(false), + use_framed_post_data_(false), + state_(STATE_IDLE) {} + +SpeechRecognitionEngine::~SpeechRecognitionEngine() {} + +void SpeechRecognitionEngine::SetConfig(const Config& config) { + config_ = config; } -SpeechRecognitionEngine::Config::~Config() { +void SpeechRecognitionEngine::StartRecognition() { + FSMEventArgs event_args(EVENT_START_RECOGNITION); + DispatchEvent(event_args); +} + +void SpeechRecognitionEngine::EndRecognition() { + FSMEventArgs event_args(EVENT_END_RECOGNITION); + DispatchEvent(event_args); +} + +void SpeechRecognitionEngine::TakeAudioChunk(const AudioChunk& data) { + FSMEventArgs event_args(EVENT_AUDIO_CHUNK); + event_args.audio_data = &data; + DispatchEvent(event_args); +} + +void SpeechRecognitionEngine::AudioChunksEnded() { + FSMEventArgs event_args(EVENT_AUDIO_CHUNKS_ENDED); + DispatchEvent(event_args); +} + +void SpeechRecognitionEngine::OnURLFetchComplete(const URLFetcher* source) { + const bool kResponseComplete = true; + DispatchHTTPResponse(source, kResponseComplete); +} + +void SpeechRecognitionEngine::OnURLFetchDownloadProgress( + const URLFetcher* source, + int64_t current, + int64_t total) { + const bool kPartialResponse = false; + DispatchHTTPResponse(source, kPartialResponse); +} + +void SpeechRecognitionEngine::DispatchHTTPResponse(const URLFetcher* source, + bool end_of_response) { + DCHECK(CalledOnValidThread()); + DCHECK(source); + const bool response_is_good = source->GetStatus().is_success() && + source->GetResponseCode() == 200; + std::string response; + if (response_is_good) + source->GetResponseAsString(&response); + const size_t current_response_length = response.size(); + + DVLOG(1) << (source == downstream_fetcher_.get() ? "Downstream" : "Upstream") + << "HTTP, code: " << source->GetResponseCode() + << " length: " << current_response_length + << " eor: " << end_of_response; + + // URLFetcher provides always the entire response buffer, but we are only + // interested in the fresh data introduced by the last chunk. Therefore, we + // drop the previous content we have already processed. + if (current_response_length != 0) { + DCHECK_GE(current_response_length, previous_response_length_); + response.erase(0, previous_response_length_); + previous_response_length_ = current_response_length; + } + + if (!response_is_good && source == downstream_fetcher_.get()) { + DVLOG(1) << "Downstream error " << source->GetResponseCode(); + FSMEventArgs event_args(EVENT_DOWNSTREAM_ERROR); + DispatchEvent(event_args); + return; + } + if (!response_is_good && source == upstream_fetcher_.get()) { + DVLOG(1) << "Upstream error " << source->GetResponseCode() + << " EOR " << end_of_response; + FSMEventArgs event_args(EVENT_UPSTREAM_ERROR); + DispatchEvent(event_args); + return; + } + + // Ignore incoming data on the upstream connection. + if (source == upstream_fetcher_.get()) + return; + + DCHECK(response_is_good && source == downstream_fetcher_.get()); + + // The downstream response is organized in chunks, whose size is determined + // by a 4 bytes prefix, transparently handled by the ChunkedByteBuffer class. + // Such chunks are sent by the speech recognition webservice over the HTTP + // downstream channel using HTTP chunked transfer (unrelated to our chunks). + // This function is called every time an HTTP chunk is received by the + // url fetcher. However there isn't any particular matching beween our + // protocol chunks and HTTP chunks, in the sense that a single HTTP chunk can + // contain a portion of one chunk or even more chunks together. + chunked_byte_buffer_.Append(response); + + // A single HTTP chunk can contain more than one data chunk, thus the while. + while (chunked_byte_buffer_.HasChunks()) { + FSMEventArgs event_args(EVENT_DOWNSTREAM_RESPONSE); + event_args.response = chunked_byte_buffer_.PopChunk(); + DCHECK(event_args.response.get()); + DumpResponse(std::string(event_args.response->begin(), + event_args.response->end())); + DispatchEvent(event_args); + } + if (end_of_response) { + FSMEventArgs event_args(EVENT_DOWNSTREAM_CLOSED); + DispatchEvent(event_args); + } +} + +bool SpeechRecognitionEngine::IsRecognitionPending() const { + DCHECK(CalledOnValidThread()); + return state_ != STATE_IDLE; +} + +int SpeechRecognitionEngine::GetDesiredAudioChunkDurationMs() const { + return kAudioPacketIntervalMs; +} + +// ----------------------- Core FSM implementation --------------------------- + +void SpeechRecognitionEngine::DispatchEvent( + const FSMEventArgs& event_args) { + DCHECK(CalledOnValidThread()); + DCHECK_LE(event_args.event, EVENT_MAX_VALUE); + DCHECK_LE(state_, STATE_MAX_VALUE); + + // Event dispatching must be sequential, otherwise it will break all the rules + // and the assumptions of the finite state automata model. + DCHECK(!is_dispatching_event_); + is_dispatching_event_ = true; + + state_ = ExecuteTransitionAndGetNextState(event_args); + + is_dispatching_event_ = false; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::ExecuteTransitionAndGetNextState( + const FSMEventArgs& event_args) { + const FSMEvent event = event_args.event; + switch (state_) { + case STATE_IDLE: + switch (event) { + case EVENT_START_RECOGNITION: + return ConnectBothStreams(event_args); + case EVENT_END_RECOGNITION: + // Note AUDIO_CHUNK and AUDIO_END events can remain enqueued in case of + // abort, so we just silently drop them here. + case EVENT_AUDIO_CHUNK: + case EVENT_AUDIO_CHUNKS_ENDED: + // DOWNSTREAM_CLOSED can be received if we end up here due to an error. + case EVENT_DOWNSTREAM_CLOSED: + return DoNothing(event_args); + case EVENT_UPSTREAM_ERROR: + case EVENT_DOWNSTREAM_ERROR: + case EVENT_DOWNSTREAM_RESPONSE: + return NotFeasible(event_args); + } + break; + case STATE_BOTH_STREAMS_CONNECTED: + switch (event) { + case EVENT_AUDIO_CHUNK: + return TransmitAudioUpstream(event_args); + case EVENT_DOWNSTREAM_RESPONSE: + return ProcessDownstreamResponse(event_args); + case EVENT_AUDIO_CHUNKS_ENDED: + return CloseUpstreamAndWaitForResults(event_args); + case EVENT_END_RECOGNITION: + return AbortSilently(event_args); + case EVENT_UPSTREAM_ERROR: + case EVENT_DOWNSTREAM_ERROR: + case EVENT_DOWNSTREAM_CLOSED: + return AbortWithError(event_args); + case EVENT_START_RECOGNITION: + return NotFeasible(event_args); + } + break; + case STATE_WAITING_DOWNSTREAM_RESULTS: + switch (event) { + case EVENT_DOWNSTREAM_RESPONSE: + return ProcessDownstreamResponse(event_args); + case EVENT_DOWNSTREAM_CLOSED: + return RaiseNoMatchErrorIfGotNoResults(event_args); + case EVENT_END_RECOGNITION: + return AbortSilently(event_args); + case EVENT_UPSTREAM_ERROR: + case EVENT_DOWNSTREAM_ERROR: + return AbortWithError(event_args); + case EVENT_START_RECOGNITION: + case EVENT_AUDIO_CHUNK: + case EVENT_AUDIO_CHUNKS_ENDED: + return NotFeasible(event_args); + } + break; + } + return NotFeasible(event_args); +} + +// ----------- Contract for all the FSM evolution functions below ------------- +// - Are guaranteed to be executed in the same thread (IO, except for tests); +// - Are guaranteed to be not reentrant (themselves and each other); +// - event_args members are guaranteed to be stable during the call; + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::ConnectBothStreams(const FSMEventArgs&) { + DCHECK(!upstream_fetcher_.get()); + DCHECK(!downstream_fetcher_.get()); + + encoder_.reset(new AudioEncoder(config_.audio_sample_rate, + config_.audio_num_bits_per_sample)); + DCHECK(encoder_.get()); + const std::string request_key = GenerateRequestKey(); + + // Only use the framed post data format when a preamble needs to be logged. + use_framed_post_data_ = (config_.preamble && + !config_.preamble->sample_data.empty() && + !config_.auth_token.empty() && + !config_.auth_scope.empty()); + if (use_framed_post_data_) { + preamble_encoder_.reset(new AudioEncoder( + config_.preamble->sample_rate, + config_.preamble->sample_depth * 8)); + } + + // Setup downstream fetcher. + std::vector<std::string> downstream_args; + downstream_args.push_back( + "key=" + net::EscapeQueryParamValue(google_apis::GetAPIKey(), true)); + downstream_args.push_back("pair=" + request_key); + downstream_args.push_back("output=pb"); + GURL downstream_url(std::string(kWebServiceBaseUrl) + + std::string(kDownstreamUrl) + + base::JoinString(downstream_args, "&")); + + downstream_fetcher_ = URLFetcher::Create( + kDownstreamUrlFetcherIdForTesting, downstream_url, URLFetcher::GET, this); + downstream_fetcher_->SetRequestContext(url_context_.get()); + downstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | + net::LOAD_DO_NOT_SEND_COOKIES | + net::LOAD_DO_NOT_SEND_AUTH_DATA); + downstream_fetcher_->Start(); + + // Setup upstream fetcher. + // TODO(hans): Support for user-selected grammars. + std::vector<std::string> upstream_args; + upstream_args.push_back("key=" + + net::EscapeQueryParamValue(google_apis::GetAPIKey(), true)); + upstream_args.push_back("pair=" + request_key); + upstream_args.push_back("output=pb"); + upstream_args.push_back( + "lang=" + net::EscapeQueryParamValue(GetAcceptedLanguages(), true)); + upstream_args.push_back( + config_.filter_profanities ? "pFilter=2" : "pFilter=0"); + if (config_.max_hypotheses > 0U) { + uint32_t max_alternatives = + std::min(kMaxMaxAlternatives, config_.max_hypotheses); + upstream_args.push_back("maxAlternatives=" + + base::UintToString(max_alternatives)); + } + upstream_args.push_back("app=chromium"); + for (const SpeechRecognitionGrammar& grammar : config_.grammars) { + std::string grammar_value( + base::DoubleToString(grammar.weight) + ":" + grammar.url); + upstream_args.push_back( + "grammar=" + net::EscapeQueryParamValue(grammar_value, true)); + } + if (config_.continuous) + upstream_args.push_back("continuous"); + else + upstream_args.push_back("endpoint=1"); + if (config_.interim_results) + upstream_args.push_back("interim"); + if (!config_.auth_token.empty() && !config_.auth_scope.empty()) { + upstream_args.push_back( + "authScope=" + net::EscapeQueryParamValue(config_.auth_scope, true)); + upstream_args.push_back( + "authToken=" + net::EscapeQueryParamValue(config_.auth_token, true)); + } + if (use_framed_post_data_) { + std::string audio_format; + if (preamble_encoder_) + audio_format = preamble_encoder_->GetMimeType() + ","; + audio_format += encoder_->GetMimeType(); + upstream_args.push_back( + "audioFormat=" + net::EscapeQueryParamValue(audio_format, true)); + } + GURL upstream_url(std::string(kWebServiceBaseUrl) + + std::string(kUpstreamUrl) + + base::JoinString(upstream_args, "&")); + + upstream_fetcher_ = URLFetcher::Create(kUpstreamUrlFetcherIdForTesting, + upstream_url, URLFetcher::POST, this); + if (use_framed_post_data_) + upstream_fetcher_->SetChunkedUpload("application/octet-stream"); + else + upstream_fetcher_->SetChunkedUpload(encoder_->GetMimeType()); + upstream_fetcher_->SetRequestContext(url_context_.get()); + upstream_fetcher_->SetReferrer(config_.origin_url); + upstream_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES | + net::LOAD_DO_NOT_SEND_COOKIES | + net::LOAD_DO_NOT_SEND_AUTH_DATA); + upstream_fetcher_->Start(); + previous_response_length_ = 0; + + if (preamble_encoder_) { + // Encode and send preamble right away. + scoped_refptr<AudioChunk> chunk = new AudioChunk( + reinterpret_cast<const uint8_t*>(config_.preamble->sample_data.data()), + config_.preamble->sample_data.size(), config_.preamble->sample_depth); + preamble_encoder_->Encode(*chunk); + preamble_encoder_->Flush(); + scoped_refptr<AudioChunk> encoded_data( + preamble_encoder_->GetEncodedDataAndClear()); + UploadAudioChunk(encoded_data->AsString(), FRAME_PREAMBLE_AUDIO, false); + } + return STATE_BOTH_STREAMS_CONNECTED; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::TransmitAudioUpstream( + const FSMEventArgs& event_args) { + DCHECK(upstream_fetcher_.get()); + DCHECK(event_args.audio_data.get()); + const AudioChunk& audio = *(event_args.audio_data.get()); + + DCHECK_EQ(audio.bytes_per_sample(), config_.audio_num_bits_per_sample / 8); + encoder_->Encode(audio); + scoped_refptr<AudioChunk> encoded_data(encoder_->GetEncodedDataAndClear()); + UploadAudioChunk(encoded_data->AsString(), FRAME_RECOGNITION_AUDIO, false); + return state_; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::ProcessDownstreamResponse( + const FSMEventArgs& event_args) { + DCHECK(event_args.response.get()); + + proto::SpeechRecognitionEvent ws_event; + if (!ws_event.ParseFromString(std::string(event_args.response->begin(), + event_args.response->end()))) + return AbortWithError(event_args); + + if (ws_event.has_status()) { + switch (ws_event.status()) { + case proto::SpeechRecognitionEvent::STATUS_SUCCESS: + break; + case proto::SpeechRecognitionEvent::STATUS_NO_SPEECH: + return Abort(SPEECH_RECOGNITION_ERROR_NO_SPEECH); + case proto::SpeechRecognitionEvent::STATUS_ABORTED: + return Abort(SPEECH_RECOGNITION_ERROR_ABORTED); + case proto::SpeechRecognitionEvent::STATUS_AUDIO_CAPTURE: + return Abort(SPEECH_RECOGNITION_ERROR_AUDIO_CAPTURE); + case proto::SpeechRecognitionEvent::STATUS_NETWORK: + return Abort(SPEECH_RECOGNITION_ERROR_NETWORK); + case proto::SpeechRecognitionEvent::STATUS_NOT_ALLOWED: + return Abort(SPEECH_RECOGNITION_ERROR_NOT_ALLOWED); + case proto::SpeechRecognitionEvent::STATUS_SERVICE_NOT_ALLOWED: + return Abort(SPEECH_RECOGNITION_ERROR_SERVICE_NOT_ALLOWED); + case proto::SpeechRecognitionEvent::STATUS_BAD_GRAMMAR: + return Abort(SPEECH_RECOGNITION_ERROR_BAD_GRAMMAR); + case proto::SpeechRecognitionEvent::STATUS_LANGUAGE_NOT_SUPPORTED: + return Abort(SPEECH_RECOGNITION_ERROR_LANGUAGE_NOT_SUPPORTED); + } + } + + if (!config_.continuous && ws_event.has_endpoint() && + ws_event.endpoint() == proto::SpeechRecognitionEvent::END_OF_UTTERANCE) { + delegate_->OnSpeechRecognitionEngineEndOfUtterance(); + } + + SpeechRecognitionResults results; + for (int i = 0; i < ws_event.result_size(); ++i) { + const proto::SpeechRecognitionResult& ws_result = ws_event.result(i); + results.push_back(SpeechRecognitionResult()); + SpeechRecognitionResult& result = results.back(); + result.is_provisional = !(ws_result.has_final() && ws_result.final()); + + if (!result.is_provisional) + got_last_definitive_result_ = true; + + for (int j = 0; j < ws_result.alternative_size(); ++j) { + const proto::SpeechRecognitionAlternative& ws_alternative = + ws_result.alternative(j); + SpeechRecognitionHypothesis hypothesis; + if (ws_alternative.has_confidence()) + hypothesis.confidence = ws_alternative.confidence(); + else if (ws_result.has_stability()) + hypothesis.confidence = ws_result.stability(); + DCHECK(ws_alternative.has_transcript()); + // TODO(hans): Perhaps the transcript should be required in the proto? + if (ws_alternative.has_transcript()) + hypothesis.utterance = base::UTF8ToUTF16(ws_alternative.transcript()); + + result.hypotheses.push_back(hypothesis); + } + } + if (results.size()) { + delegate_->OnSpeechRecognitionEngineResults(results); + } + + return state_; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::RaiseNoMatchErrorIfGotNoResults( + const FSMEventArgs& event_args) { + if (!got_last_definitive_result_) { + // Provide an empty result to notify that recognition is ended with no + // errors, yet neither any further results. + delegate_->OnSpeechRecognitionEngineResults(SpeechRecognitionResults()); + } + return AbortSilently(event_args); +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::CloseUpstreamAndWaitForResults( + const FSMEventArgs&) { + DCHECK(upstream_fetcher_.get()); + DCHECK(encoder_.get()); + + DVLOG(1) << "Closing upstream."; + + // The encoder requires a non-empty final buffer. So we encode a packet + // of silence in case encoder had no data already. + size_t sample_count = + config_.audio_sample_rate * kAudioPacketIntervalMs / 1000; + scoped_refptr<AudioChunk> dummy_chunk = new AudioChunk( + sample_count * sizeof(int16_t), encoder_->GetBitsPerSample() / 8); + encoder_->Encode(*dummy_chunk.get()); + encoder_->Flush(); + scoped_refptr<AudioChunk> encoded_dummy_data = + encoder_->GetEncodedDataAndClear(); + DCHECK(!encoded_dummy_data->IsEmpty()); + encoder_.reset(); + + UploadAudioChunk(encoded_dummy_data->AsString(), + FRAME_RECOGNITION_AUDIO, + true); + got_last_definitive_result_ = false; + return STATE_WAITING_DOWNSTREAM_RESULTS; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::CloseDownstream(const FSMEventArgs&) { + DCHECK(!upstream_fetcher_.get()); + DCHECK(downstream_fetcher_.get()); + + DVLOG(1) << "Closing downstream."; + downstream_fetcher_.reset(); + return STATE_IDLE; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::AbortSilently(const FSMEventArgs&) { + return Abort(SPEECH_RECOGNITION_ERROR_NONE); +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::AbortWithError(const FSMEventArgs&) { + return Abort(SPEECH_RECOGNITION_ERROR_NETWORK); +} + +SpeechRecognitionEngine::FSMState SpeechRecognitionEngine::Abort( + SpeechRecognitionErrorCode error_code) { + DVLOG(1) << "Aborting with error " << error_code; + + if (error_code != SPEECH_RECOGNITION_ERROR_NONE) { + delegate_->OnSpeechRecognitionEngineError( + SpeechRecognitionError(error_code)); + } + downstream_fetcher_.reset(); + upstream_fetcher_.reset(); + encoder_.reset(); + return STATE_IDLE; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::DoNothing(const FSMEventArgs&) { + return state_; +} + +SpeechRecognitionEngine::FSMState +SpeechRecognitionEngine::NotFeasible(const FSMEventArgs& event_args) { + NOTREACHED() << "Unfeasible event " << event_args.event + << " in state " << state_; + return state_; +} + +std::string SpeechRecognitionEngine::GetAcceptedLanguages() const { + std::string langs = config_.language; + if (langs.empty() && url_context_.get()) { + // If no language is provided then we use the first from the accepted + // language list. If this list is empty then it defaults to "en-US". + // Example of the contents of this list: "es,en-GB;q=0.8", "" + net::URLRequestContext* request_context = + url_context_->GetURLRequestContext(); + DCHECK(request_context); + // TODO(pauljensen): SpeechRecognitionEngine should be constructed with + // a reference to the HttpUserAgentSettings rather than accessing the + // accept language through the URLRequestContext. + if (request_context->http_user_agent_settings()) { + std::string accepted_language_list = + request_context->http_user_agent_settings()->GetAcceptLanguage(); + size_t separator = accepted_language_list.find_first_of(",;"); + if (separator != std::string::npos) + langs = accepted_language_list.substr(0, separator); + } + } + if (langs.empty()) + langs = "en-US"; + return langs; +} + +// TODO(primiano): Is there any utility in the codebase that already does this? +std::string SpeechRecognitionEngine::GenerateRequestKey() const { + const int64_t kKeepLowBytes = 0x00000000FFFFFFFFLL; + const int64_t kKeepHighBytes = 0xFFFFFFFF00000000LL; + + // Just keep the least significant bits of timestamp, in order to reduce + // probability of collisions. + int64_t key = (base::Time::Now().ToInternalValue() & kKeepLowBytes) | + (base::RandUint64() & kKeepHighBytes); + return base::HexEncode(reinterpret_cast<void*>(&key), sizeof(key)); +} + +void SpeechRecognitionEngine::UploadAudioChunk(const std::string& data, + FrameType type, + bool is_final) { + if (use_framed_post_data_) { + std::string frame(data.size() + 8, 0); + base::WriteBigEndian(&frame[0], static_cast<uint32_t>(data.size())); + base::WriteBigEndian(&frame[4], static_cast<uint32_t>(type)); + frame.replace(8, data.size(), data); + upstream_fetcher_->AppendChunkToUpload(frame, is_final); + } else { + upstream_fetcher_->AppendChunkToUpload(data, is_final); + } +} + +SpeechRecognitionEngine::FSMEventArgs::FSMEventArgs(FSMEvent event_value) + : event(event_value) { +} + +SpeechRecognitionEngine::FSMEventArgs::~FSMEventArgs() { } } // namespace content
diff --git a/content/browser/speech/speech_recognition_engine.h b/content/browser/speech/speech_recognition_engine.h index c25fd19..0da3816 100644 --- a/content/browser/speech/speech_recognition_engine.h +++ b/content/browser/speech/speech_recognition_engine.h
@@ -6,37 +6,65 @@ #define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_ENGINE_H_ #include <stdint.h> - +#include <memory> #include <string> +#include <vector> +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/threading/non_thread_safe.h" +#include "content/browser/speech/audio_encoder.h" +#include "content/browser/speech/chunked_byte_buffer.h" #include "content/common/content_export.h" #include "content/public/browser/speech_recognition_session_preamble.h" +#include "content/public/common/speech_recognition_error.h" #include "content/public/common/speech_recognition_grammar.h" #include "content/public/common/speech_recognition_result.h" +#include "net/url_request/url_fetcher_delegate.h" + +namespace net { +class URLRequestContextGetter; +} namespace content { class AudioChunk; struct SpeechRecognitionError; +struct SpeechRecognitionResult; -// This interface models the basic contract that a speech recognition engine, -// either working locally or relying on a remote web-service, must obey. -// The expected call sequence for exported methods is: +// A speech recognition engine supporting continuous recognition by means of +// interaction with the Google streaming speech recognition webservice. +// +// This class establishes two HTTPS connections with the webservice for each +// session, herein called "upstream" and "downstream". Audio chunks are sent on +// the upstream by means of a chunked HTTP POST upload. Recognition results are +// retrieved in a full-duplex fashion (i.e. while pushing audio on the upstream) +// on the downstream by means of a chunked HTTP GET request. Pairing between the +// two stream is handled through a randomly generated key, unique for each +// request, which is passed in the &pair= arg to both stream request URLs. In +// the case of a regular session, the upstream is closed when the audio capture +// ends (notified through a |AudioChunksEnded| call) and the downstream waits +// for a corresponding server closure (eventually some late results can come +// after closing the upstream). Both streams are guaranteed to be closed when +// |EndRecognition| call is issued. +// +// The expected call sequence is: // StartRecognition Mandatory at beginning of SR. // TakeAudioChunk For every audio chunk pushed. // AudioChunksEnded Finalize the audio stream (omitted in case of errors). // EndRecognition Mandatory at end of SR (even on errors). -// No delegate callbacks are allowed before StartRecognition or after +// +// No delegate callbacks are performed before StartRecognition or after // EndRecognition. If a recognition was started, the caller can free the // SpeechRecognitionEngine only after calling EndRecognition. -class SpeechRecognitionEngine { + +class CONTENT_EXPORT SpeechRecognitionEngine + : public net::URLFetcherDelegate, + public NON_EXPORTED_BASE(base::NonThreadSafe) { public: - // Interface for receiving callbacks from this object. class Delegate { public: - // Called whenever a result is retrieved. It might be issued several times, - // (e.g., in the case of continuous speech recognition engine - // implementations). + // Called whenever a result is retrieved. virtual void OnSpeechRecognitionEngineResults( const SpeechRecognitionResults& results) = 0; virtual void OnSpeechRecognitionEngineEndOfUtterance() = 0; @@ -47,7 +75,7 @@ virtual ~Delegate() {} }; - // Remote engine configuration. + // Engine configuration. struct CONTENT_EXPORT Config { Config(); ~Config(); @@ -58,7 +86,6 @@ bool continuous; bool interim_results; uint32_t max_hypotheses; - std::string hardware_info; std::string origin_url; int audio_sample_rate; int audio_num_bits_per_sample; @@ -67,51 +94,130 @@ scoped_refptr<SpeechRecognitionSessionPreamble> preamble; }; - virtual ~SpeechRecognitionEngine() {} - - // Set/change the recognition engine configuration. It is not allowed to call - // this function while a recognition is ongoing. - virtual void SetConfig(const Config& config) = 0; - - // Called when the speech recognition begins, before any TakeAudioChunk call. - virtual void StartRecognition() = 0; - - // End any recognition activity and don't make any further callback. - // Must be always called to close the corresponding StartRecognition call, - // even in case of errors. - // No further TakeAudioChunk/AudioChunksEnded calls are allowed after this. - virtual void EndRecognition() = 0; - - // Push a chunk of uncompressed audio data, where the chunk length agrees with - // GetDesiredAudioChunkDurationMs(). - virtual void TakeAudioChunk(const AudioChunk& data) = 0; - - // Notifies the engine that audio capture has completed and no more chunks - // will be pushed. The engine, however, can still provide further results - // using the audio chunks collected so far. - virtual void AudioChunksEnded() = 0; - - // Checks wheter recognition of pushed audio data is pending. - virtual bool IsRecognitionPending() const = 0; - - // Retrieves the desired duration, in milliseconds, of pushed AudioChunk(s). - virtual int GetDesiredAudioChunkDurationMs() const = 0; - // set_delegate detached from constructor for lazy dependency injection. void set_delegate(Delegate* delegate) { delegate_ = delegate; } - protected: - Delegate* delegate() const { return delegate_; } + // Duration of each audio packet. + static const int kAudioPacketIntervalMs; + + // IDs passed to URLFetcher::Create(). Used for testing. + static const int kUpstreamUrlFetcherIdForTesting; + static const int kDownstreamUrlFetcherIdForTesting; + + explicit SpeechRecognitionEngine(net::URLRequestContextGetter* context); + ~SpeechRecognitionEngine() override; + + void SetConfig(const Config& config); + void StartRecognition(); + void EndRecognition(); + void TakeAudioChunk(const AudioChunk& data); + void AudioChunksEnded(); + bool IsRecognitionPending() const; + int GetDesiredAudioChunkDurationMs() const; + + // net::URLFetcherDelegate methods. + void OnURLFetchComplete(const net::URLFetcher* source) override; + void OnURLFetchDownloadProgress(const net::URLFetcher* source, + int64_t current, + int64_t total) override; private: Delegate* delegate_; -}; -// These typedefs are to workaround the issue with certain versions of -// Visual Studio where it gets confused between multiple Delegate -// classes and gives a C2500 error. -typedef SpeechRecognitionEngine::Delegate SpeechRecognitionEngineDelegate; -typedef SpeechRecognitionEngine::Config SpeechRecognitionEngineConfig; + // Response status codes from the speech recognition webservice. + static const int kWebserviceStatusNoError; + static const int kWebserviceStatusErrorNoMatch; + + // Frame type for framed POST data. Do NOT change these. They must match + // values the server expects. + enum FrameType { + FRAME_PREAMBLE_AUDIO = 0, + FRAME_RECOGNITION_AUDIO = 1 + }; + + // Data types for the internal Finite State Machine (FSM). + enum FSMState { + STATE_IDLE = 0, + STATE_BOTH_STREAMS_CONNECTED, + STATE_WAITING_DOWNSTREAM_RESULTS, + STATE_MAX_VALUE = STATE_WAITING_DOWNSTREAM_RESULTS + }; + + enum FSMEvent { + EVENT_END_RECOGNITION = 0, + EVENT_START_RECOGNITION, + EVENT_AUDIO_CHUNK, + EVENT_AUDIO_CHUNKS_ENDED, + EVENT_UPSTREAM_ERROR, + EVENT_DOWNSTREAM_ERROR, + EVENT_DOWNSTREAM_RESPONSE, + EVENT_DOWNSTREAM_CLOSED, + EVENT_MAX_VALUE = EVENT_DOWNSTREAM_CLOSED + }; + + struct FSMEventArgs { + explicit FSMEventArgs(FSMEvent event_value); + ~FSMEventArgs(); + + FSMEvent event; + + // In case of EVENT_AUDIO_CHUNK, holds the chunk pushed by |TakeAudioChunk|. + scoped_refptr<const AudioChunk> audio_data; + + // In case of EVENT_DOWNSTREAM_RESPONSE, hold the current chunk bytes. + std::unique_ptr<std::vector<uint8_t>> response; + + private: + DISALLOW_COPY_AND_ASSIGN(FSMEventArgs); + }; + + // Invoked by both upstream and downstream URLFetcher callbacks to handle + // new chunk data, connection closed or errors notifications. + void DispatchHTTPResponse(const net::URLFetcher* source, + bool end_of_response); + + // Entry point for pushing any new external event into the recognizer FSM. + void DispatchEvent(const FSMEventArgs& event_args); + + // Defines the behavior of the recognizer FSM, selecting the appropriate + // transition according to the current state and event. + FSMState ExecuteTransitionAndGetNextState(const FSMEventArgs& event_args); + + // The methods below handle transitions of the recognizer FSM. + FSMState ConnectBothStreams(const FSMEventArgs& event_args); + FSMState TransmitAudioUpstream(const FSMEventArgs& event_args); + FSMState ProcessDownstreamResponse(const FSMEventArgs& event_args); + FSMState RaiseNoMatchErrorIfGotNoResults(const FSMEventArgs& event_args); + FSMState CloseUpstreamAndWaitForResults(const FSMEventArgs& event_args); + FSMState CloseDownstream(const FSMEventArgs& event_args); + FSMState AbortSilently(const FSMEventArgs& event_args); + FSMState AbortWithError(const FSMEventArgs& event_args); + FSMState Abort(SpeechRecognitionErrorCode error); + FSMState DoNothing(const FSMEventArgs& event_args); + FSMState NotFeasible(const FSMEventArgs& event_args); + + std::string GetAcceptedLanguages() const; + std::string GenerateRequestKey() const; + + // Upload a single chunk of audio data. Handles both unframed and framed + // upload formats, and uses the appropriate one. + void UploadAudioChunk(const std::string& data, FrameType type, bool is_final); + + Config config_; + std::unique_ptr<net::URLFetcher> upstream_fetcher_; + std::unique_ptr<net::URLFetcher> downstream_fetcher_; + scoped_refptr<net::URLRequestContextGetter> url_context_; + std::unique_ptr<AudioEncoder> encoder_; + std::unique_ptr<AudioEncoder> preamble_encoder_; + ChunkedByteBuffer chunked_byte_buffer_; + size_t previous_response_length_; + bool got_last_definitive_result_; + bool is_dispatching_event_; + bool use_framed_post_data_; + FSMState state_; + + DISALLOW_COPY_AND_ASSIGN(SpeechRecognitionEngine); +}; } // namespace content
diff --git a/content/browser/speech/google_streaming_remote_engine_unittest.cc b/content/browser/speech/speech_recognition_engine_unittest.cc similarity index 90% rename from content/browser/speech/google_streaming_remote_engine_unittest.cc rename to content/browser/speech/speech_recognition_engine_unittest.cc index ec59465f..a71e8b83 100644 --- a/content/browser/speech/google_streaming_remote_engine_unittest.cc +++ b/content/browser/speech/speech_recognition_engine_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "content/browser/speech/google_streaming_remote_engine.h" +#include "content/browser/speech/speech_recognition_engine.h" #include <stddef.h> #include <stdint.h> @@ -40,10 +40,11 @@ // Note: the terms upstream and downstream are from the point-of-view of the // client (engine_under_test_). -class GoogleStreamingRemoteEngineTest : public SpeechRecognitionEngineDelegate, - public testing::Test { +class SpeechRecognitionEngineTest + : public SpeechRecognitionEngine::Delegate, + public testing::Test { public: - GoogleStreamingRemoteEngineTest() + SpeechRecognitionEngineTest() : last_number_of_upstream_chunks_seen_(0U), error_(SPEECH_RECOGNITION_ERROR_NONE), end_of_utterance_counter_(0) { } @@ -95,7 +96,7 @@ void ExpectFramedChunk(const std::string& chunk, uint32_t type); void CloseMockDownstream(DownstreamError error); - std::unique_ptr<GoogleStreamingRemoteEngine> engine_under_test_; + std::unique_ptr<SpeechRecognitionEngine> engine_under_test_; TestURLFetcherFactory url_fetcher_factory_; size_t last_number_of_upstream_chunks_seen_; base::MessageLoop message_loop_; @@ -105,7 +106,7 @@ std::queue<SpeechRecognitionResults> results_; }; -TEST_F(GoogleStreamingRemoteEngineTest, SingleDefinitiveResult) { +TEST_F(SpeechRecognitionEngineTest, SingleDefinitiveResult) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -145,7 +146,7 @@ ASSERT_EQ(0U, results_.size()); } -TEST_F(GoogleStreamingRemoteEngineTest, SeveralStreamingResults) { +TEST_F(SpeechRecognitionEngineTest, SeveralStreamingResults) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -191,7 +192,7 @@ ASSERT_EQ(0U, results_.size()); } -TEST_F(GoogleStreamingRemoteEngineTest, NoFinalResultAfterAudioChunksEnded) { +TEST_F(SpeechRecognitionEngineTest, NoFinalResultAfterAudioChunksEnded) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -228,7 +229,7 @@ ASSERT_EQ(0U, results_.size()); } -TEST_F(GoogleStreamingRemoteEngineTest, NoMatchError) { +TEST_F(SpeechRecognitionEngineTest, NoMatchError) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -259,7 +260,7 @@ ExpectResultsReceived(empty_result); } -TEST_F(GoogleStreamingRemoteEngineTest, HTTPError) { +TEST_F(SpeechRecognitionEngineTest, HTTPError) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -277,7 +278,7 @@ ASSERT_EQ(0U, results_.size()); } -TEST_F(GoogleStreamingRemoteEngineTest, NetworkError) { +TEST_F(SpeechRecognitionEngineTest, NetworkError) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -295,7 +296,7 @@ ASSERT_EQ(0U, results_.size()); } -TEST_F(GoogleStreamingRemoteEngineTest, Stability) { +TEST_F(SpeechRecognitionEngineTest, Stability) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); ASSERT_EQ(0U, UpstreamChunksUploadedFromLastCall()); @@ -342,7 +343,7 @@ ASSERT_EQ(0U, results_.size()); } -TEST_F(GoogleStreamingRemoteEngineTest, EndOfUtterance) { +TEST_F(SpeechRecognitionEngineTest, EndOfUtterance) { StartMockRecognition(); ASSERT_TRUE(GetUpstreamFetcher()); @@ -367,7 +368,7 @@ EndMockRecognition(); } -TEST_F(GoogleStreamingRemoteEngineTest, SendPreamble) { +TEST_F(SpeechRecognitionEngineTest, SendPreamble) { const size_t kPreambleLength = 100; scoped_refptr<SpeechRecognitionSessionPreamble> preamble = new SpeechRecognitionSessionPreamble(); @@ -417,29 +418,29 @@ ASSERT_EQ(0U, results_.size()); } -void GoogleStreamingRemoteEngineTest::SetUp() { +void SpeechRecognitionEngineTest::SetUp() { engine_under_test_.reset( - new GoogleStreamingRemoteEngine(NULL /*URLRequestContextGetter*/)); + new SpeechRecognitionEngine(NULL /*URLRequestContextGetter*/)); engine_under_test_->set_delegate(this); } -void GoogleStreamingRemoteEngineTest::TearDown() { +void SpeechRecognitionEngineTest::TearDown() { engine_under_test_.reset(); } -TestURLFetcher* GoogleStreamingRemoteEngineTest::GetUpstreamFetcher() { +TestURLFetcher* SpeechRecognitionEngineTest::GetUpstreamFetcher() { return url_fetcher_factory_.GetFetcherByID( - GoogleStreamingRemoteEngine::kUpstreamUrlFetcherIdForTesting); + SpeechRecognitionEngine::kUpstreamUrlFetcherIdForTesting); } -TestURLFetcher* GoogleStreamingRemoteEngineTest::GetDownstreamFetcher() { +TestURLFetcher* SpeechRecognitionEngineTest::GetDownstreamFetcher() { return url_fetcher_factory_.GetFetcherByID( - GoogleStreamingRemoteEngine::kDownstreamUrlFetcherIdForTesting); + SpeechRecognitionEngine::kDownstreamUrlFetcherIdForTesting); } // Starts recognition on the engine, ensuring that both stream fetchers are // created. -void GoogleStreamingRemoteEngineTest::StartMockRecognition() { +void SpeechRecognitionEngineTest::StartMockRecognition() { DCHECK(engine_under_test_.get()); ASSERT_FALSE(engine_under_test_->IsRecognitionPending()); @@ -456,7 +457,7 @@ downstream_fetcher->set_url(downstream_fetcher->GetOriginalURL()); } -void GoogleStreamingRemoteEngineTest::EndMockRecognition() { +void SpeechRecognitionEngineTest::EndMockRecognition() { DCHECK(engine_under_test_.get()); engine_under_test_->EndRecognition(); ASSERT_FALSE(engine_under_test_->IsRecognitionPending()); @@ -468,7 +469,7 @@ // de-registered from the TestURLFetcherFactory on destruction. } -void GoogleStreamingRemoteEngineTest::InjectDummyAudioChunk() { +void SpeechRecognitionEngineTest::InjectDummyAudioChunk() { unsigned char dummy_audio_buffer_data[2] = {'\0', '\0'}; scoped_refptr<AudioChunk> dummy_audio_chunk( new AudioChunk(&dummy_audio_buffer_data[0], @@ -478,7 +479,7 @@ engine_under_test_->TakeAudioChunk(*dummy_audio_chunk.get()); } -size_t GoogleStreamingRemoteEngineTest::UpstreamChunksUploadedFromLastCall() { +size_t SpeechRecognitionEngineTest::UpstreamChunksUploadedFromLastCall() { TestURLFetcher* upstream_fetcher = GetUpstreamFetcher(); DCHECK(upstream_fetcher); const size_t number_of_chunks = upstream_fetcher->upload_chunks().size(); @@ -489,14 +490,14 @@ return new_chunks; } -std::string GoogleStreamingRemoteEngineTest::LastUpstreamChunkUploaded() { +std::string SpeechRecognitionEngineTest::LastUpstreamChunkUploaded() { TestURLFetcher* upstream_fetcher = GetUpstreamFetcher(); DCHECK(upstream_fetcher); DCHECK(!upstream_fetcher->upload_chunks().empty()); return upstream_fetcher->upload_chunks().back(); } -void GoogleStreamingRemoteEngineTest::ProvideMockProtoResultDownstream( +void SpeechRecognitionEngineTest::ProvideMockProtoResultDownstream( const proto::SpeechRecognitionEvent& result) { TestURLFetcher* downstream_fetcher = GetDownstreamFetcher(); @@ -513,7 +514,7 @@ -1 /* total response length not used */); } -void GoogleStreamingRemoteEngineTest::ProvideMockResultDownstream( +void SpeechRecognitionEngineTest::ProvideMockResultDownstream( const SpeechRecognitionResult& result) { proto::SpeechRecognitionEvent proto_event; proto_event.set_status(proto::SpeechRecognitionEvent::STATUS_SUCCESS); @@ -529,7 +530,7 @@ ProvideMockProtoResultDownstream(proto_event); } -void GoogleStreamingRemoteEngineTest::CloseMockDownstream( +void SpeechRecognitionEngineTest::CloseMockDownstream( DownstreamError error) { TestURLFetcher* downstream_fetcher = GetDownstreamFetcher(); ASSERT_TRUE(downstream_fetcher); @@ -549,14 +550,14 @@ downstream_fetcher->delegate()->OnURLFetchComplete(downstream_fetcher); } -void GoogleStreamingRemoteEngineTest::ExpectResultsReceived( +void SpeechRecognitionEngineTest::ExpectResultsReceived( const SpeechRecognitionResults& results) { ASSERT_GE(1U, results_.size()); ASSERT_TRUE(ResultsAreEqual(results, results_.front())); results_.pop(); } -bool GoogleStreamingRemoteEngineTest::ResultsAreEqual( +bool SpeechRecognitionEngineTest::ResultsAreEqual( const SpeechRecognitionResults& a, const SpeechRecognitionResults& b) { if (a.size() != b.size()) return false; @@ -581,7 +582,7 @@ return true; } -void GoogleStreamingRemoteEngineTest::ExpectFramedChunk( +void SpeechRecognitionEngineTest::ExpectFramedChunk( const std::string& chunk, uint32_t type) { uint32_t value; base::ReadBigEndian(&chunk[0], &value); @@ -590,7 +591,7 @@ EXPECT_EQ(type, value); } -std::string GoogleStreamingRemoteEngineTest::SerializeProtobufResponse( +std::string SpeechRecognitionEngineTest::SerializeProtobufResponse( const proto::SpeechRecognitionEvent& msg) { std::string msg_string; msg.SerializeToString(&msg_string);
diff --git a/content/browser/speech/speech_recognition_manager_impl.cc b/content/browser/speech/speech_recognition_manager_impl.cc index 3b261fc..4dde8018 100644 --- a/content/browser/speech/speech_recognition_manager_impl.cc +++ b/content/browser/speech/speech_recognition_manager_impl.cc
@@ -14,7 +14,6 @@ #include "content/browser/browser_main_loop.h" #include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" -#include "content/browser/speech/google_streaming_remote_engine.h" #include "content/browser/speech/speech_recognition_engine.h" #include "content/browser/speech/speech_recognizer_impl.h" #include "content/public/browser/browser_thread.h" @@ -107,11 +106,6 @@ session->config = config; session->context = config.initial_context; - std::string hardware_info; - bool can_report_metrics = false; - if (delegate_) - delegate_->GetDiagnosticInformation(&can_report_metrics, &hardware_info); - #if !defined(OS_ANDROID) // A SpeechRecognitionEngine (and corresponding Config) is required only // when using SpeechRecognizerImpl, which performs the audio capture and @@ -120,7 +114,7 @@ // activities performed outside of the browser (delegated via JNI to the // Android API implementation). - SpeechRecognitionEngineConfig remote_engine_config; + SpeechRecognitionEngine::Config remote_engine_config; remote_engine_config.language = config.language; remote_engine_config.grammars = config.grammars; remote_engine_config.audio_sample_rate = @@ -131,14 +125,13 @@ remote_engine_config.continuous = config.continuous; remote_engine_config.interim_results = config.interim_results; remote_engine_config.max_hypotheses = config.max_hypotheses; - remote_engine_config.hardware_info = hardware_info; remote_engine_config.origin_url = config.origin_url; remote_engine_config.auth_token = config.auth_token; remote_engine_config.auth_scope = config.auth_scope; remote_engine_config.preamble = config.preamble; SpeechRecognitionEngine* google_remote_engine = - new GoogleStreamingRemoteEngine(config.url_request_context_getter.get()); + new SpeechRecognitionEngine(config.url_request_context_getter.get()); google_remote_engine->SetConfig(remote_engine_config); session->recognizer = new SpeechRecognizerImpl(
diff --git a/content/browser/speech/speech_recognizer_impl.h b/content/browser/speech/speech_recognizer_impl.h index 074d48a..a9171c3 100644 --- a/content/browser/speech/speech_recognizer_impl.h +++ b/content/browser/speech/speech_recognizer_impl.h
@@ -32,7 +32,7 @@ class CONTENT_EXPORT SpeechRecognizerImpl : public SpeechRecognizer, public media::AudioInputController::EventHandler, - public NON_EXPORTED_BASE(SpeechRecognitionEngineDelegate) { + public NON_EXPORTED_BASE(SpeechRecognitionEngine::Delegate) { public: static const int kAudioSampleRate; static const media::ChannelLayout kChannelLayout;
diff --git a/content/browser/speech/speech_recognizer_impl_unittest.cc b/content/browser/speech/speech_recognizer_impl_unittest.cc index fffc26d..38f66d1 100644 --- a/content/browser/speech/speech_recognizer_impl_unittest.cc +++ b/content/browser/speech/speech_recognizer_impl_unittest.cc
@@ -9,8 +9,8 @@ #include "base/sys_byteorder.h" #include "content/browser/browser_thread_impl.h" -#include "content/browser/speech/google_streaming_remote_engine.h" #include "content/browser/speech/proto/google_streaming_api.pb.h" +#include "content/browser/speech/speech_recognition_engine.h" #include "content/browser/speech/speech_recognizer_impl.h" #include "content/public/browser/speech_recognition_event_listener.h" #include "media/audio/audio_manager_base.h" @@ -50,8 +50,8 @@ volume_(-1.0f) { // SpeechRecognizer takes ownership of sr_engine. SpeechRecognitionEngine* sr_engine = - new GoogleStreamingRemoteEngine(NULL /* URLRequestContextGetter */); - SpeechRecognitionEngineConfig config; + new SpeechRecognitionEngine(NULL /* URLRequestContextGetter */); + SpeechRecognitionEngine::Config config; config.audio_num_bits_per_sample = SpeechRecognizerImpl::kNumBitsPerAudioSample; config.audio_sample_rate = SpeechRecognizerImpl::kAudioSampleRate; @@ -67,7 +67,7 @@ int audio_packet_length_bytes = (SpeechRecognizerImpl::kAudioSampleRate * - GoogleStreamingRemoteEngine::kAudioPacketIntervalMs * + SpeechRecognitionEngine::kAudioPacketIntervalMs * ChannelLayoutToChannelCount(SpeechRecognizerImpl::kChannelLayout) * SpeechRecognizerImpl::kNumBitsPerAudioSample) / (8 * 1000); audio_packet_.resize(audio_packet_length_bytes); @@ -277,7 +277,7 @@ // Issue the network callback to complete the process. net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID( - GoogleStreamingRemoteEngine::kDownstreamUrlFetcherIdForTesting); + SpeechRecognitionEngine::kDownstreamUrlFetcherIdForTesting); ASSERT_TRUE(fetcher); fetcher->set_url(fetcher->GetOriginalURL()); fetcher->set_status(net::URLRequestStatus()); @@ -427,7 +427,7 @@ ASSERT_TRUE(controller); int num_packets = (SpeechRecognizerImpl::kNoSpeechTimeoutMs) / - GoogleStreamingRemoteEngine::kAudioPacketIntervalMs + 1; + SpeechRecognitionEngine::kAudioPacketIntervalMs + 1; // The vector is already filled with zero value samples on create. for (int i = 0; i < num_packets; ++i) { controller->event_handler()->OnData(controller, audio_bus_.get()); @@ -454,7 +454,7 @@ ASSERT_TRUE(controller); int num_packets = (SpeechRecognizerImpl::kNoSpeechTimeoutMs) / - GoogleStreamingRemoteEngine::kAudioPacketIntervalMs; + SpeechRecognitionEngine::kAudioPacketIntervalMs; // The vector is already filled with zero value samples on create. for (int i = 0; i < num_packets / 2; ++i) { @@ -491,7 +491,7 @@ // Feed some samples to begin with for the endpointer to do noise estimation. int num_packets = SpeechRecognizerImpl::kEndpointerEstimationTimeMs / - GoogleStreamingRemoteEngine::kAudioPacketIntervalMs; + SpeechRecognitionEngine::kAudioPacketIntervalMs; FillPacketWithNoise(); for (int i = 0; i < num_packets; ++i) { controller->event_handler()->OnData(controller, audio_bus_.get());
diff --git a/content/browser/utility_process_host_impl.cc b/content/browser/utility_process_host_impl.cc index c025a4a..d5924961 100644 --- a/content/browser/utility_process_host_impl.cc +++ b/content/browser/utility_process_host_impl.cc
@@ -259,6 +259,8 @@ return false; } + std::string mojo_token = mojo_application_host_->InitWithToken(); + if (RenderProcessHost::run_renderer_in_process()) { DCHECK(g_utility_main_thread_factory); // See comment in RenderProcessHostImpl::Init() for the background on why we @@ -267,7 +269,7 @@ g_utility_main_thread_factory(InProcessChildThreadParams( channel_id, BrowserThread::UnsafeGetMessageLoopForThread( BrowserThread::IO)->task_runner(), - std::string(), mojo_application_host_->GetToken()))); + mojo::MessagePipeHandle(), mojo_token))); in_process_thread_->Start(); } else { const base::CommandLine& browser_command_line = @@ -346,7 +348,7 @@ #endif cmd_line->AppendSwitchASCII(switches::kMojoApplicationChannelToken, - mojo_application_host_->GetToken()); + mojo_token); process_->Launch( new UtilitySandboxedProcessLauncherDelegate(exposed_dir_,
diff --git a/content/browser/webui/web_ui_impl.cc b/content/browser/webui/web_ui_impl.cc index a7b76147..c4c5b63 100644 --- a/content/browser/webui/web_ui_impl.cc +++ b/content/browser/webui/web_ui_impl.cc
@@ -96,7 +96,8 @@ GetContentClient()->browser()->LogWebUIUrl(site_url); } - controller_->RenderViewReused(render_view_host); + for (WebUIMessageHandler* handler : handlers_) + handler->RenderViewReused(); } WebContents* WebUIImpl::GetWebContents() const {
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc index d7c88b02..173fb08 100644 --- a/content/child/child_thread_impl.cc +++ b/content/child/child_thread_impl.cc
@@ -265,7 +265,7 @@ const InProcessChildThreadParams& params) { options_.browser_process_io_runner = params.io_runner(); options_.channel_name = params.channel_name(); - options_.in_process_ipc_token = params.ipc_token(); + options_.in_process_message_pipe_handle = params.handle(); options_.in_process_application_token = params.application_token(); return *this; } @@ -335,18 +335,15 @@ } void ChildThreadImpl::ConnectChannel(bool use_mojo_channel, - const std::string& ipc_token) { + mojo::ScopedMessagePipeHandle handle) { bool create_pipe_now = true; if (use_mojo_channel) { VLOG(1) << "Mojo is enabled on child"; - mojo::ScopedMessagePipeHandle handle; if (!IsInBrowserProcess()) { DCHECK(!handle.is_valid()); handle = mojo::edk::CreateChildMessagePipe( base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( switches::kMojoChannelToken)); - } else { - handle = mojo::edk::CreateChildMessagePipe(ipc_token); } DCHECK(handle.is_valid()); channel_->Init(IPC::ChannelMojo::CreateClientFactory(std::move(handle)), @@ -393,7 +390,7 @@ UMA_HISTOGRAM_TIMES("Mojo.Shell.ChildConnectionTime", timer.Elapsed()); } - mojo_application_.reset(new MojoApplication()); + mojo_application_.reset(new MojoApplication(GetIOTaskRunner())); std::string mojo_application_token; if (!IsInBrowserProcess()) { mojo_application_token = @@ -469,7 +466,9 @@ channel_->AddFilter(startup_filter); } - ConnectChannel(options.use_mojo_channel, options.in_process_ipc_token); + ConnectChannel( + options.use_mojo_channel, + mojo::MakeScopedHandle(options.in_process_message_pipe_handle)); IPC::AttachmentBroker* broker = IPC::AttachmentBroker::GetGlobal(); if (broker && !broker->IsPrivilegedBroker()) broker->RegisterBrokerCommunicationChannel(channel_.get()); @@ -611,6 +610,9 @@ } bool ChildThreadImpl::OnMessageReceived(const IPC::Message& msg) { + if (mojo_application_->OnMessageReceived(msg)) + return true; + // Resource responses are sent to the resource dispatcher. if (resource_dispatcher_->OnMessageReceived(msg)) return true;
diff --git a/content/child/child_thread_impl.h b/content/child/child_thread_impl.h index 1476395..fe2cc28 100644 --- a/content/child/child_thread_impl.h +++ b/content/child/child_thread_impl.h
@@ -221,7 +221,8 @@ // We create the channel first without connecting it so we can add filters // prior to any messages being received, then connect it afterwards. - void ConnectChannel(bool use_mojo_channel, const std::string& ipc_token); + void ConnectChannel(bool use_mojo_channel, + mojo::ScopedMessagePipeHandle handle); // IPC message handlers. void OnShutdown(); @@ -304,7 +305,7 @@ bool use_mojo_channel; scoped_refptr<base::SequencedTaskRunner> browser_process_io_runner; std::vector<IPC::MessageFilter*> startup_filters; - std::string in_process_ipc_token; + mojo::MessagePipeHandle in_process_message_pipe_handle; std::string in_process_application_token; private:
diff --git a/content/child/mojo/mojo_application.cc b/content/child/mojo/mojo_application.cc index 7aa4597..833f2997 100644 --- a/content/child/mojo/mojo_application.cc +++ b/content/child/mojo/mojo_application.cc
@@ -6,19 +6,36 @@ #include <utility> -#include "base/logging.h" +#include "build/build_config.h" +#include "content/child/child_process.h" #include "content/common/application_setup.mojom.h" +#include "content/common/mojo/channel_init.h" +#include "content/common/mojo/mojo_messages.h" +#include "ipc/ipc_message.h" #include "mojo/edk/embedder/embedder.h" +#include "mojo/public/cpp/bindings/interface_ptr.h" namespace content { -MojoApplication::MojoApplication() { +MojoApplication::MojoApplication( + scoped_refptr<base::SequencedTaskRunner> io_task_runner) + : io_task_runner_(io_task_runner) { + DCHECK(io_task_runner_); } MojoApplication::~MojoApplication() { } -void MojoApplication::InitWithToken(const std::string& token) { +bool MojoApplication::OnMessageReceived(const IPC::Message& msg) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(MojoApplication, msg) + IPC_MESSAGE_HANDLER(MojoMsg_Activate, OnActivate) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void MojoApplication::InitWithToken(std::string token) { mojo::ScopedMessagePipeHandle handle = mojo::edk::CreateChildMessagePipe(token); DCHECK(handle.is_valid()); @@ -35,4 +52,28 @@ service_registry_.BindRemoteServiceProvider(std::move(services)); } +void MojoApplication::OnActivate( + const IPC::PlatformFileForTransit& file) { +#if defined(OS_POSIX) + base::PlatformFile handle = file.fd; +#elif defined(OS_WIN) + base::PlatformFile handle = file.GetHandle(); +#endif + + mojo::ScopedMessagePipeHandle pipe = + channel_init_.Init(handle, io_task_runner_); + DCHECK(pipe.is_valid()); + + mojom::ApplicationSetupPtr application_setup; + application_setup.Bind( + mojo::InterfacePtrInfo<mojom::ApplicationSetup>(std::move(pipe), 0u)); + + shell::mojom::InterfaceProviderPtr services; + shell::mojom::InterfaceProviderPtr exposed_services; + service_registry_.Bind(GetProxy(&exposed_services)); + application_setup->ExchangeInterfaceProviders(GetProxy(&services), + std::move(exposed_services)); + service_registry_.BindRemoteServiceProvider(std::move(services)); +} + } // namespace content
diff --git a/content/child/mojo/mojo_application.h b/content/child/mojo/mojo_application.h index 68602c4f..3481212 100644 --- a/content/child/mojo/mojo_application.h +++ b/content/child/mojo/mojo_application.h
@@ -8,26 +8,44 @@ #include <string> #include "base/macros.h" +#include "content/common/mojo/channel_init.h" #include "content/common/mojo/service_registry_impl.h" +#include "ipc/ipc_platform_file.h" +#include "mojo/public/cpp/system/message_pipe.h" + +namespace base { +class SequencedTaskRunner; +} + +namespace IPC { +class Message; +} namespace content { // MojoApplication represents the code needed to setup a child process as a -// Mojo application. Instantiate MojoApplication and call InitWithToken() with -// a token passed from the process host. It makes the ServiceRegistry interface -// available. +// Mojo application via Chrome IPC. Instantiate MojoApplication and call its +// OnMessageReceived method to give it a shot at handling Chrome IPC messages. +// It makes the ServiceRegistry interface available. class MojoApplication { public: - MojoApplication(); + explicit MojoApplication( + scoped_refptr<base::SequencedTaskRunner> io_task_runner); virtual ~MojoApplication(); - // Initializes this MojoApplicaiton with a message pipe obtained using - // |token|. - void InitWithToken(const std::string& token); + // TODO(amistry): Remove OnMessageReceived() when all bootstrapping has + // migrated to these functions. + void InitWithToken(std::string token); + + bool OnMessageReceived(const IPC::Message& msg); ServiceRegistry* service_registry() { return &service_registry_; } private: + void OnActivate(const IPC::PlatformFileForTransit& file); + + scoped_refptr<base::SequencedTaskRunner> io_task_runner_; + ChannelInit channel_init_; ServiceRegistryImpl service_registry_; DISALLOW_COPY_AND_ASSIGN(MojoApplication);
diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc index f3f5f63..17c60d6 100644 --- a/content/child/resource_dispatcher.cc +++ b/content/child/resource_dispatcher.cc
@@ -260,8 +260,6 @@ CHECK(base::SharedMemory::IsHandleValid(request_info->buffer->handle())); CHECK_GE(request_info->buffer_size, data_offset + data_length); - base::TimeTicks time_start = base::TimeTicks::Now(); - const char* data_start = static_cast<char*>(request_info->buffer->memory()); CHECK(data_start); CHECK(data_start + data_offset); @@ -281,9 +279,6 @@ // |data| takes care of ACKing. send_ack = false; request_info->peer->OnReceivedData(std::move(data)); - - UMA_HISTOGRAM_TIMES("ResourceDispatcher.OnReceivedDataTime", - base::TimeTicks::Now() - time_start); } // Acknowledge the reception of this data.
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h index 68f6b11..c26352d0 100644 --- a/content/common/content_message_generator.h +++ b/content/common/content_message_generator.h
@@ -46,6 +46,7 @@ #include "content/common/memory_messages.h" #include "content/common/message_port_messages.h" #include "content/common/mime_registry_messages.h" +#include "content/common/mojo/mojo_messages.h" #include "content/common/page_messages.h" #include "content/common/pepper_messages.h" #include "content/common/platform_notification_messages.h"
diff --git a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc index 5877e98..2fdfb98 100644 --- a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc +++ b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.cc
@@ -310,15 +310,6 @@ return real_gl_.get(); } -bool WebGraphicsContext3DCommandBufferImpl::IsCommandBufferContextLost() { - // If the channel shut down unexpectedly, let that supersede the - // command buffer's state. - if (host_.get() && host_->IsLost()) - return true; - gpu::CommandBuffer::State state = command_buffer_->GetLastState(); - return gpu::error::IsError(state.error); -} - // static WebGraphicsContext3DCommandBufferImpl* WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( @@ -330,12 +321,7 @@ const GURL& active_url, const SharedMemoryLimits& limits, WebGraphicsContext3DCommandBufferImpl* share_context) { - if (!host) - return NULL; - - if (share_context && share_context->IsCommandBufferContextLost()) - return NULL; - + DCHECK(host); return new WebGraphicsContext3DCommandBufferImpl( gpu::kNullSurfaceHandle, active_url, host, attributes, gpu_preference, share_resources, automatic_flushes, limits, share_context);
diff --git a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h index b66692e..9272cfd 100644 --- a/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h +++ b/content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h
@@ -131,10 +131,6 @@ return real_gl_.get(); } - // Return true if GPU process reported context lost or there was a - // problem communicating with the GPU process. - bool IsCommandBufferContextLost(); - // Create & initialize a WebGraphicsContext3DCommandBufferImpl. Return NULL // on any failure. static CONTENT_EXPORT WebGraphicsContext3DCommandBufferImpl*
diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc index ccc3ef8..dd8e368 100644 --- a/content/common/gpu/media/android_video_decode_accelerator.cc +++ b/content/common/gpu/media/android_video_decode_accelerator.cc
@@ -1319,9 +1319,11 @@ capabilities.flags = media::VideoDecodeAccelerator::Capabilities:: NEEDS_ALL_PICTURE_BUFFERS_TO_DECODE | media::VideoDecodeAccelerator::Capabilities:: - SUPPORTS_EXTERNAL_OUTPUT_SURFACE | - media::VideoDecodeAccelerator::Capabilities:: SUPPORTS_DEFERRED_INITIALIZATION; + if (media::MediaCodecUtil::IsSurfaceViewOutputSupported()) { + capabilities.flags |= media::VideoDecodeAccelerator::Capabilities:: + SUPPORTS_EXTERNAL_OUTPUT_SURFACE; + } } return capabilities;
diff --git a/content/common/in_process_child_thread_params.cc b/content/common/in_process_child_thread_params.cc index 47e0fd9..25162b7 100644 --- a/content/common/in_process_child_thread_params.cc +++ b/content/common/in_process_child_thread_params.cc
@@ -9,9 +9,9 @@ InProcessChildThreadParams::InProcessChildThreadParams( const std::string& channel_name, scoped_refptr<base::SequencedTaskRunner> io_runner, - const std::string& ipc_token, + mojo::MessagePipeHandle handle, const std::string& application_token) - : channel_name_(channel_name), io_runner_(io_runner), ipc_token_(ipc_token), + : channel_name_(channel_name), io_runner_(io_runner), handle_(handle), application_token_(application_token) {} InProcessChildThreadParams::InProcessChildThreadParams(
diff --git a/content/common/in_process_child_thread_params.h b/content/common/in_process_child_thread_params.h index ebbf8f6..f96060b 100644 --- a/content/common/in_process_child_thread_params.h +++ b/content/common/in_process_child_thread_params.h
@@ -10,6 +10,7 @@ #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner.h" #include "content/common/content_export.h" +#include "mojo/public/cpp/system/message_pipe.h" namespace content { @@ -21,7 +22,7 @@ InProcessChildThreadParams( const std::string& channel_name, scoped_refptr<base::SequencedTaskRunner> io_runner, - const std::string& ipc_token = std::string(), + mojo::MessagePipeHandle handle = mojo::MessagePipeHandle(), const std::string& application_token = std::string()); InProcessChildThreadParams(const InProcessChildThreadParams& other); ~InProcessChildThreadParams(); @@ -30,7 +31,7 @@ scoped_refptr<base::SequencedTaskRunner> io_runner() const { return io_runner_; } - const std::string& ipc_token() const { return ipc_token_; } + mojo::MessagePipeHandle handle() const { return handle_; } const std::string& application_token() const { return application_token_; } @@ -38,7 +39,7 @@ private: std::string channel_name_; scoped_refptr<base::SequencedTaskRunner> io_runner_; - std::string ipc_token_; + mojo::MessagePipeHandle handle_; std::string application_token_; };
diff --git a/content/common/mojo/channel_init.cc b/content/common/mojo/channel_init.cc new file mode 100644 index 0000000..c8172ab2 --- /dev/null +++ b/content/common/mojo/channel_init.cc
@@ -0,0 +1,32 @@ +// Copyright 2015 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 "content/common/mojo/channel_init.h" + +#include <utility> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/command_line.h" +#include "base/lazy_instance.h" +#include "base/memory/ref_counted.h" +#include "base/message_loop/message_loop.h" +#include "base/task_runner.h" +#include "base/thread_task_runner_handle.h" +#include "mojo/edk/embedder/embedder.h" + +namespace content { + +ChannelInit::ChannelInit() {} + +ChannelInit::~ChannelInit() {} + +mojo::ScopedMessagePipeHandle ChannelInit::Init( + base::PlatformFile file, + scoped_refptr<base::TaskRunner> io_thread_task_runner) { + return mojo::edk::CreateMessagePipe( + mojo::edk::ScopedPlatformHandle(mojo::edk::PlatformHandle(file))); +} + +} // namespace content
diff --git a/content/common/mojo/channel_init.h b/content/common/mojo/channel_init.h new file mode 100644 index 0000000..6b9daae --- /dev/null +++ b/content/common/mojo/channel_init.h
@@ -0,0 +1,41 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_COMMON_MOJO_CHANNEL_INIT_H_ +#define CONTENT_COMMON_MOJO_CHANNEL_INIT_H_ + +#include "base/files/file.h" +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "content/common/content_export.h" +#include "mojo/public/cpp/system/message_pipe.h" + +namespace base { +class TaskRunner; +} + +namespace content { + +// ChannelInit handles creation and destruction of the Mojo channel. It is not +// thread-safe, but may be used on any single thread with a MessageLoop. +// +// TODO(rockot): Get rid of this class ASAP (i.e. once the patch which includes +// this TODO has stuck for a bit) since it's no longer necessary. +class CONTENT_EXPORT ChannelInit { + public: + ChannelInit(); + ~ChannelInit(); + + // Initializes the channel. This takes ownership of |file|. + mojo::ScopedMessagePipeHandle Init( + base::PlatformFile file, + scoped_refptr<base::TaskRunner> io_thread_task_runner); + + private: + DISALLOW_COPY_AND_ASSIGN(ChannelInit); +}; + +} // namespace content + +#endif // CONTENT_COMMON_MOJO_CHANNEL_INIT_H_
diff --git a/content/common/mojo/mojo_messages.h b/content/common/mojo/mojo_messages.h new file mode 100644 index 0000000..1232902 --- /dev/null +++ b/content/common/mojo/mojo_messages.h
@@ -0,0 +1,22 @@ +// Copyright (c) 2014 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. + +// IPC messages for mojo. +// Multiply-included message file, hence no include guard. + +#include "content/common/content_export.h" +#include "content/public/common/common_param_traits.h" +#include "ipc/ipc_message_macros.h" +#include "ipc/ipc_message_utils.h" +#include "ipc/ipc_param_traits.h" +#include "ipc/ipc_platform_file.h" +#include "ipc/param_traits_macros.h" + +#undef IPC_MESSAGE_EXPORT +#define IPC_MESSAGE_EXPORT CONTENT_EXPORT +#define IPC_MESSAGE_START MojoMsgStart + +// Mojo IPC is bootstrapped over Chrome IPC via this message. +IPC_MESSAGE_CONTROL1(MojoMsg_Activate, + IPC::PlatformFileForTransit /* handle */)
diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc index fe26622..ade3069 100644 --- a/content/common/sandbox_win.cc +++ b/content/common/sandbox_win.cc
@@ -283,14 +283,6 @@ bool AddGenericPolicy(sandbox::TargetPolicy* policy) { sandbox::ResultCode result; - // Renderers need to copy sections for plugin DIBs and GPU. - // GPU needs to copy sections to renderers. - result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, - sandbox::TargetPolicy::HANDLES_DUP_ANY, - L"Section"); - if (result != sandbox::SBOX_ALL_OK) - return false; - // Add the policy for the client side of a pipe. It is just a file // in the \pipe\ namespace. We restrict it to pipes that start with // "chrome." so the sandboxed process cannot connect to system services. @@ -380,13 +372,7 @@ } bool AddPolicyForSandboxedProcess(sandbox::TargetPolicy* policy) { - sandbox::ResultCode result; - // Renderers need to share events with plugins. - result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_HANDLES, - sandbox::TargetPolicy::HANDLES_DUP_ANY, - L"Event"); - if (result != sandbox::SBOX_ALL_OK) - return false; + sandbox::ResultCode result = sandbox::SBOX_ALL_OK; // Win8+ adds a device DeviceApi that we don't need. if (base::win::GetVersion() > base::win::VERSION_WIN7) @@ -459,8 +445,7 @@ static const char* kDuplicateHandleWarning = "You are attempting to duplicate a privileged handle into a sandboxed" - " process.\n Please use the sandbox::BrokerDuplicateHandle API or" - " contact security@chromium.org for assistance."; + " process.\n Please contact security@chromium.org for assistance."; void CheckDuplicateHandle(HANDLE handle) { // Get the object type (32 characters is safe; current max is 14). @@ -829,39 +814,6 @@ return base::Process(target.TakeProcessHandle()); } -bool BrokerDuplicateHandle(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options) { - // If our process is the target just duplicate the handle. - if (::GetCurrentProcessId() == target_process_id) { - return !!::DuplicateHandle(::GetCurrentProcess(), source_handle, - ::GetCurrentProcess(), target_handle, - desired_access, FALSE, options); - } - - // Try the broker next - if (g_target_services && - g_target_services->DuplicateHandle(source_handle, target_process_id, - target_handle, desired_access, - options) == sandbox::SBOX_ALL_OK) { - return true; - } - - // Finally, see if we already have access to the process. - base::win::ScopedHandle target_process; - target_process.Set(::OpenProcess(PROCESS_DUP_HANDLE, FALSE, - target_process_id)); - if (target_process.IsValid()) { - return !!::DuplicateHandle(::GetCurrentProcess(), source_handle, - target_process.Get(), target_handle, - desired_access, FALSE, options); - } - - return false; -} - bool BrokerAddTargetPeer(HANDLE peer_process) { return g_broker_services->AddTargetPeer(peer_process) == sandbox::SBOX_ALL_OK; }
diff --git a/content/content_browser.gypi b/content/content_browser.gypi index cc0a776a..c7f80d3 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi
@@ -1519,8 +1519,6 @@ 'browser/speech/endpointer/energy_endpointer.h', 'browser/speech/endpointer/energy_endpointer_params.cc', 'browser/speech/endpointer/energy_endpointer_params.h', - 'browser/speech/google_streaming_remote_engine.cc', - 'browser/speech/google_streaming_remote_engine.h', 'browser/speech/speech_recognition_dispatcher_host.cc', 'browser/speech/speech_recognition_dispatcher_host.h', 'browser/speech/speech_recognition_engine.cc',
diff --git a/content/content_common.gypi b/content/content_common.gypi index 6a3ab19..c4a59dfa 100644 --- a/content/content_common.gypi +++ b/content/content_common.gypi
@@ -461,8 +461,11 @@ 'common/memory_messages.h', 'common/message_port_messages.h', 'common/mime_registry_messages.h', + 'common/mojo/channel_init.cc', + 'common/mojo/channel_init.h', 'common/mojo/embedded_application_runner.cc', 'common/mojo/embedded_application_runner.h', + 'common/mojo/mojo_messages.h', 'common/mojo/mojo_shell_connection_impl.cc', 'common/mojo/mojo_shell_connection_impl.h', 'common/mojo/service_registry_impl.cc',
diff --git a/content/content_tests.gypi b/content/content_tests.gypi index fa0038e..41918f3 100644 --- a/content/content_tests.gypi +++ b/content/content_tests.gypi
@@ -741,7 +741,7 @@ 'content_unittests_speech_sources': [ 'browser/speech/chunked_byte_buffer_unittest.cc', 'browser/speech/endpointer/endpointer_unittest.cc', - 'browser/speech/google_streaming_remote_engine_unittest.cc', + 'browser/speech/speech_recognition_engine_unittest.cc', 'browser/speech/speech_recognizer_impl_unittest.cc', ], # Put WebRTC-related sources in the plugin+WebRTC section below.
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h index f027420..64518ca 100644 --- a/content/public/browser/render_process_host.h +++ b/content/public/browser/render_process_host.h
@@ -35,6 +35,10 @@ class MediaKeys; } +namespace shell { +class Connection; +} + namespace content { class BrowserContext; class BrowserMessageFilter; @@ -257,6 +261,9 @@ // Returns the ServiceRegistry for this process. virtual ServiceRegistry* GetServiceRegistry() = 0; + // Returns the shell connection for this process. + virtual shell::Connection* GetChildConnection() = 0; + // Extracts any persistent-memory-allocator used for renderer metrics. // Ownership is passed to the caller. To support sharing of histogram data // between the Renderer and the Browser, the allocator is created when the
diff --git a/content/public/browser/speech_recognition_manager_delegate.h b/content/public/browser/speech_recognition_manager_delegate.h index f29931827..ebc28ec 100644 --- a/content/public/browser/speech_recognition_manager_delegate.h +++ b/content/public/browser/speech_recognition_manager_delegate.h
@@ -21,11 +21,6 @@ public: virtual ~SpeechRecognitionManagerDelegate() {} - // Get the optional diagnostic hardware information if available. - // This is called on the IO thread. - virtual void GetDiagnosticInformation(bool* can_report_metrics, - std::string* hardware_info) = 0; - // Checks (asynchronously) if current setup allows speech recognition. // This is called on the IO thread. virtual void CheckRecognitionIsAllowed(
diff --git a/content/public/browser/web_ui_controller.h b/content/public/browser/web_ui_controller.h index 64d7cefb..4391d56d 100644 --- a/content/public/browser/web_ui_controller.h +++ b/content/public/browser/web_ui_controller.h
@@ -33,13 +33,9 @@ const base::ListValue& args); // Called when RenderView is first created. This is *not* called for every - // page load because in some cases a RenderView will be reused. In those - // cases, RenderViewReused will be called instead. + // page load because in some cases a RenderView will be reused. virtual void RenderViewCreated(RenderViewHost* render_view_host) {} - // Called when a RenderView is reused to display a page. - virtual void RenderViewReused(RenderViewHost* render_view_host) {} - WebUI* web_ui() const { return web_ui_; } private:
diff --git a/content/public/browser/web_ui_message_handler.h b/content/public/browser/web_ui_message_handler.h index 3f306ef..3a33ab1 100644 --- a/content/public/browser/web_ui_message_handler.h +++ b/content/public/browser/web_ui_message_handler.h
@@ -47,6 +47,9 @@ // Extract a string value from a list Value. static base::string16 ExtractStringValue(const base::ListValue* value); + // Called when a RenderView is reused to display a page (i.e. reload). + virtual void RenderViewReused() {} + // This is where subclasses specify which messages they'd like to handle and // perform any additional initialization.. At this point web_ui() will return // the associated WebUI object.
diff --git a/content/public/common/sandbox_init.h b/content/public/common/sandbox_init.h index a22b3711..4c44ed5 100644 --- a/content/public/common/sandbox_init.h +++ b/content/public/common/sandbox_init.h
@@ -42,16 +42,6 @@ CONTENT_EXPORT bool InitializeSandbox( sandbox::SandboxInterfaceInfo* sandbox_info); -// This is a restricted version of Windows' DuplicateHandle() function -// that works inside the sandbox and can send handles but not retrieve -// them. Unlike DuplicateHandle(), it takes a process ID rather than -// a process handle. It returns true on success, false otherwise. -CONTENT_EXPORT bool BrokerDuplicateHandle(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options); - // Inform the current process's sandbox broker (e.g. the broker for // 32-bit processes) about a process created under a different sandbox // broker (e.g. the broker for 64-bit processes). This allows
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc index 5494a9c..8cd5206 100644 --- a/content/public/test/mock_render_process_host.cc +++ b/content/public/test/mock_render_process_host.cc
@@ -263,6 +263,10 @@ return service_registry_.get(); } +shell::Connection* MockRenderProcessHost::GetChildConnection() { + return nullptr; +} + std::unique_ptr<base::SharedPersistentMemoryAllocator> MockRenderProcessHost::TakeMetricsAllocator() { return nullptr;
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h index 44135bb..d50ca3de 100644 --- a/content/public/test/mock_render_process_host.h +++ b/content/public/test/mock_render_process_host.h
@@ -94,6 +94,7 @@ void ResumeDeferredNavigation(const GlobalRequestID& request_id) override; void NotifyTimezoneChange(const std::string& zone_id) override; ServiceRegistry* GetServiceRegistry() override; + shell::Connection* GetChildConnection() override; std::unique_ptr<base::SharedPersistentMemoryAllocator> TakeMetricsAllocator() override; const base::TimeTicks& GetInitTimeForNavigationMetrics() const override;
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc index e473ecf..dbddcd8 100644 --- a/content/renderer/gpu/render_widget_compositor.cc +++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -732,10 +732,10 @@ layer_tree_host_->RegisterSelection(empty_selection); } -static_assert( - static_cast<cc::EventListenerClass>(blink::WebEventListenerClass::Touch) == - cc::EventListenerClass::kTouch, - "EventListenerClass and WebEventListenerClass enums must match"); +static_assert(static_cast<cc::EventListenerClass>( + blink::WebEventListenerClass::TouchStartOrMove) == + cc::EventListenerClass::kTouchStartOrMove, + "EventListenerClass and WebEventListenerClass enums must match"); static_assert(static_cast<cc::EventListenerClass>( blink::WebEventListenerClass::MouseWheel) == cc::EventListenerClass::kMouseWheel,
diff --git a/content/renderer/media/media_recorder_handler.cc b/content/renderer/media/media_recorder_handler.cc index 0beedc3..6d8eb4d 100644 --- a/content/renderer/media/media_recorder_handler.cc +++ b/content/renderer/media/media_recorder_handler.cc
@@ -68,7 +68,8 @@ static const char* const kVideoCodecs[] = { "vp8", "vp9", "opus" }; static const char* const kAudioCodecs[] = { "opus" }; const char* const* codecs = video ? &kVideoCodecs[0] : &kAudioCodecs[0]; - int codecs_count = video ? arraysize(kVideoCodecs) : arraysize(kAudioCodecs); + const int codecs_count = + video ? arraysize(kVideoCodecs) : arraysize(kAudioCodecs); std::vector<std::string> codecs_list; media::ParseCodecString(web_codecs.utf8(), &codecs_list, true /* strip */); @@ -165,7 +166,9 @@ &MediaRecorderHandler::OnEncodedVideo, weak_factory_.GetWeakPtr())); video_recorders_.push_back(new VideoTrackRecorder( - use_vp9_, video_track, on_encoded_video_cb, video_bits_per_second_)); + use_vp9_ ? VideoTrackRecorder::CodecId::VP9 + : VideoTrackRecorder::CodecId::VP8, + video_track, on_encoded_video_cb, video_bits_per_second_)); } if (use_audio_tracks) {
diff --git a/content/renderer/media/video_capture_message_filter_unittest.cc b/content/renderer/media/video_capture_message_filter_unittest.cc index 6a33940..fd189a64e 100644 --- a/content/renderer/media/video_capture_message_filter_unittest.cc +++ b/content/renderer/media/video_capture_message_filter_unittest.cc
@@ -107,10 +107,6 @@ OnBufferCreated( ::testing::Property(&base::SharedMemoryHandle::GetHandle, h), 100, 1)); -#elif defined(OS_MACOSX) && !defined(OS_IOS) - const base::SharedMemoryHandle handle = - base::SharedMemoryHandle(10, 100, base::GetCurrentProcId()); - EXPECT_CALL(delegate, OnBufferCreated(handle, 100, 1)); #else const base::SharedMemoryHandle handle = base::SharedMemoryHandle(10, true); EXPECT_CALL(delegate, OnBufferCreated(handle, 100, 1));
diff --git a/content/renderer/media/video_track_recorder.cc b/content/renderer/media/video_track_recorder.cc index 2dc0b667..60b919c 100644 --- a/content/renderer/media/video_track_recorder.cc +++ b/content/renderer/media/video_track_recorder.cc
@@ -382,13 +382,14 @@ } VideoTrackRecorder::VideoTrackRecorder( - bool use_vp9, + CodecId codec, const blink::WebMediaStreamTrack& track, const OnEncodedVideoCB& on_encoded_video_callback, int32_t bits_per_second) : track_(track), - encoder_( - new VpxEncoder(use_vp9, on_encoded_video_callback, bits_per_second)) { + encoder_(new VpxEncoder(codec == CodecId::VP9, + on_encoded_video_callback, + bits_per_second)) { DCHECK(main_render_thread_checker_.CalledOnValidThread()); DCHECK(!track_.isNull()); DCHECK(track_.getExtraData());
diff --git a/content/renderer/media/video_track_recorder.h b/content/renderer/media/video_track_recorder.h index 971257b..6478873e 100644 --- a/content/renderer/media/video_track_recorder.h +++ b/content/renderer/media/video_track_recorder.h
@@ -28,14 +28,18 @@ class CONTENT_EXPORT VideoTrackRecorder : NON_EXPORTED_BASE(public MediaStreamVideoSink) { public: + enum class CodecId { + VP8, + VP9, + }; + using OnEncodedVideoCB = base::Callback<void(const scoped_refptr<media::VideoFrame>& video_frame, std::unique_ptr<std::string> encoded_data, base::TimeTicks capture_timestamp, bool is_key_frame)>; - // |use_vp9| forces using VP9, otherwise VP8 will be used by default. - VideoTrackRecorder(bool use_vp9, + VideoTrackRecorder(CodecId codec, const blink::WebMediaStreamTrack& track, const OnEncodedVideoCB& on_encoded_video_cb, int32_t bits_per_second); @@ -55,7 +59,7 @@ // We need to hold on to the Blink track to remove ourselves on dtor. blink::WebMediaStreamTrack track_; - // Forward declaration and member of an inner class to encode using VPx. + // Inner class to encode using whichever codec is configured. class VpxEncoder; const scoped_refptr<VpxEncoder> encoder_;
diff --git a/content/renderer/media/video_track_recorder_unittest.cc b/content/renderer/media/video_track_recorder_unittest.cc index 12ed36c..2892df4c 100644 --- a/content/renderer/media/video_track_recorder_unittest.cc +++ b/content/renderer/media/video_track_recorder_unittest.cc
@@ -40,9 +40,11 @@ closure.Run(); } -const bool kTrackRecorderTestUseVp9OrNot[] = {false, true}; +const VideoTrackRecorder::CodecId kTrackRecorderTestCodec[] = { + VideoTrackRecorder::CodecId::VP8, VideoTrackRecorder::CodecId::VP9}; -class VideoTrackRecorderTest : public TestWithParam<bool> { +class VideoTrackRecorderTest + : public TestWithParam<VideoTrackRecorder::CodecId> { public: VideoTrackRecorderTest() : mock_source_(new MockMediaStreamVideoSource(false)) { @@ -61,7 +63,7 @@ blink_track_.setExtraData(track_); video_track_recorder_.reset(new VideoTrackRecorder( - GetParam() /* use_vp9 */, blink_track_, + GetParam() /* codec */, blink_track_, base::Bind(&VideoTrackRecorderTest::OnEncodedVideo, base::Unretained(this)), 0 /* bits_per_second */)); @@ -173,6 +175,6 @@ INSTANTIATE_TEST_CASE_P(, VideoTrackRecorderTest, - ValuesIn(kTrackRecorderTestUseVp9OrNot)); + ValuesIn(kTrackRecorderTestCodec)); } // namespace content
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 35367aa..eac04476 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -1491,7 +1491,7 @@ std::unique_ptr<WebGraphicsContext3DCommandBufferImpl> RenderThreadImpl::CreateOffscreenContext3d() { // This is used to create a few different offscreen contexts: - // - The shared main thread context (offscreen) used by blink for canvas + // - The shared main thread context (offscreen) used by blink for canvas. // - The worker context (offscreen) used for GPU raster and video decoding. // This is for an offscreen context, so the default framebuffer doesn't need // alpha, depth, stencil, antialiasing. @@ -1507,6 +1507,8 @@ bool automatic_flushes = false; scoped_refptr<gpu::GpuChannelHost> gpu_channel_host(EstablishGpuChannelSync( CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE)); + if (!gpu_channel_host) + return nullptr; return base::WrapUnique( WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( gpu_channel_host.get(), attributes, gfx::PreferIntegratedGpu,
diff --git a/content/renderer/render_thread_impl_browsertest.cc b/content/renderer/render_thread_impl_browsertest.cc index 52367e46..534a324 100644 --- a/content/renderer/render_thread_impl_browsertest.cc +++ b/content/renderer/render_thread_impl_browsertest.cc
@@ -183,8 +183,7 @@ thread_ = new RenderThreadImplForTest( InProcessChildThreadParams(test_helper_->GetChannelId(), test_helper_->GetIOTaskRunner(), - test_helper_->GetMojoIpcToken(), - test_helper_->GetMojoApplicationToken()), + test_helper_->GetMessagePipeHandle()), std::move(renderer_scheduler), test_task_counter); cmd->InitFromArgv(old_argv);
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc index fa17206..83701b1f 100644 --- a/content/renderer/renderer_blink_platform_impl.cc +++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -75,6 +75,7 @@ #include "content/renderer/webclipboard_impl.h" #include "content/renderer/webgraphicscontext3d_provider_impl.h" #include "content/renderer/webpublicsuffixlist_impl.h" +#include "gpu/command_buffer/client/gles2_interface.h" #include "gpu/config/gpu_info.h" #include "gpu/ipc/client/gpu_channel_host.h" #include "ipc/ipc_sync_message_filter.h" @@ -975,36 +976,31 @@ gpu::GpuChannelHost* host) { DCHECK(gl_info); std::string error_message("OffscreenContext Creation failed, "); - if (host) { - const gpu::GPUInfo& gpu_info = host->gpu_info(); - gl_info->vendorId = gpu_info.gpu.vendor_id; - gl_info->deviceId = gpu_info.gpu.device_id; - switch (gpu_info.context_info_state) { - case gpu::kCollectInfoSuccess: - case gpu::kCollectInfoNonFatalFailure: - gl_info->rendererInfo = WebString::fromUTF8(gpu_info.gl_renderer); - gl_info->vendorInfo = WebString::fromUTF8(gpu_info.gl_vendor); - gl_info->driverVersion = WebString::fromUTF8(gpu_info.driver_version); - gl_info->resetNotificationStrategy = - gpu_info.gl_reset_notification_strategy; - gl_info->sandboxed = gpu_info.sandboxed; - gl_info->processCrashCount = gpu_info.process_crash_count; - gl_info->amdSwitchable = gpu_info.amd_switchable; - gl_info->optimus = gpu_info.optimus; - break; - case gpu::kCollectInfoFatalFailure: - case gpu::kCollectInfoNone: - error_message.append( - "Failed to collect gpu information, GLSurface or GLContext " - "creation failed"); - gl_info->errorMessage = WebString::fromUTF8(error_message); - break; - default: - NOTREACHED(); - } - } else { - error_message.append("GpuChannelHost creation failed"); - gl_info->errorMessage = WebString::fromUTF8(error_message); + const gpu::GPUInfo& gpu_info = host->gpu_info(); + gl_info->vendorId = gpu_info.gpu.vendor_id; + gl_info->deviceId = gpu_info.gpu.device_id; + switch (gpu_info.context_info_state) { + case gpu::kCollectInfoSuccess: + case gpu::kCollectInfoNonFatalFailure: + gl_info->rendererInfo = WebString::fromUTF8(gpu_info.gl_renderer); + gl_info->vendorInfo = WebString::fromUTF8(gpu_info.gl_vendor); + gl_info->driverVersion = WebString::fromUTF8(gpu_info.driver_version); + gl_info->resetNotificationStrategy = + gpu_info.gl_reset_notification_strategy; + gl_info->sandboxed = gpu_info.sandboxed; + gl_info->processCrashCount = gpu_info.process_crash_count; + gl_info->amdSwitchable = gpu_info.amd_switchable; + gl_info->optimus = gpu_info.optimus; + break; + case gpu::kCollectInfoFatalFailure: + case gpu::kCollectInfoNone: + error_message.append( + "Failed to collect gpu information, GLSurface or GLContext " + "creation failed"); + gl_info->errorMessage = WebString::fromUTF8(error_message); + break; + default: + NOTREACHED(); } } @@ -1024,6 +1020,21 @@ scoped_refptr<gpu::GpuChannelHost> gpu_channel_host( RenderThreadImpl::current()->EstablishGpuChannelSync( CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE)); + if (!gpu_channel_host) { + std::string error_message( + "OffscreenContext Creation failed, GpuChannelHost creation failed"); + gl_info->errorMessage = WebString::fromUTF8(error_message); + return nullptr; + } + + // WebGL contexts must fail creation if the share group is lost. + if (share_provider && + share_provider->contextGL()->GetGraphicsResetStatusKHR() != GL_NO_ERROR) { + std::string error_message( + "OffscreenContext Creation failed, Shared context is lost"); + gl_info->errorMessage = WebString::fromUTF8(error_message); + return nullptr; + } WebGraphicsContext3DCommandBufferImpl* share_context = share_provider ? static_cast<WebGraphicsContext3DCommandBufferImpl*>(
diff --git a/content/shell/browser/shell_speech_recognition_manager_delegate.h b/content/shell/browser/shell_speech_recognition_manager_delegate.h index 7c5fce3..c1f6b9d9f 100644 --- a/content/shell/browser/shell_speech_recognition_manager_delegate.h +++ b/content/shell/browser/shell_speech_recognition_manager_delegate.h
@@ -23,8 +23,6 @@ ~ShellSpeechRecognitionManagerDelegate() override {} // SpeechRecognitionManagerDelegate methods. - void GetDiagnosticInformation(bool* can_report_metrics, - std::string* hardware_info) override {} void CheckRecognitionIsAllowed( int session_id, base::Callback<void(bool ask_user, bool is_allowed)> callback) override;
diff --git a/content/shell/renderer/layout_test/blink_test_runner.cc b/content/shell/renderer/layout_test/blink_test_runner.cc index c48fe32a..b66595d 100644 --- a/content/shell/renderer/layout_test/blink_test_runner.cc +++ b/content/shell/renderer/layout_test/blink_test_runner.cc
@@ -32,6 +32,7 @@ #include "build/build_config.h" #include "components/plugins/renderer/plugin_placeholder.h" #include "components/test_runner/gamepad_controller.h" +#include "components/test_runner/layout_and_paint_async_then.h" #include "components/test_runner/pixel_dump.h" #include "components/test_runner/web_test_interfaces.h" #include "components/test_runner/web_test_proxy.h" @@ -591,8 +592,7 @@ return test_config_.allow_external_pages; } -std::string BlinkTestRunner::DumpHistoryForWindow( - test_runner::WebTestProxyBase* proxy) { +std::string BlinkTestRunner::DumpHistoryForWindow(blink::WebView* web_view) { size_t pos = 0; std::vector<int>::iterator id; for (id = routing_ids_.begin(); id != routing_ids_.end(); ++id, ++pos) { @@ -601,7 +601,7 @@ NOTREACHED(); continue; } - if (BlinkTestRunner::Get(render_view)->proxy() == proxy) + if (render_view->GetWebView() == web_view) break; } @@ -829,7 +829,8 @@ test_runner::WebTestInterfaces* interfaces = LayoutTestRenderProcessObserver::GetInstance()->test_interfaces(); if (interfaces->TestRunner()->ShouldDumpBackForwardList()) { - completed_layout_dump.append(proxy()->DumpBackForwardLists()); + for (WebView* web_view : interfaces->GetWindowList()) + completed_layout_dump.append(DumpHistoryForWindow(web_view)); } Send(new ShellViewHostMsg_TextDump(routing_id(), completed_layout_dump)); @@ -854,8 +855,10 @@ #ifndef NDEBUG // Force a layout/paint by the end of the test to ensure test coverage of // incremental painting. - proxy()->LayoutAndPaintAsyncThen(base::Bind( - &BlinkTestRunner::CaptureDumpComplete, base::Unretained(this))); + test_runner::LayoutAndPaintAsyncThen( + render_view()->GetWebView(), + base::Bind(&BlinkTestRunner::CaptureDumpComplete, + base::Unretained(this))); #else CaptureDumpComplete(); #endif
diff --git a/content/shell/renderer/layout_test/blink_test_runner.h b/content/shell/renderer/layout_test/blink_test_runner.h index 7729f591..bf554db 100644 --- a/content/shell/renderer/layout_test/blink_test_runner.h +++ b/content/shell/renderer/layout_test/blink_test_runner.h
@@ -130,8 +130,6 @@ void LoadURLForFrame(const blink::WebURL& url, const std::string& frame_name) override; bool AllowExternalPages() override; - std::string DumpHistoryForWindow( - test_runner::WebTestProxyBase* proxy) override; void FetchManifest( blink::WebView* view, const GURL& url, @@ -192,6 +190,7 @@ void CaptureDumpContinued(); void OnPixelsDumpCompleted(const SkBitmap& snapshot); void CaptureDumpComplete(); + std::string DumpHistoryForWindow(blink::WebView* web_view); mojom::LayoutTestBluetoothFakeAdapterSetter& GetBluetoothFakeAdapterSetter();
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py index 3b021307..dce48a8 100755 --- a/content/test/gpu/generate_buildbot_json.py +++ b/content/test/gpu/generate_buildbot_json.py
@@ -784,6 +784,10 @@ # http://crbug.com/599451: this test is currently too slow # to run on x64 in Debug mode. Need to shard the tests. 'Win7 x64 Debug (NVIDIA)', + # http://crbug.com/540543: Linux Intel driver is GL 3.0 and + # doesn't support features needed for ES3 + 'Linux Release (New Intel)', + 'Linux Debug (New Intel)', ], }, ],
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py index 79a3e20..88c7ca043 100644 --- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py +++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -313,16 +313,12 @@ ['mac'], bug=483282) self.Skip('deqp/functional/gles3/floatstatequery.html', ['mac'], bug=483282) - self.Fail('deqp/functional/gles3/internalformatquery.html', - ['mac'], bug=483282) self.Fail('deqp/functional/gles3/pixelbufferobject.html', ['mac'], bug=483282) self.Fail('deqp/functional/gles3/texturestatequery.html', ['mac'], bug=483282) self.Skip('deqp/functional/gles3/shaderswitch.html', ['mavericks'], bug=483282) - self.Fail('deqp/functional/gles3/rbostatequery.html', - ['mac'], bug=569808) self.Fail('deqp/functional/gles3/negativeshaderapi.html', ['mac'], bug=483282) self.Fail('deqp/functional/gles3/vertexarrays.html', @@ -334,9 +330,6 @@ ['mac'], bug=483282) self.Fail('conformance2/reading/read-pixels-from-fbo-test.html', ['mac'], bug=483282) - self.Fail('conformance2/renderbuffers/' + - 'multisampled-renderbuffer-initialization.html', - ['mac'], bug=483282) self.Fail('conformance2/textures/misc/compressed-tex-image.html', ['mac'], bug=565438) self.Fail('conformance2/textures/misc/gl-get-tex-parameter.html', @@ -431,9 +424,6 @@ self.Fail('conformance2/textures/misc/tex-mipmap-levels.html', ['linux', 'amd'], bug=483282) - # Linux Intel: driver is GL 3.0 and doesn't support features needed for ES3. - self.Skip('*', ['linux', 'intel'], bug=540543) - # Conflicting expectations to test that the # "Expectations Have No collisions" unittest works. # page_name = 'conformance/glsl/constructors/glsl-construct-ivec4.html'
diff --git a/content/test/mock_google_streaming_server.cc b/content/test/mock_google_streaming_server.cc index 44b48d0..b79ae0d 100644 --- a/content/test/mock_google_streaming_server.cc +++ b/content/test/mock_google_streaming_server.cc
@@ -14,8 +14,8 @@ #include "base/strings/utf_string_conversions.h" #include "base/sys_byteorder.h" #include "base/values.h" -#include "content/browser/speech/google_streaming_remote_engine.h" #include "content/browser/speech/proto/google_streaming_api.pb.h" +#include "content/browser/speech/speech_recognition_engine.h" #include "content/browser/speech/speech_recognition_manager_impl.h" #include "net/base/escape.h" #include "net/base/net_errors.h" @@ -30,9 +30,9 @@ MockGoogleStreamingServer::MockGoogleStreamingServer(Delegate* delegate) : delegate_(delegate), kDownstreamUrlFetcherId( - GoogleStreamingRemoteEngine::kDownstreamUrlFetcherIdForTesting), + SpeechRecognitionEngine::kDownstreamUrlFetcherIdForTesting), kUpstreamUrlFetcherId( - GoogleStreamingRemoteEngine::kUpstreamUrlFetcherIdForTesting) { + SpeechRecognitionEngine::kUpstreamUrlFetcherIdForTesting) { url_fetcher_factory_.SetDelegateForTests(this); }
diff --git a/content/test/mock_google_streaming_server.h b/content/test/mock_google_streaming_server.h index eea5d41d6..7518c6bd 100644 --- a/content/test/mock_google_streaming_server.h +++ b/content/test/mock_google_streaming_server.h
@@ -18,7 +18,7 @@ // recognition webservice, exploiting the TestURLFetcher to extract request // parameters and provide forged JSON responses back to the client. // It is intended for closing the server-side loop in speech tests that involve -// the GoogleStreamingRemoteEngine client. +// the SpeechRecognitionEngine client. class MockGoogleStreamingServer : public net::TestURLFetcherDelegateForTests { public: class Delegate {
diff --git a/content/test/render_thread_impl_browser_test_ipc_helper.cc b/content/test/render_thread_impl_browser_test_ipc_helper.cc index 11f0851..241ec1c 100644 --- a/content/test/render_thread_impl_browser_test_ipc_helper.cc +++ b/content/test/render_thread_impl_browser_test_ipc_helper.cc
@@ -4,8 +4,8 @@ #include "content/test/render_thread_impl_browser_test_ipc_helper.h" +#include "content/common/mojo/channel_init.h" #include "content/public/common/mojo_channel_switches.h" -#include "mojo/edk/embedder/embedder.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { @@ -48,15 +48,18 @@ ipc_support_.reset(new IPC::ScopedIPCSupport(ipc_thread_->task_runner())); mojo_application_host_.reset(new MojoApplicationHost()); - mojo_application_token_ = mojo_application_host_->GetToken(); - - mojo_ipc_token_ = mojo::edk::GenerateRandomToken(); + mojo_application_host_->OverrideIOTaskRunnerForTest( + ipc_thread_->task_runner()); mojo::MessagePipe pipe; channel_ = IPC::ChannelProxy::Create( - IPC::ChannelMojo::CreateServerFactory( - mojo::edk::CreateParentMessagePipe(mojo_ipc_token_)), + IPC::ChannelMojo::CreateServerFactory(std::move(pipe.handle0)), dummy_listener_.get(), ipc_thread_->task_runner()); + message_pipe_handle_ = std::move(pipe.handle1); + + mojo_application_host_->Init(); + mojo_application_host_->Activate(channel_.get(), + base::GetCurrentProcessHandle()); } scoped_refptr<base::SingleThreadTaskRunner>
diff --git a/content/test/render_thread_impl_browser_test_ipc_helper.h b/content/test/render_thread_impl_browser_test_ipc_helper.h index f98824b..8420d6a 100644 --- a/content/test/render_thread_impl_browser_test_ipc_helper.h +++ b/content/test/render_thread_impl_browser_test_ipc_helper.h
@@ -7,6 +7,7 @@ #include "content/app/mojo/mojo_init.h" #include "content/browser/mojo/mojo_application_host.h" +#include "content/common/mojo/mojo_messages.h" #include "ipc/ipc_channel_proxy.h" #include "ipc/mojo/ipc_channel_mojo.h" #include "ipc/mojo/scoped_ipc_support.h" @@ -33,12 +34,8 @@ scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const; - const std::string& GetMojoIpcToken() const { - return mojo_ipc_token_; - } - - const std::string& GetMojoApplicationToken() const { - return mojo_application_token_; + mojo::MessagePipeHandle GetMessagePipeHandle() { + return message_pipe_handle_.release(); } private: @@ -53,8 +50,7 @@ std::unique_ptr<DummyListener> dummy_listener_; std::unique_ptr<IPC::ScopedIPCSupport> ipc_support_; std::unique_ptr<MojoApplicationHost> mojo_application_host_; - std::string mojo_ipc_token_; - std::string mojo_application_token_; + mojo::ScopedMessagePipeHandle message_pipe_handle_; std::string channel_id_; };
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn index de82167..76efc24 100644 --- a/device/bluetooth/BUILD.gn +++ b/device/bluetooth/BUILD.gn
@@ -170,16 +170,24 @@ "bluetooth_audio_sink_bluez.h", "bluetooth_device_bluez.cc", "bluetooth_device_bluez.h", + "bluetooth_gatt_characteristic_bluez.cc", + "bluetooth_gatt_characteristic_bluez.h", "bluetooth_gatt_connection_bluez.cc", "bluetooth_gatt_connection_bluez.h", + "bluetooth_gatt_descriptor_bluez.cc", + "bluetooth_gatt_descriptor_bluez.h", "bluetooth_gatt_notify_session_bluez.cc", "bluetooth_gatt_notify_session_bluez.h", + "bluetooth_gatt_service_bluez.cc", + "bluetooth_gatt_service_bluez.h", + "bluetooth_local_gatt_characteristic_bluez.cc", + "bluetooth_local_gatt_characteristic_bluez.h", + "bluetooth_local_gatt_service_bluez.cc", + "bluetooth_local_gatt_service_bluez.h", "bluetooth_pairing_bluez.cc", "bluetooth_pairing_bluez.h", "bluetooth_remote_gatt_characteristic_bluez.cc", "bluetooth_remote_gatt_characteristic_bluez.h", - "bluetooth_remote_gatt_descriptor_bluez.cc", - "bluetooth_remote_gatt_descriptor_bluez.h", "bluetooth_remote_gatt_service_bluez.cc", "bluetooth_remote_gatt_service_bluez.h", "bluetooth_socket_bluez.cc",
diff --git a/device/bluetooth/bluetooth.gyp b/device/bluetooth/bluetooth.gyp index 5d17c93d..5f1eaa7 100644 --- a/device/bluetooth/bluetooth.gyp +++ b/device/bluetooth/bluetooth.gyp
@@ -140,16 +140,24 @@ 'bluetooth_audio_sink_bluez.h', 'bluetooth_device_bluez.cc', 'bluetooth_device_bluez.h', + 'bluetooth_gatt_characteristic_bluez.cc', + 'bluetooth_gatt_characteristic_bluez.h', 'bluetooth_gatt_connection_bluez.cc', 'bluetooth_gatt_connection_bluez.h', + 'bluetooth_gatt_descriptor_bluez.cc', + 'bluetooth_gatt_descriptor_bluez.h', 'bluetooth_gatt_notify_session_bluez.cc', 'bluetooth_gatt_notify_session_bluez.h', + 'bluetooth_gatt_service_bluez.cc', + 'bluetooth_gatt_service_bluez.h', + 'bluetooth_local_gatt_characteristic_bluez.cc', + 'bluetooth_local_gatt_characteristic_bluez.h', + 'bluetooth_local_gatt_service_bluez.cc', + 'bluetooth_local_gatt_service_bluez.h', 'bluetooth_pairing_bluez.cc', 'bluetooth_pairing_bluez.h', 'bluetooth_remote_gatt_characteristic_bluez.cc', 'bluetooth_remote_gatt_characteristic_bluez.h', - 'bluetooth_remote_gatt_descriptor_bluez.cc', - 'bluetooth_remote_gatt_descriptor_bluez.h', 'bluetooth_remote_gatt_service_bluez.cc', 'bluetooth_remote_gatt_service_bluez.h', 'bluetooth_socket_bluez.cc',
diff --git a/device/bluetooth/bluetooth_adapter.cc b/device/bluetooth/bluetooth_adapter.cc index e1dd4a18..ebd1e2e9 100644 --- a/device/bluetooth/bluetooth_adapter.cc +++ b/device/bluetooth/bluetooth_adapter.cc
@@ -164,6 +164,14 @@ AdapterPoweredChanged(this, powered)); } +#if defined(OS_CHROMEOS) || defined(OS_LINUX) +void BluetoothAdapter::NotifyDevicePairedChanged(BluetoothDevice* device, + bool new_paired_status) { + FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, + DevicePairedChanged(this, device, new_paired_status)); +} +#endif + void BluetoothAdapter::NotifyGattServiceAdded(BluetoothGattService* service) { DCHECK_EQ(service->GetDevice()->GetAdapter(), this);
diff --git a/device/bluetooth/bluetooth_adapter.h b/device/bluetooth/bluetooth_adapter.h index ffeae73..d230bad 100644 --- a/device/bluetooth/bluetooth_adapter.h +++ b/device/bluetooth/bluetooth_adapter.h
@@ -12,6 +12,7 @@ #include <set> #include <string> #include <utility> +#include <vector> #include "base/callback.h" #include "base/containers/scoped_ptr_hash_map.h" @@ -92,6 +93,16 @@ BluetoothDevice* device, const std::string& old_address) {} +#if defined(OS_CHROMEOS) || defined(OS_LINUX) + // This function is implemented for ChromeOS only, and the support for + // Android, MaxOS and Windows should be added on demand in the future. + // Called when paired property of the device |device| known to the adapter + // |adapter| changed. + virtual void DevicePairedChanged(BluetoothAdapter* adapter, + BluetoothDevice* device, + bool new_paired_status) {} +#endif + // Called when the device |device| is removed from the adapter |adapter|, // either as a result of a discovered device being lost between discovering // phases or pairing information deleted. |device| should not be @@ -407,6 +418,12 @@ // The following methods are used to send various events to observers. void NotifyAdapterStateChanged(bool powered); +#if defined(OS_CHROMEOS) || defined(OS_LINUX) + // This function is implemented for ChromeOS only, and the support on + // Android, MaxOS and Windows should be added on demand in the future. + void NotifyDevicePairedChanged(BluetoothDevice* device, + bool new_paired_status); +#endif void NotifyGattServiceAdded(BluetoothGattService* service); void NotifyGattServiceRemoved(BluetoothGattService* service); void NotifyGattServiceChanged(BluetoothGattService* service);
diff --git a/device/bluetooth/bluetooth_adapter_bluez.cc b/device/bluetooth/bluetooth_adapter_bluez.cc index a8257e94..4c64f0eb 100644 --- a/device/bluetooth/bluetooth_adapter_bluez.cc +++ b/device/bluetooth/bluetooth_adapter_bluez.cc
@@ -5,6 +5,7 @@ #include "device/bluetooth/bluetooth_adapter_bluez.h" #include <memory> +#include <set> #include <string> #include <utility> @@ -24,9 +25,6 @@ #include "device/bluetooth/bluetooth_device_bluez.h" #include "device/bluetooth/bluetooth_discovery_session_outcome.h" #include "device/bluetooth/bluetooth_pairing_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_service_bluez.h" #include "device/bluetooth/bluetooth_socket_bluez.h" #include "device/bluetooth/bluetooth_socket_thread.h" #include "device/bluetooth/bluetooth_uuid.h" @@ -533,9 +531,11 @@ // When a device becomes paired, mark it as trusted so that the user does // not need to approve every incoming connection - if (property_name == properties->paired.name() && - properties->paired.value() && !properties->trusted.value()) { - device_bluez->SetTrusted(); + if (property_name == properties->paired.name()) { + if (properties->paired.value() && !properties->trusted.value()) { + device_bluez->SetTrusted(); + } + NotifyDevicePairedChanged(device_bluez, properties->paired.value()); } // UMA connection counting
diff --git a/device/bluetooth/bluetooth_adapter_bluez.h b/device/bluetooth/bluetooth_adapter_bluez.h index 6fb20db7..a16bdd5 100644 --- a/device/bluetooth/bluetooth_adapter_bluez.h +++ b/device/bluetooth/bluetooth_adapter_bluez.h
@@ -11,6 +11,7 @@ #include <memory> #include <queue> #include <string> +#include <tuple> #include <utility> #include <vector> @@ -43,9 +44,6 @@ class BluetoothAdapterProfileBlueZ; class BluetoothDeviceBlueZ; class BluetoothPairingBlueZ; -class BluetoothRemoteGattCharacteristicBlueZ; -class BluetoothRemoteGattDescriptorBlueZ; -class BluetoothRemoteGattServiceBlueZ; // The BluetoothAdapterBlueZ class implements BluetoothAdapter for platforms // that use BlueZ.
diff --git a/device/bluetooth/bluetooth_bluez_unittest.cc b/device/bluetooth/bluetooth_bluez_unittest.cc index bf698a1..3ffca89a 100644 --- a/device/bluetooth/bluetooth_bluez_unittest.cc +++ b/device/bluetooth/bluetooth_bluez_unittest.cc
@@ -49,10 +49,10 @@ void SaveConnectionInfo(BluetoothDevice::ConnectionInfo* out, const BluetoothDevice::ConnectionInfo& conn_info) { *out = conn_info; -}; +} // Find |address| in |devices|, if found returns the index otherwise returns -1. -int GetDeviceIndexByAddress(BluetoothAdapter::DeviceList& devices, +int GetDeviceIndexByAddress(const BluetoothAdapter::DeviceList& devices, const char* address) { int idx = -1; for (auto& device : devices) { @@ -2381,6 +2381,47 @@ EXPECT_EQ(std::string(kNewAddress), devices[idx]->GetAddress()); } +#if defined(OS_CHROMEOS) || defined(OS_LINUX) +TEST_F(BluetoothBlueZTest, DevicePairedChanged) { + // Simulate a change of paired state of a device. + GetAdapter(); + + BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); + ASSERT_EQ(2U, devices.size()); + + int idx = GetDeviceIndexByAddress( + devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); + ASSERT_NE(-1, idx); + ASSERT_EQ(bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress, + devices[idx]->GetAddress()); + ASSERT_EQ(true, devices[idx]->IsPaired()); + + // Install an observer; expect the DevicePairedChanged method to be called + // when we change the paired state of the device. + TestBluetoothAdapterObserver observer(adapter_); + + bluez::FakeBluetoothDeviceClient::Properties* properties = + fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( + bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); + + properties->paired.ReplaceValue(false); + + EXPECT_EQ(1, observer.device_changed_count()); + EXPECT_EQ(1, observer.device_paired_changed_count()); + EXPECT_FALSE(observer.device_new_paired_status()); + EXPECT_EQ(devices[idx], observer.last_device()); + + // Change the paired state back to true to examine the consistent behavior of + // DevicePairedChanged method. + properties->paired.ReplaceValue(true); + + EXPECT_EQ(2, observer.device_changed_count()); + EXPECT_EQ(2, observer.device_paired_changed_count()); + EXPECT_TRUE(observer.device_new_paired_status()); + EXPECT_EQ(devices[idx], observer.last_device()); +} +#endif + TEST_F(BluetoothBlueZTest, DeviceUuidsChanged) { // Simulate a change of advertised services of a device. GetAdapter();
diff --git a/device/bluetooth/bluetooth_device_bluez.h b/device/bluetooth/bluetooth_device_bluez.h index 7647af6..ee9448f6 100644 --- a/device/bluetooth/bluetooth_device_bluez.h +++ b/device/bluetooth/bluetooth_device_bluez.h
@@ -29,8 +29,8 @@ class BluetoothAdapterBlueZ; class BluetoothPairingBlueZ; -// The BluetoothDeviceBlueZ class implements BluetoothDevice for the -// Chrome OS platform. +// The BluetoothDeviceBlueZ class implements BluetoothDevice for platforms using +// BlueZ. // // This class is not thread-safe, but is only called from the UI thread. //
diff --git a/device/bluetooth/bluetooth_gatt_characteristic_bluez.cc b/device/bluetooth/bluetooth_gatt_characteristic_bluez.cc new file mode 100644 index 0000000..378fd9d --- /dev/null +++ b/device/bluetooth/bluetooth_gatt_characteristic_bluez.cc
@@ -0,0 +1,54 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/bluetooth/bluetooth_gatt_characteristic_bluez.h" + +#include "device/bluetooth/bluetooth_gatt_descriptor_bluez.h" +#include "device/bluetooth/bluetooth_gatt_service_bluez.h" + +namespace bluez { + +BluetoothGattCharacteristicBlueZ::BluetoothGattCharacteristicBlueZ( + BluetoothGattServiceBlueZ* service, + const dbus::ObjectPath& object_path) + : service_(service), object_path_(object_path), weak_ptr_factory_(this) {} + +BluetoothGattCharacteristicBlueZ::~BluetoothGattCharacteristicBlueZ() {} + +std::string BluetoothGattCharacteristicBlueZ::GetIdentifier() const { + return object_path_.value(); +} + +device::BluetoothGattService* BluetoothGattCharacteristicBlueZ::GetService() + const { + return service_; +} + +device::BluetoothGattCharacteristic::Permissions +BluetoothGattCharacteristicBlueZ::GetPermissions() const { + // TODO(armansito): Once BlueZ defines the permissions, return the correct + // values here. + return PERMISSION_NONE; +} + +std::vector<device::BluetoothGattDescriptor*> +BluetoothGattCharacteristicBlueZ::GetDescriptors() const { + std::vector<device::BluetoothGattDescriptor*> descriptors; + for (DescriptorMap::const_iterator iter = descriptors_.begin(); + iter != descriptors_.end(); ++iter) + descriptors.push_back(iter->second); + return descriptors; +} + +device::BluetoothGattDescriptor* +BluetoothGattCharacteristicBlueZ::GetDescriptor( + const std::string& identifier) const { + DescriptorMap::const_iterator iter = + descriptors_.find(dbus::ObjectPath(identifier)); + if (iter == descriptors_.end()) + return nullptr; + return iter->second; +} + +} // namespace bluez
diff --git a/device/bluetooth/bluetooth_gatt_characteristic_bluez.h b/device/bluetooth/bluetooth_gatt_characteristic_bluez.h new file mode 100644 index 0000000..adf75212 --- /dev/null +++ b/device/bluetooth/bluetooth_gatt_characteristic_bluez.h
@@ -0,0 +1,79 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_BLUEZ_H_ +#define DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_BLUEZ_H_ + +#include <map> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "dbus/object_path.h" +#include "device/bluetooth/bluetooth_gatt_characteristic.h" + +namespace device { + +class BluetoothGattDescriptor; +class BluetoothGattService; + +} // namespace device + +namespace bluez { + +class BluetoothGattDescriptorBlueZ; +class BluetoothGattServiceBlueZ; + +// The BluetoothGattCharacteristicBlueZ class implements +// BluetoothGattCharacteristic for GATT characteristics for platforms +// that use BlueZ. +class BluetoothGattCharacteristicBlueZ + : public device::BluetoothGattCharacteristic { + public: + // device::BluetoothGattCharacteristic overrides. + std::string GetIdentifier() const override; + device::BluetoothGattService* GetService() const override; + Permissions GetPermissions() const override; + std::vector<device::BluetoothGattDescriptor*> GetDescriptors() const override; + device::BluetoothGattDescriptor* GetDescriptor( + const std::string& identifier) const override; + + // Object path of the underlying D-Bus characteristic. + const dbus::ObjectPath& object_path() const { return object_path_; } + + protected: + BluetoothGattCharacteristicBlueZ(BluetoothGattServiceBlueZ* service, + const dbus::ObjectPath& object_path); + ~BluetoothGattCharacteristicBlueZ() override; + + // Does not take ownership of the descriptor object. + using DescriptorMap = + std::map<dbus::ObjectPath, BluetoothGattDescriptorBlueZ*>; + + // Mapping from GATT descriptor object paths to descriptor objects owned by + // this characteristic. Since the BlueZ implementation uses object paths + // as unique identifiers, we also use this mapping to return descriptors by + // identifier. + DescriptorMap descriptors_; + + // The GATT service this GATT characteristic belongs to. + BluetoothGattServiceBlueZ* service_; + + private: + friend class BluetoothRemoteGattServiceBlueZ; + + // Object path of the D-Bus characteristic object. + dbus::ObjectPath object_path_; + + // Note: This should remain the last member so it'll be destroyed and + // invalidate its weak pointers before any other members are destroyed. + base::WeakPtrFactory<BluetoothGattCharacteristicBlueZ> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(BluetoothGattCharacteristicBlueZ); +}; + +} // namespace bluez + +#endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_CHARACTERISTIC_BLUEZ_H_
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.cc b/device/bluetooth/bluetooth_gatt_descriptor_bluez.cc similarity index 65% rename from device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.cc rename to device/bluetooth/bluetooth_gatt_descriptor_bluez.cc index c74b1a0..32f1ad7 100644 --- a/device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.cc +++ b/device/bluetooth/bluetooth_gatt_descriptor_bluez.cc
@@ -2,13 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h" +#include <iostream> +#include <iterator> #include "base/bind.h" +#include "base/callback.h" +#include "base/callback_forward.h" #include "base/logging.h" #include "base/strings/stringprintf.h" -#include "device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_service_bluez.h" +#include "dbus/property.h" +#include "device/bluetooth/bluetooth_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_gatt_characteristic_bluez.h" +#include "device/bluetooth/bluetooth_gatt_descriptor_bluez.h" +#include "device/bluetooth/bluetooth_gatt_service_bluez.h" #include "device/bluetooth/dbus/bluetooth_gatt_descriptor_client.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" @@ -28,23 +34,25 @@ } // namespace -BluetoothRemoteGattDescriptorBlueZ::BluetoothRemoteGattDescriptorBlueZ( - BluetoothRemoteGattCharacteristicBlueZ* characteristic, - const dbus::ObjectPath& object_path) +BluetoothGattDescriptorBlueZ::BluetoothGattDescriptorBlueZ( + BluetoothGattCharacteristicBlueZ* characteristic, + const dbus::ObjectPath& object_path, + bool is_local) : object_path_(object_path), characteristic_(characteristic), + is_local_(is_local), weak_ptr_factory_(this) { VLOG(1) << "Creating remote GATT descriptor with identifier: " << GetIdentifier() << ", UUID: " << GetUUID().canonical_value(); } -BluetoothRemoteGattDescriptorBlueZ::~BluetoothRemoteGattDescriptorBlueZ() {} +BluetoothGattDescriptorBlueZ::~BluetoothGattDescriptorBlueZ() {} -std::string BluetoothRemoteGattDescriptorBlueZ::GetIdentifier() const { +std::string BluetoothGattDescriptorBlueZ::GetIdentifier() const { return object_path_.value(); } -device::BluetoothUUID BluetoothRemoteGattDescriptorBlueZ::GetUUID() const { +device::BluetoothUUID BluetoothGattDescriptorBlueZ::GetUUID() const { bluez::BluetoothGattDescriptorClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattDescriptorClient() @@ -53,12 +61,11 @@ return device::BluetoothUUID(properties->uuid.value()); } -bool BluetoothRemoteGattDescriptorBlueZ::IsLocal() const { - return false; +bool BluetoothGattDescriptorBlueZ::IsLocal() const { + return is_local_; } -const std::vector<uint8_t>& BluetoothRemoteGattDescriptorBlueZ::GetValue() - const { +const std::vector<uint8_t>& BluetoothGattDescriptorBlueZ::GetValue() const { bluez::BluetoothGattDescriptorClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattDescriptorClient() @@ -70,18 +77,18 @@ } device::BluetoothGattCharacteristic* -BluetoothRemoteGattDescriptorBlueZ::GetCharacteristic() const { +BluetoothGattDescriptorBlueZ::GetCharacteristic() const { return characteristic_; } device::BluetoothGattCharacteristic::Permissions -BluetoothRemoteGattDescriptorBlueZ::GetPermissions() const { +BluetoothGattDescriptorBlueZ::GetPermissions() const { // TODO(armansito): Once BlueZ defines the permissions, return the correct // values here. return device::BluetoothGattCharacteristic::PERMISSION_NONE; } -void BluetoothRemoteGattDescriptorBlueZ::ReadRemoteDescriptor( +void BluetoothGattDescriptorBlueZ::ReadRemoteDescriptor( const ValueCallback& callback, const ErrorCallback& error_callback) { VLOG(1) << "Sending GATT characteristic descriptor read request to " @@ -90,11 +97,11 @@ bluez::BluezDBusManager::Get()->GetBluetoothGattDescriptorClient()->ReadValue( object_path_, callback, - base::Bind(&BluetoothRemoteGattDescriptorBlueZ::OnError, + base::Bind(&BluetoothGattDescriptorBlueZ::OnError, weak_ptr_factory_.GetWeakPtr(), error_callback)); } -void BluetoothRemoteGattDescriptorBlueZ::WriteRemoteDescriptor( +void BluetoothGattDescriptorBlueZ::WriteRemoteDescriptor( const std::vector<uint8_t>& new_value, const base::Closure& callback, const ErrorCallback& error_callback) { @@ -106,19 +113,18 @@ bluez::BluezDBusManager::Get() ->GetBluetoothGattDescriptorClient() ->WriteValue(object_path_, new_value, callback, - base::Bind(&BluetoothRemoteGattDescriptorBlueZ::OnError, + base::Bind(&BluetoothGattDescriptorBlueZ::OnError, weak_ptr_factory_.GetWeakPtr(), error_callback)); } -void BluetoothRemoteGattDescriptorBlueZ::OnError( - const ErrorCallback& error_callback, - const std::string& error_name, - const std::string& error_message) { +void BluetoothGattDescriptorBlueZ::OnError(const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message) { VLOG(1) << "Operation failed: " << error_name << ", message: " << error_message; error_callback.Run( - BluetoothRemoteGattServiceBlueZ::DBusErrorToServiceError(error_name)); + BluetoothGattServiceBlueZ::DBusErrorToServiceError(error_name)); } } // namespace bluez
diff --git a/device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h b/device/bluetooth/bluetooth_gatt_descriptor_bluez.h similarity index 68% rename from device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h rename to device/bluetooth/bluetooth_gatt_descriptor_bluez.h index fab4f7c..388cf8b 100644 --- a/device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h +++ b/device/bluetooth/bluetooth_gatt_descriptor_bluez.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_DESCRIPTOR_BLUEZ_H_ -#define DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_DESCRIPTOR_BLUEZ_H_ +#ifndef DEVICE_BLUETOOTH_BLUETOOTH_GATT_DESCRIPTOR_BLUEZ_H_ +#define DEVICE_BLUETOOTH_BLUETOOTH_GATT_DESCRIPTOR_BLUEZ_H_ #include <stdint.h> @@ -24,13 +24,12 @@ namespace bluez { -class BluetoothRemoteGattCharacteristicBlueZ; +class BluetoothGattCharacteristicBlueZ; -// The BluetoothRemoteGattDescriptorBlueZ class implements -// BluetoothGattDescriptor for remote GATT characteristic descriptors for -// platforms that use BlueZ. -class BluetoothRemoteGattDescriptorBlueZ - : public device::BluetoothGattDescriptor { +// The BluetoothGattDescriptorBlueZ class implements +// BluetoothGattDescriptor for remote and local GATT characteristic descriptors +// for platforms that use BlueZ. +class BluetoothGattDescriptorBlueZ : public device::BluetoothGattDescriptor { public: // device::BluetoothGattDescriptor overrides. std::string GetIdentifier() const override; @@ -52,10 +51,10 @@ private: friend class BluetoothRemoteGattCharacteristicBlueZ; - BluetoothRemoteGattDescriptorBlueZ( - BluetoothRemoteGattCharacteristicBlueZ* characteristic, - const dbus::ObjectPath& object_path); - ~BluetoothRemoteGattDescriptorBlueZ() override; + BluetoothGattDescriptorBlueZ(BluetoothGattCharacteristicBlueZ* characteristic, + const dbus::ObjectPath& object_path, + bool is_local); + ~BluetoothGattDescriptorBlueZ() override; // Called by dbus:: on unsuccessful completion of a request to read or write // the descriptor value. @@ -67,15 +66,18 @@ dbus::ObjectPath object_path_; // The GATT characteristic this descriptor belongs to. - BluetoothRemoteGattCharacteristicBlueZ* characteristic_; + BluetoothGattCharacteristicBlueZ* characteristic_; + + // Is this a remote or local descriptor. + bool is_local_; // Note: This should remain the last member so it'll be destroyed and // invalidate its weak pointers before any other members are destroyed. - base::WeakPtrFactory<BluetoothRemoteGattDescriptorBlueZ> weak_ptr_factory_; + base::WeakPtrFactory<BluetoothGattDescriptorBlueZ> weak_ptr_factory_; - DISALLOW_COPY_AND_ASSIGN(BluetoothRemoteGattDescriptorBlueZ); + DISALLOW_COPY_AND_ASSIGN(BluetoothGattDescriptorBlueZ); }; } // namespace bluez -#endif // DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_DESCRIPTOR_BLUEZ_H_ +#endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_DESCRIPTOR_BLUEZ_H_
diff --git a/device/bluetooth/bluetooth_gatt_service.h b/device/bluetooth/bluetooth_gatt_service.h index fe4bf1c5..d058762c 100644 --- a/device/bluetooth/bluetooth_gatt_service.h +++ b/device/bluetooth/bluetooth_gatt_service.h
@@ -6,10 +6,11 @@ #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ #include <stdint.h> - +#include <string> #include <vector> #include "base/callback.h" +#include "base/callback_forward.h" #include "base/macros.h" #include "device/bluetooth/bluetooth_export.h" #include "device/bluetooth/bluetooth_uuid.h" @@ -142,7 +143,7 @@ }; // The ErrorCallback is used by methods to asynchronously report errors. - typedef base::Closure ErrorCallback; + using ErrorCallback = base::Callback<void(GattErrorCode error_code)>; virtual ~BluetoothGattService();
diff --git a/device/bluetooth/bluetooth_gatt_service_bluez.cc b/device/bluetooth/bluetooth_gatt_service_bluez.cc new file mode 100644 index 0000000..64640af3 --- /dev/null +++ b/device/bluetooth/bluetooth_gatt_service_bluez.cc
@@ -0,0 +1,91 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/bluetooth/bluetooth_gatt_service_bluez.h" + +#include "base/logging.h" +#include "device/bluetooth/bluetooth_adapter_bluez.h" +#include "device/bluetooth/bluetooth_gatt_characteristic_bluez.h" + +namespace bluez { + +namespace { + +// TODO(jamuraa) move these to cros_system_api later +const char kErrorFailed[] = "org.bluez.Error.Failed"; +const char kErrorInProgress[] = "org.bluez.Error.InProgress"; +const char kErrorInvalidValueLength[] = "org.bluez.Error.InvalidValueLength"; +const char kErrorNotAuthorized[] = "org.bluez.Error.NotAuthorized"; +const char kErrorNotPaired[] = "org.bluez.Error.NotPaired"; +const char kErrorNotSupported[] = "org.bluez.Error.NotSupported"; +const char kErrorNotPermitted[] = "org.bluez.Error.NotPermitted"; + +} // namespace + +BluetoothGattServiceBlueZ::BluetoothGattServiceBlueZ( + BluetoothAdapterBlueZ* adapter, + const dbus::ObjectPath& object_path) + : adapter_(adapter), object_path_(object_path) { + DCHECK(adapter_); +} + +BluetoothGattServiceBlueZ::~BluetoothGattServiceBlueZ() {} + +std::vector<device::BluetoothGattCharacteristic*> +BluetoothGattServiceBlueZ::GetCharacteristics() const { + std::vector<device::BluetoothGattCharacteristic*> characteristics; + for (CharacteristicMap::const_iterator iter = characteristics_.begin(); + iter != characteristics_.end(); ++iter) { + characteristics.push_back(iter->second); + } + return characteristics; +} + +std::string BluetoothGattServiceBlueZ::GetIdentifier() const { + return object_path_.value(); +} + +std::vector<device::BluetoothGattService*> +BluetoothGattServiceBlueZ::GetIncludedServices() const { + // TODO(armansito): Return the actual included services here. + return std::vector<device::BluetoothGattService*>(); +} + +device::BluetoothGattCharacteristic* +BluetoothGattServiceBlueZ::GetCharacteristic( + const std::string& identifier) const { + CharacteristicMap::const_iterator iter = + characteristics_.find(dbus::ObjectPath(identifier)); + if (iter == characteristics_.end()) + return nullptr; + return iter->second; +} + +// static +device::BluetoothGattService::GattErrorCode +BluetoothGattServiceBlueZ::DBusErrorToServiceError(std::string error_name) { + device::BluetoothGattService::GattErrorCode code = GATT_ERROR_UNKNOWN; + if (error_name == kErrorFailed) { + code = GATT_ERROR_FAILED; + } else if (error_name == kErrorInProgress) { + code = GATT_ERROR_IN_PROGRESS; + } else if (error_name == kErrorInvalidValueLength) { + code = GATT_ERROR_INVALID_LENGTH; + } else if (error_name == kErrorNotPermitted) { + code = GATT_ERROR_NOT_PERMITTED; + } else if (error_name == kErrorNotAuthorized) { + code = GATT_ERROR_NOT_AUTHORIZED; + } else if (error_name == kErrorNotPaired) { + code = GATT_ERROR_NOT_PAIRED; + } else if (error_name == kErrorNotSupported) { + code = GATT_ERROR_NOT_SUPPORTED; + } + return code; +} + +BluetoothAdapterBlueZ* BluetoothGattServiceBlueZ::GetAdapter() const { + return adapter_; +} + +} // namespace bluez
diff --git a/device/bluetooth/bluetooth_gatt_service_bluez.h b/device/bluetooth/bluetooth_gatt_service_bluez.h new file mode 100644 index 0000000..bdd03f0 --- /dev/null +++ b/device/bluetooth/bluetooth_gatt_service_bluez.h
@@ -0,0 +1,81 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_BLUEZ_H_ +#define DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_BLUEZ_H_ + +#include <map> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "dbus/object_path.h" +#include "device/bluetooth/bluetooth_gatt_service.h" + +namespace device { + +class BluetoothGattCharacteristic; + +} // namespace device + +namespace bluez { + +class BluetoothAdapterBlueZ; +class BluetoothDeviceBlueZ; +class BluetoothGattCharacteristicBlueZ; + +// The BluetoothGattServiceBlueZ class implements BluetootGattService +// for GATT services on platforms that use BlueZ. +class BluetoothGattServiceBlueZ : public device::BluetoothGattService { + public: + // device::BluetoothGattService overrides. + std::string GetIdentifier() const override; + std::vector<device::BluetoothGattCharacteristic*> GetCharacteristics() + const override; + std::vector<device::BluetoothGattService*> GetIncludedServices() + const override; + device::BluetoothGattCharacteristic* GetCharacteristic( + const std::string& identifier) const override; + + // Object path of the underlying service. + const dbus::ObjectPath& object_path() const { return object_path_; } + + // Parses a named D-Bus error into a service error code. + static device::BluetoothGattService::GattErrorCode DBusErrorToServiceError( + const std::string error_name); + + // Returns the adapter associated with this service. + BluetoothAdapterBlueZ* GetAdapter() const; + + protected: + BluetoothGattServiceBlueZ(BluetoothAdapterBlueZ* adapter, + const dbus::ObjectPath& object_path); + ~BluetoothGattServiceBlueZ() override; + + // Does not take ownership of the characteristic object. + using CharacteristicMap = + std::map<dbus::ObjectPath, BluetoothGattCharacteristicBlueZ*>; + + // Mapping from GATT characteristic object paths to characteristic objects. + // owned by this service. Since the BlueZ implementation uses object + // paths as unique identifiers, we also use this mapping to return + // characteristics by identifier. + CharacteristicMap characteristics_; + + private: + friend class BluetoothDeviceBlueZ; + + // The adapter associated with this service. It's ok to store a raw pointer + // here since |adapter_| indirectly owns this instance. + BluetoothAdapterBlueZ* adapter_; + + // Object path of the GATT service. + dbus::ObjectPath object_path_; + + DISALLOW_COPY_AND_ASSIGN(BluetoothGattServiceBlueZ); +}; + +} // namespace bluez + +#endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_BLUEZ_H_
diff --git a/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc b/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc new file mode 100644 index 0000000..b62a3f3d --- /dev/null +++ b/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.cc
@@ -0,0 +1,91 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "device/bluetooth/bluetooth_local_gatt_characteristic_bluez.h" + +#include <iostream> +#include <string> + +#include "base/callback_forward.h" +#include "base/logging.h" +#include "device/bluetooth/bluetooth_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_gatt_descriptor.h" +#include "device/bluetooth/bluetooth_local_gatt_service_bluez.h" + +namespace bluez { + +BluetoothLocalGattCharacteristicBlueZ::BluetoothLocalGattCharacteristicBlueZ( + BluetoothLocalGattServiceBlueZ* service, + const dbus::ObjectPath& object_path) + : BluetoothGattCharacteristicBlueZ(service, object_path), + weak_ptr_factory_(this) { + VLOG(1) << "Creating local GATT characteristic with identifier: " + << GetIdentifier() << ", UUID: " << GetUUID().canonical_value(); +} + +BluetoothLocalGattCharacteristicBlueZ:: + ~BluetoothLocalGattCharacteristicBlueZ() {} + +device::BluetoothUUID BluetoothLocalGattCharacteristicBlueZ::GetUUID() const { + NOTIMPLEMENTED(); + return device::BluetoothUUID(); +} + +bool BluetoothLocalGattCharacteristicBlueZ::IsLocal() const { + return true; +} + +const std::vector<uint8_t>& BluetoothLocalGattCharacteristicBlueZ::GetValue() + const { + NOTIMPLEMENTED(); + static std::vector<uint8_t>* temp = new std::vector<uint8_t>; + return *temp; +} + +bool BluetoothLocalGattCharacteristicBlueZ::AddDescriptor( + device::BluetoothGattDescriptor* descriptor) { + NOTIMPLEMENTED(); + return false; +} + +device::BluetoothGattCharacteristic::Properties +BluetoothLocalGattCharacteristicBlueZ::GetProperties() const { + NOTIMPLEMENTED(); + return PROPERTY_NONE; +} + +bool BluetoothLocalGattCharacteristicBlueZ::IsNotifying() const { + NOTIMPLEMENTED(); + return false; +} + +bool BluetoothLocalGattCharacteristicBlueZ::UpdateValue( + const std::vector<uint8_t>& value) { + NOTIMPLEMENTED(); + return false; +} + +void BluetoothLocalGattCharacteristicBlueZ::StartNotifySession( + const NotifySessionCallback& callback, + const ErrorCallback& error_callback) { + // Doesn't apply for a local characteristic. + NOTIMPLEMENTED(); +} + +void BluetoothLocalGattCharacteristicBlueZ::ReadRemoteCharacteristic( + const ValueCallback& callback, + const ErrorCallback& error_callback) { + // Doesn't apply for a local characteristic. + NOTIMPLEMENTED(); +} + +void BluetoothLocalGattCharacteristicBlueZ::WriteRemoteCharacteristic( + const std::vector<uint8_t>& new_value, + const base::Closure& callback, + const ErrorCallback& error_callback) { + // Doesn't apply for a local characteristic. + NOTIMPLEMENTED(); +} + +} // namespace bluez
diff --git a/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.h b/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.h new file mode 100644 index 0000000..386200d3 --- /dev/null +++ b/device/bluetooth/bluetooth_local_gatt_characteristic_bluez.h
@@ -0,0 +1,68 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_CHARACTERISTIC_BLUEZ_H_ +#define DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_CHARACTERISTIC_BLUEZ_H_ + +#include <stdint.h> +#include <vector> + +#include "base/callback_forward.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "dbus/object_path.h" +#include "device/bluetooth/bluetooth_gatt_characteristic_bluez.h" +#include "device/bluetooth/bluetooth_uuid.h" + +namespace device { + +class BluetoothGattDescriptor; +class BluetoothGattService; + +} // namespace device + +namespace bluez { + +class BluetoothLocalGattDescriptorBlueZ; +class BluetoothLocalGattServiceBlueZ; + +// The BluetoothLocalGattCharacteristicBlueZ class implements +// BluetoothGattCharacteristic for remote GATT characteristics for platforms +// that use BlueZ. +class BluetoothLocalGattCharacteristicBlueZ + : public BluetoothGattCharacteristicBlueZ { + public: + // device::BluetoothGattCharacteristic overrides. + device::BluetoothUUID GetUUID() const override; + bool IsLocal() const override; + const std::vector<uint8_t>& GetValue() const override; + Properties GetProperties() const override; + bool IsNotifying() const override; + bool AddDescriptor(device::BluetoothGattDescriptor* descriptor) override; + bool UpdateValue(const std::vector<uint8_t>& value) override; + void StartNotifySession(const NotifySessionCallback& callback, + const ErrorCallback& error_callback) override; + void ReadRemoteCharacteristic(const ValueCallback& callback, + const ErrorCallback& error_callback) override; + void WriteRemoteCharacteristic(const std::vector<uint8_t>& new_value, + const base::Closure& callback, + const ErrorCallback& error_callback) override; + + private: + friend class BluetoothLocalGattServiceBlueZ; + + BluetoothLocalGattCharacteristicBlueZ(BluetoothLocalGattServiceBlueZ* service, + const dbus::ObjectPath& object_path); + ~BluetoothLocalGattCharacteristicBlueZ() override; + + // Note: This should remain the last member so it'll be destroyed and + // invalidate its weak pointers before any other members are destroyed. + base::WeakPtrFactory<BluetoothLocalGattCharacteristicBlueZ> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(BluetoothLocalGattCharacteristicBlueZ); +}; + +} // namespace bluez + +#endif // DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_CHARACTERISTIC_BLUEZ_H_
diff --git a/device/bluetooth/bluetooth_local_gatt_service_bluez.cc b/device/bluetooth/bluetooth_local_gatt_service_bluez.cc new file mode 100644 index 0000000..c63e2287 --- /dev/null +++ b/device/bluetooth/bluetooth_local_gatt_service_bluez.cc
@@ -0,0 +1,92 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <iostream> + +#include "base/bind.h" +#include "base/callback.h" +#include "base/logging.h" +#include "device/bluetooth/bluetooth_adapter_bluez.h" +#include "device/bluetooth/bluetooth_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_local_gatt_service_bluez.h" +#include "device/bluetooth/dbus/bluetooth_gatt_manager_client.h" +#include "device/bluetooth/dbus/bluez_dbus_manager.h" + +namespace bluez { + +BluetoothLocalGattServiceBlueZ::BluetoothLocalGattServiceBlueZ( + BluetoothAdapterBlueZ* adapter, + const dbus::ObjectPath& object_path) + : BluetoothGattServiceBlueZ(adapter, object_path), weak_ptr_factory_(this) { + VLOG(1) << "Creating local GATT service with identifier: " + << object_path.value(); +} + +BluetoothLocalGattServiceBlueZ::~BluetoothLocalGattServiceBlueZ() {} + +device::BluetoothUUID BluetoothLocalGattServiceBlueZ::GetUUID() const { + NOTIMPLEMENTED(); + return device::BluetoothUUID(); +} + +bool BluetoothLocalGattServiceBlueZ::IsLocal() const { + return true; +} + +bool BluetoothLocalGattServiceBlueZ::IsPrimary() const { + NOTIMPLEMENTED(); + return false; +} + +device::BluetoothDevice* BluetoothLocalGattServiceBlueZ::GetDevice() const { + return nullptr; +} + +bool BluetoothLocalGattServiceBlueZ::AddCharacteristic( + device::BluetoothGattCharacteristic* characteristic) { + NOTIMPLEMENTED(); + return false; +} + +bool BluetoothLocalGattServiceBlueZ::AddIncludedService( + device::BluetoothGattService* service) { + NOTIMPLEMENTED(); + return false; +} + +void BluetoothLocalGattServiceBlueZ::Register( + const base::Closure& callback, + const ErrorCallback& error_callback) { + DCHECK(bluez::BluezDBusManager::Get()); + bluez::BluezDBusManager::Get() + ->GetBluetoothGattManagerClient() + ->RegisterService( + object_path(), BluetoothGattManagerClient::Options(), callback, + base::Bind(&BluetoothLocalGattServiceBlueZ::OnRegistrationError, + weak_ptr_factory_.GetWeakPtr(), error_callback)); +} + +void BluetoothLocalGattServiceBlueZ::Unregister( + const base::Closure& callback, + const ErrorCallback& error_callback) { + DCHECK(bluez::BluezDBusManager::Get()); + bluez::BluezDBusManager::Get() + ->GetBluetoothGattManagerClient() + ->UnregisterService( + object_path(), callback, + base::Bind(&BluetoothLocalGattServiceBlueZ::OnRegistrationError, + weak_ptr_factory_.GetWeakPtr(), error_callback)); +} + +void BluetoothLocalGattServiceBlueZ::OnRegistrationError( + const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message) { + VLOG(1) << "[Un]Register Service failed: " << error_name + << ", message: " << error_message; + error_callback.Run( + BluetoothGattServiceBlueZ::DBusErrorToServiceError(error_name)); +} + +} // namespace bluez
diff --git a/device/bluetooth/bluetooth_local_gatt_service_bluez.h b/device/bluetooth/bluetooth_local_gatt_service_bluez.h new file mode 100644 index 0000000..ad2523a --- /dev/null +++ b/device/bluetooth/bluetooth_local_gatt_service_bluez.h
@@ -0,0 +1,69 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_SERVICE_BLUEZ_H_ +#define DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_SERVICE_BLUEZ_H_ + +#include <string> + +#include "base/callback_forward.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "dbus/object_path.h" +#include "device/bluetooth/bluetooth_gatt_service_bluez.h" +#include "device/bluetooth/bluetooth_uuid.h" + +namespace device { + +class BluetoothAdapter; +class BluetoothDevice; +class BluetoothGattCharacteristic; + +} // namespace device + +namespace bluez { + +class BluetoothAdapterBlueZ; +class BluetoothDeviceBlueZ; + +// The BluetoothLocalGattServiceBlueZ class implements BluetootGattService +// for local GATT services for platforms that use BlueZ. +class BluetoothLocalGattServiceBlueZ : public BluetoothGattServiceBlueZ { + public: + // device::BluetoothGattService overrides. + device::BluetoothUUID GetUUID() const override; + bool IsLocal() const override; + bool IsPrimary() const override; + device::BluetoothDevice* GetDevice() const override; + bool AddCharacteristic( + device::BluetoothGattCharacteristic* characteristic) override; + bool AddIncludedService(device::BluetoothGattService* service) override; + void Register(const base::Closure& callback, + const ErrorCallback& error_callback) override; + void Unregister(const base::Closure& callback, + const ErrorCallback& error_callback) override; + + private: + friend class BluetoothDeviceBlueZ; + + BluetoothLocalGattServiceBlueZ(BluetoothAdapterBlueZ* adapter, + const dbus::ObjectPath& object_path); + ~BluetoothLocalGattServiceBlueZ() override; + + // Called by dbus:: on unsuccessful completion of a request to register a + // local service. + void OnRegistrationError(const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message); + + // Note: This should remain the last member so it'll be destroyed and + // invalidate its weak pointers before any other members are destroyed. + base::WeakPtrFactory<BluetoothLocalGattServiceBlueZ> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(BluetoothLocalGattServiceBlueZ); +}; + +} // namespace bluez + +#endif // DEVICE_BLUETOOTH_BLUETOOTH_LOCAL_GATT_SERVICE_BLUEZ_H_
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc index d57ef9da..c2436cd 100644 --- a/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc +++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.cc
@@ -4,18 +4,24 @@ #include "device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h" +#include <iostream> +#include <iterator> #include <limits> -#include <memory> -#include <utility> +#include "base/bind.h" +#include "base/callback.h" +#include "base/callback_forward.h" #include "base/logging.h" #include "base/strings/stringprintf.h" +#include "dbus/property.h" #include "device/bluetooth/bluetooth_adapter_bluez.h" #include "device/bluetooth/bluetooth_device.h" +#include "device/bluetooth/bluetooth_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_gatt_descriptor_bluez.h" #include "device/bluetooth/bluetooth_gatt_notify_session_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h" +#include "device/bluetooth/bluetooth_gatt_service.h" #include "device/bluetooth/bluetooth_remote_gatt_service_bluez.h" +#include "device/bluetooth/dbus/bluetooth_gatt_characteristic_client.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "third_party/cros_system_api/dbus/service_constants.h" @@ -38,8 +44,7 @@ BluetoothRemoteGattCharacteristicBlueZ::BluetoothRemoteGattCharacteristicBlueZ( BluetoothRemoteGattServiceBlueZ* service, const dbus::ObjectPath& object_path) - : object_path_(object_path), - service_(service), + : BluetoothGattCharacteristicBlueZ(service, object_path), num_notify_sessions_(0), notify_call_pending_(false), weak_ptr_factory_(this) { @@ -79,15 +84,11 @@ } } -std::string BluetoothRemoteGattCharacteristicBlueZ::GetIdentifier() const { - return object_path_.value(); -} - device::BluetoothUUID BluetoothRemoteGattCharacteristicBlueZ::GetUUID() const { bluez::BluetoothGattCharacteristicClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattCharacteristicClient() - ->GetProperties(object_path_); + ->GetProperties(object_path()); DCHECK(properties); return device::BluetoothUUID(properties->uuid.value()); } @@ -101,24 +102,19 @@ bluez::BluetoothGattCharacteristicClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattCharacteristicClient() - ->GetProperties(object_path_); + ->GetProperties(object_path()); DCHECK(properties); return properties->value.value(); } -device::BluetoothGattService* -BluetoothRemoteGattCharacteristicBlueZ::GetService() const { - return service_; -} - device::BluetoothGattCharacteristic::Properties BluetoothRemoteGattCharacteristicBlueZ::GetProperties() const { bluez::BluetoothGattCharacteristicClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattCharacteristicClient() - ->GetProperties(object_path_); + ->GetProperties(object_path()); DCHECK(properties); Properties props = PROPERTY_NONE; @@ -150,42 +146,16 @@ return props; } -device::BluetoothGattCharacteristic::Permissions -BluetoothRemoteGattCharacteristicBlueZ::GetPermissions() const { - // TODO(armansito): Once BlueZ defines the permissions, return the correct - // values here. - return PERMISSION_NONE; -} - bool BluetoothRemoteGattCharacteristicBlueZ::IsNotifying() const { bluez::BluetoothGattCharacteristicClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattCharacteristicClient() - ->GetProperties(object_path_); + ->GetProperties(object_path()); DCHECK(properties); return properties->notifying.value(); } -std::vector<device::BluetoothGattDescriptor*> -BluetoothRemoteGattCharacteristicBlueZ::GetDescriptors() const { - std::vector<device::BluetoothGattDescriptor*> descriptors; - for (DescriptorMap::const_iterator iter = descriptors_.begin(); - iter != descriptors_.end(); ++iter) - descriptors.push_back(iter->second); - return descriptors; -} - -device::BluetoothGattDescriptor* -BluetoothRemoteGattCharacteristicBlueZ::GetDescriptor( - const std::string& identifier) const { - DescriptorMap::const_iterator iter = - descriptors_.find(dbus::ObjectPath(identifier)); - if (iter == descriptors_.end()) - return NULL; - return iter->second; -} - bool BluetoothRemoteGattCharacteristicBlueZ::AddDescriptor( device::BluetoothGattDescriptor* descriptor) { VLOG(1) << "Descriptors cannot be added to a remote GATT characteristic."; @@ -198,35 +168,6 @@ return false; } -void BluetoothRemoteGattCharacteristicBlueZ::ReadRemoteCharacteristic( - const ValueCallback& callback, - const ErrorCallback& error_callback) { - VLOG(1) << "Sending GATT characteristic read request to characteristic: " - << GetIdentifier() << ", UUID: " << GetUUID().canonical_value() - << "."; - - bluez::BluezDBusManager::Get() - ->GetBluetoothGattCharacteristicClient() - ->ReadValue(object_path_, callback, - base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnError, - weak_ptr_factory_.GetWeakPtr(), error_callback)); -} - -void BluetoothRemoteGattCharacteristicBlueZ::WriteRemoteCharacteristic( - const std::vector<uint8_t>& new_value, - const base::Closure& callback, - const ErrorCallback& error_callback) { - VLOG(1) << "Sending GATT characteristic write request to characteristic: " - << GetIdentifier() << ", UUID: " << GetUUID().canonical_value() - << ", with value: " << new_value << "."; - - bluez::BluezDBusManager::Get() - ->GetBluetoothGattCharacteristicClient() - ->WriteValue(object_path_, new_value, callback, - base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnError, - weak_ptr_factory_.GetWeakPtr(), error_callback)); -} - void BluetoothRemoteGattCharacteristicBlueZ::StartNotifySession( const NotifySessionCallback& callback, const ErrorCallback& error_callback) { @@ -252,7 +193,7 @@ std::unique_ptr<device::BluetoothGattNotifySession> session( new BluetoothGattNotifySessionBlueZ( service_->GetAdapter(), service_->GetDevice()->GetAddress(), - service_->GetIdentifier(), GetIdentifier(), object_path_)); + service_->GetIdentifier(), GetIdentifier(), object_path())); callback.Run(std::move(session)); return; } @@ -270,7 +211,7 @@ bluez::BluezDBusManager::Get() ->GetBluetoothGattCharacteristicClient() ->StartNotify( - object_path_, + object_path(), base::Bind( &BluetoothRemoteGattCharacteristicBlueZ::OnStartNotifySuccess, weak_ptr_factory_.GetWeakPtr(), callback), @@ -279,6 +220,35 @@ weak_ptr_factory_.GetWeakPtr(), error_callback)); } +void BluetoothRemoteGattCharacteristicBlueZ::ReadRemoteCharacteristic( + const ValueCallback& callback, + const ErrorCallback& error_callback) { + VLOG(1) << "Sending GATT characteristic read request to characteristic: " + << GetIdentifier() << ", UUID: " << GetUUID().canonical_value() + << "."; + + bluez::BluezDBusManager::Get() + ->GetBluetoothGattCharacteristicClient() + ->ReadValue(object_path(), callback, + base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnError, + weak_ptr_factory_.GetWeakPtr(), error_callback)); +} + +void BluetoothRemoteGattCharacteristicBlueZ::WriteRemoteCharacteristic( + const std::vector<uint8_t>& new_value, + const base::Closure& callback, + const ErrorCallback& error_callback) { + VLOG(1) << "Sending GATT characteristic write request to characteristic: " + << GetIdentifier() << ", UUID: " << GetUUID().canonical_value() + << ", with value: " << new_value << "."; + + bluez::BluezDBusManager::Get() + ->GetBluetoothGattCharacteristicClient() + ->WriteValue(object_path(), new_value, callback, + base::Bind(&BluetoothRemoteGattCharacteristicBlueZ::OnError, + weak_ptr_factory_.GetWeakPtr(), error_callback)); +} + void BluetoothRemoteGattCharacteristicBlueZ::RemoveNotifySession( const base::Closure& callback) { VLOG(1) << __func__; @@ -308,7 +278,7 @@ bluez::BluezDBusManager::Get() ->GetBluetoothGattCharacteristicClient() ->StopNotify( - object_path_, + object_path(), base::Bind( &BluetoothRemoteGattCharacteristicBlueZ::OnStopNotifySuccess, weak_ptr_factory_.GetWeakPtr(), callback), @@ -329,7 +299,7 @@ ->GetBluetoothGattDescriptorClient() ->GetProperties(object_path); DCHECK(properties); - if (properties->characteristic.value() != object_path_) { + if (properties->characteristic.value() != this->object_path()) { VLOG(3) << "Remote GATT descriptor does not belong to this characteristic."; return; } @@ -337,14 +307,15 @@ VLOG(1) << "Adding new remote GATT descriptor for GATT characteristic: " << GetIdentifier() << ", UUID: " << GetUUID().canonical_value(); - BluetoothRemoteGattDescriptorBlueZ* descriptor = - new BluetoothRemoteGattDescriptorBlueZ(this, object_path); + BluetoothGattDescriptorBlueZ* descriptor = + new BluetoothGattDescriptorBlueZ(this, object_path, false /* is_local */); descriptors_[object_path] = descriptor; DCHECK(descriptor->GetIdentifier() == object_path.value()); DCHECK(descriptor->GetUUID().IsValid()); DCHECK(service_); - service_->NotifyDescriptorAddedOrRemoved(this, descriptor, true /* added */); + static_cast<BluetoothRemoteGattServiceBlueZ*>(service_) + ->NotifyDescriptorAddedOrRemoved(this, descriptor, true /* added */); } void BluetoothRemoteGattCharacteristicBlueZ::GattDescriptorRemoved( @@ -358,12 +329,13 @@ VLOG(1) << "Removing remote GATT descriptor from characteristic: " << GetIdentifier() << ", UUID: " << GetUUID().canonical_value(); - BluetoothRemoteGattDescriptorBlueZ* descriptor = iter->second; + BluetoothGattDescriptorBlueZ* descriptor = iter->second; DCHECK(descriptor->object_path() == object_path); descriptors_.erase(iter); DCHECK(service_); - service_->NotifyDescriptorAddedOrRemoved(this, descriptor, false /* added */); + static_cast<BluetoothRemoteGattServiceBlueZ*>(service_) + ->NotifyDescriptorAddedOrRemoved(this, descriptor, false /* added */); delete descriptor; } @@ -388,24 +360,15 @@ return; DCHECK(service_); - service_->NotifyDescriptorValueChanged(this, iter->second, - properties->value.value()); -} - -void BluetoothRemoteGattCharacteristicBlueZ::OnError( - const ErrorCallback& error_callback, - const std::string& error_name, - const std::string& error_message) { - VLOG(1) << "Operation failed: " << error_name - << ", message: " << error_message; - error_callback.Run( - BluetoothRemoteGattServiceBlueZ::DBusErrorToServiceError(error_name)); + static_cast<BluetoothRemoteGattServiceBlueZ*>(service_) + ->NotifyDescriptorValueChanged(this, iter->second, + properties->value.value()); } void BluetoothRemoteGattCharacteristicBlueZ::OnStartNotifySuccess( const NotifySessionCallback& callback) { VLOG(1) << "Started notifications from characteristic: " - << object_path_.value(); + << object_path().value(); DCHECK(num_notify_sessions_ == 0); DCHECK(notify_call_pending_); @@ -418,7 +381,7 @@ std::unique_ptr<device::BluetoothGattNotifySession> session( new BluetoothGattNotifySessionBlueZ( service_->GetAdapter(), service_->GetDevice()->GetAddress(), - service_->GetIdentifier(), GetIdentifier(), object_path_)); + service_->GetIdentifier(), GetIdentifier(), object_path())); callback.Run(std::move(session)); ProcessStartNotifyQueue(); @@ -429,7 +392,7 @@ const std::string& error_name, const std::string& error_message) { VLOG(1) << "Failed to start notifications from characteristic: " - << object_path_.value() << ": " << error_name << ", " + << object_path().value() << ": " << error_name << ", " << error_message; DCHECK(num_notify_sessions_ == 0); DCHECK(notify_call_pending_); @@ -459,7 +422,7 @@ const std::string& error_name, const std::string& error_message) { VLOG(1) << "Call to stop notifications failed for characteristic: " - << object_path_.value() << ": " << error_name << ", " + << object_path().value() << ": " << error_name << ", " << error_message; // Since this is a best effort operation, treat this as success. @@ -474,4 +437,14 @@ } } +void BluetoothRemoteGattCharacteristicBlueZ::OnError( + const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message) { + VLOG(1) << "Operation failed: " << error_name + << ", message: " << error_message; + error_callback.Run( + BluetoothGattServiceBlueZ::DBusErrorToServiceError(error_name)); +} + } // namespace bluez
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h b/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h index e46ddf9..4f9d122 100644 --- a/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h +++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h
@@ -7,17 +7,17 @@ #include <stddef.h> #include <stdint.h> - -#include <map> #include <queue> #include <string> #include <utility> #include <vector> +#include "base/callback_forward.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "dbus/object_path.h" #include "device/bluetooth/bluetooth_gatt_characteristic.h" +#include "device/bluetooth/bluetooth_gatt_characteristic_bluez.h" #include "device/bluetooth/bluetooth_uuid.h" #include "device/bluetooth/dbus/bluetooth_gatt_descriptor_client.h" @@ -30,37 +30,31 @@ namespace bluez { -class BluetoothRemoteGattDescriptorBlueZ; +class BluetoothGattDescriptorBlueZ; class BluetoothRemoteGattServiceBlueZ; // The BluetoothRemoteGattCharacteristicBlueZ class implements // BluetoothGattCharacteristic for remote GATT characteristics for platforms // that use BlueZ. class BluetoothRemoteGattCharacteristicBlueZ - : public device::BluetoothGattCharacteristic, - public bluez::BluetoothGattDescriptorClient::Observer { + : public BluetoothGattCharacteristicBlueZ, + public BluetoothGattDescriptorClient::Observer { public: // device::BluetoothGattCharacteristic overrides. - std::string GetIdentifier() const override; device::BluetoothUUID GetUUID() const override; bool IsLocal() const override; const std::vector<uint8_t>& GetValue() const override; - device::BluetoothGattService* GetService() const override; Properties GetProperties() const override; - Permissions GetPermissions() const override; bool IsNotifying() const override; - std::vector<device::BluetoothGattDescriptor*> GetDescriptors() const override; - device::BluetoothGattDescriptor* GetDescriptor( - const std::string& identifier) const override; bool AddDescriptor(device::BluetoothGattDescriptor* descriptor) override; bool UpdateValue(const std::vector<uint8_t>& value) override; + void StartNotifySession(const NotifySessionCallback& callback, + const ErrorCallback& error_callback) override; void ReadRemoteCharacteristic(const ValueCallback& callback, const ErrorCallback& error_callback) override; void WriteRemoteCharacteristic(const std::vector<uint8_t>& new_value, const base::Closure& callback, const ErrorCallback& error_callback) override; - void StartNotifySession(const NotifySessionCallback& callback, - const ErrorCallback& error_callback) override; // Removes one value update session and invokes |callback| on completion. This // decrements the session reference count by 1 and if the number reaches 0, @@ -68,14 +62,11 @@ // characteristic. void RemoveNotifySession(const base::Closure& callback); - // Object path of the underlying D-Bus characteristic. - const dbus::ObjectPath& object_path() const { return object_path_; } - private: friend class BluetoothRemoteGattServiceBlueZ; - typedef std::pair<NotifySessionCallback, ErrorCallback> - PendingStartNotifyCall; + using PendingStartNotifyCall = + std::pair<NotifySessionCallback, ErrorCallback>; BluetoothRemoteGattCharacteristicBlueZ( BluetoothRemoteGattServiceBlueZ* service, @@ -88,12 +79,6 @@ void GattDescriptorPropertyChanged(const dbus::ObjectPath& object_path, const std::string& property_name) override; - // Called by dbus:: on unsuccessful completion of a request to read or write - // the characteristic value. - void OnError(const ErrorCallback& error_callback, - const std::string& error_name, - const std::string& error_message); - // Called by dbus:: on successful completion of a request to start // notifications. void OnStartNotifySuccess(const NotifySessionCallback& callback); @@ -117,11 +102,11 @@ // Calls StartNotifySession for each queued request. void ProcessStartNotifyQueue(); - // Object path of the D-Bus characteristic object. - dbus::ObjectPath object_path_; - - // The GATT service this GATT characteristic belongs to. - BluetoothRemoteGattServiceBlueZ* service_; + // Called by dbus:: on unsuccessful completion of a request to read or write + // the characteristic value. + void OnError(const ErrorCallback& error_callback, + const std::string& error_name, + const std::string& error_message); // The total number of currently active value update sessions. size_t num_notify_sessions_; @@ -133,14 +118,6 @@ // True, if a Start or Stop notify call to bluetoothd is currently pending. bool notify_call_pending_; - // Mapping from GATT descriptor object paths to descriptor objects owned by - // this characteristic. Since the BlueZ implementation uses object paths - // as unique identifiers, we also use this mapping to return descriptors by - // identifier. - typedef std::map<dbus::ObjectPath, BluetoothRemoteGattDescriptorBlueZ*> - DescriptorMap; - DescriptorMap descriptors_; - // Note: This should remain the last member so it'll be destroyed and // invalidate its weak pointers before any other members are destroyed. base::WeakPtrFactory<BluetoothRemoteGattCharacteristicBlueZ>
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_android.cc b/device/bluetooth/bluetooth_remote_gatt_service_android.cc index 490369c..935dfaa 100644 --- a/device/bluetooth/bluetooth_remote_gatt_service_android.cc +++ b/device/bluetooth/bluetooth_remote_gatt_service_android.cc
@@ -169,13 +169,13 @@ void BluetoothRemoteGattServiceAndroid::Register( const base::Closure& callback, const ErrorCallback& error_callback) { - error_callback.Run(); + error_callback.Run(GATT_ERROR_NOT_SUPPORTED); } void BluetoothRemoteGattServiceAndroid::Unregister( const base::Closure& callback, const ErrorCallback& error_callback) { - error_callback.Run(); + error_callback.Run(GATT_ERROR_NOT_SUPPORTED); } void BluetoothRemoteGattServiceAndroid::CreateGattRemoteCharacteristic(
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc b/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc index 4906aaf7..bd6b203d 100644 --- a/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc +++ b/device/bluetooth/bluetooth_remote_gatt_service_bluez.cc
@@ -4,42 +4,34 @@ #include "device/bluetooth/bluetooth_remote_gatt_service_bluez.h" +#include <iostream> +#include <iterator> + +#include "base/callback.h" +#include "base/callback_forward.h" #include "base/logging.h" -#include "base/strings/stringprintf.h" +#include "dbus/property.h" #include "device/bluetooth/bluetooth_adapter_bluez.h" #include "device/bluetooth/bluetooth_device_bluez.h" +#include "device/bluetooth/bluetooth_gatt_characteristic_bluez.h" +#include "device/bluetooth/bluetooth_gatt_descriptor_bluez.h" +#include "device/bluetooth/bluetooth_gatt_service.h" #include "device/bluetooth/bluetooth_remote_gatt_characteristic_bluez.h" -#include "device/bluetooth/bluetooth_remote_gatt_descriptor_bluez.h" -#include "device/bluetooth/dbus/bluetooth_gatt_service_client.h" #include "device/bluetooth/dbus/bluez_dbus_manager.h" namespace bluez { -namespace { - -// TODO(jamuraa) move these to cros_system_api later -const char kErrorFailed[] = "org.bluez.Error.Failed"; -const char kErrorInProgress[] = "org.bluez.Error.InProgress"; -const char kErrorInvalidValueLength[] = "org.bluez.Error.InvalidValueLength"; -const char kErrorNotAuthorized[] = "org.bluez.Error.NotAuthorized"; -const char kErrorNotPaired[] = "org.bluez.Error.NotPaired"; -const char kErrorNotSupported[] = "org.bluez.Error.NotSupported"; -const char kErrorNotPermitted[] = "org.bluez.Error.NotPermitted"; - -} // namespace - BluetoothRemoteGattServiceBlueZ::BluetoothRemoteGattServiceBlueZ( BluetoothAdapterBlueZ* adapter, BluetoothDeviceBlueZ* device, const dbus::ObjectPath& object_path) - : object_path_(object_path), - adapter_(adapter), + : BluetoothGattServiceBlueZ(adapter, object_path), device_(device), discovery_complete_(false), weak_ptr_factory_(this) { VLOG(1) << "Creating remote GATT service with identifier: " - << object_path.value() << ", UUID: " << GetUUID().canonical_value(); - DCHECK(adapter_); + << object_path.value(); + DCHECK(GetAdapter()); bluez::BluezDBusManager::Get()->GetBluetoothGattServiceClient()->AddObserver( this); @@ -72,22 +64,18 @@ characteristics_.clear(); for (CharacteristicMap::iterator iter = characteristics.begin(); iter != characteristics.end(); ++iter) { - DCHECK(adapter_); - adapter_->NotifyGattCharacteristicRemoved(iter->second); + DCHECK(GetAdapter()); + GetAdapter()->NotifyGattCharacteristicRemoved(iter->second); delete iter->second; } } -std::string BluetoothRemoteGattServiceBlueZ::GetIdentifier() const { - return object_path_.value(); -} - device::BluetoothUUID BluetoothRemoteGattServiceBlueZ::GetUUID() const { bluez::BluetoothGattServiceClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattServiceClient() - ->GetProperties(object_path_); + ->GetProperties(object_path()); DCHECK(properties); return device::BluetoothUUID(properties->uuid.value()); } @@ -100,7 +88,7 @@ bluez::BluetoothGattServiceClient::Properties* properties = bluez::BluezDBusManager::Get() ->GetBluetoothGattServiceClient() - ->GetProperties(object_path_); + ->GetProperties(object_path()); DCHECK(properties); return properties->primary.value(); } @@ -109,32 +97,6 @@ return device_; } -std::vector<device::BluetoothGattCharacteristic*> -BluetoothRemoteGattServiceBlueZ::GetCharacteristics() const { - std::vector<device::BluetoothGattCharacteristic*> characteristics; - for (CharacteristicMap::const_iterator iter = characteristics_.begin(); - iter != characteristics_.end(); ++iter) { - characteristics.push_back(iter->second); - } - return characteristics; -} - -std::vector<device::BluetoothGattService*> -BluetoothRemoteGattServiceBlueZ::GetIncludedServices() const { - // TODO(armansito): Return the actual included services here. - return std::vector<device::BluetoothGattService*>(); -} - -device::BluetoothGattCharacteristic* -BluetoothRemoteGattServiceBlueZ::GetCharacteristic( - const std::string& identifier) const { - CharacteristicMap::const_iterator iter = - characteristics_.find(dbus::ObjectPath(identifier)); - if (iter == characteristics_.end()) - return NULL; - return iter->second; -} - bool BluetoothRemoteGattServiceBlueZ::AddCharacteristic( device::BluetoothGattCharacteristic* characteristic) { VLOG(1) << "Characteristics cannot be added to a remote GATT service."; @@ -151,41 +113,14 @@ const base::Closure& callback, const ErrorCallback& error_callback) { VLOG(1) << "A remote GATT service cannot be registered."; - error_callback.Run(); + error_callback.Run(GATT_ERROR_NOT_SUPPORTED); } void BluetoothRemoteGattServiceBlueZ::Unregister( const base::Closure& callback, const ErrorCallback& error_callback) { VLOG(1) << "A remote GATT service cannot be unregistered."; - error_callback.Run(); -} - -// static -device::BluetoothGattService::GattErrorCode -BluetoothRemoteGattServiceBlueZ::DBusErrorToServiceError( - std::string error_name) { - device::BluetoothGattService::GattErrorCode code = GATT_ERROR_UNKNOWN; - if (error_name == kErrorFailed) { - code = GATT_ERROR_FAILED; - } else if (error_name == kErrorInProgress) { - code = GATT_ERROR_IN_PROGRESS; - } else if (error_name == kErrorInvalidValueLength) { - code = GATT_ERROR_INVALID_LENGTH; - } else if (error_name == kErrorNotPermitted) { - code = GATT_ERROR_NOT_PERMITTED; - } else if (error_name == kErrorNotAuthorized) { - code = GATT_ERROR_NOT_AUTHORIZED; - } else if (error_name == kErrorNotPaired) { - code = GATT_ERROR_NOT_PAIRED; - } else if (error_name == kErrorNotSupported) { - code = GATT_ERROR_NOT_SUPPORTED; - } - return code; -} - -BluetoothAdapterBlueZ* BluetoothRemoteGattServiceBlueZ::GetAdapter() const { - return adapter_; + error_callback.Run(GATT_ERROR_NOT_SUPPORTED); } void BluetoothRemoteGattServiceBlueZ::NotifyServiceChanged() { @@ -195,40 +130,40 @@ if (!discovery_complete_) return; - DCHECK(adapter_); - adapter_->NotifyGattServiceChanged(this); + DCHECK(GetAdapter()); + GetAdapter()->NotifyGattServiceChanged(this); } void BluetoothRemoteGattServiceBlueZ::NotifyDescriptorAddedOrRemoved( BluetoothRemoteGattCharacteristicBlueZ* characteristic, - BluetoothRemoteGattDescriptorBlueZ* descriptor, + BluetoothGattDescriptorBlueZ* descriptor, bool added) { DCHECK(characteristic->GetService() == this); DCHECK(descriptor->GetCharacteristic() == characteristic); - DCHECK(adapter_); + DCHECK(GetAdapter()); if (added) { - adapter_->NotifyGattDescriptorAdded(descriptor); + GetAdapter()->NotifyGattDescriptorAdded(descriptor); return; } - adapter_->NotifyGattDescriptorRemoved(descriptor); + GetAdapter()->NotifyGattDescriptorRemoved(descriptor); } void BluetoothRemoteGattServiceBlueZ::NotifyDescriptorValueChanged( BluetoothRemoteGattCharacteristicBlueZ* characteristic, - BluetoothRemoteGattDescriptorBlueZ* descriptor, + BluetoothGattDescriptorBlueZ* descriptor, const std::vector<uint8_t>& value) { DCHECK(characteristic->GetService() == this); DCHECK(descriptor->GetCharacteristic() == characteristic); - DCHECK(adapter_); - adapter_->NotifyGattDescriptorValueChanged(descriptor, value); + DCHECK(GetAdapter()); + GetAdapter()->NotifyGattDescriptorValueChanged(descriptor, value); } void BluetoothRemoteGattServiceBlueZ::GattServicePropertyChanged( const dbus::ObjectPath& object_path, const std::string& property_name) { - if (object_path != object_path_) + if (object_path != this->object_path()) return; VLOG(1) << "Service property changed: \"" << property_name << "\", " @@ -250,8 +185,8 @@ VLOG(1) << "All characteristics were discovered for service: " << object_path.value(); discovery_complete_ = true; - DCHECK(adapter_); - adapter_->NotifyGattDiscoveryComplete(this); + DCHECK(GetAdapter()); + GetAdapter()->NotifyGattDiscoveryComplete(this); } void BluetoothRemoteGattServiceBlueZ::GattCharacteristicAdded( @@ -267,7 +202,7 @@ ->GetBluetoothGattCharacteristicClient() ->GetProperties(object_path); DCHECK(properties); - if (properties->service.value() != object_path_) { + if (properties->service.value() != this->object_path()) { VLOG(2) << "Remote GATT characteristic does not belong to this service."; return; } @@ -281,8 +216,8 @@ DCHECK(characteristic->GetIdentifier() == object_path.value()); DCHECK(characteristic->GetUUID().IsValid()); - DCHECK(adapter_); - adapter_->NotifyGattCharacteristicAdded(characteristic); + DCHECK(GetAdapter()); + GetAdapter()->NotifyGattCharacteristicAdded(characteristic); } void BluetoothRemoteGattServiceBlueZ::GattCharacteristicRemoved( @@ -296,12 +231,12 @@ VLOG(1) << "Removing remote GATT characteristic from service: " << GetIdentifier() << ", UUID: " << GetUUID().canonical_value(); - BluetoothRemoteGattCharacteristicBlueZ* characteristic = iter->second; + BluetoothGattCharacteristicBlueZ* characteristic = iter->second; DCHECK(characteristic->object_path() == object_path); characteristics_.erase(iter); - DCHECK(adapter_); - adapter_->NotifyGattCharacteristicRemoved(characteristic); + DCHECK(GetAdapter()); + GetAdapter()->NotifyGattCharacteristicRemoved(characteristic); delete characteristic; } @@ -326,13 +261,13 @@ ->GetProperties(object_path); DCHECK(properties); - DCHECK(adapter_); + DCHECK(GetAdapter()); if (property_name == properties->flags.name()) NotifyServiceChanged(); else if (property_name == properties->value.name()) - adapter_->NotifyGattCharacteristicValueChanged(iter->second, - properties->value.value()); + GetAdapter()->NotifyGattCharacteristicValueChanged( + iter->second, properties->value.value()); } } // namespace bluez
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_bluez.h b/device/bluetooth/bluetooth_remote_gatt_service_bluez.h index 20aaffae..9be0eef 100644 --- a/device/bluetooth/bluetooth_remote_gatt_service_bluez.h +++ b/device/bluetooth/bluetooth_remote_gatt_service_bluez.h
@@ -6,17 +6,14 @@ #define DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_SERVICE_BLUEZ_H_ #include <stdint.h> - -#include <map> #include <string> #include <vector> +#include "base/callback_forward.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" -#include "base/observer_list.h" #include "dbus/object_path.h" -#include "device/bluetooth/bluetooth_gatt_service.h" +#include "device/bluetooth/bluetooth_gatt_service_bluez.h" #include "device/bluetooth/bluetooth_uuid.h" #include "device/bluetooth/dbus/bluetooth_gatt_characteristic_client.h" #include "device/bluetooth/dbus/bluetooth_gatt_service_client.h" @@ -24,6 +21,7 @@ namespace device { class BluetoothAdapter; +class BluetoothDevice; class BluetoothGattCharacteristic; } // namespace device @@ -33,27 +31,20 @@ class BluetoothAdapterBlueZ; class BluetoothDeviceBlueZ; class BluetoothRemoteGattCharacteristicBlueZ; -class BluetoothRemoteGattDescriptorBlueZ; +class BluetoothGattDescriptorBlueZ; // The BluetoothRemoteGattServiceBlueZ class implements BluetootGattService // for remote GATT services for platforms that use BlueZ. class BluetoothRemoteGattServiceBlueZ - : public device::BluetoothGattService, - public bluez::BluetoothGattServiceClient::Observer, - public bluez::BluetoothGattCharacteristicClient::Observer { + : public BluetoothGattServiceBlueZ, + public BluetoothGattServiceClient::Observer, + public BluetoothGattCharacteristicClient::Observer { public: // device::BluetoothGattService overrides. - std::string GetIdentifier() const override; device::BluetoothUUID GetUUID() const override; bool IsLocal() const override; bool IsPrimary() const override; device::BluetoothDevice* GetDevice() const override; - std::vector<device::BluetoothGattCharacteristic*> GetCharacteristics() - const override; - std::vector<device::BluetoothGattService*> GetIncludedServices() - const override; - device::BluetoothGattCharacteristic* GetCharacteristic( - const std::string& identifier) const override; bool AddCharacteristic( device::BluetoothGattCharacteristic* characteristic) override; bool AddIncludedService(device::BluetoothGattService* service) override; @@ -62,16 +53,6 @@ void Unregister(const base::Closure& callback, const ErrorCallback& error_callback) override; - // Object path of the underlying service. - const dbus::ObjectPath& object_path() const { return object_path_; } - - // Parses a named D-Bus error into a service error code. - static device::BluetoothGattService::GattErrorCode DBusErrorToServiceError( - const std::string error_name); - - // Returns the adapter associated with this service. - BluetoothAdapterBlueZ* GetAdapter() const; - // Notifies its observers that the GATT service has changed. This is mainly // used by BluetoothRemoteGattCharacteristicBlueZ instances to notify // service observers when characteristic descriptors get added and removed. @@ -85,7 +66,7 @@ // be sent. void NotifyDescriptorAddedOrRemoved( BluetoothRemoteGattCharacteristicBlueZ* characteristic, - BluetoothRemoteGattDescriptorBlueZ* descriptor, + BluetoothGattDescriptorBlueZ* descriptor, bool added); // Notifies its observers that the value of a descriptor has changed. Called @@ -93,15 +74,12 @@ // observers. void NotifyDescriptorValueChanged( BluetoothRemoteGattCharacteristicBlueZ* characteristic, - BluetoothRemoteGattDescriptorBlueZ* descriptor, + BluetoothGattDescriptorBlueZ* descriptor, const std::vector<uint8_t>& value); private: friend class BluetoothDeviceBlueZ; - typedef std::map<dbus::ObjectPath, BluetoothRemoteGattCharacteristicBlueZ*> - CharacteristicMap; - BluetoothRemoteGattServiceBlueZ(BluetoothAdapterBlueZ* adapter, BluetoothDeviceBlueZ* device, const dbus::ObjectPath& object_path); @@ -118,23 +96,10 @@ const dbus::ObjectPath& object_path, const std::string& property_name) override; - // Object path of the GATT service. - dbus::ObjectPath object_path_; - - // The adapter associated with this service. It's ok to store a raw pointer - // here since |adapter_| indirectly owns this instance. - BluetoothAdapterBlueZ* adapter_; - // The device this GATT service belongs to. It's ok to store a raw pointer // here since |device_| owns this instance. BluetoothDeviceBlueZ* device_; - // Mapping from GATT characteristic object paths to characteristic objects. - // owned by this service. Since the BlueZ implementation uses object - // paths as unique identifiers, we also use this mapping to return - // characteristics by identifier. - CharacteristicMap characteristics_; - // Indicates whether or not the characteristics of this service are known to // have been discovered. bool discovery_complete_;
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_win.cc b/device/bluetooth/bluetooth_remote_gatt_service_win.cc index 95e43cc2..dd0e71f 100644 --- a/device/bluetooth/bluetooth_remote_gatt_service_win.cc +++ b/device/bluetooth/bluetooth_remote_gatt_service_win.cc
@@ -118,14 +118,14 @@ const base::Closure& callback, const ErrorCallback& error_callback) { NOTIMPLEMENTED(); - error_callback.Run(); + error_callback.Run(GATT_ERROR_NOT_SUPPORTED); } void BluetoothRemoteGattServiceWin::Unregister( const base::Closure& callback, const ErrorCallback& error_callback) { NOTIMPLEMENTED(); - error_callback.Run(); + error_callback.Run(GATT_ERROR_NOT_SUPPORTED); } void BluetoothRemoteGattServiceWin::GattCharacteristicDiscoveryComplete(
diff --git a/device/bluetooth/test/test_bluetooth_adapter_observer.cc b/device/bluetooth/test/test_bluetooth_adapter_observer.cc index eac1d9b0..5d62ada 100644 --- a/device/bluetooth/test/test_bluetooth_adapter_observer.cc +++ b/device/bluetooth/test/test_bluetooth_adapter_observer.cc
@@ -4,6 +4,9 @@ #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" +#include <string> +#include <vector> + #include "base/message_loop/message_loop.h" #include "device/bluetooth/bluetooth_gatt_characteristic.h" #include "device/bluetooth/bluetooth_gatt_descriptor.h" @@ -34,6 +37,10 @@ device_added_count_ = 0; device_changed_count_ = 0; device_address_changed_count_ = 0; +#if defined(OS_CHROMEOS) || defined(OS_LINUX) + device_paired_changed_count_ = 0; + device_new_paired_status_ = false; +#endif device_removed_count_ = 0; last_device_ = NULL; last_device_address_.clear(); @@ -126,6 +133,19 @@ QuitMessageLoop(); } +#if defined(OS_CHROMEOS) || defined(OS_LINUX) +void TestBluetoothAdapterObserver::DevicePairedChanged( + device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + bool new_paired_status) { + ++device_paired_changed_count_; + last_device_ = device; + device_new_paired_status_ = new_paired_status; + + QuitMessageLoop(); +} +#endif + void TestBluetoothAdapterObserver::DeviceRemoved(BluetoothAdapter* adapter, BluetoothDevice* device) { EXPECT_EQ(adapter_.get(), adapter);
diff --git a/device/bluetooth/test/test_bluetooth_adapter_observer.h b/device/bluetooth/test/test_bluetooth_adapter_observer.h index 3c48634..dc4d598 100644 --- a/device/bluetooth/test/test_bluetooth_adapter_observer.h +++ b/device/bluetooth/test/test_bluetooth_adapter_observer.h
@@ -6,6 +6,8 @@ #define DEVICE_BLUETOOTH_TEST_BLUETOOTH_ADAPTER_OBSERVER_H_ #include <stdint.h> +#include <string> +#include <vector> #include "base/macros.h" #include "device/bluetooth/bluetooth_adapter.h" @@ -16,7 +18,8 @@ // caching last reported values. class TestBluetoothAdapterObserver : public BluetoothAdapter::Observer { public: - TestBluetoothAdapterObserver(scoped_refptr<BluetoothAdapter> adapter); + explicit TestBluetoothAdapterObserver( + scoped_refptr<BluetoothAdapter> adapter); ~TestBluetoothAdapterObserver() override; // Reset counters and cached values. @@ -35,6 +38,11 @@ void DeviceAddressChanged(device::BluetoothAdapter* adapter, device::BluetoothDevice* device, const std::string& old_address) override; +#if defined(OS_CHROMEOS) || defined(OS_LINUX) + void DevicePairedChanged(device::BluetoothAdapter* adapter, + device::BluetoothDevice* device, + bool new_paired_status) override; +#endif void DeviceRemoved(BluetoothAdapter* adapter, BluetoothDevice* device) override; void GattServiceAdded(BluetoothAdapter* adapter, @@ -80,6 +88,10 @@ int device_added_count() { return device_added_count_; } int device_changed_count() { return device_changed_count_; } int device_address_changed_count() { return device_address_changed_count_; } +#if defined(OS_CHROMEOS) || defined(OS_LINUX) + int device_paired_changed_count() { return device_paired_changed_count_; } + bool device_new_paired_status() { return device_new_paired_status_; } +#endif int device_removed_count() { return device_removed_count_; } BluetoothDevice* last_device() { return last_device_; } std::string last_device_address() { return last_device_address_; } @@ -145,6 +157,10 @@ int device_added_count_; int device_changed_count_; int device_address_changed_count_; +#if defined(OS_CHROMEOS) || defined(OS_LINUX) + int device_paired_changed_count_; + bool device_new_paired_status_; +#endif int device_removed_count_; BluetoothDevice* last_device_; std::string last_device_address_;
diff --git a/docs/user_handle_mapping.md b/docs/user_handle_mapping.md index e3559a0..f0c7ad7 100644 --- a/docs/user_handle_mapping.md +++ b/docs/user_handle_mapping.md
@@ -58,6 +58,7 @@ | kuchhal | kuchhal | rahulk | | levin | dave\_levin | levin | | lfg | lfg\_ | lfg | +| littledan | littledan | dehrenberg | | luken | luken_chromium | luken | | mark | markmentovai | mmentovai | | mattm | mattm\_c, mattm\_g | mattm |
diff --git a/extensions/renderer/module_system.cc b/extensions/renderer/module_system.cc index 683a1f2..ef97c81 100644 --- a/extensions/renderer/module_system.cc +++ b/extensions/renderer/module_system.cc
@@ -131,8 +131,11 @@ error_message.assign(*error_message_v8, error_message_v8.length()); } - auto maybe = message->GetLineNumber(context_->v8_context()); - int line_number = maybe.IsJust() ? maybe.FromJust() : 0; + int line_number = 0; + if (context_) { // |context_| can be null in unittests. + auto maybe = message->GetLineNumber(context_->v8_context()); + line_number = maybe.IsJust() ? maybe.FromJust() : 0; + } return base::StringPrintf("%s:%d: %s", resource_name.c_str(), line_number,
diff --git a/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc b/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc index c4ce068c..25d1b87 100644 --- a/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc +++ b/extensions/shell/browser/shell_speech_recognition_manager_delegate.cc
@@ -64,11 +64,6 @@ float noise_volume) { } -void ShellSpeechRecognitionManagerDelegate::GetDiagnosticInformation( - bool* can_report_metrics, - std::string* hardware_info) { -} - void ShellSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed( int session_id, base::Callback<void(bool ask_user, bool is_allowed)> callback) {
diff --git a/extensions/shell/browser/shell_speech_recognition_manager_delegate.h b/extensions/shell/browser/shell_speech_recognition_manager_delegate.h index 5d00dc0..3ee126c 100644 --- a/extensions/shell/browser/shell_speech_recognition_manager_delegate.h +++ b/extensions/shell/browser/shell_speech_recognition_manager_delegate.h
@@ -39,8 +39,6 @@ float noise_volume) override; // SpeechRecognitionManagerDelegate methods. - void GetDiagnosticInformation(bool* can_report_metrics, - std::string* hardware_info) override; void CheckRecognitionIsAllowed( int session_id, base::Callback<void(bool ask_user, bool is_allowed)> callback) override;
diff --git a/google_apis/BUILD.gn b/google_apis/BUILD.gn index f4efc664..197ccfb 100644 --- a/google_apis/BUILD.gn +++ b/google_apis/BUILD.gn
@@ -182,14 +182,6 @@ ] } -if (is_android) { - google_apis_tmpl("google_apis_small") { - deps = [ - "//net:net_small", - ] - } -} - source_set("test_support") { testonly = true sources = [
diff --git a/ios/chrome/browser/ios_chrome_io_thread.mm b/ios/chrome/browser/ios_chrome_io_thread.mm index 862fc42..763c028 100644 --- a/ios/chrome/browser/ios_chrome_io_thread.mm +++ b/ios/chrome/browser/ios_chrome_io_thread.mm
@@ -49,7 +49,6 @@ #include "net/cert/cert_verifier.h" #include "net/cert/cert_verify_proc.h" #include "net/cert/ct_known_logs.h" -#include "net/cert/ct_known_logs_static.h" #include "net/cert/ct_log_verifier.h" #include "net/cert/ct_policy_enforcer.h" #include "net/cert/ct_verifier.h"
diff --git a/ios/web/web_state/ui/crw_web_controller+protected.h b/ios/web/web_state/ui/crw_web_controller+protected.h index 2bb6d0e..c211556 100644 --- a/ios/web/web_state/ui/crw_web_controller+protected.h +++ b/ios/web/web_state/ui/crw_web_controller+protected.h
@@ -137,10 +137,6 @@ - (CRWWebControllerPendingNavigationInfo*)pendingNavigationInfo; -// Designated initializer. Initializes web controller with |webState|. The -// calling code must retain the ownership of |webState|. -- (instancetype)initWithWebState:(web::WebStateImpl*)webState; - // Creates a web view if it's not yet created. - (void)ensureWebViewCreated; @@ -190,10 +186,6 @@ // Called when a load ends in an SSL error and certificate chain. - (void)handleSSLCertError:(NSError*)error; -// Updates SSL status for the current navigation item based on the information -// provided by web view. -- (void)updateSSLStatusForCurrentNavigationItem; - // Used in webView:didReceiveAuthenticationChallenge:completionHandler: to reply // with NSURLSessionAuthChallengeDisposition and credentials. - (void)handleHTTPAuthForChallenge:(NSURLAuthenticationChallenge*)challenge @@ -201,14 +193,6 @@ (void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential*))completionHandler; -// Used in webView:didReceiveAuthenticationChallenge:completionHandler: to -// reply with NSURLSessionAuthChallengeDisposition and credentials. -- (void)processAuthChallenge:(NSURLAuthenticationChallenge*)challenge - forCertAcceptPolicy:(web::CertAcceptPolicy)policy - certStatus:(net::CertStatus)certStatus - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, - NSURLCredential*))completionHandler; - #pragma mark - Optional methods for subclasses // Subclasses may overwrite methods in this section. @@ -309,12 +293,6 @@ // Returns NavigationManager's session controller. @property(nonatomic, readonly) CRWSessionController* sessionController; -// Controller used for certs verification to help with blocking requests with -// bad SSL cert, presenting SSL interstitials and determining SSL status for -// Navigation Items. -@property(nonatomic, readonly) - CRWCertVerificationController* certVerificationController; - // Returns a new script which wraps |script| with windowID check so |script| is // not evaluated on windowID mismatch. - (NSString*)scriptByAddingWindowIDCheckForScript:(NSString*)script; @@ -392,6 +370,10 @@ // agent. - (BOOL)useDesktopUserAgent; +// Updates SSL status for the current navigation item based on the information +// provided by web view. +- (void)updateSSLStatusForCurrentNavigationItem; + // Called when SSL status has been updated for the current navigation item. - (void)didUpdateSSLStatusForCurrentNavigationItem; @@ -449,12 +431,6 @@ - (BOOL)shouldBlockPopupWithURL:(const GURL&)popupURL sourceURL:(const GURL&)sourceURL; -// Call to stop web controller activity, in particular to stop all network -// requests. Called as part of the close sequence if it hasn't already been -// halted; should also be called from the web delegate as part of any shutdown -// sequence which doesn't call -close. -- (void)terminateNetworkActivity; - // Acts on a single message from the JS object, parsed from JSON into a // DictionaryValue. Returns NO if the format for the message was invalid. - (BOOL)respondToMessage:(base::DictionaryValue*)crwMessage @@ -491,10 +467,6 @@ // Returns the current entry from the underlying session controller. - (CRWSessionEntry*)currentSessionEntry; -// Clears certVerification errors which happened inside -// |webView:didReceiveAuthenticationChallenge:completionHandler:|. -- (void)clearCertVerificationErrors; - // Resets pending external request information. - (void)resetExternalRequest;
diff --git a/ios/web/web_state/ui/crw_web_controller.h b/ios/web/web_state/ui/crw_web_controller.h index 205b9ec..960ea87 100644 --- a/ios/web/web_state/ui/crw_web_controller.h +++ b/ios/web/web_state/ui/crw_web_controller.h
@@ -113,6 +113,10 @@ // |CRWWebDelegate webControllerDidSuppressDialog:| will be called. @property(nonatomic, assign) BOOL shouldSuppressDialogs; +// Designated initializer. Initializes web controller with |webState|. The +// calling code must retain the ownership of |webState|. +- (instancetype)initWithWebState:(web::WebStateImpl*)webState; + // Return an image to use as replacement of a missing snapshot. + (UIImage*)defaultSnapshotImage;
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index 19c0775..4f862d0 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -45,8 +45,10 @@ #import "ios/web/navigation/navigation_item_impl.h" #import "ios/web/navigation/navigation_manager_impl.h" #import "ios/web/net/crw_cert_verification_controller.h" +#import "ios/web/net/crw_ssl_status_updater.h" #include "ios/web/net/request_group_util.h" #include "ios/web/public/browser_state.h" +#include "ios/web/public/cert_store.h" #include "ios/web/public/favicon_url.h" #include "ios/web/public/navigation_item.h" #import "ios/web/public/navigation_manager.h" @@ -191,9 +193,11 @@ } } // namespace -@interface CRWWebController () <CRWNativeContentDelegate, - CRWWebControllerContainerViewDelegate, - CRWWebViewScrollViewProxyObserver> { +@interface CRWWebController ()<CRWNativeContentDelegate, + CRWSSLStatusUpdaterDataSource, + CRWSSLStatusUpdaterDelegate, + CRWWebControllerContainerViewDelegate, + CRWWebViewScrollViewProxyObserver> { base::WeakNSProtocol<id<CRWWebDelegate>> _delegate; base::WeakNSProtocol<id<CRWWebUserInterfaceDelegate>> _UIDelegate; base::WeakNSProtocol<id<CRWNativeContentProvider>> _nativeProvider; @@ -344,6 +348,22 @@ // CRWWebUIManager object for loading WebUI pages. base::scoped_nsobject<CRWWebUIManager> _webUIManager; + + // Updates SSLStatus for current navigation item. + base::scoped_nsobject<CRWSSLStatusUpdater> _SSLStatusUpdater; + + // Controller used for certs verification to help with blocking requests with + // bad SSL cert, presenting SSL interstitials and determining SSL status for + // Navigation Items. + base::scoped_nsobject<CRWCertVerificationController> + _certVerificationController; + + // CertVerification errors which happened inside + // |webView:didReceiveAuthenticationChallenge:completionHandler:|. + // Key is leaf-cert/host pair. This storage is used to carry calculated + // cert status from |didReceiveAuthenticationChallenge:| to + // |didFailProvisionalNavigation:| delegate method. + std::unique_ptr<CertVerificationErrorsCacheType> _certVerificationErrors; } // The container view. The container view should be accessed through this @@ -361,6 +381,8 @@ @property(nonatomic, readonly) NSString* activityIndicatorGroupID; // Referrer for the current page; does not include the fragment. @property(nonatomic, readonly) NSString* currentReferrerString; +// Identifier used for storing and retrieving certificates. +@property(nonatomic, readonly) int certGroupID; // Removes the container view from the hierarchy and resets the ivar. - (void)resetContainerView; // Resets any state that is associated with a specific document object (e.g., @@ -514,6 +536,14 @@ // Tries to open a popup with the given new window information. - (void)openPopupWithInfo:(const web::NewWindowInfo&)windowInfo; +// Used in webView:didReceiveAuthenticationChallenge:completionHandler: to +// reply with NSURLSessionAuthChallengeDisposition and credentials. +- (void)processAuthChallenge:(NSURLAuthenticationChallenge*)challenge + forCertAcceptPolicy:(web::CertAcceptPolicy)policy + certStatus:(net::CertStatus)certStatus + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, + NSURLCredential*))completionHandler; + // Handlers for JavaScript messages. |message| contains a JavaScript command and // data relevant to the message, and |context| contains contextual information // about web view state needed for some handlers. @@ -658,6 +688,11 @@ _gestureRecognizers.reset([[NSMutableArray alloc] init]); _webViewToolbars.reset([[NSMutableArray alloc] init]); _pendingLoadCompleteActions.reset([[NSMutableArray alloc] init]); + web::BrowserState* browserState = _webStateImpl->GetBrowserState(); + _certVerificationController.reset([[CRWCertVerificationController alloc] + initWithBrowserState:browserState]); + _certVerificationErrors.reset( + new CertVerificationErrorsCacheType(kMaxCertErrorsCount)); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange) @@ -818,6 +853,10 @@ return _currentReferrerString; } +- (int)certGroupID { + return self.webState->GetCertGroupId(); +} + // NativeControllerDelegate method, called to inform that title has changed. - (void)nativeContent:(id)content titleDidChange:(NSString*)title { // Responsiveness to delegate method was checked in setDelegate:. @@ -899,6 +938,8 @@ // Stop doing stuff, especially network stuff. Close the request tracker. - (void)terminateNetworkActivity { + web::CertStore::GetInstance()->RemoveCertsForGroup(self.certGroupID); + DCHECK(!_isHalted); _isHalted = YES; @@ -916,6 +957,9 @@ // Caller must reset the delegate before calling. - (void)close { + _SSLStatusUpdater.reset(); + [_certVerificationController shutDown]; + self.nativeProvider = nil; self.swipeRecognizerProvider = nil; if ([self.nativeController respondsToSelector:@selector(close)]) @@ -1881,6 +1925,7 @@ - (void)abortLoad { [self abortWebLoad]; + _certVerificationErrors->Clear(); [self loadCancelled]; } @@ -3390,6 +3435,47 @@ } #pragma mark - +#pragma mark Auth Challenge + +- (void)processAuthChallenge:(NSURLAuthenticationChallenge*)challenge + forCertAcceptPolicy:(web::CertAcceptPolicy)policy + certStatus:(net::CertStatus)certStatus + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, + NSURLCredential*))completionHandler { + SecTrustRef trust = challenge.protectionSpace.serverTrust; + if (policy == web::CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_ACCEPTED_BY_USER) { + // Cert is invalid, but user agreed to proceed, override default behavior. + completionHandler(NSURLSessionAuthChallengeUseCredential, + [NSURLCredential credentialForTrust:trust]); + return; + } + + if (policy != web::CERT_ACCEPT_POLICY_ALLOW && + SecTrustGetCertificateCount(trust)) { + // The cert is invalid and the user has not agreed to proceed. Cache the + // cert verification result in |_certVerificationErrors|, so that it can + // later be reused inside |didFailProvisionalNavigation:|. + // The leaf cert is used as the key, because the chain provided by + // |didFailProvisionalNavigation:| will differ (it is the server-supplied + // chain), thus if intermediates were considered, the keys would mismatch. + scoped_refptr<net::X509Certificate> leafCert = + net::X509Certificate::CreateFromHandle( + SecTrustGetCertificateAtIndex(trust, 0), + net::X509Certificate::OSCertHandles()); + if (leafCert) { + BOOL is_recoverable = + policy == web::CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER; + std::string host = + base::SysNSStringToUTF8(challenge.protectionSpace.host); + _certVerificationErrors->Put( + web::CertHostPair(leafCert, host), + CertVerificationError(is_recoverable, certStatus)); + } + } + completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); +} + +#pragma mark - #pragma mark TouchTracking - (void)touched:(BOOL)touched { @@ -4012,6 +4098,33 @@ [_delegate webDidUpdateHistoryStateWithPageURL:url]; } +- (void)updateSSLStatusForCurrentNavigationItem { + if ([self isBeingDestroyed]) { + return; + } + + web::NavigationManager* navManager = self.webState->GetNavigationManager(); + web::NavigationItem* currentNavItem = navManager->GetLastCommittedItem(); + if (!currentNavItem) { + return; + } + + if (!_SSLStatusUpdater) { + _SSLStatusUpdater.reset([[CRWSSLStatusUpdater alloc] + initWithDataSource:self + navigationManager:navManager + certGroupID:self.certGroupID]); + [_SSLStatusUpdater setDelegate:self]; + } + NSString* host = base::SysUTF8ToNSString(self.documentURL.host()); + NSArray* certChain = [self.webView certificateChain]; + BOOL hasOnlySecureContent = [self.webView hasOnlySecureContent]; + [_SSLStatusUpdater updateSSLStatusForNavigationItem:currentNavItem + withCertHost:host + certChain:certChain + hasOnlySecureContent:hasOnlySecureContent]; +} + - (void)didUpdateSSLStatusForCurrentNavigationItem { if ([_delegate respondsToSelector: @selector( @@ -4020,6 +4133,66 @@ } } +- (void)handleSSLCertError:(NSError*)error { + CHECK(web::IsWKWebViewSSLCertError(error)); + + net::SSLInfo info; + web::GetSSLInfoFromWKWebViewSSLCertError(error, &info); + + web::SSLStatus status; + status.security_style = web::SECURITY_STYLE_AUTHENTICATION_BROKEN; + status.cert_status = info.cert_status; + // |info.cert| can be null if certChain in NSError is empty or can not be + // parsed. + if (info.cert) { + status.cert_id = web::CertStore::GetInstance()->StoreCert(info.cert.get(), + self.certGroupID); + } + + // Retrieve verification results from _certVerificationErrors cache to avoid + // unnecessary recalculations. Verification results are cached for the leaf + // cert, because the cert chain in |didReceiveAuthenticationChallenge:| is + // the OS constructed chain, while |chain| is the chain from the server. + NSArray* chain = error.userInfo[web::kNSErrorPeerCertificateChainKey]; + NSString* host = [error.userInfo[web::kNSErrorFailingURLKey] host]; + scoped_refptr<net::X509Certificate> leafCert; + BOOL recoverable = NO; + if (chain.count && host.length) { + // The complete cert chain may not be available, so the leaf cert is used + // as a key to retrieve _certVerificationErrors, as well as for storing the + // cert decision. + leafCert = web::CreateCertFromChain(@[ chain.firstObject ]); + if (leafCert) { + auto error = _certVerificationErrors->Get( + {leafCert, base::SysNSStringToUTF8(host)}); + bool cacheHit = error != _certVerificationErrors->end(); + if (cacheHit) { + recoverable = error->second.is_recoverable; + status.cert_status = error->second.status; + info.cert_status = error->second.status; + } + UMA_HISTOGRAM_BOOLEAN("WebController.CertVerificationErrorsCacheHit", + cacheHit); + } + } + + // Present SSL interstitial and inform everyone that the load is cancelled. + [self.delegate presentSSLError:info + forSSLStatus:status + recoverable:recoverable + callback:^(BOOL proceed) { + if (proceed) { + // The interstitial will be removed during reload. + [_certVerificationController + allowCert:leafCert + forHost:host + status:status.cert_status]; + [self loadCurrentURL]; + } + }]; + [self loadCancelled]; +} + - (void)loadHTML:(NSString*)HTML forURL:(const GURL&)URL { // Remove the transient content view. [self clearTransientContentView]; @@ -4342,13 +4515,13 @@ // This must be reset at the end, since code above may need information about // the pending load. [self resetPendingNavigationInfo]; - [self clearCertVerificationErrors]; + _certVerificationErrors->Clear(); } - (void)webView:(WKWebView*)webView didCommitNavigation:(WKNavigation*)navigation { DCHECK_EQ(self.webView, webView); - [self clearCertVerificationErrors]; + _certVerificationErrors->Clear(); // This point should closely approximate the document object change, so reset // the list of injected scripts to those that are automatically injected. [self clearInjectedScriptManagers]; @@ -4400,7 +4573,7 @@ withError:(NSError*)error { [self handleLoadError:WKWebViewErrorWithSource(error, NAVIGATION) inMainFrame:YES]; - [self clearCertVerificationErrors]; + _certVerificationErrors->Clear(); } - (void)webView:(WKWebView*)webView @@ -4426,7 +4599,7 @@ base::ScopedCFTypeRef<SecTrustRef> scopedTrust(trust, base::scoped_policy::RETAIN); base::WeakNSObject<CRWWebController> weakSelf(self); - [self.certVerificationController + [_certVerificationController decideLoadPolicyForTrust:scopedTrust host:challenge.protectionSpace.host completionHandler:^(web::CertAcceptPolicy policy, @@ -4446,11 +4619,34 @@ } - (void)webViewWebContentProcessDidTerminate:(WKWebView*)webView { - [self clearCertVerificationErrors]; + _certVerificationErrors->Clear(); [self webViewWebProcessDidCrash]; } #pragma mark - +#pragma mark CRWSSLStatusUpdater DataSource/Delegate Methods + +- (void)SSLStatusUpdater:(CRWSSLStatusUpdater*)SSLStatusUpdater + querySSLStatusForCertChain:(NSArray*)certChain + host:(NSString*)host + completionHandler:(StatusQueryHandler)completionHandler { + base::ScopedCFTypeRef<SecTrustRef> trust( + web::CreateServerTrustFromChain(certChain, host)); + [_certVerificationController querySSLStatusForTrust:std::move(trust) + host:host + completionHandler:completionHandler]; +} + +- (void)SSLStatusUpdater:(CRWSSLStatusUpdater*)SSLStatusUpdater + didChangeSSLStatusForNavigationItem:(web::NavigationItem*)navigationItem { + web::NavigationItem* currentNavigationItem = + self.webState->GetNavigationManager()->GetLastCommittedItem(); + if (navigationItem == currentNavigationItem) { + [self didUpdateSSLStatusForCurrentNavigationItem]; + } +} + +#pragma mark - #pragma mark Testing-Only Methods - (void)injectWebViewContentView:(id)webViewContentView {
diff --git a/ios/web/web_state/ui/crw_wk_web_view_web_controller.h b/ios/web/web_state/ui/crw_wk_web_view_web_controller.h index 62f13fa..2ba5a4e 100644 --- a/ios/web/web_state/ui/crw_wk_web_view_web_controller.h +++ b/ios/web/web_state/ui/crw_wk_web_view_web_controller.h
@@ -7,15 +7,9 @@ #import "ios/web/web_state/ui/crw_web_controller.h" -#include <memory> - // A concrete implementation of CRWWebController based on WKWebView. @interface CRWWKWebViewWebController : CRWWebController -// Designated initializer. Initializes web controller with |webState|. The -// calling code must retain the ownership of |webState|. -- (instancetype)initWithWebState:(web::WebStateImpl*)webState; - @end #endif // IOS_WEB_WEB_STATE_UI_CRW_WK_WEB_VIEW_WEB_CONTROLLER_H_
diff --git a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm index 8dbe992a..22b5460 100644 --- a/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm +++ b/ios/web/web_state/ui/crw_wk_web_view_web_controller.mm
@@ -19,9 +19,7 @@ #import "ios/web/navigation/crw_session_entry.h" #include "ios/web/navigation/navigation_item_impl.h" #import "ios/web/public/navigation_manager.h" -#import "ios/web/net/crw_ssl_status_updater.h" #include "ios/web/public/browser_state.h" -#include "ios/web/public/cert_store.h" #include "ios/web/public/navigation_item.h" #include "ios/web/public/ssl_status.h" #include "ios/web/public/url_util.h" @@ -66,8 +64,7 @@ #pragma mark - -@interface CRWWKWebViewWebController ()<CRWSSLStatusUpdaterDataSource, - CRWSSLStatusUpdaterDelegate> { +@interface CRWWKWebViewWebController () { // The WKWebView managed by this instance. base::scoped_nsobject<WKWebView> _wkWebView; @@ -80,22 +77,6 @@ // Object for loading POST requests with body. base::scoped_nsobject<CRWJSPOSTRequestLoader> _POSTRequestLoader; - // Controller used for certs verification to help with blocking requests with - // bad SSL cert, presenting SSL interstitials and determining SSL status for - // Navigation Items. - base::scoped_nsobject<CRWCertVerificationController> - _certVerificationController; - - // Updates SSLStatus for current navigation item. - base::scoped_nsobject<CRWSSLStatusUpdater> _SSLStatusUpdater; - - // CertVerification errors which happened inside - // |webView:didReceiveAuthenticationChallenge:completionHandler:|. - // Key is leaf-cert/host pair. This storage is used to carry calculated - // cert status from |didReceiveAuthenticationChallenge:| to - // |didFailProvisionalNavigation:| delegate method. - std::unique_ptr<CertVerificationErrorsCacheType> _certVerificationErrors; - // YES if the user has interacted with the content area since the last URL // change. BOOL _interactionRegisteredSinceLastURLChange; @@ -108,9 +89,6 @@ // changed. @property(nonatomic, readonly) NSDictionary* wkWebViewObservers; -// Identifier used for storing and retrieving certificates. -@property(nonatomic, readonly) int certGroupID; - // Loads POST request with body in |_wkWebView| by constructing an HTML page // that executes the request through JavaScript and replaces document with the // result. @@ -184,32 +162,6 @@ @implementation CRWWKWebViewWebController -#pragma mark CRWWebController public methods - -- (instancetype)initWithWebState:(web::WebStateImpl*)webState { - self = [super initWithWebState:webState]; - if (self) { - DCHECK(webState); - web::BrowserState* browserState = webState->GetBrowserState(); - _certVerificationController.reset([[CRWCertVerificationController alloc] - initWithBrowserState:browserState]); - _certVerificationErrors.reset( - new CertVerificationErrorsCacheType(kMaxCertErrorsCount)); - } - return self; -} - -- (void)terminateNetworkActivity { - web::CertStore::GetInstance()->RemoveCertsForGroup(self.certGroupID); - [super terminateNetworkActivity]; -} - -- (void)close { - _SSLStatusUpdater.reset(); - [_certVerificationController shutDown]; - [super close]; -} - #pragma mark - #pragma mark Testing-Only Methods @@ -240,14 +192,6 @@ return _interactionRegisteredSinceLastURLChange; } -- (CRWCertVerificationController*)certVerificationController { - return _certVerificationController; -} - -- (void)clearCertVerificationErrors { - _certVerificationErrors->Clear(); -} - // Overridden to track interactions since URL change. - (void)setUserInteractionRegistered:(BOOL)flag { [super setUserInteractionRegistered:flag]; @@ -394,7 +338,6 @@ - (void)abortWebLoad { [_wkWebView stopLoading]; [self.pendingNavigationInfo setCancelled:YES]; - _certVerificationErrors->Clear(); } - (void)applyWebViewScrollZoomScaleFromZoomState: @@ -434,12 +377,6 @@ }; } -- (int)certGroupID { - DCHECK(self.webStateImpl); - // Request tracker IDs are used as certificate groups. - return self.webStateImpl->GetRequestTracker()->identifier(); -} - - (void)loadPOSTRequest:(NSMutableURLRequest*)request { if (!_POSTRequestLoader) { _POSTRequestLoader.reset([[CRWJSPOSTRequestLoader alloc] init]); @@ -599,93 +536,6 @@ }); } -- (void)handleSSLCertError:(NSError*)error { - CHECK(web::IsWKWebViewSSLCertError(error)); - - net::SSLInfo info; - web::GetSSLInfoFromWKWebViewSSLCertError(error, &info); - - web::SSLStatus status; - status.security_style = web::SECURITY_STYLE_AUTHENTICATION_BROKEN; - status.cert_status = info.cert_status; - // |info.cert| can be null if certChain in NSError is empty or can not be - // parsed. - if (info.cert) { - status.cert_id = web::CertStore::GetInstance()->StoreCert(info.cert.get(), - self.certGroupID); - } - - // Retrieve verification results from _certVerificationErrors cache to avoid - // unnecessary recalculations. Verification results are cached for the leaf - // cert, because the cert chain in |didReceiveAuthenticationChallenge:| is - // the OS constructed chain, while |chain| is the chain from the server. - NSArray* chain = error.userInfo[web::kNSErrorPeerCertificateChainKey]; - NSString* host = [error.userInfo[web::kNSErrorFailingURLKey] host]; - scoped_refptr<net::X509Certificate> leafCert; - BOOL recoverable = NO; - if (chain.count && host.length) { - // The complete cert chain may not be available, so the leaf cert is used - // as a key to retrieve _certVerificationErrors, as well as for storing the - // cert decision. - leafCert = web::CreateCertFromChain(@[ chain.firstObject ]); - if (leafCert) { - auto error = _certVerificationErrors->Get( - {leafCert, base::SysNSStringToUTF8(host)}); - bool cacheHit = error != _certVerificationErrors->end(); - if (cacheHit) { - recoverable = error->second.is_recoverable; - status.cert_status = error->second.status; - info.cert_status = error->second.status; - } - UMA_HISTOGRAM_BOOLEAN("WebController.CertVerificationErrorsCacheHit", - cacheHit); - } - } - - // Present SSL interstitial and inform everyone that the load is cancelled. - [self.delegate presentSSLError:info - forSSLStatus:status - recoverable:recoverable - callback:^(BOOL proceed) { - if (proceed) { - // The interstitial will be removed during reload. - [_certVerificationController - allowCert:leafCert - forHost:host - status:status.cert_status]; - [self loadCurrentURL]; - } - }]; - [self loadCancelled]; -} - -- (void)updateSSLStatusForCurrentNavigationItem { - if ([self isBeingDestroyed]) { - return; - } - - web::NavigationManager* navManager = self.webState->GetNavigationManager(); - web::NavigationItem* currentNavItem = navManager->GetLastCommittedItem(); - if (!currentNavItem) { - return; - } - - if (!_SSLStatusUpdater) { - _SSLStatusUpdater.reset([[CRWSSLStatusUpdater alloc] - initWithDataSource:self - navigationManager:navManager - certGroupID:self.certGroupID]); - [_SSLStatusUpdater setDelegate:self]; - } - NSString* host = base::SysUTF8ToNSString(_documentURL.host()); - NSArray* certChain = [_wkWebView certificateChain]; - BOOL hasOnlySecureContent = [_wkWebView hasOnlySecureContent]; - [_SSLStatusUpdater updateSSLStatusForNavigationItem:currentNavItem - withCertHost:host - certChain:certChain - hasOnlySecureContent:hasOnlySecureContent]; -} - - (void)handleHTTPAuthForChallenge:(NSURLAuthenticationChallenge*)challenge completionHandler: (void (^)(NSURLSessionAuthChallengeDisposition, @@ -741,44 +591,6 @@ persistence:NSURLCredentialPersistenceForSession]); } -- (void)processAuthChallenge:(NSURLAuthenticationChallenge*)challenge - forCertAcceptPolicy:(web::CertAcceptPolicy)policy - certStatus:(net::CertStatus)certStatus - completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, - NSURLCredential*))completionHandler { - SecTrustRef trust = challenge.protectionSpace.serverTrust; - if (policy == web::CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_ACCEPTED_BY_USER) { - // Cert is invalid, but user agreed to proceed, override default behavior. - completionHandler(NSURLSessionAuthChallengeUseCredential, - [NSURLCredential credentialForTrust:trust]); - return; - } - - if (policy != web::CERT_ACCEPT_POLICY_ALLOW && - SecTrustGetCertificateCount(trust)) { - // The cert is invalid and the user has not agreed to proceed. Cache the - // cert verification result in |_certVerificationErrors|, so that it can - // later be reused inside |didFailProvisionalNavigation:|. - // The leaf cert is used as the key, because the chain provided by - // |didFailProvisionalNavigation:| will differ (it is the server-supplied - // chain), thus if intermediates were considered, the keys would mismatch. - scoped_refptr<net::X509Certificate> leafCert = - net::X509Certificate::CreateFromHandle( - SecTrustGetCertificateAtIndex(trust, 0), - net::X509Certificate::OSCertHandles()); - if (leafCert) { - BOOL is_recoverable = - policy == web::CERT_ACCEPT_POLICY_RECOVERABLE_ERROR_UNDECIDED_BY_USER; - std::string host = - base::SysNSStringToUTF8(challenge.protectionSpace.host); - _certVerificationErrors->Put( - web::CertHostPair(leafCert, host), - CertVerificationError(is_recoverable, certStatus)); - } - } - completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil); -} - - (BOOL)isKVOChangePotentialSameDocumentNavigationToURL:(const GURL&)newURL { DCHECK([_wkWebView isLoading]); // If the origin changes, it can't be same-document. @@ -1000,26 +812,4 @@ } } -#pragma mark - CRWSSLStatusUpdater DataSource/Delegate Methods - -- (void)SSLStatusUpdater:(CRWSSLStatusUpdater*)SSLStatusUpdater - querySSLStatusForCertChain:(NSArray*)certChain - host:(NSString*)host - completionHandler:(StatusQueryHandler)completionHandler { - base::ScopedCFTypeRef<SecTrustRef> trust( - web::CreateServerTrustFromChain(certChain, host)); - [_certVerificationController querySSLStatusForTrust:std::move(trust) - host:host - completionHandler:completionHandler]; -} - -- (void)SSLStatusUpdater:(CRWSSLStatusUpdater*)SSLStatusUpdater - didChangeSSLStatusForNavigationItem:(web::NavigationItem*)navigationItem { - web::NavigationItem* currentNavigationItem = - self.webState->GetNavigationManager()->GetLastCommittedItem(); - if (navigationItem == currentNavigationItem) { - [self didUpdateSSLStatusForCurrentNavigationItem]; - } -} - @end
diff --git a/ipc/ipc_message_start.h b/ipc/ipc_message_start.h index 0d589ff..ea1f7b998 100644 --- a/ipc/ipc_message_start.h +++ b/ipc/ipc_message_start.h
@@ -91,6 +91,7 @@ ScreenOrientationMsgStart, MediaStreamTrackMetricsHostMsgStart, ChromeExtensionMsgStart, + MojoMsgStart, TranslateMsgStart, CldDataProviderMsgStart, PushMessagingMsgStart,
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc index 59057ee..9edc3bb 100644 --- a/ipc/ipc_message_utils.cc +++ b/ipc/ipc_message_utils.cc
@@ -690,40 +690,90 @@ #if defined(OS_MACOSX) && !defined(OS_IOS) void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m, const param_type& p) { - MachPortMac mach_port_mac(p.GetMemoryObject()); - ParamTraits<MachPortMac>::Write(m, mach_port_mac); - size_t size = 0; - bool result = p.GetSize(&size); - DCHECK(result); - ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size)); + m->WriteInt(p.GetType()); - // If the caller intended to pass ownership to the IPC stack, release a - // reference. - if (p.OwnershipPassesToIPC()) - p.Close(); + switch (p.GetType()) { + case base::SharedMemoryHandle::POSIX: + ParamTraits<base::FileDescriptor>::Write(m, p.GetFileDescriptor()); + break; + case base::SharedMemoryHandle::MACH: + MachPortMac mach_port_mac(p.GetMemoryObject()); + ParamTraits<MachPortMac>::Write(m, mach_port_mac); + size_t size = 0; + bool result = p.GetSize(&size); + DCHECK(result); + ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size)); + + // If the caller intended to pass ownership to the IPC stack, release a + // reference. + if (p.OwnershipPassesToIPC()) + p.Close(); + + break; + } } bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, base::PickleIterator* iter, param_type* r) { - MachPortMac mach_port_mac; - if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) + base::SharedMemoryHandle::TypeWireFormat type; + if (!iter->ReadInt(&type)) return false; - uint32_t size; - if (!ParamTraits<uint32_t>::Read(m, iter, &size)) - return false; + base::SharedMemoryHandle::Type shm_type = base::SharedMemoryHandle::POSIX; + switch (type) { + case base::SharedMemoryHandle::POSIX: + case base::SharedMemoryHandle::MACH: { + shm_type = static_cast<base::SharedMemoryHandle::Type>(type); + break; + } + default: { + return false; + } + } - *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(), - static_cast<size_t>(size), - base::GetCurrentProcId()); - return true; + switch (shm_type) { + case base::SharedMemoryHandle::POSIX: { + base::FileDescriptor file_descriptor; + + bool success = + ParamTraits<base::FileDescriptor>::Read(m, iter, &file_descriptor); + if (!success) + return false; + + *r = base::SharedMemoryHandle(file_descriptor.fd, + file_descriptor.auto_close); + return true; + } + case base::SharedMemoryHandle::MACH: { + MachPortMac mach_port_mac; + if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) + return false; + + uint32_t size; + if (!ParamTraits<uint32_t>::Read(m, iter, &size)) + return false; + + *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(), + static_cast<size_t>(size), + base::GetCurrentProcId()); + return true; + } + } } void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, std::string* l) { - l->append("Mach port: "); - LogParam(p.GetMemoryObject(), l); + switch (p.GetType()) { + case base::SharedMemoryHandle::POSIX: + l->append("POSIX Fd: "); + ParamTraits<base::FileDescriptor>::Log(p.GetFileDescriptor(), l); + break; + case base::SharedMemoryHandle::MACH: + l->append("Mach port: "); + LogParam(p.GetMemoryObject(), l); + break; + } } #elif defined(OS_WIN)
diff --git a/media/base/android/media_codec_util.cc b/media/base/android/media_codec_util.cc index ce92879..b9ae7577 100644 --- a/media/base/android/media_codec_util.cc +++ b/media/base/android/media_codec_util.cc
@@ -193,4 +193,16 @@ return IsMediaCodecAvailable() && IsDecoderSupportedByDevice("vp9"); } +// static +bool MediaCodecUtil::IsSurfaceViewOutputSupported() { + // Disable SurfaceView output for the Samsung Galaxy S3; it does not work + // well enough for even 360p24 H264 playback. http://crbug.com/602870. + // + // Notably this is not codec agnostic at present, so any devices added to + // the blacklist will avoid trying to play any codecs on SurfaceView. If + // needed in the future this can be expanded to be codec specific. + return !base::StartsWith(base::android::BuildInfo::GetInstance()->model(), + "GT-I9300", base::CompareCase::INSENSITIVE_ASCII); +} + } // namespace media
diff --git a/media/base/android/media_codec_util.h b/media/base/android/media_codec_util.h index 9603e38..211d9f0 100644 --- a/media/base/android/media_codec_util.h +++ b/media/base/android/media_codec_util.h
@@ -72,6 +72,9 @@ // Indicates if the vp9 decoder is available on this device. static bool IsVp9DecoderAvailable(); + + // Indicates if SurfaceView and MediaCodec work well together on this device. + static bool IsSurfaceViewOutputSupported(); }; } // namespace media
diff --git a/media/filters/h264_bit_reader.cc b/media/filters/h264_bit_reader.cc index 145d2e19..4dea4000 100644 --- a/media/filters/h264_bit_reader.cc +++ b/media/filters/h264_bit_reader.cc
@@ -56,7 +56,7 @@ --bytes_left_; num_remaining_bits_in_curr_byte_ = 8; - prev_two_bytes_ = (prev_two_bytes_ << 8) | curr_byte_; + prev_two_bytes_ = ((prev_two_bytes_ & 0xff) << 8) | curr_byte_; return true; }
diff --git a/media/mojo/services/mojo_audio_decoder.cc b/media/mojo/services/mojo_audio_decoder.cc index 51995ea..19ac240 100644 --- a/media/mojo/services/mojo_audio_decoder.cc +++ b/media/mojo/services/mojo_audio_decoder.cc
@@ -150,17 +150,17 @@ base::ResetAndReturn(&reset_cb_).Run(); } -void MojoAudioDecoder::OnInitialized(bool status, +void MojoAudioDecoder::OnInitialized(bool success, bool needs_bitstream_conversion) { - DVLOG(1) << __FUNCTION__ << ": status:" << status; + DVLOG(1) << __FUNCTION__ << ": success:" << success; DCHECK(task_runner_->BelongsToCurrentThread()); needs_bitstream_conversion_ = needs_bitstream_conversion; - if (status) + if (success) CreateDataPipe(); - task_runner_->PostTask(FROM_HERE, base::Bind(init_cb_, status)); + base::ResetAndReturn(&init_cb_).Run(success); } static media::DecodeStatus ConvertDecodeStatus(
diff --git a/media/mojo/services/mojo_audio_decoder.h b/media/mojo/services/mojo_audio_decoder.h index ae6097d..e3b7198 100644 --- a/media/mojo/services/mojo_audio_decoder.h +++ b/media/mojo/services/mojo_audio_decoder.h
@@ -45,7 +45,7 @@ void OnConnectionError(); // Called when |remote_decoder_| finished initialization. - void OnInitialized(bool status, bool needs_bitstream_conversion); + void OnInitialized(bool success, bool needs_bitstream_conversion); // Called when |remote_decoder_| accepted or rejected DecoderBuffer. void OnDecodeStatus(interfaces::AudioDecoder::DecodeStatus decode_status);
diff --git a/mojo/edk/embedder/embedder_unittest.cc b/mojo/edk/embedder/embedder_unittest.cc index 161ca01..c781f42e 100644 --- a/mojo/edk/embedder/embedder_unittest.cc +++ b/mojo/edk/embedder/embedder_unittest.cc
@@ -302,6 +302,9 @@ // from it. base::SharedMemoryCreateOptions options; options.size = 123; +#if defined(OS_MACOSX) && !defined(OS_IOS) + options.type = base::SharedMemoryHandle::POSIX; +#endif base::SharedMemory shared_memory; ASSERT_TRUE(shared_memory.Create(options)); base::SharedMemoryHandle shm_handle = base::SharedMemory::DuplicateHandle( @@ -374,6 +377,139 @@ EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(sb1)); } +#if defined(OS_MACOSX) && !defined(OS_IOS) +TEST_F(EmbedderTest, MultiprocessMachSharedMemory) { + RUN_CHILD_ON_PIPE(MultiprocessSharedMemoryClient, server_mp) + // 1. Create a Mach base::SharedMemory object and create a mojo shared + // buffer from it. + base::SharedMemoryCreateOptions options; + options.size = 123; + options.type = base::SharedMemoryHandle::MACH; + base::SharedMemory shared_memory; + ASSERT_TRUE(shared_memory.Create(options)); + base::SharedMemoryHandle shm_handle = base::SharedMemory::DuplicateHandle( + shared_memory.handle()); + MojoHandle sb1; + ASSERT_EQ(MOJO_RESULT_OK, + CreateSharedBufferWrapper(shm_handle, 123, false, &sb1)); + + // 2. Map |sb1| and write something into it. + char* buffer = nullptr; + ASSERT_EQ(MOJO_RESULT_OK, + MojoMapBuffer(sb1, 0, 123, reinterpret_cast<void**>(&buffer), 0)); + ASSERT_TRUE(buffer); + memcpy(buffer, kHelloWorld, sizeof(kHelloWorld)); + + // 3. Duplicate |sb1| into |sb2| and pass to |server_mp|. + MojoHandle sb2 = MOJO_HANDLE_INVALID; + EXPECT_EQ(MOJO_RESULT_OK, MojoDuplicateBufferHandle(sb1, 0, &sb2)); + EXPECT_NE(MOJO_HANDLE_INVALID, sb2); + WriteMessageWithHandles(server_mp, "hello", &sb2, 1); + + // 4. Read a message from |server_mp|. + EXPECT_EQ("bye", ReadMessage(server_mp)); + + // 5. Expect that the contents of the shared buffer have changed. + EXPECT_EQ(kByeWorld, std::string(buffer)); + + // 6. Map the original base::SharedMemory and expect it contains the + // expected value. + ASSERT_TRUE(shared_memory.Map(123)); + EXPECT_EQ(kByeWorld, + std::string(static_cast<char*>(shared_memory.memory()))); + + ASSERT_EQ(MOJO_RESULT_OK, MojoClose(sb1)); + END_CHILD() +} + +const base::SharedMemoryHandle::Type kTestHandleTypes[] = { + base::SharedMemoryHandle::MACH, + base::SharedMemoryHandle::POSIX, + base::SharedMemoryHandle::POSIX, + base::SharedMemoryHandle::MACH, +}; + +// Test that we can mix file descriptor and mach port handles. +TEST_F(EmbedderTest, MultiprocessMixMachAndFds) { + const size_t kShmSize = 1234; + RUN_CHILD_ON_PIPE(MultiprocessMixMachAndFdsClient, server_mp) + // 1. Create the base::SharedMemory objects and mojo handles from them. + MojoHandle platform_handles[arraysize(kTestHandleTypes)]; + for (size_t i = 0; i < arraysize(kTestHandleTypes); i++) { + const auto type = kTestHandleTypes[i]; + base::SharedMemoryCreateOptions options; + options.size = kShmSize; + options.type = type; + base::SharedMemory shared_memory; + ASSERT_TRUE(shared_memory.Create(options)); + base::SharedMemoryHandle shm_handle = base::SharedMemory::DuplicateHandle( + shared_memory.handle()); + ScopedPlatformHandle scoped_handle; + if (type == base::SharedMemoryHandle::POSIX) + scoped_handle.reset(PlatformHandle(shm_handle.GetFileDescriptor().fd)); + else + scoped_handle.reset(PlatformHandle(shm_handle.GetMemoryObject())); + ASSERT_EQ(MOJO_RESULT_OK, CreatePlatformHandleWrapper( + std::move(scoped_handle), platform_handles + i)); + + // Map the shared memory object and write the type into it. 'P' for POSIX, + // and 'M' for Mach. + ASSERT_TRUE(shared_memory.Map(kShmSize)); + static_cast<char*>(shared_memory.memory())[0] = + type == base::SharedMemoryHandle::POSIX ? 'P' : 'M'; + } + + // 2. Send all the handles to the child. + WriteMessageWithHandles(server_mp, "hello", platform_handles, + arraysize(kTestHandleTypes)); + + // 3. Read a message from |server_mp|. + EXPECT_EQ("bye", ReadMessage(server_mp)); + END_CHILD() +} + +DEFINE_TEST_CLIENT_TEST_WITH_PIPE(MultiprocessMixMachAndFdsClient, EmbedderTest, + client_mp) { + const int kNumHandles = 4; + const size_t kShmSize = 1234; + MojoHandle platform_handles[kNumHandles]; + + // 1. Read from |client_mp|, which should have a message containing + // |kNumHandles| handles. + EXPECT_EQ("hello", + ReadMessageWithHandles(client_mp, platform_handles, kNumHandles)); + + // 2. Extract each handle, map it, and verify the type. + for (int i = 0; i < kNumHandles; i++) { + ScopedPlatformHandle scoped_handle; + ASSERT_EQ(MOJO_RESULT_OK, + PassWrappedPlatformHandle(platform_handles[i], &scoped_handle)); + base::SharedMemoryHandle shm_handle; + char type = 0; + if (scoped_handle.get().type == PlatformHandle::Type::POSIX) { + shm_handle = base::SharedMemoryHandle(scoped_handle.release().handle, + false); + type = 'P'; + } else { + shm_handle = base::SharedMemoryHandle(scoped_handle.release().port, + kShmSize, base::GetCurrentProcId()); + type = 'M'; + } + + // Verify the type order. + EXPECT_EQ(kTestHandleTypes[i], shm_handle.GetType()); + + base::SharedMemory shared_memory(shm_handle, false); + ASSERT_TRUE(shared_memory.Map(kShmSize)); + EXPECT_EQ(type, static_cast<char*>(shared_memory.memory())[0]); + } + + // 3. Say bye! + WriteMessage(client_mp, "bye"); +} + +#endif // defined(OS_MACOSX) && !defined(OS_IOS) + // TODO(vtl): Test immediate write & close. // TODO(vtl): Test broken-connection cases.
diff --git a/mojo/edk/embedder/platform_shared_buffer.cc b/mojo/edk/embedder/platform_shared_buffer.cc index a3537392..63e5676 100644 --- a/mojo/edk/embedder/platform_shared_buffer.cc +++ b/mojo/edk/embedder/platform_shared_buffer.cc
@@ -27,7 +27,14 @@ #elif defined(OS_WIN) return ScopedPlatformHandle(PlatformHandle(memory_handle.GetHandle())); #else - return ScopedPlatformHandle(PlatformHandle(memory_handle.GetMemoryObject())); + if (memory_handle.GetType() == base::SharedMemoryHandle::MACH) { + return ScopedPlatformHandle(PlatformHandle( + memory_handle.GetMemoryObject())); + } else { + DCHECK(memory_handle.GetType() == base::SharedMemoryHandle::POSIX); + return ScopedPlatformHandle(PlatformHandle( + memory_handle.GetFileDescriptor().fd)); + } #endif } @@ -220,6 +227,9 @@ options.size = num_bytes_; // By default, we can share as read-only. options.share_read_only = true; +#if defined(OS_MACOSX) && !defined(OS_IOS) + options.type = base::SharedMemoryHandle::MACH; +#endif shared_memory_.reset(new base::SharedMemory); return shared_memory_->Create(options); @@ -234,8 +244,12 @@ base::GetCurrentProcId()); #elif defined(OS_MACOSX) && !defined(OS_IOS) base::SharedMemoryHandle handle; - handle = base::SharedMemoryHandle(platform_handle.release().port, num_bytes_, - base::GetCurrentProcId()); + if (platform_handle.get().type == PlatformHandle::Type::MACH) { + handle = base::SharedMemoryHandle( + platform_handle.release().port, num_bytes_, base::GetCurrentProcId()); + } else { + handle = base::SharedMemoryHandle(platform_handle.release().handle, false); + } #else base::SharedMemoryHandle handle(platform_handle.release().handle, false); #endif
diff --git a/mojo/edk/embedder/platform_shared_buffer_unittest.cc b/mojo/edk/embedder/platform_shared_buffer_unittest.cc index 315f7ea..098ff26a 100644 --- a/mojo/edk/embedder/platform_shared_buffer_unittest.cc +++ b/mojo/edk/embedder/platform_shared_buffer_unittest.cc
@@ -194,6 +194,9 @@ const size_t kBufferSize = 1234; base::SharedMemoryCreateOptions options; options.size = kBufferSize; +#if defined(OS_MACOSX) && !defined(OS_IOS) + options.type = base::SharedMemoryHandle::POSIX; +#endif base::SharedMemory shared_memory; ASSERT_TRUE(shared_memory.Create(options)); ASSERT_TRUE(shared_memory.Map(kBufferSize));
diff --git a/net/BUILD.gn b/net/BUILD.gn index 8c189a9..b982b12 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -14,6 +14,7 @@ import("//third_party/icu/config.gni") import("//third_party/protobuf/proto_library.gni") import("//tools/grit/grit_rule.gni") +import("//url/features.gni") if (is_android) { import("//build/config/android/config.gni") @@ -51,6 +52,9 @@ # Chromecast, at least for now. This feature needs configuration (krb5.conf # and so on). use_kerberos = !is_chromeos && !is_ios && !is_chromecast + + # Do not disable brotli filter by default. + disable_brotli_filter = false } config("net_config") { @@ -66,7 +70,6 @@ } } -# net_internal_config is shared with net and net_small. config("net_internal_config") { defines = [ # TODO(GYP) Note that the GYP file supports linux_link_kerberos (defaults to @@ -90,12 +93,7 @@ } } -# net_shared_* are settings shared between net and net_small -net_shared_sources = gypi_values.net_nacl_common_sources - -net_shared_unfiltered_sources = [] - -net_shared_configs = [ +net_configs = [ ":net_internal_config", "//build/config:precompiled_headers", @@ -103,325 +101,328 @@ "//build/config/compiler:no_size_t_to_int_warning", ] -net_shared_public_deps = [ - ":net_quic_proto", - "//crypto", - "//crypto:platform", -] +if (use_glib && use_gconf && !is_chromeos) { + net_configs += [ "//build/config/linux:gconf" ] +} -net_shared_deps = [ - ":net_resources", - "//base", - "//net/base/registry_controlled_domains", - "//third_party/protobuf:protobuf_lite", -] - -if (!is_nacl) { - net_shared_sources += gypi_values.net_non_nacl_sources - - net_shared_deps += [ - "//base/third_party/dynamic_annotations", - "//components/prefs", - "//sdch", - "//third_party/zlib", - ] - - if (!use_kerberos) { - net_shared_sources -= [ - "http/http_auth_handler_negotiate.cc", - "http/http_auth_handler_negotiate.h", - ] - } - - if (is_posix) { - if (posix_avoid_mmap) { - net_shared_sources -= [ "disk_cache/blockfile/mapped_file_posix.cc" ] - } else { - net_shared_sources -= - [ "disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc" ] - } - } - - if (!enable_built_in_dns) { - net_shared_sources -= [ - "dns/address_sorter_posix.cc", - "dns/address_sorter_posix.h", - "dns/dns_client.cc", - ] - } - - if (use_openssl) { - net_shared_sources -= [ - "base/nss_memio.c", - "base/nss_memio.h", - "cert/ct_log_verifier_nss.cc", - "cert/ct_objects_extractor_nss.cc", - "cert/jwk_serializer_nss.cc", - "cert/scoped_nss_types.h", - "cert/x509_util_nss.cc", - "quic/crypto/aead_base_decrypter_nss.cc", - "quic/crypto/aead_base_encrypter_nss.cc", - "quic/crypto/aes_128_gcm_12_decrypter_nss.cc", - "quic/crypto/aes_128_gcm_12_encrypter_nss.cc", - "quic/crypto/chacha20_poly1305_rfc7539_decrypter_nss.cc", - "quic/crypto/chacha20_poly1305_rfc7539_encrypter_nss.cc", - "quic/crypto/channel_id_nss.cc", - "quic/crypto/p256_key_exchange_nss.cc", - "quic/crypto/proof_source_chromium_nss.cc", - "socket/nss_ssl_util.cc", - "socket/nss_ssl_util.h", - "socket/ssl_client_socket_nss.cc", - "socket/ssl_client_socket_nss.h", - "socket/ssl_server_socket_nss.cc", - "socket/ssl_server_socket_nss.h", - "ssl/token_binding_nss.cc", - ] - if (is_ios) { - net_shared_sources -= [ - "cert/x509_util_ios.cc", - "cert/x509_util_ios.h", - ] - } - } else { - net_shared_sources -= [ - "cert/ct_log_verifier_openssl.cc", - "cert/ct_objects_extractor_openssl.cc", - "cert/jwk_serializer_openssl.cc", - "cert/x509_util_openssl.cc", - "cert/x509_util_openssl.h", - "quic/crypto/aead_base_decrypter_openssl.cc", - "quic/crypto/aead_base_encrypter_openssl.cc", - "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc", - "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc", - "quic/crypto/chacha20_poly1305_rfc7539_decrypter_openssl.cc", - "quic/crypto/chacha20_poly1305_rfc7539_encrypter_openssl.cc", - "quic/crypto/channel_id_openssl.cc", - "quic/crypto/p256_key_exchange_openssl.cc", - "quic/crypto/proof_source_chromium_openssl.cc", - "quic/crypto/scoped_evp_aead_ctx.cc", - "quic/crypto/scoped_evp_aead_ctx.h", - "socket/ssl_client_socket_openssl.cc", - "socket/ssl_client_socket_openssl.h", - "socket/ssl_server_socket_openssl.cc", - "socket/ssl_server_socket_openssl.h", - "ssl/openssl_ssl_util.cc", - "ssl/openssl_ssl_util.h", - "ssl/ssl_client_session_cache_openssl.cc", - "ssl/ssl_client_session_cache_openssl.h", - "ssl/ssl_key_logger.cc", - "ssl/ssl_key_logger.h", - "ssl/ssl_platform_key.h", - "ssl/ssl_platform_key_task_runner.cc", - "ssl/ssl_platform_key_task_runner.h", - "ssl/test_ssl_private_key.cc", - "ssl/test_ssl_private_key.h", - "ssl/threaded_ssl_private_key.cc", - "ssl/threaded_ssl_private_key.h", - "ssl/token_binding_openssl.cc", - ] - } - - if (!use_openssl_certs) { - net_shared_sources -= [ - "base/crypto_module_openssl.cc", - "base/keygen_handler_openssl.cc", - "base/openssl_private_key_store.h", - "base/openssl_private_key_store_memory.cc", - "cert/cert_database_openssl.cc", - "cert/cert_verify_proc_openssl.cc", - "cert/cert_verify_proc_openssl.h", - "cert/test_root_certs_openssl.cc", - "cert/x509_certificate_openssl.cc", - "ssl/openssl_client_key_store.cc", - "ssl/openssl_client_key_store.h", - ] - if (is_android) { - net_shared_sources -= [ "base/openssl_private_key_store_android.cc" ] - } - } else { - if (is_android) { - # Android doesn't use these even when using OpenSSL. - net_shared_sources -= [ - "base/openssl_private_key_store_memory.cc", - "cert/cert_database_openssl.cc", - "cert/cert_verify_proc_openssl.cc", - "cert/test_root_certs_openssl.cc", - ] - } - } - - if (!use_kerberos || is_android) { - net_shared_sources -= [ - "http/http_auth_gssapi_posix.cc", - "http/http_auth_gssapi_posix.h", - ] - } - - if (use_glib && use_gconf && !is_chromeos) { - net_shared_configs += [ "//build/config/linux:gconf" ] - net_shared_deps += [ "//build/linux:gio" ] - } - - if (is_linux) { - net_shared_configs += [ "//build/config/linux:libresolv" ] - } - - if (!use_nss_certs) { - net_shared_sources -= [ - "base/crypto_module_nss.cc", - "base/keygen_handler_nss.cc", - "cert/cert_database_nss.cc", - "cert/nss_cert_database.cc", - "cert/nss_cert_database.h", - "cert/x509_certificate_nss.cc", - "ssl/client_cert_store_nss.cc", - "ssl/client_cert_store_nss.h", - "third_party/mozilla_security_manager/nsKeygenHandler.cpp", - "third_party/mozilla_security_manager/nsKeygenHandler.h", - "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp", - "third_party/mozilla_security_manager/nsNSSCertificateDB.h", - "third_party/mozilla_security_manager/nsPKCS12Blob.cpp", - "third_party/mozilla_security_manager/nsPKCS12Blob.h", - ] - if (is_chromeos) { - # These were already removed on non-ChromeOS. - net_shared_sources -= [ - "cert/nss_cert_database_chromeos.cc", - "cert/nss_cert_database_chromeos.h", - "cert/nss_profile_filter_chromeos.cc", - "cert/nss_profile_filter_chromeos.h", - ] - } - net_shared_sources -= [ - "ssl/client_key_store.cc", - "ssl/client_key_store.h", - "ssl/ssl_platform_key_nss.cc", - ] - } else if (use_openssl) { - # client_cert_store_nss.c requires NSS_CmpCertChainWCANames from NSS's - # libssl, but our bundled copy is not built in OpenSSL ports. Pull that file - # in directly. - net_shared_sources += [ "third_party/nss/ssl/cmpcert.c" ] - } - - if (!use_nss_verifier) { - # These files are part of the partial implementation of NSS for - # cert verification, so keep them in that case. - net_shared_sources -= [ - "cert/cert_verify_proc_nss.cc", - "cert/cert_verify_proc_nss.h", - "cert/test_root_certs_nss.cc", - "cert/x509_util_nss_certs.cc", - "cert_net/nss_ocsp.cc", - "cert_net/nss_ocsp.h", - ] - } - - if (is_ios && use_nss_verifier) { - net_shared_sources -= [ - "cert/cert_verify_proc_ios.cc", - "cert/cert_verify_proc_ios.h", - "cert/x509_certificate_openssl_ios.cc", - ] - - net_shared_deps += [ - "//third_party/nss:nspr", - "//third_party/nss", - "//net/third_party/nss/ssl:libssl", - ] - } - - if (is_chromecast && use_nss_certs) { - net_shared_sources += [ "ssl/ssl_platform_key_chromecast.cc" ] - net_shared_sources -= [ "ssl/ssl_platform_key_nss.cc" ] - } - - if (!enable_mdns) { - net_shared_sources -= [ - "dns/mdns_cache.cc", - "dns/mdns_cache.h", - "dns/mdns_client.cc", - "dns/mdns_client.h", - "dns/mdns_client_impl.cc", - "dns/mdns_client_impl.h", - "dns/record_parsed.cc", - "dns/record_parsed.h", - "dns/record_rdata.cc", - "dns/record_rdata.h", - ] - } - - if (is_win) { - net_shared_sources -= [ "http/http_auth_handler_ntlm_portable.cc" ] - } else { # !is_win - net_shared_sources -= [ - "base/winsock_init.cc", - "base/winsock_init.h", - "base/winsock_util.cc", - "base/winsock_util.h", - "proxy/proxy_resolver_winhttp.cc", - "proxy/proxy_resolver_winhttp.h", - ] - } - - if (is_ios) { - # Add back some sources that were otherwise filtered out. iOS needs some Mac - # files. - net_shared_unfiltered_sources += [ - "base/mac/url_conversions.h", - "base/mac/url_conversions.mm", - "base/network_change_notifier_mac.cc", - "base/network_config_watcher_mac.cc", - "base/network_interfaces_mac.cc", - "base/network_interfaces_mac.h", - "base/platform_mime_util_mac.mm", - "proxy/proxy_resolver_mac.cc", - "proxy/proxy_server_mac.cc", - ] - - net_shared_sources -= [ "disk_cache/blockfile/file_posix.cc" ] - } - - if (is_ios && !use_nss_verifier) { - net_shared_unfiltered_sources += [ "cert/test_root_certs_mac.cc" ] - net_shared_sources -= [ "cert/x509_certificate_ios.cc" ] - } - - if (is_ios || is_mac) { - net_shared_sources += gypi_values.net_base_mac_ios_sources - } - - if (is_android) { - net_shared_deps += [ ":net_jni_headers" ] - - # Add some Linux sources that were excluded by the filter, but which - # are needed. - net_shared_unfiltered_sources += [ - "base/address_tracker_linux.cc", - "base/address_tracker_linux.h", - "base/network_interfaces_linux.cc", - "base/network_interfaces_linux.h", - "base/platform_mime_util_linux.cc", - ] - } -} else { - net_shared_public_deps += [ "//native_client_sdk/src/libraries/nacl_io" ] +if (is_linux) { + net_configs += [ "//build/config/linux:libresolv" ] } component("net") { - sources = net_shared_sources + sources = gypi_values.net_nacl_common_sources + net_unfiltered_sources = [] + + deps = [ + ":net_resources", + "//base", + "//net/base/registry_controlled_domains", + "//third_party/protobuf:protobuf_lite", + "//url:url_features", + ] + + public_deps = [ + ":net_quic_proto", + "//crypto", + "//crypto:platform", + ] + + if (!is_nacl) { + sources += gypi_values.net_non_nacl_sources + + deps += [ + "//base/third_party/dynamic_annotations", + "//components/prefs", + "//sdch", + "//third_party/zlib", + ] + + if (!use_kerberos) { + sources -= [ + "http/http_auth_handler_negotiate.cc", + "http/http_auth_handler_negotiate.h", + ] + } + + if (is_posix) { + if (posix_avoid_mmap) { + sources -= [ "disk_cache/blockfile/mapped_file_posix.cc" ] + } else { + sources -= [ "disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc" ] + } + } + + if (!enable_built_in_dns) { + sources -= [ + "dns/address_sorter_posix.cc", + "dns/address_sorter_posix.h", + "dns/dns_client.cc", + ] + } + + if (use_openssl) { + sources -= [ + "base/nss_memio.c", + "base/nss_memio.h", + "cert/ct_log_verifier_nss.cc", + "cert/ct_objects_extractor_nss.cc", + "cert/jwk_serializer_nss.cc", + "cert/scoped_nss_types.h", + "cert/x509_util_nss.cc", + "quic/crypto/aead_base_decrypter_nss.cc", + "quic/crypto/aead_base_encrypter_nss.cc", + "quic/crypto/aes_128_gcm_12_decrypter_nss.cc", + "quic/crypto/aes_128_gcm_12_encrypter_nss.cc", + "quic/crypto/chacha20_poly1305_rfc7539_decrypter_nss.cc", + "quic/crypto/chacha20_poly1305_rfc7539_encrypter_nss.cc", + "quic/crypto/channel_id_nss.cc", + "quic/crypto/p256_key_exchange_nss.cc", + "quic/crypto/proof_source_chromium_nss.cc", + "socket/nss_ssl_util.cc", + "socket/nss_ssl_util.h", + "socket/ssl_client_socket_nss.cc", + "socket/ssl_client_socket_nss.h", + "socket/ssl_server_socket_nss.cc", + "socket/ssl_server_socket_nss.h", + "ssl/token_binding_nss.cc", + ] + if (is_ios) { + sources -= [ + "cert/x509_util_ios.cc", + "cert/x509_util_ios.h", + ] + } + } else { + sources -= [ + "cert/ct_log_verifier_openssl.cc", + "cert/ct_objects_extractor_openssl.cc", + "cert/jwk_serializer_openssl.cc", + "cert/x509_util_openssl.cc", + "cert/x509_util_openssl.h", + "quic/crypto/aead_base_decrypter_openssl.cc", + "quic/crypto/aead_base_encrypter_openssl.cc", + "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc", + "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc", + "quic/crypto/chacha20_poly1305_rfc7539_decrypter_openssl.cc", + "quic/crypto/chacha20_poly1305_rfc7539_encrypter_openssl.cc", + "quic/crypto/channel_id_openssl.cc", + "quic/crypto/p256_key_exchange_openssl.cc", + "quic/crypto/proof_source_chromium_openssl.cc", + "quic/crypto/scoped_evp_aead_ctx.cc", + "quic/crypto/scoped_evp_aead_ctx.h", + "socket/ssl_client_socket_openssl.cc", + "socket/ssl_client_socket_openssl.h", + "socket/ssl_server_socket_openssl.cc", + "socket/ssl_server_socket_openssl.h", + "ssl/openssl_ssl_util.cc", + "ssl/openssl_ssl_util.h", + "ssl/ssl_client_session_cache_openssl.cc", + "ssl/ssl_client_session_cache_openssl.h", + "ssl/ssl_key_logger.cc", + "ssl/ssl_key_logger.h", + "ssl/ssl_platform_key.h", + "ssl/ssl_platform_key_task_runner.cc", + "ssl/ssl_platform_key_task_runner.h", + "ssl/test_ssl_private_key.cc", + "ssl/test_ssl_private_key.h", + "ssl/threaded_ssl_private_key.cc", + "ssl/threaded_ssl_private_key.h", + "ssl/token_binding_openssl.cc", + ] + } + + if (!use_openssl_certs) { + sources -= [ + "base/crypto_module_openssl.cc", + "base/keygen_handler_openssl.cc", + "base/openssl_private_key_store.h", + "base/openssl_private_key_store_memory.cc", + "cert/cert_database_openssl.cc", + "cert/cert_verify_proc_openssl.cc", + "cert/cert_verify_proc_openssl.h", + "cert/test_root_certs_openssl.cc", + "cert/x509_certificate_openssl.cc", + "ssl/openssl_client_key_store.cc", + "ssl/openssl_client_key_store.h", + ] + if (is_android) { + sources -= [ "base/openssl_private_key_store_android.cc" ] + } + } else { + if (is_android) { + # Android doesn't use these even when using OpenSSL. + sources -= [ + "base/openssl_private_key_store_memory.cc", + "cert/cert_database_openssl.cc", + "cert/cert_verify_proc_openssl.cc", + "cert/test_root_certs_openssl.cc", + ] + } + } + + if (!use_kerberos || is_android) { + sources -= [ + "http/http_auth_gssapi_posix.cc", + "http/http_auth_gssapi_posix.h", + ] + } + + if (use_glib && use_gconf && !is_chromeos) { + deps += [ "//build/linux:gio" ] + } + + if (!use_nss_certs) { + sources -= [ + "base/crypto_module_nss.cc", + "base/keygen_handler_nss.cc", + "cert/cert_database_nss.cc", + "cert/nss_cert_database.cc", + "cert/nss_cert_database.h", + "cert/x509_certificate_nss.cc", + "ssl/client_cert_store_nss.cc", + "ssl/client_cert_store_nss.h", + "third_party/mozilla_security_manager/nsKeygenHandler.cpp", + "third_party/mozilla_security_manager/nsKeygenHandler.h", + "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp", + "third_party/mozilla_security_manager/nsNSSCertificateDB.h", + "third_party/mozilla_security_manager/nsPKCS12Blob.cpp", + "third_party/mozilla_security_manager/nsPKCS12Blob.h", + ] + if (is_chromeos) { + # These were already removed on non-ChromeOS. + sources -= [ + "cert/nss_cert_database_chromeos.cc", + "cert/nss_cert_database_chromeos.h", + "cert/nss_profile_filter_chromeos.cc", + "cert/nss_profile_filter_chromeos.h", + ] + } + sources -= [ + "ssl/client_key_store.cc", + "ssl/client_key_store.h", + "ssl/ssl_platform_key_nss.cc", + ] + } else if (use_openssl) { + # client_cert_store_nss.c requires NSS_CmpCertChainWCANames from NSS's + # libssl, but our bundled copy is not built in OpenSSL ports. Pull that + # file in directly. + sources += [ "third_party/nss/ssl/cmpcert.c" ] + } + + if (!use_nss_verifier) { + # These files are part of the partial implementation of NSS for + # cert verification, so keep them in that case. + sources -= [ + "cert/cert_verify_proc_nss.cc", + "cert/cert_verify_proc_nss.h", + "cert/test_root_certs_nss.cc", + "cert/x509_util_nss_certs.cc", + "cert_net/nss_ocsp.cc", + "cert_net/nss_ocsp.h", + ] + } + + if (is_ios && use_nss_verifier) { + sources -= [ + "cert/cert_verify_proc_ios.cc", + "cert/cert_verify_proc_ios.h", + "cert/x509_certificate_openssl_ios.cc", + ] + + deps += [ + "//net/third_party/nss/ssl:libssl", + "//third_party/nss", + "//third_party/nss:nspr", + ] + } + + if (is_chromecast && use_nss_certs) { + sources += [ "ssl/ssl_platform_key_chromecast.cc" ] + sources -= [ "ssl/ssl_platform_key_nss.cc" ] + } + + if (!enable_mdns) { + sources -= [ + "dns/mdns_cache.cc", + "dns/mdns_cache.h", + "dns/mdns_client.cc", + "dns/mdns_client.h", + "dns/mdns_client_impl.cc", + "dns/mdns_client_impl.h", + "dns/record_parsed.cc", + "dns/record_parsed.h", + "dns/record_rdata.cc", + "dns/record_rdata.h", + ] + } + + if (is_win) { + sources -= [ "http/http_auth_handler_ntlm_portable.cc" ] + } else { # !is_win + sources -= [ + "base/winsock_init.cc", + "base/winsock_init.h", + "base/winsock_util.cc", + "base/winsock_util.h", + "proxy/proxy_resolver_winhttp.cc", + "proxy/proxy_resolver_winhttp.h", + ] + } + + if (is_ios) { + # Add back some sources that were otherwise filtered out. + # iOS needs some Mac files. + net_unfiltered_sources += [ + "base/mac/url_conversions.h", + "base/mac/url_conversions.mm", + "base/network_change_notifier_mac.cc", + "base/network_config_watcher_mac.cc", + "base/network_interfaces_mac.cc", + "base/network_interfaces_mac.h", + "base/platform_mime_util_mac.mm", + "proxy/proxy_resolver_mac.cc", + "proxy/proxy_server_mac.cc", + ] + + sources -= [ "disk_cache/blockfile/file_posix.cc" ] + } + + if (is_ios && !use_nss_verifier) { + net_unfiltered_sources += [ "cert/test_root_certs_mac.cc" ] + sources -= [ "cert/x509_certificate_ios.cc" ] + } + + if (is_ios || is_mac) { + sources += gypi_values.net_base_mac_ios_sources + } + + if (is_android) { + deps += [ ":net_jni_headers" ] + + # Add some Linux sources that were excluded by the filter, but which + # are needed. + net_unfiltered_sources += [ + "base/address_tracker_linux.cc", + "base/address_tracker_linux.h", + "base/network_interfaces_linux.cc", + "base/network_interfaces_linux.h", + "base/platform_mime_util_linux.cc", + ] + } + } else { + public_deps += [ "//native_client_sdk/src/libraries/nacl_io" ] + } # Add back some sources that were otherwise filtered out. set_sources_assignment_filter([]) - sources += net_shared_unfiltered_sources + sources += net_unfiltered_sources set_sources_assignment_filter(sources_assignment_filter) cflags = [] - configs += net_shared_configs + configs += net_configs public_configs = [ ":net_config" ] - public_deps = net_shared_public_deps + [ "//url" ] - deps = net_shared_deps + public_deps += [ "//url" ] if (is_mac) { libs = [ @@ -468,55 +469,40 @@ } # ICU support. - deps += [ - "//base:i18n", - "//third_party/icu", - ] - sources += [ - "base/filename_util_icu.cc", - "base/net_string_util_icu.cc", - ] + if (use_platform_icu_alternatives) { + if (is_android) { + # Use ICU alternative on Android. + sources += [ + "base/net_string_util_icu_alternatives_android.cc", + "base/net_string_util_icu_alternatives_android.h", + ] + deps += [ ":net_jni_headers" ] + } else if (is_ios) { + # Use ICU alternative on iOS. + sources += [ "base/net_string_util_icu_alternatives_ios.mm" ] + } else { + assert(false, + "ICU alternative is not implemented for platform: " + target_os) + } + } else { + # Use ICU. + deps += [ + "//base:i18n", + "//third_party/icu", + ] + sources += [ + "base/filename_util_icu.cc", + "base/net_string_util_icu.cc", + ] + } # Brotli support. - deps += [ "//third_party/brotli" ] - sources += [ "filter/brotli_filter.cc" ] - } -} - -if (is_android) { - # Same as net, but with brotli encoding, ICU, file, ftp, and websocket - # support stripped. - component("net_small") { - sources = net_shared_sources - - # Add back some sources that were otherwise filtered out. - set_sources_assignment_filter([]) - sources += net_shared_unfiltered_sources - set_sources_assignment_filter(sources_assignment_filter) - - cflags = [] - defines = [] - configs += net_shared_configs - public_configs = [ ":net_config" ] - - public_deps = net_shared_public_deps + - [ "//url:url_lib_use_icu_alternatives_on_android" ] - deps = net_shared_deps + [ ":net_jni_headers" ] - - defines += [ - "DISABLE_FILE_SUPPORT", - "DISABLE_FTP_SUPPORT", - "USE_ICU_ALTERNATIVES_ON_ANDROID=1", - ] - - # Use ICU alternative on Android. - sources += [ - "base/net_string_util_icu_alternatives_android.cc", - "base/net_string_util_icu_alternatives_android.h", - ] - - # Disable Brotli support. - sources += [ "filter/brotli_filter_disabled.cc" ] + if (!disable_brotli_filter) { + sources += [ "filter/brotli_filter.cc" ] + deps += [ "//third_party/brotli" ] + } else { + sources += [ "filter/brotli_filter_disabled.cc" ] + } } } @@ -530,10 +516,7 @@ } proto_library("net_quic_proto") { - visibility = [ - ":net", - ":net_small", - ] + visibility = [ ":net" ] sources = [ "quic/proto/cached_network_parameters.proto", @@ -1391,7 +1374,7 @@ ":stale_while_revalidate_experiment_domains_dafsa", "//base", ] - configs += net_shared_configs + configs += net_configs } if (!is_ios) { @@ -1473,6 +1456,7 @@ "//testing/gtest", "//third_party/zlib", "//url", + "//url:url_features", ] data = [ @@ -1659,7 +1643,6 @@ "disk_cache/blockfile/block_files_unittest.cc", # Need to read input data files. - "filter/brotli_filter_unittest.cc", "filter/gzip_filter_unittest.cc", "socket/ssl_server_socket_unittest.cc", "spdy/fuzzing/hpack_fuzz_util_test.cc", @@ -1685,6 +1668,44 @@ ] } + # Unit tests that aren't supported by the current ICU alternatives on Android. + if (is_android && use_platform_icu_alternatives) { + sources -= [ + "base/filename_util_unittest.cc", + "base/url_util_unittest.cc", + "cert/x509_certificate_unittest.cc", + "proxy/proxy_resolver_v8_unittest.cc", + "url_request/url_request_job_unittest.cc", + ] + } + + # Unit tests that are not supported by the current ICU alternatives on iOS. + if (is_ios && use_platform_icu_alternatives) { + sources -= [ + "base/filename_util_unittest.cc", + "base/url_util_unittest.cc", + "cert/x509_certificate_unittest.cc", + "http/http_auth_handler_basic_unittest.cc", + "http/http_auth_handler_digest_unittest.cc", + "http/http_auth_handler_factory_unittest.cc", + "http/http_auth_unittest.cc", + "http/http_content_disposition_unittest.cc", + "http/http_network_transaction_unittest.cc", + "http/http_proxy_client_socket_pool_unittest.cc", + "socket/ssl_client_socket_pool_unittest.cc", + "spdy/spdy_network_transaction_unittest.cc", + "spdy/spdy_proxy_client_socket_unittest.cc", + "url_request/url_request_job_unittest.cc", + "url_request/url_request_unittest.cc", + ] + } + + # Exclude brotli test if the support for brotli is disabled. + # Also, exclude the test from iOS for now (needs to read input data files). + if (disable_brotli_filter || is_ios) { + sources -= [ "filter/brotli_filter_unittest.cc" ] + } + if (is_android) { deps += [ ":net_test_jni_headers", @@ -1769,10 +1790,13 @@ sources = [ "base/fuzzer_test_support.cc", + "socket/fuzzed_socket.cc", + "socket/fuzzed_socket.h", ] deps = [ "//base", "//base:i18n", + "//net", ] } @@ -1958,3 +1982,27 @@ "//net", ] } + +fuzzer_test("net_socks_client_socket_fuzzer") { + sources = [ + "socket/socks_client_socket_fuzzer.cc", + ] + deps = [ + ":net_fuzzer_test_support", + ":test_support", + "//base", + "//net", + ] +} + +fuzzer_test("net_socks5_client_socket_fuzzer") { + sources = [ + "socket/socks5_client_socket_fuzzer.cc", + ] + deps = [ + ":net_fuzzer_test_support", + ":test_support", + "//base", + "//net", + ] +}
diff --git a/net/android/net_jni_registrar.cc b/net/android/net_jni_registrar.cc index ba1b5a8..0a9a6be 100644 --- a/net/android/net_jni_registrar.cc +++ b/net/android/net_jni_registrar.cc
@@ -14,8 +14,9 @@ #include "net/android/traffic_stats.h" #include "net/cert/x509_util_android.h" #include "net/proxy/proxy_config_service_android.h" +#include "url/url_features.h" -#if defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) #include "net/base/net_string_util_icu_alternatives_android.h" // nogncheck #endif @@ -32,7 +33,7 @@ {"NetworkChangeNotifierAndroid", NetworkChangeNotifierAndroid::Register}, {"ProxyConfigService", ProxyConfigServiceAndroid::Register}, {"X509Util", RegisterX509Util}, -#if defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) {"NetStringUtils", RegisterNetStringUtils} #endif };
diff --git a/net/base/net_string_util_icu_alternatives_ios.mm b/net/base/net_string_util_icu_alternatives_ios.mm new file mode 100644 index 0000000..7ea42808 --- /dev/null +++ b/net/base/net_string_util_icu_alternatives_ios.mm
@@ -0,0 +1,44 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/logging.h" +#include "base/strings/string16.h" +#include "base/strings/string_piece.h" +#include "net/base/net_string_util.h" + +namespace net { + +// This constant cannot be defined as const char[] because it is initialized +// by base::kCodepageLatin1 (which is const char[]) in net_string_util_icu.cc. +const char* const kCharsetLatin1 = "ISO-8859-1"; + +bool ConvertToUtf8(const std::string& text, + const char* charset, + std::string* output) { + DCHECK(false) << "Not implemented yet."; + return false; +} + +bool ConvertToUtf8AndNormalize(const std::string& text, + const char* charset, + std::string* output) { + DCHECK(false) << "Not implemented yet."; + return false; +} + +bool ConvertToUTF16(const std::string& text, + const char* charset, + base::string16* output) { + DCHECK(false) << "Not implemented yet."; + return false; +} + +bool ConvertToUTF16WithSubstitutions(const std::string& text, + const char* charset, + base::string16* output) { + DCHECK(false) << "Not implemented yet."; + return false; +} + +} // namespace net \ No newline at end of file
diff --git a/net/cert/cert_verify_proc_ios.cc b/net/cert/cert_verify_proc_ios.cc index f7f72fc..017d84b 100644 --- a/net/cert/cert_verify_proc_ios.cc +++ b/net/cert/cert_verify_proc_ios.cc
@@ -198,15 +198,15 @@ CFBundleGetBundleWithIdentifier(CFSTR("com.apple.Security")); CFStringRef date_string = CFSTR("One or more certificates have expired or are not valid yet."); - CFStringRef date_error = CFBundleCopyLocalizedString( - bundle, date_string, date_string, CFSTR("SecCertificate")); + ScopedCFTypeRef<CFStringRef> date_error(CFBundleCopyLocalizedString( + bundle, date_string, date_string, CFSTR("SecCertificate"))); CFStringRef trust_string = CFSTR("Root certificate is not trusted."); - CFStringRef trust_error = CFBundleCopyLocalizedString( - bundle, trust_string, trust_string, CFSTR("SecCertificate")); + ScopedCFTypeRef<CFStringRef> trust_error(CFBundleCopyLocalizedString( + bundle, trust_string, trust_string, CFSTR("SecCertificate"))); CFStringRef weak_string = CFSTR("One or more certificates is using a weak key size."); - CFStringRef weak_error = CFBundleCopyLocalizedString( - bundle, weak_string, weak_string, CFSTR("SecCertificate")); + ScopedCFTypeRef<CFStringRef> weak_error(CFBundleCopyLocalizedString( + bundle, weak_string, weak_string, CFSTR("SecCertificate"))); for (CFIndex i = 0; i < properties_length; ++i) { CFDictionaryRef dict = reinterpret_cast<CFDictionaryRef>(
diff --git a/net/cert/ct_known_logs.cc b/net/cert/ct_known_logs.cc index eddeb55..03c51c9 100644 --- a/net/cert/ct_known_logs.cc +++ b/net/cert/ct_known_logs.cc
@@ -4,12 +4,15 @@ #include "net/cert/ct_known_logs.h" +#include <stddef.h> +#include <string.h> + #include <algorithm> +#include <iterator> #include "base/logging.h" #include "base/macros.h" #include "crypto/sha2.h" -#include "net/cert/ct_known_logs_static.h" #if !defined(OS_NACL) #include "net/cert/ct_log_verifier.h" @@ -21,9 +24,7 @@ namespace { -int log_ids_compare(const char* log_id, const char* lookup_id) { - return strncmp(log_id, lookup_id, crypto::kSHA256Length) < 0; -} +#include "net/cert/ct_known_logs_static-inc.h" } // namespace @@ -31,10 +32,8 @@ std::vector<scoped_refptr<const CTLogVerifier>> CreateLogVerifiersForKnownLogs() { std::vector<scoped_refptr<const CTLogVerifier>> verifiers; - for (size_t i = 0; i < arraysize(kCTLogList); ++i) { - const CTLogInfo& log(kCTLogList[i]); + for (const auto& log : kCTLogList) { base::StringPiece key(log.log_key, log.log_key_length); - verifiers.push_back(CTLogVerifier::Create(key, log.log_name, log.log_url)); // Make sure no null logs enter verifiers. Parsing of all known logs should // succeed. @@ -46,20 +45,12 @@ #endif bool IsLogOperatedByGoogle(base::StringPiece log_id) { - // No callers should provide a log_id that's not of the expected length - // (log IDs are SHA-256 hashes of the key and are always 32 bytes). - // Without this DCHECK (i.e. in production) this function would always - // return false. - DCHECK_EQ(log_id.size(), arraysize(kGoogleLogIDs[0]) - 1); + CHECK_EQ(log_id.size(), crypto::kSHA256Length); - auto p = std::lower_bound(kGoogleLogIDs, kGoogleLogIDs + kNumGoogleLogs, - log_id.data(), &log_ids_compare); - if ((p == kGoogleLogIDs + kNumGoogleLogs) || - log_id != base::StringPiece(*p, crypto::kSHA256Length)) { - return false; - } - - return true; + return std::binary_search(std::begin(kGoogleLogIDs), std::end(kGoogleLogIDs), + log_id.data(), [](const char* a, const char* b) { + return memcmp(a, b, crypto::kSHA256Length) < 0; + }); } } // namespace ct
diff --git a/net/cert/ct_known_logs_static.h b/net/cert/ct_known_logs_static-inc.h similarity index 85% rename from net/cert/ct_known_logs_static.h rename to net/cert/ct_known_logs_static-inc.h index 8452ece..f3c5592 100644 --- a/net/cert/ct_known_logs_static.h +++ b/net/cert/ct_known_logs_static-inc.h
@@ -2,12 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// This file is generated by print_log_list.py -#ifndef NET_CERT_CT_KNOWN_LOGS_STATIC_H_ -#define NET_CERT_CT_KNOWN_LOGS_STATIC_H_ - -#include <stddef.h> - struct CTLogInfo { const char* const log_key; const size_t log_key_length; @@ -22,63 +16,49 @@ "\x0c\xe8\x41\x46\xe8\x81\x01\x1b\x15\xe1\x4b\xf1\x1b\x62\xdd\x36\x0a" "\x08\x18\xba\xed\x0b\x35\x84\xd0\x9e\x40\x3c\x2d\x9e\x9b\x82\x65\xbd" "\x1f\x04\x10\x41\x4c\xa0", - 91, - "Google 'Pilot' log", - "https://ct.googleapis.com/pilot/"}, + 91, "Google 'Pilot' log", "https://ct.googleapis.com/pilot/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xd7\xf4\xcc\x69\xb2\xe4\x0e" "\x90\xa3\x8a\xea\x5a\x70\x09\x4f\xef\x13\x62\xd0\x8d\x49\x60\xff\x1b" "\x40\x50\x07\x0c\x6d\x71\x86\xda\x25\x49\x8d\x65\xe1\x08\x0d\x47\x34" "\x6b\xbd\x27\xbc\x96\x21\x3e\x34\xf5\x87\x76\x31\xb1\x7f\x1d\xc9\x85" "\x3b\x0d\xf7\x1f\x3f\xe9", - 91, - "Google 'Aviator' log", - "https://ct.googleapis.com/aviator/"}, + 91, "Google 'Aviator' log", "https://ct.googleapis.com/aviator/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x02\x46\xc5\xbe\x1b\xbb\x82" "\x40\x16\xe8\xc1\xd2\xac\x19\x69\x13\x59\xf8\xf8\x70\x85\x46\x40\xb9" "\x38\xb0\x23\x82\xa8\x64\x4c\x7f\xbf\xbb\x34\x9f\x4a\x5f\x28\x8a\xcf" "\x19\xc4\x00\xf6\x36\x06\x93\x65\xed\x4c\xf5\xa9\x21\x62\x5a\xd8\x91" "\xeb\x38\x24\x40\xac\xe8", - 91, - "DigiCert Log Server", - "https://ct1.digicert-ct.com/log/"}, + 91, "DigiCert Log Server", "https://ct1.digicert-ct.com/log/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x20\x5b\x18\xc8\x3c\xc1\x8b" "\xb3\x31\x08\x00\xbf\xa0\x90\x57\x2b\xb7\x47\x8c\x6f\xb5\x68\xb0\x8e" "\x90\x78\xe9\xa0\x73\xea\x4f\x28\x21\x2e\x9c\xc0\xf4\x16\x1b\xaa\xf9" "\xd5\xd7\xa9\x80\xc3\x4e\x2f\x52\x3c\x98\x01\x25\x46\x24\x25\x28\x23" "\x77\x2d\x05\xc2\x40\x7a", - 91, - "Google 'Rocketeer' log", - "https://ct.googleapis.com/rocketeer/"}, + 91, "Google 'Rocketeer' log", "https://ct.googleapis.com/rocketeer/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x0b\x23\xcb\x85\x62\x98\x61" "\x48\x04\x73\xeb\x54\x5d\xf3\xd0\x07\x8c\x2d\x19\x2d\x8c\x36\xf5\xeb" "\x8f\x01\x42\x0a\x7c\x98\x26\x27\xc1\xb5\xdd\x92\x93\xb0\xae\xf8\x9b" "\x3d\x0c\xd8\x4c\x4e\x1d\xf9\x15\xfb\x47\x68\x7b\xba\x66\xb7\x25\x9c" "\xd0\x4a\xc2\x66\xdb\x48", - 91, - "Certly.IO log", - "https://log.certly.io/"}, + 91, "Certly.IO log", "https://log.certly.io/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x27\x64\x39\x0c\x2d\xdc\x50" "\x18\xf8\x21\x00\xa2\x0e\xed\x2c\xea\x3e\x75\xba\x9f\x93\x64\x09\x00" "\x11\xc4\x11\x17\xab\x5c\xcf\x0f\x74\xac\xb5\x97\x90\x93\x00\x5b\xb8" "\xeb\xf7\x27\x3d\xd9\xb2\x0a\x81\x5f\x2f\x0d\x75\x38\x94\x37\x99\x1e" "\xf6\x07\x76\xe0\xee\xbe", - 91, - "Izenpe log", - "https://ct.izenpe.com/"}, + 91, "Izenpe log", "https://ct.izenpe.com/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\x96\xea\xac\x1c\x46\x0c\x1b" "\x55\xdc\x0d\xfc\xb5\x94\x27\x46\x57\x42\x70\x3a\x69\x18\xe2\xbf\x3b" "\xc4\xdb\xab\xa0\xf4\xb6\x6c\xc0\x53\x3f\x4d\x42\x10\x33\xf0\x58\x97" "\x8f\x6b\xbe\x72\xf4\x2a\xec\x1c\x42\xaa\x03\x2f\x1a\x7e\x28\x35\x76" "\x99\x08\x3d\x21\x14\x86", - 91, - "Symantec log", - "https://ct.ws.symantec.com/"}, + 91, "Symantec log", "https://ct.ws.symantec.com/"}, {"\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01" "\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82\x01\x01\x00\xa2" "\x5a\x48\x1f\x17\x52\x95\x35\xcb\xa3\x5b\x3a\x1f\x53\x82\x76\x94\xa3" @@ -97,20 +77,14 @@ "\x05\xbf\x5f\xae\x94\x97\xdb\x5f\x64\xd4\xee\x16\x8b\xa3\x84\x6c\x71" "\x2b\xf1\xab\x7f\x5d\x0d\x32\xee\x04\xe2\x90\xec\x41\x9f\xfb\x39\xc1" "\x02\x03\x01\x00\x01", - 294, - "Venafi log", - "https://ctlog.api.venafi.com/"}, + 294, "Venafi log", "https://ctlog.api.venafi.com/"}, {"\x30\x59\x30\x13\x06\x07\x2a\x86\x48\xce\x3d\x02\x01\x06\x08\x2a\x86" "\x48\xce\x3d\x03\x01\x07\x03\x42\x00\x04\xea\x95\x9e\x02\xff\xee\xf1" "\x33\x6d\x4b\x87\xbc\xcd\xfd\x19\x17\x62\xff\x94\xd3\xd0\x59\x07\x3f" "\x02\x2d\x1c\x90\xfe\xc8\x47\x30\x3b\xf1\xdd\x0d\xb8\x11\x0c\x5d\x1d" "\x86\xdd\xab\xd3\x2b\x46\x66\xfb\x6e\x65\xb7\x3b\xfd\x59\x68\xac\xdf" "\xa6\xf8\xce\xd2\x18\x4d", - 91, - "Symantec 'Vega' log", - "https://vega.ws.symantec.com/"}}; - -const size_t kNumKnownCTLogs = 9; + 91, "Symantec 'Vega' log", "https://vega.ws.symantec.com/"}}; // The list is sorted. const char kGoogleLogIDs[][33] = { @@ -120,7 +94,3 @@ "\x35\x98\x04\xf9\x1b\xdf\xb8\xe3\x77\xcd\x0e\xc8\x0d\xdc\x10", "\xee\x4b\xbd\xb7\x75\xce\x60\xba\xe1\x42\x69\x1f\xab\xe1\x9e\x66\xa3" "\x0f\x7e\x5f\xb0\x72\xd8\x83\x00\xc4\x7b\x89\x7a\xa8\xfd\xcb"}; - -const size_t kNumGoogleLogs = 3; - -#endif // NET_CERT_CT_KNOWN_LOGS_STATIC_H_
diff --git a/net/http/bidirectional_stream.cc b/net/http/bidirectional_stream.cc index 5c04ca3..6e0e7899 100644 --- a/net/http/bidirectional_stream.cc +++ b/net/http/bidirectional_stream.cc
@@ -47,7 +47,8 @@ NetLog::SOURCE_BIDIRECTIONAL_STREAM)), session_(session), delegate_(delegate), - timer_(std::move(timer)) { + timer_(std::move(timer)), + write_buffer_len_(0) { DCHECK(delegate_); DCHECK(request_info_); @@ -86,7 +87,15 @@ int BidirectionalStream::ReadData(IOBuffer* buf, int buf_len) { DCHECK(stream_impl_); - return stream_impl_->ReadData(buf, buf_len); + int rv = stream_impl_->ReadData(buf, buf_len); + if (rv > 0) { + net_log_.AddByteTransferEvent( + NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED, rv, buf->data()); + } else if (rv == ERR_IO_PENDING) { + read_buffer_ = buf; + // Bytes will be logged in OnDataRead(). + } + return rv; } void BidirectionalStream::SendData(IOBuffer* data, @@ -95,6 +104,8 @@ DCHECK(stream_impl_); stream_impl_->SendData(data, length, end_stream); + write_buffer_ = data; + write_buffer_len_ = length; } void BidirectionalStream::Cancel() { @@ -146,10 +157,22 @@ } void BidirectionalStream::OnDataRead(int bytes_read) { + DCHECK(read_buffer_); + + net_log_.AddByteTransferEvent( + NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED, bytes_read, + read_buffer_->data()); + read_buffer_ = nullptr; delegate_->OnDataRead(bytes_read); } void BidirectionalStream::OnDataSent() { + DCHECK(write_buffer_); + + net_log_.AddByteTransferEvent(NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT, + write_buffer_len_, write_buffer_->data()); + write_buffer_ = nullptr; + write_buffer_len_ = 0; delegate_->OnDataSent(); }
diff --git a/net/http/bidirectional_stream.h b/net/http/bidirectional_stream.h index 7e6152a..d91e41b 100644 --- a/net/http/bidirectional_stream.h +++ b/net/http/bidirectional_stream.h
@@ -9,6 +9,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "net/http/bidirectional_stream_impl.h" #include "net/http/http_stream_factory.h" @@ -202,6 +203,13 @@ // non-NULL, if the |stream_request_| successfully finishes. scoped_ptr<BidirectionalStreamImpl> stream_impl_; + // Buffer used for reading. + scoped_refptr<IOBuffer> read_buffer_; + // Buffer used for writing. + scoped_refptr<IOBuffer> write_buffer_; + // Length of |write_buffer_|. + size_t write_buffer_len_; + DISALLOW_COPY_AND_ASSIGN(BidirectionalStream); };
diff --git a/net/http/bidirectional_stream_unittest.cc b/net/http/bidirectional_stream_unittest.cc index 4d6445f..6a4510b 100644 --- a/net/http/bidirectional_stream_unittest.cc +++ b/net/http/bidirectional_stream_unittest.cc
@@ -18,6 +18,8 @@ #include "net/http/http_response_headers.h" #include "net/http/http_server_properties.h" #include "net/log/net_log.h" +#include "net/log/test_net_log.h" +#include "net/log/test_net_log_util.h" #include "net/socket/socket_test_util.h" #include "net/spdy/spdy_session.h" #include "net/spdy/spdy_test_util_common.h" @@ -302,6 +304,7 @@ ssl_data_(SSLSocketDataProvider(ASYNC, OK)) { ssl_data_.SetNextProto(kProtoHTTP2); ssl_data_.cert = ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"); + net_log_.SetCaptureMode(NetLogCaptureMode::IncludeSocketBytes()); } protected: @@ -323,10 +326,13 @@ sequenced_data_.reset( new SequencedSocketData(reads, reads_count, writes, writes_count)); session_deps_.socket_factory->AddSocketDataProvider(sequenced_data_.get()); + session_deps_.net_log = net_log_.bound().net_log(); http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); - session_ = CreateSecureSpdySession(http_session_.get(), key, BoundNetLog()); + session_ = + CreateSecureSpdySession(http_session_.get(), key, net_log_.bound()); } + BoundTestNetLog net_log_; SpdyTestUtil spdy_util_; SpdySessionDependencies session_deps_; scoped_ptr<SequencedSocketData> sequenced_data_; @@ -444,6 +450,111 @@ delegate->GetTotalReceivedBytes()); } +TEST_F(BidirectionalStreamTest, TestContainFullBytes) { + BufferedSpdyFramer framer(spdy_util_.spdy_version()); + + scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( + "https://www.example.org", 1, kBodyDataSize * 3, LOWEST, nullptr, 0)); + scoped_ptr<SpdySerializedFrame> data_frame( + framer.CreateDataFrame(1, kBodyData, kBodyDataSize, DATA_FLAG_FIN)); + MockWrite writes[] = { + CreateMockWrite(*req, 0), CreateMockWrite(*data_frame, 3), + }; + + scoped_ptr<SpdySerializedFrame> resp( + spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); + scoped_ptr<SpdySerializedFrame> response_body_frame1( + spdy_util_.ConstructSpdyBodyFrame(1, false)); + scoped_ptr<SpdySerializedFrame> response_body_frame2( + spdy_util_.ConstructSpdyBodyFrame(1, true)); + + MockRead reads[] = { + CreateMockRead(*resp, 1), + MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a pause. + CreateMockRead(*response_body_frame1, 4), + MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause. + CreateMockRead(*response_body_frame2, 6), + MockRead(ASYNC, 0, 7), + }; + + HostPortPair host_port_pair("www.example.org", 443); + SpdySessionKey key(host_port_pair, ProxyServer::Direct(), + PRIVACY_MODE_DISABLED); + InitSession(reads, arraysize(reads), writes, arraysize(writes), key); + + scoped_ptr<BidirectionalStreamRequestInfo> request_info( + new BidirectionalStreamRequestInfo); + request_info->method = "POST"; + request_info->url = GURL("https://www.example.org/"); + request_info->priority = LOWEST; + request_info->extra_headers.SetHeader(net::HttpRequestHeaders::kContentLength, + base::SizeTToString(kBodyDataSize * 3)); + + scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); + MockTimer* timer = new MockTimer(); + scoped_ptr<TestDelegateBase> delegate(new TestDelegateBase( + read_buffer.get(), kReadBufferSize, make_scoped_ptr(timer))); + delegate->set_do_not_start_read(true); + delegate->Start(std::move(request_info), http_session_.get()); + // Send the request and receive response headers. + sequenced_data_->RunUntilPaused(); + EXPECT_FALSE(timer->IsRunning()); + + scoped_refptr<StringIOBuffer> buf( + new StringIOBuffer(std::string(kBodyData, kBodyDataSize))); + // Send a DATA frame. + delegate->SendData(buf.get(), buf->size(), true); + // ReadData returns asynchronously because no data is buffered. + int rv = delegate->ReadData(); + EXPECT_EQ(ERR_IO_PENDING, rv); + // Deliver the first DATA frame. + sequenced_data_->Resume(); + sequenced_data_->RunUntilPaused(); + // |sequenced_data_| is now stopped after delivering first DATA frame but + // before the second DATA frame. + // Fire the timer to allow the first ReadData to complete asynchronously. + timer->Fire(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ(1, delegate->on_data_read_count()); + + // Now let |sequenced_data_| run until completion. + sequenced_data_->Resume(); + base::RunLoop().RunUntilIdle(); + // All data has been delivered, and OnClosed() has been invoked. + // Read now, and it should complete synchronously. + rv = delegate->ReadData(); + EXPECT_EQ(kUploadDataSize, rv); + EXPECT_EQ("200", delegate->response_headers().find(":status")->second); + EXPECT_EQ(1, delegate->on_data_read_count()); + EXPECT_EQ(1, delegate->on_data_sent_count()); + EXPECT_EQ(kProtoHTTP2, delegate->GetProtocol()); + EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), + delegate->GetTotalSentBytes()); + EXPECT_EQ(CountReadBytes(reads, arraysize(reads)), + delegate->GetTotalReceivedBytes()); + + TestNetLogEntry::List entries; + net_log_.GetEntries(&entries); + // Sent bytes. Sending data is always asynchronous. + size_t index = ExpectLogContainsSomewhere( + entries, 0, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_SENT, + NetLog::PHASE_NONE); + TestNetLogEntry entry = entries[index]; + EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); + // Received bytes for asynchronous read. + index = ExpectLogContainsSomewhere( + entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED, + NetLog::PHASE_NONE); + entry = entries[index]; + EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); + // Received bytes for synchronous read. + index = ExpectLogContainsSomewhere( + entries, index, NetLog::TYPE_BIDIRECTIONAL_STREAM_BYTES_RECEIVED, + NetLog::PHASE_NONE); + entry = entries[index]; + EXPECT_EQ(NetLog::SOURCE_BIDIRECTIONAL_STREAM, entry.source.type); +} + TEST_F(BidirectionalStreamTest, TestInterleaveReadDataAndSendData) { BufferedSpdyFramer framer(spdy_util_.spdy_version());
diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h index 70a4ee19..780914fc 100644 --- a/net/log/net_log_event_type_list.h +++ b/net/log/net_log_event_type_list.h
@@ -1159,6 +1159,30 @@ EVENT_TYPE(HTTP_TRANSACTION_RESTART_AFTER_ERROR) // ------------------------------------------------------------------------ +// BidirectionalStream +// ------------------------------------------------------------------------ + +// The specified number of bytes were sent on the stream. Depending on the +// source of the event, may be logged either once the data is sent, or when it +// is queued to be sent. +// The following parameters are attached: +// { +// "byte_count": <Number of bytes that were just sent>, +// "hex_encoded_bytes": <The exact bytes sent, as a hexadecimal string. +// Only present when byte logging is enabled>, +// } +EVENT_TYPE(BIDIRECTIONAL_STREAM_BYTES_SENT) + +// The specified number of bytes were received on the stream. +// The following parameters are attached: +// { +// "byte_count": <Number of bytes that were just received>, +// "hex_encoded_bytes": <The exact bytes received, as a hexadecimal string. +// Only present when byte logging is enabled>, +// } +EVENT_TYPE(BIDIRECTIONAL_STREAM_BYTES_RECEIVED) + +// ------------------------------------------------------------------------ // SpdySession // ------------------------------------------------------------------------
diff --git a/net/net.gyp b/net/net.gyp index c2a75731..e59ce18 100644 --- a/net/net.gyp +++ b/net/net.gyp
@@ -106,20 +106,57 @@ # GN version: //net 'target_name': 'net', 'dependencies': [ - '../base/base.gyp:base_i18n', - '../third_party/brotli/brotli.gyp:brotli', - '../third_party/icu/icu.gyp:icui18n', - '../third_party/icu/icu.gyp:icuuc', - '../third_party/protobuf/protobuf.gyp:protobuf_lite', '../url/url.gyp:url_lib', - 'net_quic_proto', - ], - 'sources': [ - 'base/filename_util_icu.cc', - 'base/net_string_util_icu.cc', - 'filter/brotli_filter.cc', ], 'includes': [ 'net_common.gypi' ], + + 'conditions': [ + # ICU Alternatives + ['use_platform_icu_alternatives == 1', { + 'conditions': [ + ['OS == "android"', { + 'sources': [ + 'base/net_string_util_icu_alternatives_android.cc', + 'base/net_string_util_icu_alternatives_android.h', + ], + }], + ['OS == "ios"', { + 'sources': [ + 'base/net_string_util_icu_alternatives_ios.mm', + ], + }], + ], + }, + # 'use_platform_icu_alternatives != 1' + { + 'sources': [ + 'base/filename_util_icu.cc', + 'base/net_string_util_icu.cc', + ], + 'dependencies': [ + '../base/base.gyp:base_i18n', + '../third_party/icu/icu.gyp:icui18n', + '../third_party/icu/icu.gyp:icuuc', + '../third_party/protobuf/protobuf.gyp:protobuf_lite', + 'net_quic_proto', + ], + }], + # Brotli support. + ['disable_brotli_filter == 1', { + 'sources': [ + 'filter/brotli_filter_disabled.cc', + ], + }, + # 'disable_brotli_filter != 1' + { + 'sources': [ + 'filter/brotli_filter.cc', + ], + 'dependencies': [ + '../third_party/brotli/brotli.gyp:brotli', + ], + }], + ], }, { # GN version: //net:net_unittests @@ -134,6 +171,7 @@ '../testing/gmock.gyp:gmock', '../testing/gtest.gyp:gtest', '../third_party/zlib/zlib.gyp:zlib', + '../url/url.gyp:url_url_features', '../url/url.gyp:url_lib', 'balsa', 'net', @@ -220,7 +258,7 @@ 'http/mock_gssapi_library_posix.h', ], }], - [ 'use_kerberos==0', { + [ 'use_kerberos==0', { 'sources!': [ 'http/http_auth_handler_negotiate_unittest.cc', ], @@ -421,6 +459,39 @@ '../gin/gin.gyp:gin', ] }], + # Unit tests that are not supported by the current ICU alternatives on Android. + ['OS == "android" and use_platform_icu_alternatives == 1', { + 'sources!': [ + 'base/filename_util_unittest.cc', + 'url_request/url_request_job_unittest.cc', + ], + }], + # Unit tests that are not supported by the current ICU alternatives on iOS. + ['OS == "ios" and use_platform_icu_alternatives == 1', { + 'sources!': [ + 'base/filename_util_unittest.cc', + 'base/url_util_unittest.cc', + 'cert/x509_certificate_unittest.cc', + 'socket/ssl_client_socket_pool_unittest.cc', + 'http/http_auth_handler_basic_unittest.cc', + 'http/http_auth_handler_digest_unittest.cc', + 'http/http_auth_handler_factory_unittest.cc', + 'http/http_auth_unittest.cc', + 'http/http_content_disposition_unittest.cc', + 'http/http_network_transaction_unittest.cc', + 'http/http_proxy_client_socket_pool_unittest.cc', + 'spdy/spdy_network_transaction_unittest.cc', + 'spdy/spdy_proxy_client_socket_unittest.cc', + 'url_request/url_request_job_unittest.cc', + 'url_request/url_request_unittest.cc', + ], + }], + # Exclude brotli test if the support for brotli is disabled. + ['disable_brotli_filter == 1', { + 'sources!': [ + 'filter/brotli_filter_unittest.cc', + ], + }], ], 'target_conditions': [ # These source files are excluded by default platform rules, but they @@ -1308,29 +1379,6 @@ }], ['OS=="android"', { 'targets': [ - { # The same target as 'net', but with smaller binary size due to - # exclusion of ICU, FTP, FILE and WebSockets support. - 'target_name': 'net_small', - 'variables': { - 'disable_ftp_support': 1, - 'disable_file_support': 1, - 'enable_websockets': 0, - }, - 'dependencies': [ - '../url/url.gyp:url_lib_use_icu_alternatives_on_android', - ], - 'defines': [ - 'USE_ICU_ALTERNATIVES_ON_ANDROID=1', - 'DISABLE_FILE_SUPPORT=1', - 'DISABLE_FTP_SUPPORT=1', - ], - 'sources': [ - 'filter/brotli_filter_disabled.cc', - 'base/net_string_util_icu_alternatives_android.cc', - 'base/net_string_util_icu_alternatives_android.h', - ], - 'includes': [ 'net_common.gypi' ], - }, { 'target_name': 'net_jni_headers', 'type': 'none',
diff --git a/net/net.gypi b/net/net.gypi index d4b6d14..9cbcd905 100644 --- a/net/net.gypi +++ b/net/net.gypi
@@ -85,7 +85,7 @@ 'cert/crl_set.h', 'cert/ct_known_logs.cc', 'cert/ct_known_logs.h', - 'cert/ct_known_logs_static.h', + 'cert/ct_known_logs_static-inc.h', 'cert/ct_policy_enforcer.cc', 'cert/ct_policy_enforcer.h', 'cert/ct_policy_status.h',
diff --git a/net/net_common.gypi b/net/net_common.gypi index f5e56c4..bc67032 100644 --- a/net/net_common.gypi +++ b/net/net_common.gypi
@@ -3,7 +3,7 @@ # found in the LICENSE file. { - # This target is included in both 'net' and 'net_small'. + # This target is included by 'net' target. 'type': '<(component)', 'variables': { 'enable_wexit_time_destructors': 1, }, 'dependencies': [ @@ -13,6 +13,7 @@ '../sdch/sdch.gyp:sdch', '../third_party/protobuf/protobuf.gyp:protobuf_lite', '../third_party/zlib/zlib.gyp:zlib', + '../url/url.gyp:url_url_features', 'net_derived_sources', 'net_quic_proto', 'net_resources',
diff --git a/net/quic/quic_flags.cc b/net/quic/quic_flags.cc index 5b2f2d8b..8778704 100644 --- a/net/quic/quic_flags.cc +++ b/net/quic/quic_flags.cc
@@ -37,7 +37,7 @@ bool FLAGS_enable_quic_stateless_reject_support = true; // This flag is not in use, just to keep consistency for shared code. -bool FLAGS_quic_always_log_bugs_for_tests = false; +bool FLAGS_quic_always_log_bugs_for_tests = true; // If true, a QUIC connection option with tag DHDT can be used to disable // HPACK\'s dynamic table. @@ -87,7 +87,7 @@ // If true, the QUIC dispatcher will directly send version negotiation packets // without needing to create a QUIC session first. -bool FLAGS_quic_stateless_version_negotiation = false; +bool FLAGS_quic_stateless_version_negotiation = true; // QUIC Ack Decimation with tolerance for packet reordering. bool FLAGS_quic_ack_decimation2 = true;
diff --git a/net/socket/fuzzed_socket.cc b/net/socket/fuzzed_socket.cc new file mode 100644 index 0000000..5b7cca76 --- /dev/null +++ b/net/socket/fuzzed_socket.cc
@@ -0,0 +1,252 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/socket/fuzzed_socket.h" + +#include "base/bind.h" +#include "base/location.h" +#include "base/logging.h" +#include "base/thread_task_runner_handle.h" +#include "net/base/io_buffer.h" + +namespace net { + +namespace { + +// Subset of the socket errors that can be returned by normal socket reads / +// writes. The first one is returned when no more input data remains, so it's +// one of the most common ones. +const Error kReadWriteErrors[] = {ERR_CONNECTION_CLOSED, ERR_FAILED, + ERR_TIMED_OUT, ERR_CONNECTION_RESET}; + +} // namespace + +FuzzedSocket::FuzzedSocket(const uint8_t* data, + size_t data_size, + const BoundNetLog& bound_net_log) + : data_(reinterpret_cast<const char*>(data), data_size), + bound_net_log_(bound_net_log), + weak_factory_(this) {} + +FuzzedSocket::~FuzzedSocket() {} + +int FuzzedSocket::Read(IOBuffer* buf, + int buf_len, + const CompletionCallback& callback) { + DCHECK(!read_pending_); + + bool sync; + int result; + + if (net_error_ != OK) { + // If an error has already been generated, use it to determine what to do. + result = net_error_; + sync = !error_pending_; + } else { + // Otherwise, use |data_|. + uint8_t random_val = ConsumeUint8FromData(); + sync = !!(random_val & 0x01); + result = random_val >> 1; + if (result > buf_len) + result = buf_len; + // Can't read more data than is available in |data_|. + if (static_cast<size_t>(result) > data_.length()) + result = data_.length(); + + if (result == 0) { + net_error_ = ConsumeReadWriteErrorFromData(); + result = net_error_; + if (!sync) + error_pending_ = true; + } else { + memcpy(buf->data(), data_.data(), result); + data_ = data_.substr(result); + } + } + + // Graceful close of a socket returns OK, at least in theory. This doesn't + // perfectly reflect real socket behavior, but close enough. + if (result == ERR_CONNECTION_CLOSED) + result = 0; + + if (sync) { + if (result > 0) + total_bytes_read_ += result; + return result; + } + + read_pending_ = true; + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(&FuzzedSocket::OnReadComplete, + weak_factory_.GetWeakPtr(), callback, result)); + return ERR_IO_PENDING; +} + +int FuzzedSocket::Write(IOBuffer* buf, + int buf_len, + const CompletionCallback& callback) { + DCHECK(!write_pending_); + + bool sync; + int result; + + if (net_error_ != OK) { + // If an error has already been generated, use it to determine what to do. + result = net_error_; + sync = !error_pending_; + } else { + // Otherwise, use |data_|. + uint8_t random_val = ConsumeUint8FromData(); + sync = !!(random_val & 0x01); + result = random_val >> 1; + if (result > buf_len) + result = buf_len; + if (result == 0) { + net_error_ = ConsumeReadWriteErrorFromData(); + result = net_error_; + if (!sync) + error_pending_ = true; + } + } + + if (sync) { + if (result > 0) + total_bytes_written_ += result; + return result; + } + + write_pending_ = true; + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::Bind(&FuzzedSocket::OnWriteComplete, + weak_factory_.GetWeakPtr(), callback, result)); + return ERR_IO_PENDING; +} + +int FuzzedSocket::SetReceiveBufferSize(int32_t size) { + return OK; +} + +int FuzzedSocket::SetSendBufferSize(int32_t size) { + return OK; +} + +int FuzzedSocket::Connect(const CompletionCallback& callback) { + // Sockets can normally be reused, but don't support it here. + DCHECK_NE(net_error_, OK); + DCHECK(!read_pending_); + DCHECK(!write_pending_); + DCHECK(!error_pending_); + DCHECK(!total_bytes_read_); + DCHECK(!total_bytes_written_); + + net_error_ = OK; + return OK; +} + +void FuzzedSocket::Disconnect() { + net_error_ = ERR_CONNECTION_CLOSED; + weak_factory_.InvalidateWeakPtrs(); + read_pending_ = false; + write_pending_ = false; + error_pending_ = false; +} + +bool FuzzedSocket::IsConnected() const { + return net_error_ != OK && !error_pending_; +} + +bool FuzzedSocket::IsConnectedAndIdle() const { + return IsConnected(); +} + +int FuzzedSocket::GetPeerAddress(IPEndPoint* address) const { + if (!IsConnected()) + return ERR_SOCKET_NOT_CONNECTED; + *address = IPEndPoint(IPAddress(127, 0, 0, 1), 80); + return OK; +} + +int FuzzedSocket::GetLocalAddress(IPEndPoint* address) const { + if (!IsConnected()) + return ERR_SOCKET_NOT_CONNECTED; + *address = IPEndPoint(IPAddress(127, 0, 0, 1), 43434); + return OK; +} + +const BoundNetLog& FuzzedSocket::NetLog() const { + return bound_net_log_; +} + +void FuzzedSocket::SetSubresourceSpeculation() {} + +void FuzzedSocket::SetOmniboxSpeculation() {} + +bool FuzzedSocket::WasEverUsed() const { + return total_bytes_written_ != 0 || total_bytes_read_ != 0; +} + +void FuzzedSocket::EnableTCPFastOpenIfSupported() {} + +bool FuzzedSocket::WasNpnNegotiated() const { + return false; +} + +NextProto FuzzedSocket::GetNegotiatedProtocol() const { + return kProtoUnknown; +} + +bool FuzzedSocket::GetSSLInfo(SSLInfo* ssl_info) { + return false; +} + +void FuzzedSocket::GetConnectionAttempts(ConnectionAttempts* out) const { + out->clear(); +} + +void FuzzedSocket::ClearConnectionAttempts() {} + +void FuzzedSocket::AddConnectionAttempts(const ConnectionAttempts& attempts) {} + +int64_t FuzzedSocket::GetTotalReceivedBytes() const { + return total_bytes_read_; +} + +uint8_t FuzzedSocket::ConsumeUint8FromData() { + size_t length = data_.length(); + if (!length) + return 0; + uint8_t out = data_[length - 1]; + data_ = data_.substr(0, length - 1); + return out; +} + +Error FuzzedSocket::ConsumeReadWriteErrorFromData() { + return kReadWriteErrors[ConsumeUint8FromData() % arraysize(kReadWriteErrors)]; +} + +void FuzzedSocket::OnReadComplete(const CompletionCallback& callback, + int result) { + CHECK(read_pending_); + read_pending_ = false; + if (result <= 0) { + error_pending_ = false; + } else { + total_bytes_read_ += result; + } + callback.Run(result); +} + +void FuzzedSocket::OnWriteComplete(const CompletionCallback& callback, + int result) { + CHECK(write_pending_); + write_pending_ = false; + if (result <= 0) { + error_pending_ = false; + } else { + total_bytes_written_ += result; + } + callback.Run(result); +} + +} // namespace net
diff --git a/net/socket/fuzzed_socket.h b/net/socket/fuzzed_socket.h new file mode 100644 index 0000000..441300f9 --- /dev/null +++ b/net/socket/fuzzed_socket.h
@@ -0,0 +1,115 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_SOCKET_FUZZED_SOCKET_H +#define NET_SOCKET_FUZZED_SOCKET_H + +#include <stdint.h> + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "base/strings/string_piece.h" +#include "net/base/completion_callback.h" +#include "net/base/net_errors.h" +#include "net/log/net_log.h" +#include "net/socket/stream_socket.h" + +namespace net { + +class IOBuffer; + +// A StreamSocket that uses a single block of data to generate responses for use +// with fuzzers. Writes can succeed synchronously or asynchronously, can write +// some or all of the provided data, and can fail with several different errors. +// Reads can do the same, but the read data is also generated from the initial +// input data. The number of bytes written/read from a single call is currently +// capped at 127 bytes. +// +// Reads and writes are executed independently of one another, so to guarantee +// the fuzzer behaves the same across repeated runs with the same input, the +// reads and writes must be done in a deterministic order and for a +// deterministic number of bytes, every time the fuzzer is run with the same +// data. +class FuzzedSocket : public StreamSocket { + public: + // |data| must be of length |data_size| and is used as to determine behavior + // of the FuzzedSocket. It must remain valid until the FuzzedSocket is + // destroyed. + FuzzedSocket(const uint8_t* data, + size_t data_size, + const BoundNetLog& bound_net_log); + ~FuzzedSocket() override; + + // Socket implementation: + int Read(IOBuffer* buf, + int buf_len, + const CompletionCallback& callback) override; + int Write(IOBuffer* buf, + int buf_len, + const CompletionCallback& callback) override; + int SetReceiveBufferSize(int32_t size) override; + int SetSendBufferSize(int32_t size) override; + + // StreamSocket implementation: + int Connect(const CompletionCallback& callback) override; + void Disconnect() override; + bool IsConnected() const override; + bool IsConnectedAndIdle() const override; + int GetPeerAddress(IPEndPoint* address) const override; + int GetLocalAddress(IPEndPoint* address) const override; + const BoundNetLog& NetLog() const override; + void SetSubresourceSpeculation() override; + void SetOmniboxSpeculation() override; + bool WasEverUsed() const override; + void EnableTCPFastOpenIfSupported() override; + bool WasNpnNegotiated() const override; + NextProto GetNegotiatedProtocol() const override; + bool GetSSLInfo(SSLInfo* ssl_info) override; + void GetConnectionAttempts(ConnectionAttempts* out) const override; + void ClearConnectionAttempts() override; + void AddConnectionAttempts(const ConnectionAttempts& attempts) override; + int64_t GetTotalReceivedBytes() const override; + + private: + // Returns a uint8_t removed from the back of |data_|. Bytes read from the + // socket are taken from the front of the stream, so this will keep read bytes + // more consistent between test runs. If no data is left, returns 0. + uint8_t ConsumeUint8FromData(); + + // Returns a net::Error that can be returned by a read or a write. Reads and + // writes return basically the same set of errors, at the TCP socket layer. + // Which error is determined by a call to ConsumeUint8FromData(). + Error ConsumeReadWriteErrorFromData(); + + void OnReadComplete(const CompletionCallback& callback, int result); + void OnWriteComplete(const CompletionCallback& callback, int result); + + // The unconsumed portion of the input data that |this| was created with. + base::StringPiece data_; + + bool read_pending_ = false; + bool write_pending_ = false; + + // This is true when the first callback returning an error is pending in the + // message queue. If true, the socket acts like it's connected until that task + // is run (Or Disconnect() is called), and reads / writes will return the same + // error asynchronously, until it becomes false, at which point they'll return + // it synchronously. + bool error_pending_ = false; + // If this is not OK, all reads/writes will fail with this error. + int net_error_ = ERR_CONNECTION_CLOSED; + + int64_t total_bytes_read_ = 0; + int64_t total_bytes_written_ = 0; + + BoundNetLog bound_net_log_; + + base::WeakPtrFactory<FuzzedSocket> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(FuzzedSocket); +}; + +} // namespace net + +#endif // NET_SOCKET_FUZZED_SOCKET_H
diff --git a/net/socket/socks5_client_socket_fuzzer.cc b/net/socket/socks5_client_socket_fuzzer.cc new file mode 100644 index 0000000..290db900 --- /dev/null +++ b/net/socket/socks5_client_socket_fuzzer.cc
@@ -0,0 +1,46 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/socket/socks5_client_socket.h" + +#include <stddef.h> +#include <stdint.h> + +#include "base/logging.h" +#include "base/memory/scoped_ptr.h" +#include "base/message_loop/message_loop.h" +#include "net/base/address_list.h" +#include "net/base/net_errors.h" +#include "net/base/test_completion_callback.h" +#include "net/log/test_net_log.h" +#include "net/socket/client_socket_handle.h" +#include "net/socket/fuzzed_socket.h" + +// Fuzzer for Socks5ClientSocket. Only covers the SOCKS5 greeet and +// handshake. +// +// |data| is used to create a FuzzedSocket to fuzz reads and writes, see that +// class for details. +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + // Needed for thread checks and waits. + base::MessageLoopForIO message_loop; + + // Use a test NetLog, to exercise logging code. + net::BoundTestNetLog bound_test_net_log; + + net::TestCompletionCallback callback; + scoped_ptr<net::FuzzedSocket> fuzzed_socket( + new net::FuzzedSocket(data, size, bound_test_net_log.bound())); + CHECK_EQ(net::OK, fuzzed_socket->Connect(callback.callback())); + + scoped_ptr<net::ClientSocketHandle> socket_handle( + new net::ClientSocketHandle()); + socket_handle->SetSocket(std::move(fuzzed_socket)); + + net::HostResolver::RequestInfo request_info(net::HostPortPair("foo", 80)); + net::SOCKS5ClientSocket socket(std::move(socket_handle), request_info); + int result = socket.Connect(callback.callback()); + callback.GetResult(result); + return 0; +}
diff --git a/net/socket/socks_client_socket.cc b/net/socket/socks_client_socket.cc index 0f6e9255..b212f62 100644 --- a/net/socket/socks_client_socket.cc +++ b/net/socket/socks_client_socket.cc
@@ -417,7 +417,7 @@ reinterpret_cast<const SOCKS4ServerResponse*>(buffer_.data()); if (response->reserved_null != 0x00) { - LOG(ERROR) << "Unknown response from SOCKS server."; + DVLOG(1) << "Unknown response from SOCKS server."; return ERR_SOCKS_CONNECTION_FAILED; } @@ -426,18 +426,18 @@ completed_handshake_ = true; return OK; case kServerResponseRejected: - LOG(ERROR) << "SOCKS request rejected or failed"; + DVLOG(1) << "SOCKS request rejected or failed"; return ERR_SOCKS_CONNECTION_FAILED; case kServerResponseNotReachable: - LOG(ERROR) << "SOCKS request failed because client is not running " - << "identd (or not reachable from the server)"; + DVLOG(1) << "SOCKS request failed because client is not running " + << "identd (or not reachable from the server)"; return ERR_SOCKS_CONNECTION_HOST_UNREACHABLE; case kServerResponseMismatchedUserId: - LOG(ERROR) << "SOCKS request failed because client's identd could " - << "not confirm the user ID string in the request"; + DVLOG(1) << "SOCKS request failed because client's identd could " + << "not confirm the user ID string in the request"; return ERR_SOCKS_CONNECTION_FAILED; default: - LOG(ERROR) << "SOCKS server sent unknown response"; + DVLOG(1) << "SOCKS server sent unknown response"; return ERR_SOCKS_CONNECTION_FAILED; }
diff --git a/net/socket/socks_client_socket_fuzzer.cc b/net/socket/socks_client_socket_fuzzer.cc new file mode 100644 index 0000000..1c16921e --- /dev/null +++ b/net/socket/socks_client_socket_fuzzer.cc
@@ -0,0 +1,73 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/socket/socks_client_socket.h" + +#include <stddef.h> +#include <stdint.h> + +#include "base/logging.h" +#include "base/memory/scoped_ptr.h" +#include "base/message_loop/message_loop.h" +#include "net/base/address_list.h" +#include "net/base/net_errors.h" +#include "net/base/test_completion_callback.h" +#include "net/dns/host_resolver.h" +#include "net/dns/mock_host_resolver.h" +#include "net/log/test_net_log.h" +#include "net/socket/client_socket_handle.h" +#include "net/socket/fuzzed_socket.h" + +// Fuzzer for SocksClientSocket. Only covers the SOCKS4 handshake. +// +// |data| is used to create a FuzzedSocket to fuzz reads and writes, see that +// class for details. +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + // Needed for thread checks and waits. + base::MessageLoopForIO message_loop; + + // Use a test NetLog, to exercise logging code. + net::BoundTestNetLog bound_test_net_log; + + // Consume the last byte of |data| to determine if the DNS lookup returns + // synchronously or asynchronously, and succeeds or fails, and returns an IPv4 + // or IPv6 address. + net::MockHostResolver mock_host_resolver; + scoped_refptr<net::RuleBasedHostResolverProc> rules( + new net::RuleBasedHostResolverProc(nullptr)); + uint8_t resolver_result = 0; + if (size > 0) { + resolver_result = data[size - 1]; + size--; + } + mock_host_resolver.set_synchronous_mode(!!(resolver_result & 0x1)); + switch ((resolver_result >> 1) % 3) { + case 0: + rules->AddRule("*", "127.0.0.1"); + break; + case 1: + rules->AddRule("*", "::1"); + break; + case 2: + rules->AddSimulatedFailure("*"); + break; + } + mock_host_resolver.set_rules(rules.get()); + + net::TestCompletionCallback callback; + scoped_ptr<net::FuzzedSocket> fuzzed_socket( + new net::FuzzedSocket(data, size, bound_test_net_log.bound())); + CHECK_EQ(net::OK, fuzzed_socket->Connect(callback.callback())); + + scoped_ptr<net::ClientSocketHandle> socket_handle( + new net::ClientSocketHandle()); + socket_handle->SetSocket(std::move(fuzzed_socket)); + + net::HostResolver::RequestInfo request_info(net::HostPortPair("foo", 80)); + net::SOCKSClientSocket socket(std::move(socket_handle), request_info, + net::DEFAULT_PRIORITY, &mock_host_resolver); + int result = socket.Connect(callback.callback()); + callback.GetResult(result); + return 0; +}
diff --git a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java index 7f161937..80f6b1c 100644 --- a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java +++ b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
@@ -63,8 +63,6 @@ public class TestWebServer { private static final String TAG = "TestWebServer"; - public static final String SHUTDOWN_PREFIX = "/shutdown"; - private static TestWebServer sInstance; private static TestWebServer sSecureInstance; private static Hashtable<Integer, String> sReasons; @@ -169,31 +167,15 @@ } try { - // Avoid a deadlock between two threads where one is trying to call - // close() and the other one is calling accept() by sending a GET - // request for shutdown and having the server's one thread - // sequentially call accept() and close(). - URL url = new URL(mServerUri + SHUTDOWN_PREFIX); - URLConnection connection = openConnection(url); - connection.connect(); - - // Read the input from the stream to send the request. - InputStream is = connection.getInputStream(); - is.close(); - + mServerThread.cancelAllRequests(); // Block until the server thread is done shutting down. mServerThread.join(); - } catch (MalformedURLException e) { throw new IllegalStateException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); - } catch (NoSuchAlgorithmException e) { - throw new IllegalStateException(e); - } catch (KeyManagementException e) { - throw new IllegalStateException(e); } } @@ -476,9 +458,7 @@ synchronized (mLock) { response = mResponseMap.get(path); } - if (path.equals(SHUTDOWN_PREFIX)) { - httpResponse = createResponse(HttpStatus.SC_OK); - } else if (response == null) { + if (response == null) { httpResponse = createResponse(HttpStatus.SC_NOT_FOUND); } else if (response.mIsNotFound) { httpResponse = createResponse(HttpStatus.SC_NOT_FOUND); @@ -571,9 +551,12 @@ private TestWebServer mServer; private ServerSocket mSocket; private boolean mIsSsl; - private boolean mIsCancelled; private SSLContext mSslContext; + private final Object mLock = new Object(); + private boolean mIsCancelled; + private Socket mCurrentRequestSocket; + /** * Defines the keystore contents for the server, BKS version. Holds just a * single self-generated key. The subject name is "Test Server". @@ -625,6 +608,33 @@ return keyManagerFactory.getKeyManagers(); } + private void setCurrentRequestSocket(Socket socket) { + synchronized (mLock) { + mCurrentRequestSocket = socket; + } + } + + private boolean getIsCancelled() { + synchronized (mLock) { + return mIsCancelled; + } + } + + // Called from non-server thread. + public void cancelAllRequests() throws IOException { + synchronized (mLock) { + mIsCancelled = true; + if (mCurrentRequestSocket != null) { + try { + mCurrentRequestSocket.close(); + } catch (IOException ignored) { + // Catching this to ensure the server socket is closed as well. + } + } + } + // Any current and subsequent accept call will throw instead of block. + mSocket.close(); + } public ServerThread(TestWebServer server, int port, boolean ssl) throws Exception { super("ServerThread"); @@ -656,21 +666,17 @@ public void run() { HttpParams params = new BasicHttpParams(); params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_0); - while (!mIsCancelled) { + while (!getIsCancelled()) { Socket socket = null; try { socket = mSocket.accept(); + setCurrentRequestSocket(socket); + DefaultHttpServerConnection conn = new DefaultHttpServerConnection(); conn.bind(socket, params); - // Determine whether we need to shutdown early before - // parsing the response since conn.close() will crash - // for SSL requests due to UnsupportedOperationException. + if (getIsCancelled()) continue; HttpRequest request = conn.receiveRequestHeader(); - if (isShutdownRequest(request)) { - mIsCancelled = true; - } - HttpResponse response = mServer.getResponse(request); conn.sendResponseHeader(response); conn.sendResponseEntity(response); @@ -702,19 +708,6 @@ } } } - try { - mSocket.close(); - } catch (IOException ignored) { - // safe to ignore - } - } - - private boolean isShutdownRequest(HttpRequest request) { - RequestLine requestLine = request.getRequestLine(); - String uriString = requestLine.getUri(); - URI uri = URI.create(uriString); - String path = uri.getPath(); - return path.equals(SHUTDOWN_PREFIX); } } }
diff --git a/net/test/run_all_unittests.cc b/net/test/run_all_unittests.cc index e5ea900..5d605092 100644 --- a/net/test/run_all_unittests.cc +++ b/net/test/run_all_unittests.cc
@@ -10,6 +10,7 @@ #include "net/socket/ssl_server_socket.h" #include "net/spdy/spdy_session.h" #include "net/test/net_test_suite.h" +#include "url/url_features.h" #if defined(OS_ANDROID) #include "base/android/jni_android.h" @@ -20,7 +21,7 @@ #include "net/android/net_jni_registrar.h" #endif -#if defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) #include "url/android/url_jni_registrar.h" // nogncheck #endif @@ -42,7 +43,7 @@ {"NetAndroid", net::android::RegisterJni}, {"TestFileUtil", base::RegisterContentUriTestUtils}, {"TestUiThreadAndroid", base::RegisterTestUiThreadAndroid}, -#if defined(USE_ICU_ALTERNATIVES_ON_ANDROID) +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) {"UrlAndroid", url::android::RegisterJni}, #endif };
diff --git a/remoting/resources/remoting_strings_bg.xtb b/remoting/resources/remoting_strings_bg.xtb index 71779917..4ad6c48 100644 --- a/remoting/resources/remoting_strings_bg.xtb +++ b/remoting/resources/remoting_strings_bg.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Приемам</translation> <translation id="492843737083352574">Имам проблеми с клавиатурата или мишката.</translation> <translation id="4973800994433240357">С изтеглянето на инсталационната програма за хоста на Chromoting приемате <ph name="LINK_BEGIN" />Общите условия<ph name="LINK_END" /> на Google.</translation> +<translation id="4985296110227979402">Трябва първо да настроите компютъра си за отдалечен достъп</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (офлайн)</translation> <translation id="5070121137485264635">Отдалеченият хост изисква да удостоверите самоличността си пред уебсайт на трета страна. За да продължите, трябва да предоставите на отдалечения работен плот на Chrome допълнителни разрешения за достъп до този адрес:</translation> <translation id="5156271271724754543">Моля, въведете един и същ ПИН код и в двете полета.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Изход</translation> <translation id="5254120496627797685">Ако излезете от тази страница, сесията ви в отдалечения работен плот на Chrome ще приключи.</translation> <translation id="5308380583665731573">Свързване</translation> +<translation id="533625276787323658">Няма компютри, с които да се свържете</translation> <translation id="5363265567587775042">Помолете потребителя, до чийто компютър искате достъп, да кликне върху „<ph name="SHARE" />“ и да ви предостави съответния код.</translation> <translation id="5379087427956679853">Отдалеченият работен плот на Chrome ви позволява да споделяте надеждно компютъра си през мрежата. И двамата потребители трябва да изпълняват приложението, което може да бъде намерено на адрес <ph name="URL" />.</translation> <translation id="5394895745784982830">За Mac (OS X 10.6 и по-нови версии)</translation>
diff --git a/remoting/resources/remoting_strings_bn.xtb b/remoting/resources/remoting_strings_bn.xtb index da67c584..99ecd33 100644 --- a/remoting/resources/remoting_strings_bn.xtb +++ b/remoting/resources/remoting_strings_bn.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">স্বীকার</translation> <translation id="492843737083352574">আমার কীবোর্ড বা মাউসের সমস্যা হয়েছে।</translation> <translation id="4973800994433240357">Chromoting হোস্ট ইনস্টলার ডাউনলোড করার মাধ্যমে আপনি Google <ph name="LINK_BEGIN" />পরিষেবার শর্তাবলি<ph name="LINK_END" /> স্বীকার করছেন।</translation> +<translation id="4985296110227979402">দূরবর্তী অ্যাক্সেসের জন্য প্রথমে আপনার কম্পিউটার সেট আপ করা প্রয়োজন</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (অফলাইন)</translation> <translation id="5070121137485264635">একটি তৃতীয়-পক্ষ ওয়েবসাইট প্রমাণীকরণ করতে রিমোট হোস্টটির আপনাকে প্রয়োজন। অবিরত রাখতে, এই ওয়েবসাইট অ্যাক্সেস করতে আপনাকে অবশ্যই Chrome দূরবর্তী ডেস্কটপ অতিরিক্ত অনুমতির মঞ্জুরি দিতে হবে:</translation> <translation id="5156271271724754543">উভয় বক্সে দয়া করে একই পিন লিখুন৷</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">সাইন আউট</translation> <translation id="5254120496627797685">এই পৃষ্ঠাটি ছেড়ে গেলেও সেটা আপনার Chrome দূরবর্তী ডেস্কটপ অধিবেশনটিকে শেষ করবে৷</translation> <translation id="5308380583665731573">সংযুক্ত করুন</translation> +<translation id="533625276787323658">এমন কিছু নেই যাতে সংযোগ করা যায়</translation> <translation id="5363265567587775042">“<ph name="SHARE" />” এ ক্লিক করতে এবং আপনাকে অ্যাক্সেস কোড দিতে আপনি কার কম্পিউটার অ্যাক্সেস করতে চান তা ব্যবহারকারিকে জিজ্ঞেস করুন।</translation> <translation id="5379087427956679853">Chrome দূরবর্তী ডেস্কটপ আপনাকে ওয়েবে আপনার কম্পিউটার নিরাপদভাবে শেয়ার করার মঞ্জুরি দেয়৷ উভয় ব্যবহারকারীকেই Chrome দূরবর্তী ডেস্কটপ অ্যাপ্লিকেশন চালাতে হবে যা <ph name="URL" />এ পেতে পারেন৷</translation> <translation id="5394895745784982830">Mac এর জন্য (OS X 10.6 ও এর উর্ধ্বে)</translation>
diff --git a/remoting/resources/remoting_strings_ca.xtb b/remoting/resources/remoting_strings_ca.xtb index b8ab70d..44eaa26 100644 --- a/remoting/resources/remoting_strings_ca.xtb +++ b/remoting/resources/remoting_strings_ca.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Accepta</translation> <translation id="492843737083352574">Tinc problemes amb el teclat o amb el ratolí.</translation> <translation id="4973800994433240357">En baixar l'instal·lador de l'amfitrió de Chromoting accepteu les <ph name="LINK_BEGIN" />Condicions del servei<ph name="LINK_END" /> de Google.</translation> +<translation id="4985296110227979402">Primer heu de configurar l'accés remot al vostre ordinador.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (fora de línia)</translation> <translation id="5070121137485264635">L'amfitrió remot necessita que us autentiqueu en un lloc web de tercers. Per continuar, cal que concediu permisos addicionals a l'escriptori remot de Chrome per accedir a aquesta adreça:</translation> <translation id="5156271271724754543">Introduïu el mateix PIN als dos quadres.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Tanca la sessió</translation> <translation id="5254120496627797685">Si sortiu d'aquesta pàgina, la sessió de l'escriptori remot de Chrome finalitzarà.</translation> <translation id="5308380583665731573">Connexió</translation> +<translation id="533625276787323658">No hi ha cap ordinador per connectar-s'hi</translation> <translation id="5363265567587775042">Demaneu a l'usuari de l'ordinador al qual voleu accedir que faci clic a <ph name="SHARE" /> i que us faciliti el codi d'accés.</translation> <translation id="5379087427956679853">L'escriptori remot de Chrome us permet compartir el vostre ordinador de manera segura al web. Els dos usuaris han d'executar l'aplicació d'escriptori remot de Chrome, que podeu trobar a la pàgina <ph name="URL" />.</translation> <translation id="5394895745784982830">Per a Mac (OS X 10.6 i versions posteriors)</translation>
diff --git a/remoting/resources/remoting_strings_cs.xtb b/remoting/resources/remoting_strings_cs.xtb index 0d903974..7dd4f8a 100644 --- a/remoting/resources/remoting_strings_cs.xtb +++ b/remoting/resources/remoting_strings_cs.xtb
@@ -166,6 +166,7 @@ <translation id="4918086044614829423">Přijmout</translation> <translation id="492843737083352574">Mám problémy s klávesnicí nebo myší.</translation> <translation id="4973800994433240357">Stažením instalačního programu hostitele funkce Chromoting vyjadřujete souhlas se <ph name="LINK_BEGIN" />smluvními podmínkami<ph name="LINK_END" /> společnosti Google.</translation> +<translation id="4985296110227979402">Nejdříve je potřeba v počítači nastavit vzdálený přístup.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Vzdálený hostitelský server vyžaduje, abyste provedli ověření na stránce třetí strany. Aby bylo možné pokračovat, je nutné udělit Vzdálené ploše Chrome dodatečná oprávnění k přístupu na tuto adresu:</translation> <translation id="5156271271724754543">Zadejte do obou polí stejný kód PIN.</translation> @@ -175,6 +176,7 @@ <translation id="5222676887888702881">Odhlásit se</translation> <translation id="5254120496627797685">Pokud opustíte tuto stránku, relace Vzdálené plochy Chrome bude ukončena.</translation> <translation id="5308380583665731573">Připojení</translation> +<translation id="533625276787323658">Není k dispozici žádné zařízení, ke kterému by bylo možné se připojit.</translation> <translation id="5363265567587775042">Požádejte uživatele, k jehož počítači chcete získat přístup, aby kliknul na tlačítko <ph name="SHARE" /> a dal vám přístupový kód.</translation> <translation id="5379087427956679853">Vzdálená plocha Chrome vám umožňuje bezpečně sdílet svůj počítač přes internet. Oba uživatelé musí mít spuštěnou aplikaci Vzdálená plocha Chrome, kterou najdete na adrese <ph name="URL" />.</translation> <translation id="5394895745784982830">Pro Mac (OS X 10.6 a novější)</translation>
diff --git a/remoting/resources/remoting_strings_da.xtb b/remoting/resources/remoting_strings_da.xtb index 33b33137..313d948 100644 --- a/remoting/resources/remoting_strings_da.xtb +++ b/remoting/resources/remoting_strings_da.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Accepter</translation> <translation id="492843737083352574">Jeg har problemer med mit tastatur eller min mus.</translation> <translation id="4973800994433240357">Når du downloader installationsprogrammet til Chromoting-host, accepterer du automatisk Google <ph name="LINK_BEGIN" />Servicevilkår<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Du skal først konfigurere din computer til fjernadgang</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Fjernværten kræver, at du bekræftes over for et tredjepartswebsite. Du skal give Chrome Fjernskrivebord yderligere tilladelser til at få adgang til denne adresse, før du kan fortsætte:</translation> <translation id="5156271271724754543">Indtast den samme pinkode i begge felter.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Log ud</translation> <translation id="5254120496627797685">Hvis du forlader denne side, afsluttes din session med Chrome Fjernskrivebord.</translation> <translation id="5308380583665731573">Få forbindelse</translation> +<translation id="533625276787323658">Der er intet at oprette forbindelse til</translation> <translation id="5363265567587775042">Bed den bruger, hvis computer du ønsker at få adgang til, om at klikke på "<ph name="SHARE" />" for at give dig adgangskoden.</translation> <translation id="5379087427956679853">Med Chrome Fjernskrivebord får du mulighed for sikkert at dele din computer via internettet. Begge brugere skal køre appen Chrome Fjernskrivebord, som kan findes på <ph name="URL" />.</translation> <translation id="5394895745784982830">Til Mac (OS X 10.6 og nyere)</translation>
diff --git a/remoting/resources/remoting_strings_de.xtb b/remoting/resources/remoting_strings_de.xtb index b4b1fa63..080b7c8 100644 --- a/remoting/resources/remoting_strings_de.xtb +++ b/remoting/resources/remoting_strings_de.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Annehmen</translation> <translation id="492843737083352574">Ich habe Probleme mit meiner Tastatur oder meiner Maus.</translation> <translation id="4973800994433240357">Indem Sie das Chromoting Host-Installationsprogramm herunterladen, erklären Sie sich mit den <ph name="LINK_BEGIN" />Nutzungsbedingungen von Google<ph name="LINK_END" /> einverstanden.</translation> +<translation id="4985296110227979402">Richten Sie zuerst Ihren Computer für den Remotezugriff ein</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Der Remote-Host verlangt, dass Sie sich über eine Drittanbieter-Website authentifizieren. Um fortfahren zu können, geben Sie Chrome Remote Desktop zusätzliche Berechtigungen für den Zugriff auf die folgende Adresse:</translation> <translation id="5156271271724754543">Die PIN muss in beiden Feldern identisch sein.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Abmelden</translation> <translation id="5254120496627797685">Wenn Sie diese Seite verlassen, wird Ihre Chrome Remote Desktop-Sitzung beendet.</translation> <translation id="5308380583665731573">Verbinden</translation> +<translation id="533625276787323658">Es gibt keine Verbindungsziele</translation> <translation id="5363265567587775042">Bitten Sie den Nutzer, auf dessen Computer Sie zugreifen möchten, auf "<ph name="SHARE" />" zu klicken und Ihnen den Zugriffscode zu geben.</translation> <translation id="5379087427956679853">Chrome Remote Desktop ermöglicht die sichere Freigabe Ihres Computers über das Internet. Beide Nutzer müssen dazu die Chrome Remote Desktop App ausführen. Diese App finden Sie unter <ph name="URL" />.</translation> <translation id="5394895745784982830">Für Mac OS X 10.6 und höher</translation>
diff --git a/remoting/resources/remoting_strings_el.xtb b/remoting/resources/remoting_strings_el.xtb index f66e787..9f4d0a1 100644 --- a/remoting/resources/remoting_strings_el.xtb +++ b/remoting/resources/remoting_strings_el.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Αποδοχή</translation> <translation id="492843737083352574">Έχω πρόβλημα με το πληκτρολόγιο ή το ποντίκι μου.</translation> <translation id="4973800994433240357">Με τη λήψη του προγράμματος εγκατάστασης κεντρικού υπολογιστή Chromoting, αποδέχεστε τους <ph name="LINK_BEGIN" />Όρους Παροχής Υπηρεσιών<ph name="LINK_END" /> της Google.</translation> +<translation id="4985296110227979402">Θα πρέπει πρώτα να ρυθμίσετε τον υπολογιστή σας για απομακρυσμένη πρόσβαση</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (εκτός σύνδεσης)</translation> <translation id="5070121137485264635">Ο απομακρυσμένος κεντρικός υπολογιστής ζήτησε τον έλεγχο της ταυτότητάς σας στον ιστότοπο ενός τρίτου μέρους. Για να συνεχίσετε, θα πρέπει να παραχωρήσετε στην Απομακρυσμένη επιφάνεια εργασίας Chrome επιπλέον άδειες για πρόσβαση σε αυτήν τη διεύθυνση:</translation> <translation id="5156271271724754543">Εισαγάγετε το ίδιο PIN και στα δύο πλαίσια.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Έξοδος</translation> <translation id="5254120496627797685">Εάν απομακρυνθείτε από αυτήν τη σελίδα, θα τερματιστείη περίοδος σύνδεσης στην Απομακρυσμένη επιφάνεια εργασίας Chrome.</translation> <translation id="5308380583665731573">Σύνδεση</translation> +<translation id="533625276787323658">Δεν υπάρχουν συσκευές για σύνδεση</translation> <translation id="5363265567587775042">Ζητήστε από το χρήστη στον υπολογιστή του οποίου, επιθυμείτε να αποκτήσετε πρόσβαση να κάνει κλικ στην επιλογή "<ph name="SHARE" />" και να σας δώσει τον κωδικό πρόσβασης.</translation> <translation id="5379087427956679853">Η Απομακρυσμένη επιφάνεια εργασίας Chrome σάς επιτρέπει να μοιράζεστε με ασφάλεια τον υπολογιστή σας μέσω Ιστού. Και οι δύο χρήστες θα πρέπει να εκτελούν την εφαρμογή Απομακρυσμένη επιφάνεια εργασίας Chrome, η οποία βρίσκεται στη διεύθυνση <ph name="URL" />.</translation> <translation id="5394895745784982830">Για Mac (έκδοση OS X 10.6 και νεότερη)</translation>
diff --git a/remoting/resources/remoting_strings_es-419.xtb b/remoting/resources/remoting_strings_es-419.xtb index 3226910..e610f0d 100644 --- a/remoting/resources/remoting_strings_es-419.xtb +++ b/remoting/resources/remoting_strings_es-419.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Aceptar</translation> <translation id="492843737083352574">Tengo problemas con el teclado o el mouse.</translation> <translation id="4973800994433240357">Al descargar el instalador del host de Chromoting, aceptas las <ph name="LINK_BEGIN" />Condiciones del servicio<ph name="LINK_END" /> de Google.</translation> +<translation id="4985296110227979402">Para tener acceso remoto, primero debes configurar la computadora</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (sin conexión)</translation> <translation id="5070121137485264635">El host remoto requiere la autenticación de un sitio web de terceros. Para continuar, debes otorgar permisos adicionales al Escritorio remoto de Chrome para acceder a la siguiente dirección:</translation> <translation id="5156271271724754543">Ingresa el mismo PIN en ambos cuadros.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Salir</translation> <translation id="5254120496627797685">Al abandonar esta página, se cerrará la sesión en el Escritorio remoto de Chrome.</translation> <translation id="5308380583665731573">Conectar</translation> +<translation id="533625276787323658">No hay ninguna computadora con la cual conectarse</translation> <translation id="5363265567587775042">Solicita al usuario a cuya computadora quieres tener acceso que haga clic en "<ph name="SHARE" />" y te envíe el código de acceso correspondiente.</translation> <translation id="5379087427956679853">Escritorio remoto de Chrome te permite compartir tu computadora con otro usuario de manera segura en la Web. Tanto tú como el otro usuario deben usar la aplicación Escritorio remoto de Chrome, que está disponible en <ph name="URL" />.</translation> <translation id="5394895745784982830">Para Mac (SO X 10.6 y versiones posteriores)</translation>
diff --git a/remoting/resources/remoting_strings_es.xtb b/remoting/resources/remoting_strings_es.xtb index f6df3cf..51a6a7a 100644 --- a/remoting/resources/remoting_strings_es.xtb +++ b/remoting/resources/remoting_strings_es.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Aceptar</translation> <translation id="492843737083352574">Tengo problemas con mi teclado o con el ratón.</translation> <translation id="4973800994433240357">Al descargar el programa de instalación del host de Chromoting, aceptas las <ph name="LINK_BEGIN" />Condiciones de Servicio<ph name="LINK_END" /> de Google.</translation> +<translation id="4985296110227979402">En primer lugar, debes configurar el acceso remoto a tu ordenador</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (sin conexión)</translation> <translation id="5070121137485264635">El host remoto requiere tu autenticación en un sitio web de terceros. Para continuar, debes conceder a la aplicación Escritorio remoto de Chrome permisos adicionales para acceder a la siguiente dirección:</translation> <translation id="5156271271724754543">Debes introducir el mismo PIN en los dos cuadros.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Cerrar sesión</translation> <translation id="5254120496627797685">Si abandonas esta página, finalizará tu sesión en Escritorio remoto de Chrome.</translation> <translation id="5308380583665731573">Conectar</translation> +<translation id="533625276787323658">No hay ningún ordenador al que conectarse</translation> <translation id="5363265567587775042">Pregunta al usuario el ordenador al que se quiere acceder para hacer clic en <ph name="SHARE" /> y proporcionar el código de acceso.</translation> <translation id="5379087427956679853">Escritorio remoto de Chrome permite compartir de forma segura tu ordenador a través de Internet. Ambos usuarios deben estar ejecutando la aplicación Escritorio remoto de Chrome, que está disponible en la página <ph name="URL" />.</translation> <translation id="5394895745784982830">Para Mac (OS X 10.6 y versiones superiores)</translation>
diff --git a/remoting/resources/remoting_strings_et.xtb b/remoting/resources/remoting_strings_et.xtb index 605a7fb..443b975 100644 --- a/remoting/resources/remoting_strings_et.xtb +++ b/remoting/resources/remoting_strings_et.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Nõustu</translation> <translation id="492843737083352574">Mul on probleeme klaviatuuri või hiirega.</translation> <translation id="4973800994433240357">Chromootimise hosti installiprogrammi allalaadimisel nõustute Google’i <ph name="LINK_BEGIN" />teenusetingimustega<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Esmalt tuleb arvutis seadistada kaugjuurdepääs</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (võrguühenduseta)</translation> <translation id="5070121137485264635">Kaughost vajab autentimist kolmanda osapoole veebisaidil. Jätkamiseks peate andma Chrome Remote Desktopile täiendavad load juurdepääsuks sellele aadressile:</translation> <translation id="5156271271724754543">Sisestage mõlemale väljale sama PIN-kood.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Logi välja</translation> <translation id="5254120496627797685">Lehelt lahkudes katkeb teie Chrome Remote Desktopi seanss.</translation> <translation id="5308380583665731573">Ühendamine</translation> +<translation id="533625276787323658">Ühegi seadmega ei saa ühendust luua</translation> <translation id="5363265567587775042">Paluge kasutajal, kelle arvutile soovite juurde pääseda, klõpsata nupul „<ph name="SHARE" />” ja anda teile juurdepääsukood.</translation> <translation id="5379087427956679853">Chrome Remote Desktop võimaldab arvutit turvaliselt veebi kaudu jagada. Mõlema kasutaja arvutis peab töötama rakendus Chrome Remote Desktop, mille leiate aadressilt <ph name="URL" />.</translation> <translation id="5394895745784982830">Macile (OS X 10.6 ja uuemad versioonid)</translation>
diff --git a/remoting/resources/remoting_strings_fa.xtb b/remoting/resources/remoting_strings_fa.xtb index ae00410e..43253935 100644 --- a/remoting/resources/remoting_strings_fa.xtb +++ b/remoting/resources/remoting_strings_fa.xtb
@@ -164,6 +164,7 @@ <translation id="4918086044614829423">میپذیرم</translation> <translation id="492843737083352574">با صفحهکلید یا موشوارهام مشکل دارم.</translation> <translation id="4973800994433240357">با دانلود «نصبکننده میزبان Chromoting»، موافقتتان را با <ph name="LINK_BEGIN" />شرایط خدمات<ph name="LINK_END" /> Google اعلام میکنید.</translation> +<translation id="4985296110227979402">ابتدا باید رایانهتان را برای دسترسی از راه دور تنظیم کنید</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (آفلاین)</translation> <translation id="5070121137485264635">میزبان راه دور از شما میخواهد که در وب سایت شخص ثالثی تأیید هویت شوید. برای ادامه، باید با مجوزهای اضافی «کنترل کامپیوتر از راه دور Chrome» برای دستیابی به این آدرس موافقت کنید:</translation> <translation id="5156271271724754543">لطفاً یک پین یکسان را در هر دو کادر وارد کنید.</translation> @@ -173,6 +174,7 @@ <translation id="5222676887888702881">خروج از سیستم</translation> <translation id="5254120496627797685">با خارج شدن از این صفحه، جلسه کنترل دسکتاپ از راه دور Chrome تمام میشود.</translation> <translation id="5308380583665731573">اتصال</translation> +<translation id="533625276787323658">چیزی برای اتصال وجود ندارد</translation> <translation id="5363265567587775042">از کاربری که میخواهید به رایانهاش دسترسی داشته باشید بخواهید روی «<ph name="SHARE" />» کلیک کند و کد دسترسی را به شما بدهد.</translation> <translation id="5379087427956679853">کنترل دسکتاپ از راه دور Chrome به شما اجازه میدهد بطور امن رایانه خود را در وب به اشتراک بگذارید. هر دو کاربر باید برنامه کنترل دسکتاپ از راه دور Chrome را اجرا کنند، این برنامه در <ph name="URL" /> یافت میشود.</translation> <translation id="5394895745784982830">برای Mac (OS X نسخه ۱۰٫۶ و بالاتر)</translation>
diff --git a/remoting/resources/remoting_strings_fi.xtb b/remoting/resources/remoting_strings_fi.xtb index c3340e1..6a643268 100644 --- a/remoting/resources/remoting_strings_fi.xtb +++ b/remoting/resources/remoting_strings_fi.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Hyväksy</translation> <translation id="492843737083352574">Näppäimistö tai hiiri tuottaa ongelmia.</translation> <translation id="4973800994433240357">Lataamalla Chromoting-isännän asennusohjelman hyväksyt Googlen <ph name="LINK_BEGIN" />käyttöehdot<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Määritä ensin tietokone, johon haluat muodostaa etäyhteyden.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Etäisäntä edellyttää todennusta kolmannen osapuolen sivustossa. Jos haluat jatkaa, anna Chrome-etäkäytölle lisäkäyttölupia tämän osoitteen avaamiseksi:</translation> <translation id="5156271271724754543">Kirjoita sama PIN-koodi molempiin ruutuihin.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Kirjaudu ulos</translation> <translation id="5254120496627797685">Vaihtamalla sivua päätät Chrome-etäkäyttökerran.</translation> <translation id="5308380583665731573">Muodosta yhteys</translation> +<translation id="533625276787323658">Et ole määrittänyt etätietokoneita.</translation> <translation id="5363265567587775042">Ota yhteyttä käyttäjään, jonka tietokonetta haluat käyttää. Pyydä häntä klikkaamaan <ph name="SHARE" /> ja antamaan käyttökoodi sinulle.</translation> <translation id="5379087427956679853">Chrome-etäkäyttösovelluksen avulla voit jakaa tietokoneesi suojatun verkkoyhteyden kautta. Molempien käyttäjien täytyy käyttää osoitteesta <ph name="URL" /> löytyvää Chrome-etäkäyttösovellusta.</translation> <translation id="5394895745784982830">Mac (OS X 10.6 ja uudemmat versiot)</translation>
diff --git a/remoting/resources/remoting_strings_fr.xtb b/remoting/resources/remoting_strings_fr.xtb index 44e3c32..226bcdf 100644 --- a/remoting/resources/remoting_strings_fr.xtb +++ b/remoting/resources/remoting_strings_fr.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Accepter</translation> <translation id="492843737083352574">Je rencontre des problèmes avec mon clavier ou ma souris.</translation> <translation id="4973800994433240357">En téléchargeant le programme d'installation de l'hôte Chromoting, vous acceptez les <ph name="LINK_BEGIN" />Conditions d'utilisation<ph name="LINK_END" /> de Google.</translation> +<translation id="4985296110227979402">Vous devez tout d'abord configurer votre ordinateur pour l'accès à distance.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (hors connexion)</translation> <translation id="5070121137485264635">L'hôte distant nécessite votre authentification auprès d'un site Web tiers. Pour continuer, vous devez accorder au Bureau à distance Chrome des autorisations supplémentaires afin d'accéder à l'adresse suivante :</translation> <translation id="5156271271724754543">Veuillez saisir le même code d'accès dans les deux champs.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Déconnexion</translation> <translation id="5254120496627797685">En quittant cette page, vous mettrez fin à la session du bureau à distance Google Chrome.</translation> <translation id="5308380583665731573">Connexion</translation> +<translation id="533625276787323658">Aucun appareil auquel se connecter.</translation> <translation id="5363265567587775042">Demandez à l'utilisateur de l'ordinateur auquel vous souhaitez accéder de cliquer sur "<ph name="SHARE" />" et de vous donner le code d'accès.</translation> <translation id="5379087427956679853">L'application Bureau à distance Google Chrome vous permet de partager votre ordinateur sur le Web en toute sécurité. Pour ce faire, les deux utilisateurs en question doivent exécuter cette application, disponible à l'adresse <ph name="URL" />.</translation> <translation id="5394895745784982830">Pour Mac (OS X 10.6 ou version ultérieure)</translation>
diff --git a/remoting/resources/remoting_strings_gu.xtb b/remoting/resources/remoting_strings_gu.xtb index c0c07cb2..2440f13d 100644 --- a/remoting/resources/remoting_strings_gu.xtb +++ b/remoting/resources/remoting_strings_gu.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">સ્વીકારો</translation> <translation id="492843737083352574">મને મારા કીબોર્ડ અથવા માઉસમાં સમસ્યાઓ આવી રહી છે.</translation> <translation id="4973800994433240357">Chromoting હોસ્ટ ઇન્સ્ટોલરને ડાઉનલોડ કરીને, તમે Google <ph name="LINK_BEGIN" />સેવાની શરતો<ph name="LINK_END" />થી સંમત થાઓ છો.</translation> +<translation id="4985296110227979402">તમારે પહેલા તમારા કમ્પ્યુટરને રીમોટ ઍક્સેસ માટે સેટ કરવાની જરૂર છે</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ઑફલાઇન)</translation> <translation id="5070121137485264635">રીમોટ હોસ્ટને તમે તૃતીય-પક્ષ વેબસાઇટને અધિકૃત કરો તેની આવશ્યકતા છે. ચાલુ રાખવા માટે, તમારે આ સરનામાંને ઍક્સેસ કરવા માટે Chrome રીમોટ ડેસ્કટૉપને અતિરિક્ત પરવાનગીઓ આપવી પડશે:</translation> <translation id="5156271271724754543">કૃપા કરીને બંને બૉક્સમાં સમાન PIN દાખલ કરો.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">સાઇન આઉટ</translation> <translation id="5254120496627797685">આ પૃષ્ઠ છોડવું તમારા Chrome રીમોટ ડેસ્કટૉપ સત્રને સમાપ્ત કરશે.</translation> <translation id="5308380583665731573">કનેક્ટ કરો</translation> +<translation id="533625276787323658">કનેક્ટ કરવા માટે કંઈ નથી</translation> <translation id="5363265567587775042">તમે જે વપરાશકર્તાનું કમ્પ્યુટર ઍક્સેસ કરવા માંગતા હોવ તેને “<ph name="SHARE" />” પર ક્લિક કરવાનું અને તમને ઍક્સેસ કોડ આપવાનું કહો.</translation> <translation id="5379087427956679853">Chrome રીમોટ ડેસ્કટૉપ તમને વેબ પર તમારા કમ્પ્યુટરને સુરક્ષિત રીતે શેર કરવાની મંજૂરી આપે છે. બંને વપરાશકર્તાઓ Chrome રીમોટ ડેસ્કટોપ એપ્લિકેશન ચલાવી શકે છે, જે <ph name="URL" /> પર મેળવી શકાય છે.</translation> <translation id="5394895745784982830">Mac (OS X 10.6 અને એ પછીના સંસ્કરણ) માટે</translation>
diff --git a/remoting/resources/remoting_strings_hi.xtb b/remoting/resources/remoting_strings_hi.xtb index 882dd2f34..b93095f3 100644 --- a/remoting/resources/remoting_strings_hi.xtb +++ b/remoting/resources/remoting_strings_hi.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">स्वीकार करें</translation> <translation id="492843737083352574">मुझे अपने कीबोर्ड या माउस के साथ समस्या आ रही है.</translation> <translation id="4973800994433240357">Chromoting होस्ट इंस्टॉलर को डाउनलोड करके, आप Google की <ph name="LINK_BEGIN" />सेवा की शर्तों<ph name="LINK_END" /> से सहमत होते हैं.</translation> +<translation id="4985296110227979402">आपको सबसे पहले अपने कंप्यूटर को दूरस्थ एक्सेस के लिए सेट करना होगा</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ऑफ़लाइन)</translation> <translation id="5070121137485264635">दूरस्थ होस्ट के लिए आवश्यक है कि आप किसी तृतीय-पक्ष की वेबसाइट प्रमाणीकृत करें. जारी रखने के लिए, आपको Chrome दूरस्थ डेस्कटॉप को इस पते को एक्सेस करने के लिए अतिरिक्त अनुमतियां देनी होंगी:</translation> <translation id="5156271271724754543">कृपया दोनों बॉक्स में समान पिन दर्ज करें.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">प्रस्थान करें</translation> <translation id="5254120496627797685">इस पृष्ठ को छोड़ देने पर आपका Chrome दूरस्थ डेस्कटॉप सत्र समाप्त हो जाएगा.</translation> <translation id="5308380583665731573">कनेक्ट करें</translation> +<translation id="533625276787323658">कनेक्ट करने के लिए कुछ भी नहीं है</translation> <translation id="5363265567587775042">जिस उपयोगकर्ता का कंप्यूटर आप ऐक्सेस करना चाहते हैं, उसे “<ph name="SHARE" />” क्लिक करने और आपको ऐक्सेस कोड देने के लिए कहें.</translation> <translation id="5379087427956679853">Chrome दूरस्थ डेस्कटॉप आपको वेब पर आपका कंप्यूटर सुरक्षित रूप से साझा करने देता है. दोनों उपयोगकर्ताओं के पास Chrome दूरस्थ डेस्कटॉप ऐप्स अवश्य चलना चाहिए, जो कि <ph name="URL" /> पर मिल सकता है.</translation> <translation id="5394895745784982830">Mac के लिए (OS X 10.6 और बाद वाले वर्शन)</translation>
diff --git a/remoting/resources/remoting_strings_hr.xtb b/remoting/resources/remoting_strings_hr.xtb index d2cc8af..741a87b1 100644 --- a/remoting/resources/remoting_strings_hr.xtb +++ b/remoting/resources/remoting_strings_hr.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Prihvati</translation> <translation id="492843737083352574">Imam problema s tipkovnicom ili mišem.</translation> <translation id="4973800994433240357">Preuzimanjem programa za instalaciju hosta Chromotinga prihvaćate Googleove <ph name="LINK_BEGIN" />Uvjete pružanja usluge<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Prvo morate postaviti računalo za daljinski pristup</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (van mreže)</translation> <translation id="5070121137485264635">Udaljeni host zahtijeva autentifikaciju web-lokacije treće strane. Da biste nastavili, morate dati Udaljenoj radnoj površini Chrome dodatne dozvole za pristup ovoj adresi:</translation> <translation id="5156271271724754543">Unesite isti PIN u oba polja.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Odjava</translation> <translation id="5254120496627797685">Ako napustite ovu stranicu, završit će vaša sesija u aplikaciji Udaljena radna površina Chrome.</translation> <translation id="5308380583665731573">Povežite se</translation> +<translation id="533625276787323658">Nema dostupnih računala za povezivanje</translation> <translation id="5363265567587775042">Zamolite korisnika čijem računalu želite pristupiti da klikne "<ph name="SHARE" />" i da vam pristupni kôd.</translation> <translation id="5379087427956679853">Udaljena radna površina Chrome omogućuje vam da svoje računalo sigurno dijelite putem weba. Na računalima oba korisnika mora biti pokrenuta aplikacija Udaljena radna površina Chrome koju možete pronaći na web-lokaciji <ph name="URL" />.</translation> <translation id="5394895745784982830">Za Mac (OS X 10.6 i novije verzije)</translation>
diff --git a/remoting/resources/remoting_strings_hu.xtb b/remoting/resources/remoting_strings_hu.xtb index 70b5e58..ddecec27 100644 --- a/remoting/resources/remoting_strings_hu.xtb +++ b/remoting/resources/remoting_strings_hu.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Elfogadás</translation> <translation id="492843737083352574">Problémám adódott a billentyűzetemmel vagy az egeremmel.</translation> <translation id="4973800994433240357">A Chromoting gazdagép-telepítő letöltésével elfogadja a Google <ph name="LINK_BEGIN" />Általános Szerződési Feltételeit<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Előbb be kell állítania számítógépén a távoli hozzáférést.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">A távoli gazdagép hitelesítést kér egy harmadik féltől származó webhelyhez. A folytatáshoz további engedélyeket kell adnia a Chrome távoliasztal-szolgáltatásnak a cím eléréséhez:</translation> <translation id="5156271271724754543">Kérjük, ugyanazt a PIN kódot adja meg mindkét mezőben.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Kijelentkezés</translation> <translation id="5254120496627797685">Ha elhagyja ezt az oldalt, akkor befejeződik a Chrome távoliasztal-szolgáltatás munkamenete.</translation> <translation id="5308380583665731573">Csatlakozás</translation> +<translation id="533625276787323658">Nincs mihez csatlakozni.</translation> <translation id="5363265567587775042">Kérje meg a felhasználót, akinek számítógépéhez megpróbál hozzáférni, hogy kattintson a „<ph name="SHARE" />” lehetőségre, és adja meg Önnek a hozzáférési kódot.</translation> <translation id="5379087427956679853">A Chrome távoliasztal-szolgáltatás lehetővé teszi a számítógép biztonságos megosztását az interneten keresztül. Mindkét felhasználónál futnia kell a Chrome távoliasztal-szolgáltatás alkalmazásnak, amely itt található: <ph name="URL" />.</translation> <translation id="5394895745784982830">Mac típusú számítógépekhez (OS X 10.6 és újabb)</translation>
diff --git a/remoting/resources/remoting_strings_id.xtb b/remoting/resources/remoting_strings_id.xtb index df4453f..0a7c2681 100644 --- a/remoting/resources/remoting_strings_id.xtb +++ b/remoting/resources/remoting_strings_id.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Terima</translation> <translation id="492843737083352574">Saya mengalami masalah dengan keyboard atau mouse.</translation> <translation id="4973800994433240357">Dengan mengunduh Pemasang Host Chrome Desktop Jarak Jauh, Anda menyetujui <ph name="LINK_BEGIN" />Persyaratan Layanan<ph name="LINK_END" /> Google.</translation> +<translation id="4985296110227979402">Pertama, Anda perlu menyiapkan komputer untuk akses jarak jauh</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Hosting jarak jauh mewajibkan Anda mengautentikasi ke situs web pihak ketiga. Untuk melanjutkan, Anda harus memberikan izin tambahan ke Chrome Desktop Jarak Jauh untuk mengakses alamat ini:</translation> <translation id="5156271271724754543">Masukkan PIN yang sama di kedua kotak.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Keluar</translation> <translation id="5254120496627797685">Dengan meninggalkan laman ini, Anda akan mengakhiri sesi Chrome Desktop Jarak Jauh.</translation> <translation id="5308380583665731573">Sambungkan</translation> +<translation id="533625276787323658">Perangkat sambungan belum disiapkan</translation> <translation id="5363265567587775042">Minta pengguna yang menggunakan komputer yang ingin Anda akses untuk mengeklik “<ph name="SHARE" />” dan memberikan kode akses kepada Anda.</translation> <translation id="5379087427956679853">Chrome Desktop Jarak Jauh memungkinkan Anda berbagi komputer melalui web dengan aman. Kedua pengguna harus menjalankan aplikasi Chrome Desktop Jarak Jauh yang dapat ditemukan di <ph name="URL" />.</translation> <translation id="5394895745784982830">Untuk Mac (OS X 10.6 dan yang lebih tinggi)</translation>
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb index d9909716..80b3a5f 100644 --- a/remoting/resources/remoting_strings_iw.xtb +++ b/remoting/resources/remoting_strings_iw.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">אשר</translation> <translation id="492843737083352574">נתקלתי בקשיים עם המקלדת או העכבר.</translation> <translation id="4973800994433240357">בהורדת מנהל ההתקנה של מארח Chromoting, אתה מביע הסכמה ל<ph name="LINK_BEGIN" />תנאים ולהגבלות<ph name="LINK_END" /> של Google.</translation> +<translation id="4985296110227979402">תחילה עליך להגדיר את המחשב שלך לגישה מרחוק</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (לא מקוון)</translation> <translation id="5070121137485264635">המארח המרוחק דורש שתבצע אימות מול אתר של צד שלישי. כדי להמשיך, עליך להעניק לשולחן העבודה המרוחק של Chrome הרשאות נוספות כדי לגשת לכתובת זו:</translation> <translation id="5156271271724754543">הזן את אותו PIN בשתי התיבות.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">יציאה</translation> <translation id="5254120496627797685">יציאה מדף זה תגרום לסיום הפעילות של 'שולחן עבודה מרוחק של Chrome'.</translation> <translation id="5308380583665731573">התחברות</translation> +<translation id="533625276787323658">אין מחשבים שניתן להתחבר אליהם</translation> <translation id="5363265567587775042">בקש מבעל המחשב שאליו אתה רוצה לגשת שילחץ על “<ph name="SHARE" />” וייתן לך את קוד הגישה.</translation> <translation id="5379087427956679853">'שולחן עבודה מרוחק של Chrome' מאפשר לך לשתף את המחשב שלך דרך האינטרנט באופן מאובטח. על שני המשתמשים להפעיל את היישום 'שולחן עבודה מרוחק של Chrome', שניתן למצוא בכתובת <ph name="URL" />.</translation> <translation id="5394895745784982830">עבור Mac (OS X 10.6 ואילך)</translation>
diff --git a/remoting/resources/remoting_strings_ja.xtb b/remoting/resources/remoting_strings_ja.xtb index 7d020f7..d818f8b7 100644 --- a/remoting/resources/remoting_strings_ja.xtb +++ b/remoting/resources/remoting_strings_ja.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">承諾</translation> <translation id="492843737083352574">キーボードまたはマウスに関連した問題がある。</translation> <translation id="4973800994433240357">Chromoting ホスト インストーラをダウンロードすると、Google の<ph name="LINK_BEGIN" />利用規約<ph name="LINK_END" />に同意したことになります。</translation> +<translation id="4985296110227979402">リモート接続に使用するパソコンを最初に設定しておく必要があります</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" />(オフライン)</translation> <translation id="5070121137485264635">リモート ホストで、サードパーティ ウェブサイトへの認証が求められています。続行するには、次のアドレスにアクセスできるように Chrome リモート デスクトップに追加の権限を与える必要があります:</translation> <translation id="5156271271724754543">両方のボックスに同じ PIN を入力してください。</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">ログアウト</translation> <translation id="5254120496627797685">このページを閉じると、Chrome リモート デスクトップ セッションが終了します。</translation> <translation id="5308380583665731573">接続</translation> +<translation id="533625276787323658">接続先がありません</translation> <translation id="5363265567587775042">接続先のパソコンのユーザーに、[<ph name="SHARE" />] をクリックしてアクセスコードを付与してもらってください。</translation> <translation id="5379087427956679853">Chrome リモート デスクトップを使用すると、パソコンをウェブ経由で安全に共有できます。共有するには両方のユーザーが Chrome リモート デスクトップ アプリを実行している必要があります。このアプリは <ph name="URL" /> から入手できます。</translation> <translation id="5394895745784982830">Mac 版(OS X 10.6 以上)</translation>
diff --git a/remoting/resources/remoting_strings_kn.xtb b/remoting/resources/remoting_strings_kn.xtb index 8ee5607..8731367 100644 --- a/remoting/resources/remoting_strings_kn.xtb +++ b/remoting/resources/remoting_strings_kn.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">ಸಮ್ಮತಿಸು</translation> <translation id="492843737083352574">ನನ್ನ ಕೀಬೋರ್ಡ್ ಅಥವಾ ಮೌಸ್ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದಂತೆ ನಾನು ಸಮಸ್ಯೆಗಳನ್ನು ಎದುರಿಸುತ್ತಿದ್ದೇನೆ.</translation> <translation id="4973800994433240357">ಕ್ರೊಮೋಟಿಂಗ್ ಹೋಸ್ಟ್ ಸ್ಥಾಪಕ ಡೌನ್ಲೋಡ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು Google <ph name="LINK_BEGIN" />ಸೇವಾ ನಿಯಮಗಳನ್ನು<ph name="LINK_END" /> ಒಪ್ಪುತ್ತೀರಿ.</translation> +<translation id="4985296110227979402">ರಿಮೋಟ್ ಪ್ರವೇಶಕ್ಕಾಗಿ ನೀವು ಮೊದಲು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ಆಫ್ಲೈನ್)</translation> <translation id="5070121137485264635">ರಿಮೋಟ್ ಹೋಸ್ಟ್ಗೆ ಮೂರನೇ-ವ್ಯಕ್ತಿಯ ವೆಬ್ಸೈಟ್ಗೆ ನೀವು ದೃಢೀಕರಣ ನೀಡುವ ಅಗತ್ಯವಿದೆ. ಮುಂದುವರಿಯಲು, ಈ ವಿಳಾಸಕ್ಕೆ ಪ್ರವೇಶಿಸಲು ನೀವು Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್ ಹೆಚ್ಚುವರಿ ಅನುಮತಿಗಳನ್ನು ನೀಡಬೇಕಾಗುತ್ತದೆ:</translation> <translation id="5156271271724754543">ಎರಡು ಪೆಟ್ಟಿಗೆಗಳಲ್ಲಿಯೂ ಒಂದೇ PIN ಅನ್ನು ನಮೂದಿಸಿ.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">ಸೈನ್ ಔಟ್</translation> <translation id="5254120496627797685">ಈ ಪುಟದಿಂದ ಹೊರಹೋಗುವುದರಿಂದ ನಿಮ್ಮ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್ ಸೆಶನ್ ಅಂತ್ಯಗೊಳ್ಳುತ್ತದೆ.</translation> <translation id="5308380583665731573">ಸಂಪರ್ಕಿಸು</translation> +<translation id="533625276787323658">ಸಂಪರ್ಕಿಸಲು ಏನೂ ಇಲ್ಲ</translation> <translation id="5363265567587775042">ನೀವು ಪ್ರವೇಶಿಸಬೇಕೆಂದಿರುವ ಕಂಪ್ಯೂಟರ್ನ ಬಳಕೆದಾರರನ್ನು “<ph name="SHARE" />” ಕ್ಲಿಕ್ ಮಾಡುವಂತೆ ಹಾಗೂ ನಿಮಗೆ ಪ್ರವೇಶ ನೀಡುವಂತೆ ಹೇಳಿ.</translation> <translation id="5379087427956679853">ವೆಬ್ನಲ್ಲಿ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಹಂಚಿಕೊಳ್ಳಲು Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್ ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. <ph name="URL" /> ರಲ್ಲಿ ಕಂಡುಬರುವ Chrome ರಿಮೋಟ್ ಡೆಸ್ಕ್ಟಾಪ್ ಅಪ್ಲೀಕೇಶನ್ ಅನ್ನು ಎರಡೂ ಬಳಕೆದಾರರೂ ಚಾಲನೆಯಲ್ಲಿಟ್ಟಿರಬೇಕು.</translation> <translation id="5394895745784982830">Mac (OS X 10.6 ಮತ್ತು ಮೇಲ್ಪಟ್ಟ) ಗೆ</translation>
diff --git a/remoting/resources/remoting_strings_ko.xtb b/remoting/resources/remoting_strings_ko.xtb index f1f5f5e0a..5ced878 100644 --- a/remoting/resources/remoting_strings_ko.xtb +++ b/remoting/resources/remoting_strings_ko.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">수락</translation> <translation id="492843737083352574">키보드나 마우스에 문제가 있음</translation> <translation id="4973800994433240357">Chromoting 호스트 설치 프로그램을 다운로드하면 Google <ph name="LINK_BEGIN" />서비스 약관<ph name="LINK_END" />에 동의하게 됩니다.</translation> +<translation id="4985296110227979402">먼저 컴퓨터를 원격으로 액세스할 수 있도록 설정해야 합니다.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" />(오프라인)</translation> <translation id="5070121137485264635">원격 호스트는 타사 웹사이트에 대한 인증이 필요합니다. 계속하려면 이 주소에 액세스할 수 있도록 Chrome 원격 데스크톱에 추가 권한을 허용해야 합니다.</translation> <translation id="5156271271724754543">두 입력란에 같은 PIN을 입력하세요.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">로그아웃</translation> <translation id="5254120496627797685">이 페이지를 닫으면 Chrome 원격 데스크톱 세션이 종료됩니다.</translation> <translation id="5308380583665731573">연결</translation> +<translation id="533625276787323658">연결 대상이 없습니다.</translation> <translation id="5363265567587775042">액세스하려는 컴퓨터의 사용자에게 '<ph name="SHARE" />'를 클릭하여 액세스 코드를 달라고 요청하세요.</translation> <translation id="5379087427956679853">Chrome 원격 데스크톱을 사용하면 웹에서 내 컴퓨터를 안전하게 공유할 수 있습니다. 양쪽 사용자 모두 <ph name="URL" /> 페이지에 있는 Chrome 원격 데스크톱 앱을 실행해야 합니다.</translation> <translation id="5394895745784982830">Mac용(OS X 10.6 이상)</translation>
diff --git a/remoting/resources/remoting_strings_lt.xtb b/remoting/resources/remoting_strings_lt.xtb index 4637c6f..35a5ea5 100644 --- a/remoting/resources/remoting_strings_lt.xtb +++ b/remoting/resources/remoting_strings_lt.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Priimti</translation> <translation id="492843737083352574">Kyla problemų dėl klaviatūros ir pelės.</translation> <translation id="4973800994433240357">Atsisiųsdami „Chrome“ nuotolinio ryšio prieglobos diegimo programą sutinkate su „Google“ <ph name="LINK_BEGIN" />paslaugų teikimo sąlygomis<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Pirmiausia turite nustatyti nuotolinę kompiuterio prieigą</translation> <translation id="5064360042339518108">„<ph name="HOSTNAME" />“ (neprisijungta)</translation> <translation id="5070121137485264635">Nuotolinė priegloba reikalauja autentifikuoti trečiosios šalies svetainę. Jei norite tęsti, turite suteikti „Chrome“ nuotolinio kompiuterio valdymo programai papildomas teises pasiekti šį adresą</translation> <translation id="5156271271724754543">Įveskite tą patį PIN kodą abiejuose laukeliuose.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Atsijungti</translation> <translation id="5254120496627797685">Išėjus iš šio puslapio, baigsis „Chrome“ nuotolinio kompiuterio valdymo sesija.</translation> <translation id="5308380583665731573">Prisijungti</translation> +<translation id="533625276787323658">Nėra prie ko prisijungti</translation> <translation id="5363265567587775042">Paprašykite naudotojo, kurio kompiuterį norite pasiekti, spustelėti „<ph name="SHARE" />“ ir suteikti pasiekiamumo kodą.</translation> <translation id="5379087427956679853">Naudodami „Chrome“ nuotolinį kompiuterio valdymą, galite saugiai bendrinti kompiuterį žiniatinklyje. Abu naudotojai turi paleisti „Chrome“ nuotolinio kompiuterio valdymo programą, kurią galima rasti adresu <ph name="URL" />.</translation> <translation id="5394895745784982830">Skirta „Mac“ (10.6 ir naujesnės versijos „OS X“)</translation>
diff --git a/remoting/resources/remoting_strings_lv.xtb b/remoting/resources/remoting_strings_lv.xtb index 67f6936..0fb29af 100644 --- a/remoting/resources/remoting_strings_lv.xtb +++ b/remoting/resources/remoting_strings_lv.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Pieņemt</translation> <translation id="492843737083352574">Man radušās problēmas ar tastatūru vai peli.</translation> <translation id="4973800994433240357">Lejupielādējot Chrome saites saimniekdatora instalēšanas programmu, jūs piekrītat Google <ph name="LINK_BEGIN" />pakalpojumu sniegšanas noteikumiem<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Vispirms datorā ir jāiestata attālā piekļuve.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (bezsaistē)</translation> <translation id="5070121137485264635">Attālajā saimniekdatorā tiek pieprasīts, lai veicat autentificēšanu trešās puses vietnē. Lai turpinātu, jums jāpiešķir Chrome attālajai darbvirsmai papildu atļaujas piekļūt šai adresei:</translation> <translation id="5156271271724754543">Lūdzu, ievadiet vienu un to pašu PIN abos lodziņos.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Izrakstīties</translation> <translation id="5254120496627797685">Aizverot šo lapu, Chrome attālās darbvirsmas sesija tiks pārtraukta.</translation> <translation id="5308380583665731573">Pievienošana</translation> +<translation id="533625276787323658">Nav neviena datora, ar kuru izveidot savienojumu.</translation> <translation id="5363265567587775042">Palūdziet lietotājam, kura datoru vēlaties lietot, noklikšķināt uz “<ph name="SHARE" />” un piešķirt jums piekļuves kodu.</translation> <translation id="5379087427956679853">Izmantojot Chrome attālo darbvirsmu, varat droši koplietot savu datoru tīmeklī. Abiem lietotājiem ir jāizmanto lietotne Chrome attālā darbvirsma, kas ir pieejama vietnē <ph name="URL" />.</translation> <translation id="5394895745784982830">Operētājsistēmai Mac (OS X 10.6 un jaunākas versijas)</translation>
diff --git a/remoting/resources/remoting_strings_ml.xtb b/remoting/resources/remoting_strings_ml.xtb index e0fdfc5..9b893b2 100644 --- a/remoting/resources/remoting_strings_ml.xtb +++ b/remoting/resources/remoting_strings_ml.xtb
@@ -164,6 +164,7 @@ <translation id="4918086044614829423">സ്വീകരിക്കുക</translation> <translation id="492843737083352574">എന്റെ കീബോർഡിലോ മൗസിലോ പ്രശ്നങ്ങളുണ്ട്.</translation> <translation id="4973800994433240357">ക്രോമോട്ടിംഗ് ഹോസ്റ്റ് ഇൻസ്റ്റാളർ ഡൗൺലോഡുചെയ്യുന്നതിലൂടെ, നിങ്ങൾ Google <ph name="LINK_BEGIN" />സേവനനിബന്ധനകൾ<ph name="LINK_END" /> അംഗീകരിക്കുന്നു.</translation> +<translation id="4985296110227979402">റിമോട്ട് ആക്സസ്സിന് വേണ്ടി നിങ്ങൾ, ആദ്യം കമ്പ്യൂട്ടർ സജ്ജമാക്കേണ്ടതുണ്ട്</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ഓഫ്ലൈൻ)</translation> <translation id="5070121137485264635">റിമോട്ട് ഹോസ്റ്റിന് നിങ്ങളെ ഒരു മൂന്നാംകക്ഷി വെബ്സൈറ്റിലേക്ക് പ്രാമാണീകരിക്കേണ്ടത് ആവശ്യമാണ്. തുടരുന്നതിന്, ഇനിപ്പറയുന്ന വിലാസം ആക്സസ്സുചെയ്യുന്നതിനായി നിങ്ങൾ Chrome വിദൂര ഡെസ്ക്ടോപ്പ് അധിക അനുമതികൾ അനുവദിക്കണം:</translation> <translation id="5156271271724754543">രണ്ട് ബോക്സുകളിലും സമാന PIN നൽകുക.</translation> @@ -173,6 +174,7 @@ <translation id="5222676887888702881">പുറത്തുകടക്കുക</translation> <translation id="5254120496627797685">ഈ പേജ് ഉപേക്ഷിക്കുന്നത് Chrome വിദൂര ഡെസ്ക്ടോപ്പ് സെഷന് അവസാനിപ്പിക്കും.</translation> <translation id="5308380583665731573">കണക്റ്റുചെയ്യുക</translation> +<translation id="533625276787323658">ഇതിലേക്ക് കണക്റ്റുചെയ്യാൻ ഒന്നുമില്ല</translation> <translation id="5363265567587775042">“<ph name="SHARE" />” ക്ലിക്കുചെയ്ത് ആക്സസ്സ് കോഡ് നൽകാൻ ആരുടെ കമ്പ്യൂട്ടറാണ് നിങ്ങൾ ആക്സസ്സുചെയ്യാൻ താൽപ്പര്യപ്പെടുന്നതെന്ന് ഉപയോക്താവിനോട് ചോദിക്കുക.</translation> <translation id="5379087427956679853">Chrome വിദൂര ഡെസ്ക്ടോപ്പ് നിങ്ങളുടെ കമ്പ്യൂട്ടർ വെബിലുടനീളം സുരക്ഷിതമായി പങ്കിടാൻ നിങ്ങളെ അനുവദിക്കുന്നു. രണ്ട് ഉപയോക്താക്കളും <ph name="URL" /> എന്നതിൽ കണ്ടെത്താനാകുന്ന Chrome വിദൂര ഡെസ്ക്ടോപ്പ് അപ്ലിക്കേഷൻ പ്രവർത്തിപ്പിക്കേണ്ടതുണ്ട്.</translation> <translation id="5394895745784982830">Mac (OS X 10.6-ഉം അതിനുശേഷമുള്ളതും)</translation>
diff --git a/remoting/resources/remoting_strings_nl.xtb b/remoting/resources/remoting_strings_nl.xtb index 19db0cd..ee916bb 100644 --- a/remoting/resources/remoting_strings_nl.xtb +++ b/remoting/resources/remoting_strings_nl.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Accepteren</translation> <translation id="492843737083352574">Ik ondervind problemen met mijn toetsenbord of muis.</translation> <translation id="4973800994433240357">Door het installatieprogramma voor de Chromoting-host te downloaden, ga je akkoord met de <ph name="LINK_BEGIN" />Servicevoorwaarden<ph name="LINK_END" /> van Google.</translation> +<translation id="4985296110227979402">Je moet eerst je computer instellen voor externe toegang</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">De externe host vereist dat je op een website van derden wordt geverifieerd. Als je wilt doorgaan, moet je Chrome Remote Desktop aanvullende machtigingen geven om toegang tot dit adres te krijgen:</translation> <translation id="5156271271724754543">Geef dezelfde pincode in beide vakken op.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Uitloggen</translation> <translation id="5254120496627797685">Als je deze pagina verlaat, wordt je Chrome Remote Desktop-sessie beëindigd.</translation> <translation id="5308380583665731573">Verbinding maken</translation> +<translation id="533625276787323658">Er is geen computer om verbinding mee te maken</translation> <translation id="5363265567587775042">Vraag de gebruiker tot wiens computer je toegang wilt hebben, op <ph name="SHARE" /> te klikken en je de toegangscode te geven.</translation> <translation id="5379087427956679853">Met Chrome Remote Desktop kun je je computer veilig delen via internet. Beide gebruikers moeten hiervoor de app Chrome Remote Desktop uitvoeren, die beschikbaar is op <ph name="URL" />.</translation> <translation id="5394895745784982830">Voor Mac (OS X 10.6 en hoger)</translation>
diff --git a/remoting/resources/remoting_strings_no.xtb b/remoting/resources/remoting_strings_no.xtb index 0944485..466dbb1 100644 --- a/remoting/resources/remoting_strings_no.xtb +++ b/remoting/resources/remoting_strings_no.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Godta</translation> <translation id="492843737083352574">Jeg har problemer med tastaturet eller musen.</translation> <translation id="4973800994433240357">Ved å laste ned installasjonsprogrammet for Chromoting-verten samtykker du i Googles <ph name="LINK_BEGIN" />vilkår for bruk<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Du må først konfigurere en datamaskin for ekstern tilgang.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ikke på nett)</translation> <translation id="5070121137485264635">Den eksterne verten krever at du godkjenner via et tredjepartsnettsted. For å fortsette må du gi Chrome Eksternt skrivebord ytterligere tillatelser til å åpne denne adressen:</translation> <translation id="5156271271724754543">Skriv inn samme PIN-kode i begge feltene.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Logg av</translation> <translation id="5254120496627797685">Hvis du forlater denne siden, avsluttes Chrome Eksternt skrivebord-økten.</translation> <translation id="5308380583665731573">Koble til</translation> +<translation id="533625276787323658">Det finnes ingenting å koble til</translation> <translation id="5363265567587775042">Be brukeren av datamaskinen du vil ha tilgang til, om å klikke på «<ph name="SHARE" />» og gi deg tilgangskoden.</translation> <translation id="5379087427956679853">Med Chrome Eksternt skrivebord kan du trygt dele datamaskinen din på nettet. Begge brukerne må installere Chrome Eksternt skrivebord-appen, som er å finne på <ph name="URL" /></translation> <translation id="5394895745784982830">For Mac (OS X 10.6 og høyere)</translation>
diff --git a/remoting/resources/remoting_strings_pl.xtb b/remoting/resources/remoting_strings_pl.xtb index fa644ba..d0cb8e52 100644 --- a/remoting/resources/remoting_strings_pl.xtb +++ b/remoting/resources/remoting_strings_pl.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Akceptuj</translation> <translation id="492843737083352574">Mam problem z klawiaturą lub myszą.</translation> <translation id="4973800994433240357">Pobierając instalatora hosta funkcji Chromoting, akceptujesz <ph name="LINK_BEGIN" />Warunki korzystania z usług<ph name="LINK_END" /> Google.</translation> +<translation id="4985296110227979402">Najpierw musisz skonfigurować funkcję dostępu zdalnego na komputerze.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Host zdalny wymaga uwierzytelnienia w witrynie innej firmy. Aby kontynuować, musisz udzielić Pulpitowi zdalnemu Chrome dodatkowych uprawnień dostępu do tego adresu:</translation> <translation id="5156271271724754543">Wpisz ten sam PIN w obu polach.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Wyloguj się</translation> <translation id="5254120496627797685">Jeśli opuścisz tę stronę, sesja Pulpitu zdalnego Chrome zostanie zakończona.</translation> <translation id="5308380583665731573">Połącz</translation> +<translation id="533625276787323658">Brak komputerów zdalnych</translation> <translation id="5363265567587775042">Poproś użytkownika, z którego komputera chcesz korzystać, by kliknął „<ph name="SHARE" />” i udostępnił Ci kod dostępu.</translation> <translation id="5379087427956679853">Pulpit zdalny Chrome pozwala na bezpieczne udostępnianie komputera przez internet. Obaj użytkownicy muszą mieć uruchomioną aplikację Pulpit zdalny Chrome, którą można znaleźć na <ph name="URL" />.</translation> <translation id="5394895745784982830">Mac (OS X 10.6 lub nowszy)</translation>
diff --git a/remoting/resources/remoting_strings_pt-BR.xtb b/remoting/resources/remoting_strings_pt-BR.xtb index 63a20ef..7c1cb8f 100644 --- a/remoting/resources/remoting_strings_pt-BR.xtb +++ b/remoting/resources/remoting_strings_pt-BR.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Aceitar</translation> <translation id="492843737083352574">Meu teclado ou mouse estão com problemas.</translation> <translation id="4973800994433240357">Ao fazer o download do instalador do host do Chromoting, você concorda com os <ph name="LINK_BEGIN" />Termos de Serviço<ph name="LINK_END" /> do Google.</translation> +<translation id="4985296110227979402">Primeiro, é necessário configurar seu computador para acesso remoto.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (off-line)</translation> <translation id="5070121137485264635">O host remoto requer a autenticação em um website de terceiros. Para continuar, você deve conceder à Área de trabalho remota do Google Chrome acesso a permissões adicionais para acessar este endereço:</translation> <translation id="5156271271724754543">Digite o mesmo PIN nas duas caixas.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Sair</translation> <translation id="5254120496627797685">Abandonar esta página encerrará sua sessão na Área de trabalho remota do Google Chrome.</translation> <translation id="5308380583665731573">Conectar-se</translation> +<translation id="533625276787323658">Não há nenhum computador para conexão</translation> <translation id="5363265567587775042">Peça ao usuário do computador que você deseja acessar que clique em "<ph name="SHARE" />" e forneça o código de acesso para você.</translation> <translation id="5379087427956679853">A Área de trabalho remota do Google Chrome permite que você compartilhe seu computador com segurança através da Web. Para isso, é preciso que os usuários executem simultaneamente o aplicativo da Área de trabalho remota do Google Chrome, disponível em <ph name="URL" />.</translation> <translation id="5394895745784982830">Para Mac (OS X 10.6 e acima)</translation>
diff --git a/remoting/resources/remoting_strings_pt-PT.xtb b/remoting/resources/remoting_strings_pt-PT.xtb index 0b4ea43..23cee16 100644 --- a/remoting/resources/remoting_strings_pt-PT.xtb +++ b/remoting/resources/remoting_strings_pt-PT.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Aceitar</translation> <translation id="492843737083352574">Estou a ter problemas com o teclado ou o rato.</translation> <translation id="4973800994433240357">Ao transferir o instalador do anfitrião do Chromoting, aceita os <ph name="LINK_BEGIN" />Termos de Utilização<ph name="LINK_END" /> do Google.</translation> +<translation id="4985296110227979402">Primeiro, tem de configurar o computador para acesso remoto</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">O anfitrião remoto requer que efetue a autenticação num Website de terceiros. Para continuar, necessita de conceder permissões adicionais ao Ambiente de Trabalho Remoto do Chrome para aceder a este endereço:</translation> <translation id="5156271271724754543">Introduza o mesmo PIN em ambas as caixas.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Terminar sessão</translation> <translation id="5254120496627797685">Se sair desta página, terminará a sessão do Ambiente de Trabalho Remoto do Chrome.</translation> <translation id="5308380583665731573">Ligar</translation> +<translation id="533625276787323658">Não há computadores aos quais estabelecer ligação</translation> <translation id="5363265567587775042">Solicite ao utilizador a cujo computador pretende aceder para clicar em "<ph name="SHARE" />" e dar-lhe o código de acesso.</translation> <translation id="5379087427956679853">O Ambiente de Trabalho Remoto do Chrome permite partilhar o computador de forma segura através da Web. Ambos os utilizadores devem ter em execução a aplicação Ambiente de Trabalho Remoto do Chrome, que pode ser encontrada em <ph name="URL" />.</translation> <translation id="5394895745784982830">Para Mac (OS X 10.6 e superior)</translation>
diff --git a/remoting/resources/remoting_strings_ro.xtb b/remoting/resources/remoting_strings_ro.xtb index 414fd23..0df6914 100644 --- a/remoting/resources/remoting_strings_ro.xtb +++ b/remoting/resources/remoting_strings_ro.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Accept</translation> <translation id="492843737083352574">Întâmpin probleme cu tastatura sau cu mouse-ul.</translation> <translation id="4973800994433240357">Descărcând programul de instalare gazdă pentru Chromoting, accepți <ph name="LINK_BEGIN" />Termenii și condițiile<ph name="LINK_END" /> Google.</translation> +<translation id="4985296110227979402">Mai întâi, trebuie să configurezi computerul pentru accesul la distanță</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Gazda la distanță solicită să vă autentificați pe un site terță parte. Pentru a continua, trebuie să acordați permisiuni suplimentare aplicației Desktop la distanță Chrome pentru a accesa această adresă:</translation> <translation id="5156271271724754543">Introduceți același cod PIN în ambele casete.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Deconectează-te</translation> <translation id="5254120496627797685">Părăsind această pagină, veți încheia sesiunea Desktop la distanță Chrome.</translation> <translation id="5308380583665731573">Conectează-te</translation> +<translation id="533625276787323658">Niciun dispozitiv la care te poți conecta</translation> <translation id="5363265567587775042">Roagă utilizatorul al cărui computer dorești să îl accesezi să dea clic pe „<ph name="SHARE" />” și să îți trimită codul de acces.</translation> <translation id="5379087427956679853">Cu aplicația Desktop la distanță Chrome, puteți permite accesul în siguranță la computerul dvs. pe web. Ambii utilizatori trebuie să ruleze aplicația Desktop la distanță Chrome, care poate fi găsită la <ph name="URL" />.</translation> <translation id="5394895745784982830">Pentru Mac (OS X 10.6 și versiuni ulterioare)</translation>
diff --git a/remoting/resources/remoting_strings_sk.xtb b/remoting/resources/remoting_strings_sk.xtb index 8def6a5..b8decfb5 100644 --- a/remoting/resources/remoting_strings_sk.xtb +++ b/remoting/resources/remoting_strings_sk.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Prijať</translation> <translation id="492843737083352574">Mám problémy s klávesnicou alebo myšou.</translation> <translation id="4973800994433240357">Stiahnutím nástroja na inštalovanie hostiteľa funkcie Chromoting vyjadrujete súhlas so <ph name="LINK_BEGIN" />zmluvnými podmienkami<ph name="LINK_END" /> Google.</translation> +<translation id="4985296110227979402">Najprv musíte v počítači nastaviť vzdialený prístup</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Vzdialený hostiteľ od vás vyžaduje overenie na webových stránkach tretej strany. Ak chcete pokračovať, musíte vzdialenej ploche Chrome udeliť dodatočné oprávnenie na prístup k tejto adrese:</translation> <translation id="5156271271724754543">Do obidvoch polí zadajte rovnaký kód PIN.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Odhlásiť sa</translation> <translation id="5254120496627797685">Ak opustíte túto stránku, relácia Vzdialenej plochy Chrome sa ukončí.</translation> <translation id="5308380583665731573">Pripojenie</translation> +<translation id="533625276787323658">Na pripojenie nie sú k dispozícii žiadne zariadenia</translation> <translation id="5363265567587775042">Požiadajte používateľa s počítačom, do ktorého chcete získať prístup, aby klikol na tlačidlo <ph name="SHARE" /> a poskytol vám prístupový kód.</translation> <translation id="5379087427956679853">Vzdialená plocha Chrome vám umožňuje bezpečne zdieľať váš počítač cez internet. Obaja používatelia musia mať spustenú aplikáciu Vzdialená plocha Chrome, ktorú nájdete na adrese <ph name="URL" />.</translation> <translation id="5394895745784982830">Pre počítače Mac (OS X 10.6 a novší)</translation>
diff --git a/remoting/resources/remoting_strings_sl.xtb b/remoting/resources/remoting_strings_sl.xtb index bc6d426e..55d9d39 100644 --- a/remoting/resources/remoting_strings_sl.xtb +++ b/remoting/resources/remoting_strings_sl.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Sprejmi</translation> <translation id="492843737083352574">Imam težave s tipkovnico ali miško.</translation> <translation id="4973800994433240357">Če prenesete namestitveni program za gostitelja za Oddaljeno povezovanje s Chromom, sprejemate Googlove <ph name="LINK_BEGIN" />pogoje storitve<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Računalnik morate najprej nastaviti za oddaljeni dostop.</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (brez povezave)</translation> <translation id="5070121137485264635">Oddaljeni gostitelj zahteva, da previte pristnost na spletnem mestu tretje osebe. Če želite nadaljevati, morate Oddaljenemu namizju za Chrome dodeliti dodatna dovoljenja za dostop do tega naslova:</translation> <translation id="5156271271724754543">V polji vnesite isto kodo PIN.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Odjava</translation> <translation id="5254120496627797685">Če zapustite to stran, se bo seja Oddaljenega namizja za Chrome končala.</translation> <translation id="5308380583665731573">Povezovanje</translation> +<translation id="533625276787323658">Ni naprav za povezovanje</translation> <translation id="5363265567587775042">Uporabnika, do čigar računalnika želite dostopati, prosite, da klikne »<ph name="SHARE" />« in vam da kodo za dostop.</translation> <translation id="5379087427956679853">Oddaljeno namizje za Chrome omogoča varno skupno rabo računalnika v spletu. Oba uporabnika morata uporabljati aplikacijo Oddaljeno namizje za Chrome, ki je na voljo na <ph name="URL" />.</translation> <translation id="5394895745784982830">Za Mac OS (OS X 10.6 in novejši)</translation>
diff --git a/remoting/resources/remoting_strings_sr.xtb b/remoting/resources/remoting_strings_sr.xtb index 8ed27f7e..4d1e6644 100644 --- a/remoting/resources/remoting_strings_sr.xtb +++ b/remoting/resources/remoting_strings_sr.xtb
@@ -163,6 +163,7 @@ <translation id="4918086044614829423">Прихвати</translation> <translation id="492843737083352574">Имам проблема са тастатуром или мишем.</translation> <translation id="4973800994433240357">Преузимањем програма за инсталацију хоста за Chromoting прихватате Google <ph name="LINK_BEGIN" />услове коришћења<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Прво треба да подесите рачунар за даљински приступ</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ван мреже)</translation> <translation id="5070121137485264635">Удаљени хост захтева да потврдите аутентичност на веб-сајту треће стране. Да бисте наставили, морате да дате Chrome удаљеном рачунару додатне дозволе за приступ овој адреси:</translation> <translation id="5156271271724754543">Унесите исти PIN у оба оквира.</translation> @@ -172,6 +173,7 @@ <translation id="5222676887888702881">Одјави ме</translation> <translation id="5254120496627797685">Напуштањем ове странице завршићете сесију Chrome удаљеног рачунара.</translation> <translation id="5308380583665731573">Повезивање</translation> +<translation id="533625276787323658">Нема рачунара за повезивање</translation> <translation id="5363265567587775042">Затражите од корисника чијем рачунару желите да приступите да кликне на „<ph name="SHARE" />“ и да вам да приступни кôд.</translation> <translation id="5379087427956679853">Chrome удаљени рачунар вам омогућава да безбедно делите рачунар на вебу. Потребно је да оба корисника покрену апликацију Chrome удаљени рачунар, која може да се пронађе на <ph name="URL" />.</translation> <translation id="5394895745784982830">За Mac (OS X 10.6 и новији)</translation>
diff --git a/remoting/resources/remoting_strings_sv.xtb b/remoting/resources/remoting_strings_sv.xtb index 2ba5572..7b45e44 100644 --- a/remoting/resources/remoting_strings_sv.xtb +++ b/remoting/resources/remoting_strings_sv.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Acceptera</translation> <translation id="492843737083352574">Jag har problem med tangentbordet eller musen.</translation> <translation id="4973800994433240357">När du laddar ned installationsprogrammet för fjärranslutningsvärden Chromoting godkänner du Googles <ph name="LINK_BEGIN" />användarvillkor<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Du måste först konfigurera datorn för fjärråtkomst</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (offline)</translation> <translation id="5070121137485264635">Fjärrvärden kräver att du autentiserar via en tredje parts webbplats. Om du vill fortsätta måste du ge Chrome Remote Desktop ytterligare behörigheter att komma åt den här adressen:</translation> <translation id="5156271271724754543">Ange samma PIN-kod i båda rutorna.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Logga ut</translation> <translation id="5254120496627797685">Om du lämnar sidan avslutas sessionen i Chrome Remote Desktop.</translation> <translation id="5308380583665731573">Ansluta</translation> +<translation id="533625276787323658">Det finns inget att ansluta till</translation> <translation id="5363265567587775042">Be användaren vars dator du vill använda att klicka på <ph name="SHARE" /> och ge dig åtkomstkoden.</translation> <translation id="5379087427956679853">Med Chrome Remote Desktop kan du dela din dator via internet på ett säkert sätt. Båda användarna måste köra appen Chrome Remote Desktop som du hittar på <ph name="URL" />.</translation> <translation id="5394895745784982830">För Mac (OS X 10.6 eller senare)</translation>
diff --git a/remoting/resources/remoting_strings_sw.xtb b/remoting/resources/remoting_strings_sw.xtb index 1761fda..3d6fd9d 100644 --- a/remoting/resources/remoting_strings_sw.xtb +++ b/remoting/resources/remoting_strings_sw.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Kubali</translation> <translation id="492843737083352574">Ninatatizwa na kibodi au kipanya changu.</translation> <translation id="4973800994433240357">Kwa kupakua Kisakinishaji cha Seva Pangishi ya Kuwasiliana na Mifumo Tofauti kutoka Mbali, unakubaliana na <ph name="LINK_BEGIN" />Sheria na Masharti ya Google<ph name="LINK_END" />.</translation> +<translation id="4985296110227979402">Kwanza unahitaji kuwekea kompyuta yako mipangilio kwa ajili ya ufikiaji wa mbali</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (nje ya mtandao)</translation> <translation id="5070121137485264635">Seva pangishi ya mbali inakuhitaji uhalalishe hadi kwenye tovuti nyingine. Ili kuendelea, sharti uipe Chrome Remote Desktop idhini za ziada ili ifikie anwani hii:</translation> <translation id="5156271271724754543">Tafadhali ingiza PIN ile ile katika vikasha vyote viwili.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Ondoka</translation> <translation id="5254120496627797685">Kuondoka kwenye ukurasa huu kutakamilisha kipindi chako cha Eneo-kazi la Mbali la Chrome.</translation> <translation id="5308380583665731573">Unganisha</translation> +<translation id="533625276787323658">Hakuna kompyuta ya kuunganishwa</translation> <translation id="5363265567587775042">Mwombe mtumiaji wa kompyuta unayotaka kufikia abofye “<ph name="SHARE" />” na akupe nambari ya kuthibitisha ya idhini ya kufikia.</translation> <translation id="5379087427956679853">Eneo-kazi la Mbali la Chrome hukuruhusu kushiriki kompyuta yako kwa usalama kwenye Wavuti. Watumiaji wote wawili lazima wawe na programu ya Eneo-kazi la Mbali la Chrome, inayoweza kupatikana katika <ph name="URL" />.</translation> <translation id="5394895745784982830">Kwa Mac (OS X 10.6 na matoleo ya baadaye)</translation>
diff --git a/remoting/resources/remoting_strings_ta.xtb b/remoting/resources/remoting_strings_ta.xtb index 3e1ac3a..d2172ea 100644 --- a/remoting/resources/remoting_strings_ta.xtb +++ b/remoting/resources/remoting_strings_ta.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">ஏற்கிறேன்</translation> <translation id="492843737083352574">எனது விசைப்பலகை அல்லது மவுஸில் சிக்கல்கள் உள்ளன.</translation> <translation id="4973800994433240357">குரோமோட்டிங் ஹோஸ்ட் நிறுவியைப் பதிவிறக்குவதன் மூலம், Google இன் <ph name="LINK_BEGIN" />சேவை விதிமுறைகளை<ph name="LINK_END" /> ஏற்றுக்கொள்கிறீர்கள்.</translation> +<translation id="4985296110227979402">தொலைநிலை அணுகலுக்கு உங்கள் கணினியை முதலில் அமைக்க வேண்டும்</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ஆஃப்லைன்)</translation> <translation id="5070121137485264635">ஒரு மூன்றாம் தரப்பு இணையதளத்தை நீங்கள் அங்கீகரிக்க வேண்டும் என்று தொலைநிலை ஹோஸ்ட் கேட்கிறது. தொடர்வதற்கு, இந்த முகவரியை அணுக Chrome தொலைநிலை டெஸ்க்டாப்பிற்கு கூடுதல் அனுமதிகளை நீங்கள் வழங்க வேண்டும்:</translation> <translation id="5156271271724754543">இரண்டு பெட்டிகளிலும் ஒரே PIN ஐ உள்ளிடுக.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">வெளியேறு</translation> <translation id="5254120496627797685">இந்தப் பக்கத்திலிருந்து வெளியேறினால், உங்கள் Chrome தொலைநிலை டெஸ்க்டாப் அமர்வை முடிக்கும்.</translation> <translation id="5308380583665731573">இணை</translation> +<translation id="533625276787323658">இணைப்பதற்கு எதுவுமில்லை</translation> <translation id="5363265567587775042">நீங்கள் அணுக விரும்பும் கணினியின் பயனரிடம், “<ph name="SHARE" />”ஐக் கிளிக் செய்து அணுகல் குறியீட்டை அளிக்கும்படி கேட்கவும்.</translation> <translation id="5379087427956679853">இணையத்தில் உங்கள் கணினியைப் பாதுகாப்பாக பகிர Chrome தொலைநிலை டெஸ்க்டாப் அனுமதிக்கிறது. இரு பயனர்களும் Chrome தொலைநிலை டெஸ்க்டாப் பயன்பாட்டில் இயக்க வேண்டும், அதை <ph name="URL" /> இல் காணலாம்.</translation> <translation id="5394895745784982830">Mac (OS X 10.6 மற்றும் அதற்குப் பிந்தைய பதிப்பு) இல் நிறுவ</translation>
diff --git a/remoting/resources/remoting_strings_te.xtb b/remoting/resources/remoting_strings_te.xtb index 89ad0d5..e705612 100644 --- a/remoting/resources/remoting_strings_te.xtb +++ b/remoting/resources/remoting_strings_te.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">ఆమోదించు</translation> <translation id="492843737083352574">నాకు నా కీబోర్డ్ లేదా మౌస్తో సమస్యలు ఉన్నాయి.</translation> <translation id="4973800994433240357">Chromoting హోస్ట్ ఇన్స్టాలర్ను డౌన్లోడ్ చేయడం ద్వారా, మీరు Google <ph name="LINK_BEGIN" />సేవా నిబంధనలు<ph name="LINK_END" /> అంగీకరిస్తున్నారు.</translation> +<translation id="4985296110227979402">మీరు రిమోట్ ప్రాప్యత కోసం ముందుగా మీ కంప్యూటర్ను సెటప్ చేయాలి</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ఆఫ్లైన్)</translation> <translation id="5070121137485264635">మీరు మూడవ పక్ష వెబ్సైట్కు ప్రామాణీకరించాలని రిమోట్ హోస్ట్ కోరుతోంది. కొనసాగడానికి, మీరు తప్పనిసరిగా Chrome రిమోట్ డెస్క్టాప్కు ఈ చిరునామాను ప్రాప్యత చేయడానికి అదనపు అనుమతులను మంజూరు చేయాలి:</translation> <translation id="5156271271724754543">దయచేసి రెండు పెట్టెల్లోనూ ఒకే PINను నమోదు చేయండి.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">సైన్ ఔట్</translation> <translation id="5254120496627797685">ఈ పేజీ నుండి నిష్క్రమించడం వలన మీ Chrome రిమోట్ డెస్క్టాప్ సెషన్ ముగుస్తుంది.</translation> <translation id="5308380583665731573">కనెక్ట్ చేయండి</translation> +<translation id="533625276787323658">కనెక్ట్ చేయడానికి ఏదీ లేదు</translation> <translation id="5363265567587775042">మీరు ప్రాప్యత చేయాలని కోరుకునే కంప్యూటర్లో “<ph name="SHARE" />” క్లిక్ చేసి, మీకు ప్రాప్యత కోడ్ ఇవ్వమని వినియోగదారును అడగండి.</translation> <translation id="5379087427956679853">Chrome రిమోట్ డెస్క్టాప్ వెబ్లో మీ కంప్యూటర్ను సురక్షితంగా భాగస్వామ్యం చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. వినియోగదారులు ఇద్దరూ తప్పనిసరిగా <ph name="URL" />లో కనుగొనబడే Chrome రిమోట్ డెస్క్టాప్ అనువర్తనాన్ని అమలు చేస్తుండాలి.</translation> <translation id="5394895745784982830">Mac కోసం (OS X 10.6 మరియు అంతకంటే అధిక సంస్కరణ)</translation>
diff --git a/remoting/resources/remoting_strings_th.xtb b/remoting/resources/remoting_strings_th.xtb index 316df9d..4d1339c4 100644 --- a/remoting/resources/remoting_strings_th.xtb +++ b/remoting/resources/remoting_strings_th.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">ยอมรับ</translation> <translation id="492843737083352574">ฉันมีปัญหาเกี่ยวกับแป้นพิมพ์หรือเมาส์</translation> <translation id="4973800994433240357">การดาวน์โหลด Chromoting Host Installer หมายถึงคุณยอมรับ<ph name="LINK_BEGIN" />ข้อกำหนดในการให้บริการ<ph name="LINK_END" />ของ Google</translation> +<translation id="4985296110227979402">คุณต้องตั้งค่าคอมพิวเตอร์สำหรับการเข้าถึงระยะไกลก่อน</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ออฟไลน์)</translation> <translation id="5070121137485264635">โฮสต์ระยะไกลกำหนดให้คุณตรวจสอบสิทธิ์กับเว็บไซต์ของบุคคลที่สาม หากต้องการดำเนินการต่อ คุณต้องให้สิทธิ์อนุญาตเพิ่มเติมแก่ Chrome Remote Desktop เพื่อเข้าถึงที่อยู่นี้:</translation> <translation id="5156271271724754543">โปรดป้อน PIN เดียวกันลงในทั้งสองช่อง</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">ออกจากระบบ</translation> <translation id="5254120496627797685">การออกจากหน้านี้จะสิ้นสุดเซสชัน Chrome Remote Desktop ของคุณ</translation> <translation id="5308380583665731573">เชื่อมต่อ</translation> +<translation id="533625276787323658">ไม่มีปลายทางให้เชื่อมต่อ</translation> <translation id="5363265567587775042">ขอให้ผู้ใช้ที่เป็นเจ้าของคอมพิวเตอร์ที่คุณต้องการใช้งานคลิก “<ph name="SHARE" />” และให้รหัสการเข้าถึงแก่คุณ</translation> <translation id="5379087427956679853">Chrome Remote Desktop อนุญาตให้คุณแชร์คอมพิวเตอร์ของคุณผ่านเว็บอย่างปลอดภัย ผู้ใช้ทั้งสองฝ่ายจะต้องเรียกใช้แอปพลิเคชัน Chrome Remote Desktop ซึ่งสามารถรับได้ที่ <ph name="URL" /></translation> <translation id="5394895745784982830">สำหรับ Mac (OS X 10.6 ขึ้นไป)</translation>
diff --git a/remoting/resources/remoting_strings_tr.xtb b/remoting/resources/remoting_strings_tr.xtb index 238812aa..12fcd100 100644 --- a/remoting/resources/remoting_strings_tr.xtb +++ b/remoting/resources/remoting_strings_tr.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Kabul et</translation> <translation id="492843737083352574">Klavye veya faremle ilgili sorun yaşıyorum.</translation> <translation id="4973800994433240357">Chromoting Ana Makine Yükleyicisi'ni indirerek Google <ph name="LINK_BEGIN" />Hizmet Şartları<ph name="LINK_END" />'nı kabul etmiş olursunuz.</translation> +<translation id="4985296110227979402">İlk olarak bilgisayarınızı uzaktan erişim için ayarlamanız gerekir</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (çevrimdışı)</translation> <translation id="5070121137485264635">Uzak ana makine üçüncü taraf bir web sitesine kimlik doğrulama işlemi yapmanızı gerektiriyor. Devam etmek üzere şu adrese erişim için Chrome Uzaktan Masaüstü'ne ek izinler vermelisiniz:</translation> <translation id="5156271271724754543">Lütfen her iki kutuya da aynı PIN'i girin.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Çıkış</translation> <translation id="5254120496627797685">Bu sayfadan ayrılırsanız Chrome Uzaktan Masaüstü oturumunuz sonlanır.</translation> <translation id="5308380583665731573">Bağlan</translation> +<translation id="533625276787323658">Bağlanacak herhangi bir bilgisayar yok</translation> <translation id="5363265567587775042">Bilgisayarına erişmek istediğiniz kullanıcıdan “<ph name="SHARE" />” öğesini tıklamasını ve size erişim kodunu vermesini isteyin.</translation> <translation id="5379087427956679853">Chrome Uzaktan Masaüstü, bilgisayarınızı Web üzerinden güvenli bir şekilde paylaşabilmenize olanak sağlar. Her iki kullanıcının da Chrome Uzaktan Masaüstü uygulamasını çalıştırıyor olması gerekir. Uygulamayı <ph name="URL" /> adresinde bulabilirsiniz.</translation> <translation id="5394895745784982830">Mac (OS X 10.6 ve sonraki sürümler) için</translation>
diff --git a/remoting/resources/remoting_strings_uk.xtb b/remoting/resources/remoting_strings_uk.xtb index 0d0c258..c32844d 100644 --- a/remoting/resources/remoting_strings_uk.xtb +++ b/remoting/resources/remoting_strings_uk.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Прийняти</translation> <translation id="492843737083352574">Проблеми з клавіатурою або мишею.</translation> <translation id="4973800994433240357">Установлюючи хост для Віддаленого доступу ОС Chrome, ви приймаєте <ph name="LINK_BEGIN" />Загальні положення та умови<ph name="LINK_END" /> Google.</translation> +<translation id="4985296110227979402">Спершу налаштуйте комп’ютер для віддаленого доступу</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (офлайн)</translation> <translation id="5070121137485264635">Віддалений хост вимагає, щоб ви автентифікувалися на веб-сайті третьої сторони. Щоб продовжити, програмі Віддалене керування Chrome потрібно надати додаткові дозволи для доступу до цієї адреси:</translation> <translation id="5156271271724754543">Введіть однаковий PIN-код в обох полях.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Вийти</translation> <translation id="5254120496627797685">Якщо залишити цю сторінку, сеанс програми Віддалене керування Chrome закінчиться.</translation> <translation id="5308380583665731573">Під’єднатися</translation> +<translation id="533625276787323658">Немає комп’ютерів для віддаленого доступу</translation> <translation id="5363265567587775042">Попросіть користувача комп’ютера, до якого ви хочете під’єднатися, натиснути "<ph name="SHARE" />" і надіслати вам код доступу.</translation> <translation id="5379087427956679853">Програма Віддалене керування Chrome дозволяє безпечно надавати доступ до свого комп’ютера через Інтернет. Обидва користувачі мають запустити програму Віддалене керування Chrome, яку можна знайти на сторінці <ph name="URL" />.</translation> <translation id="5394895745784982830">Для Mac (OS X 10.6 і новіших версій)</translation>
diff --git a/remoting/resources/remoting_strings_vi.xtb b/remoting/resources/remoting_strings_vi.xtb index 9a7d3271..a186c04 100644 --- a/remoting/resources/remoting_strings_vi.xtb +++ b/remoting/resources/remoting_strings_vi.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">Chấp nhận</translation> <translation id="492843737083352574">Tôi đang gặp sự cố với bàn phím hoặc chuột.</translation> <translation id="4973800994433240357">Khi tải xuống Trình cài đặt máy chủ kết nối từ xa trên Chrome, bạn đồng ý với <ph name="LINK_BEGIN" />Điều khoản dịch vụ<ph name="LINK_END" /> của Google.</translation> +<translation id="4985296110227979402">Trước tiên, bạn cần thiết lập máy tính để truy cập từ xa</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ngoại tuyến)</translation> <translation id="5070121137485264635">Máy chủ lưu trữ từ xa yêu cầu bạn xác thực với một trang web của bên thứ ba. Để tiếp tục, bạn phải cấp cho Chrome Remote Desktop thêm quyền truy cập vào địa chỉ sau:</translation> <translation id="5156271271724754543">Vui lòng nhập cùng một mã PIN vào cả hai hộp.</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">Đăng xuất</translation> <translation id="5254120496627797685">Thoát khỏi trang này sẽ kết thúc phiên Chrome Remote Desktop của bạn.</translation> <translation id="5308380583665731573">Kết nối</translation> +<translation id="533625276787323658">Không có máy tính nào để kết nối</translation> <translation id="5363265567587775042">Yêu cầu người dùng có máy tính bạn muốn truy cập nhấp vào “<ph name="SHARE" />” và cung cấp cho bạn mã truy cập.</translation> <translation id="5379087427956679853">Chrome Remote Desktop cho phép bạn chia sẻ máy tính của mình một cách an toàn qua Web. Cả hai người dùng đều phải chạy ứng dụng Chrome Remote Desktop mà bạn có thể tìm thấy tại <ph name="URL" />.</translation> <translation id="5394895745784982830">Dành cho máy Mac (OS X 10.6 trở lên)</translation>
diff --git a/remoting/resources/remoting_strings_zh-CN.xtb b/remoting/resources/remoting_strings_zh-CN.xtb index 4f04f0a..c500cb78 100644 --- a/remoting/resources/remoting_strings_zh-CN.xtb +++ b/remoting/resources/remoting_strings_zh-CN.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">接受</translation> <translation id="492843737083352574">我的键盘或鼠标无法正常使用。</translation> <translation id="4973800994433240357">下载 Chrome 远程访问主机安装程序,即表示您同意遵守 Google <ph name="LINK_BEGIN" />服务条款<ph name="LINK_END" />。</translation> +<translation id="4985296110227979402">您需要先设置计算机,以便进行远程访问</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" />(离线)</translation> <translation id="5070121137485264635">远程主机要求您对第三方网站进行身份验证。要继续操作,您必须向 Chrome 远程桌面授予访问以下地址的额外权限:</translation> <translation id="5156271271724754543">请在两个框中输入相同的 PIN。</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">退出</translation> <translation id="5254120496627797685">如果您离开此页,那么您的 Chrome 远程桌面会话就会结束。</translation> <translation id="5308380583665731573">连接</translation> +<translation id="533625276787323658">没有可连接到的计算机</translation> <translation id="5363265567587775042">请让您想访问其计算机的用户点击“<ph name="SHARE" />”,然后向您提供访问代码。</translation> <translation id="5379087427956679853">Chrome 远程桌面可让您通过网络安全地共享自己的计算机。双方用户必须同时运行 Chrome 远程桌面应用(下载地址为 <ph name="URL" />)。</translation> <translation id="5394895745784982830">适用于 Mac(OS X 10.6 及更高版本)</translation>
diff --git a/remoting/resources/remoting_strings_zh-TW.xtb b/remoting/resources/remoting_strings_zh-TW.xtb index 58a55a1..54cbf42 100644 --- a/remoting/resources/remoting_strings_zh-TW.xtb +++ b/remoting/resources/remoting_strings_zh-TW.xtb
@@ -165,6 +165,7 @@ <translation id="4918086044614829423">接受</translation> <translation id="492843737083352574">我無法順利使用鍵盤或滑鼠。</translation> <translation id="4973800994433240357">下載 Chromoting 主機安裝程式即表示您同意 Google 的《<ph name="LINK_BEGIN" />服務條款<ph name="LINK_END" />》。</translation> +<translation id="4985296110227979402">您必須先設定電腦,才能執行遠端存取作業。</translation> <translation id="5064360042339518108"><ph name="HOSTNAME" /> (離線)</translation> <translation id="5070121137485264635">遠端主機要求您向第三方網站進行驗證。如要繼續,您必須授予額外權限,讓 Chrome 遠端桌面能夠存取這個位址:</translation> <translation id="5156271271724754543">請在兩個方塊中輸入相同的 PIN。</translation> @@ -174,6 +175,7 @@ <translation id="5222676887888702881">登出</translation> <translation id="5254120496627797685">如果離開這個頁面,您的 Chrome 遠端桌面工作階段也會結束。</translation> <translation id="5308380583665731573">連線</translation> +<translation id="533625276787323658">沒有可供連線的電腦</translation> <translation id="5363265567587775042">請您要存取的電腦的使用者點選 [<ph name="SHARE" />],並提供存取碼給您。</translation> <translation id="5379087427956679853">Chrome 遠端桌面提供了安全的連線機制,可讓您透過網路與他人共用自己的電腦。您和共用對象都必須執行 Chrome 遠端桌面應用程式,請前往 <ph name="URL" /> 安裝。</translation> <translation id="5394895745784982830">適用於 Mac (OS X 10.6 以上版本)</translation>
diff --git a/sandbox/win/BUILD.gn b/sandbox/win/BUILD.gn index 49d1ece..b699258 100644 --- a/sandbox/win/BUILD.gn +++ b/sandbox/win/BUILD.gn
@@ -30,12 +30,6 @@ "src/handle_closer.h", "src/handle_closer_agent.cc", "src/handle_closer_agent.h", - "src/handle_dispatcher.cc", - "src/handle_dispatcher.h", - "src/handle_interception.cc", - "src/handle_interception.h", - "src/handle_policy.cc", - "src/handle_policy.h", "src/interception.cc", "src/interception.h", "src/interception_agent.cc", @@ -194,7 +188,6 @@ "src/file_policy_test.cc", "src/handle_closer_test.cc", "src/handle_inheritance_test.cc", - "src/handle_policy_test.cc", "src/integrity_level_test.cc", "src/ipc_ping_test.cc", "src/lpc_policy_test.cc",
diff --git a/sandbox/win/sandbox_win.gypi b/sandbox/win/sandbox_win.gypi index eeac488..25430a7 100644 --- a/sandbox/win/sandbox_win.gypi +++ b/sandbox/win/sandbox_win.gypi
@@ -33,12 +33,6 @@ 'src/handle_closer.h', 'src/handle_closer_agent.cc', 'src/handle_closer_agent.h', - 'src/handle_dispatcher.cc', - 'src/handle_dispatcher.h', - 'src/handle_interception.cc', - 'src/handle_interception.h', - 'src/handle_policy.cc', - 'src/handle_policy.h', 'src/interception.cc', 'src/interception.h', 'src/interception_agent.cc', @@ -211,7 +205,6 @@ 'src/app_container_test.cc', 'src/file_policy_test.cc', 'src/handle_inheritance_test.cc', - 'src/handle_policy_test.cc', 'tests/integration_tests/integration_tests_test.cc', 'src/handle_closer_test.cc', 'src/integrity_level_test.cc',
diff --git a/sandbox/win/src/handle_dispatcher.cc b/sandbox/win/src/handle_dispatcher.cc deleted file mode 100644 index 4b98acd..0000000 --- a/sandbox/win/src/handle_dispatcher.cc +++ /dev/null
@@ -1,92 +0,0 @@ -// Copyright (c) 2012 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 "sandbox/win/src/handle_dispatcher.h" - -#include <stdint.h> - -#include "base/win/scoped_handle.h" -#include "sandbox/win/src/handle_interception.h" -#include "sandbox/win/src/handle_policy.h" -#include "sandbox/win/src/ipc_tags.h" -#include "sandbox/win/src/policy_broker.h" -#include "sandbox/win/src/policy_params.h" -#include "sandbox/win/src/sandbox.h" -#include "sandbox/win/src/sandbox_nt_util.h" -#include "sandbox/win/src/sandbox_types.h" -#include "sandbox/win/src/sandbox_utils.h" - -namespace sandbox { - -HandleDispatcher::HandleDispatcher(PolicyBase* policy_base) - : policy_base_(policy_base) { - static const IPCCall duplicate_handle_proxy = { - {IPC_DUPLICATEHANDLEPROXY_TAG, - {VOIDPTR_TYPE, UINT32_TYPE, UINT32_TYPE, UINT32_TYPE}}, - reinterpret_cast<CallbackGeneric>( - &HandleDispatcher::DuplicateHandleProxy)}; - - ipc_calls_.push_back(duplicate_handle_proxy); -} - -bool HandleDispatcher::SetupService(InterceptionManager* manager, - int service) { - // We perform no interceptions for handles right now. - switch (service) { - case IPC_DUPLICATEHANDLEPROXY_TAG: - return true; - } - - return false; -} - -bool HandleDispatcher::DuplicateHandleProxy(IPCInfo* ipc, - HANDLE source_handle, - uint32_t target_process_id, - uint32_t desired_access, - uint32_t options) { - static NtQueryObject QueryObject = NULL; - if (!QueryObject) - ResolveNTFunctionPtr("NtQueryObject", &QueryObject); - - // Get a copy of the handle for use in the broker process. - HANDLE handle_temp; - if (!::DuplicateHandle(ipc->client_info->process, source_handle, - ::GetCurrentProcess(), &handle_temp, - 0, FALSE, DUPLICATE_SAME_ACCESS | options)) { - ipc->return_info.win32_result = ::GetLastError(); - return false; - } - options &= ~DUPLICATE_CLOSE_SOURCE; - base::win::ScopedHandle handle(handle_temp); - - // Get the object type (32 characters is safe; current max is 14). - BYTE buffer[sizeof(OBJECT_TYPE_INFORMATION) + 32 * sizeof(wchar_t)]; - OBJECT_TYPE_INFORMATION* type_info = - reinterpret_cast<OBJECT_TYPE_INFORMATION*>(buffer); - ULONG size = sizeof(buffer) - sizeof(wchar_t); - NTSTATUS error = - QueryObject(handle.Get(), ObjectTypeInformation, type_info, size, &size); - if (!NT_SUCCESS(error)) { - ipc->return_info.nt_status = error; - return false; - } - type_info->Name.Buffer[type_info->Name.Length / sizeof(wchar_t)] = L'\0'; - - CountedParameterSet<HandleTarget> params; - params[HandleTarget::NAME] = ParamPickerMake(type_info->Name.Buffer); - params[HandleTarget::TARGET] = ParamPickerMake(target_process_id); - - EvalResult eval = policy_base_->EvalPolicy(IPC_DUPLICATEHANDLEPROXY_TAG, - params.GetBase()); - ipc->return_info.win32_result = - HandlePolicy::DuplicateHandleProxyAction(eval, handle.Get(), - target_process_id, - &ipc->return_info.handle, - desired_access, options); - return true; -} - -} // namespace sandbox -
diff --git a/sandbox/win/src/handle_dispatcher.h b/sandbox/win/src/handle_dispatcher.h deleted file mode 100644 index 24dcdac2..0000000 --- a/sandbox/win/src/handle_dispatcher.h +++ /dev/null
@@ -1,41 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SANDBOX_SRC_HANDLE_DISPATCHER_H_ -#define SANDBOX_SRC_HANDLE_DISPATCHER_H_ - -#include <stdint.h> - -#include "base/macros.h" -#include "sandbox/win/src/crosscall_server.h" -#include "sandbox/win/src/sandbox_policy_base.h" - -namespace sandbox { - -// This class handles handle-related IPC calls. -class HandleDispatcher : public Dispatcher { - public: - explicit HandleDispatcher(PolicyBase* policy_base); - ~HandleDispatcher() override {} - - // Dispatcher interface. - bool SetupService(InterceptionManager* manager, int service) override; - - private: - // Processes IPC requests coming from calls to - // TargetServices::DuplicateHandle() in the target. - bool DuplicateHandleProxy(IPCInfo* ipc, - HANDLE source_handle, - uint32_t target_process_id, - uint32_t desired_access, - uint32_t options); - - PolicyBase* policy_base_; - DISALLOW_COPY_AND_ASSIGN(HandleDispatcher); -}; - -} // namespace sandbox - -#endif // SANDBOX_SRC_HANDLE_DISPATCHER_H_ -
diff --git a/sandbox/win/src/handle_interception.cc b/sandbox/win/src/handle_interception.cc deleted file mode 100644 index a0df8d6..0000000 --- a/sandbox/win/src/handle_interception.cc +++ /dev/null
@@ -1,45 +0,0 @@ -// Copyright (c) 2012 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 "sandbox/win/src/handle_interception.h" - -#include "sandbox/win/src/crosscall_client.h" -#include "sandbox/win/src/ipc_tags.h" -#include "sandbox/win/src/sandbox_factory.h" -#include "sandbox/win/src/sandbox_nt_util.h" -#include "sandbox/win/src/sharedmem_ipc_client.h" -#include "sandbox/win/src/target_services.h" - -namespace sandbox { - -ResultCode DuplicateHandleProxy(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options) { - *target_handle = NULL; - - void* memory = GetGlobalIPCMemory(); - if (NULL == memory) - return SBOX_ERROR_NO_SPACE; - - SharedMemIPCClient ipc(memory); - CrossCallReturn answer = {0}; - ResultCode code = CrossCall(ipc, IPC_DUPLICATEHANDLEPROXY_TAG, - source_handle, target_process_id, - desired_access, options, &answer); - if (SBOX_ALL_OK != code) - return code; - - if (answer.win32_result) { - ::SetLastError(answer.win32_result); - return SBOX_ERROR_GENERIC; - } - - *target_handle = answer.handle; - return SBOX_ALL_OK; -} - -} // namespace sandbox -
diff --git a/sandbox/win/src/handle_interception.h b/sandbox/win/src/handle_interception.h deleted file mode 100644 index 6f60811..0000000 --- a/sandbox/win/src/handle_interception.h +++ /dev/null
@@ -1,24 +0,0 @@ -// Copyright (c) 2012 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 "sandbox/win/src/nt_internals.h" -#include "sandbox/win/src/sandbox_types.h" - -#ifndef SANDBOX_SRC_HANDLE_INTERCEPTION_H_ -#define SANDBOX_SRC_HANDLE_INTERCEPTION_H_ - -namespace sandbox { - -// TODO(jschuh) Add an interception to catch dangerous DuplicateHandle calls. - -ResultCode DuplicateHandleProxy(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options); - -} // namespace sandbox - -#endif // SANDBOX_SRC_HANDLE_INTERCEPTION_H_ -
diff --git a/sandbox/win/src/handle_policy.cc b/sandbox/win/src/handle_policy.cc deleted file mode 100644 index 1023030..0000000 --- a/sandbox/win/src/handle_policy.cc +++ /dev/null
@@ -1,92 +0,0 @@ -// Copyright (c) 2012 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 "sandbox/win/src/handle_policy.h" - -#include <string> - -#include "base/win/scoped_handle.h" -#include "sandbox/win/src/broker_services.h" -#include "sandbox/win/src/ipc_tags.h" -#include "sandbox/win/src/policy_engine_opcodes.h" -#include "sandbox/win/src/policy_params.h" -#include "sandbox/win/src/sandbox_types.h" -#include "sandbox/win/src/sandbox_utils.h" - -namespace sandbox { - -bool HandlePolicy::GenerateRules(const wchar_t* type_name, - TargetPolicy::Semantics semantics, - LowLevelPolicy* policy) { - PolicyRule duplicate_rule(ASK_BROKER); - - switch (semantics) { - case TargetPolicy::HANDLES_DUP_ANY: { - if (!duplicate_rule.AddNumberMatch(IF_NOT, HandleTarget::TARGET, - ::GetCurrentProcessId(), EQUAL)) { - return false; - } - break; - } - - case TargetPolicy::HANDLES_DUP_BROKER: { - if (!duplicate_rule.AddNumberMatch(IF, HandleTarget::TARGET, - ::GetCurrentProcessId(), EQUAL)) { - return false; - } - break; - } - - default: - return false; - } - if (!duplicate_rule.AddStringMatch(IF, HandleTarget::NAME, type_name, - CASE_INSENSITIVE)) { - return false; - } - if (!policy->AddRule(IPC_DUPLICATEHANDLEPROXY_TAG, &duplicate_rule)) { - return false; - } - return true; -} - -DWORD HandlePolicy::DuplicateHandleProxyAction(EvalResult eval_result, - HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options) { - // The only action supported is ASK_BROKER which means duplicate the handle. - if (ASK_BROKER != eval_result) { - return ERROR_ACCESS_DENIED; - } - - base::win::ScopedHandle remote_target_process; - if (target_process_id != ::GetCurrentProcessId()) { - // Sandboxed children are dynamic, so we check that manually. - if (!BrokerServicesBase::GetInstance()->IsActiveTarget(target_process_id)) { - return ERROR_ACCESS_DENIED; - } - - remote_target_process.Set(::OpenProcess(PROCESS_DUP_HANDLE, FALSE, - target_process_id)); - if (!remote_target_process.IsValid()) - return ::GetLastError(); - } - - // If the policy didn't block us and we have no valid target, then the broker - // (this process) is the valid target. - HANDLE target_process = remote_target_process.IsValid() ? - remote_target_process.Get() : ::GetCurrentProcess(); - if (!::DuplicateHandle(::GetCurrentProcess(), source_handle, target_process, - target_handle, desired_access, FALSE, - options)) { - return ::GetLastError(); - } - - return ERROR_SUCCESS; -} - -} // namespace sandbox -
diff --git a/sandbox/win/src/handle_policy.h b/sandbox/win/src/handle_policy.h deleted file mode 100644 index 29ce5ab6..0000000 --- a/sandbox/win/src/handle_policy.h +++ /dev/null
@@ -1,39 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef SANDBOX_SRC_HANDLE_POLICY_H_ -#define SANDBOX_SRC_HANDLE_POLICY_H_ - -#include <string> - -#include "sandbox/win/src/crosscall_server.h" -#include "sandbox/win/src/policy_low_level.h" -#include "sandbox/win/src/sandbox_policy.h" - -namespace sandbox { - -enum EvalResult; - -// This class centralizes most of the knowledge related to handle policy. -class HandlePolicy { - public: - // Creates the required low-level policy rules to evaluate a high-level - // policy rule for handles, in particular duplicate action. - static bool GenerateRules(const wchar_t* type_name, - TargetPolicy::Semantics semantics, - LowLevelPolicy* policy); - - // Processes a 'TargetPolicy::DuplicateHandle()' request from the target. - static DWORD DuplicateHandleProxyAction(EvalResult eval_result, - HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options); -}; - -} // namespace sandbox - -#endif // SANDBOX_SRC_HANDLE_POLICY_H_ -
diff --git a/sandbox/win/src/handle_policy_test.cc b/sandbox/win/src/handle_policy_test.cc deleted file mode 100644 index 11382da..0000000 --- a/sandbox/win/src/handle_policy_test.cc +++ /dev/null
@@ -1,114 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/strings/stringprintf.h" -#include "sandbox/win/src/handle_policy.h" -#include "sandbox/win/src/nt_internals.h" -#include "sandbox/win/src/sandbox.h" -#include "sandbox/win/src/sandbox_factory.h" -#include "sandbox/win/src/sandbox_policy.h" -#include "sandbox/win/src/win_utils.h" -#include "sandbox/win/tests/common/controller.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace sandbox { - -// Just waits for the supplied number of milliseconds. -SBOX_TESTS_COMMAND int Handle_WaitProcess(int argc, wchar_t **argv) { - if (argc != 1) - return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; - - ::Sleep(::wcstoul(argv[0], NULL, 10)); - return SBOX_TEST_TIMED_OUT; -} - -// Attempts to duplicate an event handle into the target process. -SBOX_TESTS_COMMAND int Handle_DuplicateEvent(int argc, wchar_t **argv) { - if (argc != 1) - return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND; - - // Create a test event to use as a handle. - base::win::ScopedHandle test_event; - test_event.Set(::CreateEvent(NULL, TRUE, TRUE, NULL)); - if (!test_event.IsValid()) - return SBOX_TEST_FIRST_ERROR; - - // Get the target process ID. - DWORD target_process_id = ::wcstoul(argv[0], NULL, 10); - - HANDLE handle = NULL; - ResultCode result = SandboxFactory::GetTargetServices()->DuplicateHandle( - test_event.Get(), target_process_id, &handle, 0, DUPLICATE_SAME_ACCESS); - - return (result == SBOX_ALL_OK) ? SBOX_TEST_SUCCEEDED : SBOX_TEST_DENIED; -} - -// Tests that duplicating an object works only when the policy allows it. -TEST(HandlePolicyTest, DuplicateHandle) { - TestRunner target; - TestRunner runner; - - // Kick off an asynchronous target process for testing. - target.SetAsynchronous(true); - EXPECT_EQ(SBOX_TEST_SUCCEEDED, target.RunTest(L"Handle_WaitProcess 30000")); - - // First test that we fail to open the event. - base::string16 cmd_line = base::StringPrintf(L"Handle_DuplicateEvent %d", - target.process_id()); - EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(cmd_line.c_str())); - - // Now successfully open the event after adding a duplicate handle rule. - EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_HANDLES, - TargetPolicy::HANDLES_DUP_ANY, - L"Event")); - EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(cmd_line.c_str())); -} - -// Tests that duplicating an object works only when the policy allows it. -TEST(HandlePolicyTest, DuplicatePeerHandle) { - TestRunner target; - TestRunner runner; - - // Kick off an asynchronous target process for testing. - target.SetAsynchronous(true); - target.SetUnsandboxed(true); - EXPECT_EQ(SBOX_TEST_SUCCEEDED, target.RunTest(L"Handle_WaitProcess 30000")); - - // First test that we fail to open the event. - base::string16 cmd_line = base::StringPrintf(L"Handle_DuplicateEvent %d", - target.process_id()); - EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(cmd_line.c_str())); - - // Now successfully open the event after adding a duplicate handle rule. - EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_HANDLES, - TargetPolicy::HANDLES_DUP_ANY, - L"Event")); - EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(cmd_line.c_str())); -} - -// Tests that duplicating an object works only when the policy allows it. -TEST(HandlePolicyTest, DuplicateBrokerHandle) { - TestRunner runner; - - // First test that we fail to open the event. - base::string16 cmd_line = base::StringPrintf(L"Handle_DuplicateEvent %d", - ::GetCurrentProcessId()); - EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(cmd_line.c_str())); - - // Add the peer rule and make sure we fail again. - EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_HANDLES, - TargetPolicy::HANDLES_DUP_ANY, - L"Event")); - EXPECT_EQ(SBOX_TEST_DENIED, runner.RunTest(cmd_line.c_str())); - - - // Now successfully open the event after adding a broker handle rule. - EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_HANDLES, - TargetPolicy::HANDLES_DUP_BROKER, - L"Event")); - EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(cmd_line.c_str())); -} - -} // namespace sandbox -
diff --git a/sandbox/win/src/ipc_tags.h b/sandbox/win/src/ipc_tags.h index 3a1724b..7cb8dea 100644 --- a/sandbox/win/src/ipc_tags.h +++ b/sandbox/win/src/ipc_tags.h
@@ -28,7 +28,6 @@ IPC_OPENEVENT_TAG, IPC_NTCREATEKEY_TAG, IPC_NTOPENKEY_TAG, - IPC_DUPLICATEHANDLEPROXY_TAG, IPC_GDI_GDIDLLINITIALIZE_TAG, IPC_GDI_GETSTOCKOBJECT_TAG, IPC_USER_REGISTERCLASSW_TAG,
diff --git a/sandbox/win/src/sandbox.h b/sandbox/win/src/sandbox.h index 915a697..0012772 100644 --- a/sandbox/win/src/sandbox.h +++ b/sandbox/win/src/sandbox.h
@@ -133,20 +133,6 @@ // information about the current state of the process, such as whether // LowerToken has been called or not. virtual ProcessState* GetState() = 0; - - // Requests the broker to duplicate the supplied handle into the target - // process. The target process must be an active sandbox child process - // and the source process must have a corresponding policy allowing - // handle duplication for this object type. - // Returns: - // ALL_OK if successful. All other return values imply failure. - // If the return is ERROR_GENERIC, you can call ::GetLastError() to get - // more information. - virtual ResultCode DuplicateHandle(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options) = 0; }; } // namespace sandbox
diff --git a/sandbox/win/src/sandbox_policy.h b/sandbox/win/src/sandbox_policy.h index 3dec071..e032444e7 100644 --- a/sandbox/win/src/sandbox_policy.h +++ b/sandbox/win/src/sandbox_policy.h
@@ -26,7 +26,6 @@ SUBSYS_PROCESS, // Creation of child processes. SUBSYS_REGISTRY, // Creation and opening of registry keys. SUBSYS_SYNC, // Creation of named sync objects. - SUBSYS_HANDLES, // Duplication of handles to other processes. SUBSYS_WIN32K_LOCKDOWN // Win32K Lockdown related policy. }; @@ -38,9 +37,6 @@ FILES_ALLOW_QUERY, // Allows access to query the attributes of a file. FILES_ALLOW_DIR_ANY, // Allows open or create with directory semantics // only. - HANDLES_DUP_ANY, // Allows duplicating handles opened with any - // access permissions. - HANDLES_DUP_BROKER, // Allows duplicating handles to the broker process. NAMEDPIPES_ALLOW_ANY, // Allows creation of a named pipe. PROCESS_MIN_EXEC, // Allows to create a process with minimal rights // over the resulting process and thread handles.
diff --git a/sandbox/win/src/sandbox_policy_base.cc b/sandbox/win/src/sandbox_policy_base.cc index 98cbff6..739941a 100644 --- a/sandbox/win/src/sandbox_policy_base.cc +++ b/sandbox/win/src/sandbox_policy_base.cc
@@ -15,7 +15,6 @@ #include "base/strings/stringprintf.h" #include "base/win/windows_version.h" #include "sandbox/win/src/filesystem_policy.h" -#include "sandbox/win/src/handle_policy.h" #include "sandbox/win/src/interception.h" #include "sandbox/win/src/job.h" #include "sandbox/win/src/named_pipe_policy.h" @@ -696,14 +695,6 @@ } break; } - case SUBSYS_HANDLES: { - if (!HandlePolicy::GenerateRules(pattern, semantics, policy_maker_)) { - NOTREACHED(); - return SBOX_ERROR_BAD_PARAMS; - } - break; - } - case SUBSYS_WIN32K_LOCKDOWN: { if (!ProcessMitigationsWin32KLockdownPolicy::GenerateRules( pattern, semantics, policy_maker_)) {
diff --git a/sandbox/win/src/target_services.cc b/sandbox/win/src/target_services.cc index 2c037b9f..ec2fa71 100644 --- a/sandbox/win/src/target_services.cc +++ b/sandbox/win/src/target_services.cc
@@ -12,7 +12,6 @@ #include "base/win/windows_version.h" #include "sandbox/win/src/crosscall_client.h" #include "sandbox/win/src/handle_closer_agent.h" -#include "sandbox/win/src/handle_interception.h" #include "sandbox/win/src/ipc_tags.h" #include "sandbox/win/src/process_mitigations.h" #include "sandbox/win/src/restricted_token_utils.h" @@ -245,14 +244,4 @@ csrss_connected_ = csrss_connected; } - -ResultCode TargetServicesBase::DuplicateHandle(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options) { - return sandbox::DuplicateHandleProxy(source_handle, target_process_id, - target_handle, desired_access, options); -} - } // namespace sandbox
diff --git a/sandbox/win/src/target_services.h b/sandbox/win/src/target_services.h index 3716948..45e0d8e 100644 --- a/sandbox/win/src/target_services.h +++ b/sandbox/win/src/target_services.h
@@ -46,11 +46,6 @@ ResultCode Init() override; void LowerToken() override; ProcessState* GetState() override; - ResultCode DuplicateHandle(HANDLE source_handle, - DWORD target_process_id, - HANDLE* target_handle, - DWORD desired_access, - DWORD options) override; // Factory method. static TargetServicesBase* GetInstance();
diff --git a/sandbox/win/src/top_level_dispatcher.cc b/sandbox/win/src/top_level_dispatcher.cc index f09ca4e..b2c8023 100644 --- a/sandbox/win/src/top_level_dispatcher.cc +++ b/sandbox/win/src/top_level_dispatcher.cc
@@ -10,7 +10,6 @@ #include "base/logging.h" #include "sandbox/win/src/crosscall_server.h" #include "sandbox/win/src/filesystem_dispatcher.h" -#include "sandbox/win/src/handle_dispatcher.h" #include "sandbox/win/src/interception.h" #include "sandbox/win/src/internal_types.h" #include "sandbox/win/src/ipc_tags.h" @@ -59,10 +58,6 @@ ipc_targets_[IPC_NTOPENKEY_TAG] = dispatcher; registry_dispatcher_.reset(dispatcher); - dispatcher = new HandleDispatcher(policy_); - ipc_targets_[IPC_DUPLICATEHANDLEPROXY_TAG] = dispatcher; - handle_dispatcher_.reset(dispatcher); - dispatcher = new ProcessMitigationsWin32KDispatcher(policy_); ipc_targets_[IPC_GDI_GDIDLLINITIALIZE_TAG] = dispatcher; ipc_targets_[IPC_GDI_GETSTOCKOBJECT_TAG] = dispatcher;
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h index 234fb82a..72920b15 100644 --- a/skia/config/SkUserConfig.h +++ b/skia/config/SkUserConfig.h
@@ -242,10 +242,6 @@ # define SK_SUPPORT_LEGACY_EVAL_CUBIC #endif -#ifndef SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS -# define SK_SUPPORT_LEGACY_PEEKPIXELS_PARMS -#endif - #ifndef SK_SUPPORT_LEGACY_TYPEFACE_PTR # define SK_SUPPORT_LEGACY_TYPEFACE_PTR #endif
diff --git a/styleguide/c++/c++11.html b/styleguide/c++/c++11.html index 1dba165..12644ef 100644 --- a/styleguide/c++/c++11.html +++ b/styleguide/c++/c++11.html
@@ -33,7 +33,7 @@ feature by sending an email to <a href="https://groups.google.com/a/chromium.org/forum/#!forum/cxx">cxx@chromium.org</a>. Ideally include a short blurb on what the feature is, and why you think it -should or should not be allowed. Ideally, the list will arrive at some +should or should not be allowed. Ideally, the list will arrive at some consensus and the wiki page will be updated to mention that consensus. If there's no consensus, <code>src/styleguide/c++/OWNERS</code> get to decide -- for divisive features, we expect the decision to be to not use the feature yet @@ -81,11 +81,9 @@ <tr> <td>Angle Bracket Parsing in Templates</td> -<td><code>>></code> for <code>> ></code> and <br /> -<code><::</code> for <code>< ::</code></td> +<td><code>>></code> for <code>> ></code>, <code><::</code> for <code>< ::</code></td> <td>More intuitive parsing of template parameters</td> -<td><a href="http://stackoverflow.com/questions/15785496/c-templates-angle-brackets-pitfall-what-is-the-c11-fix"> -C++ Templates Angle Brackets Pitfall</a></td> +<td><a href="http://stackoverflow.com/questions/15785496/c-templates-angle-brackets-pitfall-what-is-the-c11-fix">C++ Templates Angle Brackets Pitfall</a></td> <td>Recommended to increase readability. Approved without discussion.</td> </tr> @@ -93,8 +91,7 @@ <td>Arrays</td> <td><code>std::array</code></td> <td>A fixed-size replacement for built-in arrays, with STL support</td> -<td><a href="http://en.cppreference.com/w/cpp/container/array"> -std::array</a></td> +<td><a href="http://en.cppreference.com/w/cpp/container/array">std::array</a></td> <td>Useful in performance-critical situations, with small, fixed-size arrays. In most cases, consider std::vector instead. std::vector is cheaper to std::move and is more widely used. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/pVRQCRWHEU8">Discussion thread</a>.</td> </tr> @@ -102,11 +99,8 @@ <td>Automatic Types</td> <td><code>auto</code></td> <td>Automatic type deduction</td> -<td><a href="http://en.cppreference.com/w/cpp/language/auto"> -auto specifier</a></td> -<td>Use according to the <a -href="https://google.github.io/styleguide/cppguide.html#auto">Google -Style Guide on <code>auto</code></a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/OQyYSfH9m2M">Discussion thread</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/5-Bt3BJzAo0">Another discussion thread</a>.</td> +<td><a href="http://en.cppreference.com/w/cpp/language/auto">auto specifier</a></td> +<td><a href="https://google.github.io/styleguide/cppguide.html#auto">Google Style Guide</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/OQyYSfH9m2M">Discussion thread</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/5-Bt3BJzAo0">Another discussion thread</a>.</td> </tr> <tr> @@ -120,75 +114,52 @@ <tr> <td>Declared Type Accessor</td> <td><code>decltype(<i>expression</i>)</code></td> -<td>Provides a means to determine the type of an expression at compile-time, -useful most often in templates.</td> -<td><a href="http://en.cppreference.com/w/cpp/language/decltype"> -decltype specifier</a></td> +<td>Provides a means to determine the type of an expression at compile-time, useful most often in templates.</td> +<td><a href="http://en.cppreference.com/w/cpp/language/decltype">decltype specifier</a></td> <td>Usage should be rare. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/_zoNvZd_dSo">Discussion thread</a></td> </tr> <tr> -<td>Declared Type As Value</td> -<td><code>declval(<i>expression</i>)</code></td> -<td>Converts a type to a reference of the type to allow use of members of -the type without constructing it in templates.</td> -<td><a href="http://en.cppreference.com/w/cpp/language/declval"> -decltype specifier</a></td> -<td>Usage should be rare. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/ku6lYjk0-OU/discussion">Discussion thread</a></td> -</tr> - -<tr> <td>Default Function Creation</td> <td><code><i>Function</i>(<i>arguments</i>) = default;</code></td> -<td>Instructs the compiler to generate a default version -of the indicated function</td> -<td><a href="http://stackoverflow.com/questions/823935/whats-the-point-in-defaulting-functions-in-c11"> -What's the point in defaulting functions in C++11?</a></td> -<td>Doesn't work for move constructors and move assignment operators in MSVC2013. -<a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/qgU4mh_MpGA">Discussion thread</a></td> +<td>Instructs the compiler to generate a default version of the indicated function</td> +<td><a href="http://stackoverflow.com/questions/823935/whats-the-point-in-defaulting-functions-in-c11">What's the point in defaulting functions in C++11?</a></td> +<td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/qgU4mh_MpGA">Discussion thread</a></td> </tr> <tr> <td>Default Function Template Arguments</td> -<td><code>template <typename T = <i>type</i>> <br /> - <i>type</i> <i>Function</i>(T <i>var</i>) {}</code></td> +<td><code>template <typename T = <i>type</i>><br /> +<i>type</i> <i>Function</i>(T <i>var</i>) {}</code></td> <td>Allow function templates, like classes, to have default arguments</td> -<td><a href="http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates"> -Default Template Arguments for Function Templates</a></td> +<td><a href="http://stackoverflow.com/questions/2447458/default-template-arguments-for-function-templates">Default Template Arguments for Function Templates</a></td> <td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/9KtaAsome-o">Discussion thread</a></td> </tr> <tr> <td>Delegated Constructors</td> -<td><code>Class() : Class(0) {}</code><br /> -<code>Class(<i>type</i> <i>var</i>) : Class(<i>var</i>, 0)</code></td> +<td><code>Class() : Class(0) {}<br /> +Class(<i>type</i> <i>var</i>) : Class(<i>var</i>, 0) {}</code></td> <td>Allow overloaded constructors to use common initialization code</td> -<td><a href="https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/introduction_to_the_c_11_feature_delegating_constructors?lang=en"> -Introduction to the C++11 feature: delegating constructors</a></td> +<td><a href="https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/introduction_to_the_c_11_feature_delegating_constructors?lang=en">Introduction to the C++11 feature: delegating constructors</a></td> <td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/0zVA8Ctx3Xo">Discussion thread</a></td> </tr> <tr> <td>Enumerated Type Classes and Enum Bases</td> -<td><code>enum class <i>classname</i></code><br> - <code>enum class <i>classname</i> : <i>base-type</i></code><br> - <code>enum <i>enumname</i> : <i>base-type</i></code></td> -<td>Provide enums as full classes, with no implicit -conversion to booleans or integers. Provide an explicit underlying type for -enum classes and regular enums.</td> +<td><code>enum class <i>classname</i><br /> +enum class <i>classname</i> : <i>base-type</i><br /> +enum <i>enumname</i> : <i>base-type</i></code></td> +<td>Provide enums as full classes, with no implicit conversion to booleans or integers. Provide an explicit underlying type for enum classes and regular enums.</td> <td><a href="http://www.stroustrup.com/C++11FAQ.html#enum">enum-class</a></td> -<td>Enum classes are still enums and follow enum naming rules -(which means SHOUTY_CASE in the <a href="http://www.chromium.org/developers/coding-style#Naming">current style guide</a>). -<a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/Q5WmkAImanc">Discussion thread</a></td> +<td>Enum classes are still enums and follow enum naming rules (which means SHOUTY_CASE in the <a href="http://www.chromium.org/developers/coding-style#Naming">Chromium Style Guide</a>). <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/Q5WmkAImanc">Discussion thread</a></td> </tr> <tr> <td>Explicit Conversion Operators</td> -<td><code>explicit operator <i>type</i>() { -<br /> // code<br /> }</code></td> +<td><code>explicit operator <i>type</i>() { ... }</code></td> <td>Allows conversion operators that cannot be implicitly invoked</td> -<td><a href="http://en.cppreference.com/w/cpp/language/explicit"> -explicit specifier</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/explicit">explicit specifier</a></td> <td>Prefer to the "safe bool" idiom. <a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/zGF1SrQ-1HQ/BAiC12vwPeEJ">Discussion thread</a></td> </tr> @@ -197,14 +168,13 @@ <td><code>final</code></td> <td> Indicates that a class or function is final and cannot be overridden</td> <td><a href="http://en.cppreference.com/w/cpp/language/final">final Language Reference</a></td> -<td>Recommended for new code. Existing uses of the <code>FINAL</code> macro will be <a href="https://crbug.com/417463">replaced throughout the codebase</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/VTNZzizN0zo">Discussion thread</a></td> +<td>Recommended for new code. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/VTNZzizN0zo">Discussion thread</a></td> </tr> <tr> <td>Function Suppression</td> <td><code><i>Function</i>(<i>arguments</i>) = delete;</code></td> -<td>Suppresses the implementation of a function, especially a -synthetic function such as a copy constructor</td> +<td>Suppresses the implementation of a function, especially a synthetic function such as a copy constructor</td> <td>TODO: documentation link</td> <td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/i1o7-RNRnMs">Discussion thread</a></td> </tr> @@ -214,54 +184,33 @@ <td><code>[<i>captures</i>](<i>params</i>) -> <i>ret</i> { <i>body</i> }</code></td> <td>Anonymous functions</td> <td><a href="http://en.cppreference.com/w/cpp/language/lambda">Lambda functions</a></td> -<td>Do not bind or store lambdas; use <code>base::Bind</code> and -<code>base::Callback</code> instead, because they offer protection against a -large class of object lifetime mistakes. Don't use default captures -(<code>[=]</code>, <code>[&]</code> – <a - href="https://google.github.io/styleguide/cppguide.html#Lambda_expressions">Google Style Guide</a>). -Lambdas are typically useful as a parameter to methods or -functions that will use them immediately, such as those in -<code><algorithm></code>. <a - href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/D9UnnxBnciQ">Discussion - thread</a></td> +<td>Do not bind or store lambdas; use <code>base::Bind</code> and <code>base::Callback</code> instead, because they offer protection against a large class of object lifetime mistakes. Don't use default captures (<code>[=]</code>, <code>[&]</code> – <a href="https://google.github.io/styleguide/cppguide.html#Lambda_expressions">Google Style Guide</a>). Lambdas are typically useful as a parameter to methods or functions that will use them immediately, such as those in <code><algorithm></code>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/D9UnnxBnciQ">Discussion thread</a></td> </tr> <tr> <td>Local Types as Template Arguments</td> <td></td> <td>Allows local and unnamed types as template arguments</td> -<td><a href="http://stackoverflow.com/questions/742607/using-local-classes-with-stl-algorithms"> -Local types, types without linkage and unnamed types as template arguments</a></td> +<td><a href="http://stackoverflow.com/questions/742607/using-local-classes-with-stl-algorithms">Local types, types without linkage and unnamed types as template arguments</a></td> <td>Usage should be rare. Approved without discussion.</td> </tr> <tr> <td>Non-Static Class Member Initializers</td> -<td> -<code> -class C {<br /> - <i>type</i> <i>var</i> = <i>value</i>;<br/> - C() // copy-initializes <i>var</i><br/> -</code> +<td><code>class C {<br /> + <i>type</i> <i>var</i> = <i>value</i>;<br /> + C() // copy-initializes <i>var</i></code> <td>Allows non-static class members to be initialized at their definitions (outside constructors)</td> -<td><a href="http://en.cppreference.com/w/cpp/language/data_members"> -Non-static data members</a></td> -<td> -<a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/zqB-DySA4V0">Discussion thread</a> -</td> +<td><a href="http://en.cppreference.com/w/cpp/language/data_members">Non-static data members</a></td> +<td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/zqB-DySA4V0">Discussion thread</a></td> </tr> <tr> <td>Null Pointer Constant</td> <td><code>nullptr</code></td> <td>Declares a type-safe null pointer</td> -<td><a href="http://en.cppreference.com/w/cpp/language/nullptr"> -nullptr</a></td> -<td>Recommended for new code. -<a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/4mijeJHzxLg">Discussion thread</a>. -<a href="https://google.github.io/styleguide/cppguide.html#0_and_nullptr/NULL">Google Style Guide</a>. -<code>std::nullptr_t</code> can be used too. -</td> +<td><a href="http://en.cppreference.com/w/cpp/language/nullptr">nullptr</a></td> +<td>Prefer over <code>NULL</code> or <code>0</code>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/4mijeJHzxLg">Discussion thread</a>. <a href="https://google.github.io/styleguide/cppguide.html#0_and_nullptr/NULL">Google Style Guide</a>. <code>std::nullptr_t</code> can be used too.</td> </tr> <tr> @@ -269,44 +218,31 @@ <td><code>override</code></td> <td>Indicates that a class or function overrides a base implementation</td> <td><a href="http://en.cppreference.com/w/cpp/language/override">override Language Reference</a></td> -<td>Recommended for new code. Existing uses of the <code>OVERRIDE</code> macro will be <a href="https://crbug.com/417463">replaced throughout the codebase</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/VTNZzizN0zo">Discussion</a></td> +<td>Recommended for new code. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/VTNZzizN0zo">Discussion thread</a></td> </tr> <tr> <td>Range-Based For Loops</td> <td><code>for (<i>type</i> <i>var</i> : <i>range</i>)</code></td> -<td>Facilitates a more concise syntax for iterating over the elements -of a container (or a range of iterators) in a <code>for</code> loop</td> -<td><a href="http://en.cppreference.com/w/cpp/language/range-for"> -Range-based for loop</a></td> +<td>Facilitates a more concise syntax for iterating over the elements of a container (or a range of iterators) in a <code>for</code> loop</td> +<td><a href="http://en.cppreference.com/w/cpp/language/range-for">Range-based for loop</a></td> <td>As a rule of thumb, use <code>for (const auto& ...)</code>, <code>for (auto& ...)</code>, or <code>for (<i>concrete type</i> ...)</code>. For pointers, use <code>for (auto* ...)</code> to make clear that the copy of the loop variable is intended, and only a pointer is copied. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/hpzz4EqbVmc">Discussion thread</a></td> </tr> <tr> <td>Rvalue References</td> -<td><code>T(T&& t)</code> and <code>T& operator=(T&& t)</code><br/><br/> - <code>template <typename T><br/>void Function(T&& t) { ... }</code></td> +<td><code>T(T&& t)</code> and <code>T& operator=(T&& t)<br/><br/> +template <typename T><br/>void Function(T&& t) { ... }</code></td> <td>Reference that only binds to a temporary object</td> -<td><a href="http://en.cppreference.com/w/cpp/language/references#Rvalue_references"> -Rvalue references</a></td> -<td>As per the <a href="https://google.github.io/styleguide/cppguide.html#Rvalue_references">Google style guide</a>: Only use these to define move constructors and move assignment operators, and for perfect forwarding.<br/>Most classes should not be copyable, even if movable. Continue to use DISALLOW_COPY_AND_ASSIGN (or DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND if needed) in most cases. <a href="https://groups.google.com/a/chromium.org/d/topic/chromium-dev/UnRaORb4TSw">Discussion thread</a> and <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/Q526tkruXpM">discussion thread</a>. -<br/><br/> -MSVC 2013 has some known bugs with rvalue references: -<ul> -<li>Exported classes generate copy constructors even if they are not used, which tries to use copy constructors on members. Use DISALLOW_COPY_AND_ASSIGN on the exported class to resolve it.</li> -<li>The compiler chooses a T::(T&) constructor before T::(T&&). However copy constructors should be written as T::T(const T&) and these are prioritized correctly.</li> -<li>The compiler does not create default move constructors, either implicitly or with the =default keyword. You must provide such constructors explicitly to create them.</li> -</ul> -</td> +<td><a href="http://en.cppreference.com/w/cpp/language/references#Rvalue_references">Rvalue references</a></td> +<td>As per the <a href="https://google.github.io/styleguide/cppguide.html#Rvalue_references">Google Style Guide</a>: Only use these to define move constructors and move assignment operators, and for perfect forwarding. Most classes should not be copyable, even if movable. Continue to use DISALLOW_COPY_AND_ASSIGN (or DISALLOW_COPY_AND_ASSIGN_WITH_MOVE_FOR_BIND if needed) in most cases. <a href="https://groups.google.com/a/chromium.org/d/topic/chromium-dev/UnRaORb4TSw">Discussion thread</a>. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/Q526tkruXpM">Another discussion thread</a>.</td> </tr> <tr> <td>Standard Integers</td> -<td>Typedefs within <code><stdint.h></code> -and <code><inttypes></code></td> +<td>Typedefs within <code><stdint.h></code> and <code><inttypes></code></td> <td>Provides fixed-size integers independent of platforms</td> -<td><a href="http://www.cplusplus.com/reference/cstdint/"> -<stdint.h> (cstdint)</a></td> +<td><a href="http://www.cplusplus.com/reference/cstdint/"><stdint.h> (cstdint)</a></td> <td>Already in common use in the codebase. Approved without discussion.</td> </tr> @@ -322,8 +258,7 @@ <td>Variadic Macros</td> <td><code>#define <i>MACRO</i>(...) <i>Impl</i>(<i>args</i>, __VA_ARGS__)</code></td> <td>Allows macros that accept a variable number of arguments</td> -<td><a href="http://stackoverflow.com/questions/4786649/are-variadic-macros-nonstandard"> -Are Variadic macros nonstandard?</a></td> +<td><a href="http://stackoverflow.com/questions/4786649/are-variadic-macros-nonstandard">Are Variadic macros nonstandard?</a></td> <td>Usage should be rare. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/sRx9j3CQqyA">Discussion thread</a></td> </tr> @@ -331,8 +266,7 @@ <td>Variadic Templates</td> <td><code>template <<i>typename</i> ... <i>arg</i>></code></td> <td>Allows templates that accept a variable number of arguments</td> -<td><a href="http://en.cppreference.com/w/cpp/language/parameter_pack"> -Parameter pack</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/parameter_pack">Parameter pack</a></td> <td>Usage should be rare. Use instead of .pump files. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/6ItymeMXpMc">Discussion thread</a></td> </tr> @@ -374,37 +308,34 @@ <code>is_sorted</code>, <code>is_sorted_until</code><br/> <code>is_heap</code>, <code>is_heap_until</code><br/> <code>minmax</code>, <code>minmax_element</code><br/> -<code>is_permutation<br/> -</td> +<code>is_permutation<br/></td> <td>Safe and performant implementations of common algorithms</td> <td><a href="http://en.cppreference.com/w/cpp/header/algorithm"><code><algorithm></code></a></td> -<td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/UJQk8S1IuHk">Discussion thread</a><br/> -Note that <algorithm> contains a range-based <code>move</code> method. This is allowed, but because people may confuse it with the single-arg <code>std::move</code>, there is often a way to write code without it that is more readable. <a href='https://groups.google.com/a/chromium.org/forum/#!topic/cxx/8WzmtYrZvQ8'>Discussion thread</a></td> +<td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/UJQk8S1IuHk">Discussion thread</a><br/> Note that <algorithm> contains a range-based <code>move</code> method. This is allowed, but because people may confuse it with the single-arg <code>std::move</code>, there is often a way to write code without it that is more readable. <a href='https://groups.google.com/a/chromium.org/forum/#!topic/cxx/8WzmtYrZvQ8'>Discussion thread</a></td> </tr> <tr> <td>Begin and End Non-Member Functions</td> -<td><code>std::begin()</code> and <code>std::end()</code></td> +<td><code>std::begin()</code>, <code>std::end()</code></td> <td>Allows use of free functions on any container, including fixed-size arrays</td> -<td><a href="http://en.cppreference.com/w/cpp/iterator/begin">std::begin</a> and <a href="http://en.cppreference.com/w/cpp/iterator/end">std::end</a></td> -<td>Useful for fixed-size arrays. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/5iFNE8P5qT4/discussion">Discussion thread</a><br> -Note that non-member <code>cbegin()</code> and <code>cend()</code> are not available until C++14.</td> +<td><a href="http://en.cppreference.com/w/cpp/iterator/begin">std::begin</a>, <a href="http://en.cppreference.com/w/cpp/iterator/end">std::end</a></td> +<td>Useful for fixed-size arrays. Note that non-member <code>cbegin()</code> and <code>cend()</code> are not available until C++14. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/5iFNE8P5qT4/discussion">Discussion thread</a></td> </tr> <tr> <td>Conditional Type Selection</td> -<td><code>std::enable_if</code> and <code>std::conditional</code></td> +<td><code>std::enable_if</code>, <code>std::conditional</code></td> <td>Enables compile-time conditional type selection</td> -<td><a href="http://en.cppreference.com/w/cpp/types/enable_if">std::enable_if</a> and <a href="http://en.cppreference.com/w/cpp/types/conditional">conditional</a></td> +<td><a href="http://en.cppreference.com/w/cpp/types/enable_if">std::enable_if</a>, <a href="http://en.cppreference.com/w/cpp/types/conditional">conditional</a></td> <td>Usage should be rare. <a href='https://groups.google.com/a/chromium.org/forum/#!topic/cxx/vCxo4tZNd_M'>Discussion thread</a></td> </tr> <tr> <td>Constant Iterator Methods on Containers</td> -<td><code>std::vector::cbegin()</code>, <code>std::vector::cend()</code></td> +<td>E.g. <code>std::vector::cbegin()</code>, <code>std::vector::cend()</code></td> <td>Allows more widespread use of <code>const_iterator</code></td> -<td>E.g. <a href="http://en.cppreference.com/w/cpp/container/vector/begin">std::vector::cbegin<a> and <a href="http://en.cppreference.com/w/cpp/container/vector/end">std::vector::cend<a></td> -<td>Applies to all containers, not just <code>vector</code>. Consider using <code>const_iterator</code> over <code>iterator</code> where possible for the same reason as using <code>const</code> variables and functions where possible; see Effective Modern C++ item 13 for motivation. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/cS83F_buqLM/discussion">Discussion thread</a></td> +<td><a href="http://en.cppreference.com/w/cpp/container/vector/begin">std::vector::cbegin</a>, <a href="http://en.cppreference.com/w/cpp/container/vector/end">std::vector::cend<a></td> +<td>Applies to all containers, not just <code>vector</code>. Consider using <code>const_iterator</code> over <code>iterator</code> where possible for the same reason as using <code>const</code> variables and functions where possible; see Effective Modern C++ item 13 for motivation. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/cS83F_buqLM/discussion">Discussion thread</a></td> </tr> <tr> @@ -412,15 +343,23 @@ <td><code>vector<scoped_ptr></code></td> <td>Enables containers that contain move-only types like <code>scoped_ptr</code></td> <td>TODO</td> -<td>Allows getting rid of <a href="http://crbug.com/554289">ScopedVector</a></td> +<td>Prefer over <a href="http://crbug.com/554289">ScopedVector</a>.</td> +</tr> + +<tr> +<td>Declared Type As Value</td> +<td><code>std::declval<<i>class</i>>()</code></td> +<td>Converts a type to a reference of the type to allow use of members of the type without constructing it in templates.</td> +<td><a href="http://en.cppreference.com/w/cpp/utility/declval">std::declval</a></td> +<td>Usage should be rare. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/ku6lYjk0-OU/discussion">Discussion thread</a></td> </tr> <tr> <td>Emplacement methods for containers</td> <td><code>emplace()</code>, <code>emplace_back()</code>, <code>emplace_front()</code>, <code>emplace_hint()</code></td> -<td>Constructs elements directly within a container without a copy or a move. Less verbose than <code>push_back()</code> due to not naming the type being constructed.</td> +<td>Constructs elements directly within a container without a copy or a move. Less verbose than <code>push_back()</code> due to not naming the type being constructed.</td> <td>E.g. <a href="http://en.cppreference.com/w/cpp/container/vector/emplace_back">std::vector::emplace_back</a></td> -<td><code>std::map::emplace()</code> is not yet available on all libstdc++ versions we support. When using emplacement for performance reasons, your type should probably be movable (since e.g. a vector of it might be resized); given a movable type, then, consider whether you really need to avoid the move done by <code>push_back()</code>. For readability concerns, treat like <code>auto</code>; sometimes the brevity over <code>push_back()</code> is a win, sometimes a loss. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/m3cblzEta7A">Discussion thread</a></td> +<td><code>std::map::emplace()</code> is not yet available on all libstdc++ versions we support. When using emplacement for performance reasons, your type should probably be movable (since e.g. a vector of it might be resized); given a movable type, then, consider whether you really need to avoid the move done by <code>push_back()</code>. For readability concerns, treat like <code>auto</code>; sometimes the brevity over <code>push_back()</code> is a win, sometimes a loss. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/m3cblzEta7A">Discussion thread</a></td> </tr> <tr> @@ -428,9 +367,7 @@ <td><code>std::forward()</code></td> <td>Perfectly forwards arguments (including rvalues)</td> <td><a href="http://en.cppreference.com/w/cpp/utility/forward"><code>std::forward</code></a></td> -<td> - Allowed, though usage should be rare (primarily for forwarding constructor arguments, or in carefully reviewed library code). - <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/-O7euklhSxs/discussion">Discussion thread</a> +<td>Allowed, though usage should be rare (primarily for forwarding constructor arguments, or in carefully reviewed library code). <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/-O7euklhSxs/discussion">Discussion thread</a> </td> </tr> @@ -439,7 +376,7 @@ <td><code>tie(a, b, c) <<br> tie(rhs.a, rhs.b, rhs.c)</code></td> <td>Idiom for <code>operator<</code> implementation</td> <td><a href="http://en.cppreference.com/w/cpp/utility/tuple/tie">std::tie</a></td> -<td>General use of <code>std::tuple</code>, and <code>std::tie</code> for unpacking or multiple assignments is still not allowed. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/3DZ64dIMRTY/discussion">Discussion thread</a></td> +<td>General use of <code>std::tie</code> for unpacking or multiple assignments is still not allowed. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/3DZ64dIMRTY/discussion">Discussion thread</a></td> </tr> <tr> @@ -472,12 +409,9 @@ <tr> <td>String Direct Reference Functions</td> -<td><code>std::string::front()</code> and <code>std::string::back()</code></td> +<td><code>std::string::front()</code>, <code>std::string::back()</code></td> <td>Returns a reference to the front or back of a string</td> -<td><a href="http://en.cppreference.com/w/cpp/string/basic_string/front"> -std::basic_string::front</a> and -<a href="http://en.cppreference.com/w/cpp/string/basic_string/back"> -std::basic_string::back</a></td> +<td><a href="http://en.cppreference.com/w/cpp/string/basic_string/front">std::basic_string::front</a>, <a href="http://en.cppreference.com/w/cpp/string/basic_string/back">std::basic_string::back</a></td> <td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/DRJuROAYCV4">Discussion thread</a></td> </tr> @@ -488,11 +422,10 @@ <code>is_floating_point</code>, <code>is_rvalue_reference</code>, <code>is_scalar</code><br/> <code>is_const</code>, <code>is_pod</code>, <code>is_unsigned</code><br/> <code>is_default_constructible</code>, <code>is_move_constructible</code>, <code>is_copy_assignable</code><br/> -<code>enable_if</code>, <code>conditional</code>, <code>result_of</code><br/> -</td> +<code>enable_if</code>, <code>conditional</code>, <code>result_of</code><br/></td> <td>Allows compile-time inspection of the properties of types</td> <td><a href="http://en.cppreference.com/w/cpp/header/type_traits"><type_traits></a></td> -<td>Note that not all type traits are available on all platforms (eg std::underlying_type doesn't work in libstdc++4.6). Use judiciously. <a href='https://groups.google.com/a/chromium.org/forum/#!topic/cxx/vCxo4tZNd_M'>Discussion thread</a></td> +<td>Note that not all type traits are available on all platforms (e.g. <code>std::underlying_type</code> doesn't work in libstdc++4.6). Use judiciously. <a href='https://groups.google.com/a/chromium.org/forum/#!topic/cxx/vCxo4tZNd_M'>Discussion thread</a></td> </tr> <tr> @@ -500,20 +433,15 @@ <td><code>std::tuple</code></td> <td>A fixed-size ordered collection of values of mixed types</td> <td><a href="http://en.cppreference.com/w/cpp/utility/tuple">std::tuple</a></td> -<td><a href="https://crbug.com/554987">Tracking bug</a> to plan moving from <code>base::Tuple</code> to <code>std::tuple</code>. See also <code>std::tie</code>. -<code>base::Tuple</code> is now an alias for <code>std::tuple</code>. In class template specializations, use <code>std::tuple</code> instead of <code>base::Tuple</code> to work around a MSVS2013 internal compiler error (Error code: C1001). -</td> +<td>Prefer over <a href="https://crbug.com/554987">base::Tuple</a>.</td> </tr> <tr> <td>Unordered Associative Containers</td> -<td><code>std::unordered_set</code>, <code>std::unordered_map</code>, -<code>std::unordered_multiset</code>, and <code>std::unordered_multimap</code></td> +<td><code>std::unordered_set</code>, <code>std::unordered_map</code>, <code>std::unordered_multiset</code>, <code>std::unordered_multimap</code></td> <td>Allows efficient containers of key/value pairs</td> -<td><a href="http://en.cppreference.com/w/cpp/container/unordered_map">std::unordered_map</a> -and <a href="http://en.cppreference.com/w/cpp/container/unordered_set">std::unordered_set</a> -</td> -<td>Per the <a href="https://google.github.io/styleguide/cppguide.html#std_hash">Google style guide</a>, specify custom hashers instead of specializing <code>std::hash</code> for custom types. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/nCdjQqnouO4">Discussion thread</a>.</td> +<td><a href="http://en.cppreference.com/w/cpp/container/unordered_map">std::unordered_map</a>, <a href="http://en.cppreference.com/w/cpp/container/unordered_set">std::unordered_set</a></td> +<td>Per the <a href="https://google.github.io/styleguide/cppguide.html#std_hash">Google Style Guide</a>, specify custom hashers instead of specializing <code>std::hash</code> for custom types. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/cxx/nCdjQqnouO4">Discussion thread</a>.</td> </tr> <tr> @@ -521,7 +449,7 @@ <td><code>std::unique_ptr<<i>type</i>></code></td> <td>A smart pointer with sole ownership of the owned object.</td> <td><a href="http://en.cppreference.com/w/cpp/memory/unique_ptr">std::unique_ptr</a></td> -<td>Google style guide: <a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart_Pointers">Ownership and Smart Pointers</a>. <a href="https://groups.google.com/a/chromium.org/d/msg/cxx/aT2wsBLKvzI/oZuZ718oAwAJ">Discussion thread</a>. Use in all newly written code. scoped_ptr is a <a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/roY78iTblYc/bb8nYsxfCgAJ">typedef for std::unique_ptr</a> and is going away shortly.</td> +<td>Use in all newly written code. <a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart_Pointers">Google Style Guide</a>. <a href="https://groups.google.com/a/chromium.org/d/msg/cxx/aT2wsBLKvzI/oZuZ718oAwAJ">Discussion thread</a>. <code>scoped_ptr</code> is a <a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/roY78iTblYc/bb8nYsxfCgAJ">typedef for <code>std::unique_ptr</code></a> and is going away shortly.</td> </tr> </tbody> @@ -550,106 +478,82 @@ <tr> <td>Alignment Features</td> -<td> -<code>alignas</code> specifier, -<code>alignof</code> operator +<td><code>alignas</code> specifier, <code>alignof</code> operator</td> <td>Object alignment</td> -<td> -<a href="http://en.cppreference.com/w/cpp/language/alignas">alignas</a>, -<a href="http://en.cppreference.com/w/cpp/language/alignof">alignof</a> -</td> -<td> -<a href="https://codereview.chromium.org/1497963002/">Doesn't work in -MSVS2013</a>. -<a href="https://msdn.microsoft.com/en-us/library/dn956970.aspx">MSVS2015 -supports them</a>; reevaluate after MSVS2015 is available. -<a href="https://groups.google.com/a/chromium.org/d/msg/cxx/rwXN02jzzq0/CpUc1ZzMBQAJ">Discussion thread</a> -</td> +<td><a href="http://en.cppreference.com/w/cpp/language/alignas">alignas</a>, <a href="http://en.cppreference.com/w/cpp/language/alignof">alignof</a></td> +<td>Reevaluate now that MSVS2015 is available. <a href="https://groups.google.com/a/chromium.org/d/msg/cxx/rwXN02jzzq0/CpUc1ZzMBQAJ">Discussion thread</a></td> </tr> <tr> <td>Function Local Variable</td> <td><code>__func__</code></td> -<td>Provides a local variable of the name of the enclosing -function for logging purposes</td> -<td><a href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=338"> -The __func__ Predeclared Identifier is Coming to C++</a></td> -<td>Doesn't work in MSVS2013. Reevaluate once it does. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/ojGfcgSDzHM">Discussion thread</a></td> +<td>Provides a local variable of the name of the enclosing function for logging purposes</td> +<td><a href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=338">The __func__ Predeclared Identifier is Coming to C++</a></td> +<td>Reevaluate now that MSVS2015 is available. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/ojGfcgSDzHM">Discussion thread</a></td> </tr> <tr> <td>Inherited Constructors</td> -<td><code>class Derived : Base { -<br /> using Base::Base; -<br />};</code></td> +<td><code>class Derived : Base {<br /> + using Base::Base;<br /> +};</code></td> <td>Allow derived classes to inherit constructors from base classes</td> <td><a href="http://en.cppreference.com/w/cpp/language/using_declaration">Using-declaration</a></td> -<td>Doesn't work in MSVS2013. Reevaluate once it does. <a -href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/BULzgIKZ-Ao/PLO7_GoVNvYJ">Discussion thread</a></td> +<td>Reevaluate now that MSVS2015 is available. <a href="https://groups.google.com/a/chromium.org/d/msg/chromium-dev/BULzgIKZ-Ao/PLO7_GoVNvYJ">Discussion thread</a></td> </tr> <tr> <td><code>long long</code> Type</td> <td><code>long long <i>var</i>= <i>value</i>;</code></td> <td>An integer of at least 64 bits</td> -<td><a href="http://en.cppreference.com/w/cpp/language/types"> -Fundamental types</a></td> -<td>Use an stdint.h type if you need a 64bit number. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/RxugZ-pIDxk">Discussion thread</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/types">Fundamental types</a></td> +<td>Use a stdint.h type if you need a 64bit number. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/RxugZ-pIDxk">Discussion thread</a></td> </tr> <tr> <td>Raw String Literals</td> <td><code>string <i>var</i>=R"(<i>raw_string</i>)";</code></td> -<td>Allows a string to be encoded without any escape -sequences, easing parsing in regex expressions, for example</td> -<td><a href="http://en.cppreference.com/w/cpp/language/string_literal"> -string literal</a></td> +<td>Allows a string to be encoded without any escape sequences, easing parsing in regex expressions, for example</td> +<td><a href="http://en.cppreference.com/w/cpp/language/string_literal">string literal</a></td> <td>Causes incorrect line numbers in MSVS2013 and gcc. Reevaluate once that works. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/2kWQHbbuMHI">Discussion thread</a></td> </tr> <tr> <td>(Uniform) Initialization Syntax</td> -<td><code><i>type</i> <i>name</i> { [<i>value</i> ..., <i>value</i>]};</code></td> -<td>Allows any object of primitive, aggregate or class -type to be initialized using brace syntax</td> +<td><code><i>type</i> <i>name</i> {[<i>value</i> ..., <i>value</i>]};</code></td> +<td>Allows any object of primitive, aggregate or class type to be initialized using brace syntax</td> <td>TODO: documentation link</td> -<td>Dangerous without library support, see thread. Reevaulate once we have C++11 library support. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/GF96FshwHLw">Discussion thread</a></td> +<td>Reevaulate now that MSVS2015 is available. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/GF96FshwHLw">Discussion thread</a></td> </tr> <tr> <td>UTF-16 and UTF-32 Support (16-Bit and 32-Bit Character Types)</td> <td><code>char16_t</code> and <code>char32_t</code></td> -<td>Provides character types for handling 16-bit -and 32-bit code units (useful for encoding -UTF-16 and UTF-32 string data)</td> -<td><a href="http://en.cppreference.com/w/cpp/language/types"> -Fundamental types</a></td> -<td>Doesn't work in MSVS2013. Reevaluate once it does. Non-UTF-8 text is -banned by the -<a href="https://google.github.io/styleguide/cppguide.html#Non-ASCII_Characters"> -C++ Style Guide</a>. However, may be useful for -consuming non-ASCII data. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/ME2kL7_Kvyk">Discussion thread</a></td> +<td>Provides character types for handling 16-bit and 32-bit code units (useful for encoding UTF-16 and UTF-32 string data)</td> +<td><a href="http://en.cppreference.com/w/cpp/language/types">Fundamental types</a></td> +<td>Reevaluate now that MSVS2015 is available. Non-UTF-8 text is banned by the <a href="https://google.github.io/styleguide/cppguide.html#Non-ASCII_Characters">Google Style Guide</a>. However, may be useful for consuming non-ASCII data. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/ME2kL7_Kvyk">Discussion thread</a></td> </tr> <tr> <td>UTF-8, UTF-16, UTF-32 String Literals</td> <td><code>u8"<i>string</i>", u"<i>string</i>", U"<i>string</i>"</code></td> <td>Enforces UTF-8, UTF-16, UTF-32 encoding on all string literals</td> -<td><a href="http://en.cppreference.com/w/cpp/language/string_literal"> -string literal</a></td> -<td>Does not yet work in MSVS2013. Reevaluate once it does. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/gcoUbcjfsII">Discussion thread</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/string_literal">string literal</a></td> +<td>Reevaluate now that MSVS2015 is available. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/gcoUbcjfsII">Discussion thread</a></td> </tr> <tr> <td>Ref-qualified Member Functions</td> -<td><code>class T {<br/> void f() & {}<br/> void f() && {}<br/>};<br/>t.f(); // first<br/>T().f(); // second<br/>std::move(t).f(); // second</code></td> +<td><code>class T {<br /> + void f() & {}<br /> + void f() && {}<br /> +};<br /> +t.f(); // first<br /> +T().f(); // second<br /> +std::move(t).f(); // second</code></td> <td>Allows class member functions to only bind to |this| as an rvalue or lvalue.</td> -<td><a href="http://en.cppreference.com/w/cpp/language/member_functions"> -Member functions</a></td> -<td> - Banned in the google3 C++11 library style guide. Banned in Chromium except by explicit approval from <code>styleguide/c++/OWNERS</code>. - <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/gowclr2LPQA/discussion">Discussion Thread</a> -</td> +<td><a href="http://en.cppreference.com/w/cpp/language/member_functions">Member functions</a></td> +<td>Banned in the <a href="https://google.github.io/styleguide/cppguide.html#C++11">Google Style Guide</a>. Banned in Chromium except by explicit approval from <code>styleguide/c++/OWNERS</code>. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/gowclr2LPQA/discussion">Discussion Thread</a></td> </tr> </tbody> @@ -688,8 +592,8 @@ <tr> <td>Thread Library</td> -<td><code><thread> support, including <future>, -<mutex>, <condition_variable></code></td> +<td><code><thread></code> support, including<br /> +<code><future></code>, <code><mutex></code>, <code><condition_variable></code></td> <td>Provides a standard mulitthreading library using <code>std::thread</code> and associates</td> <td><a href="http://en.cppreference.com/w/cpp/thread">Thread support library</a></td> <td>C++11 has all kinds of classes for threads, mutexes, etc. Since we already have good code for this in <code>base/</code>, we should keep using the base classes, at least at first. <code>base::Thread</code> is tightly coupled to <code>MessageLoop</code> which would make it hard to replace. We should investigate using standard mutexes, or unique_lock, etc. to replace our locking/synchronization classes.</td> @@ -708,11 +612,7 @@ <td><code>std::shared_ptr</code></td> <td>Allows shared ownership of a pointer through reference counts</td> <td><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr">std::shared_ptr</a></td> -<td> - Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. - <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/aT2wsBLKvzI/discussion">Discussion Thread</a>, - <a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart_Pointers">Google Style Guide</a> -</td> +<td>Needs a lot more evaluation for Chromium, and there isn't enough of a push for this feature. <a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart_Pointers">Google Style Guide</a>. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/aT2wsBLKvzI/discussion">Discussion Thread</a>.</td> </tr> <tr> @@ -720,10 +620,7 @@ <td><code>std::initializer_list<T></code></td> <td>Allows containers to be initialized with aggregate elements</td> <td><a href="http://en.cppreference.com/w/cpp/utility/initializer_list"><code>std::initializer_list</code></a></td> -<td> - Banned for now; will be re-evaluated once we switch to MSVC 2015. - <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/TQQ-L51_naM/discussion">Discussion Thread</a> -</td> +<td>Reevaluate now that MSVS2015 is available. <a href="https://groups.google.com/a/chromium.org/d/topic/cxx/TQQ-L51_naM/discussion">Discussion Thread</a></td> </tr> </tbody> @@ -751,23 +648,17 @@ <tr> <td>Attributes</td> <td><code>[[<i>attribute_name</i>]]</code></td> -<td>Attaches properties to declarations that -specific compiler implementations may use.</td> -<td><a href="http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/"> -C++11 generalized attributes</a></td> +<td>Attaches properties to declarations that specific compiler implementations may use.</td> +<td><a href="http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/">C++11 generalized attributes</a></td> <td></td> </tr> <tr> <td>Exception Features</td> -<td><code>noexcept</code>, <code>exception_ptr</code>, -<code>current_exception()</code>, <code>rethrow_exception</code>, -and <code>nested_exception</code></td> +<td><code>noexcept</code>, <code>exception_ptr</code>, <code>current_exception()</code>, <code>rethrow_exception</code>, <code>nested_exception</code></td> <td>Enhancements to exception throwing and handling</td> -<td><a href="http://en.cppreference.com/w/cpp/error/exception"> -std::exception</a></td> -<td>Exceptions are banned by the -<a href="https://google.github.io/styleguide/cppguide.html#Exceptions"> C++ Style Guide</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/8i4tMqNpHhg">Discussion thread</a></td> +<td><a href="http://en.cppreference.com/w/cpp/error/exception">std::exception</a></td> +<td>Exceptions are banned by the <a href="https://google.github.io/styleguide/cppguide.html#Exceptions">Google Style Guide</a>. <a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/8i4tMqNpHhg">Discussion thread</a></td> </tr> <tr> @@ -780,10 +671,9 @@ <tr> <td>Union Class Members</td> -<td><code>union <i>name</i> { <i>class</i> <i>var</i>}</code></td> +<td><code>union <i>name</i> {<i>class</i> <i>var</i>}</code></td> <td>Allows class type members</td> -<td><a href="http://en.cppreference.com/w/cpp/language/union"> -Union declarations</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/union">Union declarations</a></td> <td></td> </tr> @@ -791,8 +681,7 @@ <td>User-Defined Literals</td> <td><code><i>type</i> <i>var</i> = <i>literal_value</i>_<i>type</i></code></td> <td>Allows user-defined literal expressions</td> -<td><a href="http://en.cppreference.com/w/cpp/language/user_literal"> -User-defined literals</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/user_literal">User-defined literals</a></td> <td></td> </tr> @@ -819,33 +708,23 @@ <td><code>std::addressof()</code></td> <td>Obtains the address of an object even with overloaded <code>operator&</code></td> <td><a href="http://en.cppreference.com/w/cpp/memory/addressof">std::addressof</a></td> -<td>Usage should be rare as -<a href="https://google.github.io/styleguide/cppguide.html#Operator_Overloading"> -Operator Overloading</a> is rare and <code>&</code> -should suffice in most cases. May be preferable -over <code>&</code> for performing object -identity checks.</td> +<td>Usage should be rare as <a href="https://google.github.io/styleguide/cppguide.html#Operator_Overloading">operator overloading</a> is rare and <code>&</code> should suffice in most cases. May be preferable over <code>&</code> for performing object identity checks.</td> </tr> <tr> <td>Aligned Storage</td> -<td><code>std::aligned_storage<Size, Align>::type</code> -<code>std::alignment_of<T></code>, -<code>std::aligned_union<Size, ...Types></code> and -<code>std::max_align_t</code></td> +<td><code>std::aligned_storage<Size, Align>::type</code><br /> +<code>std::alignment_of<T></code>, <code>std::aligned_union<Size, ...Types></code> <code>std::max_align_t</code></td> <td>Declare uninitialized storage having a specified alignment, or determine alignments.</td> <td><a href="http://en.cppreference.com/w/cpp/types/aligned_storage">std::aligned_storage</a></td> -<td><code>std::aligned_storage</code> and <code>std::aligned_union</code> are -disallowed in google3 over concerns about compatibility with internal cross-compiling -toolchains.</td> +<td><code>std::aligned_storage</code> and <code>std::aligned_union</code> are disallowed in google3 over concerns about compatibility with internal cross-compiling toolchains.</td> </tr> <tr> <td>Allocator Traits</td> <td><code>std::allocator_traits</code></td> <td>Provides an interface for accessing custom allocators</td> -<td><a href="http://en.cppreference.com/w/cpp/memory/allocator_traits"> -std::allocator_traits</a></td> +<td><a href="http://en.cppreference.com/w/cpp/memory/allocator_traits">std::allocator_traits</a></td> <td>Usage should be rare.</td> </tr> @@ -862,56 +741,39 @@ <td><code><cfenv></code>, <code><fenv.h></code></td> <td>Provides floating point status flags and control modes for C-compatible code</td> <td><a href="http://en.cppreference.com/w/cpp/header/cfenv">Standard library header <cfenv></a></td> -<td>Compilers do not support use. This is banned in google style guide over -compilers not supporting these reliably.</td> +<td>Banned in <a href="https://google.github.io/styleguide/cppguide.html#C++11">Google Style Guide</a> due to concerns about compiler support.</td> </tr> <tr> <td>Complex Inverse Trigonometric and Hyperbolic Functions</td> <td>Functions within <code><complex></code></td> -<td>Adds inverse trigonomentric and hyperbolic non-member functions to -the <code><complex></code> library.</td> +<td>Adds inverse trigonomentric and hyperbolic non-member functions to the <code><complex></code> library.</td> <td><a href="http://en.cppreference.com/w/cpp/numeric/complex">std::complex</a></td> <td></td> </tr> <tr> <td>Container Compaction Functions</td> -<td><code>std::vector::shrink_to_fit()</code>, -<code>std::deque::shrink_to_fit()</code>, and -<code>std::string::shrink_to_fit()</code></td> -<td>Requests the removal of unused space -in the container</td> -<td><a href="http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit"> -std::vector::shrink_to_fit</a>, -<a href="http://en.cppreference.com/w/cpp/container/deque/shrink_to_fit"> -std::deque::shrink_to_fit</a>, and -<a href="http://en.cppreference.com/w/cpp/string/basic_string/shrink_to_fit"> -std::basic_string::shrink_to_fit</a></td> +<td><code>std::vector::shrink_to_fit()</code>, <code>std::deque::shrink_to_fit()</code>, <code>std::string::shrink_to_fit()</code></td> +<td>Requests the removal of unused space in the container</td> +<td><a href="http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit">std::vector::shrink_to_fit</a>, <a href="http://en.cppreference.com/w/cpp/container/deque/shrink_to_fit">std::deque::shrink_to_fit</a>, <a href="http://en.cppreference.com/w/cpp/string/basic_string/shrink_to_fit">std::basic_string::shrink_to_fit</a></td> <td></td> </tr> <tr> <td>Date/Time String Formatting Specifiers</td> <td><code>std::strftime()</code></td> -<td>Converts date and time information into a -formatted string using new specifiers</td> -<td><a href="http://en.cppreference.com/w/cpp/chrono/c/strftime"> -std::strftime</a></td> +<td>Converts date and time information into a formatted string using new specifiers</td> +<td><a href="http://en.cppreference.com/w/cpp/chrono/c/strftime">std::strftime</a></td> <td></td> </tr> <tr> <td>Function Return Type Deduction</td> <td><code>std::result_of<<i>Functor(ArgTypes...)</i>></code></td> -<td>Extracts the return type from the type signature of -a function call invocation at compile-time.</td> -<td><a href="http://en.cppreference.com/w/cpp/types/result_of"> -std::result_of</a></td> -<td> -<a href="http://stackoverflow.com/questions/15486951/why-does-stdresult-of-take-an-unrelated-function-type-as-a-type-argument"> -Why does std::result_of take an (unrelated) function type as a type argument? -</a></td> +<td>Extracts the return type from the type signature of a function call invocation at compile-time.</td> +<td><a href="http://en.cppreference.com/w/cpp/types/result_of">std::result_of</a></td> +<td><a href="http://stackoverflow.com/questions/15486951/why-does-stdresult-of-take-an-unrelated-function-type-as-a-type-argument">Why does std::result_of take an (unrelated) function type as a type argument?</a></td> </tr> <tr> @@ -926,61 +788,47 @@ <td>Forward Lists</td> <td><code>std::forward_list</code></td> <td>Provides an efficient singly linked list</td> -<td><a href="http://en.cppreference.com/w/cpp/container/forward_list"> -std::forward_list</a></td> +<td><a href="http://en.cppreference.com/w/cpp/container/forward_list">std::forward_list</a></td> <td></td> </tr> <tr> <td>Gamma Natural Log</td> <td><code>std::lgamma()</code></td> -<td>Computes the natural log of the gamma of a -floating point value</td> -<td><a href="http://en.cppreference.com/w/cpp/numeric/math/lgamma"> -std::lgamma</a></td> +<td>Computes the natural log of the gamma of a floating point value</td> +<td><a href="http://en.cppreference.com/w/cpp/numeric/math/lgamma">std::lgamma</a></td> <td></td> </tr> <tr> <td>Garbage Collection Features</td> -<td><code>std::{un}declare_reachable()</code> and -<code>std::{un}declare_no_pointers()</code></td> +<td><code>std::{un}declare_reachable()</code>, <code>std::{un}declare_no_pointers()</code></td> <td>Enables garbage collection implementations</td> -<td><a href="http://en.cppreference.com/w/cpp/memory/gc/declare_reachable"> -std::declare_reachable</a> -and <a href="http://en.cppreference.com/w/cpp/memory/gc/declare_no_pointers"> -std::declare_no_pointers</a></td> +<td><a href="http://en.cppreference.com/w/cpp/memory/gc/declare_reachable">std::declare_reachable</a>, <a href="http://en.cppreference.com/w/cpp/memory/gc/declare_no_pointers">std::declare_no_pointers</a></td> <td></td> </tr> <tr> <td>Iterator Operators</td> -<td><code>std::next()</code> and <code>std::prev()</code></td> -<td>Copies an iterator and increments or decrements the copy by -some value</td> -<td><a href="http://en.cppreference.com/w/cpp/iterator/next">std::next</a> -and <a href="http://en.cppreference.com/w/cpp/iterator/prev">std::prev</a> -</td> +<td><code>std::next()</code>, <code>std::prev()</code></td> +<td>Copies an iterator and increments or decrements the copy by some value</td> +<td><a href="http://en.cppreference.com/w/cpp/iterator/next">std::next</a>, <a href="http://en.cppreference.com/w/cpp/iterator/prev">std::prev</a></td> <td></td> </tr> <tr> <td>Pointer Traits Class Template</td> <td><code>std::pointer_traits</code></td> -<td>Provides a standard way to access properties -of pointers and pointer-like types</td> -<td><a href="http://en.cppreference.com/w/cpp/memory/pointer_traits"> -std::pointer_traits</a></td> -<td>Useful for determining the element type -pointed at by a (possibly smart) pointer.</td> +<td>Provides a standard way to access properties of pointers and pointer-like types</td> +<td><a href="http://en.cppreference.com/w/cpp/memory/pointer_traits">std::pointer_traits</a></td> +<td>Useful for determining the element type pointed at by a (possibly smart) pointer.</td> </tr> <tr> <td>Random Number Generators</td> <td>Functions within <code><random></code></td> <td>Random number generation algorithms and utilities</td> -<td><a href="http://en.cppreference.com/w/cpp/numeric/random"> -Pseudo-random number generation</a></td> +<td><a href="http://en.cppreference.com/w/cpp/numeric/random">Pseudo-random number generation</a></td> <td></td> </tr> @@ -988,48 +836,31 @@ <td>Ratio Template Class</td> <td><code>std::ratio<<i>numerator</i>, <i>denominator</i>></code></td> <td>Provides compile-time rational numbers</td> -<td><a href="http://en.cppreference.com/w/cpp/numeric/ratio/ratio">std::ratio -</a></td> -<td>Note: These are banned in the google style guide over concerns that they are -tied to a more template-heavy interface style.</td> +<td><a href="http://en.cppreference.com/w/cpp/numeric/ratio/ratio">std::ratio</a></td> +<td>Banned in <a href="https://google.github.io/styleguide/cppguide.html#C++11">Google Style Guide</a> due to concerns that they are tied to a more template-heavy interface style.</td> </tr> <tr> <td>Reference Wrapper Classes</td> -<td><code>std::reference_wrapper</code> and -<code>std::ref()</code>, <code>std::cref()</code></td> -<td>Allows you to wrap a reference within a standard -object (and use those within containers)</td> -<td><a href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=217"> -Reference Wrappers</a></td> +<td><code>std::reference_wrapper</code> and <code>std::ref()</code>, <code>std::cref()</code></td> +<td>Allows you to wrap a reference within a standard object (and use those within containers)</td> +<td><a href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=217">Reference Wrappers</a></td> <td></td> </tr> <tr> <td>Soft Program Exits</td> -<td><code>std::at_quick_exit()</code> -and <code>std::quick_exit()</code></td> -<td>Allows registration of functions to be called upon exit, -allowing cleaner program exit than <code>abort()</code> or -<code>exit</code></td> -<td><a href="http://en.cppreference.com/w/cpp/utility/program/quick_exit"> -std:quick_exit</a></td> +<td><code>std::at_quick_exit()</code>, <code>std::quick_exit()</code></td> +<td>Allows registration of functions to be called upon exit, allowing cleaner program exit than <code>abort()</code> or <code>exit</code></td> +<td><a href="http://en.cppreference.com/w/cpp/utility/program/quick_exit">std:quick_exit</a></td> <td></td> </tr> <tr> <td>String to Number Functions</td> -<td><code>std::stoi()</code>, <code>std::stol()</code>, -<code>std::stoul()</code>, <code>std::stoll</code>, <code>std::stoull()</code>, -<code>std::stof()</code>, <code>std::stod()</code>, <code>std::stold()</code>, -and <code>std::to_string()</code></td> +<td><code>std::stoi()</code>, <code>std::stol()</code>, <code>std::stoul()</code>, <code>std::stoll</code>, <code>std::stoull()</code>, <code>std::stof()</code>, <code>std::stod()</code>, <code>std::stold()</code>, <code>std::to_string()</code></td> <td>Converts strings to numbers</td> -<td><a href="http://en.cppreference.com/w/cpp/string/basic_string/stol"> -std::stoi, std::stol, std::stoll</a>, -<a href="http://en.cppreference.com/w/cpp/string/basic_string/stoul"> -std::stoul, std::stoull</a>, and -<a href="http://en.cppreference.com/w/cpp/string/basic_string/stof"> -std::stof, std::stod, std::stold</a> </td> +<td><a href="http://en.cppreference.com/w/cpp/string/basic_string/stol">std::stoi, std::stol, std::stoll</a>, <a href="http://en.cppreference.com/w/cpp/string/basic_string/stoul">std::stoul, std::stoull</a>, <a href="http://en.cppreference.com/w/cpp/string/basic_string/stof">std::stof, std::stod, std::stold</a></td> <td></td> </tr> @@ -1045,33 +876,24 @@ <td>Trailing Return Types</td> <td><code>auto <i>function declaration</i> -> <i>return_type</i></code></td> <td>Allows trailing function return value syntax</td> -<td><a href="http://en.cppreference.com/w/cpp/language/function"> -Declaring functions</a></td> +<td><a href="http://en.cppreference.com/w/cpp/language/function">Declaring functions</a></td> <td><a href="https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/OQyYSfH9m2M">Discussion thread</a></td> </tr> <tr> <td>Type-Generic Math Functions</td> <td>Functions within <code><ctgmath></code></td> -<td>Provides a means to call real or complex functions -based on the type of arguments</td> -<td><a href="http://en.cppreference.com/w/cpp/header/ctgmath"> -Standard library header <ctgmath></a></td> +<td>Provides a means to call real or complex functions based on the type of arguments</td> +<td><a href="http://en.cppreference.com/w/cpp/header/ctgmath">Standard library header <ctgmath></a></td> <td></td> </tr> <tr> <td>Type Info Enhancements</td> -<td><code>std::type_index</code> and <code>std::type_info::hash_code()</code></td> -<td>Allows type information (most often within containers) -that can be copied, assigned, or hashed</td> -<td><a href="http://en.cppreference.com/w/cpp/types/type_index"> -std::type_index</a> and -<a href="http://en.cppreference.com/w/cpp/types/type_info/hash_code"> -std::type_info::hash_code</a></td> -<td><code>std::type_index</code> is a thin wrapper for -<code>std::type_info</code>, allowing you to use it directly -within both associative and unordered containers</td> +<td><code>std::type_index</code>, <code>std::type_info::hash_code()</code></td> +<td>Allows type information (most often within containers) that can be copied, assigned, or hashed</td> +<td><a href="http://en.cppreference.com/w/cpp/types/type_index">std::type_index</a>, <a href="http://en.cppreference.com/w/cpp/types/type_info/hash_code">std::type_info::hash_code</a></td> +<td><code>std::type_index</code> is a thin wrapper for <code>std::type_info</code>, allowing you to use it directly within both associative and unordered containers</td> </tr> <tr> @@ -1086,34 +908,17 @@ <td>Weak Pointers</td> <td><code>std::weak_ptr</code></td> <td>Allows a weak reference to a <code>std::shared_ptr</code></td> -<td><a href="http://en.cppreference.com/w/cpp/memory/weak_ptr"> -std::weak_ptr</a></td> -<td><a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart_Pointers"> -Ownership and Smart Pointers</a></td> +<td><a href="http://en.cppreference.com/w/cpp/memory/weak_ptr">std::weak_ptr</a></td> +<td><a href="https://google.github.io/styleguide/cppguide.html#Ownership_and_Smart_Pointers">Ownership and Smart Pointers</a></td> </tr> <tr> <td>Wide String Support</td> -<td><code>std::wstring_convert</code>, -<code>std::wbuffer_convert</code>. -<code>std::codecvt_utf8</code>, <code>std::codecvt_utf16</code>, -and <code>std::codecvt_utf8_utf16</code></td> +<td><code>std::wstring_convert</code>, <code>std::wbuffer_convert</code><br /> +<code>std::codecvt_utf8</code>, <code>std::codecvt_utf16</code>, <code>std::codecvt_utf8_utf16</code></td> <td>Converts between string encodings</td> -<td><a href="http://en.cppreference.com/w/cpp/locale/wstring_convert"> -std::wstring_convert</a>, -<a href="http://en.cppreference.com/w/cpp/locale/wbuffer_convert"> -std::wbuffer_convert</a>, -<a href="http://en.cppreference.com/w/cpp/locale/codecvt_utf8"> -std::codecvt_utf8</a>, -<a href="http://en.cppreference.com/w/cpp/locale/codecvt_utf16"> -std::codecvt_utf16</a>, and -<a href="http://en.cppreference.com/w/cpp/locale/codecvt_utf8_utf16"> -std::codecvt_utf8_utf16</a> -</td> -<td>Non-UTF-8 text is banned by the -<a href="https://google.github.io/styleguide/cppguide.html#Non-ASCII_Characters"> -C++ Style Guide</a>. However, may be useful for -consuming non-ASCII data.</td> +<td><a href="http://en.cppreference.com/w/cpp/locale/wstring_convert">std::wstring_convert</a>, <a href="http://en.cppreference.com/w/cpp/locale/wbuffer_convert">std::wbuffer_convert</a>, <a href="http://en.cppreference.com/w/cpp/locale/codecvt_utf8">std::codecvt_utf8</a>, <a href="http://en.cppreference.com/w/cpp/locale/codecvt_utf16">std::codecvt_utf16</a>, <a href="http://en.cppreference.com/w/cpp/locale/codecvt_utf8_utf16">std::codecvt_utf8_utf16</a></td> +<td>Non-UTF-8 text is banned by the <a href="https://google.github.io/styleguide/cppguide.html#Non-ASCII_Characters">Google Style Guide</a>. However, may be useful for consuming non-ASCII data.</td> </tr> </tbody>
diff --git a/sync/internal_api/attachments/attachment_downloader_impl.cc b/sync/internal_api/attachments/attachment_downloader_impl.cc index 60a936e22..81f1153 100644 --- a/sync/internal_api/attachments/attachment_downloader_impl.cc +++ b/sync/internal_api/attachments/attachment_downloader_impl.cc
@@ -138,8 +138,11 @@ scoped_refptr<base::RefCountedString> null_attachment_data; ReportResult(*download_state, DOWNLOAD_TRANSIENT_ERROR, null_attachment_data); - DCHECK(state_map_.find(download_state->attachment_url) != state_map_.end()); - state_map_.erase(download_state->attachment_url); + // Don't delete using the URL directly to avoid an access after free error + // due to std::unordered_map's implementation. See crbug.com/603275. + auto erase_iter = state_map_.find(download_state->attachment_url); + DCHECK(erase_iter != state_map_.end()); + state_map_.erase(erase_iter); } requests_waiting_for_access_token_.clear(); }
diff --git a/sync/internal_api/processor_entity_tracker.cc b/sync/internal_api/processor_entity_tracker.cc index 11b770a..0077e2a 100644 --- a/sync/internal_api/processor_entity_tracker.cc +++ b/sync/internal_api/processor_entity_tracker.cc
@@ -63,12 +63,16 @@ ProcessorEntityTracker::~ProcessorEntityTracker() {} void ProcessorEntityTracker::CacheCommitData(EntityData* data) { - DCHECK(RequiresCommitRequest()); DCHECK(data); if (data->client_tag_hash.empty()) { data->client_tag_hash = metadata_.client_tag_hash(); } - commit_data_ = data->PassToPtr(); + CacheCommitData(data->PassToPtr()); +} + +void ProcessorEntityTracker::CacheCommitData(const EntityDataPtr& data_ptr) { + DCHECK(RequiresCommitData()); + commit_data_ = data_ptr; DCHECK(HasCommitData()); } @@ -78,7 +82,7 @@ bool ProcessorEntityTracker::MatchesSpecificsHash( const sync_pb::EntitySpecifics& specifics) const { - DCHECK(specifics.ByteSize() > 0); + DCHECK_GT(specifics.ByteSize(), 0); std::string hash; HashSpecifics(specifics, &hash); return hash == metadata_.specifics_hash(); @@ -112,8 +116,6 @@ void ProcessorEntityTracker::RecordIgnoredUpdate( const UpdateResponseData& update) { metadata_.set_server_version(update.response_version); - // TODO(maxbogue): Understand and fix encryption (crbug.com/561814). - encryption_key_name_ = update.encryption_key_name; // Either these already matched, acked was just bumped to squash a pending // commit and this should follow, or the pending commit needs to be requeued. commit_requested_sequence_number_ = metadata_.acked_sequence_number(); @@ -155,30 +157,16 @@ data->id = metadata_.server_id(); data->creation_time = syncer::ProtoTimeToTime(metadata_.creation_time()); + commit_data_.reset(); CacheCommitData(data.get()); } -void ProcessorEntityTracker::UpdateDesiredEncryptionKey( - const std::string& name) { - if (encryption_key_name_ == name) - return; - - DVLOG(2) << metadata_.server_id() - << ": Encryption triggered commit: " << encryption_key_name_ - << " -> " << name; - - // Schedule commit with the expectation that the worker will re-encrypt with - // the latest encryption key as it does. - IncrementSequenceNumber(); -} - void ProcessorEntityTracker::Delete() { IncrementSequenceNumber(); metadata_.set_is_deleted(true); metadata_.clear_specifics_hash(); // Clear any cached pending commit data. - if (HasCommitData()) - commit_data_.reset(); + commit_data_.reset(); } void ProcessorEntityTracker::InitializeCommitRequestData( @@ -211,7 +199,6 @@ metadata_.set_server_id(id); metadata_.set_acked_sequence_number(sequence_number); metadata_.set_server_version(response_version); - encryption_key_name_ = encryption_key_name; if (!IsUnsynced()) { // Clear pending commit data if there hasn't been another commit request // since the one that is currently getting acked.
diff --git a/sync/internal_api/public/processor_entity_tracker.h b/sync/internal_api/public/processor_entity_tracker.h index a3552532..2d78d48 100644 --- a/sync/internal_api/public/processor_entity_tracker.h +++ b/sync/internal_api/public/processor_entity_tracker.h
@@ -80,11 +80,6 @@ // Applies a local change to this item. void MakeLocalChange(std::unique_ptr<EntityData> data); - // Schedule a commit if the |name| does not match this item's last known - // encryption key. The worker that performs the commit is expected to - // encrypt the item using the latest available key. - void UpdateDesiredEncryptionKey(const std::string& name); - // Applies a local deletion to this item. void Delete(); @@ -112,6 +107,9 @@ // The data is swapped from the input struct without copying. void CacheCommitData(EntityData* data); + // Caches the a copy of |data_ptr|, which doesn't copy the data itself. + void CacheCommitData(const EntityDataPtr& data_ptr); + // Check if the instance has cached commit data. bool HasCommitData() const; @@ -121,6 +119,9 @@ // Check whether |data| matches the stored metadata. bool MatchesData(const EntityData& data) const; + // Increment sequence number in the metadata. + void IncrementSequenceNumber(); + private: friend class ProcessorEntityTrackerTest; @@ -134,9 +135,6 @@ // and metadata for this entity. bool IsLocalOnly() const; - // Increment sequence number in the metadata. - void IncrementSequenceNumber(); - // Update hash string for EntitySpecifics in the metadata. void UpdateSpecificsHash(const sync_pb::EntitySpecifics& specifics); @@ -152,11 +150,6 @@ // The sequence number of the last item sent to the sync thread. int64_t commit_requested_sequence_number_; - - // TODO(stanisc): this should be removed. - // The name of the encryption key used to encrypt this item on the server. - // Empty when no encryption is in use. - std::string encryption_key_name_; }; } // namespace syncer_v2
diff --git a/sync/internal_api/public/shared_model_type_processor.h b/sync/internal_api/public/shared_model_type_processor.h index 39d14426..8415406 100644 --- a/sync/internal_api/public/shared_model_type_processor.h +++ b/sync/internal_api/public/shared_model_type_processor.h
@@ -8,6 +8,7 @@ #include <map> #include <memory> #include <string> +#include <unordered_set> #include "base/memory/weak_ptr.h" #include "base/threading/non_thread_safe.h" @@ -76,18 +77,28 @@ using UpdateMap = std::map<std::string, std::unique_ptr<UpdateResponseData>>; // Callback for ModelTypeService::GetData(). Used when we need to load data - // for pending commits during the initialization process. - void OnDataLoaded(syncer::SyncError error, - std::unique_ptr<DataBatch> data_batch); + // for pending commits. + void OnPendingCommitDataLoaded(syncer::SyncError error, + std::unique_ptr<DataBatch> data_batch); // Check conditions, and if met inform sync that we are ready to connect. void ConnectIfReady(); + // Helper function to process the update for a single entity. If a local data + // change is required, it will be added to |entity_changes|. The return value + // is the tracker for this entity, or nullptr if the update should be ignored. + ProcessorEntityTracker* ProcessUpdate(const UpdateResponseData& update, + EntityChangeList* entity_changes); + // Resolve a conflict between |update| and the pending commit in |entity|. ConflictResolution::Type ResolveConflict(const UpdateResponseData& update, ProcessorEntityTracker* entity, EntityChangeList* changes); + // Recommit all entities for encryption except those in |already_updated|. + void RecommitAllForEncryption(std::unordered_set<std::string> already_updated, + MetadataChangeList* metadata_changes); + // Handle the first update received from the server after being enabled. void OnInitialUpdateReceived(const sync_pb::DataTypeState& type_state, const UpdateResponseDataList& updates); @@ -121,9 +132,6 @@ // Indicates whether the metadata has finished loading. bool is_metadata_loaded_; - // Indicates whether data for pending commits has finished loading. - bool is_pending_commit_data_loaded_; - // Reference to the CommitQueue. // // The interface hides the posting of tasks across threads as well as the
diff --git a/sync/internal_api/shared_model_type_processor.cc b/sync/internal_api/shared_model_type_processor.cc index 4690d64f..9d76afff0 100644 --- a/sync/internal_api/shared_model_type_processor.cc +++ b/sync/internal_api/shared_model_type_processor.cc
@@ -113,9 +113,6 @@ DCHECK(!is_metadata_loaded_); DCHECK(!IsConnected()); - // Flip this flag here to cover all cases where we don't need to load data. - is_pending_commit_data_loaded_ = true; - if (batch->GetDataTypeState().initial_sync_done()) { EntityMetadataMap metadata_map(batch->TakeAllMetadata()); std::vector<std::string> entities_to_commit; @@ -130,10 +127,10 @@ } data_type_state_ = batch->GetDataTypeState(); if (!entities_to_commit.empty()) { - is_pending_commit_data_loaded_ = false; - service_->GetData(entities_to_commit, - base::Bind(&SharedModelTypeProcessor::OnDataLoaded, - weak_ptr_factory_.GetWeakPtr())); + service_->GetData( + entities_to_commit, + base::Bind(&SharedModelTypeProcessor::OnPendingCommitDataLoaded, + weak_ptr_factory_.GetWeakPtr())); } } else { // First time syncing; initialize metadata. @@ -145,7 +142,7 @@ ConnectIfReady(); } -void SharedModelTypeProcessor::OnDataLoaded( +void SharedModelTypeProcessor::OnPendingCommitDataLoaded( syncer::SyncError error, std::unique_ptr<DataBatch> data_batch) { while (data_batch->HasNext()) { @@ -156,7 +153,6 @@ entity->CacheCommitData(data.second.get()); } } - is_pending_commit_data_loaded_ = true; FlushPendingCommitRequests(); } @@ -296,15 +292,10 @@ if (!data_type_state_.initial_sync_done()) return; - // Dont send anything if the initial data load is incomplete. - if (!is_pending_commit_data_loaded_) - return; - // TODO(rlarocque): Do something smarter than iterate here. for (auto it = entities_.begin(); it != entities_.end(); ++it) { ProcessorEntityTracker* entity = it->second.get(); - if (entity->RequiresCommitRequest()) { - DCHECK(!entity->RequiresCommitData()); + if (entity->RequiresCommitRequest() && !entity->RequiresCommitData()) { CommitRequestData request; entity->InitializeCommitRequestData(&request); commit_requests.push_back(request); @@ -367,91 +358,113 @@ data_type_state.encryption_key_name(); data_type_state_ = data_type_state; + // If new encryption requirements come from the server, the entities that are + // in |updates| will be recorded here so they can be ignored during the + // re-encryption phase at the end. + std::unordered_set<std::string> already_updated; + for (const UpdateResponseData& update : updates) { - const EntityData& data = update.entity.value(); - const std::string& client_tag_hash = data.client_tag_hash; + ProcessorEntityTracker* entity = ProcessUpdate(update, &entity_changes); - ProcessorEntityTracker* entity = GetEntityForTagHash(client_tag_hash); - if (entity == nullptr) { - if (data.is_deleted()) { - DLOG(WARNING) << "Received remote delete for a non-existing item." - << " client_tag_hash: " << client_tag_hash; - continue; - } - - entity = CreateEntity(data); - entity_changes.push_back( - EntityChange::CreateAdd(entity->client_tag(), update.entity)); - entity->RecordAcceptedUpdate(update); - } else if (entity->UpdateIsReflection(update.response_version)) { - // Seen this update before; just ignore it. + if (!entity) { + // The update should be ignored. continue; - } else if (entity->IsUnsynced()) { - ConflictResolution::Type resolution_type = - ResolveConflict(update, entity, &entity_changes); - UMA_HISTOGRAM_ENUMERATION("Sync.ResolveConflict", resolution_type, - ConflictResolution::TYPE_SIZE); - } else if (data.is_deleted()) { - // The entity was deleted; inform the service. Note that the local data - // can never be deleted at this point because it would have either been - // acked (the add case) or pending (the conflict case). - DCHECK(!entity->metadata().is_deleted()); - entity_changes.push_back( - EntityChange::CreateDelete(entity->client_tag())); - entity->RecordAcceptedUpdate(update); - } else if (!entity->MatchesSpecificsHash(data.specifics)) { - // Specifics have changed, so update the service. - entity_changes.push_back( - EntityChange::CreateUpdate(entity->client_tag(), update.entity)); - entity->RecordAcceptedUpdate(update); - } else { - // No data change; still record that the update was received. - entity->RecordAcceptedUpdate(update); - } - - // If the received entity has out of date encryption, we schedule another - // commit to fix it. - if (data_type_state_.encryption_key_name() != update.encryption_key_name) { - DVLOG(2) << ModelTypeToString(type_) << ": Requesting re-encrypt commit " - << update.encryption_key_name << " -> " - << data_type_state_.encryption_key_name(); - entity->UpdateDesiredEncryptionKey( - data_type_state_.encryption_key_name()); } if (entity->CanClearMetadata()) { metadata_changes->ClearMetadata(entity->client_tag()); entities_.erase(entity->metadata().client_tag_hash()); } else { - // TODO(stanisc): crbug.com/521867: Do something special when conflicts - // are detected. metadata_changes->UpdateMetadata(entity->client_tag(), entity->metadata()); } + + if (got_new_encryption_requirements) { + already_updated.insert(entity->client_tag()); + } } if (got_new_encryption_requirements) { - for (auto it = entities_.begin(); it != entities_.end(); ++it) { - it->second->UpdateDesiredEncryptionKey( - data_type_state_.encryption_key_name()); - } + RecommitAllForEncryption(already_updated, metadata_changes.get()); } // Inform the service of the new or updated data. // TODO(stanisc): crbug.com/570085: Error handling. service_->ApplySyncChanges(std::move(metadata_changes), entity_changes); - // We may have new reasons to commit by the time this function is done. + // There may be new reasons to commit by the time this function is done. FlushPendingCommitRequests(); } +ProcessorEntityTracker* SharedModelTypeProcessor::ProcessUpdate( + const UpdateResponseData& update, + EntityChangeList* entity_changes) { + const EntityData& data = update.entity.value(); + const std::string& client_tag_hash = data.client_tag_hash; + ProcessorEntityTracker* entity = GetEntityForTagHash(client_tag_hash); + if (entity == nullptr) { + if (data.is_deleted()) { + DLOG(WARNING) << "Received remote delete for a non-existing item." + << " client_tag_hash: " << client_tag_hash; + return nullptr; + } + + entity = CreateEntity(data); + entity_changes->push_back( + EntityChange::CreateAdd(entity->client_tag(), update.entity)); + entity->RecordAcceptedUpdate(update); + } else if (entity->UpdateIsReflection(update.response_version)) { + // Seen this update before; just ignore it. + return nullptr; + } else if (entity->IsUnsynced()) { + ConflictResolution::Type resolution_type = + ResolveConflict(update, entity, entity_changes); + UMA_HISTOGRAM_ENUMERATION("Sync.ResolveConflict", resolution_type, + ConflictResolution::TYPE_SIZE); + } else if (data.is_deleted()) { + // The entity was deleted; inform the service. Note that the local data + // can never be deleted at this point because it would have either been + // acked (the add case) or pending (the conflict case). + DCHECK(!entity->metadata().is_deleted()); + entity_changes->push_back(EntityChange::CreateDelete(entity->client_tag())); + entity->RecordAcceptedUpdate(update); + } else if (!entity->MatchesSpecificsHash(data.specifics)) { + // Specifics have changed, so update the service. + entity_changes->push_back( + EntityChange::CreateUpdate(entity->client_tag(), update.entity)); + entity->RecordAcceptedUpdate(update); + } else { + // No data change; still record that the update was received. + entity->RecordAcceptedUpdate(update); + } + + // If the received entity has out of date encryption, we schedule another + // commit to fix it. + if (data_type_state_.encryption_key_name() != update.encryption_key_name) { + DVLOG(2) << ModelTypeToString(type_) << ": Requesting re-encrypt commit " + << update.encryption_key_name << " -> " + << data_type_state_.encryption_key_name(); + + entity->IncrementSequenceNumber(); + if (entity->RequiresCommitData()) { + // If there is no pending commit data, then either this update wasn't + // in conflict or the remote data won; either way the remote data is + // the right data to re-queue for commit. + entity->CacheCommitData(update.entity); + } + } + + return entity; +} + ConflictResolution::Type SharedModelTypeProcessor::ResolveConflict( const UpdateResponseData& update, ProcessorEntityTracker* entity, EntityChangeList* changes) { - // There is a pending commit in conflict with the update. - // For now we require that pending commit data be loaded in this - // situation. This may be relaxed in the future if necessary. + // There is a pending commit in conflict with the update. For now we require + // that pending commit data be loaded in this situation. + // TODO(maxbogue): Fix this for the re-encryption case, where there might be + // unsynced entities that need commit data (crbug.com/561814). DCHECK(!entity->RequiresCommitData()); const EntityData& data = update.entity.value(); @@ -494,6 +507,31 @@ return resolution.type(); } +void SharedModelTypeProcessor::RecommitAllForEncryption( + std::unordered_set<std::string> already_updated, + MetadataChangeList* metadata_changes) { + ModelTypeService::ClientTagList entities_needing_data; + + for (auto it = entities_.begin(); it != entities_.end(); ++it) { + ProcessorEntityTracker* entity = it->second.get(); + if (already_updated.find(entity->client_tag()) != already_updated.end()) { + continue; + } + entity->IncrementSequenceNumber(); + if (entity->RequiresCommitData()) { + entities_needing_data.push_back(entity->client_tag()); + } + metadata_changes->UpdateMetadata(entity->client_tag(), entity->metadata()); + } + + if (!entities_needing_data.empty()) { + service_->GetData( + entities_needing_data, + base::Bind(&SharedModelTypeProcessor::OnPendingCommitDataLoaded, + base::Unretained(this))); + } +} + void SharedModelTypeProcessor::OnInitialUpdateReceived( const sync_pb::DataTypeState& data_type_state, const UpdateResponseDataList& updates) {
diff --git a/sync/internal_api/shared_model_type_processor_unittest.cc b/sync/internal_api/shared_model_type_processor_unittest.cc index b8da285..c536a45 100644 --- a/sync/internal_api/shared_model_type_processor_unittest.cc +++ b/sync/internal_api/shared_model_type_processor_unittest.cc
@@ -203,7 +203,9 @@ // Initialize to a "ready-to-commit" state. void InitializeToReadyState() { InitializeToMetadataLoaded(); - OnDataLoaded(); + if (!data_callback_.is_null()) { + OnPendingCommitDataLoaded(); + } OnSyncStarting(); } @@ -211,11 +213,10 @@ type_processor()->OnMetadataLoaded(db_.CreateMetadataBatch()); } - void OnDataLoaded() { - if (!data_callback_.is_null()) { - data_callback_.Run(); - data_callback_.Reset(); - } + void OnPendingCommitDataLoaded() { + DCHECK(!data_callback_.is_null()); + data_callback_.Run(); + data_callback_.Reset(); } void OnSyncStarting() { @@ -263,7 +264,7 @@ } } - // Wipes existing DB and simulates one commited item. + // Wipes existing DB and simulates one uncommited, server-known item. void ResetStateWriteAckedItem(const std::string& tag, const std::string& value) { clear_change_processor(); @@ -319,6 +320,16 @@ OnInitialSyncDone(updates); } + // Generate update data for the given parameters. + UpdateResponseData GenerateUpdateData(const std::string& tag, + const std::string& value, + const std::string& ekn) { + UpdateResponseData data = mock_queue_->UpdateFromServer( + 1, GenerateTagHash(tag), GenerateSpecifics(tag, value)); + data.encryption_key_name = ekn; + return data; + } + // Emulate updates from the server. // This harness has some functionality to help emulate server behavior. void UpdateFromServer(int64_t version_offset, @@ -529,6 +540,7 @@ void GetData(ClientTagList tags, DataCallback callback) override { std::unique_ptr<DataBatchImpl> batch(new DataBatchImpl()); for (const std::string& tag : tags) { + DCHECK(db_.HasData(tag)) << "No data for " << tag; batch->Put(tag, CopyEntityData(db_.GetData(tag))); } data_callback_ = @@ -551,7 +563,7 @@ // The current mock queue, which is owned by |type_processor()|. MockCommitQueue* mock_queue_; - // Stores the data callback between GetData() and OnDataLoaded(). + // Stores the data callback between GetData() and OnPendingCommitDataLoaded(). base::Closure data_callback_; // Contains all of the data and metadata state for these tests. @@ -600,7 +612,7 @@ // Data, connect. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); OnSyncStarting(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue1); @@ -610,14 +622,14 @@ InitializeToMetadataLoaded(); OnSyncStarting(); EXPECT_EQ(0U, GetNumCommitRequestLists()); - OnDataLoaded(); + OnPendingCommitDataLoaded(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue1); // Data, connect, put. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); OnSyncStarting(); WriteItem(kTag1, kValue2); EXPECT_EQ(2U, GetNumCommitRequestLists()); @@ -627,7 +639,7 @@ // Data, put, connect. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); WriteItem(kTag1, kValue2); OnSyncStarting(); EXPECT_EQ(1U, GetNumCommitRequestLists()); @@ -637,7 +649,7 @@ ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); OnSyncStarting(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); WriteItem(kTag1, kValue2); EXPECT_EQ(2U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue1); @@ -648,16 +660,16 @@ InitializeToMetadataLoaded(); OnSyncStarting(); WriteItem(kTag1, kValue2); - EXPECT_EQ(0U, GetNumCommitRequestLists()); - OnDataLoaded(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue2); + OnPendingCommitDataLoaded(); + EXPECT_EQ(1U, GetNumCommitRequestLists()); // Put, data, connect. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); WriteItem(kTag1, kValue2); - OnDataLoaded(); + OnPendingCommitDataLoaded(); OnSyncStarting(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue2); @@ -667,15 +679,15 @@ InitializeToMetadataLoaded(); WriteItem(kTag1, kValue2); OnSyncStarting(); - EXPECT_EQ(0U, GetNumCommitRequestLists()); - OnDataLoaded(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue2); + OnPendingCommitDataLoaded(); + EXPECT_EQ(1U, GetNumCommitRequestLists()); // Data, connect, delete. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); OnSyncStarting(); DeleteItem(kTag1); EXPECT_EQ(2U, GetNumCommitRequestLists()); @@ -685,7 +697,7 @@ // Data, delete, connect. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); DeleteItem(kTag1); OnSyncStarting(); EXPECT_EQ(1U, GetNumCommitRequestLists()); @@ -695,7 +707,7 @@ ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); OnSyncStarting(); - OnDataLoaded(); + OnPendingCommitDataLoaded(); DeleteItem(kTag1); EXPECT_EQ(2U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, kValue1); @@ -706,16 +718,16 @@ InitializeToMetadataLoaded(); OnSyncStarting(); DeleteItem(kTag1); - EXPECT_EQ(0U, GetNumCommitRequestLists()); - OnDataLoaded(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, ""); + OnPendingCommitDataLoaded(); + EXPECT_EQ(1U, GetNumCommitRequestLists()); // Delete, data, connect. ResetStateWriteAckedItem(kTag1, kValue1); InitializeToMetadataLoaded(); DeleteItem(kTag1); - OnDataLoaded(); + OnPendingCommitDataLoaded(); OnSyncStarting(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, ""); @@ -725,10 +737,10 @@ InitializeToMetadataLoaded(); DeleteItem(kTag1); OnSyncStarting(); - EXPECT_EQ(0U, GetNumCommitRequestLists()); - OnDataLoaded(); EXPECT_EQ(1U, GetNumCommitRequestLists()); ExpectNthCommitRequestList(0, kTag1, ""); + OnPendingCommitDataLoaded(); + EXPECT_EQ(1U, GetNumCommitRequestLists()); } // This test covers race conditions during loading a pending delete. All cases @@ -1292,69 +1304,128 @@ } // Test re-encrypt everything when desired encryption key changes. -TEST_F(SharedModelTypeProcessorTest, DISABLED_ReEncryptCommitsWithNewKey) { +TEST_F(SharedModelTypeProcessorTest, ReEncryptCommitsWithNewKey) { InitializeToReadyState(); // Commit an item. WriteItemAndAck(kTag1, kValue1); - // Create another item and don't wait for its commit response. WriteItem(kTag2, kValue2); - - ASSERT_EQ(2U, GetNumCommitRequestLists()); + ExpectCommitRequests({kTag1, kTag2}); + EXPECT_EQ(1U, db().GetMetadata(kTag1).sequence_number()); + EXPECT_EQ(1U, db().GetMetadata(kTag2).sequence_number()); // Receive notice that the account's desired encryption key has changed. UpdateDesiredEncryptionKey("k1"); - - // That should trigger a new commit request. + // Tag 2 is recommitted immediately because the data was in memory. ASSERT_EQ(3U, GetNumCommitRequestLists()); - EXPECT_EQ(2U, GetNthCommitRequestList(2).size()); + ExpectNthCommitRequestList(2, kTag2, kValue2); + // Sequence numbers in the store are updated. + EXPECT_EQ(2U, db().GetMetadata(kTag1).sequence_number()); + EXPECT_EQ(2U, db().GetMetadata(kTag2).sequence_number()); - const CommitRequestData& tag1_enc = GetLatestCommitRequestForTag(kTag1); - const CommitRequestData& tag2_enc = GetLatestCommitRequestForTag(kTag2); - - SuccessfulCommitResponse(tag1_enc); - SuccessfulCommitResponse(tag2_enc); - - // And that should be the end of it. - ASSERT_EQ(3U, GetNumCommitRequestLists()); + // Tag 1 needs to go to the store to load its data before recommitting. + OnPendingCommitDataLoaded(); + ASSERT_EQ(4U, GetNumCommitRequestLists()); + ExpectNthCommitRequestList(3, kTag1, kValue1); } // Test receipt of updates with new and old keys. -// TODO(stanisc): crbug/561814: Disabled due to data caching changes in -// ProcessorEntityTracker. Revisit the test once fetching of data is -// implemented. -TEST_F(SharedModelTypeProcessorTest, DISABLED_ReEncryptUpdatesWithNewKey) { +TEST_F(SharedModelTypeProcessorTest, ReEncryptUpdatesWithNewKey) { InitializeToReadyState(); // Receive an unencrypted update. - UpdateFromServer(5, "no_enc", kValue1); - + UpdateFromServer(1, kTag1, kValue1); ASSERT_EQ(0U, GetNumCommitRequestLists()); // Set desired encryption key to k2 to force updates to some items. - UpdateDesiredEncryptionKey("k2"); + sync_pb::DataTypeState data_type_state(db().data_type_state()); + data_type_state.set_encryption_key_name("k2"); + UpdateResponseDataList updates; + // Receive an entity with old encryption as part of the update. + updates.push_back(GenerateUpdateData(kTag2, kValue2, "k1")); + // Receive an entity with up-to-date encryption as part of the update. + updates.push_back(GenerateUpdateData(kTag3, kValue3, "k2")); + type_processor()->OnUpdateReceived(data_type_state, updates); - ASSERT_EQ(1U, GetNumCommitRequestLists()); - EXPECT_EQ(1U, GetNthCommitRequestList(0).size()); - EXPECT_TRUE(HasCommitRequestForTag("no_enc")); + // kTag2 needed to be re-encrypted and had data so it was queued immediately. + ExpectCommitRequests({kTag2}); + OnPendingCommitDataLoaded(); + // kTag1 needed data so once that's loaded, it is also queued. + ExpectCommitRequests({kTag2, kTag1}); - // Receive an update that was encrypted with key k1. + // Receive a separate update that was encrypted with key k1. SetServerEncryptionKey("k1"); UpdateFromServer(10, "enc_k1", kValue1); - // Receipt of updates encrypted with old key also forces a re-encrypt commit. - ASSERT_EQ(2U, GetNumCommitRequestLists()); - EXPECT_EQ(1U, GetNthCommitRequestList(1).size()); - EXPECT_TRUE(HasCommitRequestForTag("enc_k1")); + ExpectCommitRequests({kTag2, kTag1, "enc_k1"}); // Receive an update that was encrypted with key k2. SetServerEncryptionKey("k2"); UpdateFromServer(15, "enc_k2", kValue1); - // That was the correct key, so no re-encryption is required. + ExpectCommitRequests({kTag2, kTag1, "enc_k1"}); +} + +// Test that re-encrypting enqueues the right data for USE_LOCAL conflicts. +TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseLocal) { + InitializeToReadyState(); + UpdateDesiredEncryptionKey("k1"); + WriteItem(kTag1, kValue1); + ExpectCommitRequests({kTag1}); + + SetConflictResolution(ConflictResolution::UseLocal()); + UpdateFromServer(5, kTag1, kValue2); + + // Ensure the re-commit has the correct value. EXPECT_EQ(2U, GetNumCommitRequestLists()); - EXPECT_FALSE(HasCommitRequestForTag("enc_k2")); + ExpectNthCommitRequestList(1, kTag1, kValue1); +} + +// Test that re-encrypting enqueues the right data for USE_REMOTE conflicts. +TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseRemote) { + InitializeToReadyState(); + UpdateDesiredEncryptionKey("k1"); + WriteItem(kTag1, kValue1); + + SetConflictResolution(ConflictResolution::UseRemote()); + UpdateFromServer(5, kTag1, kValue2); + + // Ensure the re-commit has the correct value. + EXPECT_EQ(2U, GetNumCommitRequestLists()); + ExpectNthCommitRequestList(1, kTag1, kValue2); +} + +// Test that re-encrypting enqueues the right data for USE_NEW conflicts. +TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseNew) { + InitializeToReadyState(); + UpdateDesiredEncryptionKey("k1"); + WriteItem(kTag1, kValue1); + + SetConflictResolution( + ConflictResolution::UseNew(GenerateEntityData(kTag1, kValue3))); + UpdateFromServer(5, kTag1, kValue2); + + // Ensure the re-commit has the correct value. + EXPECT_EQ(2U, GetNumCommitRequestLists()); + ExpectNthCommitRequestList(1, kTag1, kValue3); +} + +// TODO(maxbogue): Fix this case (crbug.com/561814). +TEST_F(SharedModelTypeProcessorTest, DISABLED_ReEncryptConflictWhileLoading) { + InitializeToReadyState(); + // Create item and ack so its data is no longer cached. + WriteItemAndAck(kTag1, kValue1); + // Update key so that it needs to fetch data to re-commit. + UpdateDesiredEncryptionKey("k1"); + + SetConflictResolution(ConflictResolution::UseLocal()); + UpdateFromServer(5, kTag1, kValue2); + OnPendingCommitDataLoaded(); + + // Ensure the re-commit has the correct value. + EXPECT_EQ(2U, GetNumCommitRequestLists()); + ExpectNthCommitRequestList(1, kTag1, kValue1); } } // namespace syncer_v2
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index d5cda853..31bef969 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -52,9 +52,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -189,9 +186,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -329,9 +323,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -469,9 +460,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -609,9 +597,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -749,9 +734,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -901,9 +883,6 @@ "test": "blink_platform_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -1041,9 +1020,6 @@ "test": "blimp_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ],
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 43b689ce..0a30a6c 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -1,4 +1,9 @@ { + "Linux ChromiumOS Builder": { + "additional_compile_targets": [ + "All" + ] + }, "Linux ChromiumOS GN": { "additional_compile_targets": [ "gn_all"
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index cdefee1..7fe1fd6 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -762,31 +762,6 @@ "--show-stdout", "--browser=debug", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--webgl-conformance-version=2.0.0", - "--webgl2-only=true" - ], - "isolate_name": "telemetry_gpu_test", - "name": "webgl2_conformance_tests", - "override_compile_targets": [ - "telemetry_gpu_test_run" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0412", - "os": "Linux" - } - ] - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=debug", - "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" ], "isolate_name": "telemetry_gpu_test", @@ -2900,31 +2875,6 @@ "--show-stdout", "--browser=release", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--webgl-conformance-version=2.0.0", - "--webgl2-only=true" - ], - "isolate_name": "telemetry_gpu_test", - "name": "webgl2_conformance_tests", - "override_compile_targets": [ - "telemetry_gpu_test_run" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "8086:0412", - "os": "Linux" - } - ] - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle" ], "isolate_name": "telemetry_gpu_test",
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 4d3cbfd..1a4abf95 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -125,9 +125,6 @@ "test": "blink_heap_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ], @@ -285,9 +282,6 @@ "test": "blink_heap_unittests" }, { - "args": [ - "--isolate_file_path=src/breakpad/breakpad_unittests.isolate" - ], "override_compile_targets": [ "breakpad_unittests_deps" ],
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index d1b9dc92..28aba22 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -189,7 +189,7 @@ }, "chromeos_unittests": { "label": "//chromeos:chromeos_unittests", - "type": "unknown", + "type": "console_test_launcher", }, "components_browsertests": { "label": "//components:components_browsertests",
diff --git a/testing/buildbot/trybot_analyze_config.json b/testing/buildbot/trybot_analyze_config.json index 6fb2e45..e36229d 100644 --- a/testing/buildbot/trybot_analyze_config.json +++ b/testing/buildbot/trybot_analyze_config.json
@@ -23,6 +23,7 @@ "testing/buildbot/.*", "testing/scripts/.*", "testing/test_env.py", + "third_party/android_platform/development/scripts/.*", "tools/clang/blink_gc_plugin/CMakeLists.txt", "tools/luci-go/.*" ]
diff --git a/testing/libfuzzer/BUILD.gn b/testing/libfuzzer/BUILD.gn index 863d98c7..b242d59 100644 --- a/testing/libfuzzer/BUILD.gn +++ b/testing/libfuzzer/BUILD.gn
@@ -22,6 +22,16 @@ } } +# A config used by all fuzzer_tests. +config("fuzzer_test_config") { + if (use_libfuzzer && is_mac) { + ldflags = [ + "-Wl,-U,_LLVMFuzzerCustomMutator", + "-Wl,-U,_LLVMFuzzerInitialize", + ] + } +} + # Noop config used to tag fuzzer tests excluded from clusterfuzz. # Libfuzzer build bot uses this to filter out targets while # building an archive for clusterfuzz.
diff --git a/testing/libfuzzer/fuzzer_test.gni b/testing/libfuzzer/fuzzer_test.gni index cd1ca2c..26d3ad6e 100644 --- a/testing/libfuzzer/fuzzer_test.gni +++ b/testing/libfuzzer/fuzzer_test.gni
@@ -118,6 +118,7 @@ if (defined(invoker.additional_configs)) { configs += invoker.additional_configs } + configs += [ "//testing/libfuzzer:fuzzer_test_config" ] } } else { # noop on unsupported platforms.
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 0ebfbf0..d9f3323 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -343,6 +343,451 @@ crbug.com/498539 [ Win7 Debug ] inspector/elements/styles-3/styles-computed-trace.html [ Crash Pass ] crbug.com/498539 [ Win7 ] inspector/elements/styles-4/styles-update-from-js.html [ Crash Pass ] +crbug.com/602483 compositing/overflow/fixed-scroll-in-empty-root-layer.html [ NeedsRebaseline ] +crbug.com/602483 compositing/overflow/text-color-change.html [ NeedsRebaseline ] +crbug.com/602483 compositing/overflow/text-match-highlight.html [ NeedsRebaseline ] +crbug.com/602483 compositing/overflow/updating-scrolling-container-and-content.html [ NeedsRebaseline ] +crbug.com/602483 compositing/repaint/fixed-pos-inside-composited-intermediate-layer.html [ NeedsRebaseline ] +crbug.com/602483 compositing/repaint/fixed-pos-with-abs-pos-child-scroll.html [ NeedsRebaseline ] +crbug.com/602483 compositing/repaint/resize-repaint.html [ NeedsRebaseline ] +crbug.com/602483 compositing/repaint/should-not-clip-composited-overflow-scrolling-layer.html [ NeedsRebaseline ] +crbug.com/602483 compositing/repaint/should-not-clip-composited-viewport-scrolling-layer.html [ NeedsRebaseline ] +crbug.com/602483 compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/add-remove-squashed-layers.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/iframe-inside-squashed-layer.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/invalidations-with-large-negative-margin.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/remove-squashed-layer-plus-move.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/selection-repaint-with-gaps.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/squash-above-fixed-1.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/squashed-layer-loses-graphicslayer.html [ NeedsRebaseline ] +crbug.com/602483 compositing/squashing/squashed-repaints.html [ NeedsRebaseline ] +crbug.com/602483 compositing/will-change/containing-block-removed.html [ NeedsRebaseline ] +crbug.com/602483 css3/flexbox/repaint-during-resize-no-flex.html [ NeedsRebaseline ] +crbug.com/602483 css3/flexbox/repaint-on-layout.html [ NeedsRebaseline ] +crbug.com/602483 css3/flexbox/repaint-on-margin-change.html [ NeedsRebaseline ] +crbug.com/602483 css3/flexbox/repaint-opacity-change.html [ NeedsRebaseline ] +crbug.com/602483 css3/flexbox/repaint-rtl-column.html [ NeedsRebaseline ] +crbug.com/602483 css3/flexbox/repaint.html [ NeedsRebaseline ] +crbug.com/602483 editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ NeedsRebaseline ] +crbug.com/602483 fast/box-shadow/negative-shadow-box-expand.html [ NeedsRebaseline ] +crbug.com/602483 fast/box-shadow/negative-shadow-box-shrink.html [ NeedsRebaseline ] +crbug.com/602483 fast/box-shadow/shadow-box-resize-writing-mode.html [ NeedsRebaseline ] +crbug.com/602483 fast/box-shadow/shadow-box-resize.html [ NeedsRebaseline ] +crbug.com/602483 fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ] +crbug.com/602483 fast/css-grid-layout/grid-element-change-columns-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/css-grid-layout/grid-element-change-rows-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/css-grid-layout/grid-item-change-row-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/css-grid-layout/grid-item-z-index-change-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ NeedsRebaseline ] +crbug.com/602483 fast/forms/range/range-focus-by-mouse-then-keydown.html [ NeedsRebaseline ] +crbug.com/602483 fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ NeedsRebaseline ] +crbug.com/602483 fast/images/fixed-img-src-change-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 fast/images/repaint-subrect-grid.html [ NeedsRebaseline ] +crbug.com/602483 fast/layers/scroll-descendant-with-cached-cliprects.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/4776765.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/absolute-margin-change-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/absolute-position-change-containing-block.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/absolute-position-changed.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/abspos-shift-image-incorrect-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/add-table-overpaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/align-content-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/align-content-distribution-change-grid.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/align-content-position-change-grid.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/align-self-change-grid.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/align-self-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/align-self-overflow-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/background-currentColor-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/background-image-paint-invalidation.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/background-shorthand-with-gradient-and-height-changes.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/background-size-auto-with-gradient-and-height-changes.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/backgroundSizeRepaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/block-layout-inline-children-float-positioned.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/block-no-inflow-children.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/block-shift-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/body-background-image.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/border-radius-repaint-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/border-radius-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/border-radius-without-border.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/border-repaint-glitch.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/box-inline-resize.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/box-shadow-dynamic.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/box-shadow-inset-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/box-sizing-border-keeping-size.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/box-sizing.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/bugzilla-3509.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/bugzilla-5699.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/bugzilla-6278.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/bugzilla-6388.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/bugzilla-6473.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/bugzilla-7235.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/caret-with-transformation.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/change-text-content-and-background-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/clip-with-layout-delta.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/clipped-overflow-visible-subtree.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/clipped-relative.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/containing-block-position-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/content-into-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/control-clip.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/crbug-371640-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/crbug-371640-3.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/crbug-371640-4.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/crbug-371640.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/destroy-composited-scrollbar.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/destroy-overlay-scrollbar.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/destroy-scrollbar.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/details-open-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/dynamic-table-vertical-alignment-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/erase-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-and-absolute-position-scrolled.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-child-move-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-child-of-fixed-move-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-child-of-transformed-move-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-margin-change-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-move-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-scroll-simple.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-table-cell.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-table-overflow-zindex.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-table-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/fixed-to-relative-position-with-absolute-child.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/float-in-new-block-with-layout-delta.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/float-move-during-layout.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/float-overflow-right.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/float-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/focus-continuations.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/focus-enable-continuations.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/focus-ring-on-child-move.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/focus-ring-on-continuation-move.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/gradients-em-stops-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/hover-invalidation-table.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/hover-pseudo-borders-whitespace.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/hover-pseudo-borders.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-block-resize.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-color-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-focus.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-outline-repaint-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-outline-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-reflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-relative-positioned.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-style-change-in-scrolled-view.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-vertical-lr-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/inline-vertical-rl-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/intermediate-layout-position.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/invalidation-after-opacity-change-subtree.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/invisible-objects.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/japanese-rl-selection-clear.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/japanese-rl-selection-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-content-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-content-distribution-change-grid.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-content-position-change-grid.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-content-position-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-items-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-items-legacy-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-items-overflow-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-self-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/justify-self-overflow-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/layout-state-only-positioned.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/layout-state-relative.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/layout-state-scrolloffset.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/layout-state-scrolloffset2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/layout-state-scrolloffset3.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-1.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-10.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-3.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-4.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-5.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-6.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-7.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-8.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-flow-with-floats-9.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-in-scrolled-clipped-block.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/line-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/lines-with-layout-delta.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/list-marker-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/make-children-non-inline.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/margin.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/mix-blend-mode-separate-stacking-context.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multi-layout-one-frame.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-as-paint-container.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-with-abspos-in-relpos.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-with-abspos.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-with-block.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-with-inline.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/multicol-with-text.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/negative-text-indent-with-overflow-hidden.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/offset-change-wrong-invalidation-with-float.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/opacity-change-on-overflow-float.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-change-continuations.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-change-invalidation.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-child-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-clip-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-continuations.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-inset.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/outline-repaint-glitch.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-auto-in-overflow-auto-scrolled.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-clip-subtree-layout.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-delete-line.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-hide.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-into-content.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-scroll-after-move.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-scroll-body-appear.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-scroll-delete.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overflow-show.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/overhanging-float-detach-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/padding-keeping-content-size.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/percent-size-image-resize-container.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/position-change-keeping-geometry.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/positioned-document-element.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/positioned-great-grandparent-change-location.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/positioned-list-offset-change-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/push-block-with-first-line.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/quotes.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/reflection-redraw.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/reflection-repaint-test.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/relative-inline-positioned-movement-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/relative-margin-change-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/remove-block-after-layout.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/remove-inline-after-layout.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/remove-inline-block-descendant-of-flex.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/remove-inline-layer-after-layout.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/repaint-across-writing-mode-boundary.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/repaint-composited-child-in-scrolled-container.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/repaint-descandant-on-ancestor-layer-move.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/repaint-during-scroll-with-zoom.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/repaint-table-row-in-composited-document.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/requestAnimation-translation-leave-traces.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/resize-scrollable-div.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/resize-scrollable-iframe.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/resize-with-border-clipped.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/resize-with-border.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scroll-in-transformed-layer.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scroll-inside-table-cell.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scroll-relative-table-inside-table-cell.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scrollbar-damage-and-full-viewport-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scrollbar-invalidation-on-resize-with-border.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scrollbar-invalidation-on-resize.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/scrollbar-parts.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/search-field-cancel.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/select-option-background-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selected-replaced.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selection-after-delete.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selection-after-remove.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selection-change-in-iframe-with-relative-parent.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selection-clear.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selection-partial-invalidation-between-blocks.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/selection-rl.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/shift-relative-positioned-container-with-image-addition.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/shift-relative-positioned-container-with-image-removal.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/stacked-diacritics.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/stacking-context-lost.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/static-to-positioned.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/subtree-root-skipped.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-cell-collapsed-border.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-cell-move.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-col-background-offset.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-col-background.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-collapsed-border.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-outer-border.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-overflow-auto-in-overflow-auto-scrolled.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-row-bg-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-row.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-section-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-section-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-shrink-row-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/table-with-padding-row-invalidation.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/text-append-dirty-lines.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/text-in-relative-positioned-inline.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/text-match-document-change.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/text-selection-rect-in-overflow-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/text-selection-rect-in-overflow.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/textarea-appearance-none-resize-handle.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/textarea-set-disabled.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/transform-disable-layoutstate.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/transform-inline-layered-child.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/transform-layout-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/transform-rotate-and-remove.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/transform-translate.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/vertical-align-length1.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/vertical-align-length2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/vertical-align1.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/vertical-align2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/vertical-rl-as-paint-container.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/video-mute-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/video-unmute-repaint.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/view-background-from-body-2.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-background-image-fixed-centered-composited.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-background-image-fixed-centered.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-background-image-generated.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-background-image-non-fixed.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-media-query.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-percent-html.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-percent-width-height.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-positioned-bottom.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-positioned-percent-top.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-vertical-writing-mode.html [ NeedsRebaseline ] +crbug.com/602483 fast/repaint/window-resize-viewport-percent.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/border-collapse-change-collapse-to-separate.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/border-collapse-change-separate-to-collapse.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-69296.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-cell-append.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-cell-remove.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-cell-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-cell-border-width.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-cell-sl-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-col-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-col-border-width.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-colgroup-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-colgroup-border-width.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-row-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-row-border-width.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-table-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-table-border-width.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-tbody-border-color.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/border-collapsing/cached-change-tbody-border-width.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/resize-table-repaint-percent-size-cell.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/resize-table-repaint-vertical-align-cell.html [ NeedsRebaseline ] +crbug.com/602483 fast/table/resize-table-row-repaint.html [ NeedsRebaseline ] +crbug.com/602483 media/media-audio-no-spurious-repaints.html [ NeedsRebaseline ] +crbug.com/602483 media/video-paint-invalidation.html [ NeedsRebaseline ] +crbug.com/602483 paint/invalidation/animated-gif-background.html [ NeedsRebaseline ] +crbug.com/602483 paint/invalidation/invalidate-box-shadow-currentColor.html [ NeedsRebaseline ] +crbug.com/602483 paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ NeedsRebaseline ] +crbug.com/602483 paint/invalidation/non-text-link-invalidation-optimization.html [ NeedsRebaseline ] +crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-rtl.html [ NeedsRebaseline ] +crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ NeedsRebaseline ] +crbug.com/602483 paint/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ NeedsRebaseline ] +crbug.com/602483 paint/selection/invalidation-rect-includes-newline.html [ NeedsRebaseline ] +crbug.com/602483 paint/selection/invalidation-rect-with-br-includes-newline.html [ NeedsRebaseline ] +crbug.com/602483 paint/selection/selection-within-composited-scroller.html [ NeedsRebaseline ] +crbug.com/602483 svg/as-image/svg-image-change-content-size.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/as-object/embedded-svg-size-changes-no-layout-triggers.html [ NeedsRebaseline ] +crbug.com/602483 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ NeedsRebaseline ] +crbug.com/602483 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ NeedsRebaseline ] +crbug.com/602483 svg/carto.net/window.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/absolute-sized-content-with-resources.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/circle-move-invalidation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/clip-path-child-changes.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/clip-path-href-changes.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/clip-path-id-changes.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/clip-path-units-changes.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/deep-dynamic-updates.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/gradient-add-stops.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/gradient-stop-style-change.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-clipPath-and-object-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-clipPath-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-gradient-and-object-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-gradient-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-marker-and-object-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-marker-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-mask-and-object-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-mask-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-pattern-and-object-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-late-pattern-creation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-repaint-rect-on-path-with-stroke.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-bounce.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-container.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-gradient.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-pattern-child.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-pattern.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-polygon-changes.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-polygon-removal.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-stop-linked-gradient.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-stop.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/js-update-style.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/marker-viewBox-changes.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/mask-invalidation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/object-sizing-no-width-height-change-content-box-size.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/pending-resource-after-removal.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-content-with-resources.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-content.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-deep-shadow-tree-content.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-image.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-inner-svg.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-shadow-tree-content-with-symbol.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-shadow-tree-content.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-use-on-symbol.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/relative-sized-use-without-attributes-on-symbol.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/repaint-moving-svg-and-div.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/resource-client-removal.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/resource-invalidate-on-target-update.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ NeedsRebaseline ] +crbug.com/602483 svg/custom/text-dom-removal.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/text-repaint-including-stroke.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/text-xy-updates-SVGList.xhtml [ NeedsRebaseline ] +crbug.com/602483 svg/custom/use-clipped-hit.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/use-detach.svg [ NeedsRebaseline ] +crbug.com/602483 svg/custom/use-setAttribute-crash.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-change-target-id.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-multiple-targets-id-change.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-reference-invalidation.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-remove-target.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-add-to-document.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-attribute-change-with-use-indirection-2.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-attribute-change-with-use-indirection.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-attribute-change.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-changes-id.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-id-change.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-property-change.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-reappend-to-document.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/feImage-target-remove-from-document.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/filter-width-update.svg [ NeedsRebaseline ] +crbug.com/602483 svg/filters/invalidate-on-child-layout.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/add-background-property-on-root.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/add-outline-property-on-root.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/container-repaint.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/fecomponenttransfer-in1-change.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/foreign-object-repaint.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/image-with-clip-path.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/inner-svg-change-viewBox-contract.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/inner-svg-change-viewPort-relative.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/mask-clip-target-transform.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/modify-inserted-listitem.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/modify-transferred-listitem-different-attr.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/modify-transferred-listitem.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/outline-offset-text.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/paintorder-filtered.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/remove-background-property-on-root.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/remove-outline-property-on-root.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/repaint-non-scaling-stroke-text-decoration.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/repaint-non-scaling-stroke-text.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/repaint-paintorder.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/text-mask-update.svg [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/text-pattern-update-2.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/text-pattern-update.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/transform-changed-state.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/transform-foreign-object.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/transform-text-element.html [ NeedsRebaseline ] +crbug.com/602483 svg/repaint/tspan-pattern-update.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/append-text-node-to-tspan.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/ems-display-none.svg [ NeedsRebaseline ] +crbug.com/602483 svg/text/exs-display-none.svg [ NeedsRebaseline ] +crbug.com/602483 svg/text/modify-text-node-in-tspan.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/remove-text-node-from-tspan.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/remove-tspan-from-text.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/text-rescale.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/text-selection-text-05-t.svg [ NeedsRebaseline ] +crbug.com/602483 svg/text/text-viewbox-rescale.html [ NeedsRebaseline ] +crbug.com/602483 svg/text/tspan-dynamic-positioning.svg [ NeedsRebaseline ] +crbug.com/602483 svg/zoom/page/absolute-sized-document-no-scrollbars.svg [ NeedsRebaseline ] +crbug.com/602483 svg/zoom/page/relative-sized-document-scrollbars.svg [ NeedsRebaseline ] +crbug.com/602483 transforms/transform-focus-ring-repaint.html [ NeedsRebaseline ] +crbug.com/602483 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ] +crbug.com/602483 virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll.html [ NeedsRebaseline ] +crbug.com/602483 virtual/gpu-rasterization/fast/images/repaint-subrect-grid.html [ NeedsRebaseline ] +crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change.html [ NeedsRebaseline ] +crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight.html [ NeedsRebaseline ] +crbug.com/602483 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content.html [ NeedsRebaseline ] + crbug.com/596968 [ Win ] inspector-protocol/input/eventTimestamp.html [ Failure Pass ] crbug.com/248938 [ Win Debug ] virtual/threaded/animations/transition-and-animation-2.html [ Timeout ] @@ -548,6 +993,8 @@ crbug.com/552532 [ Win10 ] plugins/focus.html [ Pass Crash ] crbug.com/552532 [ Win10 ] plugins/tabindex.html [ Pass Crash ] +crbug.com/602110 hittesting/border-hittest-with-image-fallback.html [ Failure ] + crbug.com/505364 imported/web-platform-tests/shadow-dom/untriaged/shadow-trees/lower-boundary-encapsulation/test-004.html [ Failure ] crbug.com/505364 imported/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-001.html [ Failure ] crbug.com/505364 imported/web-platform-tests/shadow-dom/untriaged/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-002.html [ Failure ] @@ -1069,8 +1516,6 @@ crbug.com/548695 fast/forms/datalist/update-range-with-datalist.html [ Failure ] -crbug.com/602618 [ Linux Mac ] svg/custom/use-disappears-after-style-update.svg [ Pass Failure ] - # Temporarily disabled after chromium change crbug.com/492511 [ Mac ] fast/text/atsui-negative-spacing-features.html [ Failure ] crbug.com/492511 [ Mac ] fast/text/international/arabic-justify.html [ Failure ] @@ -1196,10 +1641,6 @@ crbug.com/527270 accessibility/name-calc-img.html [ Failure Pass Timeout ] -crbug.com/602616 svg/filters/filter-refresh.svg [ NeedsManualRebaseline ] - -crbug.com/602483 svg/transforms/animated-path-inside-transformed-html.xhtml [ NeedsManualRebaseline ] - # This test has different results in Debug and Release. crbug.com/529038 [ Debug ] virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ Failure ] @@ -1278,7 +1719,10 @@ crbug.com/587593 [ Android ] fast/js/pic/cached-single-entry-transition.html [ Pass Failure ] -crbug.com/602614 [ Win ] svg/carto.net/tabgroup.svg [ Pass Failure ] +crbug.com/602614 svg/carto.net/tabgroup.svg [ NeedsManualRebaseline ] +crbug.com/602618 svg/custom/use-disappears-after-style-update.svg [ NeedsManualRebaseline ] +crbug.com/602616 svg/filters/filter-refresh.svg [ NeedsManualRebaseline ] +crbug.com/602483 svg/transforms/animated-path-inside-transformed-html.xhtml [ NeedsManualRebaseline ] crbug.com/587779 [ Linux Mac10.10 Mac10.11 Retina ] fast/dynamic/window-resize-scrollbars-test.html [ Timeout Failure Pass ] crbug.com/588103 fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer.html [ Pass Failure ] @@ -1296,6 +1740,8 @@ crbug.com/593888 [ Linux Debug ] fast/dom/htmlcollection-reachable.html [ Timeout ] +crbug.com/603728 [ Linux ] virtual/gpu-rasterization/fast/images/color-profile-filter.html [ Failure ] + crbug.com/593568 [ Win Debug ] virtual/threaded/fast/scroll-behavior/smooth-scroll/horizontal-smooth-scroll-in-rtl.html [ Failure ] #crbug.com/591825 [ Mac10.11 Debug ] fast/text/selection-multiple-runs.html [ Failure ] @@ -1527,13 +1973,17 @@ crbug.com/600261 imported/web-platform-tests/mediacapture-streams/MediaDevices-getUserMedia.html [ Failure ] crbug.com/600261 imported/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-srcObject.html [ Failure ] +crbug.com/603767 [ Linux ] inspector/tracing/timeline-auto-record.html [ Failure ] +crbug.com/603767 [ Linux ] virtual/threaded/inspector/tracing/timeline-auto-record.html [ Failure ] + crbug.com/593679 virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance.html [ NeedsManualRebaseline ] crbug.com/593679 virtual/scalefactor200/fast/hidpi/static/calendar-picker-appearance.html [ NeedsManualRebaseline ] crbug.com/593679 virtual/scalefactor200withzoom/fast/hidpi/static/calendar-picker-appearance.html [ NeedsManualRebaseline ] +crbug.com/603703 [ Linux ] imported/web-platform-tests/web-animations/animation-timeline/document-timeline.html [ Failure Pass ] + crbug.com/600248 imported/web-platform-tests/web-animations/keyframe-effect/getComputedTiming-progress.html [ Crash Failure ] crbug.com/600248 imported/web-platform-tests/web-animations/keyframe-effect/getComputedTiming-currentIteration.html [ Crash Failure ] crbug.com/600248 imported/web-platform-tests/web-animations/animation-effect-timing/endDelay.html [ Failure ] crbug.com/600248 imported/web-platform-tests/web-animations/animation/constructor.html [ Failure Timeout ] crbug.com/600248 imported/web-platform-tests/web-animations/animation-node/idlharness.html [ Failure Timeout ] -
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Range/range-clone-contents-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/Range/range-clone-contents-expected.txt index 08930295..5e5de6c 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/Range/range-clone-contents-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/Range/range-clone-contents-expected.txt
@@ -13,7 +13,7 @@ | <shadow:root> | <div> | id="alttext-container" -| style="overflow: hidden; border: 1px solid silver; display: inline-block; box-sizing: border-box; padding: 1px; border-radius: inherit;" +| style="overflow: hidden; border: 1px solid silver; display: inline-block; box-sizing: border-box; padding: 1px;" | <img> | align="left" | height="16"
diff --git a/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom-expected.txt b/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom-expected.txt index 31f3c6f8d..42a8c97 100644 --- a/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom-expected.txt
@@ -3,8 +3,8 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom.html b/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom.html index 12c7a012..c5aac05 100644 --- a/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom.html +++ b/third_party/WebKit/LayoutTests/fast/events/event-listener-on-attribute-inside-shadow-dom.html
@@ -14,7 +14,7 @@ // Register an event listener on an attribute node. div1.attributes[0].addEventListener('touchstart', function() { }); if (window.internals) - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); // Move the parent element into a shadow DOM. shadowRoot.appendChild(div1); @@ -25,6 +25,6 @@ // Make sure the handler was unregistered. if (window.internals) - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/resources/compositor-touch-hit-rects.js b/third_party/WebKit/LayoutTests/fast/events/touch/resources/compositor-touch-hit-rects.js index a6c6e27..99892127 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/resources/compositor-touch-hit-rects.js +++ b/third_party/WebKit/LayoutTests/fast/events/touch/resources/compositor-touch-hit-rects.js
@@ -136,6 +136,12 @@ window.onload = function() { // Run each general test case. var tests = document.querySelectorAll('.testcase'); + + // Add document wide touchend and touchcancel listeners and ensure the + // listeners do not affect compositor hit test rects. + document.documentElement.addEventListener('touchend', listener, false); + document.documentElement.addEventListener('touchcancel', listener, false); + for ( var i = 0; i < tests.length; i++) { // Force a compositing update before testing each case to ensure that // any subsequent touch rect updates are actually done because of
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-action-touch-handlers.html b/third_party/WebKit/LayoutTests/fast/events/touch/touch-action-touch-handlers.html index fe9b4d6e..2560b93 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/touch-action-touch-handlers.html +++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-action-touch-handlers.html
@@ -33,7 +33,7 @@ function getTouchHandlerCount(doc) { window.internals.updateStyleAndReturnAffectedElementCount(); - return window.internals.touchEventHandlerCount(doc); + return window.internals.touchStartOrMoveEventHandlerCount(doc); } function runTests() {
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count-expected.txt b/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count-expected.txt index 4d3dc76d..e29342a39 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count-expected.txt
@@ -4,89 +4,130 @@ Test addEventListener/removeEventListener on the document. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 3 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 Test setting touch handlers on the document. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 Test addEventListener/removeEventListener on the window. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 3 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 Test setting touch handlers on the window. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 Test addEventListener/removeEventListener on a div. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 3 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 Test setting touch handlers on a div. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 Test redudant addEventListener on a div. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 Test addEventListener/removeEventListener on a new div. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 Test setting touch handlers on a new div. -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 Test that nested Documents' touch handlers are properly tracked in their parent Document. -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(nestedDocument) is 4 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(nestedDocument) is 3 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(nestedDocument) is 4 -PASS window.internals.touchEventHandlerCount(document) is 4 -PASS window.internals.touchEventHandlerCount(nestedDocument) is 2 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(nestedDocument) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(nestedDocument) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(nestedDocument) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(nestedDocument) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(nestedDocument) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(nestedDocument) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 2 +PASS window.internals.touchStartOrMoveEventHandlerCount(nestedDocument) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(nestedDocument) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count.html b/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count.html index 7cf88e8f..4a2f211 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count.html +++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-handler-count.html
@@ -7,92 +7,106 @@ (function() { var listener = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); document.addEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); document.addEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); document.addEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '3'); document.removeEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); document.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); // Try removing the capturing listener again. document.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); document.removeEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); document.removeEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); })(); debug("Test setting touch handlers on the document."); (function() { - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); document.ontouchstart = function() { } document.ontouchmove = function() {} document.ontouchend = function() {} document.ontouchcancel = function() {} - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); document.ontouchstart = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); document.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); document.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); - document.ontouchmove = null; + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); document.ontouchend = null; + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); + document.ontouchmove = null; document.ontouchcancel = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); })(); debug("Test addEventListener/removeEventListener on the window."); (function() { var listener = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); window.addEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); window.addEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); window.addEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '3'); window.removeEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); window.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); // Try removing the capturing listener again. window.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); window.removeEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); window.removeEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); })(); debug("Test setting touch handlers on the window."); (function() { - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); window.ontouchstart = function() { } window.ontouchmove = function() {} window.ontouchend = function() {} window.ontouchcancel = function() {} - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); window.ontouchstart = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); window.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); window.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); - window.ontouchmove = null; + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); window.ontouchend = null; + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); + window.ontouchmove = null; window.ontouchcancel = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); })(); debug("Test addEventListener/removeEventListener on a div."); @@ -100,48 +114,55 @@ var listener = function() { } var div = document.getElementById('touchtarget'); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); div.addEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.addEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); div.addEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '3'); div.removeEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); div.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); // Try removing the capturing listener again. div.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.removeEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.removeEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); })(); debug("Test setting touch handlers on a div."); (function() { var div = document.getElementById('touchtarget'); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); div.ontouchstart = function() { } div.ontouchmove = function() { } div.ontouchend = function() { } div.ontouchcancel = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); div.ontouchstart = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); div.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); div.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); - div.ontouchmove = null; + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); div.ontouchend = null; + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); + div.ontouchmove = null; div.ontouchcancel = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); })(); debug("Test redudant addEventListener on a div."); @@ -149,14 +170,14 @@ var listener = function() { } var div = document.getElementById('touchtarget'); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); div.addEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.addEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.removeEventListener('touchstart', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); })(); @@ -166,30 +187,35 @@ var touchtarget = document.getElementById('touchtarget'); var listener = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); div.addEventListener('touchstart', listener, true); div.addEventListener('touchmove', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); touchtarget.appendChild(div); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); div.addEventListener('touchend', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); div.removeEventListener('touchstart', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); touchtarget.removeChild(div); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.removeEventListener('touchmove', listener, false); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); div.removeEventListener('touchmove', listener, true); div.removeEventListener('touchend', listener, true); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); })(); debug("Test setting touch handlers on a new div."); @@ -197,27 +223,32 @@ var div = document.createElement('div'); var touchtarget = document.getElementById('touchtarget'); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); div.ontouchstart = function() { } div.ontouchmove = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); touchtarget.appendChild(div); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); div.ontouchend = function() { } - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); div.ontouchstart = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); touchtarget.removeChild(div); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); div.ontouchend = null; div.ontouchmove = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); })(); var nestedDocument; @@ -228,7 +259,8 @@ var touchtarget = document.getElementById('touchtarget'); touchtarget.ontouchend = function() {}; - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); touchtarget.appendChild(iframe); @@ -236,25 +268,34 @@ nestedDocument.open('text/html', 'replace'); nestedDocument.write('<!DOCTYPE html>\n<script>\nwindow.ontouchstart=function(){};\n</' + 'script>\n' + '<div id=twoHandlers ontouchmove="function(){}" ontouchcancel="function(){}"></div>'); - shouldBe('window.internals.touchEventHandlerCount(nestedDocument)', '4'); - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(nestedDocument)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(nestedDocument)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); nestedDocument.write('<script>window.ontouchstart=undefined</' + 'script>\n'); - shouldBe('window.internals.touchEventHandlerCount(nestedDocument)', '3'); - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(nestedDocument)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(nestedDocument)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); nestedDocument.write('<script>document.addEventListener("touchmove", function(){});</' + 'script>\n'); - shouldBe('window.internals.touchEventHandlerCount(nestedDocument)', '4'); - shouldBe('window.internals.touchEventHandlerCount(document)', '4'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(nestedDocument)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(nestedDocument)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '2'); nestedDocument.write('<script>document.getElementById("twoHandlers").remove();</' + 'script>\n'); gc(); - shouldBe('window.internals.touchEventHandlerCount(nestedDocument)', '2'); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(nestedDocument)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(nestedDocument)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); nestedDocument.close(); touchtarget.removeChild(iframe); - shouldBe('window.internals.touchEventHandlerCount(document)', '1'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); })(); </script> </body>
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents-expected.txt b/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents-expected.txt index e002784..3a02a9e 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents-expected.txt
@@ -3,12 +3,15 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 0 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 3 -PASS window.internals.touchEventHandlerCount(document) is 2 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 2 +PASS window.internals.touchEndOrCancelEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents.html b/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents.html index 8ccd6cf..1eddc0d 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents.html +++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-input-element-change-documents.html
@@ -4,26 +4,29 @@ description("This test checks that we correctly update the touch event handler count when an Input element with default touch handlers changes documents."); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); // There are two touchable Input elements in Audio's shadow DOM when controls are enabled. var input = document.createElement('audio'); input.setAttribute("controls", true); var container = document.getElementById('container'); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); container.appendChild(input); - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); input.ontouchend = function() { }; - shouldBe('window.internals.touchEventHandlerCount(document)', '3'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '1'); input.ontouchend = null; - shouldBe('window.internals.touchEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '2'); + shouldBe('window.internals.touchEndOrCancelEventHandlerCount(document)', '0'); document.implementation.createDocument("", "", null).adoptNode(input); - shouldBe('window.internals.touchEventHandlerCount(document)', '0'); + shouldBe('window.internals.touchStartOrMoveEventHandlerCount(document)', '0'); </script>
diff --git a/third_party/WebKit/LayoutTests/fast/events/touch/touch-target-removed-crash.html b/third_party/WebKit/LayoutTests/fast/events/touch/touch-target-removed-crash.html index 02a392c9..a62cbf6 100644 --- a/third_party/WebKit/LayoutTests/fast/events/touch/touch-target-removed-crash.html +++ b/third_party/WebKit/LayoutTests/fast/events/touch/touch-target-removed-crash.html
@@ -11,12 +11,12 @@ var div = document.createElement('div'); div.ontouchstart = function() { }; document.body.appendChild(div); - window.internals.touchEventHandlerCount(document); + window.internals.touchStartOrMoveEventHandlerCount(document); div.parentNode.removeChild(div); div = 0; if (window.GCController) GCController.collect(); - window.internals.touchEventHandlerCount(document); + window.internals.touchStartOrMoveEventHandlerCount(document); } crash();
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/inline-block-baseline-expected.html b/third_party/WebKit/LayoutTests/fast/multicol/inline-block-baseline-expected.html new file mode 100644 index 0000000..7b03779 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/multicol/inline-block-baseline-expected.html
@@ -0,0 +1,11 @@ +<!DOCTYPE html> +<style> + .letter { float:left; width:1em; text-align:center; } +</style> +<p>The word "PASS" should be seen below, on a straight line, with a somewhat large letter spacing.</p> +<div style="line-height:2em; font-family:monospace;"> + <div class="letter">P</div> + <div class="letter">A</div> + <div class="letter">S</div> + <div class="letter">S</div> +</div>
diff --git a/third_party/WebKit/LayoutTests/fast/multicol/inline-block-baseline.html b/third_party/WebKit/LayoutTests/fast/multicol/inline-block-baseline.html new file mode 100644 index 0000000..d60849dbf --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/multicol/inline-block-baseline.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<style> + .letter { text-align:center; width:1em; } +</style> +<p>The word "PASS" should be seen below, on a straight line, with a somewhat large letter spacing.</p> +<div style="line-height:2em; font-family:monospace;"> + <div style="display:inline-block;" class="letter">P</div><div style="display:inline-block;"> + <div style="columns:3; column-gap:0; width:3em;"> + <div class="letter">A</div> + <div class="letter">S</div> + <div class="letter">S</div> + </div> + </div> +</div>
diff --git a/third_party/WebKit/LayoutTests/fast/parser/x-frame-options-detached-document-crash-expected.txt b/third_party/WebKit/LayoutTests/fast/parser/x-frame-options-detached-document-crash-expected.txt deleted file mode 100644 index cbcf58f..0000000 --- a/third_party/WebKit/LayoutTests/fast/parser/x-frame-options-detached-document-crash-expected.txt +++ /dev/null
@@ -1 +0,0 @@ -This checks that writing an X-Frame-Options meta tag to a detached document does not crash.
diff --git a/third_party/WebKit/LayoutTests/fast/parser/x-frame-options-detached-document-crash.html b/third_party/WebKit/LayoutTests/fast/parser/x-frame-options-detached-document-crash.html deleted file mode 100644 index 086c1b7..0000000 --- a/third_party/WebKit/LayoutTests/fast/parser/x-frame-options-detached-document-crash.html +++ /dev/null
@@ -1,13 +0,0 @@ -This checks that writing an X-Frame-Options meta tag to a detached document does not crash. -<script> -if (window.testRunner) - testRunner.dumpAsText(); -</script> -<iframe id=foo></iframe> -<script> - var fooFrame = document.getElementById('foo'); - var fooDoc = fooFrame.contentWindow.document; - fooFrame.parentNode.removeChild(fooFrame); - - fooDoc.write('<meta http-equiv="X-Frame-Options" content="deny"/>'); -</script>
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open-expected.txt index af082127..eb20697 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open-expected.txt +++ b/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open-expected.txt
@@ -3,4 +3,7 @@ Name: InspectorDatabaseTest Version: 1.0 Domain: 127.0.0.1 +Name: InspectorDatabaseTest2 +Version: 1.0 +Domain: 127.0.0.1
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open.html b/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open.html index bec22c1..33409b8 100644 --- a/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open.html +++ b/third_party/WebKit/LayoutTests/http/tests/inspector-enabled/database-open.html
@@ -12,6 +12,7 @@ testRunner.waitUntilDone(); var db = openDatabase("InspectorDatabaseTest", "1.0", "Test of database instrumentation", 1); + var db2 = openDatabase("InspectorDatabaseTest2", "1.0", "Test of database instrumentation 2", 1); if (window.testRunner) testRunner.showWebInspector(); @@ -23,7 +24,17 @@ InspectorTest.databaseModel().enable(); function run() { + function compareByName(d1, d2) + { + if (d1.name < d2.name) + return -1; + if (d1.name > d2.name) + return 1; + return 0; + } + var databases = InspectorTest.databaseModel().databases(); + databases.sort(compareByName); for (var i = 0; i < databases.length; ++i) { InspectorTest.addResult("Name: " + databases[i].name); InspectorTest.addResult("Version: " + databases[i].version);
diff --git a/third_party/WebKit/LayoutTests/http/tests/misc/onload-write-during-xframe-deny-expected.txt b/third_party/WebKit/LayoutTests/http/tests/misc/onload-write-during-xframe-deny-expected.txt deleted file mode 100644 index 077cc10..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/misc/onload-write-during-xframe-deny-expected.txt +++ /dev/null
@@ -1,2 +0,0 @@ -CONSOLE ERROR: line 6: Refused to display 'http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html' in a frame because it set 'X-Frame-Options' to 'deny'. -PASS
diff --git a/third_party/WebKit/LayoutTests/http/tests/misc/onload-write-during-xframe-deny.html b/third_party/WebKit/LayoutTests/http/tests/misc/onload-write-during-xframe-deny.html deleted file mode 100644 index 88de10b3..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/misc/onload-write-during-xframe-deny.html +++ /dev/null
@@ -1,8 +0,0 @@ -<body onload="document.write('PASS');"> -<script> -if (window.testRunner) - testRunner.dumpAsText(); -</script> -<iframe src="http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html"> -</iframe> -</body>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html deleted file mode 100644 index 888fdc9..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html +++ /dev/null
@@ -1,9 +0,0 @@ -<html> -<head> -</head> -<body> - <p>FAIL: This should show up and disappear immediately.</p> - <meta http-equiv="x-frame-options" content="deny" /> - <p>FAIL: This should never show up.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html deleted file mode 100644 index b8e727a8..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html +++ /dev/null
@@ -1,8 +0,0 @@ -<html> -<head> - <meta http-equiv="x-frame-options" content="sameorigin" /> -</head> -<body> - <p>PASS: This should show up as the parent is in the same origin.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html deleted file mode 100644 index a277c46..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html +++ /dev/null
@@ -1,8 +0,0 @@ -<html> -<head> - <meta http-equiv="x-frame-options" content="sameorigin" /> -</head> -<body> - <p>FAIL: This should not show up as the parent is not in the same origin.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html deleted file mode 100644 index 9d78b23..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html +++ /dev/null
@@ -1,8 +0,0 @@ -<html> -<head> - <meta http-equiv="x-frame-options" content="deny" /> -</head> -<body> - <p>FAIL: This should not show up.</p> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-expected.txt deleted file mode 100644 index 996557b..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-expected.txt +++ /dev/null
@@ -1,16 +0,0 @@ -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html - willSendRequest <NSURLRequest URL http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag.html, http method GET> redirectResponse (null) -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html - didReceiveResponse <NSURLResponse http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html, http status code 200> -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html - didFinishLoading -CONSOLE ERROR: line 3: Refused to display 'http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html' in a frame because it set 'X-Frame-Options' to 'deny'. -data:, - willSendRequest <NSURLRequest URL data:,, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag.html, http method GET> redirectResponse (null) -data:, - didReceiveResponse <NSURLResponse data:,, http status code 200> -data:, - didFinishLoading -CONSOLE MESSAGE: line 14: PASS: Access to contentWindow.location.href threw an exception. -There should be no content in the iframe below - - - --------- -Frame: '<!--framePath //<!--frame0-->-->' --------- -
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body-expected.txt deleted file mode 100644 index 0ca7a24..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body-expected.txt +++ /dev/null
@@ -1,16 +0,0 @@ -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html - willSendRequest <NSURLRequest URL http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html, http method GET> redirectResponse (null) -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html - didReceiveResponse <NSURLResponse http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html, http status code 200> -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html - didFinishLoading -CONSOLE ERROR: line 6: Refused to display 'http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html' in a frame because it set 'X-Frame-Options' to 'deny'. -data:, - willSendRequest <NSURLRequest URL data:,, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html, http method GET> redirectResponse (null) -data:, - didReceiveResponse <NSURLResponse data:,, http status code 200> -data:, - didFinishLoading -CONSOLE MESSAGE: line 14: PASS: Access to contentWindow.location.href threw an exception. -There should be no content in the iframe below - - - --------- -Frame: '<!--framePath //<!--frame0-->-->' --------- -
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html deleted file mode 100644 index 1ea9dad..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-in-body.html +++ /dev/null
@@ -1,22 +0,0 @@ -<script> - if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.dumpChildFramesAsText(); - testRunner.dumpResourceLoadCallbacks(); - testRunner.waitUntilDone(); - } - - function checkIfDone() { - try { - var url = document.querySelector('iframe').contentWindow.location.href; - console.log("FAIL: Could read contentWindow.location.href"); - } catch (e) { - console.log("PASS: Access to contentWindow.location.href threw an exception."); - } - - testRunner.notifyDone(); - } -</script> - -<p>There should be no content in the iframe below</p> -<iframe style="width:500px; height:500px" src="http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-in-body.html" onload="checkIfDone()"></iframe>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow-expected.txt deleted file mode 100644 index ac55dfe9..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow-expected.txt +++ /dev/null
@@ -1,12 +0,0 @@ -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html - willSendRequest <NSURLRequest URL http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html, http method GET> redirectResponse (null) -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html - didReceiveResponse <NSURLResponse http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html, http status code 200> -http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html - didFinishLoading -ALERT: PASS: onload fired. -There should be content in the iframe below - - - --------- -Frame: '<!--framePath //<!--frame0-->-->' --------- -PASS: This should show up as the parent is in the same origin.
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html deleted file mode 100644 index faad148..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html +++ /dev/null
@@ -1,10 +0,0 @@ -<script> - if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.dumpChildFramesAsText(); - testRunner.dumpResourceLoadCallbacks(); - } -</script> - -<p>There should be content in the iframe below</p> -<iframe style="width:500px; height:500px" src="http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-allow.html" onload="alert('PASS: onload fired.');"></iframe>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny-expected.txt deleted file mode 100644 index abae37ee..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny-expected.txt +++ /dev/null
@@ -1,16 +0,0 @@ -http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html - willSendRequest <NSURLRequest URL http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html, http method GET> redirectResponse (null) -http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html - didReceiveResponse <NSURLResponse http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html, http status code 200> -http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html - didFinishLoading -CONSOLE ERROR: line 3: Refused to display 'http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html' in a frame because it set 'X-Frame-Options' to 'sameorigin'. -data:, - willSendRequest <NSURLRequest URL data:,, main document URL http://127.0.0.1:8000/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html, http method GET> redirectResponse (null) -data:, - didReceiveResponse <NSURLResponse data:,, http status code 200> -data:, - didFinishLoading -CONSOLE MESSAGE: line 14: PASS: Access to contentWindow.location.href threw an exception. -There should be no content in the iframe below - - - --------- -Frame: '<!--framePath //<!--frame0-->-->' --------- -
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html deleted file mode 100644 index d43fa18..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-deny.html +++ /dev/null
@@ -1,22 +0,0 @@ -<script> - if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.dumpChildFramesAsText(); - testRunner.dumpResourceLoadCallbacks(); - testRunner.waitUntilDone(); - } - - function checkIfDone() { - try { - var url = document.querySelector('iframe').contentWindow.location.href; - console.log("FAIL: Could read contentWindow.location.href"); - } catch (e) { - console.log("PASS: Access to contentWindow.location.href threw an exception."); - } - - testRunner.notifyDone(); - } -</script> - -<p>There should be no content in the iframe below</p> -<iframe style="width:500px; height:500px" src="http://localhost:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe-parent-same-origin-deny.html" onload="checkIfDone()"></iframe>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html b/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html deleted file mode 100644 index 5522557..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html +++ /dev/null
@@ -1,22 +0,0 @@ -<script> - if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.dumpChildFramesAsText(); - testRunner.dumpResourceLoadCallbacks(); - testRunner.waitUntilDone(); - } - - function checkIfDone() { - try { - var url = document.querySelector('iframe').contentWindow.location.href; - console.log("FAIL: Could read contentWindow.location.href"); - } catch (e) { - console.log("PASS: Access to contentWindow.location.href threw an exception."); - } - - testRunner.notifyDone(); - } -</script> - -<p>There should be no content in the iframe below</p> -<iframe style="width:500px; height:500px" src="http://127.0.0.1:8000/security/XFrameOptions/resources/x-frame-options-deny-meta-tag-subframe.html" onload="checkIfDone()"></iframe>
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/xssAuditor/meta-tag-http-refresh-x-frame-options.html b/third_party/WebKit/LayoutTests/http/tests/security/xssAuditor/meta-tag-http-refresh-x-frame-options.html deleted file mode 100644 index 70c3cfb..0000000 --- a/third_party/WebKit/LayoutTests/http/tests/security/xssAuditor/meta-tag-http-refresh-x-frame-options.html +++ /dev/null
@@ -1,22 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<script> -if (window.testRunner) { - testRunner.dumpAsText(); - testRunner.setXSSAuditorEnabled(true); - testRunner.waitUntilDone(); -} - -function done() -{ - if (window.testRunner) - testRunner.notifyDone(); -} -</script> -</head> -<body> -<iframe onload="done()" src="http://localhost:8000/security/xssAuditor/resources/echo-head.pl?q=%3Cmeta+http-equiv%3D%22x-frame-options%22+content%3D%22deny%22%3E"> -</iframe> -</body> -</html>
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt new file mode 100644 index 0000000..42ccadd --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt
@@ -0,0 +1,34 @@ +layer at (0,0) size 480x360 + LayoutView at (0,0) size 480x360 +layer at (0,0) size 480x360 + LayoutSVGRoot {svg} at (0,0) size 480x360 + LayoutSVGContainer {g} at (40,2) size 350x278 + LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 + LayoutSVGText {text} at (40,2) size 190x15 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 190x15 + chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 33 width 190.00: "Rectangle should be red not green" + LayoutSVGText {text} at (40,24) size 338x15 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 338x15 + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 64 width 338.00: "This tests id selectors: <rect id=\"one\" /> and the selector #one" + LayoutSVGContainer {g} at (130,70) size 260x60 + LayoutSVGEllipse {circle} at (130,70) size 60x60 [fill={[type=SOLID] [color=#008000]}] [cx=160.00] [cy=100.00] [r=30.00] + LayoutSVGRect {rect} at (220,80) size 60x40 [fill={[type=SOLID] [color=#FF0000]}] [x=220.00] [y=80.00] [width=60.00] [height=40.00] + LayoutSVGPath {polygon} at (300,70) size 90x50 [fill={[type=SOLID] [color=#008000]}] [points="300 100 320 120 340 110 360 120 390 90 340 70"] + LayoutSVGContainer {g} at (40,152) size 350x128 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}] + LayoutSVGText {text} at (40,2) size 266x15 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 266x15 + chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 51 width 266.00: "Circle should be red not green; rectangle still red" + LayoutSVGText {text} at (40,24) size 326x15 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 326x15 + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 63 width 326.00: "This tests attribute selectors: <circle transform=\"scale(2)\" />" + LayoutSVGText {text} at (40,46) size 210x15 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 210x15 + chunk 1 text run 1 at (40.00,58.00) startOffset 0 endOffset 39 width 210.00: "and the selector [transform=\"scale(2)\"]" + LayoutSVGContainer {g} at (130,220) size 260x60 + LayoutSVGEllipse {circle} at (130,220) size 60x60 [transform={m=((2.00,0.00)(0.00,2.00)) t=(0.00,0.00)}] [fill={[type=SOLID] [color=#FF0000]}] [cx=80.00] [cy=50.00] [r=15.00] + LayoutSVGRect {rect} at (220,230) size 60x40 [fill={[type=SOLID] [color=#FF0000]}] [x=220.00] [y=80.00] [width=60.00] [height=40.00] + LayoutSVGPath {polygon} at (300,220) size 90x50 [fill={[type=SOLID] [color=#008000]}] [points="300 100 320 120 340 110 360 120 390 90 340 70"] + LayoutSVGText {text} at (10,304) size 261x46 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 261x46 + chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 261.00: "$Revision: 1.4 $" + LayoutSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/custom/invalid-text-content-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/custom/invalid-text-content-expected.txt new file mode 100644 index 0000000..1f177bf7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/svg/custom/invalid-text-content-expected.txt
@@ -0,0 +1,17 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutSVGRoot {svg} at (0,0) size 100x100 + LayoutSVGText {text} + LayoutSVGTSpan {tspan} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGTextPath {textPath} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/custom/text-whitespace-handling-expected.png b/third_party/WebKit/LayoutTests/platform/android/svg/custom/text-whitespace-handling-expected.png new file mode 100644 index 0000000..97a7d026 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/svg/custom/text-whitespace-handling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/custom/text-whitespace-handling-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/custom/text-whitespace-handling-expected.txt new file mode 100644 index 0000000..97acc83 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/svg/custom/text-whitespace-handling-expected.txt
@@ -0,0 +1,43 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutSVGRoot {svg} at (20,12) size 484x516 + LayoutSVGContainer {g} at (20,12) size 484x516 + LayoutSVGText {text} at (10,6) size 233x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 233x18 + chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 36 width 232.38: "Testing xml:space=\"default\" support:" + LayoutSVGText {text} at (10,26) size 159x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 159x18 + chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 20 width 158.22: "NoSpacesBetweenWords" + LayoutSVGText {text} at (10,46) size 126x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 126x18 + chunk 1 text run 1 at (10.00,60.00) startOffset 0 endOffset 18 width 125.38: "Tabs become spaces" + LayoutSVGText {text} at (10,66) size 108x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 108x18 + chunk 1 text run 1 at (10.00,80.00) startOffset 0 endOffset 16 width 108.00: "No leading space" + LayoutSVGText {text} at (10,86) size 108x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 108x18 + chunk 1 text run 1 at (10.00,100.00) startOffset 0 endOffset 17 width 107.50: "No trailing space" + LayoutSVGText {text} at (10,106) size 154x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 154x18 + chunk 1 text run 1 at (10.00,120.00) startOffset 0 endOffset 11 width 76.50: "Whitespace " + chunk 1 text run 1 at (86.50,120.00) startOffset 0 endOffset 3 width 14.00: "is " + chunk 1 text run 1 at (100.50,120.00) startOffset 0 endOffset 10 width 63.00: "simplified" + LayoutSVGText {text} at (10,146) size 242x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 242x18 + chunk 1 text run 1 at (10.00,160.00) startOffset 0 endOffset 37 width 241.88: "Testing xml:space=\"preserve\" support:" + LayoutSVGText {text} at (10,166) size 170x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 170x18 + chunk 1 text run 1 at (10.00,180.00) startOffset 0 endOffset 24 width 169.50: " Newlines Become Spaces " + LayoutSVGText {text} at (10,186) size 126x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 126x18 + chunk 1 text run 1 at (10.00,200.00) startOffset 0 endOffset 18 width 125.38: "Tabs become spaces" + LayoutSVGText {text} at (10,206) size 154x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 154x18 + chunk 1 text run 1 at (10.00,220.00) startOffset 0 endOffset 25 width 154.00: " Respect leading space" + LayoutSVGText {text} at (10,226) size 150x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 150x18 + chunk 1 text run 1 at (10.00,240.00) startOffset 0 endOffset 25 width 149.50: "Respect trailing space " + LayoutSVGText {text} at (10,246) size 226x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 226x18 + chunk 1 text run 1 at (10.00,260.00) startOffset 0 endOffset 40 width 225.50: "Whitespace is not simplified"
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/text/text-selection-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/text/text-selection-ws-01-t-expected.txt new file mode 100644 index 0000000..893a4c1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/svg/text/text-selection-ws-01-t-expected.txt
@@ -0,0 +1,37 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutSVGRoot {svg} at (0,0) size 800x600 + LayoutSVGContainer {g} at (25,4) size 708x503 + LayoutSVGText {text} at (15,2) size 425x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 425x39 + chunk 1 text run 1 at (15.00,35.00) startOffset 0 endOffset 26 width 424.80: "Basic: xml:space attribute" + LayoutSVGText {text} at (35,27) size 375x40 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 375x39 + chunk 1 text run 1 at (35.00,60.00) startOffset 0 endOffset 22 width 374.40: "& whitespace handling." + LayoutSVGText {text} at (15,69) size 420x45 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 420x45 + chunk 1 text run 1 at (15.00,105.00) startOffset 0 endOffset 23 width 419.40: "WS with indented lines." + LayoutSVGText {text} at (15,104) size 420x45 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 420x45 + chunk 1 text run 1 at (15.00,140.00) startOffset 0 endOffset 23 width 419.40: "WS with indented lines." + LayoutSVGRect {rect} at (40,240) size 586x63 [stroke={[type=SOLID] [color=#000000]}] [x=25.00] [y=145.00] [width=350.00] [height=36.00] + LayoutSVGText {text} at (28,139) size 341x45 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 341x45 + chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 340.80: "xml:space='default'" + LayoutSVGText {text} at (15,189) size 417x45 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 417x45 + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 417.00: "WS non-indented lines." + LayoutSVGText {text} at (15,224) size 417x45 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 417x45 + chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 417.00: "WS non-indented lines." + LayoutSVGRect {rect} at (40,440) size 586x63 [stroke={[type=SOLID] [color=#000000]}] [x=25.00] [y=265.00] [width=350.00] [height=36.00] + LayoutSVGText {text} at (28,259) size 341x45 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 341x45 + chunk 1 text run 1 at (28.00,295.00) startOffset 0 endOffset 19 width 340.80: "xml:space='default'" + LayoutSVGText {text} at (10,304) size 266x46 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 266x46 + chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 265.80: "$Revision: 1.7 $" + LayoutSVGRect {rect} at (0,0) size 800x600 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] +selection start: position 0 of child 0 {#text} of child 1 {text} of child 13 {g} of child 29 {svg} of document +selection end: position 16 of child 0 {#text} of child 15 {text} of child 29 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/text/textPathBoundsBug-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/text/textPathBoundsBug-expected.txt new file mode 100644 index 0000000..a5f681e --- /dev/null +++ b/third_party/WebKit/LayoutTests/platform/android/svg/text/textPathBoundsBug-expected.txt
@@ -0,0 +1,14 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutSVGRoot {svg} at (100,88) size 100x15 + LayoutSVGPath {path} at (100,99) size 100x2 [stroke={[type=SOLID] [color=#800080]}] [fill={[type=SOLID] [color=#000000]}] [data="M 100 100 L 200 100"] + LayoutSVGText {text} at (100,88) size 28x15 contains 1 chunk(s) + LayoutSVGTextPath {textPath} at (0,0) size 28x15 + LayoutSVGInlineText {#text} at (0,0) size 28x15 + chunk 1 (middle anchor) text run 1 at (103.50,100.00) startOffset 4 endOffset 5 width 7.00: "5" + chunk 1 (middle anchor) text run 2 at (110.50,100.00) startOffset 5 endOffset 6 width 7.00: "6" + chunk 1 (middle anchor) text run 3 at (117.50,100.00) startOffset 6 endOffset 7 width 7.00: "7" + chunk 1 (middle anchor) text run 4 at (124.50,100.00) startOffset 7 endOffset 8 width 7.00: "8" +selection start: position 0 of child 0 {#text} of child 1 {textPath} of child 3 {text} of child 0 {svg} of document +selection end: position 8 of child 0 {#text} of child 1 {textPath} of child 3 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt index 42ccadd..1116461f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt
@@ -9,7 +9,8 @@ chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 33 width 190.00: "Rectangle should be red not green" LayoutSVGText {text} at (40,24) size 338x15 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 338x15 - chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 64 width 338.00: "This tests id selectors: <rect id=\"one\" /> and the selector #one" + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 11 width 57.00: "This tests " + chunk 1 text run 1 at (97.00,36.00) startOffset 0 endOffset 53 width 281.00: "id selectors: <rect id=\"one\" /> and the selector #one" LayoutSVGContainer {g} at (130,70) size 260x60 LayoutSVGEllipse {circle} at (130,70) size 60x60 [fill={[type=SOLID] [color=#008000]}] [cx=160.00] [cy=100.00] [r=30.00] LayoutSVGRect {rect} at (220,80) size 60x40 [fill={[type=SOLID] [color=#FF0000]}] [x=220.00] [y=80.00] [width=60.00] [height=40.00] @@ -20,7 +21,8 @@ chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 51 width 266.00: "Circle should be red not green; rectangle still red" LayoutSVGText {text} at (40,24) size 326x15 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 326x15 - chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 63 width 326.00: "This tests attribute selectors: <circle transform=\"scale(2)\" />" + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 11 width 57.00: "This tests " + chunk 1 text run 1 at (97.00,36.00) startOffset 0 endOffset 52 width 269.00: "attribute selectors: <circle transform=\"scale(2)\" />" LayoutSVGText {text} at (40,46) size 210x15 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 210x15 chunk 1 text run 1 at (40.00,58.00) startOffset 0 endOffset 39 width 210.00: "and the selector [transform=\"scale(2)\"]"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt index 399a170b..d9946378 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-align-08-b-expected.txt
@@ -13,6 +13,7 @@ LayoutSVGTSpan {tspan} at (0,0) size 56x34 LayoutSVGInlineText {#text} at (416,107) size 56x34 chunk 1 text run 1 at (466.00,200.00) startOffset 0 endOffset 3 width 56.00: "a\x{729C}\x{923}" + LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGPath {line} at (50,199) size 383x2 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=200.00] [x2=433.00] [y2=200.00] LayoutSVGPath {line} at (50,229) size 383x2 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=230.00] [x2=433.00] [y2=230.00] LayoutSVGPath {line} at (50,94) size 383x2 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=95.00] [x2=433.00] [y2=95.00]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt index f231989..3ef08013 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt
@@ -36,5 +36,5 @@ LayoutSVGInlineText {#text} at (0,0) size 261x46 chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 261.00: "$Revision: 1.2 $" LayoutSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -selection start: position 3 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document -selection end: position 12 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection start: position 4 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection end: position 13 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt index 0b16236..5c3f9d6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt
@@ -21,7 +21,8 @@ chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 333.00: "xml:space='default'" LayoutSVGText {text} at (15,189) size 404x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 404x45 - chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 404.00: "WS non-indented lines." + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 3 width 78.00: "WS " + chunk 1 text run 1 at (93.00,225.00) startOffset 0 endOffset 19 width 326.00: "non-indented lines." LayoutSVGText {text} at (15,224) size 404x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 404x45 chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 404.00: "WS non-indented lines."
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.png index 97a7d026..43bb461 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.png +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.txt index 97acc83..16b13d1 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-whitespace-handling-expected.txt
@@ -6,9 +6,9 @@ LayoutSVGText {text} at (10,6) size 233x18 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 233x18 chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 36 width 232.38: "Testing xml:space=\"default\" support:" - LayoutSVGText {text} at (10,26) size 159x18 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,0) size 159x18 - chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 20 width 158.22: "NoSpacesBetweenWords" + LayoutSVGText {text} at (10,26) size 171x18 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 171x18 + chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 23 width 170.22: "No Spaces Between Words" LayoutSVGText {text} at (10,46) size 126x18 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 126x18 chunk 1 text run 1 at (10.00,60.00) startOffset 0 endOffset 18 width 125.38: "Tabs become spaces"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-tselect-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-tselect-02-f-expected.txt index 512d7783c..9f10f71 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-tselect-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-tselect-02-f-expected.txt
@@ -36,5 +36,5 @@ LayoutSVGInlineText {#text} at (0,0) size 266x46 chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 265.80: "$Revision: 1.2 $" LayoutSVGRect {rect} at (0,0) size 800x600 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -selection start: position 3 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document -selection end: position 12 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection start: position 4 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection end: position 13 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-ws-01-t-expected.txt index 893a4c1..05a04cfd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-ws-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-ws-01-t-expected.txt
@@ -21,7 +21,8 @@ chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 340.80: "xml:space='default'" LayoutSVGText {text} at (15,189) size 417x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 417x45 - chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 417.00: "WS non-indented lines." + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 3 width 78.00: "WS " + chunk 1 text run 1 at (93.00,225.00) startOffset 0 endOffset 19 width 339.00: "non-indented lines." LayoutSVGText {text} at (15,224) size 417x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 417x45 chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 417.00: "WS non-indented lines."
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/W3C-SVG-1.1/text-align-08-b-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/W3C-SVG-1.1/text-align-08-b-expected.txt index 50bb341..eeaf71e 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/W3C-SVG-1.1/text-align-08-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/W3C-SVG-1.1/text-align-08-b-expected.txt
@@ -13,6 +13,7 @@ LayoutSVGTSpan {tspan} at (0,0) size 66x36 LayoutSVGInlineText {#text} at (480,108) size 65x36 chunk 1 text run 1 at (530.76,200.00) startOffset 0 endOffset 3 width 64.10: "a\x{729C}\x{923}" + LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGPath {line} at (50,199) size 383x2 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=200.00] [x2=433.00] [y2=200.00] LayoutSVGPath {line} at (50,229) size 383x2 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=230.00] [x2=433.00] [y2=230.00] LayoutSVGPath {line} at (50,94) size 383x2 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=95.00] [x2=433.00] [y2=95.00]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt index be77d68..ff12e832 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt
@@ -9,7 +9,8 @@ chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 33 width 184.13: "Rectangle should be red not green" LayoutSVGText {text} at (40,25) size 330x14 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 330x14 - chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 64 width 329.70: "This tests id selectors: <rect id=\"one\" /> and the selector #one" + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 11 width 54.68: "This tests " + chunk 1 text run 1 at (94.68,36.00) startOffset 0 endOffset 53 width 275.02: "id selectors: <rect id=\"one\" /> and the selector #one" LayoutSVGContainer {g} at (130,70) size 260x60 LayoutSVGEllipse {circle} at (130,70) size 60x60 [fill={[type=SOLID] [color=#008000]}] [cx=160.00] [cy=100.00] [r=30.00] LayoutSVGRect {rect} at (220,80) size 60x40 [fill={[type=SOLID] [color=#FF0000]}] [x=220.00] [y=80.00] [width=60.00] [height=40.00] @@ -20,7 +21,8 @@ chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 51 width 258.14: "Circle should be red not green; rectangle still red" LayoutSVGText {text} at (40,25) size 317x14 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 317x14 - chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 63 width 316.96: "This tests attribute selectors: <circle transform=\"scale(2)\" />" + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 11 width 54.68: "This tests " + chunk 1 text run 1 at (94.68,36.00) startOffset 0 endOffset 52 width 262.28: "attribute selectors: <circle transform=\"scale(2)\" />" LayoutSVGText {text} at (40,47) size 205x14 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 205x14 chunk 1 text run 1 at (40.00,58.00) startOffset 0 endOffset 39 width 204.28: "and the selector [transform=\"scale(2)\"]"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-08-b-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-08-b-expected.txt index 8ab9871..cce7c02 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-08-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-08-b-expected.txt
@@ -13,6 +13,7 @@ LayoutSVGTSpan {tspan} at (0,0) size 67x36 LayoutSVGInlineText {#text} at (489,108) size 67x36 chunk 1 text run 1 at (539.34,200.00) startOffset 0 endOffset 3 width 65.25: "a\x{729C}\x{923}" + LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGPath {line} at (50,199) size 383x2 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=200.00] [x2=433.00] [y2=200.00] LayoutSVGPath {line} at (50,229) size 383x2 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=230.00] [x2=433.00] [y2=230.00] LayoutSVGPath {line} at (50,94) size 383x2 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=95.00] [x2=433.00] [y2=95.00]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt index 372991e6..5ad31ce 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt
@@ -36,5 +36,5 @@ LayoutSVGInlineText {#text} at (0,0) size 264x46 chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 263.34: "$Revision: 1.2 $" LayoutSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -selection start: position 3 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document -selection end: position 12 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection start: position 4 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection end: position 13 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt index 2158f283..4b9583c 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt
@@ -21,7 +21,8 @@ chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 338.79: "xml:space='default'" LayoutSVGText {text} at (15,189) size 414x44 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x44 - chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 413.57: "WS non-indented lines." + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 3 width 75.55: "WS " + chunk 1 text run 1 at (90.55,225.00) startOffset 0 endOffset 19 width 338.03: "non-indented lines." LayoutSVGText {text} at (15,224) size 414x44 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x44 chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 413.57: "WS non-indented lines."
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.png index 4863766..a0824de 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.png +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.txt index a86ae17..6a2b853 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-whitespace-handling-expected.txt
@@ -6,9 +6,9 @@ LayoutSVGText {text} at (10,5) size 239x19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 239x19 chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 36 width 238.70: "Testing xml:space=\"default\" support:" - LayoutSVGText {text} at (10,25) size 162x19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,0) size 162x19 - chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 20 width 161.34: "NoSpacesBetweenWords" + LayoutSVGText {text} at (10,25) size 174x19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 174x19 + chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 23 width 173.34: "No Spaces Between Words" LayoutSVGText {text} at (10,45) size 130x19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 130x19 chunk 1 text run 1 at (10.00,60.00) startOffset 0 endOffset 18 width 129.49: "Tabs become spaces"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-tselect-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-tselect-02-f-expected.txt index 8af6a19..810239fc 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-tselect-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-tselect-02-f-expected.txt
@@ -36,5 +36,5 @@ LayoutSVGInlineText {#text} at (0,0) size 264x47 chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 263.31: "$Revision: 1.2 $" LayoutSVGRect {rect} at (0,0) size 800x600 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -selection start: position 3 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document -selection end: position 12 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection start: position 4 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection end: position 13 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-ws-01-t-expected.txt index 7be482c..b68dd6b 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-ws-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-ws-01-t-expected.txt
@@ -21,7 +21,8 @@ chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 338.76: "xml:space='default'" LayoutSVGText {text} at (15,189) size 414x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x45 - chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 413.53: "WS non-indented lines." + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 3 width 75.54: "WS " + chunk 1 text run 1 at (90.54,225.00) startOffset 0 endOffset 19 width 337.99: "non-indented lines." LayoutSVGText {text} at (15,224) size 414x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x45 chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 413.53: "WS non-indented lines."
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/textPathBoundsBug-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/textPathBoundsBug-expected.txt index 6a78d8f..0c503991 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/textPathBoundsBug-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/textPathBoundsBug-expected.txt
@@ -10,5 +10,6 @@ chunk 1 (middle anchor) text run 2 at (110.01,100.00) startOffset 5 endOffset 6 width 6.67: "6" chunk 1 (middle anchor) text run 3 at (116.68,100.00) startOffset 6 endOffset 7 width 6.67: "7" chunk 1 (middle anchor) text run 4 at (123.36,100.00) startOffset 7 endOffset 8 width 6.67: "8" + LayoutSVGInlineText {#text} at (0,0) size 0x0 selection start: position 0 of child 0 {#text} of child 1 {textPath} of child 3 {text} of child 0 {svg} of document selection end: position 8 of child 0 {#text} of child 1 {textPath} of child 3 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt index d4ed8f3f..35f1608 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/styling-css-02-b-expected.txt
@@ -9,7 +9,8 @@ chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 33 width 190.00: "Rectangle should be red not green" LayoutSVGText {text} at (40,24) size 338x15 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 338x15 - chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 64 width 338.00: "This tests id selectors: <rect id=\"one\" /> and the selector #one" + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 11 width 57.00: "This tests " + chunk 1 text run 1 at (97.00,36.00) startOffset 0 endOffset 53 width 281.00: "id selectors: <rect id=\"one\" /> and the selector #one" LayoutSVGContainer {g} at (130,70) size 260x60 LayoutSVGEllipse {circle} at (130,70) size 60x60 [fill={[type=SOLID] [color=#008000]}] [cx=160.00] [cy=100.00] [r=30.00] LayoutSVGRect {rect} at (220,80) size 60x40 [fill={[type=SOLID] [color=#FF0000]}] [x=220.00] [y=80.00] [width=60.00] [height=40.00] @@ -20,7 +21,8 @@ chunk 1 text run 1 at (40.00,14.00) startOffset 0 endOffset 51 width 266.00: "Circle should be red not green; rectangle still red" LayoutSVGText {text} at (40,24) size 326x15 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 326x15 - chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 63 width 326.00: "This tests attribute selectors: <circle transform=\"scale(2)\" />" + chunk 1 text run 1 at (40.00,36.00) startOffset 0 endOffset 11 width 57.00: "This tests " + chunk 1 text run 1 at (97.00,36.00) startOffset 0 endOffset 52 width 269.00: "attribute selectors: <circle transform=\"scale(2)\" />" LayoutSVGText {text} at (40,46) size 210x15 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 210x15 chunk 1 text run 1 at (40.00,58.00) startOffset 0 endOffset 39 width 210.00: "and the selector [transform=\"scale(2)\"]"
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-align-08-b-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-align-08-b-expected.txt index 5812f8f..35989a9 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-align-08-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-align-08-b-expected.txt
@@ -13,6 +13,7 @@ LayoutSVGTSpan {tspan} at (0,0) size 67x33 LayoutSVGInlineText {#text} at (491,107) size 67x33 chunk 1 text run 1 at (541.64,200.00) startOffset 0 endOffset 3 width 65.55: "a\x{729C}\x{923}" + LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGPath {line} at (50,199) size 383x2 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=200.00] [x2=433.00] [y2=200.00] LayoutSVGPath {line} at (50,229) size 383x2 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=230.00] [x2=433.00] [y2=230.00] LayoutSVGPath {line} at (50,94) size 383x2 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=95.00] [x2=433.00] [y2=95.00]
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt index f280ebb..15dc719b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt
@@ -36,5 +36,5 @@ LayoutSVGInlineText {#text} at (0,0) size 264x45 chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 263.34: "$Revision: 1.2 $" LayoutSVGRect {rect} at (0,0) size 480x360 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -selection start: position 3 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document -selection end: position 12 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection start: position 4 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection end: position 13 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt index d8958d08..a01a866 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/text-ws-01-t-expected.txt
@@ -21,7 +21,8 @@ chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 338.79: "xml:space='default'" LayoutSVGText {text} at (15,189) size 414x44 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x44 - chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 413.57: "WS non-indented lines." + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 3 width 75.55: "WS " + chunk 1 text run 1 at (90.55,225.00) startOffset 0 endOffset 19 width 338.03: "non-indented lines." LayoutSVGText {text} at (15,224) size 414x44 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x44 chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 413.57: "WS non-indented lines."
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.png index 82bec7c..b48194e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.png +++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.txt index 5fccabb85..dfa3ffe7 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-whitespace-handling-expected.txt
@@ -6,9 +6,9 @@ LayoutSVGText {text} at (10,5) size 239x19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 239x18 chunk 1 text run 1 at (10.00,20.00) startOffset 0 endOffset 36 width 238.70: "Testing xml:space=\"default\" support:" - LayoutSVGText {text} at (9,25) size 163x19 contains 1 chunk(s) - LayoutSVGInlineText {#text} at (0,0) size 162x18 - chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 20 width 161.34: "NoSpacesBetweenWords" + LayoutSVGText {text} at (9,25) size 175x19 contains 1 chunk(s) + LayoutSVGInlineText {#text} at (0,0) size 174x18 + chunk 1 text run 1 at (10.00,40.00) startOffset 0 endOffset 23 width 173.34: "No Spaces Between Words" LayoutSVGText {text} at (10,45) size 130x19 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 130x18 chunk 1 text run 1 at (10.00,60.00) startOffset 0 endOffset 18 width 129.49: "Tabs become spaces"
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-tselect-02-f-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-tselect-02-f-expected.txt index 5b463e0..bf7f10a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-tselect-02-f-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-tselect-02-f-expected.txt
@@ -36,5 +36,5 @@ LayoutSVGInlineText {#text} at (0,0) size 264x44 chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 263.31: "$Revision: 1.2 $" LayoutSVGRect {rect} at (0,0) size 800x600 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00] -selection start: position 3 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document -selection end: position 12 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection start: position 4 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document +selection end: position 13 of child 0 {#text} of child 3 {text} of child 3 {g} of child 35 {g} of child 1 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-ws-01-t-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-ws-01-t-expected.txt index dc2c03e..a43c8218 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-ws-01-t-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-ws-01-t-expected.txt
@@ -21,7 +21,8 @@ chunk 1 text run 1 at (28.00,175.00) startOffset 0 endOffset 19 width 338.76: "xml:space='default'" LayoutSVGText {text} at (15,189) size 414x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x45 - chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 22 width 413.53: "WS non-indented lines." + chunk 1 text run 1 at (15.00,225.00) startOffset 0 endOffset 3 width 75.54: "WS " + chunk 1 text run 1 at (90.54,225.00) startOffset 0 endOffset 19 width 337.99: "non-indented lines." LayoutSVGText {text} at (15,224) size 414x45 contains 1 chunk(s) LayoutSVGInlineText {#text} at (0,0) size 414x45 chunk 1 text run 1 at (15.00,260.00) startOffset 0 endOffset 22 width 413.53: "WS non-indented lines."
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/textPathBoundsBug-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/textPathBoundsBug-expected.txt index a5f681e..e22ed22a 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/text/textPathBoundsBug-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/textPathBoundsBug-expected.txt
@@ -10,5 +10,6 @@ chunk 1 (middle anchor) text run 2 at (110.50,100.00) startOffset 5 endOffset 6 width 7.00: "6" chunk 1 (middle anchor) text run 3 at (117.50,100.00) startOffset 6 endOffset 7 width 7.00: "7" chunk 1 (middle anchor) text run 4 at (124.50,100.00) startOffset 7 endOffset 8 width 7.00: "8" + LayoutSVGInlineText {#text} at (0,0) size 0x0 selection start: position 0 of child 0 {#text} of child 1 {textPath} of child 3 {text} of child 0 {svg} of document selection end: position 8 of child 0 {#text} of child 1 {textPath} of child 3 {text} of child 0 {svg} of document
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/text-align-08-b-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/text-align-08-b-expected.txt index 57ede2b..af3387e 100644 --- a/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/text-align-08-b-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/text-align-08-b-expected.txt
@@ -13,6 +13,7 @@ LayoutSVGTSpan {tspan} at (0,0) size 69x33 LayoutSVGInlineText {#text} at (505,107) size 69x33 chunk 1 text run 1 at (555.04,200.00) startOffset 0 endOffset 3 width 67.34: "a\x{729C}\x{923}" + LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGPath {line} at (50,199) size 383x2 [stroke={[type=SOLID] [color=#0000FF]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=200.00] [x2=433.00] [y2=200.00] LayoutSVGPath {line} at (50,229) size 383x2 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=230.00] [x2=433.00] [y2=230.00] LayoutSVGPath {line} at (50,94) size 383x2 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=95.00] [x2=433.00] [y2=95.00]
diff --git a/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash-expected.txt b/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash-expected.txt index b73b778..c4a496c9 100644 --- a/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash-expected.txt
@@ -1,5 +1,5 @@ -PASS window.internals.touchEventHandlerCount(document) is 1 -PASS window.internals.touchEventHandlerCount(document) is 0 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 1 +PASS window.internals.touchStartOrMoveEventHandlerCount(document) is 0 PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash.html b/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash.html index 1385ba07..b04d7d02 100644 --- a/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash.html +++ b/third_party/WebKit/LayoutTests/plugins/re-request-touch-events-crash.html
@@ -15,9 +15,9 @@ // Force the plugin to initialize touch_plugin.offsetTop; - shouldBe("window.internals.touchEventHandlerCount(document)", "1") + shouldBe("window.internals.touchStartOrMoveEventHandlerCount(document)", "1") touch_plugin.parentNode.removeChild(touch_plugin); - shouldBe("window.internals.touchEventHandlerCount(document)", "0") + shouldBe("window.internals.touchStartOrMoveEventHandlerCount(document)", "0") } </script>
diff --git a/third_party/WebKit/LayoutTests/svg/custom/invalid-text-content-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/invalid-text-content-expected.txt index 1f177bf7..882d23f3 100644 --- a/third_party/WebKit/LayoutTests/svg/custom/invalid-text-content-expected.txt +++ b/third_party/WebKit/LayoutTests/svg/custom/invalid-text-content-expected.txt
@@ -14,4 +14,5 @@ LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGInlineText {#text} at (0,0) size 0x0 + LayoutSVGInlineText {#text} at (0,0) size 0x0 LayoutSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
diff --git a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt index c562df9..691aa46 100644 --- a/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -3681,7 +3681,6 @@ getter onclose getter onconnect getter onmessage - getter onstatechange getter onterminate getter state method close @@ -3692,7 +3691,6 @@ setter onclose setter onconnect setter onmessage - setter onstatechange setter onterminate interface PresentationConnectionAvailableEvent : Event attribute @@toStringTag
diff --git a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt index b7da2bf6..b5eb1b3 100644 --- a/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt +++ b/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
@@ -4305,7 +4305,6 @@ getter onclose getter onconnect getter onmessage - getter onstatechange getter onterminate getter state method close @@ -4316,7 +4315,6 @@ setter onclose setter onconnect setter onmessage - setter onstatechange setter onterminate interface PresentationConnectionAvailableEvent : Event attribute @@toStringTag
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseTest.cpp index 73b38ba..b272be5 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseTest.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseTest.cpp
@@ -36,6 +36,7 @@ #include "bindings/core/v8/V8BindingForTesting.h" #include "core/dom/DOMException.h" #include "core/dom/ExceptionCode.h" +#include "core/testing/NullExecutionContext.h" #include "testing/gtest/include/gtest/gtest.h" #include <v8.h> @@ -75,6 +76,7 @@ ScriptPromiseTest() : m_scope(v8::Isolate::GetCurrent()) { + m_scope.getScriptState()->setExecutionContext(new NullExecutionContext()); } ~ScriptPromiseTest()
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp index 71b68aba..82017481 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
@@ -7,6 +7,7 @@ #include "bindings/core/v8/Transferable.h" #include "bindings/core/v8/TransferableArrayBuffer.h" #include "bindings/core/v8/TransferableImageBitmap.h" +#include "bindings/core/v8/TransferableMessagePort.h" #include "bindings/core/v8/V8ArrayBuffer.h" #include "bindings/core/v8/V8ArrayBufferView.h" #include "bindings/core/v8/V8Blob.h" @@ -688,7 +689,7 @@ return object->InternalFieldCount(); } -ScriptValueSerializer::ScriptValueSerializer(SerializedScriptValueWriter& writer, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, ScriptState* scriptState) +ScriptValueSerializer::ScriptValueSerializer(SerializedScriptValueWriter& writer, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, ScriptState* scriptState) : m_scriptState(scriptState) , m_writer(writer) , m_tryCatch(tryCatch) @@ -700,12 +701,14 @@ { ASSERT(!tryCatch.HasCaught()); v8::Local<v8::Object> creationContext = m_scriptState->context()->Global(); - if (messagePorts) { - for (size_t i = 0; i < messagePorts->size(); i++) - m_transferredMessagePorts.set(toV8Object(messagePorts->at(i).get(), creationContext, isolate()), i); - } if (!transferables) return; + if (auto* messagePorts = TransferableMessagePort::get(*transferables)) { + for (size_t i = 0; i < messagePorts->getArray().size(); i++) { + v8::Local<v8::Object> v8MessagePort = toV8Object(messagePorts->getArray().at(i).get(), creationContext, isolate()); + m_transferredMessagePorts.set(v8MessagePort, i); + } + } if (auto* arrayBuffers = TransferableArrayBuffer::get(*transferables)) { for (size_t i = 0; i < arrayBuffers->getArray().size(); i++) { v8::Local<v8::Object> v8ArrayBuffer = toV8Object(arrayBuffers->getArray().at(i).get(), creationContext, isolate());
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h index 64b63e1..a24cfe8 100644 --- a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h +++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.h
@@ -208,12 +208,7 @@ JSException }; - enum TransferableType { - TransferableArrayBufferType, - TransferableImageBitmapType - }; - - ScriptValueSerializer(SerializedScriptValueWriter&, MessagePortArray* messagePorts, TransferableArray*, WebBlobInfoArray*, BlobDataHandleMap& blobDataHandles, v8::TryCatch&, ScriptState*); + ScriptValueSerializer(SerializedScriptValueWriter&, TransferableArray*, WebBlobInfoArray*, BlobDataHandleMap& blobDataHandles, v8::TryCatch&, ScriptState*); v8::Isolate* isolate() { return m_scriptState->isolate(); } v8::Local<v8::Context> context() { return m_scriptState->context(); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp index ba81a9c..1d7b043 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
@@ -38,6 +38,7 @@ #include "bindings/core/v8/SerializedScriptValueFactory.h" #include "bindings/core/v8/TransferableArrayBuffer.h" #include "bindings/core/v8/TransferableImageBitmap.h" +#include "bindings/core/v8/TransferableMessagePort.h" #include "bindings/core/v8/V8ArrayBuffer.h" #include "bindings/core/v8/V8ImageBitmap.h" #include "bindings/core/v8/V8MessagePort.h" @@ -196,10 +197,9 @@ return SerializedScriptValueFactory::instance().deserialize(this, isolate, messagePorts, blobInfo); } -bool SerializedScriptValue::extractTransferables(v8::Isolate* isolate, v8::Local<v8::Value> value, int argumentIndex, MessagePortArray& ports, TransferableArray& transferables, ExceptionState& exceptionState) +bool SerializedScriptValue::extractTransferables(v8::Isolate* isolate, v8::Local<v8::Value> value, int argumentIndex, TransferableArray& transferables, ExceptionState& exceptionState) { if (isUndefinedOrNull(value)) { - ports.resize(0); transferables.resize(0); return true; } @@ -229,12 +229,13 @@ // Validation of Objects implementing an interface, per WebIDL spec 4.1.15. if (V8MessagePort::hasInstance(transferrable, isolate)) { MessagePort* port = V8MessagePort::toImpl(v8::Local<v8::Object>::Cast(transferrable)); + TransferableMessagePort* ports = TransferableMessagePort::ensure(transferables); // Check for duplicate MessagePorts. - if (ports.contains(port)) { + if (ports->contains(port)) { exceptionState.throwDOMException(DataCloneError, "Message port at index " + String::number(i) + " is a duplicate of an earlier port."); return false; } - ports.append(port); + ports->append(port); } else if (V8ArrayBuffer::hasInstance(transferrable, isolate)) { DOMArrayBuffer* arrayBuffer = V8ArrayBuffer::toImpl(v8::Local<v8::Object>::Cast(transferrable)); TransferableArrayBuffer* arrayBuffers = TransferableArrayBuffer::ensure(transferables);
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h index b39e2b4..f3e130d 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h
@@ -92,7 +92,7 @@ // Also validates the elements per sections 4.1.13 and 4.1.15 of the WebIDL spec and section 8.3.3 // of the HTML5 spec and generates exceptions as appropriate. // Returns true if the array was filled, or false if the passed value was not of an appropriate type. - static bool extractTransferables(v8::Isolate*, v8::Local<v8::Value>, int, MessagePortArray&, TransferableArray&, ExceptionState&); + static bool extractTransferables(v8::Isolate*, v8::Local<v8::Value>, int, TransferableArray&, ExceptionState&); // Informs the V8 about external memory allocated and owned by this object. Large values should contribute // to GC counters to eventually trigger a GC, otherwise flood of postMessage() can cause OOM.
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.cpp index 74e12cb..9c0378f5 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.cpp
@@ -8,6 +8,7 @@ #include "bindings/core/v8/ScriptValueSerializer.h" #include "bindings/core/v8/TransferableArrayBuffer.h" #include "bindings/core/v8/TransferableImageBitmap.h" +#include "bindings/core/v8/TransferableMessagePort.h" #include "wtf/ByteOrder.h" #include "wtf/text/StringBuffer.h" @@ -15,7 +16,7 @@ SerializedScriptValueFactory* SerializedScriptValueFactory::m_instance = 0; -PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::create(v8::Isolate* isolate, v8::Local<v8::Value> value, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, ExceptionState& exceptionState) +PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::create(v8::Isolate* isolate, v8::Local<v8::Value> value, TransferableArray* transferables, WebBlobInfoArray* blobInfo, ExceptionState& exceptionState) { RefPtr<SerializedScriptValue> serializedValue = create(); SerializedScriptValueWriter writer; @@ -23,7 +24,7 @@ String errorMessage; { v8::TryCatch tryCatch(isolate); - status = doSerialize(value, writer, messagePorts, transferables, blobInfo, serializedValue.get(), tryCatch, errorMessage, isolate); + status = doSerialize(value, writer, transferables, blobInfo, serializedValue.get(), tryCatch, errorMessage, isolate); if (status == ScriptValueSerializer::JSException) { // If there was a JS exception thrown, re-throw it. exceptionState.rethrowV8Exception(tryCatch.Exception()); @@ -46,21 +47,21 @@ return serializedValue.release(); } -PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::create(v8::Isolate* isolate, v8::Local<v8::Value> value, MessagePortArray* messagePorts, TransferableArray* transferables, ExceptionState& exceptionState) +PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::create(v8::Isolate* isolate, v8::Local<v8::Value> value, TransferableArray* transferables, ExceptionState& exceptionState) { - return create(isolate, value, messagePorts, transferables, 0, exceptionState); + return create(isolate, value, transferables, 0, exceptionState); } PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::createAndSwallowExceptions(v8::Isolate* isolate, v8::Local<v8::Value> value) { TrackExceptionState exceptionState; - return create(isolate, value, nullptr, nullptr, exceptionState); + return create(isolate, value, nullptr, exceptionState); } PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::create(v8::Isolate* isolate, const ScriptValue& value, WebBlobInfoArray* blobInfo, ExceptionState& exceptionState) { ASSERT(isolate->InContext()); - return create(isolate, value.v8Value(), nullptr, nullptr, blobInfo, exceptionState); + return create(isolate, value.v8Value(), nullptr, blobInfo, exceptionState); } PassRefPtr<SerializedScriptValue> SerializedScriptValueFactory::createFromWire(const String& data) @@ -117,14 +118,14 @@ } } -ScriptValueSerializer::Status SerializedScriptValueFactory::doSerialize(v8::Local<v8::Value> value, SerializedScriptValueWriter& writer, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, SerializedScriptValue* serializedValue, v8::TryCatch& tryCatch, String& errorMessage, v8::Isolate* isolate) +ScriptValueSerializer::Status SerializedScriptValueFactory::doSerialize(v8::Local<v8::Value> value, SerializedScriptValueWriter& writer, TransferableArray* transferables, WebBlobInfoArray* blobInfo, SerializedScriptValue* serializedValue, v8::TryCatch& tryCatch, String& errorMessage, v8::Isolate* isolate) { - return doSerialize(value, writer, messagePorts, transferables, blobInfo, serializedValue->blobDataHandles(), tryCatch, errorMessage, isolate); + return doSerialize(value, writer, transferables, blobInfo, serializedValue->blobDataHandles(), tryCatch, errorMessage, isolate); } -ScriptValueSerializer::Status SerializedScriptValueFactory::doSerialize(v8::Local<v8::Value> value, SerializedScriptValueWriter& writer, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, String& errorMessage, v8::Isolate* isolate) +ScriptValueSerializer::Status SerializedScriptValueFactory::doSerialize(v8::Local<v8::Value> value, SerializedScriptValueWriter& writer, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, String& errorMessage, v8::Isolate* isolate) { - ScriptValueSerializer serializer(writer, messagePorts, transferables, blobInfo, blobDataHandles, tryCatch, ScriptState::current(isolate)); + ScriptValueSerializer serializer(writer, transferables, blobInfo, blobDataHandles, tryCatch, ScriptState::current(isolate)); ScriptValueSerializer::Status status = serializer.serialize(value); errorMessage = serializer.errorMessage(); return status;
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.h b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.h index 391a8b84..dfc5f7c 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.h +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueFactory.h
@@ -24,8 +24,8 @@ // be thrown using v8::ThrowException(), and sets |didThrow|. In this case // the caller must not invoke any V8 operations until control returns to // V8. When serialization is successful, |didThrow| is false. - virtual PassRefPtr<SerializedScriptValue> create(v8::Isolate*, v8::Local<v8::Value>, MessagePortArray*, TransferableArray*, WebBlobInfoArray*, ExceptionState&); - PassRefPtr<SerializedScriptValue> create(v8::Isolate*, v8::Local<v8::Value>, MessagePortArray*, TransferableArray*, ExceptionState&); + virtual PassRefPtr<SerializedScriptValue> create(v8::Isolate*, v8::Local<v8::Value>, TransferableArray*, WebBlobInfoArray*, ExceptionState&); + PassRefPtr<SerializedScriptValue> create(v8::Isolate*, v8::Local<v8::Value>, TransferableArray*, ExceptionState&); PassRefPtr<SerializedScriptValue> createFromWire(const String&); PassRefPtr<SerializedScriptValue> createFromWireBytes(const char* data, size_t length); PassRefPtr<SerializedScriptValue> create(const String&); @@ -56,8 +56,8 @@ } protected: - ScriptValueSerializer::Status doSerialize(v8::Local<v8::Value>, SerializedScriptValueWriter&, MessagePortArray*, TransferableArray*, WebBlobInfoArray*, SerializedScriptValue*, v8::TryCatch&, String& errorMessage, v8::Isolate*); - virtual ScriptValueSerializer::Status doSerialize(v8::Local<v8::Value>, SerializedScriptValueWriter&, MessagePortArray*, TransferableArray*, WebBlobInfoArray*, BlobDataHandleMap&, v8::TryCatch&, String& errorMessage, v8::Isolate*); + ScriptValueSerializer::Status doSerialize(v8::Local<v8::Value>, SerializedScriptValueWriter&, TransferableArray*, WebBlobInfoArray*, SerializedScriptValue*, v8::TryCatch&, String& errorMessage, v8::Isolate*); + virtual ScriptValueSerializer::Status doSerialize(v8::Local<v8::Value>, SerializedScriptValueWriter&, TransferableArray*, WebBlobInfoArray*, BlobDataHandleMap&, v8::TryCatch&, String& errorMessage, v8::Isolate*); void transferData(SerializedScriptValue*, SerializedScriptValueWriter&, TransferableArray*, ExceptionState&, v8::Isolate*); virtual v8::Local<v8::Value> deserialize(String& data, BlobDataHandleMap& blobDataHandles, ArrayBufferContentsArray*, ImageBitmapContentsArray*, v8::Isolate*, MessagePortArray* messagePorts, const WebBlobInfoArray*);
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueTest.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueTest.cpp index 241d89ab..2df2c62 100644 --- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueTest.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValueTest.cpp
@@ -40,7 +40,7 @@ v8::Local<v8::Value> v8OriginalFile = toV8(originalFile, creationContext(), isolate()); RefPtr<SerializedScriptValue> serializedScriptValue = - SerializedScriptValueFactory::instance().create(isolate(), v8OriginalFile, nullptr, nullptr, ASSERT_NO_EXCEPTION); + SerializedScriptValueFactory::instance().create(isolate(), v8OriginalFile, nullptr, ASSERT_NO_EXCEPTION); v8::Local<v8::Value> v8File = serializedScriptValue->deserialize(isolate()); ASSERT_TRUE(V8File::hasInstance(v8File, isolate())); @@ -60,7 +60,7 @@ v8::Local<v8::Value> v8OriginalFile = toV8(originalFile, creationContext(), isolate()); RefPtr<SerializedScriptValue> serializedScriptValue = - SerializedScriptValueFactory::instance().create(isolate(), v8OriginalFile, nullptr, nullptr, ASSERT_NO_EXCEPTION); + SerializedScriptValueFactory::instance().create(isolate(), v8OriginalFile, nullptr, ASSERT_NO_EXCEPTION); v8::Local<v8::Value> v8File = serializedScriptValue->deserialize(isolate()); ASSERT_TRUE(V8File::hasInstance(v8File, isolate()));
diff --git a/third_party/WebKit/Source/bindings/core/v8/Transferable.h b/third_party/WebKit/Source/bindings/core/v8/Transferable.h index 2db8de3..ea111b23 100644 --- a/third_party/WebKit/Source/bindings/core/v8/Transferable.h +++ b/third_party/WebKit/Source/bindings/core/v8/Transferable.h
@@ -13,6 +13,12 @@ public: virtual ~Transferable() { } DEFINE_INLINE_VIRTUAL_TRACE() { } + + enum TransferableType { + TransferableArrayBufferType, + TransferableImageBitmapType, + TransferableMessagePortType + }; }; } // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/TransferableArrayBuffer.h b/third_party/WebKit/Source/bindings/core/v8/TransferableArrayBuffer.h index 331e563..b3755a4 100644 --- a/third_party/WebKit/Source/bindings/core/v8/TransferableArrayBuffer.h +++ b/third_party/WebKit/Source/bindings/core/v8/TransferableArrayBuffer.h
@@ -5,7 +5,6 @@ #ifndef TransferableArrayBuffer_h #define TransferableArrayBuffer_h -#include "bindings/core/v8/SerializedScriptValue.h" #include "bindings/core/v8/Transferable.h" #include "core/CoreExport.h" #include "core/dom/DOMArrayBufferBase.h" @@ -25,17 +24,17 @@ } static TransferableArrayBuffer* ensure(TransferableArray& transferables) { - if (transferables.size() <= ScriptValueSerializer::TransferableArrayBufferType) { - transferables.resize(ScriptValueSerializer::TransferableArrayBufferType + 1); - transferables[ScriptValueSerializer::TransferableArrayBufferType] = new TransferableArrayBuffer(); + if (transferables.size() <= TransferableArrayBufferType) { + transferables.resize(TransferableArrayBufferType + 1); + transferables[TransferableArrayBufferType] = new TransferableArrayBuffer(); } - return static_cast<TransferableArrayBuffer*>(transferables[ScriptValueSerializer::TransferableArrayBufferType].get()); + return static_cast<TransferableArrayBuffer*>(transferables[TransferableArrayBufferType].get()); } static TransferableArrayBuffer* get(TransferableArray& transferables) { - if (transferables.size() <= ScriptValueSerializer::TransferableArrayBufferType) + if (transferables.size() <= TransferableArrayBufferType) return nullptr; - return static_cast<TransferableArrayBuffer*>(transferables[ScriptValueSerializer::TransferableArrayBufferType].get()); + return static_cast<TransferableArrayBuffer*>(transferables[TransferableArrayBufferType].get()); } HeapVector<Member<DOMArrayBufferBase>, 1>& getArray() {
diff --git a/third_party/WebKit/Source/bindings/core/v8/TransferableImageBitmap.h b/third_party/WebKit/Source/bindings/core/v8/TransferableImageBitmap.h index 21f7001..5722232 100644 --- a/third_party/WebKit/Source/bindings/core/v8/TransferableImageBitmap.h +++ b/third_party/WebKit/Source/bindings/core/v8/TransferableImageBitmap.h
@@ -5,7 +5,6 @@ #ifndef TransferableImageBitmap_h #define TransferableImageBitmap_h -#include "bindings/core/v8/SerializedScriptValue.h" #include "bindings/core/v8/Transferable.h" #include "core/CoreExport.h" #include "core/frame/ImageBitmap.h" @@ -25,17 +24,17 @@ } static TransferableImageBitmap* ensure(TransferableArray& transferables) { - if (transferables.size() <= ScriptValueSerializer::TransferableImageBitmapType) { - transferables.resize(ScriptValueSerializer::TransferableImageBitmapType + 1); - transferables[ScriptValueSerializer::TransferableImageBitmapType] = new TransferableImageBitmap(); + if (transferables.size() <= TransferableImageBitmapType) { + transferables.resize(TransferableImageBitmapType + 1); + transferables[TransferableImageBitmapType] = new TransferableImageBitmap(); } - return static_cast<TransferableImageBitmap*>(transferables[ScriptValueSerializer::TransferableImageBitmapType].get()); + return static_cast<TransferableImageBitmap*>(transferables[TransferableImageBitmapType].get()); } static TransferableImageBitmap* get(TransferableArray& transferables) { - if (transferables.size() <= ScriptValueSerializer::TransferableImageBitmapType) + if (transferables.size() <= TransferableImageBitmapType) return nullptr; - return static_cast<TransferableImageBitmap*>(transferables[ScriptValueSerializer::TransferableImageBitmapType].get()); + return static_cast<TransferableImageBitmap*>(transferables[TransferableImageBitmapType].get()); } HeapVector<Member<ImageBitmap>, 1>& getArray() {
diff --git a/third_party/WebKit/Source/bindings/core/v8/TransferableMessagePort.h b/third_party/WebKit/Source/bindings/core/v8/TransferableMessagePort.h new file mode 100644 index 0000000..2970f16 --- /dev/null +++ b/third_party/WebKit/Source/bindings/core/v8/TransferableMessagePort.h
@@ -0,0 +1,54 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TransferableMessagePort_h +#define TransferableMessagePort_h + +#include "bindings/core/v8/Transferable.h" +#include "core/CoreExport.h" +#include "core/dom/MessagePort.h" + +namespace blink { + +class CORE_EXPORT TransferableMessagePort : public Transferable { +public: + ~TransferableMessagePort() override { } + void append(MessagePort* messagePort) + { + m_messagePortArray.append(messagePort); + } + bool contains(MessagePort* messagePort) + { + return m_messagePortArray.contains(messagePort); + } + static TransferableMessagePort* ensure(TransferableArray& transferables) + { + if (transferables.size() <= TransferableMessagePortType) { + transferables.resize(TransferableMessagePortType + 1); + transferables[TransferableMessagePortType] = new TransferableMessagePort(); + } + return static_cast<TransferableMessagePort*>(transferables[TransferableMessagePortType].get()); + } + static TransferableMessagePort* get(const TransferableArray& transferables) + { + if (transferables.size() <= TransferableMessagePortType) + return nullptr; + return static_cast<TransferableMessagePort*>(transferables[TransferableMessagePortType].get()); + } + HeapVector<Member<MessagePort>, 1>& getArray() + { + return m_messagePortArray; + } + DEFINE_INLINE_TRACE() + { + visitor->trace(m_messagePortArray); + Transferable::trace(visitor); + } +private: + HeapVector<Member<MessagePort>, 1> m_messagePortArray; +}; + +} // namespace blink + +#endif // TransferableMessagePort_h
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp index 2aae5b22..e89a717 100644 --- a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp
@@ -111,11 +111,11 @@ return callStack.release(); } -static String extractResourceName(v8::Local<v8::Message> message, const Document* document) +static String extractResourceName(v8::Local<v8::Message> message, const ExecutionContext* context) { v8::Local<v8::Value> resourceName = message->GetScriptOrigin().ResourceName(); - bool shouldUseDocumentURL = document && (resourceName.IsEmpty() || !resourceName->IsString()); - return shouldUseDocumentURL ? document->url() : toCoreString(resourceName.As<v8::String>()); + bool shouldUseDocumentURL = context->isDocument() && (resourceName.IsEmpty() || !resourceName->IsString()); + return shouldUseDocumentURL ? context->url() : toCoreString(resourceName.As<v8::String>()); } static String extractMessageForConsole(v8::Isolate* isolate, v8::Local<v8::Value> data) @@ -147,10 +147,10 @@ { ASSERT(isMainThread()); v8::Isolate* isolate = v8::Isolate::GetCurrent(); - // If called during context initialization, there will be no entered window. - // TODO(haraken): Add a helper method to get an entered window that may be null. - LocalDOMWindow* enteredWindow = toLocalDOMWindow(toDOMWindow(isolate->GetEnteredContext())); - if (!enteredWindow || !enteredWindow->isCurrentlyDisplayedInFrame()) + + // If called during context initialization, there will be no entered context. + ScriptState* scriptState = ScriptState::current(isolate); + if (!scriptState->contextIsValid()) return; int scriptId = 0; @@ -162,9 +162,8 @@ else if (message->IsSharedCrossOrigin()) accessControlStatus = SharableCrossOrigin; - ScriptState* scriptState = ScriptState::current(isolate); - - String resourceName = extractResourceName(message, enteredWindow->document()); + ExecutionContext* context = scriptState->getExecutionContext(); + String resourceName = extractResourceName(message, context); ErrorEvent* event = createErrorEventFromMesssage(scriptState, message, resourceName); String messageForConsole = extractMessageForConsole(isolate, data); @@ -174,9 +173,11 @@ // This method might be called while we're creating a new context. In this case, we // avoid storing the exception object, as we can't create a wrapper during context creation. // FIXME: Can we even get here during initialization now that we bail out when GetEntered returns an empty handle? - LocalFrame* frame = enteredWindow->document()->frame(); - if (frame && frame->script().existingWindowProxy(scriptState->world())) { - V8ErrorHandler::storeExceptionOnErrorEventWrapper(scriptState, event, data, scriptState->context()->Global()); + if (context->isDocument()) { + LocalFrame* frame = toDocument(context)->frame(); + if (frame && frame->script().existingWindowProxy(scriptState->world())) { + V8ErrorHandler::storeExceptionOnErrorEventWrapper(scriptState, event, data, scriptState->context()->Global()); + } } if (scriptState->world().isPrivateScriptIsolatedWorld()) { @@ -187,9 +188,9 @@ // other isolated worlds (which means that the error events won't fire any event listeners // in user's scripts). EventDispatchForbiddenScope::AllowUserAgentEvents allowUserAgentEvents; - enteredWindow->document()->reportException(event, scriptId, callStack, accessControlStatus); + context->reportException(event, scriptId, callStack, accessControlStatus); } else { - enteredWindow->document()->reportException(event, scriptId, callStack, accessControlStatus); + context->reportException(event, scriptId, callStack, accessControlStatus); } } @@ -270,13 +271,19 @@ v8::Local<v8::Promise> promise = data.GetPromise(); v8::Isolate* isolate = promise->GetIsolate(); - // There is no entered window during microtask callbacks from V8, - // thus we call toDOMWindow() instead of enteredDOMWindow(). + + // TODO(ikilpatrick): Remove this check, extensions tests that use + // extensions::ModuleSystemTest incorrectly don't have a valid script state. LocalDOMWindow* window = currentDOMWindow(isolate); if (!window || !window->isCurrentlyDisplayedInFrame()) return; - promiseRejectHandler(data, rejectedPromisesOnMainThread(), window->document() ? window->document()->url() : String()); + // Bail out if called during context initialization. + ScriptState* scriptState = ScriptState::current(isolate); + if (!scriptState->contextIsValid()) + return; + + promiseRejectHandler(data, rejectedPromisesOnMainThread(), scriptState->getExecutionContext()->url()); } static void promiseRejectHandlerInWorker(v8::PromiseRejectMessage data) @@ -419,29 +426,32 @@ { v8::Isolate* isolate = v8::Isolate::GetCurrent(); V8PerIsolateData* perIsolateData = V8PerIsolateData::from(isolate); + + // During the frame teardown, there may not be a valid context. + ScriptState* scriptState = ScriptState::current(isolate); + if (!scriptState->contextIsValid()) + return; + // Exceptions that occur in error handler should be ignored since in that case // WorkerGlobalScope::reportException will send the exception to the worker object. if (perIsolateData->isReportingException()) return; + perIsolateData->setReportingException(true); - ScriptState* scriptState = ScriptState::current(isolate); - // During the frame teardown, there may not be a valid context. - if (ExecutionContext* context = scriptState->getExecutionContext()) { - TOSTRING_VOID(V8StringResource<>, resourceName, message->GetScriptOrigin().ResourceName()); - ErrorEvent* event = createErrorEventFromMesssage(scriptState, message, resourceName); + TOSTRING_VOID(V8StringResource<>, resourceName, message->GetScriptOrigin().ResourceName()); + ErrorEvent* event = createErrorEventFromMesssage(scriptState, message, resourceName); - int scriptId = 0; - RefPtr<ScriptCallStack> callStack = extractCallStack(isolate, message, &scriptId); + int scriptId = 0; + RefPtr<ScriptCallStack> callStack = extractCallStack(isolate, message, &scriptId); - AccessControlStatus corsStatus = message->IsSharedCrossOrigin() ? SharableCrossOrigin : NotSharableCrossOrigin; + AccessControlStatus corsStatus = message->IsSharedCrossOrigin() ? SharableCrossOrigin : NotSharableCrossOrigin; - // If execution termination has been triggered as part of constructing - // the error event from the v8::Message, quietly leave. - if (!isolate->IsExecutionTerminating()) { - V8ErrorHandler::storeExceptionOnErrorEventWrapper(scriptState, event, data, scriptState->context()->Global()); - context->reportException(event, scriptId, callStack, corsStatus); - } + // If execution termination has been triggered as part of constructing + // the error event from the v8::Message, quietly leave. + if (!isolate->IsExecutionTerminating()) { + V8ErrorHandler::storeExceptionOnErrorEventWrapper(scriptState, event, data, scriptState->context()->Global()); + scriptState->getExecutionContext()->reportException(event, scriptId, callStack, corsStatus); } perIsolateData->setReportingException(false);
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp index 85ea5eb..c75d51b 100644 --- a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp +++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
@@ -37,6 +37,7 @@ #include "bindings/core/v8/ScriptSourceCode.h" #include "bindings/core/v8/SerializedScriptValue.h" #include "bindings/core/v8/SerializedScriptValueFactory.h" +#include "bindings/core/v8/TransferableMessagePort.h" #include "bindings/core/v8/V8Binding.h" #include "bindings/core/v8/V8EventListener.h" #include "bindings/core/v8/V8EventListenerList.h" @@ -192,7 +193,6 @@ // postMessage(message, targetOrigin, {sequence of transferrables}) // Legacy non-standard implementations in webkit allowed: // postMessage(message, {sequence of transferrables}, targetOrigin); - MessagePortArray* portArray = new MessagePortArray; TransferableArray* transferables = new TransferableArray; int targetOriginArgIndex = 1; if (info.Length() > 2) { @@ -202,17 +202,22 @@ targetOriginArgIndex = 2; transferablesArgIndex = 1; } - if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *portArray, *transferables, exceptionState)) { + if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *transferables, exceptionState)) { exceptionState.throwIfNeeded(); return; } } TOSTRING_VOID(V8StringResource<TreatNullAndUndefinedAsNullString>, targetOrigin, info[targetOriginArgIndex]); - RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], portArray, transferables, exceptionState); + RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], transferables, exceptionState); if (exceptionState.throwIfNeeded()) return; + MessagePortArray* portArray; + if (auto* messagePorts = TransferableMessagePort::get(*transferables)) + portArray = &(messagePorts->getArray()); + else + portArray = new MessagePortArray; window->postMessage(message.release(), portArray, targetOrigin, source, exceptionState); exceptionState.throwIfNeeded(); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/v8.gypi b/third_party/WebKit/Source/bindings/core/v8/v8.gypi index 8a38518..8afb8bc 100644 --- a/third_party/WebKit/Source/bindings/core/v8/v8.gypi +++ b/third_party/WebKit/Source/bindings/core/v8/v8.gypi
@@ -105,6 +105,7 @@ 'Transferable.h', 'TransferableArrayBuffer.h', 'TransferableImageBitmap.h', + 'TransferableMessagePort.h', 'ToV8.cpp', 'ToV8.h', 'V8AbstractEventListener.cpp',
diff --git a/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp b/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp index 5a54a8e..b34914c 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp +++ b/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
@@ -73,8 +73,8 @@ }; -ScriptValueSerializerForModules::ScriptValueSerializerForModules(SerializedScriptValueWriter& writer, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, ScriptState* scriptState) - : ScriptValueSerializer(writer, messagePorts, transferables, blobInfo, blobDataHandles, tryCatch, scriptState) +ScriptValueSerializerForModules::ScriptValueSerializerForModules(SerializedScriptValueWriter& writer, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, ScriptState* scriptState) + : ScriptValueSerializer(writer, transferables, blobInfo, blobDataHandles, tryCatch, scriptState) { }
diff --git a/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.h b/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.h index 23828f5..81719052 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.h +++ b/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.h
@@ -70,7 +70,7 @@ STACK_ALLOCATED(); WTF_MAKE_NONCOPYABLE(ScriptValueSerializerForModules); public: - ScriptValueSerializerForModules(SerializedScriptValueWriter&, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray*, BlobDataHandleMap& blobDataHandles, v8::TryCatch&, ScriptState*); + ScriptValueSerializerForModules(SerializedScriptValueWriter&, TransferableArray* transferables, WebBlobInfoArray*, BlobDataHandleMap& blobDataHandles, v8::TryCatch&, ScriptState*); private: ScriptValueSerializer::StateBase* doSerializeValue(v8::Local<v8::Value>, ScriptValueSerializer::StateBase* next) override;
diff --git a/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.cpp b/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.cpp index a127ba54..50941eb 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.cpp +++ b/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.cpp
@@ -11,7 +11,7 @@ namespace blink { -PassRefPtr<SerializedScriptValue> SerializedScriptValueForModulesFactory::create(v8::Isolate* isolate, v8::Local<v8::Value> value, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, ExceptionState& exceptionState) +PassRefPtr<SerializedScriptValue> SerializedScriptValueForModulesFactory::create(v8::Isolate* isolate, v8::Local<v8::Value> value, TransferableArray* transferables, WebBlobInfoArray* blobInfo, ExceptionState& exceptionState) { RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValueFactory::create(); SerializedScriptValueWriterForModules writer; @@ -19,7 +19,7 @@ String errorMessage; { v8::TryCatch tryCatch(isolate); - status = SerializedScriptValueFactory::doSerialize(value, writer, messagePorts, transferables, blobInfo, serializedValue.get(), tryCatch, errorMessage, isolate); + status = SerializedScriptValueFactory::doSerialize(value, writer, transferables, blobInfo, serializedValue.get(), tryCatch, errorMessage, isolate); if (status == ScriptValueSerializer::JSException) { // If there was a JS exception thrown, re-throw it. exceptionState.rethrowV8Exception(tryCatch.Exception()); @@ -50,9 +50,9 @@ return createFromWire(wireData); } -ScriptValueSerializer::Status SerializedScriptValueForModulesFactory::doSerialize(v8::Local<v8::Value> value, SerializedScriptValueWriter& writer, MessagePortArray* messagePorts, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, String& errorMessage, v8::Isolate* isolate) +ScriptValueSerializer::Status SerializedScriptValueForModulesFactory::doSerialize(v8::Local<v8::Value> value, SerializedScriptValueWriter& writer, TransferableArray* transferables, WebBlobInfoArray* blobInfo, BlobDataHandleMap& blobDataHandles, v8::TryCatch& tryCatch, String& errorMessage, v8::Isolate* isolate) { - ScriptValueSerializerForModules serializer(writer, messagePorts, transferables, blobInfo, blobDataHandles, tryCatch, ScriptState::current(isolate)); + ScriptValueSerializerForModules serializer(writer, transferables, blobInfo, blobDataHandles, tryCatch, ScriptState::current(isolate)); ScriptValueSerializer::Status status = serializer.serialize(value); errorMessage = serializer.errorMessage(); return status;
diff --git a/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.h b/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.h index 25b9621..a3754e4 100644 --- a/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.h +++ b/third_party/WebKit/Source/bindings/modules/v8/SerializedScriptValueForModulesFactory.h
@@ -16,11 +16,11 @@ public: SerializedScriptValueForModulesFactory() : SerializedScriptValueFactory() { } - PassRefPtr<SerializedScriptValue> create(v8::Isolate*, v8::Local<v8::Value>, MessagePortArray*, TransferableArray*, WebBlobInfoArray*, ExceptionState&) override; + PassRefPtr<SerializedScriptValue> create(v8::Isolate*, v8::Local<v8::Value>, TransferableArray*, WebBlobInfoArray*, ExceptionState&) override; PassRefPtr<SerializedScriptValue> create(v8::Isolate*, const String&) override; protected: - ScriptValueSerializer::Status doSerialize(v8::Local<v8::Value>, SerializedScriptValueWriter&, MessagePortArray*, TransferableArray*, WebBlobInfoArray*, BlobDataHandleMap&, v8::TryCatch&, String& errorMessage, v8::Isolate*) override; + ScriptValueSerializer::Status doSerialize(v8::Local<v8::Value>, SerializedScriptValueWriter&, TransferableArray*, WebBlobInfoArray*, BlobDataHandleMap&, v8::TryCatch&, String& errorMessage, v8::Isolate*) override; v8::Local<v8::Value> deserialize(String& data, BlobDataHandleMap& blobDataHandles, ArrayBufferContentsArray*, ImageBitmapContentsArray*, v8::Isolate*, MessagePortArray* messagePorts, const WebBlobInfoArray*) override; };
diff --git a/third_party/WebKit/Source/bindings/scripts/idl_definitions.py b/third_party/WebKit/Source/bindings/scripts/idl_definitions.py index 16a82909..d42069e3 100644 --- a/third_party/WebKit/Source/bindings/scripts/idl_definitions.py +++ b/third_party/WebKit/Source/bindings/scripts/idl_definitions.py
@@ -64,7 +64,7 @@ import abc -from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlNullableType +from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType, IdlFrozenArrayType, IdlNullableType SPECIAL_KEYWORD_LIST = ['GETTER', 'SETTER', 'DELETER'] @@ -1019,7 +1019,7 @@ return IdlType(node.GetName(), is_unrestricted=is_unrestricted) elif node_class == 'Any': return IdlType('any') - elif node_class == 'Sequence': + elif node_class in ['Sequence', 'FrozenArray']: return sequence_node_to_type(node) elif node_class == 'UnionType': return union_type_node_to_idl_union_type(node) @@ -1030,14 +1030,20 @@ def sequence_node_to_type(node): children = node.GetChildren() + class_name = node.GetClass() if len(children) != 1: - raise ValueError('Sequence node expects exactly 1 child, got %s' % len(children)) + raise ValueError('%s node expects exactly 1 child, got %s' % (class_name, len(children))) sequence_child = children[0] sequence_child_class = sequence_child.GetClass() if sequence_child_class != 'Type': raise ValueError('Unrecognized node class: %s' % sequence_child_class) element_type = type_node_to_type(sequence_child) - sequence_type = IdlSequenceType(element_type) + if class_name == 'Sequence': + sequence_type = IdlSequenceType(element_type) + elif class_name == 'FrozenArray': + sequence_type = IdlFrozenArrayType(element_type) + else: + raise ValueError('Unexpected node: %s' % class_name) if node.GetProperty('NULLABLE'): return IdlNullableType(sequence_type) return sequence_type
diff --git a/third_party/WebKit/Source/bindings/scripts/idl_types.py b/third_party/WebKit/Source/bindings/scripts/idl_types.py index 5d776a7..f87d44c2 100644 --- a/third_party/WebKit/Source/bindings/scripts/idl_types.py +++ b/third_party/WebKit/Source/bindings/scripts/idl_types.py
@@ -10,6 +10,7 @@ IdlArrayOrSequenceType IdlArrayType IdlSequenceType + IdlFrozenArrayType IdlNullableType IdlTypes are picklable because we store them in interfaces_info. @@ -334,11 +335,12 @@ ################################################################################ -# IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType +# IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType, IdlFrozenArrayType ################################################################################ +# TODO(bashi): Rename this like "IdlArrayTypeBase" or something. class IdlArrayOrSequenceType(IdlTypeBase): - """Base class for IdlArrayType and IdlSequenceType.""" + """Base class for array-like types.""" def __init__(self, element_type): super(IdlArrayOrSequenceType, self).__init__() @@ -398,6 +400,19 @@ return self.element_type.name + 'Sequence' +class IdlFrozenArrayType(IdlArrayOrSequenceType): + def __init__(self, element_type): + super(IdlFrozenArrayType, self).__init__(element_type) + + def __str__(self): + return 'FrozenArray<%s>' % self.element_type + + @property + def name(self): + return self.element_type.name + 'Array' + + + ################################################################################ # IdlNullableType ################################################################################
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_methods.py b/third_party/WebKit/Source/bindings/scripts/v8_methods.py index 626c266..ee3a078 100644 --- a/third_party/WebKit/Source/bindings/scripts/v8_methods.py +++ b/third_party/WebKit/Source/bindings/scripts/v8_methods.py
@@ -113,6 +113,7 @@ includes.add('core/dom/DOMArrayBuffer.h') includes.add('core/dom/MessagePort.h') includes.add('core/frame/ImageBitmap.h') + includes.add('bindings/core/v8/TransferableMessagePort.h') if 'LenientThis' in extended_attributes: raise Exception('[LenientThis] is not supported for operations.')
diff --git a/third_party/WebKit/Source/bindings/scripts/v8_types.py b/third_party/WebKit/Source/bindings/scripts/v8_types.py index a7b97ce..d1342e4 100644 --- a/third_party/WebKit/Source/bindings/scripts/v8_types.py +++ b/third_party/WebKit/Source/bindings/scripts/v8_types.py
@@ -493,7 +493,7 @@ 'FlexibleArrayBufferView': 'toFlexibleArrayBufferView({isolate}, {v8_value}, {variable_name}, allocateFlexibleArrayBufferViewStorage({v8_value}))', 'NodeFilter': 'toNodeFilter({v8_value}, info.Holder(), ScriptState::current({isolate}))', 'Promise': 'ScriptPromise::cast(ScriptState::current({isolate}), {v8_value})', - 'SerializedScriptValue': 'SerializedScriptValueFactory::instance().create({isolate}, {v8_value}, nullptr, nullptr, nullptr, exceptionState)', + 'SerializedScriptValue': 'SerializedScriptValueFactory::instance().create({isolate}, {v8_value}, nullptr, exceptionState)', 'ScriptValue': 'ScriptValue(ScriptState::current({isolate}), {v8_value})', 'Window': 'toDOMWindow({isolate}, {v8_value})', 'XPathNSResolver': 'toXPathNSResolver(ScriptState::current({isolate}), {v8_value})', @@ -865,6 +865,7 @@ 'ScriptValue': '{cpp_value}.v8Value()', 'SerializedScriptValue': '{cpp_value} ? {cpp_value}->deserialize() : v8::Local<v8::Value>(v8::Null({isolate}))', # General + # TODO(bashi): Freeze converted array when the type is FrozenArray. 'array': 'toV8({cpp_value}, {creation_context}, {isolate})', 'DOMWrapper': 'toV8({cpp_value}, {creation_context}, {isolate})', # Passing nullable dictionaries isn't a pattern currently used
diff --git a/third_party/WebKit/Source/bindings/templates/methods.cpp b/third_party/WebKit/Source/bindings/templates/methods.cpp index 71753c3..5774ea8 100644 --- a/third_party/WebKit/Source/bindings/templates/methods.cpp +++ b/third_party/WebKit/Source/bindings/templates/methods.cpp
@@ -464,20 +464,24 @@ exceptionState.throwIfNeeded(); return; } - MessagePortArray* ports = new MessagePortArray; TransferableArray* transferables = new TransferableArray; if (info.Length() > 1) { const int transferablesArgIndex = 1; - if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *ports, *transferables, exceptionState)) { + if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *transferables, exceptionState)) { exceptionState.throwIfNeeded(); return; } } - RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], ports, transferables, exceptionState); + RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], transferables, exceptionState); if (exceptionState.throwIfNeeded()) return; // FIXME: Only pass context/exceptionState if instance really requires it. ExecutionContext* context = currentExecutionContext(info.GetIsolate()); + MessagePortArray* ports; + if (auto* messagePorts = TransferableMessagePort::get(*transferables)) + ports = &(messagePorts->getArray()); + else + ports = new MessagePortArray; instance->postMessage(context, message.release(), ports, exceptionState); exceptionState.throwIfNeeded(); }
diff --git a/third_party/WebKit/Source/bindings/tests/idls/core/TestObject.idl b/third_party/WebKit/Source/bindings/tests/idls/core/TestObject.idl index f8643f44..9ecc81f 100644 --- a/third_party/WebKit/Source/bindings/tests/idls/core/TestObject.idl +++ b/third_party/WebKit/Source/bindings/tests/idls/core/TestObject.idl
@@ -152,6 +152,9 @@ attribute DOMString[] stringArrayAttribute; attribute TestInterfaceEmpty[] testInterfaceEmptyArrayAttribute; attribute float[] floatArrayAttribute; + // FrozenArrays + attribute FrozenArray<DOMString> stringFrozenArrayAttribute; + attribute FrozenArray<TestInterfaceEmpty> testInterfaceEmptyFrozenArrayAttribute; // Nullable attributes attribute DOMString? stringOrNullAttribute; attribute long? longOrNullAttribute; @@ -360,6 +363,10 @@ void voidMethodSequenceTestInterfaceEmptyArg(sequence<TestInterfaceEmpty> testInterfaceEmptySequenceArg); void voidMethodSequenceSequenceDOMStringArg(sequence<sequence<DOMString>> stringSequenceSequenceArg); void voidMethodNullableSequenceLongArg(sequence<long>? longSequenceArg); + // FrozenArrays + FrozenArray<long> longFrozenArrayMethod(); + void voidMethodStringFrozenArrayMethod(FrozenArray<DOMString> stringFrozenArrayArg); + void voidMethodTestInterfaceEmptyFrozenArrayMethod(FrozenArray<TestInterfaceEmpty> testInterfaceEmptyFrozenArrayArg); // Nullable types long? nullableLongMethod(); DOMString? nullableStringMethod();
diff --git a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp index 2f8ff43a..15d3ebbf 100644 --- a/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp +++ b/third_party/WebKit/Source/bindings/tests/results/core/V8TestObject.cpp
@@ -16,6 +16,7 @@ #include "bindings/core/v8/ScriptValue.h" #include "bindings/core/v8/SerializedScriptValue.h" #include "bindings/core/v8/SerializedScriptValueFactory.h" +#include "bindings/core/v8/TransferableMessagePort.h" #include "bindings/core/v8/UnionTypesCore.h" #include "bindings/core/v8/V8AbstractEventListener.h" #include "bindings/core/v8/V8ArrayBuffer.h" @@ -1047,7 +1048,7 @@ v8::Local<v8::Object> holder = info.Holder(); ExceptionState exceptionState(ExceptionState::SetterContext, "serializedScriptValueAttribute", "TestObject", holder, info.GetIsolate()); TestObject* impl = V8TestObject::toImpl(holder); - RefPtr<SerializedScriptValue> cppValue = SerializedScriptValueFactory::instance().create(info.GetIsolate(), v8Value, nullptr, nullptr, nullptr, exceptionState); + RefPtr<SerializedScriptValue> cppValue = SerializedScriptValueFactory::instance().create(info.GetIsolate(), v8Value, nullptr, exceptionState); if (exceptionState.throwIfNeeded()) return; impl->setSerializedScriptValueAttribute(cppValue); @@ -1590,6 +1591,64 @@ TestObjectV8Internal::floatArrayAttributeAttributeSetter(v8Value, info); } +static void stringFrozenArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + v8::Local<v8::Object> holder = info.Holder(); + TestObject* impl = V8TestObject::toImpl(holder); + v8SetReturnValue(info, toV8(impl->stringFrozenArrayAttribute(), info.Holder(), info.GetIsolate())); +} + +static void stringFrozenArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + TestObjectV8Internal::stringFrozenArrayAttributeAttributeGetter(info); +} + +static void stringFrozenArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) +{ + v8::Local<v8::Object> holder = info.Holder(); + ExceptionState exceptionState(ExceptionState::SetterContext, "stringFrozenArrayAttribute", "TestObject", holder, info.GetIsolate()); + TestObject* impl = V8TestObject::toImpl(holder); + Vector<String> cppValue = toImplArray<Vector<String>>(v8Value, 0, info.GetIsolate(), exceptionState); + if (exceptionState.throwIfNeeded()) + return; + impl->setStringFrozenArrayAttribute(cppValue); +} + +static void stringFrozenArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + v8::Local<v8::Value> v8Value = info[0]; + TestObjectV8Internal::stringFrozenArrayAttributeAttributeSetter(v8Value, info); +} + +static void testInterfaceEmptyFrozenArrayAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + v8::Local<v8::Object> holder = info.Holder(); + TestObject* impl = V8TestObject::toImpl(holder); + v8SetReturnValue(info, toV8(impl->testInterfaceEmptyFrozenArrayAttribute(), info.Holder(), info.GetIsolate())); +} + +static void testInterfaceEmptyFrozenArrayAttributeAttributeGetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + TestObjectV8Internal::testInterfaceEmptyFrozenArrayAttributeAttributeGetter(info); +} + +static void testInterfaceEmptyFrozenArrayAttributeAttributeSetter(v8::Local<v8::Value> v8Value, const v8::FunctionCallbackInfo<v8::Value>& info) +{ + v8::Local<v8::Object> holder = info.Holder(); + ExceptionState exceptionState(ExceptionState::SetterContext, "testInterfaceEmptyFrozenArrayAttribute", "TestObject", holder, info.GetIsolate()); + TestObject* impl = V8TestObject::toImpl(holder); + HeapVector<Member<TestInterfaceEmpty>> cppValue = (toMemberNativeArray<TestInterfaceEmpty>(v8Value, 0, info.GetIsolate(), exceptionState)); + if (exceptionState.throwIfNeeded()) + return; + impl->setTestInterfaceEmptyFrozenArrayAttribute(cppValue); +} + +static void testInterfaceEmptyFrozenArrayAttributeAttributeSetterCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + v8::Local<v8::Value> v8Value = info[0]; + TestObjectV8Internal::testInterfaceEmptyFrozenArrayAttributeAttributeSetter(v8Value, info); +} + static void stringOrNullAttributeAttributeGetter(const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Local<v8::Object> holder = info.Holder(); @@ -6325,6 +6384,63 @@ TestObjectV8Internal::voidMethodNullableSequenceLongArgMethod(info); } +static void longFrozenArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + TestObject* impl = V8TestObject::toImpl(info.Holder()); + v8SetReturnValue(info, toV8(impl->longFrozenArrayMethod(), info.Holder(), info.GetIsolate())); +} + +static void longFrozenArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + TestObjectV8Internal::longFrozenArrayMethodMethod(info); +} + +static void voidMethodStringFrozenArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + ExceptionState exceptionState(ExceptionState::ExecutionContext, "voidMethodStringFrozenArrayMethod", "TestObject", info.Holder(), info.GetIsolate()); + if (UNLIKELY(info.Length() < 1)) { + setMinimumArityTypeError(exceptionState, 1, info.Length()); + exceptionState.throwIfNeeded(); + return; + } + TestObject* impl = V8TestObject::toImpl(info.Holder()); + Vector<String> stringFrozenArrayArg; + { + stringFrozenArrayArg = toImplArray<Vector<String>>(info[0], 1, info.GetIsolate(), exceptionState); + if (exceptionState.throwIfNeeded()) + return; + } + impl->voidMethodStringFrozenArrayMethod(stringFrozenArrayArg); +} + +static void voidMethodStringFrozenArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + TestObjectV8Internal::voidMethodStringFrozenArrayMethodMethod(info); +} + +static void voidMethodTestInterfaceEmptyFrozenArrayMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + ExceptionState exceptionState(ExceptionState::ExecutionContext, "voidMethodTestInterfaceEmptyFrozenArrayMethod", "TestObject", info.Holder(), info.GetIsolate()); + if (UNLIKELY(info.Length() < 1)) { + setMinimumArityTypeError(exceptionState, 1, info.Length()); + exceptionState.throwIfNeeded(); + return; + } + TestObject* impl = V8TestObject::toImpl(info.Holder()); + HeapVector<Member<TestInterfaceEmpty>> testInterfaceEmptyFrozenArrayArg; + { + testInterfaceEmptyFrozenArrayArg = (toMemberNativeArray<TestInterfaceEmpty>(info[0], 1, info.GetIsolate(), exceptionState)); + if (exceptionState.throwIfNeeded()) + return; + } + impl->voidMethodTestInterfaceEmptyFrozenArrayMethod(testInterfaceEmptyFrozenArrayArg); +} + +static void voidMethodTestInterfaceEmptyFrozenArrayMethodMethodCallback(const v8::FunctionCallbackInfo<v8::Value>& info) +{ + TestObjectV8Internal::voidMethodTestInterfaceEmptyFrozenArrayMethodMethod(info); +} + static void nullableLongMethodMethod(const v8::FunctionCallbackInfo<v8::Value>& info) { TestObject* impl = V8TestObject::toImpl(info.Holder()); @@ -6935,7 +7051,7 @@ TestObject* impl = V8TestObject::toImpl(info.Holder()); RefPtr<SerializedScriptValue> serializedScriptValueArg; { - serializedScriptValueArg = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], nullptr, nullptr, nullptr, exceptionState); + serializedScriptValueArg = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], nullptr, exceptionState); if (exceptionState.throwIfNeeded()) return; } @@ -10038,20 +10154,24 @@ exceptionState.throwIfNeeded(); return; } - MessagePortArray* ports = new MessagePortArray; TransferableArray* transferables = new TransferableArray; if (info.Length() > 1) { const int transferablesArgIndex = 1; - if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *ports, *transferables, exceptionState)) { + if (!SerializedScriptValue::extractTransferables(info.GetIsolate(), info[transferablesArgIndex], transferablesArgIndex, *transferables, exceptionState)) { exceptionState.throwIfNeeded(); return; } } - RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], ports, transferables, exceptionState); + RefPtr<SerializedScriptValue> message = SerializedScriptValueFactory::instance().create(info.GetIsolate(), info[0], transferables, exceptionState); if (exceptionState.throwIfNeeded()) return; // FIXME: Only pass context/exceptionState if instance really requires it. ExecutionContext* context = currentExecutionContext(info.GetIsolate()); + MessagePortArray* ports; + if (auto* messagePorts = TransferableMessagePort::get(*transferables)) + ports = &(messagePorts->getArray()); + else + ports = new MessagePortArray; instance->postMessage(context, message.release(), ports, exceptionState); exceptionState.throwIfNeeded(); } @@ -11420,6 +11540,8 @@ {"stringArrayAttribute", TestObjectV8Internal::stringArrayAttributeAttributeGetterCallback, TestObjectV8Internal::stringArrayAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, {"testInterfaceEmptyArrayAttribute", TestObjectV8Internal::testInterfaceEmptyArrayAttributeAttributeGetterCallback, TestObjectV8Internal::testInterfaceEmptyArrayAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, {"floatArrayAttribute", TestObjectV8Internal::floatArrayAttributeAttributeGetterCallback, TestObjectV8Internal::floatArrayAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, + {"stringFrozenArrayAttribute", TestObjectV8Internal::stringFrozenArrayAttributeAttributeGetterCallback, TestObjectV8Internal::stringFrozenArrayAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, + {"testInterfaceEmptyFrozenArrayAttribute", TestObjectV8Internal::testInterfaceEmptyFrozenArrayAttributeAttributeGetterCallback, TestObjectV8Internal::testInterfaceEmptyFrozenArrayAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, {"stringOrNullAttribute", TestObjectV8Internal::stringOrNullAttributeAttributeGetterCallback, TestObjectV8Internal::stringOrNullAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, {"longOrNullAttribute", TestObjectV8Internal::longOrNullAttributeAttributeGetterCallback, TestObjectV8Internal::longOrNullAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, {"testInterfaceOrNullAttribute", TestObjectV8Internal::testInterfaceOrNullAttributeAttributeGetterCallback, TestObjectV8Internal::testInterfaceOrNullAttributeAttributeSetterCallback, 0, 0, 0, v8::DEFAULT, static_cast<v8::PropertyAttribute>(v8::None), V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype, V8DOMConfiguration::CheckHolder}, @@ -11602,6 +11724,9 @@ {"voidMethodSequenceTestInterfaceEmptyArg", TestObjectV8Internal::voidMethodSequenceTestInterfaceEmptyArgMethodCallback, 0, 1, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, {"voidMethodSequenceSequenceDOMStringArg", TestObjectV8Internal::voidMethodSequenceSequenceDOMStringArgMethodCallback, 0, 1, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, {"voidMethodNullableSequenceLongArg", TestObjectV8Internal::voidMethodNullableSequenceLongArgMethodCallback, 0, 1, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, + {"longFrozenArrayMethod", TestObjectV8Internal::longFrozenArrayMethodMethodCallback, 0, 0, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, + {"voidMethodStringFrozenArrayMethod", TestObjectV8Internal::voidMethodStringFrozenArrayMethodMethodCallback, 0, 1, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, + {"voidMethodTestInterfaceEmptyFrozenArrayMethod", TestObjectV8Internal::voidMethodTestInterfaceEmptyFrozenArrayMethodMethodCallback, 0, 1, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, {"nullableLongMethod", TestObjectV8Internal::nullableLongMethodMethodCallback, 0, 0, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, {"nullableStringMethod", TestObjectV8Internal::nullableStringMethodMethodCallback, 0, 0, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype}, {"nullableTestInterfaceMethod", TestObjectV8Internal::nullableTestInterfaceMethodMethodCallback, 0, 0, v8::None, V8DOMConfiguration::ExposedToAllScripts, V8DOMConfiguration::OnPrototype},
diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi index 02e9778..34ab5825 100644 --- a/third_party/WebKit/Source/core/core.gypi +++ b/third_party/WebKit/Source/core/core.gypi
@@ -1376,7 +1376,6 @@ 'css/parser/CSSParserToken.cpp', 'css/parser/CSSParserTokenRange.cpp', 'css/parser/CSSParserTokenRange.h', - 'css/parser/CSSParserValues.cpp', 'css/parser/CSSParserSelector.h', 'css/parser/CSSParserSelector.cpp', 'css/parser/CSSPropertyParser.cpp', @@ -3928,7 +3927,6 @@ 'css/RuleSetTest.cpp', 'css/StyleSheetContentsTest.cpp', 'css/invalidation/InvalidationSetTest.cpp', - 'css/parser/CSSParserValuesTest.cpp', 'css/parser/CSSPropertyParserTest.cpp', 'css/parser/CSSSelectorParserTest.cpp', 'css/parser/CSSTokenizerTest.cpp',
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserValues.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserValues.cpp deleted file mode 100644 index 22d5adc..0000000 --- a/third_party/WebKit/Source/core/css/parser/CSSParserValues.cpp +++ /dev/null
@@ -1,254 +0,0 @@ -/* - * Copyright (C) 2003 Lars Knoll (knoll@kde.org) - * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "core/css/parser/CSSParserValues.h" - -#include "core/css/CSSFunctionValue.h" -#include "core/css/parser/CSSParserToken.h" -#include "core/css/parser/CSSParserTokenRange.h" -#include "core/css/parser/CSSPropertyParser.h" -#include "core/html/parser/HTMLParserIdioms.h" - -namespace blink { - -using namespace WTF; - -CSSParserValueList::CSSParserValueList(CSSParserTokenRange range) -: m_current(0) -{ - Vector<CSSParserValueList*> stack; - Vector<int> bracketCounts; - stack.append(this); - bracketCounts.append(0); - while (!range.atEnd()) { - ASSERT(stack.size() == bracketCounts.size()); - ASSERT(!stack.isEmpty()); - const CSSParserToken& token = range.peek(); - if (token.type() != FunctionToken) - range.consume(); - CSSParserValue value; - switch (token.type()) { - case FunctionToken: { - if (token.valueEqualsIgnoringASCIICase("url")) { - range.consume(); - const CSSParserToken& next = range.consumeIncludingWhitespace(); - if (next.type() == BadStringToken || range.consume().type() != RightParenthesisToken) { - destroyAndClear(); - return; - } - ASSERT(next.type() == StringToken); - value.id = CSSValueInvalid; - value.isInt = false; - value.m_unit = CSSParserValue::URI; - value.string = next.value(); - break; - } - if (token.valueEqualsIgnoringASCIICase("var")) { - destroyAndClear(); - return; - } - - value.id = CSSValueInvalid; - value.isInt = false; - - CSSValueID id = token.functionId(); - if (id == CSSValueCalc || id == CSSValueWebkitCalc) { - value.m_unit = CSSParserValue::CalcFunction; - value.calcFunction = new CSSParserCalcFunction(range.consumeBlock()); - break; - } - range.consume(); - value.m_unit = CSSParserValue::Function; - CSSParserFunction* function = new CSSParserFunction; - function->id = id; - CSSParserValueList* list = new CSSParserValueList; - function->args = adoptPtr(list); - - value.function = function; - - stack.last()->addValue(value); - stack.append(list); - bracketCounts.append(0); - continue; - } - case LeftParenthesisToken: { - CSSParserValueList* list = new CSSParserValueList; - value.setFromValueList(adoptPtr(list)); - stack.last()->addValue(value); - stack.append(list); - bracketCounts.append(0); - continue; - } - case RightParenthesisToken: { - if (bracketCounts.last() == 0) { - stack.removeLast(); - bracketCounts.removeLast(); - if (bracketCounts.isEmpty()) { - destroyAndClear(); - return; - } - continue; - } - bracketCounts.last()--; - value.setFromOperator(')'); - break; - } - case IdentToken: { - value.id = token.id(); - value.isInt = false; - value.m_unit = CSSParserValue::Identifier; - value.string = token.value(); - break; - } - case DimensionToken: - if (token.unitType() == CSSPrimitiveValue::UnitType::Unknown) { - // Unknown dimensions are handled as a list of two values - value.m_unit = CSSParserValue::DimensionList; - CSSParserValueList* list = new CSSParserValueList; - value.valueList = list; - value.id = CSSValueInvalid; - - CSSParserValue number; - number.setFromNumber(token.numericValue(), CSSPrimitiveValue::UnitType::Number); - number.isInt = (token.numericValueType() == IntegerValueType); - list->addValue(number); - - CSSParserValue unit; - unit.string = token.value(); - unit.m_unit = CSSParserValue::Identifier; - list->addValue(unit); - - break; - } - // fallthrough - case NumberToken: - case PercentageToken: - value.setFromNumber(token.numericValue(), token.unitType()); - value.isInt = (token.numericValueType() == IntegerValueType); - break; - case UnicodeRangeToken: { - value.id = CSSValueInvalid; - value.isInt = false; - value.m_unicodeRange.start = token.unicodeRangeStart(); - value.m_unicodeRange.end = token.unicodeRangeEnd(); - value.m_unit = CSSParserValue::UnicodeRange; - break; - } - case HashToken: - case StringToken: - case UrlToken: { - value.id = CSSValueInvalid; - value.isInt = false; - if (token.type() == HashToken) - value.m_unit = CSSParserValue::HexColor; - else if (token.type() == StringToken) - value.m_unit = CSSParserValue::String; - else - value.m_unit = CSSParserValue::URI; - value.string = token.value(); - break; - } - case DelimiterToken: - value.setFromOperator(token.delimiter()); - break; - case CommaToken: - value.setFromOperator(','); - break; - case LeftBracketToken: - value.setFromOperator('['); - break; - case RightBracketToken: - value.setFromOperator(']'); - break; - case LeftBraceToken: - value.setFromOperator('{'); - break; - case RightBraceToken: - value.setFromOperator('}'); - break; - case WhitespaceToken: - continue; - case CommentToken: - case EOFToken: - ASSERT_NOT_REACHED(); - case CDOToken: - case CDCToken: - case AtKeywordToken: - case IncludeMatchToken: - case DashMatchToken: - case PrefixMatchToken: - case SuffixMatchToken: - case SubstringMatchToken: - case ColumnToken: - case ColonToken: - case SemicolonToken: - destroyAndClear(); - return; - case BadStringToken: - case BadUrlToken: - destroyAndClear(); - return; - } - stack.last()->addValue(value); - } - - CSSParserValue rightParenthesis; - rightParenthesis.setFromOperator(')'); - while (!stack.isEmpty()) { - while (bracketCounts.last() > 0) { - bracketCounts.last()--; - stack.last()->addValue(rightParenthesis); - } - stack.removeLast(); - bracketCounts.removeLast(); - } -} - -static void destroy(Vector<CSSParserValue, 4>& values) -{ - size_t numValues = values.size(); - for (size_t i = 0; i < numValues; i++) { - if (values[i].m_unit == CSSParserValue::Function) - delete values[i].function; - else if (values[i].m_unit == CSSParserValue::CalcFunction) - delete values[i].calcFunction; - else if (values[i].m_unit == CSSParserValue::ValueList - || values[i].m_unit == CSSParserValue::DimensionList) - delete values[i].valueList; - } -} - -void CSSParserValueList::destroyAndClear() -{ - destroy(m_values); - clearAndLeakValues(); -} - -CSSParserValueList::~CSSParserValueList() -{ - destroy(m_values); -} - -void CSSParserValueList::addValue(const CSSParserValue& v) -{ - m_values.append(v); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserValues.h b/third_party/WebKit/Source/core/css/parser/CSSParserValues.h deleted file mode 100644 index 4925f24..0000000 --- a/third_party/WebKit/Source/core/css/parser/CSSParserValues.h +++ /dev/null
@@ -1,158 +0,0 @@ -/* - * Copyright (C) 2003 Lars Knoll (knoll@kde.org) - * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef CSSParserValues_h -#define CSSParserValues_h - -#include "core/CSSValueKeywords.h" -#include "core/css/CSSPrimitiveValue.h" -#include "core/css/CSSValueList.h" -#include "core/css/parser/CSSParserString.h" -#include "core/css/parser/CSSParserTokenRange.h" -#include "wtf/Allocator.h" - -namespace blink { - -class QualifiedName; - -struct CSSParserFunction; -struct CSSParserCalcFunction; -class CSSParserValueList; - -struct CSSParserValue { - DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); - CSSValueID id; - bool isInt; - union { - double fValue; - int iValue; - CSSParserString string; - CSSParserFunction* function; - CSSParserCalcFunction* calcFunction; - CSSParserValueList* valueList; - struct { - UChar32 start; - UChar32 end; - } m_unicodeRange; - }; - enum { - Operator = 0x100000, - Function = 0x100001, - CalcFunction = 0x100002, - ValueList = 0x100003, - HexColor = 0x100004, - Identifier = 0x100005, - // Represents a dimension by a list of two values, a UnitType::Number and an Identifier - DimensionList = 0x100006, - // Represents a unicode range by a pair of UChar32 values - UnicodeRange = 0x100007, - String = 0x100008, - URI = 0x100009, - }; - int m_unit; - CSSPrimitiveValue::UnitType unit() const { return static_cast<CSSPrimitiveValue::UnitType>(m_unit); } - void setUnit(CSSPrimitiveValue::UnitType unit) { m_unit = static_cast<int>(unit); } - - inline void setFromNumber(double value, CSSPrimitiveValue::UnitType); - inline void setFromOperator(UChar); - inline void setFromValueList(PassOwnPtr<CSSParserValueList>); -}; - -class CORE_EXPORT CSSParserValueList { - USING_FAST_MALLOC(CSSParserValueList); -public: - CSSParserValueList() - : m_current(0) - { - } - CSSParserValueList(CSSParserTokenRange); - ~CSSParserValueList(); - - void addValue(const CSSParserValue&); - - unsigned size() const { return m_values.size(); } - unsigned currentIndex() { return m_current; } - CSSParserValue* current() { return m_current < m_values.size() ? &m_values[m_current] : nullptr; } - CSSParserValue* next() { ++m_current; return current(); } - CSSParserValue* previous() - { - if (!m_current) - return 0; - --m_current; - return current(); - } - void setCurrentIndex(unsigned index) - { - ASSERT(index < m_values.size()); - if (index < m_values.size()) - m_current = index; - } - - CSSParserValue* valueAt(unsigned i) { return i < m_values.size() ? &m_values[i] : nullptr; } - - void clearAndLeakValues() { m_values.clear(); m_current = 0;} - void destroyAndClear(); - -private: - unsigned m_current; - Vector<CSSParserValue, 4> m_values; -}; - -struct CSSParserFunction { - USING_FAST_MALLOC(CSSParserFunction); -public: - CSSValueID id; - OwnPtr<CSSParserValueList> args; -}; - -struct CSSParserCalcFunction { - USING_FAST_MALLOC(CSSParserCalcFunction); -public: - CSSParserCalcFunction(CSSParserTokenRange args_) : args(args_) {} - CSSParserTokenRange args; -}; - -inline void CSSParserValue::setFromNumber(double value, CSSPrimitiveValue::UnitType unit) -{ - id = CSSValueInvalid; - isInt = false; - fValue = value; - this->setUnit(std::isfinite(value) ? unit : CSSPrimitiveValue::UnitType::Unknown); -} - -inline void CSSParserValue::setFromOperator(UChar c) -{ - id = CSSValueInvalid; - m_unit = Operator; - iValue = c; - isInt = false; -} - -inline void CSSParserValue::setFromValueList(PassOwnPtr<CSSParserValueList> valueList) -{ - id = CSSValueInvalid; - this->valueList = valueList.leakPtr(); - m_unit = ValueList; - isInt = false; -} - -} // namespace blink - -#endif
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserValuesTest.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserValuesTest.cpp deleted file mode 100644 index e73995d..0000000 --- a/third_party/WebKit/Source/core/css/parser/CSSParserValuesTest.cpp +++ /dev/null
@@ -1,128 +0,0 @@ -/* - * Copyright 2013, Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "core/css/parser/CSSParserValues.h" - -#include "core/css/parser/CSSParserTokenRange.h" -#include "core/css/parser/CSSTokenizer.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace blink { - -TEST(CSSParserValuesTest, InitWithEmptyString) -{ - String string; - - CSSParserString cssParserString; - cssParserString.init(string); - EXPECT_EQ(0u, cssParserString.length()); - EXPECT_EQ(string, String(cssParserString)); - EXPECT_TRUE(String(cssParserString).isNull()); - - string = ""; - cssParserString.init(string); - EXPECT_EQ(0u, cssParserString.length()); - EXPECT_EQ(string, String(cssParserString)); - EXPECT_FALSE(String(cssParserString).isNull()); - - string.ensure16Bit(); - cssParserString.init(string); - EXPECT_EQ(0u, cssParserString.length()); - EXPECT_EQ(string, String(cssParserString)); - EXPECT_FALSE(String(cssParserString).isNull()); -} - -TEST(CSSParserValuesTest, EqualIgnoringASCIICase8BitsString) -{ - CSSParserString cssParserString; - String string8bit("sHaDOw"); - cssParserString.init(string8bit); - - ASSERT_TRUE(cssParserString.equalIgnoringASCIICase("shadow")); - ASSERT_TRUE(cssParserString.equalIgnoringASCIICase("ShaDow")); - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("shadow-all")); - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("sha")); - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("abCD")); -} - -TEST(CSSParserValuesTest, EqualIgnoringASCIICase16BitsString) -{ - String string16bit("sHaDOw"); - string16bit.ensure16Bit(); - - CSSParserString cssParserString; - cssParserString.init(string16bit); - - ASSERT_TRUE(cssParserString.equalIgnoringASCIICase("shadow")); - ASSERT_TRUE(cssParserString.equalIgnoringASCIICase("ShaDow")); - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("shadow-all")); - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("sha")); - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("abCD")); - - StringBuilder builder; - builder.append(0x017f); // LATIN SMALL LETTER LONG S - builder.append("HaDOw"); - ASSERT_FALSE(builder.is8Bit()); - - String string16BitFoldingToASCII = builder.toString(); - cssParserString.init(string16BitFoldingToASCII); - - ASSERT_FALSE(cssParserString.equalIgnoringASCIICase("shadow")); -} - -TEST(CSSParserValuesTest, CSSParserValuelistClear) -{ - CSSParserValueList list; - for (int i = 0; i < 3; ++i) { - CSSParserValue value; - value.setFromNumber(3, CSSPrimitiveValue::UnitType::Number); - list.addValue(value); - } - list.clearAndLeakValues(); - ASSERT_FALSE(list.size()); - ASSERT_FALSE(list.currentIndex()); -} - -TEST(CSSParserValuesTest, CSSParserTokenUrlConversion) -{ - CSSTokenizer::Scope scope("url(some) uRL('test') UrL( \"words\" /**/ ) URl( /**/hi/**/ )"); - CSSParserValueList valueList(scope.tokenRange()); - ASSERT_EQ(valueList.size(), 4u); - ASSERT_EQ(valueList.valueAt(0)->m_unit, CSSParserValue::URI); - EXPECT_EQ(String(valueList.valueAt(0)->string), "some"); - ASSERT_EQ(valueList.valueAt(1)->m_unit, CSSParserValue::URI); - EXPECT_EQ(String(valueList.valueAt(1)->string), "test"); - ASSERT_EQ(valueList.valueAt(2)->m_unit, CSSParserValue::URI); - EXPECT_EQ(String(valueList.valueAt(2)->string), "words"); - ASSERT_EQ(valueList.valueAt(3)->m_unit, CSSParserValue::URI); - EXPECT_EQ(String(valueList.valueAt(3)->string), "/**/hi/**/"); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp index 1de21d2..46893443 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -37,7 +37,6 @@ #include "core/css/FontFace.h" #include "core/css/HashTools.h" #include "core/css/parser/CSSParserFastPaths.h" -#include "core/css/parser/CSSParserValues.h" #include "core/css/parser/CSSPropertyParserHelpers.h" #include "core/css/parser/CSSVariableParser.h" #include "core/frame/UseCounter.h"
diff --git a/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp index 86c7d731..d97f387 100644 --- a/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp +++ b/third_party/WebKit/Source/core/css/parser/CSSVariableParser.cpp
@@ -6,7 +6,6 @@ #include "core/css/CSSCustomPropertyDeclaration.h" #include "core/css/parser/CSSParserTokenRange.h" -#include "core/css/parser/CSSParserValues.h" namespace blink {
diff --git a/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp b/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp index d45ae959..a1cf7fbc 100644 --- a/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp +++ b/third_party/WebKit/Source/core/css/resolver/CSSVariableResolver.cpp
@@ -13,7 +13,6 @@ #include "core/css/CSSVariableReferenceValue.h" #include "core/css/parser/CSSParserToken.h" #include "core/css/parser/CSSParserTokenRange.h" -#include "core/css/parser/CSSParserValues.h" #include "core/css/parser/CSSPropertyParser.h" #include "core/css/resolver/StyleBuilder.h" #include "core/css/resolver/StyleResolverState.h"
diff --git a/third_party/WebKit/Source/core/frame/Deprecation.cpp b/third_party/WebKit/Source/core/frame/Deprecation.cpp index e868e5a4f..e3df7eb 100644 --- a/third_party/WebKit/Source/core/frame/Deprecation.cpp +++ b/third_party/WebKit/Source/core/frame/Deprecation.cpp
@@ -355,9 +355,6 @@ case UseCounter::WebAnimationHyphenatedProperty: return "Hyphenated property names in Web Animations keyframes are invalid and therefore ignored. Please use camelCase instead."; - case UseCounter::PresentationConnectionStateChangeEventListener: - return replacedWillBeRemoved("'PresentationConnection.onstateachange'", "'PresentationConnection.on{connect,close,terminate}'", 51, "5662456714100736"); - case UseCounter::HTMLKeygenElement: return willBeRemoved("The <keygen> element", 54, "5716060992962560");
diff --git a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp index e437f50..e30482a4 100644 --- a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp +++ b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp
@@ -16,14 +16,6 @@ namespace { -inline bool isTouchEventType(const AtomicString& eventType) -{ - return eventType == EventTypeNames::touchstart - || eventType == EventTypeNames::touchmove - || eventType == EventTypeNames::touchend - || eventType == EventTypeNames::touchcancel; -} - inline bool isPointerEventType(const AtomicString& eventType) { return eventType == EventTypeNames::gotpointercapture @@ -67,13 +59,15 @@ *result = ScrollEvent; } else if (eventType == EventTypeNames::wheel || eventType == EventTypeNames::mousewheel) { *result = options.passive() ? WheelEventPassive : WheelEventBlocking; - } else if (isTouchEventType(eventType)) { - *result = options.passive() ? TouchEventPassive : TouchEventBlocking; + } else if (eventType == EventTypeNames::touchend || eventType == EventTypeNames::touchcancel) { + *result = options.passive() ? TouchEndOrCancelEventPassive : TouchEndOrCancelEventBlocking; + } else if (eventType == EventTypeNames::touchstart || eventType == EventTypeNames::touchmove) { + *result = options.passive() ? TouchStartOrMoveEventPassive : TouchStartOrMoveEventBlocking; } else if (isPointerEventType(eventType)) { - // The EventHandlerClass is TouchEventPassive since the pointer events - // never block scrolling and the compositor only needs to know - // about the touch listeners. - *result = TouchEventPassive; + // The EventHandlerClass is TouchStartOrMoveEventPassive since + // the pointer events never block scrolling and the compositor + // only needs to know about the touch listeners. + *result = TouchStartOrMoveEventPassive; #if ENABLE(ASSERT) } else if (eventType == EventTypeNames::load || eventType == EventTypeNames::mousemove || eventType == EventTypeNames::touchstart) { *result = EventsForTesting; @@ -213,15 +207,19 @@ { switch (handlerClass) { case ScrollEvent: - m_frameHost->chromeClient().setHaveScrollEventHandlers(hasActiveHandlers); + m_frameHost->chromeClient().setHasScrollEventHandlers(hasActiveHandlers); break; case WheelEventBlocking: case WheelEventPassive: m_frameHost->chromeClient().setEventListenerProperties(WebEventListenerClass::MouseWheel, webEventListenerProperties(hasEventHandlers(WheelEventBlocking), hasEventHandlers(WheelEventPassive))); break; - case TouchEventBlocking: - case TouchEventPassive: - m_frameHost->chromeClient().setEventListenerProperties(WebEventListenerClass::Touch, webEventListenerProperties(hasEventHandlers(TouchEventBlocking), hasEventHandlers(TouchEventPassive))); + case TouchStartOrMoveEventBlocking: + case TouchStartOrMoveEventPassive: + m_frameHost->chromeClient().setEventListenerProperties(WebEventListenerClass::TouchStartOrMove, webEventListenerProperties(hasEventHandlers(TouchStartOrMoveEventBlocking), hasEventHandlers(TouchStartOrMoveEventPassive))); + break; + case TouchEndOrCancelEventBlocking: + case TouchEndOrCancelEventPassive: + m_frameHost->chromeClient().setEventListenerProperties(WebEventListenerClass::TouchEndOrCancel, webEventListenerProperties(hasEventHandlers(TouchEndOrCancelEventBlocking), hasEventHandlers(TouchEndOrCancelEventPassive))); break; #if ENABLE(ASSERT) case EventsForTesting: @@ -236,7 +234,7 @@ void EventHandlerRegistry::notifyDidAddOrRemoveEventHandlerTarget(EventHandlerClass handlerClass) { ScrollingCoordinator* scrollingCoordinator = m_frameHost->page().scrollingCoordinator(); - if (scrollingCoordinator && handlerClass == TouchEventBlocking) + if (scrollingCoordinator && handlerClass == TouchStartOrMoveEventBlocking) scrollingCoordinator->touchEventTargetRectsDidChange(); }
diff --git a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.h b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.h index 4d1dd088..80d342f0d 100644 --- a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.h +++ b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.h
@@ -31,8 +31,10 @@ ScrollEvent, WheelEventBlocking, WheelEventPassive, - TouchEventBlocking, - TouchEventPassive, + TouchStartOrMoveEventBlocking, + TouchStartOrMoveEventPassive, + TouchEndOrCancelEventBlocking, + TouchEndOrCancelEventPassive, #if ENABLE(ASSERT) // Additional event categories for verifying handler tracking logic. EventsForTesting,
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h index 64ee2fc..b17f547 100644 --- a/third_party/WebKit/Source/core/frame/UseCounter.h +++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -753,7 +753,6 @@ PresentationRequestConnectionAvailableEventListener = 932, PresentationConnectionTerminate = 933, PresentationConnectionSend = 934, - PresentationConnectionStateChangeEventListener = 935, PresentationConnectionMessageEventListener = 936, CSSAnimationsStackedNeutralKeyframe = 937, ReadingCheckedInClickHandler = 938,
diff --git a/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp b/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp index 78d62a4..8e367eb6 100644 --- a/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp +++ b/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp
@@ -44,7 +44,6 @@ container->setInlineStyleProperty(CSSPropertyDisplay, CSSValueInlineBlock); container->setInlineStyleProperty(CSSPropertyBoxSizing, CSSValueBorderBox); container->setInlineStyleProperty(CSSPropertyPadding, 1, CSSPrimitiveValue::UnitType::Pixels); - container->setInlineStyleProperty(CSSPropertyBorderRadius, ("inherit")); HTMLImageElement* brokenImage = HTMLImageElement::create(element.document()); container->appendChild(brokenImage);
diff --git a/third_party/WebKit/Source/core/html/HTMLInputElement.cpp b/third_party/WebKit/Source/core/html/HTMLInputElement.cpp index b370767..29e1417 100644 --- a/third_party/WebKit/Source/core/html/HTMLInputElement.cpp +++ b/third_party/WebKit/Source/core/html/HTMLInputElement.cpp
@@ -423,9 +423,9 @@ EventHandlerRegistry& registry = document().frameHost()->eventHandlerRegistry(); // TODO(dtapuska): Make this passive touch listener see crbug.com/584438 if (hasTouchEventHandler) - registry.didAddEventHandler(*this, EventHandlerRegistry::TouchEventBlocking); + registry.didAddEventHandler(*this, EventHandlerRegistry::TouchStartOrMoveEventBlocking); else - registry.didRemoveEventHandler(*this, EventHandlerRegistry::TouchEventBlocking); + registry.didRemoveEventHandler(*this, EventHandlerRegistry::TouchStartOrMoveEventBlocking); m_hasTouchEventHandler = hasTouchEventHandler; } }
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp index c84317b..290979ea 100644 --- a/third_party/WebKit/Source/core/input/EventHandler.cpp +++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -109,8 +109,10 @@ bool hasTouchHandlers(const EventHandlerRegistry& registry) { - return registry.hasEventHandlers(EventHandlerRegistry::TouchEventBlocking) - || registry.hasEventHandlers(EventHandlerRegistry::TouchEventPassive); + return registry.hasEventHandlers(EventHandlerRegistry::TouchStartOrMoveEventBlocking) + || registry.hasEventHandlers(EventHandlerRegistry::TouchStartOrMoveEventPassive) + || registry.hasEventHandlers(EventHandlerRegistry::TouchEndOrCancelEventBlocking) + || registry.hasEventHandlers(EventHandlerRegistry::TouchEndOrCancelEventPassive); } const AtomicString& touchEventNameForTouchPointState(PlatformTouchPoint::TouchState state)
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp index 20b46ed..d79383a9 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp
@@ -345,6 +345,15 @@ return columnSet ? columnSet->visualPointToFlowThreadPoint(toLayoutPoint(visualPoint + location() - columnSet->location())) : visualPoint; } +int LayoutMultiColumnFlowThread::inlineBlockBaseline(LineDirectionMode lineDirection) const +{ + LayoutUnit baselineInFlowThread = LayoutUnit(LayoutFlowThread::inlineBlockBaseline(lineDirection)); + LayoutMultiColumnSet* columnSet = columnSetAtBlockOffset(baselineInFlowThread); + if (!columnSet) + return baselineInFlowThread.toInt(); + return (baselineInFlowThread - columnSet->pageLogicalTopForOffset(baselineInFlowThread)).ceil(); +} + LayoutMultiColumnSet* LayoutMultiColumnFlowThread::columnSetAtBlockOffset(LayoutUnit offset) const { if (LayoutMultiColumnSet* columnSet = m_lastSetWorkedOn) {
diff --git a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h index c898d713..a2403ee 100644 --- a/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h +++ b/third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.h
@@ -185,6 +185,8 @@ LayoutPoint visualPointToFlowThreadPoint(const LayoutPoint& visualPoint) const override; + int inlineBlockBaseline(LineDirectionMode) const override; + LayoutMultiColumnSet* columnSetAtBlockOffset(LayoutUnit) const final; void layoutColumns(SubtreeLayoutScope&);
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp index 6b52046..b50666e 100644 --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -2036,9 +2036,9 @@ if (node() && !node()->isTextNode() && (oldTouchAction == TouchActionAuto) != (newStyle.getTouchAction() == TouchActionAuto)) { EventHandlerRegistry& registry = document().frameHost()->eventHandlerRegistry(); if (newStyle.getTouchAction() != TouchActionAuto) - registry.didAddEventHandler(*node(), EventHandlerRegistry::TouchEventBlocking); + registry.didAddEventHandler(*node(), EventHandlerRegistry::TouchStartOrMoveEventBlocking); else - registry.didRemoveEventHandler(*node(), EventHandlerRegistry::TouchEventBlocking); + registry.didRemoveEventHandler(*node(), EventHandlerRegistry::TouchStartOrMoveEventBlocking); } } @@ -2650,8 +2650,8 @@ // previously may have already been removed by the Document independently. if (node() && !node()->isTextNode() && m_style && m_style->getTouchAction() != TouchActionAuto) { EventHandlerRegistry& registry = document().frameHost()->eventHandlerRegistry(); - if (registry.eventHandlerTargets(EventHandlerRegistry::TouchEventBlocking)->contains(node())) - registry.didRemoveEventHandler(*node(), EventHandlerRegistry::TouchEventBlocking); + if (registry.eventHandlerTargets(EventHandlerRegistry::TouchStartOrMoveEventBlocking)->contains(node())) + registry.didRemoveEventHandler(*node(), EventHandlerRegistry::TouchStartOrMoveEventBlocking); } setAncestorLineBoxDirty(false);
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp index 27da507..581fa83 100644 --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGInlineText.cpp
@@ -40,32 +40,19 @@ namespace blink { -static PassRefPtr<StringImpl> applySVGWhitespaceRules(PassRefPtr<StringImpl> string, bool preserveWhiteSpace) +// Turn tabs, newlines and carriage returns into spaces. In the future this +// should be removed in favor of letting the generic white-space code handle +// this. +static PassRefPtr<StringImpl> normalizeWhitespace(PassRefPtr<StringImpl> string) { - if (preserveWhiteSpace) { - // Spec: When xml:space="preserve", the SVG user agent will do the following using a - // copy of the original character data content. It will convert all newline and tab - // characters into space characters. Then, it will draw all space characters, including - // leading, trailing and multiple contiguous space characters. - RefPtr<StringImpl> newString = string->replace('\t', ' '); - newString = newString->replace('\n', ' '); - newString = newString->replace('\r', ' '); - return newString.release(); - } - - // Spec: When xml:space="default", the SVG user agent will do the following using a - // copy of the original character data content. First, it will remove all newline - // characters. Then it will convert all tab characters into space characters. - // Then, it will strip off all leading and trailing space characters. - // Then, all contiguous space characters will be consolidated. - RefPtr<StringImpl> newString = string->replace('\n', StringImpl::empty()); - newString = newString->replace('\r', StringImpl::empty()); - newString = newString->replace('\t', ' '); + RefPtr<StringImpl> newString = string->replace('\t', ' '); + newString = newString->replace('\n', ' '); + newString = newString->replace('\r', ' '); return newString.release(); } LayoutSVGInlineText::LayoutSVGInlineText(Node* n, PassRefPtr<StringImpl> string) - : LayoutText(n, applySVGWhitespaceRules(string, false)) + : LayoutText(n, normalizeWhitespace(string)) , m_scalingFactor(1) , m_layoutAttributes(this) { @@ -395,7 +382,7 @@ RefPtr<StringImpl> result = LayoutText::originalText(); if (!result) return nullptr; - return applySVGWhitespaceRules(result, style() && style()->whiteSpace() == PRE); + return normalizeWhitespace(result); } } // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.h b/third_party/WebKit/Source/core/loader/EmptyClients.h index b3058032..4a90fbd 100644 --- a/third_party/WebKit/Source/core/loader/EmptyClients.h +++ b/third_party/WebKit/Source/core/loader/EmptyClients.h
@@ -157,8 +157,8 @@ void setEventListenerProperties(WebEventListenerClass, WebEventListenerProperties) override {} WebEventListenerProperties eventListenerProperties(WebEventListenerClass) const override { return WebEventListenerProperties::Nothing; } - void setHaveScrollEventHandlers(bool) override {} - bool haveScrollEventHandlers() const override { return false; } + void setHasScrollEventHandlers(bool) override {} + bool hasScrollEventHandlers() const override { return false; } void setTouchAction(TouchAction) override {}
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp index ac22f9b..b165a2e7 100644 --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -1109,8 +1109,9 @@ return; if (isLoadingMainFrame()) { - m_frame->page()->chromeClient().setEventListenerProperties(WebEventListenerClass::Touch, WebEventListenerProperties::Nothing); + m_frame->page()->chromeClient().setEventListenerProperties(WebEventListenerClass::TouchStartOrMove, WebEventListenerProperties::Nothing); m_frame->page()->chromeClient().setEventListenerProperties(WebEventListenerClass::MouseWheel, WebEventListenerProperties::Nothing); + m_frame->page()->chromeClient().setEventListenerProperties(WebEventListenerClass::TouchEndOrCancel, WebEventListenerProperties::Nothing); } client()->transitionToCommittedForNewPage();
diff --git a/third_party/WebKit/Source/core/loader/HttpEquiv.cpp b/third_party/WebKit/Source/core/loader/HttpEquiv.cpp index d4ff0b76..1298ad21 100644 --- a/third_party/WebKit/Source/core/loader/HttpEquiv.cpp +++ b/third_party/WebKit/Source/core/loader/HttpEquiv.cpp
@@ -35,7 +35,7 @@ } else if (equalIgnoringCase(equiv, "x-dns-prefetch-control")) { document.parseDNSPrefetchControlHeader(content); } else if (equalIgnoringCase(equiv, "x-frame-options")) { - processHttpEquivXFrameOptions(document, content); + document.addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel, "X-Frame-Options may only be set via an HTTP header sent along with a document. It may not be set inside <meta>.")); } else if (equalIgnoringCase(equiv, "accept-ch")) { processHttpEquivAcceptCH(document, content); } else if (equalIgnoringCase(equiv, "content-security-policy") || equalIgnoringCase(equiv, "content-security-policy-report-only")) { @@ -92,28 +92,4 @@ toHTMLDocument(document).setCookie(content, IGNORE_EXCEPTION); } -void HttpEquiv::processHttpEquivXFrameOptions(Document& document, const AtomicString& content) -{ - LocalFrame* frame = document.frame(); - if (!frame) - return; - - unsigned long requestIdentifier = document.loader()->mainResourceIdentifier(); - if (!frame->loader().shouldInterruptLoadForXFrameOptions(content, document.url(), requestIdentifier)) - return; - - ConsoleMessage* consoleMessage = ConsoleMessage::create(SecurityMessageSource, ErrorMessageLevel, - "Refused to display '" + document.url().elidedString() + "' in a frame because it set 'X-Frame-Options' to '" + content + "'."); - consoleMessage->setRequestIdentifier(requestIdentifier); - document.addConsoleMessage(consoleMessage); - - frame->loader().stopAllLoaders(); - // Stopping the loader isn't enough, as we're already parsing the document; to honor the header's - // intent, we must navigate away from the possibly partially-rendered document to a location that - // doesn't inherit the parent's SecurityOrigin. - // TODO(dglazkov): This should probably check document lifecycle instead. - if (document.frame()) - frame->navigate(document, SecurityOrigin::urlWithUniqueSecurityOrigin(), true, UserGestureStatus::None); -} - } // namespace blink
diff --git a/third_party/WebKit/Source/core/page/ChromeClient.h b/third_party/WebKit/Source/core/page/ChromeClient.h index 2e96005..72b618de 100644 --- a/third_party/WebKit/Source/core/page/ChromeClient.h +++ b/third_party/WebKit/Source/core/page/ChromeClient.h
@@ -206,8 +206,8 @@ virtual void setEventListenerProperties(WebEventListenerClass, WebEventListenerProperties) = 0; virtual WebEventListenerProperties eventListenerProperties(WebEventListenerClass) const = 0; - virtual void setHaveScrollEventHandlers(bool) = 0; - virtual bool haveScrollEventHandlers() const = 0; + virtual void setHasScrollEventHandlers(bool) = 0; + virtual bool hasScrollEventHandlers() const = 0; virtual void setTouchAction(TouchAction) = 0;
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp index 7e5ceb89..c56f674c 100644 --- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp +++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
@@ -772,7 +772,7 @@ static void accumulateDocumentTouchEventTargetRects(LayerHitTestRects& rects, const Document* document) { ASSERT(document); - const EventTargetSet* targets = document->frameHost()->eventHandlerRegistry().eventHandlerTargets(EventHandlerRegistry::TouchEventBlocking); + const EventTargetSet* targets = document->frameHost()->eventHandlerRegistry().eventHandlerTargets(EventHandlerRegistry::TouchStartOrMoveEventBlocking); if (!targets) return;
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp index bb577b81..60373a3a 100644 --- a/third_party/WebKit/Source/core/testing/Internals.cpp +++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -1271,10 +1271,16 @@ return eventHandlerCount(*document, EventHandlerRegistry::ScrollEvent); } -unsigned Internals::touchEventHandlerCount(Document* document) +unsigned Internals::touchStartOrMoveEventHandlerCount(Document* document) { ASSERT(document); - return eventHandlerCount(*document, EventHandlerRegistry::TouchEventBlocking); + return eventHandlerCount(*document, EventHandlerRegistry::TouchStartOrMoveEventBlocking) + eventHandlerCount(*document, EventHandlerRegistry::TouchStartOrMoveEventPassive); +} + +unsigned Internals::touchEndOrCancelEventHandlerCount(Document* document) +{ + ASSERT(document); + return eventHandlerCount(*document, EventHandlerRegistry::TouchEndOrCancelEventBlocking) + eventHandlerCount(*document, EventHandlerRegistry::TouchEndOrCancelEventPassive); } static PaintLayer* findLayerForGraphicsLayer(PaintLayer* searchRoot, GraphicsLayer* graphicsLayer, IntSize* layerOffset, String* layerType)
diff --git a/third_party/WebKit/Source/core/testing/Internals.h b/third_party/WebKit/Source/core/testing/Internals.h index b7929e4..1d571a02 100644 --- a/third_party/WebKit/Source/core/testing/Internals.h +++ b/third_party/WebKit/Source/core/testing/Internals.h
@@ -193,7 +193,8 @@ unsigned activeDOMObjectCount(Document*); unsigned wheelEventHandlerCount(Document*); unsigned scrollEventHandlerCount(Document*); - unsigned touchEventHandlerCount(Document*); + unsigned touchStartOrMoveEventHandlerCount(Document*); + unsigned touchEndOrCancelEventHandlerCount(Document*); LayerRectList* touchEventTargetLayerRects(Document*, ExceptionState&); bool executeCommand(Document*, const String& name, const String& value, ExceptionState&);
diff --git a/third_party/WebKit/Source/core/testing/Internals.idl b/third_party/WebKit/Source/core/testing/Internals.idl index bb68d1a..44e0e50 100644 --- a/third_party/WebKit/Source/core/testing/Internals.idl +++ b/third_party/WebKit/Source/core/testing/Internals.idl
@@ -144,7 +144,8 @@ unsigned long activeDOMObjectCount(Document document); unsigned long wheelEventHandlerCount(Document document); unsigned long scrollEventHandlerCount(Document document); - unsigned long touchEventHandlerCount(Document document); + unsigned long touchStartOrMoveEventHandlerCount(Document document); + unsigned long touchEndOrCancelEventHandlerCount(Document document); [RaisesException] LayerRectList touchEventTargetLayerRects(Document document); [RaisesException] boolean executeCommand(Document document, DOMString name, DOMString value);
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp index ca0187f..a8f8806 100644 --- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp +++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
@@ -216,9 +216,7 @@ bool PresentationConnection::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const EventListenerOptions& options) { - if (eventType == EventTypeNames::statechange) - Deprecation::countDeprecation(getExecutionContext(), UseCounter::PresentationConnectionStateChangeEventListener); - else if (eventType == EventTypeNames::connect) + if (eventType == EventTypeNames::connect) UseCounter::count(getExecutionContext(), UseCounter::PresentationConnectionConnectEventListener); else if (eventType == EventTypeNames::close) UseCounter::count(getExecutionContext(), UseCounter::PresentationConnectionCloseEventListener); @@ -405,7 +403,6 @@ return; m_state = state; - dispatchEvent(Event::create(EventTypeNames::statechange)); switch (m_state) { case WebPresentationConnectionState::Connected: dispatchEvent(Event::create(EventTypeNames::connect));
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.h b/third_party/WebKit/Source/modules/presentation/PresentationConnection.h index c59eef1..f2ad01be 100644 --- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.h +++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
@@ -58,7 +58,6 @@ void setBinaryType(const String&); DEFINE_ATTRIBUTE_EVENT_LISTENER(message); - DEFINE_ATTRIBUTE_EVENT_LISTENER(statechange); DEFINE_ATTRIBUTE_EVENT_LISTENER(connect); DEFINE_ATTRIBUTE_EVENT_LISTENER(close); DEFINE_ATTRIBUTE_EVENT_LISTENER(terminate);
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.idl b/third_party/WebKit/Source/modules/presentation/PresentationConnection.idl index a768d6d..ca7838e 100644 --- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.idl +++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.idl
@@ -17,7 +17,6 @@ readonly attribute PresentationConnectionState state; [MeasureAs=PresentationConnectionClose] void close(); [MeasureAs=PresentationConnectionTerminate] void terminate(); - [DeprecateAs=PresentationConnectionStateChangeEventListener] attribute EventHandler onstatechange; attribute EventHandler onconnect; attribute EventHandler onclose; attribute EventHandler onterminate;
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp index 434a9c5e..13af0af4 100644 --- a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp +++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
@@ -30,6 +30,7 @@ #include "modules/webdatabase/DatabaseTracker.h" +#include "core/dom/Document.h" #include "core/dom/ExecutionContext.h" #include "core/dom/ExecutionContextTask.h" #include "modules/webdatabase/Database.h" @@ -209,6 +210,23 @@ (*it)->getDatabaseContext()->getExecutionContext()->postTask(BLINK_FROM_HERE, CloseOneDatabaseImmediatelyTask::create(originString, name, *it)); } +void DatabaseTracker::forEachOpenDatabaseInPage(Page* page, PassOwnPtr<DatabaseCallback> callback) +{ + MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard); + if (!m_openDatabaseMap) + return; + for (auto& originMap : *m_openDatabaseMap) { + for (auto& nameDatabaseSet : *originMap.value) { + for (Database* database : *nameDatabaseSet.value) { + ExecutionContext* context = database->getExecutionContext(); + ASSERT(context->isDocument()); + if (toDocument(context)->frame()->page() == page) + (*callback)(database); + } + } + } +} + void DatabaseTracker::closeOneDatabaseImmediately(const String& originString, const String& name, Database* database) { // First we have to confirm the 'database' is still in our collection.
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h index 9b6059ee..93b3f2f 100644 --- a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h +++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h
@@ -32,6 +32,7 @@ #include "modules/ModulesExport.h" #include "modules/webdatabase/DatabaseError.h" #include "platform/heap/Handle.h" +#include "wtf/Functional.h" #include "wtf/HashMap.h" #include "wtf/HashSet.h" #include "wtf/ThreadingPrimitives.h" @@ -42,6 +43,7 @@ class Database; class DatabaseContext; +class Page; class SecurityOrigin; class MODULES_EXPORT DatabaseTracker { @@ -65,6 +67,9 @@ void closeDatabasesImmediately(SecurityOrigin*, const String& name); + using DatabaseCallback = Function<void(Database*)>; + void forEachOpenDatabaseInPage(Page*, PassOwnPtr<DatabaseCallback>); + void prepareToOpenDatabase(Database*); void failedToOpenDatabase(Database*);
diff --git a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp index 69ff657..cf8cf30 100644 --- a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp +++ b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.cpp
@@ -35,6 +35,7 @@ #include "core/page/Page.h" #include "modules/webdatabase/Database.h" #include "modules/webdatabase/DatabaseClient.h" +#include "modules/webdatabase/DatabaseTracker.h" #include "modules/webdatabase/InspectorDatabaseResource.h" #include "modules/webdatabase/SQLError.h" #include "modules/webdatabase/SQLResultSet.h" @@ -217,6 +218,11 @@ } // namespace +void InspectorDatabaseAgent::registerDatabaseOnCreation(blink::Database* database) +{ + didOpenDatabase(database, database->getSecurityOrigin()->host(), database->stringIdentifier(), database->version()); +} + void InspectorDatabaseAgent::didOpenDatabase(blink::Database* database, const String& domain, const String& name, const String& version) { if (InspectorDatabaseResource* resource = findByFileName(database->fileName())) { @@ -246,6 +252,7 @@ , m_enabled(false) { DatabaseClient::fromPage(page)->setInspectorAgent(this); + DatabaseTracker::tracker().forEachOpenDatabaseInPage(m_page, bind<blink::Database*>(&InspectorDatabaseAgent::registerDatabaseOnCreation, this)); } InspectorDatabaseAgent::~InspectorDatabaseAgent()
diff --git a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h index e5c19e785..fed8196 100644 --- a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h +++ b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h
@@ -67,6 +67,7 @@ void didOpenDatabase(blink::Database*, const String& domain, const String& name, const String& version); private: explicit InspectorDatabaseAgent(Page*); + void registerDatabaseOnCreation(blink::Database*); blink::Database* databaseForId(const String& databaseId); InspectorDatabaseResource* findByFileName(const String& fileName);
diff --git a/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp b/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp index 3c7c362..f9168f4 100644 --- a/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp +++ b/third_party/WebKit/Source/platform/PartitionAllocMemoryDumpProvider.cpp
@@ -112,17 +112,20 @@ if (m_isHeapProfilingEnabled) { // Overhead should always be reported, regardless of light vs. heavy. base::trace_event::TraceEventMemoryOverhead overhead; - base::hash_map<base::trace_event::AllocationContext, size_t> bytesByContext; + base::hash_map<base::trace_event::AllocationContext, base::trace_event::AllocationMetrics> metricsByContext; { MutexLocker locker(m_allocationRegisterMutex); // Dump only the overhead estimation in non-detailed dumps. if (levelOfDetail == WebMemoryDumpLevelOfDetail::Detailed) { - for (const auto& allocSize : *m_allocationRegister) - bytesByContext[allocSize.context] += allocSize.size; + for (const auto& allocSize : *m_allocationRegister) { + base::trace_event::AllocationMetrics& metrics = metricsByContext[allocSize.context]; + metrics.size += allocSize.size; + metrics.count++; + } } m_allocationRegister->EstimateTraceMemoryOverhead(&overhead); } - memoryDump->dumpHeapUsage(bytesByContext, overhead, "partition_alloc"); + memoryDump->dumpHeapUsage(metricsByContext, overhead, "partition_alloc"); } PartitionStatsDumperImpl partitionStatsDumper(memoryDump, levelOfDetail);
diff --git a/third_party/WebKit/Source/platform/blink_platform.gypi b/third_party/WebKit/Source/platform/blink_platform.gypi index 88fd03b..2069e46e 100644 --- a/third_party/WebKit/Source/platform/blink_platform.gypi +++ b/third_party/WebKit/Source/platform/blink_platform.gypi
@@ -1056,6 +1056,7 @@ 'v8_inspector/ScriptBreakpoint.h', 'v8_inspector/RemoteObjectId.cpp', 'v8_inspector/RemoteObjectId.h', + 'v8_inspector/V8Compat.h', 'v8_inspector/V8DebuggerAgentImpl.cpp', 'v8_inspector/V8DebuggerAgentImpl.h', 'v8_inspector/V8DebuggerImpl.cpp',
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp index 451320e..40d36946 100644 --- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp +++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
@@ -549,13 +549,34 @@ // to avoid constructing the rect unnecessarily. ASSERT(isTrackingPaintInvalidations()); + Vector<PaintInvalidationInfo>& infos = paintInvalidationTrackingMap().add(this, Vector<PaintInvalidationInfo>()).storedValue->value; + // Omit the entry for invalidateDisplayItemClient() if the last entry is for the same client. + // This is to avoid duplicated entries for setNeedsDisplayInRect() and invalidateDisplayItemClient(). + if (rect.isEmpty() && !infos.isEmpty() && infos.last().client == &client) + return; + PaintInvalidationInfo info = { &client, client.debugName(), rect, reason }; - paintInvalidationTrackingMap().add(this, Vector<PaintInvalidationInfo>()).storedValue->value.append(info); + infos.append(info); } static bool comparePaintInvalidationInfo(const PaintInvalidationInfo& a, const PaintInvalidationInfo& b) { - return codePointCompareLessThan(a.clientDebugName, b.clientDebugName); + // Sort by rect first, bigger rects before smaller ones. + if (a.rect.width() != b.rect.width()) + return a.rect.width() > b.rect.width(); + if (a.rect.height() != b.rect.height()) + return a.rect.height() > b.rect.height(); + if (a.rect.x() != b.rect.x()) + return a.rect.x() > b.rect.x(); + if (a.rect.y() != b.rect.y()) + return a.rect.y() > b.rect.y(); + + // Then compare clientDebugName, in alphabetic order. + int nameCompareResult = codePointCompare(a.clientDebugName, b.clientDebugName); + if (nameCompareResult != 0) + return nameCompareResult < 0; + + return a.reason < b.reason; } template <typename T> @@ -710,21 +731,13 @@ if (flags & LayerTreeIncludesPaintInvalidations) { Vector<PaintInvalidationInfo>& infos = it->value; if (!infos.isEmpty()) { - std::stable_sort(infos.begin(), infos.end(), &comparePaintInvalidationInfo); + std::sort(infos.begin(), infos.end(), &comparePaintInvalidationInfo); RefPtr<JSONArray> paintInvalidationsJSON = JSONArray::create(); - const DisplayItemClient* lastDisplayItemClientWithRect = nullptr; for (auto& info : infos) { RefPtr<JSONObject> infoJSON = JSONObject::create(); - if (info.rect.isEmpty()) { - // Entry with empty rect is from invalidateDisplayItemClient(). - // Skip the entry if the client is the same as the previous setNeedsDisplayInRect(). - if (info.client == lastDisplayItemClientWithRect) - continue; - } else { - lastDisplayItemClientWithRect = info.client; - } infoJSON->setString("object", info.clientDebugName); - infoJSON->setArray("rect", rectAsJSONArray(info.rect)); + if (!info.rect.isEmpty()) + infoJSON->setArray("rect", rectAsJSONArray(info.rect)); infoJSON->setString("reason", paintInvalidationReasonToString(info.reason)); paintInvalidationsJSON->pushObject(infoJSON); }
diff --git a/third_party/WebKit/Source/platform/graphics/skia/ImagePixelLocker.cpp b/third_party/WebKit/Source/platform/graphics/skia/ImagePixelLocker.cpp index 945da61..70b0511 100644 --- a/third_party/WebKit/Source/platform/graphics/skia/ImagePixelLocker.cpp +++ b/third_party/WebKit/Source/platform/graphics/skia/ImagePixelLocker.cpp
@@ -28,31 +28,29 @@ SkColorType colorType) : m_image(image) { - SkImageInfo info; - size_t rowBytes; - // If the image has in-RAM pixels and their format matches, use them directly. // TODO(fmalita): All current clients expect packed pixel rows. Maybe we could update them // to support arbitrary rowBytes, and relax the check below. - m_pixels = m_image->peekPixels(&info, &rowBytes); + SkPixmap pixmap; + m_image->peekPixels(&pixmap); + m_pixels = pixmap.addr(); if (m_pixels - && infoIsCompatible(info, alphaType, colorType) - && rowBytes == info.minRowBytes()) { + && infoIsCompatible(pixmap.info(), alphaType, colorType) + && pixmap.rowBytes() == pixmap.info().minRowBytes()) { return; } m_pixels = nullptr; // No luck, we need to read the pixels into our local buffer. - info = SkImageInfo::Make(m_image->width(), m_image->height(), colorType, alphaType); - rowBytes = info.minRowBytes(); + SkImageInfo info = SkImageInfo::Make(m_image->width(), m_image->height(), colorType, alphaType); + size_t rowBytes = info.minRowBytes(); size_t size = info.getSafeSize(rowBytes); if (0 == size) return; m_pixelStorage.reset(size); // this will throw on failure - - SkPixmap pixmap(info, m_pixelStorage.get(), rowBytes); + pixmap.reset(info, m_pixelStorage.get(), rowBytes); if (!m_image->readPixels(pixmap, 0, 0)) return;
diff --git a/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp b/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp index eea1e74..a0f7556 100644 --- a/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp +++ b/third_party/WebKit/Source/platform/heap/BlinkGCMemoryDumpProvider.cpp
@@ -64,16 +64,19 @@ if (m_isHeapProfilingEnabled) { // Overhead should always be reported, regardless of light vs. heavy. base::trace_event::TraceEventMemoryOverhead overhead; - base::hash_map<base::trace_event::AllocationContext, size_t> bytesByContext; + base::hash_map<base::trace_event::AllocationContext, base::trace_event::AllocationMetrics> metricsByContext; { MutexLocker locker(m_allocationRegisterMutex); if (levelOfDetail == WebMemoryDumpLevelOfDetail::Detailed) { - for (const auto& allocSize : *m_allocationRegister) - bytesByContext[allocSize.context] += allocSize.size; + for (const auto& allocSize : *m_allocationRegister) { + base::trace_event::AllocationMetrics& metrics = metricsByContext[allocSize.context]; + metrics.size += allocSize.size; + metrics.count++; + } } m_allocationRegister->EstimateTraceMemoryOverhead(&overhead); } - memoryDump->dumpHeapUsage(bytesByContext, overhead, "blink_gc"); + memoryDump->dumpHeapUsage(metricsByContext, overhead, "blink_gc"); } // Merge all dumps collected by ThreadHeap::collectGarbage.
diff --git a/third_party/WebKit/Source/platform/heap/InlinedGlobalMarkingVisitor.h b/third_party/WebKit/Source/platform/heap/InlinedGlobalMarkingVisitor.h index c13405a4..35778f3 100644 --- a/third_party/WebKit/Source/platform/heap/InlinedGlobalMarkingVisitor.h +++ b/third_party/WebKit/Source/platform/heap/InlinedGlobalMarkingVisitor.h
@@ -16,11 +16,7 @@ friend class MarkingVisitorImpl<InlinedGlobalMarkingVisitor>; using Impl = MarkingVisitorImpl<InlinedGlobalMarkingVisitor>; - explicit InlinedGlobalMarkingVisitor(Visitor* visitor) - : m_visitor(visitor) - { - ASSERT(visitor->getMarkingMode() == Visitor::GlobalMarking); - } + InlinedGlobalMarkingVisitor() { } // Hack to unify interface to visitor->trace(). // Without this hack, we need to use visitor.trace() for @@ -48,7 +44,6 @@ Helper::template registerWeakMembers<T, method>(obj); } - Visitor* getUninlined() { return m_visitor; } protected: // Methods to be called from MarkingVisitorImpl. @@ -60,7 +55,7 @@ inline Visitor::MarkingMode getMarkingMode() const { - return m_visitor->getMarkingMode(); + return Visitor::GlobalMarking; } private: @@ -68,8 +63,6 @@ { return *static_cast<InlinedGlobalMarkingVisitor*>(helper); } - - Visitor* m_visitor; }; inline void GarbageCollectedMixin::trace(InlinedGlobalMarkingVisitor)
diff --git a/third_party/WebKit/Source/platform/heap/TraceTraits.h b/third_party/WebKit/Source/platform/heap/TraceTraits.h index acef177..b59cd3e9 100644 --- a/third_party/WebKit/Source/platform/heap/TraceTraits.h +++ b/third_party/WebKit/Source/platform/heap/TraceTraits.h
@@ -173,7 +173,7 @@ static_assert(WTF::NeedsTracing<T>::value || WTF::IsWeak<T>::value, "T should be traced"); if (visitor->getMarkingMode() == Visitor::GlobalMarking) { // Switch to inlined global marking dispatch. - static_cast<T*>(self)->trace(InlinedGlobalMarkingVisitor(visitor)); + static_cast<T*>(self)->trace(InlinedGlobalMarkingVisitor()); } else { static_cast<T*>(self)->trace(visitor); }
diff --git a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js b/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js index 62a95a3..9e007c1 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js +++ b/third_party/WebKit/Source/platform/v8_inspector/DebuggerScript.js
@@ -598,7 +598,11 @@ */ function contextId() { - var context = ensureFuncMirror().context(); + var mirror = ensureFuncMirror(); + // Old V8 do not have context() function on these objects + if (!mirror.context) + return DebuggerScript._executionContextId(mirror.script().value().context_data); + var context = mirror.context(); if (context) return DebuggerScript._executionContextId(context.data()); return 0;
diff --git a/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.cpp b/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.cpp index 395c11b..1119b26 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.cpp
@@ -38,6 +38,7 @@ #include "platform/v8_inspector/InjectedScriptSource.h" #include "platform/v8_inspector/InspectedContext.h" #include "platform/v8_inspector/RemoteObjectId.h" +#include "platform/v8_inspector/V8Compat.h" #include "platform/v8_inspector/V8DebuggerImpl.h" #include "platform/v8_inspector/V8FunctionCall.h" #include "platform/v8_inspector/V8InjectedScriptHost.h" @@ -266,14 +267,9 @@ void InjectedScript::releaseObjectGroup(const String16& objectGroup) { - v8::HandleScope handles(m_context->isolate()); m_native->releaseObjectGroup(objectGroup); - if (objectGroup == "console") { - V8FunctionCall function(m_context->debugger(), m_context->context(), v8Value(), "clearLastEvaluationResult"); - bool hadException = false; - function.call(hadException); - ASSERT(!hadException); - } + if (objectGroup == "console") + m_lastEvaluationResult.Reset(); } void InjectedScript::setCustomObjectFormatterEnabled(bool enabled) @@ -299,13 +295,11 @@ return m_value.Get(m_context->isolate()); } -bool InjectedScript::setLastEvaluationResult(ErrorString* errorString, v8::Local<v8::Value> value) +v8::Local<v8::Value> InjectedScript::lastEvaluationResult() const { - V8FunctionCall function(m_context->debugger(), m_context->context(), v8Value(), "setLastEvaluationResult"); - function.appendArgument(value); - bool hadException = false; - function.call(hadException, false); - return !hasInternalError(errorString, hadException); + if (m_lastEvaluationResult.IsEmpty()) + return v8::Undefined(m_context->isolate()); + return m_lastEvaluationResult.Get(m_context->isolate()); } v8::MaybeLocal<v8::Value> InjectedScript::resolveCallArgument(ErrorString* errorString, protocol::Runtime::CallArgument* callArgument) @@ -365,8 +359,8 @@ OwnPtr<RemoteObject> remoteObject = wrapObject(errorString, resultValue, objectGroup, returnByValue, generatePreview); if (!remoteObject) return; - if (objectGroup == "console" && !setLastEvaluationResult(errorString, resultValue)) - return; + if (objectGroup == "console") + m_lastEvaluationResult.Reset(m_context->isolate(), resultValue); *result = remoteObject.release(); if (wasThrown) *wasThrown = false; @@ -416,7 +410,10 @@ { ASSERT(m_injectedScript && !m_context.IsEmpty()); V8FunctionCall function(m_debugger, m_context, m_injectedScript->v8Value(), "commandLineAPI"); - return installGlobalObjectExtension(function); + v8::Local<v8::Object> extensionObject; + if (!installGlobalObjectExtension(function).ToLocal(&extensionObject)) + return false; + return extensionObject->Set(m_context, toV8StringInternalized(m_context->GetIsolate(), "$_"), m_injectedScript->lastEvaluationResult()).FromMaybe(false); } bool InjectedScript::Scope::installRemoteObjectAPI(const String16& objectGroupName) @@ -424,16 +421,17 @@ ASSERT(m_injectedScript && !m_context.IsEmpty()); V8FunctionCall function(m_debugger, m_context, m_injectedScript->v8Value(), "remoteObjectAPI"); function.appendArgument(objectGroupName); - return installGlobalObjectExtension(function); + v8::Local<v8::Object> extensionObject; + return installGlobalObjectExtension(function).ToLocal(&extensionObject); } -bool InjectedScript::Scope::installGlobalObjectExtension(V8FunctionCall& function) +v8::MaybeLocal<v8::Object> InjectedScript::Scope::installGlobalObjectExtension(V8FunctionCall& function) { bool hadException = false; v8::Local<v8::Value> extension = function.call(hadException, false); - if (hadException || extension.IsEmpty()) { + if (hadException || extension.IsEmpty() || !extension->IsObject()) { *m_errorString = "Internal error"; - return false; + return v8::MaybeLocal<v8::Object>(); } ASSERT(m_global.IsEmpty()); @@ -441,11 +439,11 @@ v8::Local<v8::Object> global = m_context->Global(); if (!global->Set(m_context, m_extensionSymbol, extension).FromMaybe(false)) { *m_errorString = "Internal error"; - return false; + return v8::MaybeLocal<v8::Object>(); } m_global = global; - return true; + return extension.As<v8::Object>(); } void InjectedScript::Scope::ignoreExceptionsAndMuteConsole()
diff --git a/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.h b/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.h index e05aa97..84350fd7 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.h +++ b/third_party/WebKit/Source/platform/v8_inspector/InjectedScript.h
@@ -110,7 +110,7 @@ private: void cleanup(); V8DebuggerImpl::PauseOnExceptionsState setPauseOnExceptionsState(V8DebuggerImpl::PauseOnExceptionsState); - bool installGlobalObjectExtension(V8FunctionCall&); + v8::MaybeLocal<v8::Object> installGlobalObjectExtension(V8FunctionCall&); v8::HandleScope m_handleScope; v8::TryCatch m_tryCatch; @@ -160,12 +160,13 @@ private: InjectedScript(InspectedContext*, v8::Local<v8::Object>, PassOwnPtr<InjectedScriptNative>); bool canAccessInspectedWindow() const; - bool setLastEvaluationResult(ErrorString*, v8::Local<v8::Value>); + v8::Local<v8::Value> lastEvaluationResult() const; v8::Local<v8::Value> v8Value() const; v8::MaybeLocal<v8::Value> wrapValue(ErrorString*, v8::Local<v8::Value>, const String16& groupName, bool forceValueType, bool generatePreview) const; InspectedContext* m_context; v8::Global<v8::Value> m_value; + v8::Global<v8::Value> m_lastEvaluationResult; OwnPtr<InjectedScriptNative> m_native; };
diff --git a/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptSource.js b/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptSource.js index 88b8210..3673b57 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptSource.js +++ b/third_party/WebKit/Source/platform/v8_inspector/InjectedScriptSource.js
@@ -419,19 +419,6 @@ return "{\"injectedScriptId\":" + injectedScriptId + ",\"id\":" + id + "}"; }, - clearLastEvaluationResult: function() - { - delete this._lastResult; - }, - - /** - * @param {*} result - */ - setLastEvaluationResult: function(result) - { - this._lastResult = result; - }, - /** * @param {!Object} object * @param {string} objectGroupName @@ -1185,9 +1172,6 @@ var member = "$" + i; this[member] = bind(commandLineAPIImpl._inspectedObject, commandLineAPIImpl, i); } - - this.$_ = injectedScript._lastResult; - this.__proto__ = null; }
diff --git a/third_party/WebKit/Source/platform/v8_inspector/InspectorWrapper.cpp b/third_party/WebKit/Source/platform/v8_inspector/InspectorWrapper.cpp index 7d60b126..eae983970 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/InspectorWrapper.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/InspectorWrapper.cpp
@@ -4,6 +4,7 @@ #include "platform/v8_inspector/InspectorWrapper.h" +#include "platform/v8_inspector/V8Compat.h" #include "platform/v8_inspector/public/V8DebuggerClient.h" #include <v8-debug.h>
diff --git a/third_party/WebKit/Source/platform/v8_inspector/JavaScriptCallFrame.cpp b/third_party/WebKit/Source/platform/v8_inspector/JavaScriptCallFrame.cpp index 0769ada..1db8df4 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/JavaScriptCallFrame.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/JavaScriptCallFrame.cpp
@@ -30,6 +30,7 @@ #include "platform/v8_inspector/JavaScriptCallFrame.h" +#include "platform/v8_inspector/V8Compat.h" #include "platform/v8_inspector/V8StringUtil.h" #include <v8-debug.h>
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8Compat.h b/third_party/WebKit/Source/platform/v8_inspector/V8Compat.h new file mode 100644 index 0000000..17d104f --- /dev/null +++ b/third_party/WebKit/Source/platform/v8_inspector/V8Compat.h
@@ -0,0 +1,28 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8Compat_h +#define V8Compat_h + +#include <v8.h> + +#if V8_MAJOR_VERSION < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2) +namespace v8 { + +// In standalone V8 inspector this is expected to be noop anyways... +class V8_EXPORT MicrotasksScope { +public: + enum Type { kRunMicrotasks, kDoNotRunMicrotasks }; + + MicrotasksScope(Isolate* isolate, Type type) + { + // No-op + } +}; + +} // namespace v8 + +#endif // V8_MAJOR_VERSION < 5 || (V8_MAJOR_VERSION == 5 && V8_MINOR_VERSION < 2) + +#endif // V8Compat_h
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp index 1a3904e..5e3f3d7 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp
@@ -35,6 +35,7 @@ #include "platform/v8_inspector/DebuggerScript.h" #include "platform/v8_inspector/InspectedContext.h" #include "platform/v8_inspector/ScriptBreakpoint.h" +#include "platform/v8_inspector/V8Compat.h" #include "platform/v8_inspector/V8DebuggerAgentImpl.h" #include "platform/v8_inspector/V8InspectorSessionImpl.h" #include "platform/v8_inspector/V8RuntimeAgentImpl.h" @@ -273,11 +274,6 @@ v8::Debug::CancelDebugBreak(m_isolate); } -bool V8DebuggerImpl::pausingOnNextStatement() -{ - return v8::Debug::CheckDebugBreak(m_isolate); -} - bool V8DebuggerImpl::canBreakProgram() { if (!m_breakpointsActivated)
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.h b/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.h index 8244e4b..1d2059e 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.h +++ b/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.h
@@ -71,7 +71,6 @@ PauseOnExceptionsState getPauseOnExceptionsState(); void setPauseOnExceptionsState(PauseOnExceptionsState); void setPauseOnNextStatement(bool); - bool pausingOnNextStatement(); bool canBreakProgram(); void breakProgram(); void continueProgram();
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8InjectedScriptHost.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8InjectedScriptHost.cpp index 623300e..6a8edf1 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/V8InjectedScriptHost.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/V8InjectedScriptHost.cpp
@@ -10,6 +10,7 @@ #include "platform/v8_inspector/InjectedScriptHost.h" #include "platform/v8_inspector/InspectorWrapper.h" #include "platform/v8_inspector/JavaScriptCallFrame.h" +#include "platform/v8_inspector/V8Compat.h" #include "platform/v8_inspector/V8DebuggerImpl.h" #include "platform/v8_inspector/V8StringUtil.h" #include "platform/v8_inspector/public/V8DebuggerClient.h"
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8Regex.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8Regex.cpp index 1f5c0bb..1829645 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/V8Regex.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/V8Regex.cpp
@@ -4,6 +4,7 @@ #include "platform/v8_inspector/V8Regex.h" +#include "platform/v8_inspector/V8Compat.h" #include "platform/v8_inspector/V8DebuggerImpl.h" #include "platform/v8_inspector/V8StringUtil.h" #include "platform/v8_inspector/public/V8DebuggerClient.h"
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp index d1b70a4..fe244fa 100644 --- a/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp +++ b/third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp
@@ -238,22 +238,12 @@ InjectedScript::ObjectScope scope(errorString, m_debugger, m_session->contextGroupId(), objectId); if (!scope.initialize()) return; - bool pausingOnNextStatement = m_debugger->pausingOnNextStatement(); - if (pausingOnNextStatement) - m_debugger->setPauseOnNextStatement(false); scope.injectedScript()->releaseObject(objectId); - if (pausingOnNextStatement) - m_debugger->setPauseOnNextStatement(true); } void V8RuntimeAgentImpl::releaseObjectGroup(ErrorString*, const String16& objectGroup) { - bool pausingOnNextStatement = m_debugger->pausingOnNextStatement(); - if (pausingOnNextStatement) - m_debugger->setPauseOnNextStatement(false); m_session->releaseObjectGroup(objectGroup); - if (pausingOnNextStatement) - m_debugger->setPauseOnNextStatement(true); } void V8RuntimeAgentImpl::run(ErrorString* errorString)
diff --git a/third_party/WebKit/Source/platform/web_process_memory_dump_impl.cc b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.cc index 3c2c2c8..927b2ce8 100644 --- a/third_party/WebKit/Source/platform/web_process_memory_dump_impl.cc +++ b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.cc
@@ -168,15 +168,15 @@ } void WebProcessMemoryDumpImpl::dumpHeapUsage( - const base::hash_map<base::trace_event::AllocationContext, size_t>& - bytes_by_context, + const base::hash_map<base::trace_event::AllocationContext, + base::trace_event::AllocationMetrics>& metrics_by_context, base::trace_event::TraceEventMemoryOverhead& overhead, const char* allocator_name) { - if (!bytes_by_context.empty()) { + if (!metrics_by_context.empty()) { scoped_refptr<base::trace_event::MemoryDumpSessionState> session_state = process_memory_dump_->session_state(); std::unique_ptr<base::trace_event::TracedValue> heap_dump = ExportHeapDump( - bytes_by_context, session_state->stack_frame_deduplicator(), + metrics_by_context, session_state->stack_frame_deduplicator(), session_state->type_name_deduplicator()); process_memory_dump_->AddHeapDump(allocator_name, std::move(heap_dump)); }
diff --git a/third_party/WebKit/Source/platform/web_process_memory_dump_impl.h b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.h index e1ee7bf..b885772 100644 --- a/third_party/WebKit/Source/platform/web_process_memory_dump_impl.h +++ b/third_party/WebKit/Source/platform/web_process_memory_dump_impl.h
@@ -78,8 +78,8 @@ base::DiscardableMemory* discardable) override; void dumpHeapUsage( - const base::hash_map<base::trace_event::AllocationContext, size_t>& - bytes_by_context, + const base::hash_map<base::trace_event::AllocationContext, base::trace_event::AllocationMetrics>& + metrics_by_context, base::trace_event::TraceEventMemoryOverhead& overhead, const char* allocator_name) override;
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.cpp b/third_party/WebKit/Source/web/ChromeClientImpl.cpp index f8530b50..f22a425 100644 --- a/third_party/WebKit/Source/web/ChromeClientImpl.cpp +++ b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
@@ -911,11 +911,16 @@ void ChromeClientImpl::setEventListenerProperties(WebEventListenerClass eventClass, WebEventListenerProperties properties) { - if (eventClass == WebEventListenerClass::Touch) - m_webView->hasTouchEventHandlers(properties != WebEventListenerProperties::Nothing); - - if (WebLayerTreeView* treeView = m_webView->layerTreeView()) + if (WebLayerTreeView* treeView = m_webView->layerTreeView()) { treeView->setEventListenerProperties(eventClass, properties); + if (eventClass == WebEventListenerClass::TouchStartOrMove) { + m_webView->hasTouchEventHandlers(properties != WebEventListenerProperties::Nothing || eventListenerProperties(WebEventListenerClass::TouchEndOrCancel) != WebEventListenerProperties::Nothing); + } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) { + m_webView->hasTouchEventHandlers(properties != WebEventListenerProperties::Nothing || eventListenerProperties(WebEventListenerClass::TouchStartOrMove) != WebEventListenerProperties::Nothing); + } + } else { + m_webView->hasTouchEventHandlers(true); + } } WebEventListenerProperties ChromeClientImpl::eventListenerProperties(WebEventListenerClass eventClass) const @@ -925,13 +930,13 @@ return WebEventListenerProperties::Nothing; } -void ChromeClientImpl::setHaveScrollEventHandlers(bool hasEventHandlers) +void ChromeClientImpl::setHasScrollEventHandlers(bool hasEventHandlers) { if (WebLayerTreeView* treeView = m_webView->layerTreeView()) treeView->setHaveScrollEventHandlers(hasEventHandlers); } -bool ChromeClientImpl::haveScrollEventHandlers() const +bool ChromeClientImpl::hasScrollEventHandlers() const { if (WebLayerTreeView* treeView = m_webView->layerTreeView()) return treeView->haveScrollEventHandlers();
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.h b/third_party/WebKit/Source/web/ChromeClientImpl.h index 0fce6d5..44c98d47 100644 --- a/third_party/WebKit/Source/web/ChromeClientImpl.h +++ b/third_party/WebKit/Source/web/ChromeClientImpl.h
@@ -118,8 +118,8 @@ Cursor lastSetCursorForTesting() const override; void setEventListenerProperties(WebEventListenerClass, WebEventListenerProperties) override; WebEventListenerProperties eventListenerProperties(WebEventListenerClass) const override; - void setHaveScrollEventHandlers(bool hasEventHandlers) override; - bool haveScrollEventHandlers() const override; + void setHasScrollEventHandlers(bool hasEventHandlers) override; + bool hasScrollEventHandlers() const override; void setTouchAction(TouchAction) override; // Pass 0 as the GraphicsLayer to detatch the root layer.
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp index 29d5b18..40b669c 100644 --- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp +++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
@@ -100,6 +100,17 @@ namespace blink { +namespace { + +bool isMainFrame(WebLocalFrameImpl* frame) +{ + // TODO(dgozman): sometimes view->mainFrameImpl() does return null, even though |frame| is meant to be main frame. + // See http://crbug.com/526162. + return frame->viewImpl() && !frame->parent(); +} + +} + class ClientMessageLoopAdapter : public MainThreadDebugger::ClientMessageLoop { public: ~ClientMessageLoopAdapter() override @@ -268,29 +279,15 @@ // static WebDevToolsAgentImpl* WebDevToolsAgentImpl::create(WebLocalFrameImpl* frame, WebDevToolsAgentClient* client) { - WebViewImpl* view = frame->viewImpl(); - // TODO(dgozman): sometimes view->mainFrameImpl() does return null, even though |frame| is meant to be main frame. - // See http://crbug.com/526162. - bool isMainFrame = view && !frame->parent(); - if (!isMainFrame) { - WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, nullptr); + if (!isMainFrame(frame)) { + WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, nullptr, false); if (frame->frameWidget()) agent->layerTreeViewChanged(toWebFrameWidgetImpl(frame->frameWidget())->layerTreeView()); return agent; } - WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, InspectorOverlay::create(view)); - // TODO(dgozman): we should actually pass the view instead of frame, but during - // remote->local transition we cannot access mainFrameImpl() yet, so we have to store the - // frame which will become the main frame later. - agent->m_agents.append(InspectorRenderingAgent::create(frame, agent->m_overlay.get())); - agent->m_agents.append(InspectorEmulationAgent::create(frame, agent)); - // TODO(dgozman): migrate each of the following agents to frame once module is ready. - agent->m_agents.append(InspectorDatabaseAgent::create(view->page())); - agent->m_agents.append(DeviceOrientationInspectorAgent::create(view->page())); - agent->m_agents.append(InspectorAccessibilityAgent::create(view->page())); - agent->m_agents.append(InspectorDOMStorageAgent::create(view->page())); - agent->m_agents.append(InspectorCacheStorageAgent::create()); + WebViewImpl* view = frame->viewImpl(); + WebDevToolsAgentImpl* agent = new WebDevToolsAgentImpl(frame, client, InspectorOverlay::create(view), true); agent->layerTreeViewChanged(view->layerTreeView()); return agent; } @@ -298,7 +295,8 @@ WebDevToolsAgentImpl::WebDevToolsAgentImpl( WebLocalFrameImpl* webLocalFrameImpl, WebDevToolsAgentClient* client, - InspectorOverlay* overlay) + InspectorOverlay* overlay, + bool includeViewAgents) : m_client(client) , m_webLocalFrameImpl(webLocalFrameImpl) , m_attached(false) @@ -316,6 +314,7 @@ , m_tracingAgent(nullptr) , m_agents(m_instrumentingAgents.get()) , m_deferredAgentsInitialized(false) + , m_includeViewAgents(includeViewAgents) , m_sessionId(0) , m_stateMuted(false) , m_layerTreeId(0) @@ -447,6 +446,22 @@ runtimeAgent->setClearConsoleCallback(bind<>(&InspectorConsoleAgent::clearAllMessages, pageConsoleAgent)); m_tracingAgent->setLayerTreeId(m_layerTreeId); + + if (m_includeViewAgents) { + // TODO(dgozman): we should actually pass the view instead of frame, but during + // remote->local transition we cannot access mainFrameImpl() yet, so we have to store the + // frame which will become the main frame later. + m_agents.append(InspectorRenderingAgent::create(m_webLocalFrameImpl, m_overlay.get())); + m_agents.append(InspectorEmulationAgent::create(m_webLocalFrameImpl, this)); + // TODO(dgozman): migrate each of the following agents to frame once module is ready. + Page* page = m_webLocalFrameImpl->viewImpl()->page(); + m_agents.append(InspectorDatabaseAgent::create(page)); + m_agents.append(DeviceOrientationInspectorAgent::create(page)); + m_agents.append(InspectorAccessibilityAgent::create(page)); + m_agents.append(InspectorDOMStorageAgent::create(page)); + m_agents.append(InspectorCacheStorageAgent::create()); + } + if (m_overlay) m_overlay->init(cssAgent, debuggerAgent, m_domAgent); }
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h index 406919dc..0ff7565 100644 --- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h +++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
@@ -110,7 +110,7 @@ WebString evaluateInWebInspectorOverlay(const WebString& script) override; private: - WebDevToolsAgentImpl(WebLocalFrameImpl*, WebDevToolsAgentClient*, InspectorOverlay*); + WebDevToolsAgentImpl(WebLocalFrameImpl*, WebDevToolsAgentClient*, InspectorOverlay*, bool includeViewAgents); // InspectorTracingAgent::Client implementation. void enableTracing(const WTF::String& categoryFilter) override; @@ -164,6 +164,7 @@ OwnPtr<protocol::Frontend> m_inspectorFrontend; InspectorAgentRegistry m_agents; bool m_deferredAgentsInitialized; + bool m_includeViewAgents; typedef Vector<std::pair<int, OwnPtr<protocol::Value>>> NotificationQueue; NotificationQueue m_notificationQueue;
diff --git a/third_party/WebKit/Source/web/WebMutationEvent.cpp b/third_party/WebKit/Source/web/WebMutationEvent.cpp deleted file mode 100644 index ce0cdce..0000000 --- a/third_party/WebKit/Source/web/WebMutationEvent.cpp +++ /dev/null
@@ -1,62 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "WebMutationEvent.h" - -#include "core/events/MutationEvent.h" - -namespace blink { - -WebNode WebMutationEvent::relatedNode() const -{ - return WebNode(constUnwrap<MutationEvent>()->relatedNode()); -} - -WebString WebMutationEvent::prevValue() const -{ - return WebString(constUnwrap<MutationEvent>()->prevValue()); -} - -WebString WebMutationEvent::newValue() const -{ - return WebString(constUnwrap<MutationEvent>()->newValue()); -} - -WebString WebMutationEvent::attrName() const -{ - return WebString(constUnwrap<MutationEvent>()->attrName()); -} - -WebMutationEvent::AttrChangeType WebMutationEvent::attrChange() const -{ - return static_cast<AttrChangeType>(constUnwrap<MutationEvent>()->attrChange()); -} - -} // namespace blink
diff --git a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp index 61a0bfa6..dad265f 100644 --- a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp +++ b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
@@ -165,10 +165,16 @@ void setEventListenerProperties(WebEventListenerClass eventClass, WebEventListenerProperties properties) override { - if (eventClass == WebEventListenerClass::Touch) - m_popup->widgetClient()->hasTouchEventHandlers(properties != WebEventListenerProperties::Nothing); - if (m_popup->m_layerTreeView) + if (m_popup->m_layerTreeView) { m_popup->m_layerTreeView->setEventListenerProperties(eventClass, properties); + if (eventClass == WebEventListenerClass::TouchStartOrMove) { + m_popup->widgetClient()->hasTouchEventHandlers(properties != WebEventListenerProperties::Nothing || eventListenerProperties(WebEventListenerClass::TouchEndOrCancel) != WebEventListenerProperties::Nothing); + } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) { + m_popup->widgetClient()->hasTouchEventHandlers(properties != WebEventListenerProperties::Nothing || eventListenerProperties(WebEventListenerClass::TouchStartOrMove) != WebEventListenerProperties::Nothing); + } + } else { + m_popup->widgetClient()->hasTouchEventHandlers(true); + } } WebEventListenerProperties eventListenerProperties(WebEventListenerClass eventClass) const override { @@ -177,13 +183,13 @@ return WebEventListenerProperties::Nothing; } - void setHaveScrollEventHandlers(bool hasEventHandlers) override + void setHasScrollEventHandlers(bool hasEventHandlers) override { if (m_popup->m_layerTreeView) m_popup->m_layerTreeView->setHaveScrollEventHandlers(hasEventHandlers); } - bool haveScrollEventHandlers() const override + bool hasScrollEventHandlers() const override { if (m_popup->m_layerTreeView) return m_popup->m_layerTreeView->haveScrollEventHandlers();
diff --git a/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp b/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp index eff5578..391f54e 100644 --- a/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp +++ b/third_party/WebKit/Source/web/WebPluginContainerImpl.cpp
@@ -534,9 +534,9 @@ if (FrameHost* frameHost = m_element->document().frameHost()) { EventHandlerRegistry& registry = frameHost->eventHandlerRegistry(); if (requestType != TouchEventRequestTypeNone && m_touchEventRequestType == TouchEventRequestTypeNone) - registry.didAddEventHandler(*m_element, EventHandlerRegistry::TouchEventBlocking); + registry.didAddEventHandler(*m_element, EventHandlerRegistry::TouchStartOrMoveEventBlocking); else if (requestType == TouchEventRequestTypeNone && m_touchEventRequestType != TouchEventRequestTypeNone) - registry.didRemoveEventHandler(*m_element, EventHandlerRegistry::TouchEventBlocking); + registry.didRemoveEventHandler(*m_element, EventHandlerRegistry::TouchStartOrMoveEventBlocking); } m_touchEventRequestType = requestType; }
diff --git a/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp b/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp index ddd5296f..5589109 100644 --- a/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp +++ b/third_party/WebKit/Source/web/WebSerializedScriptValue.cpp
@@ -45,7 +45,7 @@ WebSerializedScriptValue WebSerializedScriptValue::serialize(v8::Local<v8::Value> value) { TrackExceptionState exceptionState; - WebSerializedScriptValue serializedValue = SerializedScriptValueFactory::instance().create(v8::Isolate::GetCurrent(), value, nullptr, nullptr, exceptionState); + WebSerializedScriptValue serializedValue = SerializedScriptValueFactory::instance().create(v8::Isolate::GetCurrent(), value, nullptr, exceptionState); if (exceptionState.hadException()) return createInvalid(); return serializedValue;
diff --git a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp index 30d90e7..00047a3b 100644 --- a/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp +++ b/third_party/WebKit/Source/web/tests/ScrollingCoordinatorTest.cpp
@@ -128,7 +128,7 @@ WebLayer* rootScrollLayer = getRootScrollLayer(); ASSERT_TRUE(rootScrollLayer->scrollable()); ASSERT_FALSE(rootScrollLayer->shouldScrollOnMainThread()); - ASSERT_EQ(WebEventListenerProperties::Nothing, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::Touch)); + ASSERT_EQ(WebEventListenerProperties::Nothing, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::TouchStartOrMove)); ASSERT_EQ(WebEventListenerProperties::Nothing, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::MouseWheel)); } @@ -294,7 +294,7 @@ navigateTo(m_baseURL + "touch-event-handler.html"); forceFullCompositingUpdate(); - ASSERT_EQ(WebEventListenerProperties::Blocking, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::Touch)); + ASSERT_EQ(WebEventListenerProperties::Blocking, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::TouchStartOrMove)); } TEST_F(ScrollingCoordinatorTest, touchEventHandlerPassive) @@ -303,7 +303,7 @@ navigateTo(m_baseURL + "touch-event-handler-passive.html"); forceFullCompositingUpdate(); - ASSERT_EQ(WebEventListenerProperties::Passive, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::Touch)); + ASSERT_EQ(WebEventListenerProperties::Passive, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::TouchStartOrMove)); } TEST_F(ScrollingCoordinatorTest, touchEventHandlerBoth) @@ -312,7 +312,7 @@ navigateTo(m_baseURL + "touch-event-handler-both.html"); forceFullCompositingUpdate(); - ASSERT_EQ(WebEventListenerProperties::BlockingAndPassive, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::Touch)); + ASSERT_EQ(WebEventListenerProperties::BlockingAndPassive, webLayerTreeView()->eventListenerProperties(WebEventListenerClass::TouchStartOrMove)); } TEST_F(ScrollingCoordinatorTest, wheelEventHandler)
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp index 9dd1cc8..38472bf9 100644 --- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp +++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -2358,7 +2358,7 @@ std::string url = m_baseURL + "has_touch_event_handlers.html"; URLTestHelpers::registerMockedURLLoad(toKURL(url), "has_touch_event_handlers.html"); WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(url, true, 0, &client); - const EventHandlerRegistry::EventHandlerClass touchEvent = EventHandlerRegistry::TouchEventBlocking; + const EventHandlerRegistry::EventHandlerClass touchEvent = EventHandlerRegistry::TouchStartOrMoveEventBlocking; // The page is initialized with at least one no-handlers call. // In practice we get two such calls because WebViewHelper::initializeAndLoad first
diff --git a/third_party/WebKit/public/BUILD.gn b/third_party/WebKit/public/BUILD.gn index fd1e6e09..b44ddd7 100644 --- a/third_party/WebKit/public/BUILD.gn +++ b/third_party/WebKit/public/BUILD.gn
@@ -129,6 +129,9 @@ "//third_party/icu:icu_config", ] sources = blink_headers_values.blink_public_sources + deps = [ + ":generate_mojo_bindings", + ] } # GYP version: WebKit/public/blink_devtools.gyp:blink_devtools_frontend_resources @@ -209,3 +212,10 @@ ] } } + +group("generate_mojo_bindings") { + deps = [ + ":mojo_bindings__generator", + ":mojo_bindings_blink__generator", + ] +}
diff --git a/third_party/WebKit/public/platform/WebEventListenerProperties.h b/third_party/WebKit/public/platform/WebEventListenerProperties.h index 1b2d9a05..67a4667 100644 --- a/third_party/WebKit/public/platform/WebEventListenerProperties.h +++ b/third_party/WebKit/public/platform/WebEventListenerProperties.h
@@ -10,8 +10,9 @@ namespace blink { enum class WebEventListenerClass { - Touch, // This value includes "pointer" events. - MouseWheel // This value includes "wheel" and "mousewheel" events. + TouchStartOrMove, // This value includes "touchstart", "touchmove" and "pointer" events. + MouseWheel, // This value includes "wheel" and "mousewheel" events. + TouchEndOrCancel, // This value includes "touchend", "touchcancel" events. }; // Indicates the variety of event listener types for a given WebEventListenerClass.
diff --git a/third_party/WebKit/public/platform/WebProcessMemoryDump.h b/third_party/WebKit/public/platform/WebProcessMemoryDump.h index 6e71cc00..c3cf99f 100644 --- a/third_party/WebKit/public/platform/WebProcessMemoryDump.h +++ b/third_party/WebKit/public/platform/WebProcessMemoryDump.h
@@ -90,7 +90,7 @@ // Dumps heap memory usage. |allocatorName| is used as an absolute name for // base::trace_event::ProcessMemoryDump::AddHeapDump. - virtual void dumpHeapUsage(const base::hash_map<base::trace_event::AllocationContext, size_t>& bytesByContext, base::trace_event::TraceEventMemoryOverhead&, const char* allocatorName) = 0; + virtual void dumpHeapUsage(const base::hash_map<base::trace_event::AllocationContext, base::trace_event::AllocationMetrics>& metricsByContext, base::trace_event::TraceEventMemoryOverhead&, const char* allocatorName) = 0; }; } // namespace blink
diff --git a/third_party/closure_compiler/externs/passwords_private.js b/third_party/closure_compiler/externs/passwords_private.js index 10e983b..b320d8a 100644 --- a/third_party/closure_compiler/externs/passwords_private.js +++ b/third_party/closure_compiler/externs/passwords_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.passwordsPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://code.google.com/p/chromium/wiki/ClosureCompilation. +// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: passwordsPrivate */ @@ -28,6 +28,7 @@ /** * @typedef {{ * loginPair: !chrome.passwordsPrivate.LoginPair, + * linkUrl: string, * numCharactersInPassword: number, * federationText: (string|undefined) * }}
diff --git a/third_party/kasko/kasko.gni b/third_party/kasko/kasko.gni index fb394cc..19b8618 100644 --- a/third_party/kasko/kasko.gni +++ b/third_party/kasko/kasko.gni
@@ -2,16 +2,18 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/config/chrome_build.gni") import("//build/config/sanitizers/sanitizers.gni") declare_args() { # Enable the reporting of browser hangs with Kasko. # TODO(pmonette): ensure hang reporting is disabled for syzyasan builds. - enable_kasko_hang_reports = false + enable_kasko_hang_reports = is_win && is_chrome_branded && target_cpu == "x86" # Enable the reporting of failed browser rendez-vous with Kasko. # TODO(pmonette): ensure hang reporting is disabled for syzyasan builds. - enable_kasko_failed_rdv_reports = false + enable_kasko_failed_rdv_reports = + is_win && is_chrome_branded && target_cpu == "x86" } # Enable the Kasko crash reporter. Enabled by default on syzyasan build.
diff --git a/third_party/libXNVCtrl/BUILD.gn b/third_party/libXNVCtrl/BUILD.gn index ef95a0d..949401a 100644 --- a/third_party/libXNVCtrl/BUILD.gn +++ b/third_party/libXNVCtrl/BUILD.gn
@@ -2,6 +2,17 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +# This warning disable must be appended to the command line after the general +# warnings setup, so must be in a config. +config("libXNVCtrl_config") { + # This will build under most configurations with this warning enabled, but + # some older system headers are missing a "const" on the third parameter of + # XextAddDisplay which will cause a failure. + cflags = [ + "-Wno-incompatible-pointer-types-discards-qualifiers", + ] +} + source_set("libXNVCtrl") { sources = [ "NVCtrl.c", @@ -9,4 +20,9 @@ "NVCtrlLib.h", "nv_control.h", ] + + configs += [ + ":libXNVCtrl_config", + "//build/config/linux:x11", + ] }
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py index dc54f51..ab5cd56 100755 --- a/tools/clang/scripts/update.py +++ b/tools/clang/scripts/update.py
@@ -327,7 +327,7 @@ DownloadAndUnpack(CDS_URL + '/tools/' + zip_name, LLVM_BUILD_TOOLS_DIR) WriteStampFile(GNUWIN_VERSION, GNUWIN_STAMP) - os.environ['PATH'] = gnuwin_dir + os.pathsep + os.environ.get('PATH', '') + os.environ['PATH'] = os.environ.get('PATH', '') + os.pathsep + gnuwin_dir vs_version = None
diff --git a/tools/gn/binary_target_generator.cc b/tools/gn/binary_target_generator.cc index 7c81232..7828013 100644 --- a/tools/gn/binary_target_generator.cc +++ b/tools/gn/binary_target_generator.cc
@@ -7,8 +7,10 @@ #include "tools/gn/config_values_generator.h" #include "tools/gn/deps_iterator.h" #include "tools/gn/err.h" +#include "tools/gn/filesystem_utils.h" #include "tools/gn/functions.h" #include "tools/gn/scope.h" +#include "tools/gn/settings.h" #include "tools/gn/value_extractors.h" #include "tools/gn/variables.h" @@ -34,6 +36,9 @@ if (!FillOutputPrefixOverride()) return; + if (!FillOutputDir()) + return; + if (!FillOutputExtension()) return; @@ -98,6 +103,29 @@ return true; } +bool BinaryTargetGenerator::FillOutputDir() { + const Value* value = scope_->GetValue(variables::kOutputDir, true); + if (!value) + return true; + if (!value->VerifyTypeIs(Value::STRING, err_)) + return false; + + if (value->string_value().empty()) + return true; // Treat empty string as the default and do nothing. + + const BuildSettings* build_settings = scope_->settings()->build_settings(); + SourceDir dir = scope_->GetSourceDir().ResolveRelativeDir( + *value, err_, build_settings->root_path_utf8()); + if (err_->has_error()) + return false; + + if (!EnsureStringIsInOutputDir(build_settings->build_dir(), + dir.value(), value->origin(), err_)) + return false; + target_->set_output_dir(dir); + return true; +} + bool BinaryTargetGenerator::FillOutputExtension() { const Value* value = scope_->GetValue(variables::kOutputExtension, true); if (!value)
diff --git a/tools/gn/binary_target_generator.h b/tools/gn/binary_target_generator.h index 40ed432..0788a204 100644 --- a/tools/gn/binary_target_generator.h +++ b/tools/gn/binary_target_generator.h
@@ -27,6 +27,7 @@ bool FillCompleteStaticLib(); bool FillOutputName(); bool FillOutputPrefixOverride(); + bool FillOutputDir(); bool FillOutputExtension(); bool FillAllowCircularIncludesFrom();
diff --git a/tools/gn/docs/reference.md b/tools/gn/docs/reference.md index 22cbee0..38e8ce7 100644 --- a/tools/gn/docs/reference.md +++ b/tools/gn/docs/reference.md
@@ -2730,6 +2730,20 @@ The command to run. + default_output_dir [string with substitutions] + Valid for: linker tools + + Default directory name for the output file relative to the + root_build_dir. It can contain other substitution patterns. + This will be the default value for the {{output_dir}} expansion + (discussed below) but will be overridden by the "output_dir" + variable in a target, if one is specified. + + GN doesn't do anything with this string other than pass it + along, potentially with target-specific overrides. It is the + tool's job to use the expansion so that the files will be in + the right place. + default_output_extension [string] Valid for: linker tools @@ -2746,7 +2760,7 @@ Example: default_output_extension = ".exe" - depfile [string] + depfile [string with substitutions] Valid for: compiler tools (optional) If the tool can write ".d" files, this specifies the name of @@ -2808,13 +2822,11 @@ ] Example for a linker tool that produces a .dll and a .lib. The - use of {{output_extension}} rather than hardcoding ".dll" - allows the extension of the library to be overridden on a - target-by-target basis, but in this example, it always - produces a ".lib" import library: + use of {{target_output_name}}, {{output_extension}} and + {{output_dir}} allows the target to override these values. outputs = [ - "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", - "{{root_out_dir}}/{{target_output_name}}.lib", + "{{output_dir}}/{{target_output_name}}{{output_extension}}", + "{{output_dir}}/{{target_output_name}}.lib", ] link_output [string with substitutions] @@ -2827,7 +2839,7 @@ should match entries in the "outputs". If unspecified, the first item in the "outputs" array will be used for all. See "Separate linking and dependencies for shared libraries" - below for more. If link_output is set but runtime_link_output + below for more. If link_output is set but runtime_link_output is not set, runtime_link_output defaults to link_output. On Windows, where the tools produce a .dll shared library and @@ -2937,7 +2949,7 @@ {{target_out_dir}} The directory of the generated file and output directories, respectively, for the current target. There is no trailing - slash. + slash. See also {{output_dir}} for linker tools. Example: "out/base/test" {{target_output_name}} @@ -3020,6 +3032,21 @@ Example: "-lfoo -lbar" + {{output_dir}} + The value of the "output_dir" variable in the target, or the + the value of the "default_output_dir" value in the tool if the + target does not override the output directory. This will be + relative to the root_build_dir and will not end in a slash. + Will be "." for output to the root_build_dir. + + This is subtly different than {{target_out_dir}} which is + defined by GN based on the target's path and not overridable. + {{output_dir}} is for the final output, {{target_out_dir}} is + generally for object files and other outputs. + + Usually {{output_dir}} would be defined in terms of either + {{target_out_dir}} or {{root_out_dir}} + {{output_extension}} The value of the "output_extension" variable in the target, or the value of the "default_output_extension" value in the @@ -3075,13 +3102,13 @@ tool("solink") { command = "..." outputs = [ - "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", - "{{root_out_dir}}/{{target_output_name}}{{output_extension}}.TOC", + "{{output_dir}}/{{target_output_name}}{{output_extension}}", + "{{output_dir}}/{{target_output_name}}{{output_extension}}.TOC", ] link_output = - "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" + "{{output_dir}}/{{target_output_name}}{{output_extension}}" depend_output = - "{{root_out_dir}}/{{target_output_name}}{{output_extension}}.TOC" + "{{output_dir}}/{{target_output_name}}{{output_extension}}.TOC" restat = true } @@ -4660,6 +4687,36 @@ ``` +## **output_dir**: [directory] Directory to put output file in. + +``` + For library and executable targets, overrides the directory for the + final output. This must be in the root_build_dir or a child thereof. + + This should generally be in the root_out_dir or a subdirectory thereof + (the root_out_dir will be the same as the root_build_dir for the + default toolchain, and will be a subdirectory for other toolchains). + Not putting the output in a subdirectory of root_out_dir can result + in collisions between different toolchains, so you will need to take + steps to ensure that your target is only present in one toolchain. + + Normally the toolchain specifies the output directory for libraries + and executables (see "gn help tool"). You will have to consult that + for the default location. The default location will be used if + output_dir is undefined or empty. + +``` + +### **Example** + +``` + shared_library("doom_melon") { + output_dir = "$root_out_dir/plugin_libs" + ... + } + + +``` ## **output_extension**: Value to use for the output's file extension. ``` @@ -5724,6 +5781,10 @@ ### **Placeholders** ``` + This section discusses only placeholders for actions. There are other + placeholders used in the definition of tools. See "gn help tool" for + those. + {{source}} The name of the source file including directory (*). This will generally be used for specifying inputs to a script in the
diff --git a/tools/gn/example/build/toolchain/BUILD.gn b/tools/gn/example/build/toolchain/BUILD.gn index 77e33fe..d9457d7e 100644 --- a/tools/gn/example/build/toolchain/BUILD.gn +++ b/tools/gn/example/build/toolchain/BUILD.gn
@@ -37,9 +37,10 @@ tool("solink") { soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". + sofile = "{{output_dir}}/$soname" rspfile = soname + ".rsp" - command = "g++ -shared {{ldflags}} -o $soname -Wl,-soname=$soname @$rspfile" + command = "g++ -shared {{ldflags}} -o $sofile -Wl,-soname=$soname @$rspfile" rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive {{libs}}" description = "SOLINK $soname" @@ -49,11 +50,15 @@ # specifies). default_output_extension = ".so" + # Use this for {{output_dir}} expansions unless a target manually overrides + # it (in which case {{output_dir}} will be what the target specifies). + default_output_dir = "{{root_out_dir}}" + outputs = [ - soname, + sofile, ] - link_output = soname - depend_output = soname + link_output = sofile + depend_output = sofile output_prefix = "lib" } @@ -62,6 +67,7 @@ rspfile = "$outfile.rsp" command = "g++ {{ldflags}} -o $outfile -Wl,--start-group @$rspfile {{solibs}} -Wl,--end-group {{libs}}" description = "LINK $outfile" + default_output_dir = "{{root_out_dir}}" rspfile_content = "{{inputs}}" outputs = [ outfile,
diff --git a/tools/gn/function_toolchain.cc b/tools/gn/function_toolchain.cc index f3344ff..bdf53859 100644 --- a/tools/gn/function_toolchain.cc +++ b/tools/gn/function_toolchain.cc
@@ -418,6 +418,20 @@ "\n" " The command to run.\n" "\n" + " default_output_dir [string with substitutions]\n" + " Valid for: linker tools\n" + "\n" + " Default directory name for the output file relative to the\n" + " root_build_dir. It can contain other substitution patterns.\n" + " This will be the default value for the {{output_dir}} expansion\n" + " (discussed below) but will be overridden by the \"output_dir\"\n" + " variable in a target, if one is specified.\n" + "\n" + " GN doesn't do anything with this string other than pass it\n" + " along, potentially with target-specific overrides. It is the\n" + " tool's job to use the expansion so that the files will be in\n" + " the right place.\n" + "\n" " default_output_extension [string]\n" " Valid for: linker tools\n" "\n" @@ -434,7 +448,7 @@ "\n" " Example: default_output_extension = \".exe\"\n" "\n" - " depfile [string]\n" + " depfile [string with substitutions]\n" " Valid for: compiler tools (optional)\n" "\n" " If the tool can write \".d\" files, this specifies the name of\n" @@ -496,14 +510,12 @@ " ]\n" "\n" " Example for a linker tool that produces a .dll and a .lib. The\n" - " use of {{output_extension}} rather than hardcoding \".dll\"\n" - " allows the extension of the library to be overridden on a\n" - " target-by-target basis, but in this example, it always\n" - " produces a \".lib\" import library:\n" + " use of {{target_output_name}}, {{output_extension}} and\n" + " {{output_dir}} allows the target to override these values.\n" " outputs = [\n" - " \"{{root_out_dir}}/{{target_output_name}}" + " \"{{output_dir}}/{{target_output_name}}" "{{output_extension}}\",\n" - " \"{{root_out_dir}}/{{target_output_name}}.lib\",\n" + " \"{{output_dir}}/{{target_output_name}}.lib\",\n" " ]\n" "\n" " link_output [string with substitutions]\n" @@ -516,7 +528,7 @@ " should match entries in the \"outputs\". If unspecified, the\n" " first item in the \"outputs\" array will be used for all. See\n" " \"Separate linking and dependencies for shared libraries\"\n" - " below for more. If link_output is set but runtime_link_output\n" + " below for more. If link_output is set but runtime_link_output\n" " is not set, runtime_link_output defaults to link_output.\n" "\n" " On Windows, where the tools produce a .dll shared library and\n" @@ -624,7 +636,7 @@ " {{target_out_dir}}\n" " The directory of the generated file and output directories,\n" " respectively, for the current target. There is no trailing\n" - " slash.\n" + " slash. See also {{output_dir}} for linker tools.\n" " Example: \"out/base/test\"\n" "\n" " {{target_output_name}}\n" @@ -707,6 +719,21 @@ "\n" " Example: \"-lfoo -lbar\"\n" "\n" + " {{output_dir}}\n" + " The value of the \"output_dir\" variable in the target, or the\n" + " the value of the \"default_output_dir\" value in the tool if the\n" + " target does not override the output directory. This will be\n" + " relative to the root_build_dir and will not end in a slash.\n" + " Will be \".\" for output to the root_build_dir.\n" + "\n" + " This is subtly different than {{target_out_dir}} which is\n" + " defined by GN based on the target's path and not overridable.\n" + " {{output_dir}} is for the final output, {{target_out_dir}} is\n" + " generally for object files and other outputs.\n" + "\n" + " Usually {{output_dir}} would be defined in terms of either\n" + " {{target_out_dir}} or {{root_out_dir}}\n" + "\n" " {{output_extension}}\n" " The value of the \"output_extension\" variable in the target,\n" " or the value of the \"default_output_extension\" value in the\n" @@ -759,14 +786,14 @@ " tool(\"solink\") {\n" " command = \"...\"\n" " outputs = [\n" - " \"{{root_out_dir}}/{{target_output_name}}{{output_extension}}\",\n" - " \"{{root_out_dir}}/{{target_output_name}}" + " \"{{output_dir}}/{{target_output_name}}{{output_extension}}\",\n" + " \"{{output_dir}}/{{target_output_name}}" "{{output_extension}}.TOC\",\n" " ]\n" " link_output =\n" - " \"{{root_out_dir}}/{{target_output_name}}{{output_extension}}\"\n" + " \"{{output_dir}}/{{target_output_name}}{{output_extension}}\"\n" " depend_output =\n" - " \"{{root_out_dir}}/{{target_output_name}}" + " \"{{output_dir}}/{{target_output_name}}" "{{output_extension}}.TOC\"\n" " restat = true\n" " }\n" @@ -866,6 +893,8 @@ tool.get(), &Tool::set_runtime_link_output, err) || !ReadString(&block_scope, "output_prefix", tool.get(), &Tool::set_output_prefix, err) || + !ReadPattern(&block_scope, "default_output_dir", subst_validator, + tool.get(), &Tool::set_default_output_dir, err) || !ReadPrecompiledHeaderType(&block_scope, tool.get(), err) || !ReadBool(&block_scope, "restat", tool.get(), &Tool::set_restat, err) || !ReadPattern(&block_scope, "rspfile", subst_validator, tool.get(),
diff --git a/tools/gn/ninja_binary_target_writer.cc b/tools/gn/ninja_binary_target_writer.cc index 7077b17..a62f8725 100644 --- a/tools/gn/ninja_binary_target_writer.cc +++ b/tools/gn/ninja_binary_target_writer.cc
@@ -780,7 +780,7 @@ WriteLinkerFlags(optional_def_file); WriteLibs(); } - WriteOutputExtension(); + WriteOutputSubstitutions(); WriteSolibs(solibs); } @@ -847,11 +847,15 @@ out_ << std::endl; } -void NinjaBinaryTargetWriter::WriteOutputExtension() { +void NinjaBinaryTargetWriter::WriteOutputSubstitutions() { out_ << " output_extension = " << SubstitutionWriter::GetLinkerSubstitution( target_, tool_, SUBSTITUTION_OUTPUT_EXTENSION); out_ << std::endl; + out_ << " output_dir = " + << SubstitutionWriter::GetLinkerSubstitution( + target_, tool_, SUBSTITUTION_OUTPUT_DIR); + out_ << std::endl; } void NinjaBinaryTargetWriter::WriteSolibs(
diff --git a/tools/gn/ninja_binary_target_writer.h b/tools/gn/ninja_binary_target_writer.h index db2b15d1..1876486f 100644 --- a/tools/gn/ninja_binary_target_writer.h +++ b/tools/gn/ninja_binary_target_writer.h
@@ -99,7 +99,7 @@ const std::vector<SourceFile>& other_files); void WriteLinkerFlags(const SourceFile* optional_def_file); void WriteLibs(); - void WriteOutputExtension(); + void WriteOutputSubstitutions(); void WriteSolibs(const std::vector<OutputFile>& solibs); // Writes the stamp line for a source set. These are not linked.
diff --git a/tools/gn/ninja_binary_target_writer_unittest.cc b/tools/gn/ninja_binary_target_writer_unittest.cc index 1e02446d..d620f94 100644 --- a/tools/gn/ninja_binary_target_writer_unittest.cc +++ b/tools/gn/ninja_binary_target_writer_unittest.cc
@@ -82,7 +82,8 @@ "|| obj/foo/bar.stamp\n" " ldflags =\n" " libs =\n" - " output_extension = .so\n"; + " output_extension = .so\n" + " output_dir = \n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str); } @@ -110,7 +111,8 @@ // There are no sources so there are no params to alink. (In practice // this will probably fail in the archive tool.) "build obj/foo/libstlib.a: alink || obj/foo/bar.stamp\n" - " output_extension = \n"; + " output_extension = \n" + " output_dir = \n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str); } @@ -136,15 +138,16 @@ "build obj/foo/libstlib.a: alink obj/foo/bar.input1.o " "obj/foo/bar.input2.o ../../foo/input3.o ../../foo/input4.obj " "|| obj/foo/bar.stamp\n" - " output_extension = \n"; + " output_extension = \n" + " output_dir = \n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str); } } -// This tests that output extension overrides apply, and input dependencies -// are applied. -TEST(NinjaBinaryTargetWriter, ProductExtensionAndInputDeps) { +// This tests that output extension and output dir overrides apply, and input +// dependencies are applied. +TEST(NinjaBinaryTargetWriter, OutputExtensionAndInputDeps) { TestWithScope setup; Err err; @@ -157,10 +160,11 @@ action.SetToolchain(setup.toolchain()); ASSERT_TRUE(action.OnResolved(&err)); - // A shared library w/ the product_extension set to a custom value. + // A shared library w/ the output_extension set to a custom value. Target target(setup.settings(), Label(SourceDir("//foo/"), "shlib")); target.set_output_type(Target::SHARED_LIBRARY); target.set_output_extension(std::string("so.6")); + target.set_output_dir(SourceDir("//out/Debug/foo/")); target.sources().push_back(SourceFile("//foo/input1.cc")); target.sources().push_back(SourceFile("//foo/input2.cc")); target.public_deps().push_back(LabelTargetPair(&action)); @@ -192,7 +196,8 @@ "obj/foo/libshlib.input2.o || obj/foo/action.stamp\n" " ldflags =\n" " libs =\n" - " output_extension = .so.6\n"; + " output_extension = .so.6\n" + " output_dir = foo\n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str); @@ -229,19 +234,20 @@ "build ./libshlib.so: solink | ../../foo/lib1.a\n" " ldflags = -L../../foo/bar\n" " libs = ../../foo/lib1.a -lfoo\n" - " output_extension = .so\n"; + " output_extension = .so\n" + " output_dir = \n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str); } -TEST(NinjaBinaryTargetWriter, EmptyProductExtension) { +TEST(NinjaBinaryTargetWriter, EmptyOutputExtension) { TestWithScope setup; Err err; setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/")); - // This test is the same as ProductExtension, except that we call + // This test is the same as OutputExtensionAndInputDeps, except that we call // set_output_extension("") and ensure that we get an empty one and override // the output prefix so that the name matches the target exactly. Target target(setup.settings(), Label(SourceDir("//foo/"), "shlib")); @@ -274,7 +280,8 @@ "obj/foo/shlib.input2.o\n" " ldflags =\n" " libs =\n" - " output_extension = \n"; + " output_extension = \n" + " output_dir = \n"; std::string out_str = out.str(); EXPECT_EQ(expected, out_str); @@ -357,7 +364,8 @@ "obj/foo/inter.stamp\n" " ldflags =\n" " libs =\n" - " output_extension = \n"; + " output_extension = \n" + " output_dir = \n"; EXPECT_EQ(final_expected, final_out.str()); } @@ -392,7 +400,8 @@ "build ./libbar.so: solink obj/foo/libbar.sources.o | ../../foo/bar.def\n" " ldflags = /DEF:../../foo/bar.def\n" " libs =\n" - " output_extension = .so\n"; + " output_extension = .so\n" + " output_dir = \n"; EXPECT_EQ(expected, out.str()); } @@ -427,7 +436,8 @@ "build ./libbar.so: solink_module obj/foo/libbar.sources.o\n" " ldflags =\n" " libs =\n" - " output_extension = .so\n"; + " output_extension = .so\n" + " output_dir = \n"; EXPECT_EQ(loadable_expected, out.str()); // Final target. @@ -458,7 +468,8 @@ "build ./exe: link obj/foo/exe.final.o || ./libbar.so\n" " ldflags =\n" " libs =\n" - " output_extension = \n"; + " output_extension = \n" + " output_dir = \n"; EXPECT_EQ(final_expected, final_out.str()); }
diff --git a/tools/gn/substitution_type.cc b/tools/gn/substitution_type.cc index e1ea14de..75d8b7a 100644 --- a/tools/gn/substitution_type.cc +++ b/tools/gn/substitution_type.cc
@@ -43,6 +43,7 @@ "{{inputs_newline}}", // SUBSTITUTION_LINKER_INPUTS_NEWLINE "{{ldflags}}", // SUBSTITUTION_LDFLAGS "{{libs}}", // SUBSTITUTION_LIBS + "{{output_dir}}", // SUBSTITUTION_OUTPUT_DIR "{{output_extension}}", // SUBSTITUTION_OUTPUT_EXTENSION "{{solibs}}", // SUBSTITUTION_SOLIBS @@ -91,6 +92,7 @@ "in_newline", // SUBSTITUTION_LINKER_INPUTS_NEWLINE "ldflags", // SUBSTITUTION_LDFLAGS "libs", // SUBSTITUTION_LIBS + "output_dir", // SUBSTITUTION_OUTPUT_DIR "output_extension", // SUBSTITUTION_OUTPUT_EXTENSION "solibs", // SUBSTITUTION_SOLIBS @@ -193,6 +195,7 @@ type == SUBSTITUTION_LINKER_INPUTS_NEWLINE || type == SUBSTITUTION_LDFLAGS || type == SUBSTITUTION_LIBS || + type == SUBSTITUTION_OUTPUT_DIR || type == SUBSTITUTION_OUTPUT_EXTENSION || type == SUBSTITUTION_SOLIBS; } @@ -200,6 +203,7 @@ bool IsValidLinkerOutputsSubstitution(SubstitutionType type) { // All valid compiler outputs plus the output extension. return IsValidCompilerOutputsSubstitution(type) || + type == SUBSTITUTION_OUTPUT_DIR || type == SUBSTITUTION_OUTPUT_EXTENSION; }
diff --git a/tools/gn/substitution_type.h b/tools/gn/substitution_type.h index 3f7ec971..2e63373 100644 --- a/tools/gn/substitution_type.h +++ b/tools/gn/substitution_type.h
@@ -56,6 +56,7 @@ SUBSTITUTION_LINKER_INPUTS_NEWLINE, // {{inputs_newline}} SUBSTITUTION_LDFLAGS, // {{ldflags}} SUBSTITUTION_LIBS, // {{libs}} + SUBSTITUTION_OUTPUT_DIR, // {{output_dir}} SUBSTITUTION_OUTPUT_EXTENSION, // {{output_extension}} SUBSTITUTION_SOLIBS, // {{solibs}}
diff --git a/tools/gn/substitution_writer.cc b/tools/gn/substitution_writer.cc index 23d6914..a82e7ee 100644 --- a/tools/gn/substitution_writer.cc +++ b/tools/gn/substitution_writer.cc
@@ -56,6 +56,10 @@ "\n" "Placeholders\n" "\n" + " This section discusses only placeholders for actions. There are other\n" + " placeholders used in the definition of tools. See \"gn help tool\" for\n" + " those.\n" + "\n" " {{source}}\n" " The name of the source file including directory (*). This will\n" " generally be used for specifying inputs to a script in the\n" @@ -546,6 +550,23 @@ // Fall-through to the linker-specific ones. switch (type) { + case SUBSTITUTION_OUTPUT_DIR: + // Use the target's value if there is one (it will have no expansion + // patterns since it can directly use GN variables to compute whatever + // path it wants), or the tool's default (which will contain further + // expansions). + if (target->output_dir().is_null()) { + return ApplyPatternToLinkerAsOutputFile( + target, tool, tool->default_output_dir()).value(); + } else { + SetDirOrDotWithNoSlash(RebasePath( + target->output_dir().value(), + target->settings()->build_settings()->build_dir()), + &result); + return result; + } + break; + case SUBSTITUTION_OUTPUT_EXTENSION: // Use the extension provided on the target if specified, otherwise // fall back on the default. Note that the target's output extension
diff --git a/tools/gn/substitution_writer_unittest.cc b/tools/gn/substitution_writer_unittest.cc index 77374f1..d252c79f 100644 --- a/tools/gn/substitution_writer_unittest.cc +++ b/tools/gn/substitution_writer_unittest.cc
@@ -278,4 +278,46 @@ EXPECT_EQ("", SubstitutionWriter::GetLinkerSubstitution( &target, tool, SUBSTITUTION_OUTPUT_EXTENSION)); + + // Output directory is tested in a separate test below. +} + +TEST(SubstitutionWriter, OutputDir) { + TestWithScope setup; + Err err; + + // This tool has an output directory pattern and uses that for the + // output name. + Tool tool; + SubstitutionPattern out_dir_pattern; + ASSERT_TRUE(out_dir_pattern.Parse("{{root_out_dir}}/{{target_output_name}}", + nullptr, &err)); + tool.set_default_output_dir(out_dir_pattern); + tool.SetComplete(); + + // Default target with no output dir overrides. + Target target(setup.settings(), Label(SourceDir("//foo/"), "baz")); + target.set_output_type(Target::EXECUTABLE); + target.SetToolchain(setup.toolchain()); + ASSERT_TRUE(target.OnResolved(&err)); + + // The output should expand the default from the patterns in the tool. + SubstitutionPattern output_name; + ASSERT_TRUE(output_name.Parse("{{output_dir}}/{{target_output_name}}.exe", + nullptr, &err)); + EXPECT_EQ("./baz/baz.exe", + SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( + &target, &tool, output_name).value()); + + // Override the output name to the root build dir. + target.set_output_dir(SourceDir("//out/Debug/")); + EXPECT_EQ("./baz.exe", + SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( + &target, &tool, output_name).value()); + + // Override the output name to a new subdirectory. + target.set_output_dir(SourceDir("//out/Debug/foo/bar")); + EXPECT_EQ("foo/bar/baz.exe", + SubstitutionWriter::ApplyPatternToLinkerAsOutputFile( + &target, &tool, output_name).value()); }
diff --git a/tools/gn/target.h b/tools/gn/target.h index fdd6f1a..ac159e10 100644 --- a/tools/gn/target.h +++ b/tools/gn/target.h
@@ -100,6 +100,12 @@ output_prefix_override_ = prefix_override; } + // Desired output directory for the final output. This will be used for + // the {{output_dir}} substitution in the tool if it is specified. If + // is_null, the tool default will be used. + const SourceDir& output_dir() const { return output_dir_; } + void set_output_dir(const SourceDir& dir) { output_dir_ = dir; } + // The output extension is really a tri-state: unset (output_extension_set // is false and the string is empty, meaning the default extension should be // used), the output extension is set but empty (output should have no @@ -332,6 +338,7 @@ OutputType output_type_; std::string output_name_; bool output_prefix_override_; + SourceDir output_dir_; std::string output_extension_; bool output_extension_set_;
diff --git a/tools/gn/tool.h b/tools/gn/tool.h index 9360ce6..f6727ed 100644 --- a/tools/gn/tool.h +++ b/tools/gn/tool.h
@@ -52,6 +52,14 @@ default_output_extension_ = ext; } + const SubstitutionPattern& default_output_dir() const { + return default_output_dir_; + } + void set_default_output_dir(const SubstitutionPattern& dir) { + DCHECK(!complete_); + default_output_dir_ = dir; + } + // Dependency file (if supported). const SubstitutionPattern& depfile() const { return depfile_; @@ -186,6 +194,7 @@ private: SubstitutionPattern command_; std::string default_output_extension_; + SubstitutionPattern default_output_dir_; SubstitutionPattern depfile_; DepsFormat depsformat_; PrecompiledHeaderType precompiled_header_type_;
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc index 4c5fae1..46cd57e 100644 --- a/tools/gn/variables.cc +++ b/tools/gn/variables.cc
@@ -1119,6 +1119,34 @@ " }\n" " }\n"; +const char kOutputDir[] = "output_dir"; +const char kOutputDir_HelpShort[] = + "output_dir: [directory] Directory to put output file in."; +const char kOutputDir_Help[] = + "output_dir: [directory] Directory to put output file in.\n" + "\n" + " For library and executable targets, overrides the directory for the\n" + " final output. This must be in the root_build_dir or a child thereof.\n" + "\n" + " This should generally be in the root_out_dir or a subdirectory thereof\n" + " (the root_out_dir will be the same as the root_build_dir for the\n" + " default toolchain, and will be a subdirectory for other toolchains).\n" + " Not putting the output in a subdirectory of root_out_dir can result\n" + " in collisions between different toolchains, so you will need to take\n" + " steps to ensure that your target is only present in one toolchain.\n" + "\n" + " Normally the toolchain specifies the output directory for libraries\n" + " and executables (see \"gn help tool\"). You will have to consult that\n" + " for the default location. The default location will be used if\n" + " output_dir is undefined or empty.\n" + "\n" + "Example\n" + "\n" + " shared_library(\"doom_melon\") {\n" + " output_dir = \"$root_out_dir/plugin_libs\"\n" + " ...\n" + " }\n"; + const char kOutputName[] = "output_name"; const char kOutputName_HelpShort[] = "output_name: [string] Name for the output file other than the default."; @@ -1636,6 +1664,7 @@ INSERT_VARIABLE(Ldflags) INSERT_VARIABLE(Libs) INSERT_VARIABLE(LibDirs) + INSERT_VARIABLE(OutputDir) INSERT_VARIABLE(OutputExtension) INSERT_VARIABLE(OutputName) INSERT_VARIABLE(OutputPrefixOverride)
diff --git a/tools/gn/variables.h b/tools/gn/variables.h index 08fea1a..2dafdee0 100644 --- a/tools/gn/variables.h +++ b/tools/gn/variables.h
@@ -183,6 +183,10 @@ extern const char kLibs_HelpShort[]; extern const char kLibs_Help[]; +extern const char kOutputDir[]; +extern const char kOutputDir_HelpShort[]; +extern const char kOutputDir_Help[]; + extern const char kOutputExtension[]; extern const char kOutputExtension_HelpShort[]; extern const char kOutputExtension_Help[];
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index d044e3c..a8ca4a5 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -688,7 +688,7 @@ 'linux_chromium_cfi_rel_ng': 'gn_cfi_release_trybot', 'linux_chromium_chromeos_asan_variable': 'findit', 'linux_chromium_chromeos_compile_rel_ng': - 'swarming_chromeos_gyp_release_trybot', + 'swarming_chromeos_gn_release_trybot', 'linux_chromium_chromeos_rel_ng': 'swarming_chromeos_gyp_release_trybot', 'linux_chromium_chromeos_variable': 'findit', 'linux_chromium_chromeos_variable_chrome': 'findit', @@ -1248,6 +1248,10 @@ 'swarming', 'asan', 'lsan', 'release_trybot', ], + 'swarming_chromeos_gn_release_trybot': [ + 'swarming', 'chromeos_with_codecs', 'gn', 'release_trybot', + ], + 'swarming_chromeos_gyp_debug_bot': [ 'swarming', 'chromeos_with_codecs', 'gyp', 'debug_bot', ], @@ -1605,9 +1609,11 @@ 'cronet': { 'gn_args': ('disable_file_support=true disable_ftp_support=true ' - 'enable_websockets=false'), + 'enable_websockets=false use_platform_icu_alternatives=true ' + 'disable_brotli_filter=true'), 'gyp_defines': ('disable_file_support=1 disable_ftp_support=1 ' - 'enable_websockets=0'), + 'enable_websockets=0 use_platform_icu_alternatives=1 ' + 'disable_brotli_filter=1'), }, 'crosscompile': {
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 4e83b0c..4d039a0 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -46254,6 +46254,26 @@ </summary> </histogram> +<histogram name="Search.ContextualSearchBarOverlap" + enum="ContextualSearchTapSuppression"> + <owner>donnd@chromium.org</owner> + <owner>twellington@chromium.org</owner> + <summary> + Whether a Tap was suppressed because the Bar overlapped the selection area. + Implemented for Android. + </summary> +</histogram> + +<histogram name="Search.ContextualSearchBarOverlapSeen" + enum="ContextualSearchBarOverlapSeen"> + <owner>donnd@chromium.org</owner> + <owner>twellington@chromium.org</owner> + <summary> + Whether the Bar overlapped the selection area and whether the results were + seen. Recorded when the UX is hidden. Implemented for Android. + </summary> +</histogram> + <histogram name="Search.ContextualSearchBasePageProtocol" enum="ContextualSearchBasePageProtocol"> <owner>donnd@chromium.org</owner> @@ -46624,6 +46644,16 @@ </summary> </histogram> +<histogram name="Search.ContextualSearchQuickAnswerSeen" + enum="ContextualSearchQuickAnswerSeen"> + <owner>donnd@chromium.org</owner> + <owner>twellington@chromium.org</owner> + <summary> + Whether a Quick Answer was activated, considered an answer, and seen. + Implemented for Android. + </summary> +</histogram> + <histogram name="Search.ContextualSearchRecentScrollNotSeen" units="ms"> <owner>donnd@chromium.org</owner> <owner>twellington@chromium.org</owner> @@ -46714,6 +46744,16 @@ </summary> </histogram> +<histogram name="Search.ContextualSearchScreenTopSuppressed" + enum="ContextualSearchTapSuppression"> + <owner>donnd@chromium.org</owner> + <owner>twellington@chromium.org</owner> + <summary> + Whether Taps near the top of the screen was suppressed. Implemented for + Android. + </summary> +</histogram> + <histogram name="Search.ContextualSearchSelectionValid" enum="ContextualSearchSelectionValid"> <owner>donnd@chromium.org</owner> @@ -46770,6 +46810,23 @@ </summary> </histogram> +<histogram name="Search.ContextualSearchTopLocationNotSeen" units="dps"> + <owner>donnd@chromium.org</owner> + <owner>twellington@chromium.org</owner> + <summary> + The DPs count histogram for Taps that were not seen. Implemented for + Android. + </summary> +</histogram> + +<histogram name="Search.ContextualSearchTopLocationSeen" units="dps"> + <owner>donnd@chromium.org</owner> + <owner>twellington@chromium.org</owner> + <summary> + The DPs count histogram for Taps that were seen. Implemented for Android. + </summary> +</histogram> + <histogram name="Search.DefaultSearchChangeOrigin" enum="DefaultSearchChangeOrigin"> <owner>mathp@chromium.org</owner> @@ -64125,6 +64182,17 @@ <int value="1" label="Released"/> </enum> +<enum name="ContextualSearchBarOverlapSeen" type="int"> + <int value="0" label="Overlap seen from Tap"/> + <int value="1" label="Overlap not seen from Tap"/> + <int value="2" label="No overlap seen from Tap"/> + <int value="3" label="No overlap not seen from Tap"/> + <int value="4" label="Overlap seen from Longpress"/> + <int value="5" label="Overlap not seen from Longpress"/> + <int value="6" label="No overlap seen from Longpress"/> + <int value="7" label="No overlap not seen from Longpress"/> +</enum> + <enum name="ContextualSearchBasePageProtocol" type="int"> <int value="0" label="Is HTTP"/> <int value="1" label="Not HTTP"/> @@ -64285,6 +64353,15 @@ <int value="2" label="Not prefetched"/> </enum> +<enum name="ContextualSearchQuickAnswerSeen" type="int"> + <int value="0" label="Activated, answered and seen"/> + <int value="1" label="Activated and answered but not seen"/> + <int value="2" label="Activated, not answered but seen"/> + <int value="3" label="Activated, not answered nor seen"/> + <int value="4" label="Not activated but seen"/> + <int value="5" label="Not activated nor seen"/> +</enum> + <enum name="ContextualSearchResolvedTermWords" type="int"> <int value="0" label="Single Word"/> <int value="1" label="Multi Word"/> @@ -71806,6 +71883,7 @@ <int value="162705488" label="manufacturer_name_string"/> <int value="164418508" label="weight_measurement"/> <int value="177223896" label="report_map"/> + <int value="203846063" label="ff0c"/> <int value="205016416" label="body_composition_measurement"/> <int value="235785246" label="irradiance"/> <int value="248349383" label="csc_measurement"/> @@ -71829,6 +71907,7 @@ <int value="405569435" label="boot_keyboard_output_report"/> <int value="409618715" label="cycling_power_vector"/> <int value="419477741" label="body_composition_feature"/> + <int value="469191968" label="Playbulb Candle Color; fffc"/> <int value="486368335" label="location_name"/> <int value="512543326" label="date_of_threshold_assessment"/> <int value="531135021" label="cgm_specific_ops_control_point"/> @@ -71861,6 +71940,8 @@ <int value="868892960" label="heat_index"/> <int value="873660243" label="body_sensor_location"/> <int value="893588698" label="scan_interval_window"/> + <int value="910416910" + label="nRF UART RX; 6e400003-b5a3-f393-e0a9-e50e24dcca9e"/> <int value="917477908" label="software_revision_string"/> <int value="918961501" label="plx_spot_check_measurement"/> <int value="922434244" label="ln_feature"/> @@ -71871,6 +71952,8 @@ <int value="987658962" label="glucose_measurement"/> <int value="1002619180" label="exact_time_256"/> <int value="1025676359" label="dst_offset"/> + <int value="1050948662" + label="nRF UART TX; 6e400002-b5a3-f393-e0a9-e50e24dcca9e"/> <int value="1061486494" label="anaerobic_heart_rate_upper_limit"/> <int value="1072163984" label="gap.reconnection_address"/> <int value="1100640868" label="day_of_week"/> @@ -71878,6 +71961,7 @@ <int value="1134538374" label="hip_circumference"/> <int value="1136624215" label="maximum_recommended_heart_rate"/> <int value="1136682523" label="date_time"/> + <int value="1161713439" label="Playbulb Candle Effect; fffb"/> <int value="1167525145" label="alert_status"/> <int value="1183399370" label="magnetic_flux_density_3D"/> <int value="1193066711" label="uv_index"/> @@ -71960,37 +72044,316 @@ <enum name="GATTServiceHash" type="int"> <int value="7464675" label="pulse_oximeter"/> + <int value="26695985" label="fe20"/> + <int value="35226455" label="fe44"/> + <int value="35347197" label="fe26"/> + <int value="41430862" label="fea8"/> + <int value="44208286" label="fe29"/> + <int value="46512116" label="fe03"/> + <int value="47251880" label="fe8c"/> + <int value="48328546" label="febf"/> + <int value="56938056" label="feb9"/> + <int value="62669585" label="feff"/> + <int value="70653353" label="fe37"/> <int value="81094401" label="link_loss"/> + <int value="85709298" label="fe38"/> + <int value="91953454" label="fe7b"/> + <int value="109066436" label="Printer; 18f0"/> + <int value="117033282" label="fe1e"/> + <int value="119232939" label="fe16"/> + <int value="126220948" label="fec4"/> + <int value="130754956" label="fe0d"/> + <int value="134110769" label="fecf"/> + <int value="141942246" label="fe1d"/> + <int value="152492105" label="fe5f"/> + <int value="169501939" label="fe4d"/> + <int value="199936534" label="fe3c"/> + <int value="214038522" label="fed3"/> <int value="217781951" label="human_interface_device"/> + <int value="219286671" label="fe04"/> + <int value="221983129" label="fe66"/> + <int value="228594985" label="fe21"/> + <int value="229725863" + label="Juggglow; 624e957f-cb42-4cd6-bacc-84aeb898f69b"/> + <int value="239745754" label="fe22"/> + <int value="252638028" label="fe9c"/> + <int value="253001319" label="fe84"/> + <int value="267848299" label="fe3e"/> + <int value="270670950" label="fe62"/> <int value="272218751" label="automation_io"/> + <int value="273356483" label="fe68"/> + <int value="278860884" label="fe5c"/> + <int value="289754407" label="fe01"/> + <int value="291870040" label="fe6d"/> + <int value="295205583" label="fe27"/> + <int value="310654399" label="fe54"/> + <int value="314884784" label="fe65"/> + <int value="315044617" label="fea9"/> + <int value="321399472" label="fe86"/> + <int value="335078161" label="DOTTI; fff0"/> + <int value="336095190" label="fe1c"/> + <int value="337129282" label="fe73"/> + <int value="347254994" label="feb6"/> + <int value="350589357" label="fe8e"/> + <int value="353919198" label="fe41"/> + <int value="367801999" label="fe19"/> <int value="381944619" label="continuous_glucose_monitoring"/> + <int value="393442080" label="fe47"/> + <int value="404751265" label="fe34"/> + <int value="406443827" label="fe08"/> + <int value="406667138" label="fe1b"/> + <int value="408422717" label="fe12"/> + <int value="411422080" label="feaf"/> + <int value="428955508" label="fed8"/> + <int value="436040838" label="fe49"/> + <int value="442258066" label="fec6"/> + <int value="448479874" label="fe13"/> + <int value="452749537" label="fe6f"/> + <int value="486403409" label="fe7e"/> + <int value="493187195" + label="Insight cards; 13630000-aeb9-10cf-ef69-81e145a91113"/> + <int value="499379297" label="fe0c"/> + <int value="517314925" label="fe0e"/> + <int value="534472233" label="feea"/> + <int value="535574137" label="feb1"/> + <int value="547028880" label="fed0"/> + <int value="547391938" label="feee"/> + <int value="563178896" label="fec8"/> + <int value="572734315" + label="Sphero Robot; 22bb746f-2bb0-7554-2d6f-726568705327"/> + <int value="587509991" label="feba"/> + <int value="593291030" label="fe80"/> + <int value="593725623" label="fef8"/> <int value="594122172" label="health_thermometer"/> + <int value="598801180" label="fe64"/> + <int value="599398840" label="feb4"/> + <int value="601952480" + label="PowerUp RC plane; 75b64e51-f181-4ed1-921a-476090d80ba7"/> + <int value="603143198" label="fef5"/> + <int value="604112254" label="fee4"/> + <int value="617434027" label="fe59"/> + <int value="621358948" label="fec7"/> + <int value="633977000" label="fedf"/> + <int value="642914459" label="fe3d"/> + <int value="643543662" label="fefe"/> + <int value="675211143" label="fe4a"/> + <int value="677930586" label="fe11"/> + <int value="683753134" label="fe82"/> + <int value="684646659" label="febb"/> + <int value="687580695" label="fe7a"/> + <int value="687720133" label="fe91"/> + <int value="688383299" label="fe1f"/> <int value="690691504" label="bond_management"/> + <int value="695100933" label="fed4"/> + <int value="702341883" label="fed5"/> + <int value="703883979" label="fe87"/> + <int value="706159123" label="fe32"/> + <int value="712814660" + label="Eddystone-URL Beacon Configuration; + ee0c2080-8786-40ba-ab96-99b91ac981d8"/> + <int value="739317418" label="fe05"/> + <int value="741183887" label="fe78"/> + <int value="749323131" label="fece"/> + <int value="762562796" label="fe5e"/> + <int value="775377708" label="fe2b"/> + <int value="780195705" label="fead"/> + <int value="786171562" label="fe0a"/> + <int value="803680658" label="fea3"/> <int value="805645044" label="glucose"/> + <int value="807272540" label="fe1a"/> + <int value="817497010" label="fe18"/> <int value="836214784" label="cycling_power"/> + <int value="841972234" label="feeb"/> <int value="869059214" label="next_dst_change"/> + <int value="869682406" label="fe60"/> <int value="876407493" label="location_and_navigation"/> + <int value="878416856" label="fe85"/> + <int value="882315332" label="fe55"/> + <int value="889111031" label="fecd"/> <int value="890629650" label="running_speed_and_cadence"/> + <int value="901700952" label="fedd"/> + <int value="902817086" label="fea2"/> + <int value="918911989" label="fed1"/> + <int value="931929648" label="Mi Band; fee0"/> + <int value="935427983" label="fed7"/> + <int value="936179325" label="feb5"/> + <int value="939739701" label="fe8f"/> + <int value="939958322" label="febc"/> + <int value="940942235" label="feef"/> + <int value="953202155" label="fe8d"/> + <int value="960854785" label="fe53"/> + <int value="961193127" label="feb8"/> + <int value="963656436" label="fe77"/> + <int value="1001310815" label="fe75"/> + <int value="1024550252" label="feda"/> <int value="1029767622" label="internet_protocol_support"/> + <int value="1035129135" label="fe74"/> + <int value="1044298649" label="fe99"/> + <int value="1047979067" label="fe17"/> + <int value="1054370387" label="fef9"/> + <int value="1061554458" label="feaa"/> + <int value="1067649821" label="fe3f"/> + <int value="1079263879" label="fe06"/> + <int value="1085187782" label="feae"/> + <int value="1088150526" label="feb2"/> + <int value="1091337779" label="fefb"/> + <int value="1096286291" label="fed6"/> + <int value="1102290958" label="fe56"/> + <int value="1103440256" label="fee9"/> <int value="1107293675" label="cycling_speed_and_cadence"/> + <int value="1107743017" label="fe00"/> + <int value="1108163795" label="fec0"/> + <int value="1108885324" label="fe48"/> + <int value="1122138707" label="fed2"/> + <int value="1122276223" label="fe67"/> + <int value="1122861451" label="Playbulb Candle; ff02"/> + <int value="1132318862" label="fe6a"/> + <int value="1133574029" label="fede"/> + <int value="1134418737" label="fed9"/> + <int value="1146291045" label="fe2e"/> + <int value="1155522736" label="fea0"/> + <int value="1181418959" label="feca"/> + <int value="1185484517" label="fe02"/> <int value="1188875912" label="phone_alert_status"/> + <int value="1204532270" label="fea1"/> + <int value="1205730714" label="fe81"/> + <int value="1213218283" label="feb7"/> <int value="1219993345" label="device_information"/> + <int value="1225001939" label="fe6c"/> + <int value="1235220658" label="fe6e"/> + <int value="1236903028" label="fe9d"/> <int value="1239202871" label="generic_attribute"/> + <int value="1244946418" label="fe61"/> + <int value="1250531601" label="fe15"/> + <int value="1257014053" label="fe33"/> + <int value="1262008705" label="fef2"/> <int value="1265172773" label="indoor_positioning"/> + <int value="1265779630" label="fe7d"/> + <int value="1275725183" label="febe"/> + <int value="1276692887" label="fe09"/> <int value="1280998251" label="blood_pressure"/> + <int value="1289827687" label="fe7c"/> + <int value="1293391247" label="fea4"/> + <int value="1295501517" label="fef3"/> + <int value="1300474367" label="fe70"/> + <int value="1300496660" label="fe23"/> + <int value="1327498374" + label="nRF UART; 6e400001-b5a3-f393-e0a9-e50e24dcca9e"/> + <int value="1344502489" label="fe92"/> + <int value="1352591424" label="fe2d"/> + <int value="1357782294" label="fe90"/> + <int value="1357850359" label="fefc"/> + <int value="1362860533" label="fe9a"/> + <int value="1366014117" label="fe2c"/> <int value="1369789354" label="current_time"/> + <int value="1376579922" label="fef0"/> + <int value="1377872916" label="fe51"/> + <int value="1380007534" label="fe96"/> + <int value="1382767841" label="fe93"/> + <int value="1394327958" label="fe24"/> <int value="1398099241" label="user_data"/> + <int value="1402127045" label="fef4"/> <int value="1415105941" label="scan_parameters"/> + <int value="1416866355" label="fe3b"/> + <int value="1422100109" + label="Sphero Robot; 22bb746f-2ba0-7554-2d6f-726568705327"/> <int value="1424865940" label="alert_notification"/> + <int value="1432421356" label="fe14"/> + <int value="1433847022" label="fefa"/> + <int value="1465794357" label="feb0"/> + <int value="1484296385" label="fe30"/> + <int value="1513113754" label="fe39"/> + <int value="1515793787" label="fef1"/> + <int value="1548928839" label="fec5"/> + <int value="1553614739" label="fe6b"/> + <int value="1563543855" label="fe72"/> <int value="1569655226" label="generic_access"/> + <int value="1573199922" label="fe71"/> + <int value="1594426590" label="fe4e"/> + <int value="1600490722" label="fe46"/> + <int value="1604724337" label="fe88"/> + <int value="1606985074" label="feed"/> + <int value="1607594729" label="fe0f"/> + <int value="1618872680" label="fe9b"/> + <int value="1631386264" label="fefd"/> + <int value="1635890706" label="fe9e"/> + <int value="1637021391" label="fe95"/> + <int value="1638012344" label="fe97"/> + <int value="1648320092" label="fe7f"/> + <int value="1651126525" label="fe25"/> + <int value="1651610232" label="fe52"/> <int value="1660904097" label="immediate_alert"/> <int value="1663141542" label="battery_service"/> + <int value="1671670551" label="fe5a"/> + <int value="1673238799" label="fee3"/> + <int value="1680929515" label="fe79"/> + <int value="1681595304" label="fe4b"/> + <int value="1682716946" label="fe45"/> + <int value="1694516494" label="fe31"/> <int value="1696287138" label="weight_scale"/> + <int value="1701893879" label="feac"/> + <int value="1706666451" label="fea7"/> + <int value="1714031075" label="fe10"/> + <int value="1724509641" label="fe8b"/> + <int value="1729966097" + label="Anki OVERDRIVE cars; be15beef-6186-407e-8381-0bd89c4d8df4"/> <int value="1753170093" label="environmental_sensing"/> + <int value="1763555668" label="fe76"/> + <int value="1779377938" label="fe5d"/> + <int value="1784351685" label="feab"/> + <int value="1788143374" label="feb3"/> + <int value="1788905945" label="fedb"/> + <int value="1789684919" label="fe36"/> + <int value="1805849785" label="fe98"/> + <int value="1808789304" label="fe3a"/> + <int value="1821803686" label="TI SensorTag Simple Keys; ffe0"/> <int value="1823176820" label="body_composition"/> + <int value="1826466999" label="fee1"/> + <int value="1829698279" label="fe0b"/> + <int value="1833458622" label="fe42"/> + <int value="1844072312" label="fe40"/> + <int value="1849709266" label="fec3"/> + <int value="1855849484" + label="iHealth Edge; 636f6d2e-6a69-7561-6e2e-414d56313100"/> + <int value="1891274929" label="fee2"/> + <int value="1891804450" label="fe58"/> + <int value="1905398969" label="fee6"/> + <int value="1915568448" label="fe89"/> + <int value="1922068523" label="fef6"/> + <int value="1922152740" label="fe8a"/> + <int value="1922853101" label="fe28"/> + <int value="1925022679" label="fe57"/> + <int value="1940012814" label="fe2a"/> + <int value="1946977319" label="fec1"/> + <int value="1953707948" label="fe9f"/> + <int value="1960388103" label="fecb"/> + <int value="1969478137" label="fe63"/> <int value="1970234661" label="reference_time_update"/> + <int value="1971997463" label="fe07"/> + <int value="1976176123" label="fe4c"/> + <int value="1983035069" label="fec9"/> + <int value="1984351068" label="fea6"/> + <int value="2016025023" label="febd"/> + <int value="2017827114" label="fe4f"/> + <int value="2022676622" label="fe35"/> + <int value="2051635436" label="fe50"/> + <int value="2055825405" label="fedc"/> + <int value="2058080782" label="fecc"/> + <int value="2061595680" label="fea5"/> + <int value="2069612985" label="fee5"/> + <int value="2070392722" label="fec2"/> <int value="2075745564" label="heart_rate"/> + <int value="2081534039" label="fe83"/> <int value="2086529225" label="tx_power"/> + <int value="2097896377" label="fee8"/> + <int value="2100033855" label="fef7"/> + <int value="2107223399" label="fee7"/> + <int value="2108894990" label="fe2f"/> + <int value="2110412550" label="fe43"/> + <int value="2113887919" label="fe5b"/> + <int value="2115271248" label="fe94"/> + <int value="2132514937" label="feec"/> + <int value="2136716957" label="fe69"/> </enum> <enum name="GCMCheckinRequestStatus" type="int">
diff --git a/tools/perf/chrome_telemetry_build/binary_dependencies.json b/tools/perf/chrome_telemetry_build/binary_dependencies.json index e6f6d866..43ab52c5 100644 --- a/tools/perf/chrome_telemetry_build/binary_dependencies.json +++ b/tools/perf/chrome_telemetry_build/binary_dependencies.json
@@ -11,6 +11,8 @@ }, "win_AMD64": { "local_paths": [ + "../../../out/Debug_x64/crashpad_database_util.exe", + "../../../out/Release_x64/crashpad_database_util.exe", "../../../out/Debug/crashpad_database_util.exe", "../../../out/Release/crashpad_database_util.exe" ] @@ -49,11 +51,6 @@ }, "generate_breakpad_symbols": { "file_info": { - "win_AMD64": { - "local_paths": [ - "../../../components/crash/content/tools/generate_breakpad_symbols.py" - ] - }, "mac_x86_64": { "local_paths": [ "../../../components/crash/content/tools/generate_breakpad_symbols.py"
diff --git a/tools/perf/core/stacktrace_unittest.py b/tools/perf/core/stacktrace_unittest.py index 3c5392933..da833b1 100644 --- a/tools/perf/core/stacktrace_unittest.py +++ b/tools/perf/core/stacktrace_unittest.py
@@ -12,26 +12,23 @@ class TabStackTraceTest(tab_test_case.TabTestCase): - # TODO(dyen): For now this doesn't work on Android but continue to - # expand this. - # TODO(kbr): currently failing on Windows because the symbolized - # stack trace format is unexpected. http://crbug.com/561763 - @decorators.Enabled('mac', 'linux') # Stack traces do not currently work on 10.6, but they are also being # disabled shortly so just disable it for now. - @decorators.Disabled('snowleopard') - def testStackTrace(self): + # All platforms except chromeos should at least have a valid minidump. + @decorators.Disabled('snowleopard', 'chromeos') + def testValidDump(self): with self.assertRaises(exceptions.DevtoolsTargetCrashException) as c: self._tab.Navigate('chrome://crash', timeout=5) - self.assertIn('Thread 0 (crashed)', '\n'.join(c.exception.stack_trace)) + self.assertTrue(c.exception.is_valid_dump) # Stack traces aren't working on Android yet. - @decorators.Enabled('mac', 'linux', 'win') + # TODO(dyen): Investigate why windows is crashing in mojo. + @decorators.Enabled('mac', 'linux') @decorators.Disabled('snowleopard') def testCrashSymbols(self): with self.assertRaises(exceptions.DevtoolsTargetCrashException) as c: self._tab.Navigate('chrome://crash', timeout=5) - self.assertIn('CrashIntentionally', '\n'.join(c.exception.stack_trace)) + self.assertIn('CrashIntentionally', '\n'.join(c.exception.stack_trace)) # The breakpad file specific test only apply to platforms which use the # breakpad symbol format. This also must be tested in isolation because it can @@ -46,19 +43,19 @@ dir=os.path.dirname(executable_path), prefix=executable + '.breakpad', delete=True) as f: - f.write('Garbage Data 012345') + garbage_hash = 'ABCDEF1234567' + f.write('MODULE PLATFORM ARCH %s %s' % (garbage_hash, executable)) f.flush() with self.assertRaises(exceptions.DevtoolsTargetCrashException) as c: self._tab.Navigate('chrome://crash', timeout=5) - # The symbol directory should now contain our breakpad file. - tmp_dir = os.path.join(self._browser._browser_backend._tmp_minidump_dir) + # The symbol directory should now symbols for out executable. + tmp_dir = os.path.join(self._browser._browser_backend._tmp_minidump_dir) + symbol_dir = os.path.join(tmp_dir, 'symbols') + self.assertTrue(os.path.isdir(symbol_dir)) - # Symbol directory should have been created. - symbol_dir = os.path.join(tmp_dir, 'symbols', executable) - self.assertTrue(os.path.isdir(symbol_dir)) + # Bad breakpad file should not be in the symbol directory + garbage_symbol_dir = os.path.join(symbol_dir, executable, garbage_hash) + self.assertFalse(os.path.isdir(garbage_symbol_dir)) - # A single symbol file should still exist here. - self.assertEqual(1, len(os.listdir(symbol_dir))) - - # Stack trace should still work. - self.assertIn('CrashIntentionally', '\n'.join(c.exception.stack_trace)) + # Stack trace should still work. + self.assertIn('CrashIntentionally', '\n'.join(c.exception.stack_trace))
diff --git a/tools/perf/page_sets/data/tough_filters_cases.json b/tools/perf/page_sets/data/tough_filters_cases.json index b27ebe05..749676c 100644 --- a/tools/perf/page_sets/data/tough_filters_cases.json +++ b/tools/perf/page_sets/data/tough_filters_cases.json
@@ -1,10 +1,14 @@ { - "description": "Describes the Web Page Replay archives for a page set. Don't edit by hand! Use record_wpr for updating.", + "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", "archives": { + "tough_filters_cases_002.wpr": [ + "http://web.archive.org/web/20150502135732/http://ie.microsoft.com/testdrive/Performance/Pirates/Default.html", + "http://static.bobdo.net/Analog_Clock.svg", + "http://rawgit.com/WebKit/webkit/master/PerformanceTests/Animometer/developer.html?test-interval=20&display=minimal&controller=fixed&frame-rate=50&kalman-process-error=1&kalman-measurement-error=4&time-measurement=performance&suite-name=Animometer&test-name=Focus&complexity=100", + "http://letmespellitoutforyou.com/samples/svg/filter_terrain.svg" + ], "tough_filters_cases_001.wpr": [ - "http://letmespellitoutforyou.com/samples/svg/filter_terrain.svg", - "http://ie.microsoft.com/testdrive/Performance/Pirates/", - "http://static.bobdo.net/Analog_Clock.svg" + "http://ie.microsoft.com/testdrive/Performance/Pirates/" ] } } \ No newline at end of file
diff --git a/tools/perf/page_sets/data/tough_filters_cases_002.wpr.sha1 b/tools/perf/page_sets/data/tough_filters_cases_002.wpr.sha1 new file mode 100644 index 0000000..ac31e9a --- /dev/null +++ b/tools/perf/page_sets/data/tough_filters_cases_002.wpr.sha1
@@ -0,0 +1 @@ +3f8eceeb82fdea820d836885c321875919da14e4 \ No newline at end of file
diff --git a/tools/perf/page_sets/tough_filters_cases.py b/tools/perf/page_sets/tough_filters_cases.py index 26aa685..36d0d648 100644 --- a/tools/perf/page_sets/tough_filters_cases.py +++ b/tools/perf/page_sets/tough_filters_cases.py
@@ -32,6 +32,7 @@ cloud_storage_bucket=story.PARTNER_BUCKET) urls_list = [ + 'http://rawgit.com/WebKit/webkit/master/PerformanceTests/Animometer/developer.html?test-interval=20&display=minimal&controller=fixed&frame-rate=50&kalman-process-error=1&kalman-measurement-error=4&time-measurement=performance&suite-name=Animometer&test-name=Focus&complexity=100', # pylint: disable=line-too-long 'http://letmespellitoutforyou.com/samples/svg/filter_terrain.svg', 'http://static.bobdo.net/Analog_Clock.svg', ] @@ -40,4 +41,4 @@ self.AddStory(ToughFiltersCasesPage(url, self)) self.AddStory(PirateMarkPage( - 'http://ie.microsoft.com/testdrive/Performance/Pirates/', self)) + 'http://web.archive.org/web/20150502135732/http://ie.microsoft.com/testdrive/Performance/Pirates/Default.html', self)) # pylint: disable=line-too-long
diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt index d856a81c..1fefb61 100644 --- a/tools/valgrind/memcheck/suppressions.txt +++ b/tools/valgrind/memcheck/suppressions.txt
@@ -3154,15 +3154,3 @@ fun:_ZN4base26PostTaskAndReplyWithResultIN3net20WifiPHYLayerProtocolES2_EEbPNS* fun:_ZN7metrics22NetworkMetricsProvider25ProbeWifiPHYLayerProtocolEv } -{ - bug_603275 - Memcheck:Unaddressable - fun:_ZNKSs4sizeEv - fun:_ZSteqIcEN9__gnu_cxx11__enable_ifIXsr9__is_charIT_EE7__valueEbE6__typeERKSbIS2_St11char_traitsIS2_ESaIS2_EESA_ - fun:_ZNKSt8equal_toISsEclERKSsS2_ - fun:_ZNKSt8__detail15_Hash_code_baseISsSt4pairIKSsSt10unique_ptrIN6syncer24AttachmentDownloaderImpl13DownloadState* - fun:_ZNSt10_HashtableISsSt4pairIKSsSt10unique_ptrIN6syncer24AttachmentDownloaderImpl13DownloadStateESt14default* - fun:_ZN6syncer24AttachmentDownloaderImpl17OnGetTokenFailureEPKN18OAuth2TokenService7RequestERK22GoogleServiceAuthError - fun:_ZThn8_N6syncer24AttachmentDownloaderImpl17OnGetTokenFailureEPKN18OAuth2TokenService7RequestERK22GoogleServiceAuthError - fun:_ZN12_GLOBAL__N_111RequestCore28InformOwnerOnGetTokenFailureE22GoogleServiceAuthError -}
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index 862b5fb..7bb1f09 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc
@@ -45,6 +45,11 @@ const double kDefaultRefreshRate = 60.0; const double kTestRefreshRate = 200.0; +bool IsRunningInMojoShell(base::CommandLine* command_line) { + const char kMojoShellFlag[] = "mojo-platform-channel-handle"; + return command_line->HasSwitch(kMojoShellFlag); +} + } // namespace namespace ui { @@ -175,7 +180,10 @@ // thread. settings.image_decode_tasks_enabled = false; - settings.use_output_surface_begin_frame_source = true; + // TODO(crbug.com/603600): This should always be turned on once mus tells its + // clients about BeginFrame. + settings.use_output_surface_begin_frame_source = + !IsRunningInMojoShell(command_line); #if !defined(OS_ANDROID) // TODO(sohanjg): Revisit this memory usage in tile manager.
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc index bc494871..1b12e52e 100644 --- a/ui/events/blink/input_handler_proxy.cc +++ b/ui/events/blink/input_handler_proxy.cc
@@ -812,7 +812,7 @@ // If |result| is DROP_EVENT it wasn't processed above. if (result == DROP_EVENT) { switch (input_handler_->GetEventListenerProperties( - cc::EventListenerClass::kTouch)) { + cc::EventListenerClass::kTouchStartOrMove)) { case cc::EventListenerProperties::kPassive: result = DID_HANDLE_NON_BLOCKING; break; @@ -843,6 +843,17 @@ touch_start_result_ == DROP_EVENT || result == DID_NOT_HANDLE) touch_start_result_ = result; + // If |result| is still DROP_EVENT look at the touch end handler as + // we may not want to discard the entire touch sequence. Note this + // code is explicitly after the assignment of the |touch_start_result_| + // so the touch moves are not sent to the main thread un-necessarily. + if (result == DROP_EVENT && + input_handler_->GetEventListenerProperties( + cc::EventListenerClass::kTouchEndOrCancel) != + cc::EventListenerProperties::kNone) { + result = DID_HANDLE_NON_BLOCKING; + } + return result; }
diff --git a/ui/events/blink/input_handler_proxy_unittest.cc b/ui/events/blink/input_handler_proxy_unittest.cc index 729029b..51f3be2 100644 --- a/ui/events/blink/input_handler_proxy_unittest.cc +++ b/ui/events/blink/input_handler_proxy_unittest.cc
@@ -1991,8 +1991,13 @@ expected_disposition_ = InputHandlerProxy::DROP_EVENT; VERIFY_AND_RESET_MOCKS(); - EXPECT_CALL(mock_input_handler_, - GetEventListenerProperties(cc::EventListenerClass::kTouch)) + EXPECT_CALL( + mock_input_handler_, + GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) + .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); + EXPECT_CALL( + mock_input_handler_, + GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel)) .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) .WillOnce(testing::Return(false)); @@ -2048,8 +2053,9 @@ expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; VERIFY_AND_RESET_MOCKS(); - EXPECT_CALL(mock_input_handler_, - GetEventListenerProperties(cc::EventListenerClass::kTouch)) + EXPECT_CALL( + mock_input_handler_, + GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) .WillRepeatedly(testing::Return(cc::EventListenerProperties::kPassive)); EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) .WillRepeatedly(testing::Return(false)); @@ -2066,6 +2072,38 @@ VERIFY_AND_RESET_MOCKS(); } +TEST_P(InputHandlerProxyTest, TouchStartPassiveAndTouchEndBlocking) { + // The touch start is not in a touch-region but there is a touch end handler + // so to maintain targeting we need to dispatch the touch start as + // non-blocking but drop all touch moves. + expected_disposition_ = InputHandlerProxy::DID_HANDLE_NON_BLOCKING; + VERIFY_AND_RESET_MOCKS(); + + EXPECT_CALL( + mock_input_handler_, + GetEventListenerProperties(cc::EventListenerClass::kTouchStartOrMove)) + .WillOnce(testing::Return(cc::EventListenerProperties::kNone)); + EXPECT_CALL( + mock_input_handler_, + GetEventListenerProperties(cc::EventListenerClass::kTouchEndOrCancel)) + .WillOnce(testing::Return(cc::EventListenerProperties::kBlocking)); + EXPECT_CALL(mock_input_handler_, DoTouchEventsBlockScrollAt(testing::_)) + .WillOnce(testing::Return(false)); + + WebTouchEvent touch; + touch.type = WebInputEvent::TouchStart; + touch.touchesLength = 1; + touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 0, 0); + EXPECT_EQ(expected_disposition_, input_handler_->HandleInputEvent(touch)); + + touch.type = WebInputEvent::TouchMove; + touch.touchesLength = 1; + touch.touches[0] = CreateWebTouchPoint(WebTouchPoint::StatePressed, 10, 10); + EXPECT_EQ(InputHandlerProxy::DROP_EVENT, + input_handler_->HandleInputEvent(touch)); + VERIFY_AND_RESET_MOCKS(); +} + TEST_P(InputHandlerProxyTest, GestureFlingCancelledByKeyboardEvent) { // We shouldn't send any events to the widget for this gesture. expected_disposition_ = InputHandlerProxy::DID_HANDLE;
diff --git a/ui/events/event.cc b/ui/events/event.cc index b095d4a..9fffe28 100644 --- a/ui/events/event.cc +++ b/ui/events/event.cc
@@ -240,6 +240,16 @@ return static_cast<const KeyEvent*>(this); } +LocatedEvent* Event::AsLocatedEvent() { + CHECK(IsLocatedEvent()); + return static_cast<LocatedEvent*>(this); +} + +const LocatedEvent* Event::AsLocatedEvent() const { + CHECK(IsLocatedEvent()); + return static_cast<const LocatedEvent*>(this); +} + MouseEvent* Event::AsMouseEvent() { CHECK(IsMouseEvent()); return static_cast<MouseEvent*>(this);
diff --git a/ui/events/event.h b/ui/events/event.h index 07416945..870cdc67 100644 --- a/ui/events/event.h +++ b/ui/events/event.h
@@ -35,6 +35,7 @@ namespace ui { class EventTarget; class KeyEvent; +class LocatedEvent; class MouseEvent; class MouseWheelEvent; class PointerEvent; @@ -231,6 +232,11 @@ KeyEvent* AsKeyEvent(); const KeyEvent* AsKeyEvent() const; + // Convenience methods to cast |this| to a LocatedEvent. IsLocatedEvent() + // must be true as a precondition to calling these methods. + LocatedEvent* AsLocatedEvent(); + const LocatedEvent* AsLocatedEvent() const; + // Convenience methods to cast |this| to a MouseEvent. IsMouseEvent() // must be true as a precondition to calling these methods. MouseEvent* AsMouseEvent();
diff --git a/ui/events/ozone/BUILD.gn b/ui/events/ozone/BUILD.gn index b1f7953..02a03cd2 100644 --- a/ui/events/ozone/BUILD.gn +++ b/ui/events/ozone/BUILD.gn
@@ -202,13 +202,11 @@ configs += [ ":xkbcommon" ] sources += [ - "layout/xkb/xkb.h", "layout/xkb/xkb_evdev_codes.cc", "layout/xkb/xkb_evdev_codes.h", "layout/xkb/xkb_key_code_converter.h", "layout/xkb/xkb_keyboard_layout_engine.cc", "layout/xkb/xkb_keyboard_layout_engine.h", - "layout/xkb/xkb_keysym.h", ] } }
diff --git a/ui/events/ozone/events_ozone.gyp b/ui/events/ozone/events_ozone.gyp index 3562651..e7590609 100644 --- a/ui/events/ozone/events_ozone.gyp +++ b/ui/events/ozone/events_ozone.gyp
@@ -188,14 +188,11 @@ ], }, 'sources': [ - 'layout/xkb/scoped_xkb.h', - 'layout/xkb/xkb.h', 'layout/xkb/xkb_evdev_codes.cc', 'layout/xkb/xkb_evdev_codes.h', 'layout/xkb/xkb_key_code_converter.h', 'layout/xkb/xkb_keyboard_layout_engine.cc', 'layout/xkb/xkb_keyboard_layout_engine.h', - 'layout/xkb/xkb_keysym.h', ], }], ],
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index 1ace522..4b15f1b 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc
@@ -3043,8 +3043,9 @@ render_text->Draw(&canvas); ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); - const uint32_t* buffer = - static_cast<const uint32_t*>(surface->peekPixels(nullptr, nullptr)); + SkPixmap pixmap; + surface->peekPixels(&pixmap); + const uint32_t* buffer = static_cast<const uint32_t*>(pixmap.addr()); ASSERT_NE(nullptr, buffer); TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), kCanvasSize.height()); @@ -3128,8 +3129,9 @@ render_text->set_clip_to_display_rect(true); render_text->Draw(&canvas); ASSERT_LT(string_size.width() + kTestSize, kCanvasSize.width()); - const uint32_t* buffer = - static_cast<const uint32_t*>(surface->peekPixels(nullptr, nullptr)); + SkPixmap pixmap; + surface->peekPixels(&pixmap); + const uint32_t* buffer = static_cast<const uint32_t*>(pixmap.addr()); ASSERT_NE(nullptr, buffer); TestRectangleBuffer rect_buffer(string, buffer, kCanvasSize.width(), kCanvasSize.height());
diff --git a/ui/login/display_manager.js b/ui/login/display_manager.js index b44e359a..e0d6f92 100644 --- a/ui/login/display_manager.js +++ b/ui/login/display_manager.js
@@ -572,6 +572,9 @@ $('step-logo').hidden = newStep.classList.contains('no-logo'); + $('oobe').dispatchEvent( + new CustomEvent('screenchanged', + {detail: this.currentScreen.id})); chrome.send('updateCurrentScreen', [this.currentScreen.id]); },
diff --git a/ui/ozone/platform/caca/caca_window_manager.cc b/ui/ozone/platform/caca/caca_window_manager.cc index 9fb8c9e..7e1686f90 100644 --- a/ui/ozone/platform/caca/caca_window_manager.cc +++ b/ui/ozone/platform/caca/caca_window_manager.cc
@@ -87,18 +87,13 @@ void CacaSurface::PresentCanvas(const gfx::Rect& damage) { TRACE_EVENT0("ozone", "CacaSurface::PresentCanvas"); - SkImageInfo info; - size_t row_bytes; - const void* pixels = surface_->peekPixels(&info, &row_bytes); + SkPixmap pixmap; + surface_->peekPixels(&pixmap); caca_canvas_t* canvas = caca_get_canvas(window_->display()); - caca_dither_bitmap(canvas, - 0, - 0, - caca_get_canvas_width(canvas), - caca_get_canvas_height(canvas), - dither_.get(), - static_cast<const uint8_t*>(pixels)); + caca_dither_bitmap(canvas, 0, 0, caca_get_canvas_width(canvas), + caca_get_canvas_height(canvas), dither_.get(), + static_cast<const uint8_t*>(pixmap.addr())); caca_refresh_display(window_->display()); }
diff --git a/ui/ozone/platform/cast/BUILD.gn b/ui/ozone/platform/cast/BUILD.gn index 53de77f..638f64b 100644 --- a/ui/ozone/platform/cast/BUILD.gn +++ b/ui/ozone/platform/cast/BUILD.gn
@@ -48,5 +48,6 @@ "//ui/gfx/geometry", "//ui/ozone:ozone_base", "//ui/ozone/common", + "//ui/platform_window", ] }
diff --git a/ui/ozone/platform/drm/gpu/mock_drm_device.cc b/ui/ozone/platform/drm/gpu/mock_drm_device.cc index 9ab4e23..e7e8303 100644 --- a/ui/ozone/platform/drm/gpu/mock_drm_device.cc +++ b/ui/ozone/platform/drm/gpu/mock_drm_device.cc
@@ -203,7 +203,9 @@ if (handle >= buffers_.size() || !buffers_[handle]) return false; - *pixels = const_cast<void*>(buffers_[handle]->peekPixels(nullptr, nullptr)); + SkPixmap pixmap; + buffers_[handle]->peekPixels(&pixmap); + *pixels = const_cast<void*>(pixmap.addr()); return true; }
diff --git a/ui/ozone/platform/x11/BUILD.gn b/ui/ozone/platform/x11/BUILD.gn index 31185ddb..238a35e 100644 --- a/ui/ozone/platform/x11/BUILD.gn +++ b/ui/ozone/platform/x11/BUILD.gn
@@ -33,6 +33,7 @@ "//ui/gfx/x", "//ui/ozone:ozone_base", "//ui/ozone/common", + "//ui/platform_window", "//ui/platform_window/x11", ]
diff --git a/ui/views/animation/flood_fill_ink_drop_animation.cc b/ui/views/animation/flood_fill_ink_drop_animation.cc index 9cfe241..4520fb4 100644 --- a/ui/views/animation/flood_fill_ink_drop_animation.cc +++ b/ui/views/animation/flood_fill_ink_drop_animation.cc
@@ -120,6 +120,12 @@ root_layer_.SetMasksToBounds(true); root_layer_.SetBounds(gfx::Rect(size_)); + const gfx::Vector2dF translate_vector = + center_point_ - root_layer_.bounds().CenterPoint(); + gfx::Transform transfrom; + transfrom.Translate(translate_vector.x(), translate_vector.y()); + root_layer_.SetTransform(transfrom); + const int painted_size_length = 2 * std::max(size_.width(), size_.height()); painted_layer_.SetBounds(gfx::Rect(painted_size_length, painted_size_length)); @@ -307,7 +313,8 @@ ToRoundedPoint(circle_layer_delegate_.GetCenterPoint()); gfx::Transform transform = gfx::Transform(); - transform.Translate(center_point_.x(), center_point_.y()); + transform.Translate(root_layer_.bounds().CenterPoint().x(), + root_layer_.bounds().CenterPoint().y()); transform.Scale(target_scale, target_scale); transform.Translate(-drawn_center_point.x(), -drawn_center_point.y());
diff --git a/ui/views/bubble/tray_bubble_view.cc b/ui/views/bubble/tray_bubble_view.cc index 8bed90ea..3d6e648 100644 --- a/ui/views/bubble/tray_bubble_view.cc +++ b/ui/views/bubble/tray_bubble_view.cc
@@ -281,14 +281,14 @@ max_height(0), can_activate(false), close_on_deactivate(true), - close_via_capture(false), arrow_color(SK_ColorBLACK), first_item_has_no_margin(false), arrow(BubbleBorder::NONE), arrow_offset(kArrowDefaultOffset), arrow_paint_type(BubbleBorder::PAINT_NORMAL), shadow(BubbleBorder::BIG_SHADOW), - arrow_alignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE) {} + arrow_alignment(BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE) { +} TrayBubbleView::InitParams::InitParams(const InitParams& other) = default; @@ -356,12 +356,6 @@ GetWidget()->GetNativeWindow()->SetEventTargeter( std::unique_ptr<ui::EventTargeter>(new BubbleWindowTargeter(this))); UpdateBubble(); - - if (params_.close_via_capture) { - GetWidget()->set_auto_release_capture(false); - // Capture events to this view so it will be notified of capture loss. - GetWidget()->SetCapture(this); - } } void TrayBubbleView::UpdateBubble() { @@ -454,13 +448,6 @@ std::min(height, params_.max_height) : height; } -void TrayBubbleView::OnMouseCaptureLost() { - if (params_.close_via_capture && delegate_) { - // Let the delegate destroy the bubble in case it needs to do cleanup. - delegate_->HideBubble(this); - } -} - void TrayBubbleView::OnMouseEntered(const ui::MouseEvent& event) { mouse_watcher_.reset(); if (delegate_ && !(event.flags() & ui::EF_IS_SYNTHESIZED)) { @@ -495,17 +482,6 @@ delegate_->OnMouseExitedView(); } -bool TrayBubbleView::OnMousePressed(const ui::MouseEvent& event) { - if (params_.close_via_capture && GetWidget()->HasCapture() && - !bounds().Contains(event.location())) { - // Explicitly releasing capture will close the bubble. - GetWidget()->ReleaseCapture(); - // Don't return that the event was handled because other views may want to - // handle it or the window server may want to repost it. - } - return views::BubbleDelegateView::OnMousePressed(event); -} - void TrayBubbleView::GetAccessibleState(ui::AXViewState* state) { if (delegate_ && params_.can_activate) { state->role = ui::AX_ROLE_WINDOW;
diff --git a/ui/views/bubble/tray_bubble_view.h b/ui/views/bubble/tray_bubble_view.h index 60c2a94..28696a8f 100644 --- a/ui/views/bubble/tray_bubble_view.h +++ b/ui/views/bubble/tray_bubble_view.h
@@ -104,10 +104,6 @@ int max_height; bool can_activate; bool close_on_deactivate; - // When true the bubble starts event capture when it opens and closes itself - // on mouse events outside its bounds. Used on mus. Can be combined with - // close_on_deactivate. Defaults to false. - bool close_via_capture; SkColor arrow_color; bool first_item_has_no_margin; views::BubbleBorder::Arrow arrow; @@ -166,8 +162,6 @@ gfx::Size GetPreferredSize() const override; gfx::Size GetMaximumSize() const override; int GetHeightForWidth(int width) const override; - bool OnMousePressed(const ui::MouseEvent& event) override; - void OnMouseCaptureLost() override; void OnMouseEntered(const ui::MouseEvent& event) override; void OnMouseExited(const ui::MouseEvent& event) override; void GetAccessibleState(ui::AXViewState* state) override;
diff --git a/ui/views/mus/native_widget_mus.cc b/ui/views/mus/native_widget_mus.cc index c47066b8..180921b07 100644 --- a/ui/views/mus/native_widget_mus.cc +++ b/ui/views/mus/native_widget_mus.cc
@@ -146,15 +146,15 @@ void ResetWindowControls() override { // TODO(sky): push to wm? } - void UpdateWindowIcon() override { - // NOTIMPLEMENTED(); - } - void UpdateWindowTitle() override { - // NOTIMPLEMENTED(); - } - void SizeConstraintsChanged() override { - // NOTIMPLEMENTED(); - } + + // These have no implementation. The Window Manager handles the actual + // rendering of the icon/title. See NonClientFrameViewMash. The values + // associated with these methods are pushed to the server by the way of + // NativeWidgetMus functions. + void UpdateWindowIcon() override {} + void UpdateWindowTitle() override {} + void SizeConstraintsChanged() override {} + gfx::Size GetPreferredSize() const override { return widget_->non_client_view() ->GetWindowBoundsForClientBounds(
diff --git a/ui/views/mus/platform_window_mus.cc b/ui/views/mus/platform_window_mus.cc index 1ae09d1..1c21eadd 100644 --- a/ui/views/mus/platform_window_mus.cc +++ b/ui/views/mus/platform_window_mus.cc
@@ -227,9 +227,6 @@ // It's possible dispatching the event will spin a nested message loop. Ack // the callback now, otherwise we appear unresponsive for the life of the // nested message loop. - // TODO(jamescook): Only ack the event as handled if a nested message loop - // actually starts, perhaps through an observer on MessageLoop. Otherwise - // ack the event with the actual handled state below DispatchEvent(). (*ack_callback)->Run(true); ack_callback->reset(); // TODO(moshayedi): Avoid cloning after updating PlatformWindowDelegate to
diff --git a/ui/views/view.cc b/ui/views/view.cc index 431ba34..60d8e89 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc
@@ -2087,9 +2087,7 @@ SetLayer(new ui::Layer()); layer()->set_delegate(this); -#if !defined(NDEBUG) layer()->set_name(GetClassName()); -#endif UpdateParentLayers(); UpdateLayerVisibility();
diff --git a/ui/views/widget/root_view.cc b/ui/views/widget/root_view.cc index f3b1a829..cbfb8c4 100644 --- a/ui/views/widget/root_view.cc +++ b/ui/views/widget/root_view.cc
@@ -157,7 +157,6 @@ mouse_move_handler_(NULL), last_click_handler_(NULL), explicit_mouse_handler_(false), - clear_mouse_handler_on_release_(true), last_mouse_event_flags_(0), last_mouse_event_x_(-1), last_mouse_event_y_(-1), @@ -443,8 +442,7 @@ // We allow the view to delete us from the event dispatch callback. As such, // configure state such that we're done first, then call View. View* mouse_pressed_handler = mouse_pressed_handler_; - if (clear_mouse_handler_on_release_) - SetMouseHandler(nullptr); + SetMouseHandler(NULL); ui::EventDispatchDetails dispatch_details = DispatchEvent(mouse_pressed_handler, &mouse_released); if (dispatch_details.dispatcher_destroyed) @@ -595,7 +593,11 @@ } void RootView::SetMouseHandler(View* new_mh) { - SetMouseHandler(new_mh, true /* clear_on_release */); + // If we're clearing the mouse handler, clear explicit_mouse_handler_ as well. + explicit_mouse_handler_ = (new_mh != NULL); + mouse_pressed_handler_ = new_mh; + gesture_handler_ = new_mh; + drag_info_.Reset(); } void RootView::GetAccessibleState(ui::AXViewState* state) { @@ -635,7 +637,6 @@ // handlers are reset, so that after it is reshown, events are not captured // by old handlers. explicit_mouse_handler_ = false; - clear_mouse_handler_on_release_ = true; mouse_pressed_handler_ = NULL; mouse_move_handler_ = NULL; gesture_handler_ = NULL; @@ -705,15 +706,6 @@ return ui::EventDispatchDetails(); } -void RootView::SetMouseHandler(View* new_mh, bool clear_on_release) { - // If we're clearing the mouse handler, clear explicit_mouse_handler_ as well. - explicit_mouse_handler_ = (new_mh != nullptr); - clear_mouse_handler_on_release_ = clear_on_release; - mouse_pressed_handler_ = new_mh; - gesture_handler_ = new_mh; - drag_info_.Reset(); -} - bool RootView::CanDispatchToTarget(ui::EventTarget* target) { return event_dispatch_target_ == target; }
diff --git a/ui/views/widget/root_view.h b/ui/views/widget/root_view.h index 6a8ba3c..dea38d2b 100644 --- a/ui/views/widget/root_view.h +++ b/ui/views/widget/root_view.h
@@ -159,12 +159,6 @@ View* view, View* sibling) WARN_UNUSED_RESULT; - // Specialized version of SetMouseHandler(). If |clear_on_release| is true the - // mouse handler will be cleared on mouse release, which is the common case - // and used for drags. If |clear_on_release| is false then the mouse handler - // must be explicitly released by calling SetMouseHandler() with null. - void SetMouseHandler(View* view, bool clear_on_release); - // Overridden from ui::EventDispatcherDelegate: bool CanDispatchToTarget(ui::EventTarget* target) override; ui::EventDispatchDetails PreDispatchEvent(ui::EventTarget* target, @@ -193,13 +187,9 @@ // a double-click lands on the same view as its single-click part. View* last_click_handler_; - // True if mouse_pressed_handler_ has been explicitly set. + // true if mouse_pressed_handler_ has been explicitly set bool explicit_mouse_handler_; - // True if mouse_pressed_handler_ should be automatically cleared on mouse - // release, as is common during drags. - bool clear_mouse_handler_on_release_; - // Last position/flag of a mouse press/drag. Used if capture stops and we need // to synthesize a release. int last_mouse_event_flags_;
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc index be21038..ffafd0d 100644 --- a/ui/views/widget/widget.cc +++ b/ui/views/widget/widget.cc
@@ -933,7 +933,7 @@ if (internal::NativeWidgetPrivate::IsMouseButtonDown()) is_mouse_button_pressed_ = true; - root_view_->SetMouseHandler(view, auto_release_capture_); + root_view_->SetMouseHandler(view); } void Widget::ReleaseCapture() {
diff --git a/ui/views/widget/widget_interactive_uitest.cc b/ui/views/widget/widget_interactive_uitest.cc index 071be455..a6887d55 100644 --- a/ui/views/widget/widget_interactive_uitest.cc +++ b/ui/views/widget/widget_interactive_uitest.cc
@@ -83,7 +83,12 @@ // A view that always processes all mouse events. class MouseView : public View { public: - MouseView() {} + MouseView() + : View(), + entered_(0), + exited_(0), + pressed_(0) { + } ~MouseView() override {} bool OnMousePressed(const ui::MouseEvent& event) override { @@ -91,8 +96,6 @@ return true; } - void OnMouseReleased(const ui::MouseEvent& event) override { released_++; } - void OnMouseEntered(const ui::MouseEvent& event) override { entered_++; } void OnMouseExited(const ui::MouseEvent& event) override { exited_++; } @@ -112,14 +115,12 @@ } int pressed() const { return pressed_; } - int released() const { return released_; } private: - int entered_ = 0; - int exited_ = 0; + int entered_; + int exited_; - int pressed_ = 0; - int released_ = 0; + int pressed_; DISALLOW_COPY_AND_ASSIGN(MouseView); }; @@ -365,7 +366,7 @@ toplevel->SetContentsView(container); EXPECT_FALSE(toplevel->HasCapture()); - toplevel->SetCapture(nullptr); + toplevel->SetCapture(NULL); EXPECT_TRUE(toplevel->HasCapture()); // By default, mouse release removes capture. @@ -378,53 +379,15 @@ // Now a mouse release shouldn't remove capture. toplevel->set_auto_release_capture(false); - toplevel->SetCapture(nullptr); + toplevel->SetCapture(NULL); EXPECT_TRUE(toplevel->HasCapture()); toplevel->OnMouseEvent(&release); EXPECT_TRUE(toplevel->HasCapture()); toplevel->ReleaseCapture(); EXPECT_FALSE(toplevel->HasCapture()); - toplevel->CloseNow(); -} - -// Tests capture when auto-release is disabled and events are captured to a -// specific view. -TEST_F(WidgetTestInteractive, CaptureToViewWithoutAutoRelease) { - Widget* widget = CreateTopLevelFramelessPlatformWidget(); - MouseView* target_view = new MouseView; - widget->SetContentsView(target_view); - - // Set capture to a specific view. - widget->set_auto_release_capture(false); - widget->SetCapture(target_view); - EXPECT_TRUE(widget->HasCapture()); - - // A click is routed to the view and capture is not released on mouse release. - gfx::Point point(12, 34); - ui::MouseEvent press(ui::ET_MOUSE_PRESSED, point, point, - ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); - ui::MouseEvent release(ui::ET_MOUSE_RELEASED, point, point, - ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); - widget->OnMouseEvent(&press); - widget->OnMouseEvent(&release); - EXPECT_EQ(1, target_view->pressed()); - EXPECT_EQ(1, target_view->released()); - - // Future events are still routed to the view. - widget->OnMouseEvent(&press); - widget->OnMouseEvent(&release); - EXPECT_EQ(2, target_view->pressed()); - EXPECT_EQ(2, target_view->released()); - - // Capture must be explicitly released. - EXPECT_TRUE(widget->HasCapture()); - widget->ReleaseCapture(); - EXPECT_FALSE(widget->HasCapture()); - - widget->CloseNow(); + toplevel->Close(); + RunPendingMessages(); } TEST_F(WidgetTestInteractive, ResetCaptureOnGestureEnd) {
diff --git a/url/BUILD.gn b/url/BUILD.gn index 361c516..764e3a9 100644 --- a/url/BUILD.gn +++ b/url/BUILD.gn
@@ -2,60 +2,57 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/buildflag_header.gni") import("//testing/test.gni") +import("features.gni") if (is_android) { import("//build/config/android/rules.gni") } -# Shared sources between url and url_lib_use_icu_alternatives_on_android. -url_shared_sources = [ - "gurl.cc", - "gurl.h", - "origin.cc", - "origin.h", - "scheme_host_port.cc", - "scheme_host_port.h", - "third_party/mozilla/url_parse.cc", - "third_party/mozilla/url_parse.h", - "url_canon.h", - "url_canon_etc.cc", - "url_canon_filesystemurl.cc", - "url_canon_fileurl.cc", - "url_canon_host.cc", - "url_canon_internal.cc", - "url_canon_internal.h", - "url_canon_internal_file.h", - "url_canon_ip.cc", - "url_canon_ip.h", - "url_canon_mailtourl.cc", - "url_canon_path.cc", - "url_canon_pathurl.cc", - "url_canon_query.cc", - "url_canon_relative.cc", - "url_canon_stdstring.cc", - "url_canon_stdstring.h", - "url_canon_stdurl.cc", - "url_constants.cc", - "url_constants.h", - "url_export.h", - "url_file.h", - "url_parse_file.cc", - "url_parse_internal.h", - "url_util.cc", - "url_util.h", -] +buildflag_header("url_features") { + header = "url_features.h" + flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ] +} component("url") { - sources = url_shared_sources + [ - "url_canon_icu.cc", - "url_canon_icu.h", - ] + sources = [ + "gurl.cc", + "gurl.h", + "origin.cc", + "origin.h", + "scheme_host_port.cc", + "scheme_host_port.h", + "third_party/mozilla/url_parse.cc", + "third_party/mozilla/url_parse.h", + "url_canon.h", + "url_canon_etc.cc", + "url_canon_filesystemurl.cc", + "url_canon_fileurl.cc", + "url_canon_host.cc", + "url_canon_internal.cc", + "url_canon_internal.h", + "url_canon_internal_file.h", + "url_canon_ip.cc", + "url_canon_ip.h", + "url_canon_mailtourl.cc", + "url_canon_path.cc", + "url_canon_pathurl.cc", + "url_canon_query.cc", + "url_canon_relative.cc", + "url_canon_stdstring.cc", + "url_canon_stdstring.h", + "url_canon_stdurl.cc", + "url_constants.cc", + "url_constants.h", + "url_export.h", + "url_file.h", + "url_parse_file.cc", + "url_parse_internal.h", + "url_util.cc", + "url_util.h", + ] - if (is_win) { - # Don't conflict with Windows' "url.dll". - output_name = "url_lib" - } defines = [ "URL_IMPLEMENTATION" ] configs += [ @@ -66,9 +63,43 @@ deps = [ "//base", "//base/third_party/dynamic_annotations", - "//third_party/icu", - "//third_party/icu:icudata", ] + + if (is_win) { + # Don't conflict with Windows' "url.dll". + output_name = "url_lib" + } + + # ICU support. + if (use_platform_icu_alternatives) { + if (is_android) { + sources += [ + "android/url_jni_registrar.cc", + "android/url_jni_registrar.h", + "url_canon_icu_alternatives_android.cc", + "url_canon_icu_alternatives_android.h", + ] + deps += [ + ":url_features", + ":url_java", + ":url_jni_headers", + "//base", + "//base/third_party/dynamic_annotations", + ] + } else if (is_ios) { + sources += [ "url_canon_icu_alternatives_ios.mm" ] + } else { + assert(false, + "ICU alternative is not implemented for platform: " + target_os) + } + } else { + # Use ICU. + sources += [ + "url_canon_icu.cc", + "url_canon_icu.h", + ] + deps += [ "//third_party/icu" ] + } } if (is_android) { @@ -85,32 +116,6 @@ ] jni_package = "url" } - - component("url_lib_use_icu_alternatives_on_android") { - sources = url_shared_sources + [ - "android/url_jni_registrar.cc", - "android/url_jni_registrar.h", - "url_canon_icu_alternatives_android.cc", - "url_canon_icu_alternatives_android.h", - ] - - defines = [ - "URL_IMPLEMENTATION", - "USE_ICU_ALTERNATIVES_ON_ANDROID=1", - ] - - configs += [ - # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. - "//build/config/compiler:no_size_t_to_int_warning", - ] - - deps = [ - ":url_java", - ":url_jni_headers", - "//base", - "//base/third_party/dynamic_annotations", - ] - } } test("url_unittests") { @@ -126,22 +131,44 @@ "url_util_unittest.cc", ] - if (!is_ios) { - sources += [ "mojo/url_gurl_struct_traits_unittest.cc" ] - } - - # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. - configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] - deps = [ ":url", "//base", "//base/test:test_support", "//testing/gtest", - "//third_party/icu:icuuc", ] if (!is_ios) { + sources += [ "mojo/url_gurl_struct_traits_unittest.cc" ] + } + + if (use_platform_icu_alternatives) { + # Unit tests that are not supported by the current ICU alternatives on Android. + if (is_android) { + sources -= [ + "url_canon_icu_unittest.cc", + "url_canon_unittest.cc", + ] + deps += [ ":url_java" ] + } + + # Unit tests that are not supported by the current ICU alternatives on iOS. + if (is_ios) { + sources -= [ + "origin_unittest.cc", + "scheme_host_port_unittest.cc", + "url_canon_icu_unittest.cc", + "url_canon_unittest.cc", + ] + } + } else { # !use_platform_icu_alternatives + deps += [ "//third_party/icu:icuuc" ] + } + + # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] + + if (!is_ios) { deps += [ "//mojo/edk/system", "//mojo/edk/test:test_support",
diff --git a/url/android/url_jni_registrar.cc b/url/android/url_jni_registrar.cc index 82a6e1b7..f594d24 100644 --- a/url/android/url_jni_registrar.cc +++ b/url/android/url_jni_registrar.cc
@@ -3,8 +3,9 @@ // found in the LICENSE file. #include "url/android/url_jni_registrar.h" +#include "url/url_features.h" -#ifdef USE_ICU_ALTERNATIVES_ON_ANDROID +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) #include "url/url_canon_icu_alternatives_android.h" #endif @@ -12,11 +13,11 @@ namespace android { bool RegisterJni(JNIEnv* env) { -#ifdef USE_ICU_ALTERNATIVES_ON_ANDROID +#if BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) return RegisterIcuAlternativesJni(env); #endif - // Do nothing if USE_ICU_ALTERNATIVES_ON_ANDROID is not defined. + // Do nothing if USE_PLATFORM_ICU_ALTERNATIVES is false. return true; }
diff --git a/url/features.gni b/url/features.gni new file mode 100644 index 0000000..3b55cc75 --- /dev/null +++ b/url/features.gni
@@ -0,0 +1,11 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Features used by targets inside and outside of |url|. +# For details see declare_args() in build/config/BUILDCONFIG.gn. +declare_args() { + # Enables the use of ICU alternatives in lieu of ICU. The flag is used + # for Cronet to reduce the size of the Cronet binary. + use_platform_icu_alternatives = false +}
diff --git a/url/url.gyp b/url/url.gyp index 9ab87e1..a1670725 100644 --- a/url/url.gyp +++ b/url/url.gyp
@@ -19,8 +19,7 @@ 'dependencies': [ '../base/base.gyp:base', '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', - '../third_party/icu/icu.gyp:icui18n', - '../third_party/icu/icu.gyp:icuuc', + ':url_url_features', ], 'sources': [ '<@(gurl_sources)', @@ -35,6 +34,40 @@ ], # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. 'msvs_disabled_warnings': [4267, ], + + # ICU Alternatives for Android & iOS + 'conditions': [ + ['use_platform_icu_alternatives == 1', { + 'sources!': [ + 'url_canon_icu.cc', + 'url_canon_icu.h', + ], + 'conditions': [ + ['OS == "android"', { + 'dependencies': [ + 'url_java', + 'url_jni_headers', + ], + 'sources': [ + 'url_canon_icu_alternatives_android.cc', + 'url_canon_icu_alternatives_android.h', + ], + }], + ['OS == "ios"', { + 'sources': [ + 'url_canon_icu_alternatives_ios.mm', + ], + }], + ], + }, + # 'use_platform_icu_alternatives != 1' + { + 'dependencies': [ + '../third_party/icu/icu.gyp:icui18n', + '../third_party/icu/icu.gyp:icuuc', + ], + }], + ], }, { 'target_name': 'url_unittests', @@ -64,6 +97,21 @@ 'mojo/url_gurl_struct_traits_unittest.cc', ], }], + # Unit tests that are not supported by the current ICU alternatives on Android. + ['OS == "android" and use_platform_icu_alternatives == 1', { + 'sources!': [ + 'url_canon_icu_unittest.cc', + ], + }], + # Unit tests that are not supported by the current ICU alternatives on iOS. + ['OS == "ios" and use_platform_icu_alternatives == 1', { + 'sources!': [ + 'origin_unittest.cc', + 'scheme_host_port_unittest.cc', + 'url_canon_icu_unittest.cc', + 'url_canon_unittest.cc', + ], + }], ], # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. 'msvs_disabled_warnings': [4267, ], @@ -124,6 +172,17 @@ 'url_test_interfaces_mojom', ], }, + { + # GN version: //url:url_features + 'target_name': 'url_url_features', + 'includes': [ '../build/buildflag_header.gypi' ], + 'variables': { + 'buildflag_header_path': 'url/url_features.h', + 'buildflag_flags': [ + 'USE_PLATFORM_ICU_ALTERNATIVES=<(use_platform_icu_alternatives)', + ], + }, + } ], 'conditions': [ ['OS=="android"', { @@ -150,35 +209,6 @@ ], 'includes': [ '../build/java.gypi' ], }, - { - # Same as url_lib but using ICU alternatives on Android. - 'target_name': 'url_lib_use_icu_alternatives_on_android', - 'type': '<(component)', - 'dependencies': [ - '../base/base.gyp:base', - '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', - 'url_java', - 'url_jni_headers', - ], - 'sources': [ - '<@(gurl_sources)', - 'url_canon_icu_alternatives_android.cc', - 'url_canon_icu_alternatives_android.h', - ], - 'sources!': [ - 'url_canon_icu.cc', - 'url_canon_icu.h', - ], - 'direct_dependent_settings': { - 'include_dirs': [ - '..', - ], - }, - 'defines': [ - 'URL_IMPLEMENTATION', - 'USE_ICU_ALTERNATIVES_ON_ANDROID=1', - ], - }, ], }], ['test_isolation_mode != "noop"', {
diff --git a/url/url_canon_icu_alternatives_ios.mm b/url/url_canon_icu_alternatives_ios.mm new file mode 100644 index 0000000..66b844e8 --- /dev/null +++ b/url/url_canon_icu_alternatives_ios.mm
@@ -0,0 +1,26 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <string.h> + +#include "base/strings/string16.h" +#include "base/strings/string_piece.h" +#include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" +#include "url/url_canon_internal.h" + +namespace url { + +// Only allow ASCII to avoid ICU dependency. Use NSString+IDN +// to convert non-ASCII URL prior to passing to API. +bool IDNToASCII(const base::char16* src, int src_len, CanonOutputW* output) { + if (base::IsStringASCII(base::StringPiece16(src, src_len))) { + output->Append(src, src_len); + return true; + } + DCHECK(false) << "IDN URL support is not available."; + return false; +} + +} // namespace url \ No newline at end of file