diff --git a/DEPS b/DEPS index 6738eba1..ca40979 100644 --- a/DEPS +++ b/DEPS
@@ -105,11 +105,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': '0191ed8e87dca709c1248a685248e0a694bce80a', + 'skia_revision': '774b566c13088006f4ca8c358c60352d76795678', # 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': '345f55139f62a25e371d310b6e6d4c7d422062fc', + 'v8_revision': '604c50c84e672c099cbcbd6dd19928a0381d9688', # 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. @@ -117,7 +117,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '0fdb956d9c241f67bfab8a81256147020d9a93f9', + 'angle_revision': 'fcfd3382d4abfebd07371d5f35609d26f79cb6b7', # 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. @@ -165,7 +165,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': '874b57542941b7e9d5a099bdc5bcc0ee1c5b10ea', + 'catapult_revision': 'c968ea0b6538e061bc724fb4850645b65679ced0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -584,7 +584,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '2426fe64bffb099a84645fdfb326a813307248db', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '57988b451c5ca7db1f6321aecc90fb7af664b838', 'condition': 'checkout_linux', }, @@ -609,7 +609,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '1aa405fd859a3bd625b0d61184d6e4a3cf95c0b4', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '07b5283a4ea1056007f6c2ec233411b72caa3227', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -1129,7 +1129,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@cb44953479a132369f22beb6cf0e5af15767e300', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@0c858b7a312a2ab8e1f61e4a328f9f9b12882b90', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/browser/aw_render_thread_context_provider.cc b/android_webview/browser/aw_render_thread_context_provider.cc index b4a2e95..e9a229e 100644 --- a/android_webview/browser/aw_render_thread_context_provider.cc +++ b/android_webview/browser/aw_render_thread_context_provider.cc
@@ -68,7 +68,7 @@ context_ = std::make_unique<gpu::GLInProcessContext>(); context_->Initialize(std::move(task_executor), surface, surface->IsOffscreen(), gpu::kNullSurfaceHandle, - attributes, limits, nullptr, nullptr, nullptr, nullptr); + attributes, limits, nullptr, nullptr, nullptr); context_->GetImplementation()->SetLostContextCallback(base::BindOnce( &AwRenderThreadContextProvider::OnLostContext, base::Unretained(this)));
diff --git a/android_webview/renderer/aw_render_frame_ext.cc b/android_webview/renderer/aw_render_frame_ext.cc index 8f23bb6..d2fc7c5 100644 --- a/android_webview/renderer/aw_render_frame_ext.cc +++ b/android_webview/renderer/aw_render_frame_ext.cc
@@ -160,8 +160,8 @@ } void AwRenderFrameExt::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); content::DocumentState* document_state = content::DocumentState::FromDocumentLoader(frame->GetDocumentLoader());
diff --git a/android_webview/renderer/aw_render_frame_ext.h b/android_webview/renderer/aw_render_frame_ext.h index dfa6ec9..9b7698b2 100644 --- a/android_webview/renderer/aw_render_frame_ext.h +++ b/android_webview/renderer/aw_render_frame_ext.h
@@ -36,8 +36,8 @@ bool OnAssociatedInterfaceRequestForFrame( const std::string& interface_name, mojo::ScopedInterfaceEndpointHandle* handle) override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; bool OnMessageReceived(const IPC::Message& message) override; void FocusedNodeChanged(const blink::WebNode& node) override;
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index b50eca3..85b0d0ba 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1180,8 +1180,6 @@ "wm/overview/window_selector_item.h", "wm/property_util.cc", "wm/property_util.h", - "wm/resize_handle_window_targeter.cc", - "wm/resize_handle_window_targeter.h", "wm/resize_shadow.cc", "wm/resize_shadow.h", "wm/resize_shadow_controller.cc", @@ -2176,6 +2174,7 @@ "//ash:ash_with_content", "//content/public/browser", "//content/test:test_support", + "//services/network:test_support", "//skia", "//ui/views/controls/webview", ] @@ -2387,6 +2386,7 @@ "//testing/gtest", "//ui/aura", "//ui/base", + "//ui/base:test_support", "//ui/gl:test_support", ] }
diff --git a/ash/app_list/pagination_controller.cc b/ash/app_list/pagination_controller.cc index d0469c6..595183e0 100644 --- a/ash/app_list/pagination_controller.cc +++ b/ash/app_list/pagination_controller.cc
@@ -68,13 +68,8 @@ float scroll = scroll_axis_ == SCROLL_AXIS_HORIZONTAL ? details.scroll_x_hint() : details.scroll_y_hint(); - if (scroll == 0 || - !pagination_model_->IsValidPageRelative(scroll < 0 ? 1 : -1)) { - // scroll > 0 means moving contents right or down. That is, - // transitioning to the previous page. If scrolling to an invalid page, - // do not handle this event. + if (scroll == 0) return false; - } pagination_model_->StartScroll(); return true; } @@ -82,6 +77,13 @@ float scroll = scroll_axis_ == SCROLL_AXIS_HORIZONTAL ? details.scroll_x() : details.scroll_y(); + if (!pagination_model_->IsValidPageRelative(scroll < 0 ? 1 : -1) && + !pagination_model_->has_transition()) { + // scroll > 0 means moving contents right or down. That is, + // transitioning to the previous page. If scrolling to an invalid page, + // ignore the event until movement continues in a valid direction. + return true; + } int width = scroll_axis_ == SCROLL_AXIS_HORIZONTAL ? bounds.width() : bounds.height(); pagination_model_->UpdateScroll(scroll / width);
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc index 068a5c442..340295d9 100644 --- a/ash/app_list/views/app_list_view.cc +++ b/ash/app_list/views/app_list_view.cc
@@ -366,6 +366,9 @@ SetState(app_list_state_); + // Ensures that the launcher won't open underneath the a11y keyboard + CloseKeyboardIfVisible(); + // Tablet mode is enabled before the app list is shown, so apply the changes // that should occur upon entering the tablet mode here. if (IsHomeLauncherEnabledInTabletMode()) @@ -386,11 +389,11 @@ } void AppListView::Dismiss() { + CloseKeyboardIfVisible(); app_list_main_view_->Close(); delegate_->DismissAppList(); SetState(AppListViewState::CLOSED); GetWidget()->Deactivate(); - CloseKeyboardIfVisible(); } bool AppListView::CloseOpenedPage() { @@ -1618,8 +1621,10 @@ bool AppListView::CloseKeyboardIfVisible() { // TODO(ginko) abstract this function to be in |keyboard::KeyboardController| + if (!keyboard::KeyboardController::HasInstance()) + return false; auto* const keyboard_controller = keyboard::KeyboardController::Get(); - if (keyboard_controller && keyboard_controller->enabled() && + if (keyboard_controller->enabled() && keyboard_controller->IsKeyboardVisible()) { keyboard_controller->HideKeyboardByUser(); return true;
diff --git a/ash/app_list/views/apps_grid_view.cc b/ash/app_list/views/apps_grid_view.cc index e8a6b32..56f41e9 100644 --- a/ash/app_list/views/apps_grid_view.cc +++ b/ash/app_list/views/apps_grid_view.cc
@@ -1002,6 +1002,15 @@ return; } + // If the event is a scroll down in clamshell mode on the first page, don't + // let |pagination_controller_| handle it. Unless it occurs in a folder. + if (!folder_delegate_ && event->type() == ui::ET_GESTURE_SCROLL_BEGIN && + !contents_view_->app_list_view()->IsHomeLauncherEnabledInTabletMode() && + pagination_model_.selected_page() == 0 && + event->details().scroll_y_hint() > 0) { + return; + } + // Scroll begin events should not be passed to ancestor views if it occurs // inside the folder bounds even it is not handled. This prevents user from // closing the folder when scrolling inside it.
diff --git a/ash/assistant/ui/main_stage/assistant_main_stage.cc b/ash/assistant/ui/main_stage/assistant_main_stage.cc index 91fce95..f9a9048 100644 --- a/ash/assistant/ui/main_stage/assistant_main_stage.cc +++ b/ash/assistant/ui/main_stage/assistant_main_stage.cc
@@ -104,19 +104,44 @@ // StackLayout ----------------------------------------------------------------- // A layout manager which lays out its views atop each other. This differs from -// FillLayout in that we respect the preferred size of views during layout. In -// contrast, FillLayout will cause its views to match the bounds of the host. +// FillLayout in that we respect the preferred size of views during layout. It's +// possible to explicitly specify which dimension to respect. In contrast, +// FillLayout will cause its views to match the bounds of the host. class StackLayout : public views::LayoutManager { public: + enum class RespectDimension : uint32_t { + // Respect width. If enabled, child's preferred width will be used and will + // be horizontally center positioned. Otherwise, the child will be stretched + // to match parent width. + kWidth = 1, + // Repect height. If enabled, child's preferred height will be used. + // Otherwise, the child will be stretched to match parent height. + // Note that the child is always top-aligned. + kHeight = 1 << 1, + kAll = kWidth | kHeight, + }; + StackLayout() = default; ~StackLayout() override = default; + void Installed(views::View* host) override { host_ = host; } + + void ViewRemoved(views::View* host, views::View* view) override { + DCHECK(view); + respect_dimension_map_.erase(view); + } + + void SetRespectDimensionForView(views::View* view, + RespectDimension dimension) { + DCHECK(host_ && view->parent() == host_); + respect_dimension_map_[view] = dimension; + } + gfx::Size GetPreferredSize(const views::View* host) const override { gfx::Size preferred_size; for (int i = 0; i < host->child_count(); ++i) preferred_size.SetToMax(host->child_at(i)->GetPreferredSize()); - return preferred_size; } @@ -134,20 +159,36 @@ void Layout(views::View* host) override { const int host_width = host->GetContentsBounds().width(); + const int host_height = host->GetContentsBounds().height(); for (int i = 0; i < host->child_count(); ++i) { views::View* child = host->child_at(i); - int child_width = std::min(child->GetPreferredSize().width(), host_width); - int child_height = child->GetHeightForWidth(child_width); + int child_width = host_width; + int child_height = host_height; - // Children are horizontally centered, top aligned. - child->SetBounds(/*x=*/(host_width - child_width) / 2, /*y=*/0, - child_width, child_height); + int child_x = 0; + uint32_t dimension = static_cast<uint32_t>(RespectDimension::kAll); + + if (respect_dimension_map_.find(child) != respect_dimension_map_.end()) + dimension = static_cast<uint32_t>(respect_dimension_map_[child]); + + if (dimension & static_cast<uint32_t>(RespectDimension::kWidth)) { + child_width = std::min(child->GetPreferredSize().width(), host_width); + child_x = (host_width - child_width) / 2; + } + + if (dimension & static_cast<uint32_t>(RespectDimension::kHeight)) + child_height = child->GetHeightForWidth(child_width); + + child->SetBounds(child_x, /*y=*/0, child_width, child_height); } } private: + views::View* host_ = nullptr; + std::map<views::View*, RespectDimension> respect_dimension_map_; + DISALLOW_COPY_AND_ASSIGN(StackLayout); }; @@ -294,7 +335,9 @@ // underlying views. Events pass through the overlay layout container. overlay_layout_container_ = new views::View(); overlay_layout_container_->set_can_process_events_within_subtree(false); - overlay_layout_container_->SetLayoutManager(std::make_unique<StackLayout>()); + + auto* stack_layout = overlay_layout_container_->SetLayoutManager( + std::make_unique<StackLayout>()); // Greeting label. greeting_label_ = new views::Label( @@ -317,6 +360,12 @@ overlay_layout_container_->AddChildView(greeting_label_); + // We need to stretch |greeting_label_| to match its parent so that it + // won't use heuristics in Label to infer line breaking, which seems to cause + // text clipping with DPI adjustment. See b/112843496. + stack_layout->SetRespectDimensionForView( + greeting_label_, StackLayout::RespectDimension::kHeight); + // Progress indicator. progress_indicator_ = new AssistantProgressIndicator(); progress_indicator_->SetBorder(
diff --git a/ash/frame/non_client_frame_view_ash.cc b/ash/frame/non_client_frame_view_ash.cc index bb5cf715..5e626ea7 100644 --- a/ash/frame/non_client_frame_view_ash.cc +++ b/ash/frame/non_client_frame_view_ash.cc
@@ -19,7 +19,6 @@ #include "ash/public/cpp/window_properties.h" #include "ash/shell.h" #include "ash/wm/overview/window_selector_controller.h" -#include "ash/wm/resize_handle_window_targeter.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/tablet_mode/tablet_mode_observer.h" #include "ash/wm/window_state.h" @@ -245,7 +244,7 @@ immersive_delegate_(immersive_delegate ? immersive_delegate : header_view_) { aura::Window* frame_window = frame->GetNativeWindow(); - wm::InstallResizeHandleWindowTargeterForWindow(frame_window, nullptr); + wm::InstallResizeHandleWindowTargeterForWindow(frame_window); // |header_view_| is set as the non client view's overlay view so that it can // overlay the web contents in immersive fullscreen. frame->non_client_view()->SetOverlayView(overlay_view_);
diff --git a/ash/public/cpp/immersive/immersive_context.h b/ash/public/cpp/immersive/immersive_context.h index f5426465..cfb666e7 100644 --- a/ash/public/cpp/immersive/immersive_context.h +++ b/ash/public/cpp/immersive/immersive_context.h
@@ -32,11 +32,6 @@ public: static ImmersiveContext* Get() { return instance_; } - // Mirrors that of Shell::InstallResizeHandleWindowTargeter(), see it - // for details - virtual void InstallResizeHandleWindowTargeter( - ImmersiveFullscreenController* controller) = 0; - // Used to setup state necessary for entering or existing immersive mode. It // is expected this interacts with the shelf, and installs any other necessary // state.
diff --git a/ash/public/cpp/immersive/immersive_fullscreen_controller.cc b/ash/public/cpp/immersive/immersive_fullscreen_controller.cc index fa8816d..782cd11 100644 --- a/ash/public/cpp/immersive/immersive_fullscreen_controller.cc +++ b/ash/public/cpp/immersive/immersive_fullscreen_controller.cc
@@ -14,6 +14,7 @@ #include "ash/public/cpp/window_properties.h" #include "base/metrics/histogram_macros.h" #include "ui/aura/window.h" +#include "ui/aura/window_targeter.h" #include "ui/display/display.h" #include "ui/display/screen.h" #include "ui/events/base_event_utils.h" @@ -28,6 +29,24 @@ namespace { +// A window targeter installed on a Widget's window when it's in immersive mode. +// This targeter insets the touch area for direct children of the window it's +// installed on (see calls to SetInsets) so that gestures at the top of the +// screen will be directed to the Widget window for triggering immersive reveal. +// The insets are disabled while the top view is revealed. +class ImmersiveWindowTargeter : public aura::WindowTargeter { + public: + ImmersiveWindowTargeter() = default; + ~ImmersiveWindowTargeter() override = default; + + bool ShouldUseExtendedBounds(const aura::Window* target) const override { + return target->parent() == window(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(ImmersiveWindowTargeter); +}; + // Duration for the reveal show/hide slide animation. The slower duration is // used for the initial slide out to give the user more change to see what // happened. @@ -98,7 +117,6 @@ delegate_ = delegate; top_container_ = top_container; widget_ = widget; - ImmersiveContext::Get()->InstallResizeHandleWindowTargeter(this); EnableWindowObservers(true); } @@ -534,6 +552,8 @@ RevealState previous_reveal_state = reveal_state_; reveal_state_ = SLIDING_OPEN; if (previous_reveal_state == CLOSED) { + EnableTouchInsets(false); + delegate_->OnImmersiveRevealStarted(); // Do not do any more processing if OnImmersiveRevealStarted() changed @@ -589,6 +609,8 @@ void ImmersiveFullscreenController::OnSlideClosedAnimationCompleted() { DCHECK_EQ(SLIDING_CLOSED, reveal_state_); reveal_state_ = CLOSED; + + EnableTouchInsets(true); delegate_->OnImmersiveRevealEnded(); } @@ -689,6 +711,9 @@ // Animate enabling immersive mode by sliding out the top-of-window views. // No animation occurs if a lock is holding the top-of-window views open. + normal_targeter_ = widget_->GetNativeWindow()->SetEventTargeter( + std::make_unique<ImmersiveWindowTargeter>()); + // Do a reveal to set the initial state for the animation. (And any // required state in case the animation cannot run because of a lock holding // the top-of-window views open.) @@ -714,6 +739,8 @@ top_edge_hover_timer_.Stop(); reveal_state_ = CLOSED; + widget_->GetNativeWindow()->SetEventTargeter(std::move(normal_targeter_)); + delegate_->OnImmersiveFullscreenExited(); } @@ -726,4 +753,12 @@ } } +void ImmersiveFullscreenController::EnableTouchInsets(bool enable) { + if (!widget_->GetNativeWindow()->targeter()) + return; + + widget_->GetNativeWindow()->targeter()->SetInsets( + {}, gfx::Insets(enable ? kImmersiveFullscreenTopEdgeInset : 0, 0, 0, 0)); +} + } // namespace ash
diff --git a/ash/public/cpp/immersive/immersive_fullscreen_controller.h b/ash/public/cpp/immersive/immersive_fullscreen_controller.h index 293dddb..f84fda05 100644 --- a/ash/public/cpp/immersive/immersive_fullscreen_controller.h +++ b/ash/public/cpp/immersive/immersive_fullscreen_controller.h
@@ -18,6 +18,10 @@ #include "ui/views/view_observer.h" #include "ui/views/widget/widget_observer.h" +namespace aura { +class WindowTargeter; +} + namespace gfx { class Point; class SlideAnimation; @@ -240,6 +244,12 @@ // kImmersiveIsActive property. void UpdateEnabled(); + // Adds insets that redirect touch events at the top of the Widget to the + // Widget's window instead of a child window. These insets allow triggering + // immersive reveal and are not used when the immersive reveal is already + // active. + void EnableTouchInsets(bool enable); + // Not owned. ImmersiveFullscreenControllerDelegate* delegate_; views::View* top_container_; @@ -282,6 +292,11 @@ std::unique_ptr<ImmersiveFocusWatcher> immersive_focus_watcher_; std::unique_ptr<ImmersiveGestureHandler> immersive_gesture_handler_; + // The window targeter that was in use before immersive fullscreen mode was + // entered, if any. Will be re-installed on the window after leaving immersive + // fullscreen. + std::unique_ptr<aura::WindowTargeter> normal_targeter_; + // |animations_disabled_for_test_| is initialized to this. See // ImmersiveFullscreenControllerTestApi::GlobalAnimationDisabler for details. static bool value_for_animations_disabled_for_test_;
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb index 010e5e0..612b6b5b 100644 --- a/ash/strings/ash_strings_am.xtb +++ b/ash/strings/ash_strings_am.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">ይህ አውታረ መረብ በአስተዳዳሪዎ ነው የተሰናከለው።</translation> <translation id="7067196344162293536">በራስ-አሽከርክር</translation> <translation id="7068360136237591149">ፋይሎችን ይክፈቱ</translation> -<translation id="7076293881109082629">በመግባት ላይ</translation> <translation id="7092922358121866860">የማታ ብርሃን ቅንብሮችን አሳይ</translation> <translation id="7098389117866926363">USB-C መሣሪያ (የግራ ወደብ ከኋላ በኩል)</translation> <translation id="7131634465328662194">በራስሰር ዘግተው እንዲወጡ ይደረጋሉ።</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb index 101fc81..763dbfa7e 100644 --- a/ash/strings/ash_strings_ar.xtb +++ b/ash/strings/ash_strings_ar.xtb
@@ -295,6 +295,7 @@ <translation id="6297287540776456956">استخدام قلم الشاشة لتحديد منطقة</translation> <translation id="6310121235600822547">تم تدوير <ph name="DISPLAY_NAME" /> إلى <ph name="ROTATION" /></translation> <translation id="632744581670418035">تراكب لوحة المفاتيح</translation> +<translation id="6344698853700675736">تبديل "الإضاءة الليلية"</translation> <translation id="6376931439017688372">تم تفعيل البلوتوث</translation> <translation id="639644700271529076">مفتاح CAPS LOCK قيد الإيقاف</translation> <translation id="6406704438230478924">altgr</translation> @@ -340,7 +341,6 @@ <translation id="7066646422045619941">تم إيقاف هذه الشبكة من قِبل مشرفك.</translation> <translation id="7067196344162293536">تدوير تلقائي</translation> <translation id="7068360136237591149">فتح الملفات</translation> -<translation id="7076293881109082629">تسجيل الدخول</translation> <translation id="7092922358121866860">عرض إعدادات "الإضاءة الليلية"</translation> <translation id="7098389117866926363">جهاز USB-C (المنفذ الأيسر في الخلف)</translation> <translation id="7131634465328662194">سيتم تسجيل خروجك تلقائيًا.</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb index f2ac9d9..6f88f4f 100644 --- a/ash/strings/ash_strings_bg.xtb +++ b/ash/strings/ash_strings_bg.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Тази мрежа е деактивирана от администратора ви.</translation> <translation id="7067196344162293536">Автоматично завъртане</translation> <translation id="7068360136237591149">„Open files“ („Отвори файлове“)</translation> -<translation id="7076293881109082629">Влизате</translation> <translation id="7092922358121866860">Показване на настройките за Нощно осветление</translation> <translation id="7098389117866926363">Устройство с USB-C (левият порт на гърба)</translation> <translation id="7131634465328662194">Ще излезете автоматично.</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index d06c4cdd..9781abd 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C ডিভাইস (বাঁ পোর্ট)</translation> <translation id="1294929383540927798">লক-স্ক্রিন বিজ্ঞপ্তির সেটিংস পরিবর্তন করুন</translation> <translation id="1302880136325416935">ব্লুটুথ সেটিংস দেখান। <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">সবসময় শেল্ফ দেখান</translation> <translation id="1346748346194534595">ডানে</translation> <translation id="1351937230027495976">মেনুটি আড়াল করুন</translation> <translation id="1383876407941801731">সার্চ করুন</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">১৮০°</translation> <translation id="239188844683466770">'বিরক্ত করবেন না' মোড টগল করুন</translation> <translation id="2412593942846481727">আপডেট উপলভ্য</translation> +<translation id="2413728805700750528"><ph name="DOMAIN" /> দ্বারা পরিচালিত <ph name="DISPLAY_NAME" /> একটি পরিচালিত সেশন</translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" />-এর সাথে কানেক্ট হয়েছে</translation> <translation id="2429753432712299108">ব্লুটুথ ডিভাইস "<ph name="DEVICE_NAME" />" যুক্ত করার অনুমতি চাইছে। স্বীকার করার আগে, দয়া করে এই পাস কীটি যে ডিভাইসে প্রদর্শিত হয়েছে তা নিশ্চিত করুন: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">বিজ্ঞপ্তিগুলি</translation> @@ -339,7 +341,6 @@ <translation id="7066646422045619941">এই নেটওয়ার্কটি আপনার প্রশাসকের দ্বারা অক্ষম করা হয়েছে৷</translation> <translation id="7067196344162293536">স্বতঃ ঘূর্ণন</translation> <translation id="7068360136237591149">ফাইল খুলুন</translation> -<translation id="7076293881109082629">প্রবেশ করুন হচ্ছে</translation> <translation id="7092922358121866860">নাইট লাইট সেটিংস দেখান</translation> <translation id="7098389117866926363">USB-C ডিভাইস (পিছনের বাঁ পোর্ট)</translation> <translation id="7131634465328662194">আপনি নিজে থেকেই সাইন-আউট হয়ে যাবেন।</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index 1b676e8..cea3bdc 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">L'administrador ha desactivat aquesta xarxa.</translation> <translation id="7067196344162293536">Rotació automàtica</translation> <translation id="7068360136237591149">Obre fitxers</translation> -<translation id="7076293881109082629">Inicia la sessió</translation> <translation id="7092922358121866860">Mostra la configuració de Llum nocturna</translation> <translation id="7098389117866926363">Dispositiu USB-C (port posterior esquerre)</translation> <translation id="7131634465328662194">La sessió es tancarà automàticament.</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index c9681cc..9fa7a63 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Tato síť je zakázána vaším administrátorem.</translation> <translation id="7067196344162293536">Automatické otáčení</translation> <translation id="7068360136237591149">Otevřít soubory</translation> -<translation id="7076293881109082629">Přihlášení</translation> <translation id="7092922358121866860">Zobrazit nastavení Nočního režimu</translation> <translation id="7098389117866926363">Zařízení USB Type-C (levý zadní port)</translation> <translation id="7131634465328662194">Budete automaticky odhlášeni.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index 6bac3430..e6edc1c0 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Din administrator har deaktiveret dette netværk.</translation> <translation id="7067196344162293536">Automatisk rotering</translation> <translation id="7068360136237591149">Åbn filer</translation> -<translation id="7076293881109082629">Login</translation> <translation id="7092922358121866860">Vis indstillinger for Nattelys</translation> <translation id="7098389117866926363">USB-C-enhed (porten bagpå i venstre side)</translation> <translation id="7131634465328662194">Du logges automatisk ud.</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index d8a4fa4..092313459 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">Dieses Netzwerk wurde von Ihrem Administrator deaktiviert.</translation> <translation id="7067196344162293536">Automatisch drehen</translation> <translation id="7068360136237591149">Dateien öffnen</translation> -<translation id="7076293881109082629">Anmeldung</translation> <translation id="7092922358121866860">Nachtlichteinstellungen anzeigen</translation> <translation id="7098389117866926363">USB-C-Gerät (linker Port hinten)</translation> <translation id="7131634465328662194">Sie werden automatisch abgemeldet.</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb index 1a73525..b91ac283 100644 --- a/ash/strings/ash_strings_el.xtb +++ b/ash/strings/ash_strings_el.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">Συσκευή USB-C (αριστερή θύρα)</translation> <translation id="1294929383540927798">Αλλάξτε τις ρυθμίσεις ειδοποιήσεων της οθόνης κλειδώματος</translation> <translation id="1302880136325416935">Εμφάνιση ρυθμίσεων Bluetooth. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">Να εμφανίζεται πάντα το ράφι</translation> <translation id="1346748346194534595">Δεξιά</translation> <translation id="1351937230027495976">Σύμπτυξη μενού</translation> <translation id="1383876407941801731">Αναζήτηση</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Εναλλαγή λειτουργίας "Μην ενοχλείτε"</translation> <translation id="2412593942846481727">Υπάρχει διαθέσιμη ενημέρωση</translation> +<translation id="2413728805700750528">Το <ph name="DISPLAY_NAME" /> είναι μια διαχειριζόμενη περίοδος σύνδεσης την οποία διαχειρίζεται ο τομέας <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Σε σύνδεση στο δίκτυο <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">Η συσκευή Bluetooth "<ph name="DEVICE_NAME" />" ζητά δικαιώματα σύζευξης. Προτού αποδεχτείτε, επιβεβαιώστε ότι αυτό το κλειδί πρόσβασης εμφανίζεται στη συγκεκριμένη συσκευή: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">Ειδοποιήσεις</translation> @@ -292,6 +294,7 @@ <translation id="6297287540776456956">Χρησιμοποιήστε τη γραφίδα για να επιλέξετε μια περιοχή</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> περιστράφηκε σε <ph name="ROTATION" /></translation> <translation id="632744581670418035">Επικάλυψη πληκτρολογίου</translation> +<translation id="6344698853700675736">Εναλλαγή νυχτερινού φωτισμού</translation> <translation id="6376931439017688372">Το Bluetooth είναι ενεργοποιημένο</translation> <translation id="639644700271529076">Το CAPS LOCK είναι απενεργοποιημένο</translation> <translation id="6406704438230478924">altgr</translation> @@ -337,7 +340,6 @@ <translation id="7066646422045619941">Το δίκτυο αυτό έχει απενεργοποιηθεί από το διαχειριστή σας.</translation> <translation id="7067196344162293536">Αυτόματη περιστροφή</translation> <translation id="7068360136237591149">Άνοιγμα αρχείων</translation> -<translation id="7076293881109082629">Σύνδεση</translation> <translation id="7092922358121866860">Εμφάνιση ρυθμίσεων Νυχτερινού φωτισμού</translation> <translation id="7098389117866926363">Συσκευή USB-C (πίσω αριστερή θύρα)</translation> <translation id="7131634465328662194">Θα αποσυνδεθείτε αυτόματα.</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb index 0880117..a8971c4a 100644 --- a/ash/strings/ash_strings_en-GB.xtb +++ b/ash/strings/ash_strings_en-GB.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">This network is disabled by your administrator.</translation> <translation id="7067196344162293536">Auto rotate</translation> <translation id="7068360136237591149">Open files</translation> -<translation id="7076293881109082629">Signing in</translation> <translation id="7092922358121866860">Show Night Light settings</translation> <translation id="7098389117866926363">USB-C device (left port in the back)</translation> <translation id="7131634465328662194">You will automatically be signed out.</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb index fa906e9..9bba307 100644 --- a/ash/strings/ash_strings_es-419.xtb +++ b/ash/strings/ash_strings_es-419.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">Dispositivo USB-C (puerto izquierdo)</translation> <translation id="1294929383540927798">Cambia la configuración de notificaciones de pantalla bloqueada</translation> <translation id="1302880136325416935">Mostrar la configuración de Bluetooth: <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">Mostrar siempre la biblioteca</translation> <translation id="1346748346194534595">Derecha</translation> <translation id="1351937230027495976">Contraer menú</translation> <translation id="1383876407941801731">Buscar</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Activar o desactivar la función "No interrumpir"</translation> <translation id="2412593942846481727">Actualización disponible</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> es una sesión administrada por <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Conexión establecida con <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para sincronizarse. Antes de aceptar, debes confirmar que aparece la siguiente clave de contraseña en el dispositivo: <ph name="PASSKEY" />.</translation> <translation id="2482878487686419369">Notificaciones</translation> @@ -338,7 +340,6 @@ <translation id="7066646422045619941">El administrador inhabilitó esta red.</translation> <translation id="7067196344162293536">Rotación automática</translation> <translation id="7068360136237591149">Abrir archivos</translation> -<translation id="7076293881109082629">Accediendo</translation> <translation id="7092922358121866860">Mostrar la configuración de la función "Luz nocturna"</translation> <translation id="7098389117866926363">Dispositivo USB-C (puerto izquierdo en la parte posterior)</translation> <translation id="7131634465328662194">Tu sesión se cerrará automáticamente.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index f32e94e..b05464e 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">Dispositivo USB-C (puerto izquierdo)</translation> <translation id="1294929383540927798">Cambia la configuración de las notificaciones de la pantalla de bloqueo</translation> <translation id="1302880136325416935">Muestra la configuración de Bluetooth. <ph name="STATE_TEXT" />.</translation> +<translation id="1316069254387866896">Mostrar siempre la estantería</translation> <translation id="1346748346194534595">Derecha</translation> <translation id="1351937230027495976">Ocultar menú</translation> <translation id="1383876407941801731">Buscar</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Activar o desactivar el modo No molestar</translation> <translation id="2412593942846481727">Actualización disponible</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> es una sesión administrada por <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Conexión establecida con <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">El dispositivo Bluetooth "<ph name="DEVICE_NAME" />" solicita permiso para vincularse. Antes de aceptar, comprueba que la clave de contraseña <ph name="PASSKEY" /> aparezca en el dispositivo</translation> <translation id="2482878487686419369">Notificaciones</translation> @@ -338,7 +340,6 @@ <translation id="7066646422045619941">El administrador ha inhabilitado esta red.</translation> <translation id="7067196344162293536">Rotación automática</translation> <translation id="7068360136237591149">Abrir un archivo</translation> -<translation id="7076293881109082629">Iniciando sesión</translation> <translation id="7092922358121866860">Mostrar la configuración de luz nocturna</translation> <translation id="7098389117866926363">Dispositivo USB tipo C (puerto izquierdo situado en la parte trasera)</translation> <translation id="7131634465328662194">Tu sesión se cerrará automáticamente.</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index ecb98ce28..3fd6022 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Teie administraator on selle võrgu keelanud.</translation> <translation id="7067196344162293536">Automaatne pööramine</translation> <translation id="7068360136237591149">Ava failid</translation> -<translation id="7076293881109082629">Sisselogimine</translation> <translation id="7092922358121866860">Kuvab öövalguse seaded</translation> <translation id="7098389117866926363">C-tüüpi USB-seade (vasakpoolne port taga)</translation> <translation id="7131634465328662194">Teid logitakse automaatselt välja.</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb index ca9976e..c81b555 100644 --- a/ash/strings/ash_strings_fa.xtb +++ b/ash/strings/ash_strings_fa.xtb
@@ -341,7 +341,6 @@ <translation id="7066646422045619941">این شبکه توسط سرپرست شما غیرفعال شده است.</translation> <translation id="7067196344162293536">چرخش خودکار</translation> <translation id="7068360136237591149">Open files (فایلها را باز کن)</translation> -<translation id="7076293881109082629">در حال ورود به سیستم</translation> <translation id="7092922358121866860">نمایش تنظیمات «نور شب»</translation> <translation id="7098389117866926363">دستگاه USB-C (درگاه عقب سمت چپ)</translation> <translation id="7131634465328662194">بهطور خودکار از سیستم خارج خواهید شد.</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index 5a0d815..61be3d5 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -343,7 +343,6 @@ <translation id="7066646422045619941">Järjestelmänvalvoja on poistanut tämän verkon käytöstä.</translation> <translation id="7067196344162293536">Automaattinen kierto</translation> <translation id="7068360136237591149">Avaa tiedostot</translation> -<translation id="7076293881109082629">Kirjautuminen</translation> <translation id="7092922358121866860">Näytä Yövalon asetukset</translation> <translation id="7098389117866926363">C-tyypin USB-laite (vasemmanpuoleinen takaportti)</translation> <translation id="7131634465328662194">Sinut kirjataan automaattisesti ulos.</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index c6d30f4..5ab14f6 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">Na-disable ng iyong administrator ang network na ito.</translation> <translation id="7067196344162293536">Awtomatikong pag-rotate</translation> <translation id="7068360136237591149">Magbukas ng mga file</translation> -<translation id="7076293881109082629">Nagsa-sign in</translation> <translation id="7092922358121866860">Ipakita ang mga setting ng Night Light</translation> <translation id="7098389117866926363">USB-C device (kaliwang port sa likod)</translation> <translation id="7131634465328662194">Awtomatiko kang masa-sign out.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index a09f5d0..0db1022 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -341,7 +341,6 @@ <translation id="7066646422045619941">Votre administrateur a désactivé ce réseau.</translation> <translation id="7067196344162293536">Rotation automatique</translation> <translation id="7068360136237591149">Ouvre des fichiers</translation> -<translation id="7076293881109082629">Connexion</translation> <translation id="7092922358121866860">Afficher les paramètres d'éclairage nocturne</translation> <translation id="7098389117866926363">Appareil USB de type C (port situé sur l'arrière de l'appareil, à gauche)</translation> <translation id="7131634465328662194">Vous allez être déconnecté automatiquement.</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index b218853a..6109847 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C ઉપકરણ (ડાબું પોર્ટ)</translation> <translation id="1294929383540927798">લૉક સ્ક્રીન નોટિફિકેશન સેટિંગ બદલો</translation> <translation id="1302880136325416935">બ્લૂટૂથ સેટિંગ બતાવો. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">હંમેશાં શેલ્ફ બતાવો</translation> <translation id="1346748346194534595">જમણે</translation> <translation id="1351937230027495976">મેનૂ સંકુચિત કરો</translation> <translation id="1383876407941801731">શોધો</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">'ખલેલ પાડશો નહીં'ને ટૉગલ કરો</translation> <translation id="2412593942846481727">અપડેટ ઉપલબ્ધ છે</translation> +<translation id="2413728805700750528">મેનેજ કરાયેલ સત્ર <ph name="DISPLAY_NAME" />ને <ph name="DOMAIN" /> દ્વારા મેનેજ કરવામાં આવે છે</translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" /> સાથે કનેક્ટ થયા</translation> <translation id="2429753432712299108">Bluetooth ડિવાઇસ "<ph name="DEVICE_NAME" />" ને જોડી બનાવવા માટે પરવાનગી જોઈએ છે. સ્વીકારતાં પહેલાં, કૃપા કરીને તે ડિવાઇસ પર બતાવેલ આ પાસકીની ખાતરી કરો: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">સૂચનાઓ</translation> @@ -292,6 +294,7 @@ <translation id="6297287540776456956">કોઈ પ્રદેશ પસંદ કરવા માટે કલમનો ઉપયોગ કરો</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ને <ph name="ROTATION" /> પર ફેરવવામાં આવ્યું હતું</translation> <translation id="632744581670418035">કીબોર્ડ ઓવરલે</translation> +<translation id="6344698853700675736">રાત્રિ પ્રકાશને ટૉગલ કરો</translation> <translation id="6376931439017688372">બ્લૂટૂથ ચાલુ છે</translation> <translation id="639644700271529076">CAPS LOCK બંધ છે</translation> <translation id="6406704438230478924">altgr</translation> @@ -337,7 +340,6 @@ <translation id="7066646422045619941">આ નેટવર્ક તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરેલ છે.</translation> <translation id="7067196344162293536">સ્વતઃ ફેરવો</translation> <translation id="7068360136237591149">ફાઇલો ખોલો</translation> -<translation id="7076293881109082629">સાઇન ઇન કરી રહ્યું છે</translation> <translation id="7092922358121866860">રાત્રિ પ્રકાશ સેટિંગ બતાવો</translation> <translation id="7098389117866926363">USB-C ઉપકરણ (પાછળની બાજુએ ડાબું પોર્ટ)</translation> <translation id="7131634465328662194">તમે આપમેળે સાઇન આઉટ થઈ જશો.</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb index c2a04e1..2fa9a83 100644 --- a/ash/strings/ash_strings_hi.xtb +++ b/ash/strings/ash_strings_hi.xtb
@@ -295,6 +295,7 @@ <translation id="6297287540776456956">कोई क्षेत्र चुनने के लिए स्टाइलस का उपयोग करें</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> को <ph name="ROTATION" /> पर घुमाया गया</translation> <translation id="632744581670418035">कीबोर्ड ओवरले</translation> +<translation id="6344698853700675736">नाइट लाइट को टॉगल करें</translation> <translation id="6376931439017688372">ब्लूटूथ चालू है</translation> <translation id="639644700271529076">CAPS LOCK बंद है</translation> <translation id="6406704438230478924">altgr</translation> @@ -340,7 +341,6 @@ <translation id="7066646422045619941">यह नेटवर्क आपके व्यवस्थापक द्वारा अक्षम किया गया है.</translation> <translation id="7067196344162293536">स्वत: घुमाएं</translation> <translation id="7068360136237591149">फ़ाइल खोलो</translation> -<translation id="7076293881109082629">प्रवेश किया जा रहा है...</translation> <translation id="7092922358121866860">नाइट लाइट की सेटिंग दिखाएं</translation> <translation id="7098389117866926363">USB-C डिवाइस (पीछे बायां पोर्ट)</translation> <translation id="7131634465328662194">आप अपने आप साइन आउट कर जाएंगे.</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb index f0ab6f8..979a01c 100644 --- a/ash/strings/ash_strings_hr.xtb +++ b/ash/strings/ash_strings_hr.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Tu mrežu onemogućio je vaš administrator.</translation> <translation id="7067196344162293536">Automatski izmjenjuj</translation> <translation id="7068360136237591149">Otvori datoteke</translation> -<translation id="7076293881109082629">Prijava</translation> <translation id="7092922358121866860">Prikaz postavki Noćnog svjetla</translation> <translation id="7098389117866926363">USB-C uređaj (lijevi priključak sa stražnje strane)</translation> <translation id="7131634465328662194">Odjavit ćete se automatski.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 3f56b08..4d28cdd 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Ezt a hálózatot letiltotta a rendszergazda.</translation> <translation id="7067196344162293536">Automatikus forgatás</translation> <translation id="7068360136237591149">Fájlok megnyitása</translation> -<translation id="7076293881109082629">Bejelentkezés</translation> <translation id="7092922358121866860">Az Éjszakai fényhez tartozó beállítások megjelenítése</translation> <translation id="7098389117866926363">C típusú USB-vel kompatibilis eszköz (bal hátsó port)</translation> <translation id="7131634465328662194">A rendszer automatikusan kijelentkezteti.</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index cd5ea45..203e9c87 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Jaringan ini dinonaktifkan oleh administrator Anda.</translation> <translation id="7067196344162293536">Putar otomatis</translation> <translation id="7068360136237591149">Buka file</translation> -<translation id="7076293881109082629">Sedang masuk</translation> <translation id="7092922358121866860">Tampilkan setelan Cahaya Malam</translation> <translation id="7098389117866926363">Perangkat USB-C (port belakang sebelah kiri)</translation> <translation id="7131634465328662194">Anda akan logout otomatis.</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb index b053192..2490e61 100644 --- a/ash/strings/ash_strings_it.xtb +++ b/ash/strings/ash_strings_it.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Questa rete è stata disattivata dall'amministratore.</translation> <translation id="7067196344162293536">Ruota in modo automatico</translation> <translation id="7068360136237591149">Apri file</translation> -<translation id="7076293881109082629">Accesso</translation> <translation id="7092922358121866860">Mostra le impostazioni Luminosità notturna</translation> <translation id="7098389117866926363">Dispositivo USB-C (porta posteriore sinistra)</translation> <translation id="7131634465328662194">Verrai disconnesso automaticamente.</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index ce44ab8..ae40b51 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">מנהל המערכת השבית את הרשת הזו.</translation> <translation id="7067196344162293536">סיבוב אוטומטי</translation> <translation id="7068360136237591149">פתיחת קבצים</translation> -<translation id="7076293881109082629">כניסה</translation> <translation id="7092922358121866860">צפייה בהגדרות של תאורת לילה</translation> <translation id="7098389117866926363">מכשיר עם יציאת USB-C (יציאה שמאלית מאחור)</translation> <translation id="7131634465328662194">המערכת תוציא אותך מהחשבון באופן אוטומטי.</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 4f9057e..3eedc3f 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C デバイス(左側面のポート)</translation> <translation id="1294929383540927798">ロック画面の通知設定を変更</translation> <translation id="1302880136325416935">Bluetooth の設定を表示します。<ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">シェルフを常に表示</translation> <translation id="1346748346194534595">右</translation> <translation id="1351937230027495976">メニューを折りたたむ</translation> <translation id="1383876407941801731">検索</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">通知のミュートを切り替え</translation> <translation id="2412593942846481727">アップデートが利用可能</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> は <ph name="DOMAIN" /> が管理する管理対象セッションです</translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" /> に接続されています</translation> <translation id="2429753432712299108">Bluetooth デバイス「<ph name="DEVICE_NAME" />」がペア設定の権限をリクエストしています。許可するにあたっては、このデバイスで次のパスキーが表示されることを確認してください: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">通知</translation> @@ -98,11 +100,11 @@ <translation id="2532589005999780174">ハイコントラスト モード</translation> <translation id="2575685495496069081">マルチログインは無効にされています</translation> <translation id="2582112259361606227">再起動して更新</translation> -<translation id="2597972630681408282">読書灯: <ph name="NIGHT_LIGHT_STATUS" /></translation> +<translation id="2597972630681408282">夜間モード: <ph name="NIGHT_LIGHT_STATUS" /></translation> <translation id="2617342710774726426">SIM カードはロックされています</translation> <translation id="2653659639078652383">送信</translation> <translation id="2700493154570097719">キーボードを設定</translation> -<translation id="2718395828230677721">読書灯</translation> +<translation id="2718395828230677721">夜間モード</translation> <translation id="2727977024730340865">低電力の充電器に接続しています。バッテリーが充電されない可能性があります。</translation> <translation id="2761704814324807722">ステータス トレイ、時刻 <ph name="TIME" />、<ph name="BATTERY" /></translation> <translation id="277257480934873581"><ph name="NAME" /> に再接続しています</translation> @@ -337,8 +339,7 @@ <translation id="7066646422045619941">このネットワークは管理者によって無効にされています。</translation> <translation id="7067196344162293536">自動回転</translation> <translation id="7068360136237591149">ファイルを開いて</translation> -<translation id="7076293881109082629">ログイン中</translation> -<translation id="7092922358121866860">読書灯の設定を表示</translation> +<translation id="7092922358121866860">夜間モードの設定を表示</translation> <translation id="7098389117866926363">USB-C デバイス(背面左のポート)</translation> <translation id="7131634465328662194">制限時間になると自動的にログアウトします。</translation> <translation id="7143207342074048698">接続中</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index 33de55ab..9b05f92 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -341,7 +341,6 @@ <translation id="7066646422045619941">ಈ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ.</translation> <translation id="7067196344162293536">ಸ್ವಯಂ ತಿರುಗಿಸು</translation> <translation id="7068360136237591149">ಫೈಲ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> -<translation id="7076293881109082629">ಸೈನ್ ಇನ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> <translation id="7092922358121866860">ನೈಟ್ ಲೈಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ತೋರಿಸಿ</translation> <translation id="7098389117866926363">USB-C ಸಾಧನ (ಹಿಂಭಾಗದಲ್ಲಿ ಎಡ ಪೋರ್ಟ್)</translation> <translation id="7131634465328662194">ನೀವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೈನ್ಔಟ್ ಆಗುತ್ತೀರಿ.</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 77ab44e..ae948de 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C 기기(왼쪽 포트)</translation> <translation id="1294929383540927798">잠금 화면 알림 설정을 변경합니다.</translation> <translation id="1302880136325416935">블루투스 설정을 표시합니다. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">항상 실행기 표시</translation> <translation id="1346748346194534595">오른쪽</translation> <translation id="1351937230027495976">메뉴 접기</translation> <translation id="1383876407941801731">검색</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">알림 일시중지 전환</translation> <translation id="2412593942846481727">업데이트 가능</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" />은(는) <ph name="DOMAIN" />에서 관리하는 관리 세션입니다.</translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" />에 연결됨</translation> <translation id="2429753432712299108">블루투스 기기 '<ph name="DEVICE_NAME" />'에서 페어링 허가를 요청합니다. 허가하기 전에 다음 패스키가 기기에 표시되는지 확인하세요. <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">알림</translation> @@ -337,7 +339,6 @@ <translation id="7066646422045619941">관리자가 사용 중지한 네트워크입니다.</translation> <translation id="7067196344162293536">자동 회전</translation> <translation id="7068360136237591149">파일을 열어 줘</translation> -<translation id="7076293881109082629">로그인</translation> <translation id="7092922358121866860">야간 조명 설정 표시</translation> <translation id="7098389117866926363">USB-C 기기(좌측 후면 포트)</translation> <translation id="7131634465328662194">자동으로 로그아웃됩니다.</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb index 409b6738..6d0e288 100644 --- a/ash/strings/ash_strings_lt.xtb +++ b/ash/strings/ash_strings_lt.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Šį tinklą išjungė jūsų administratorius.</translation> <translation id="7067196344162293536">Automatinis kaitaliojimas</translation> <translation id="7068360136237591149">„Open files“ (Atidaryk failus)</translation> -<translation id="7076293881109082629">Prisijungimas</translation> <translation id="7092922358121866860">Rodyti „Nakties šviesos“ nustatymus</translation> <translation id="7098389117866926363">USB-C įrenginys (prievadas kairėje, užpakalinėje dalyje)</translation> <translation id="7131634465328662194">Būsite automatiškai atjungti.</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb index 4c9ddde..0ecc2587 100644 --- a/ash/strings/ash_strings_lv.xtb +++ b/ash/strings/ash_strings_lv.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C ierīce (pieslēgvieta pa kreisi)</translation> <translation id="1294929383540927798">Mainiet bloķēšanas ekrāna paziņojumu rādīšanas iestatījumus</translation> <translation id="1302880136325416935">Rādīt Bluetooth iestatījumus. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">Vienmēr rādīt plauktu</translation> <translation id="1346748346194534595">Pa labi</translation> <translation id="1351937230027495976">Sakļaut izvēlni</translation> <translation id="1383876407941801731">Meklēt</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Pārslēgt režīmu “Netraucēt”</translation> <translation id="2412593942846481727">Ir pieejams atjauninājums</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> ir pārvaldīta sesija, kas tiek pārvaldīta domēnā <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Izveidots savienojums ar tīklu <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">Bluetooth ierīce “<ph name="DEVICE_NAME" />” vēlas saņemt atļauju, lai izveidotu savienojumu pārī. Pirms piekrītat, lūdzu, pārliecinieties, vai ierīcē tiek parādīta šī ieejas atslēga: <ph name="PASSKEY" />.</translation> <translation id="2482878487686419369">Paziņojumi</translation> @@ -337,7 +339,6 @@ <translation id="7066646422045619941">Jūsu administrators atspējoja šo tīklu.</translation> <translation id="7067196344162293536">Pagriezt automātiski</translation> <translation id="7068360136237591149">Atvērt failus</translation> -<translation id="7076293881109082629">Pierakstīšanās</translation> <translation id="7092922358121866860">Rādīt nakts režīma iestatījumus</translation> <translation id="7098389117866926363">USB-C ierīce (pieslēgvieta aizmugurē pa kreisi)</translation> <translation id="7131634465328662194">Jūs tiksiet automātiski izrakstīts.</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb index b5177fa7..fa6fd2f 100644 --- a/ash/strings/ash_strings_ml.xtb +++ b/ash/strings/ash_strings_ml.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C ഉപകരണം (ഇടത് പോർട്ട്)</translation> <translation id="1294929383540927798">ലോക്ക് സ്ക്രീൻ അറിയിപ്പ് ക്രമീകരണം മാറ്റുക</translation> <translation id="1302880136325416935">Bluetooth ക്രമീകരണം കാണിക്കുക. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">എല്ലായ്പ്പോഴും ഷെല്ഫ് കാണിക്കുക</translation> <translation id="1346748346194534595">ശരി</translation> <translation id="1351937230027495976">മെനു ചുരുക്കുക</translation> <translation id="1383876407941801731">തിരയൂ</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">'ശല്യപ്പെടുത്തരുത്' മാറ്റുക</translation> <translation id="2412593942846481727">അപ്ഡേറ്റ് ലഭ്യമാണ്</translation> +<translation id="2413728805700750528"><ph name="DOMAIN" /> എന്നതിനാൽ നിയന്ത്രിക്കപ്പെടുന്ന, മാനേജ് ചെയ്യപ്പെടുന്ന സെഷനാണ് <ph name="DISPLAY_NAME" /></translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" /> നെറ്റ്വർക്കിലേക്ക് കണക്റ്റ് ചെയ്തു</translation> <translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" എന്ന Bluetooth ഉപകരണം ജോടിയാക്കുന്നതിനുള്ള അനുമതി ആവശ്യപ്പെടുന്നു. അനുമതി നൽകുന്നതിനുമുമ്പ്, ആ ഉപകരണത്തിൽ ഈ പാസ്കീ കാണിച്ചിരിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുക: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">വിജ്ഞാപനങ്ങള്</translation> @@ -337,7 +339,6 @@ <translation id="7066646422045619941">നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർ ഈ നെറ്റ്വർക്ക് പ്രവർത്തനരഹിതമാക്കി.</translation> <translation id="7067196344162293536">സ്വയമേവ തിരിക്കുക</translation> <translation id="7068360136237591149">ഫയലുകൾ തുറക്കുക</translation> -<translation id="7076293881109082629">സൈൻ ഇൻ ചെയ്യുന്നു</translation> <translation id="7092922358121866860">നൈറ്റ് ലൈറ്റ് ക്രമീകരണം കാണിക്കുക</translation> <translation id="7098389117866926363">USB-C ഉപകരണം (ഇടതുവശത്തെ പോർട്ട് പുറകിൽ)</translation> <translation id="7131634465328662194">നിങ്ങൾ സ്വമേധയാ സൈൻ ഔട്ടാകും.</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index 0e12369..0c55613 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C डिव्हाइस (डावे पोर्ट)</translation> <translation id="1294929383540927798">लॉक स्क्रीन सूचना सेटिंग्ज बदला</translation> <translation id="1302880136325416935">ब्लूटूथ सेटिंग्ज दाखवा. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">नेहमी शेल्फ दाखवा</translation> <translation id="1346748346194534595">उजवे</translation> <translation id="1351937230027495976">मेनू कोलॅप्स करा</translation> <translation id="1383876407941801731">शोधा</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">व्यत्यय आणू नका टॉगल करा</translation> <translation id="2412593942846481727">अपडेट उपलब्ध आहे</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> हे <ph name="DOMAIN" /> द्वारे व्यवस्थापित केलेले एक सेशन आहे</translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" /> शी कनेक्ट केले</translation> <translation id="2429753432712299108">"<ph name="DEVICE_NAME" />" ब्लूटूथ डिव्हाइस पेअरिंगसाठी परवानगी घेऊ इच्छिते. स्वीकार करण्यापूर्वी, कृपया त्या डिव्हाइसवर ही पासकी दाखवली असल्याची पुष्टी करा: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">सूचना</translation> @@ -337,7 +339,6 @@ <translation id="7066646422045619941">हे नेटवर्क आपल्या प्रशासकाने अक्षम केले आहे.</translation> <translation id="7067196344162293536">स्वयं फिरवा</translation> <translation id="7068360136237591149">फायली उघडा</translation> -<translation id="7076293881109082629">साइन इन करीत आहे</translation> <translation id="7092922358121866860">रात्रीचा प्रकाश सेटिंग्ज दाखवा</translation> <translation id="7098389117866926363">USB-C डिव्हाइस (मागील बाजूचे डावे पोर्ट)</translation> <translation id="7131634465328662194">तुम्हाला आपोआप साइन आउट केले जाईल.</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 2db65f99..fd68be3 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -341,7 +341,6 @@ <translation id="7066646422045619941">Rangkaian ini dilumpuhkan oleh pentadbir anda.</translation> <translation id="7067196344162293536">Auto putar</translation> <translation id="7068360136237591149">Buka fail</translation> -<translation id="7076293881109082629">Melog masuk</translation> <translation id="7092922358121866860">Tunjukkan tetapan Cahaya Malam</translation> <translation id="7098389117866926363">Peranti USB-C (port kiri di belakang)</translation> <translation id="7131634465328662194">Anda akan dilog keluar secara automatik.</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb index 6ebe4fe6..63cc7bc 100644 --- a/ash/strings/ash_strings_nl.xtb +++ b/ash/strings/ash_strings_nl.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Dit netwerk is uitgeschakeld door je beheerder.</translation> <translation id="7067196344162293536">Automatisch draaien</translation> <translation id="7068360136237591149">Open bestanden</translation> -<translation id="7076293881109082629">Inloggen</translation> <translation id="7092922358121866860">Instellingen voor Nachtverlichting weergeven</translation> <translation id="7098389117866926363">USB-C-apparaat (poort links aan de achterkant)</translation> <translation id="7131634465328662194">Je wordt automatisch uitgelogd.</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index 872e648..975d616 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C-enhet (porten på venstre side)</translation> <translation id="1294929383540927798">Endre innstillingene for varsler på låseskjermen</translation> <translation id="1302880136325416935">Vis Bluetooth-innstillinger. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">Vis alltid hyllen</translation> <translation id="1346748346194534595">Høyre</translation> <translation id="1351937230027495976">Skjul menyen</translation> <translation id="1383876407941801731">Søk</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Slå av/på «ikke forstyrr»</translation> <translation id="2412593942846481727">En oppdatering er tilgjengelig</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> er en administrert økt administrert av <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Koblet til <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">Bluetooth-enheten «<ph name="DEVICE_NAME" />» ber om tillatelse til å koble til. Før du godtar dette, må du bekrefte at denne tilgangskoden vises på den aktuelle enheten: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">Varsler</translation> @@ -338,7 +340,6 @@ <translation id="7066646422045619941">Administratoren din har slått av dette nettverket.</translation> <translation id="7067196344162293536">Automatisk retning</translation> <translation id="7068360136237591149">Åpne filer</translation> -<translation id="7076293881109082629">Pålogging</translation> <translation id="7092922358121866860">Vis innstillinger for nattlys</translation> <translation id="7098389117866926363">USB-C-enhet (venstre port på baksiden)</translation> <translation id="7131634465328662194">Du logges av automatisk.</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 52bd2a72..040dd2b 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -295,6 +295,7 @@ <translation id="6297287540776456956">Zaznacz obszar rysikiem</translation> <translation id="6310121235600822547">Wyświetlacz <ph name="DISPLAY_NAME" /> został obrócony na <ph name="ROTATION" /></translation> <translation id="632744581670418035">Nakładka klawiatury</translation> +<translation id="6344698853700675736">Włącz lub wyłącz Podświetlenie nocne</translation> <translation id="6376931439017688372">Bluetooth jest włączony</translation> <translation id="639644700271529076">CAPS LOCK jest wyłączony</translation> <translation id="6406704438230478924">altgr</translation> @@ -340,7 +341,6 @@ <translation id="7066646422045619941">Ta sieć została wyłączona przez administratora.</translation> <translation id="7067196344162293536">Obracanie automatyczne</translation> <translation id="7068360136237591149">Otwórz pliki</translation> -<translation id="7076293881109082629">Loguję</translation> <translation id="7092922358121866860">Pokaż ustawienia Podświetlenia nocnego</translation> <translation id="7098389117866926363">Urządzenie USB-C (lewy port z tyłu)</translation> <translation id="7131634465328662194">Nastąpi automatyczne wylogowanie.</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index 386e1a50..dbbccd9 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -342,7 +342,6 @@ <translation id="7066646422045619941">Esta rede foi desativada pelo seu administrador.</translation> <translation id="7067196344162293536">Rotação automática</translation> <translation id="7068360136237591149">Abrir arquivos</translation> -<translation id="7076293881109082629">Como fazer login</translation> <translation id="7092922358121866860">Mostrar configurações de Modo noturno</translation> <translation id="7098389117866926363">Dispositivo USB-C (porta traseira da esquerda)</translation> <translation id="7131634465328662194">Você será automaticamente desconectado.</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb index 557ce32..e7ce6b8 100644 --- a/ash/strings/ash_strings_pt-PT.xtb +++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">Dispositivo USB-C (porta esquerda)</translation> <translation id="1294929383540927798">Alterar as definições de notificação do ecrã de bloqueio</translation> <translation id="1302880136325416935">Mostrar definições de Bluetooth. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">Mostrar sempre a prateleira</translation> <translation id="1346748346194534595">Direita</translation> <translation id="1351937230027495976">Reduzir menu</translation> <translation id="1383876407941801731">Pesquisar</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Ativar/desativar opção Não incomodar</translation> <translation id="2412593942846481727">Atualização disponível</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> é uma sessão gerida por <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Ligado a <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">O dispositivo Bluetooth "<ph name="DEVICE_NAME" />" necessita de autorização para sincronizar. Antes de aceitar, confirme que esta chave está indicada nesse dispositivo: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">Notificações</translation> @@ -338,7 +340,6 @@ <translation id="7066646422045619941">Esta rede foi desativada pelo gestor.</translation> <translation id="7067196344162293536">Rotação automática</translation> <translation id="7068360136237591149">Abrir ficheiros</translation> -<translation id="7076293881109082629">Iniciar sessão</translation> <translation id="7092922358121866860">Mostrar definições de Luz noturna</translation> <translation id="7098389117866926363">Dispositivo USB-C (porta traseira esquerda)</translation> <translation id="7131634465328662194">A sessão será terminada automaticamente.</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb index 629113a..dd2e42e 100644 --- a/ash/strings/ash_strings_ro.xtb +++ b/ash/strings/ash_strings_ro.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">Dispozitiv USB-C (portul din stânga)</translation> <translation id="1294929383540927798">Modifică setările pentru notificările de pe ecranul de blocare</translation> <translation id="1302880136325416935">Afișează setările Bluetooth. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">Afișează întotdeauna raftul</translation> <translation id="1346748346194534595">Dreapta</translation> <translation id="1351937230027495976">Restrânge meniul</translation> <translation id="1383876407941801731">Caută</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">Comută Nu deranja</translation> <translation id="2412593942846481727">Actualizare disponibilă</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> este o sesiune gestionată de <ph name="DOMAIN" /></translation> <translation id="2416346634399901812">Conectat la <ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">Dispozitivul Bluetooth „<ph name="DEVICE_NAME" />” solicită permisiunea de a se conecta. Înainte de a continua, verificați dacă această parolă apare pe dispozitivul respectiv: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">Notificări</translation> @@ -337,7 +339,6 @@ <translation id="7066646422045619941">Această rețea este dezactivată de administrator.</translation> <translation id="7067196344162293536">Rotire automată</translation> <translation id="7068360136237591149">Deschide fișierele</translation> -<translation id="7076293881109082629">Conectare</translation> <translation id="7092922358121866860">Afișează setările pentru Lumină de noapte</translation> <translation id="7098389117866926363">Dispozitiv USB-C (portul din stânga în spate)</translation> <translation id="7131634465328662194">Vei fi deconectat(ă) automat.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb index b087ff6..18c9d44 100644 --- a/ash/strings/ash_strings_ru.xtb +++ b/ash/strings/ash_strings_ru.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">Эта сеть отключена администратором.</translation> <translation id="7067196344162293536">Автоповорот</translation> <translation id="7068360136237591149">Открыть файлы</translation> -<translation id="7076293881109082629">Вход</translation> <translation id="7092922358121866860">Показать настройки ночного режима</translation> <translation id="7098389117866926363">Устройство USB-C (порт слева на задней панели)</translation> <translation id="7131634465328662194">После этого вы выйдете из системы.</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 46c51bb..f33ede3c 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">Táto sieť je zakázaná správcom.</translation> <translation id="7067196344162293536">Automatické otáčanie</translation> <translation id="7068360136237591149">Otvoriť súbory</translation> -<translation id="7076293881109082629">Prihlásenie</translation> <translation id="7092922358121866860">Zobraziť nastavenia nočného režimu</translation> <translation id="7098389117866926363">Zariadenie USB-C (ľavý port vzadu)</translation> <translation id="7131634465328662194">Odhlásenie prebehne automaticky.</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 3d25299..75153d44 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">To omrežje je onemogočil skrbnik.</translation> <translation id="7067196344162293536">Samodejno sukanje</translation> <translation id="7068360136237591149">Odpri datoteke</translation> -<translation id="7076293881109082629">Prijava</translation> <translation id="7092922358121866860">Prikaz nastavitev nočne svetlobe</translation> <translation id="7098389117866926363">Naprava USB-C (vrata levo zadaj)</translation> <translation id="7131634465328662194">Samodejno boste odjavljeni.</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb index bcc6a082..1ccb9bd 100644 --- a/ash/strings/ash_strings_sr.xtb +++ b/ash/strings/ash_strings_sr.xtb
@@ -339,7 +339,6 @@ <translation id="7066646422045619941">Ову мрежу је онемогућио администратор.</translation> <translation id="7067196344162293536">Аутоматски ротирај</translation> <translation id="7068360136237591149">Отвори датотеке</translation> -<translation id="7076293881109082629">Пријављивање</translation> <translation id="7092922358121866860">Прегледајте подешавања Ноћног светла</translation> <translation id="7098389117866926363">Уређај са USB прикључком типа C (леви задњи порт)</translation> <translation id="7131634465328662194">Одјавићемо вас аутоматски.</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb index ae39556..08396e6 100644 --- a/ash/strings/ash_strings_sv.xtb +++ b/ash/strings/ash_strings_sv.xtb
@@ -294,6 +294,7 @@ <translation id="6297287540776456956">Markera ett område med e-pennan</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> byttes till <ph name="ROTATION" /></translation> <translation id="632744581670418035">Tangentbordsöverlägg</translation> +<translation id="6344698853700675736">Aktivera och inaktivera nattljus</translation> <translation id="6376931439017688372">Bluetooth är aktiverat</translation> <translation id="639644700271529076">CAPS LOCK är av</translation> <translation id="6406704438230478924">altgr</translation> @@ -339,7 +340,6 @@ <translation id="7066646422045619941">Det här nätverket har inaktiverats av administratören.</translation> <translation id="7067196344162293536">Rotera automatiskt</translation> <translation id="7068360136237591149">Öppna filer</translation> -<translation id="7076293881109082629">Logga in</translation> <translation id="7092922358121866860">Visa inställningar för Nattljus</translation> <translation id="7098389117866926363">USB-C-enhet (vänstra porten på baksidan)</translation> <translation id="7131634465328662194">Du loggas ut automatiskt.</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb index 7d86c24..2bec510 100644 --- a/ash/strings/ash_strings_sw.xtb +++ b/ash/strings/ash_strings_sw.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Mtandao huu umezimwa na msimamizi wako.</translation> <translation id="7067196344162293536">Zungusha kiotomatiki</translation> <translation id="7068360136237591149">Fungua faili</translation> -<translation id="7076293881109082629">Unaingia katika akaunti</translation> <translation id="7092922358121866860">Onyesha mipangilio ya Mwanga wa Usiku</translation> <translation id="7098389117866926363">Kifaa cha USB-C (mlango wa kushoto nyuma)</translation> <translation id="7131634465328662194">Utaondolewa kwenye akaunti kiotomatiki.</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index cbc8caf3..7defb7f5 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">இந்த நெட்வொர்க் உங்கள் நிர்வாகியால் முடக்கப்பட்டுள்ளது.</translation> <translation id="7067196344162293536">தானியங்கு சுழற்றல்</translation> <translation id="7068360136237591149">கோப்புகளைத் திற</translation> -<translation id="7076293881109082629">உள்நுழைகிறீர்கள்</translation> <translation id="7092922358121866860">நைட் லைட் அமைப்புகளைக் காண்பிக்கும்</translation> <translation id="7098389117866926363">USB-C சாதனம் (பின்பக்கம் உள்ள இடது போர்ட்)</translation> <translation id="7131634465328662194">நீங்கள் தானாக வெளியேற்றப்படுவீர்கள்.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index 3ef18c8f..c8c776d 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C పరికరం (ఎడమ పోర్ట్)</translation> <translation id="1294929383540927798">లాక్-స్క్రీన్ నోటిఫికేషన్ సెట్టింగ్లను మార్చండి</translation> <translation id="1302880136325416935">బ్లూటూత్ సెట్టింగ్లను చూపుతుంది. <ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">ఎల్లప్పుడూ అరను చూపించు</translation> <translation id="1346748346194534595">కుడి</translation> <translation id="1351937230027495976">మెనూను కుదించు</translation> <translation id="1383876407941801731">శోధించు</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">అంతరాయం కలిగించవద్దు ఎంపికను టోగుల్ చేయండి</translation> <translation id="2412593942846481727">అప్డేట్ అందుబాటులో ఉంది</translation> +<translation id="2413728805700750528"><ph name="DISPLAY_NAME" /> ఒక నిర్వహిత సెషన్, ఇది <ph name="DOMAIN" /> ద్వారా నిర్వహించబడుతుంది</translation> <translation id="2416346634399901812"><ph name="NETWORK_NAME" />కి కనెక్ట్ చేయబడింది</translation> <translation id="2429753432712299108">బ్లూటూత్ పరికరం "<ph name="DEVICE_NAME" />" జత కావడానికి అనుమతి కోరుతోంది. ఆమోదించడానికి ముందు, దయచేసి ఆ పరికరంలో ఈ పాస్కీ చూపబడుతోందని నిర్ధారించుకోండి: <ph name="PASSKEY" /></translation> <translation id="2482878487686419369">ప్రకటనలు</translation> @@ -338,7 +340,6 @@ <translation id="7066646422045619941">ఈ నెట్వర్క్ను మీ నిర్వాహకులు నిలిపివేసారు.</translation> <translation id="7067196344162293536">స్వయంచాలకంగా తిప్పు</translation> <translation id="7068360136237591149">ఫైల్లు తెరువు</translation> -<translation id="7076293881109082629">సైన్ ఇన్ చేస్తోంది</translation> <translation id="7092922358121866860">రాత్రి కాంతి సెట్టింగ్లను చూపుతుంది</translation> <translation id="7098389117866926363">USB-C పరికరం (వెనుక భాగంలో ఎడమ పోర్ట్)</translation> <translation id="7131634465328662194">మీరు ఆటోమేటిక్గా సైన్ అవుట్ చేయబడతారు.</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb index d69e5d231..1d966c1 100644 --- a/ash/strings/ash_strings_th.xtb +++ b/ash/strings/ash_strings_th.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">ผู้ดูแลระบบปิดใช้เครือข่ายนี้</translation> <translation id="7067196344162293536">หมุนอัตโนมัติ</translation> <translation id="7068360136237591149">เปิดไฟล์</translation> -<translation id="7076293881109082629">กำลังลงชื่อเข้าใช้</translation> <translation id="7092922358121866860">แสดงการตั้งค่าแสงตอนกลางคืน</translation> <translation id="7098389117866926363">อุปกรณ์ USB-C (พอร์ตด้านหลังซ้าย)</translation> <translation id="7131634465328662194">คุณจะออกจากระบบโดยอัตโนมัติ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb index e7650ef6..7bdebff3 100644 --- a/ash/strings/ash_strings_tr.xtb +++ b/ash/strings/ash_strings_tr.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Bu ağ, yöneticiniz tarafından devre dışı bırakıldı.</translation> <translation id="7067196344162293536">Otomatik döndür</translation> <translation id="7068360136237591149">Dosya aç</translation> -<translation id="7076293881109082629">Oturum açılıyor</translation> <translation id="7092922358121866860">Gece Işığı ayarlarını göster</translation> <translation id="7098389117866926363">USB-C cihaz (arkadaki sol bağlantı noktası)</translation> <translation id="7131634465328662194">Oturumunuz otomatik olarak kapatılacak.</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb index 861b176..31e53c5 100644 --- a/ash/strings/ash_strings_uk.xtb +++ b/ash/strings/ash_strings_uk.xtb
@@ -340,7 +340,6 @@ <translation id="7066646422045619941">Ваш адміністратор вимкнув цю мережу.</translation> <translation id="7067196344162293536">Автоматичне обертання</translation> <translation id="7068360136237591149">Відкрий файли</translation> -<translation id="7076293881109082629">Вхід</translation> <translation id="7092922358121866860">Показати налаштування нічного режиму</translation> <translation id="7098389117866926363">Пристрій, під’єднаний до порту USB-C (ліворуч на задній панелі)</translation> <translation id="7131634465328662194">Ви вийдете автоматично.</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 62ce2f9..3478b11 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -295,6 +295,7 @@ <translation id="6297287540776456956">Sử dụng bút cảm ứng để chọn một vùng</translation> <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> đã được xoay vòng sang <ph name="ROTATION" /></translation> <translation id="632744581670418035">Lớp phủ bàn phím</translation> +<translation id="6344698853700675736">Bật/tắt Chế độ ánh sáng ban đêm</translation> <translation id="6376931439017688372">Bluetooth đang bật</translation> <translation id="639644700271529076">CAPS LOCK tắt</translation> <translation id="6406704438230478924">altgr</translation> @@ -340,7 +341,6 @@ <translation id="7066646422045619941">Mạng này bị quản trị viên của bạn tắt.</translation> <translation id="7067196344162293536">Tự động xoay</translation> <translation id="7068360136237591149">Mở tệp</translation> -<translation id="7076293881109082629">Đăng nhập</translation> <translation id="7092922358121866860">Hiển thị các tùy chọn cài đặt Chế độ ánh sáng ban đêm</translation> <translation id="7098389117866926363">Thiết bị USB-C (cổng bên trái ở phía sau)</translation> <translation id="7131634465328662194">Bạn sẽ tự động bị đăng xuất.</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index 27164fd..8704ad6 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C 设备(左侧端口)</translation> <translation id="1294929383540927798">更改锁定屏幕通知设置</translation> <translation id="1302880136325416935">显示蓝牙设置。<ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">一律显示任务栏</translation> <translation id="1346748346194534595">向右</translation> <translation id="1351937230027495976">收起菜单</translation> <translation id="1383876407941801731">搜索</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180°</translation> <translation id="239188844683466770">切换“请勿打扰”模式</translation> <translation id="2412593942846481727">有可用的更新</translation> +<translation id="2413728805700750528">“<ph name="DISPLAY_NAME" />”是一个由 <ph name="DOMAIN" /> 管理的受管理自助服务终端</translation> <translation id="2416346634399901812">已连接到<ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">蓝牙设备“<ph name="DEVICE_NAME" />”需要配对许可。在接受之前,请确保该设备上显示以下配对密钥:<ph name="PASSKEY" /></translation> <translation id="2482878487686419369">通知</translation> @@ -339,7 +341,6 @@ <translation id="7066646422045619941">您的管理员已禁用此网络。</translation> <translation id="7067196344162293536">自动旋转</translation> <translation id="7068360136237591149">打开文件</translation> -<translation id="7076293881109082629">正在登录</translation> <translation id="7092922358121866860">显示“夜间模式”设置</translation> <translation id="7098389117866926363">USB-C 设备(背面左侧端口)</translation> <translation id="7131634465328662194">您将会自动退出会话。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 15b3c86b..6eb9a151 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -25,6 +25,7 @@ <translation id="1293264513303784526">USB-C 裝置 (左側連接埠)</translation> <translation id="1294929383540927798">變更螢幕鎖定通知設定</translation> <translation id="1302880136325416935">顯示藍牙設定。<ph name="STATE_TEXT" /></translation> +<translation id="1316069254387866896">一律顯示檔案櫃</translation> <translation id="1346748346194534595">向右</translation> <translation id="1351937230027495976">收合選單</translation> <translation id="1383876407941801731">搜尋</translation> @@ -89,6 +90,7 @@ <translation id="2391579633712104609">180 度</translation> <translation id="239188844683466770">切換「零打擾」模式</translation> <translation id="2412593942846481727">有可用的更新</translation> +<translation id="2413728805700750528">「<ph name="DISPLAY_NAME" />」是由 <ph name="DOMAIN" /> 管理的工作階段</translation> <translation id="2416346634399901812">已連線至<ph name="NETWORK_NAME" /></translation> <translation id="2429753432712299108">藍牙裝置「<ph name="DEVICE_NAME" />」要求配對權限。接受要求前,請確認裝置顯示以下密碼金鑰:<ph name="PASSKEY" /></translation> <translation id="2482878487686419369">通知</translation> @@ -337,7 +339,6 @@ <translation id="7066646422045619941">您的管理員已停用這個網路。</translation> <translation id="7067196344162293536">自動旋轉</translation> <translation id="7068360136237591149">開啟檔案</translation> -<translation id="7076293881109082629">登入中</translation> <translation id="7092922358121866860">顯示夜燈設定</translation> <translation id="7098389117866926363">USB-C 裝置 (背面左側連接埠)</translation> <translation id="7131634465328662194">系統會自動將你登出。</translation>
diff --git a/ash/test/DEPS b/ash/test/DEPS index edafdc05..6c2cd01 100644 --- a/ash/test/DEPS +++ b/ash/test/DEPS
@@ -10,8 +10,10 @@ # ash_test_environment_content is only compiled with content. "ash_test_environment_content\.*": [ "+content/public/browser/browser_thread.h", + "+content/public/browser/network_service_instance.h", "+content/public/test/web_contents_tester.h", "+content/public/test/test_browser_thread_bundle.h", + "+services/network/test/test_network_connection_tracker.h", ], "ash_test_helper\.cc": [ "+ash/host",
diff --git a/ash/test/ash_interactive_ui_test_base.cc b/ash/test/ash_interactive_ui_test_base.cc index a8b6ca99..5177f3d 100644 --- a/ash/test/ash_interactive_ui_test_base.cc +++ b/ash/test/ash_interactive_ui_test_base.cc
@@ -4,11 +4,13 @@ #include "ash/test/ash_interactive_ui_test_base.h" +#include "ash/test/ui_controls_factory_ash.h" #include "base/lazy_instance.h" #include "base/path_service.h" #include "mojo/core/embedder/embedder.h" #include "ui/aura/env.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/base/test/ui_controls_aura.h" #include "ui/base/ui_base_paths.h" #include "ui/gl/test/gl_surface_test_support.h" @@ -49,6 +51,7 @@ ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath( resources_pack_path, ui::SCALE_FACTOR_NONE); env_ = aura::Env::CreateInstance(); + ui_controls::InstallUIControlsAura(test::CreateAshUIControls()); AshTestBase::SetUp(); }
diff --git a/ash/test/ash_test_environment_content.cc b/ash/test/ash_test_environment_content.cc index 5d4cafc..6ca924d 100644 --- a/ash/test/ash_test_environment_content.cc +++ b/ash/test/ash_test_environment_content.cc
@@ -7,8 +7,10 @@ #include <memory> #include "ash/test/ash_test_views_delegate.h" +#include "content/public/browser/network_service_instance.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/web_contents_tester.h" +#include "services/network/test/test_network_connection_tracker.h" namespace ash { namespace { @@ -32,9 +34,16 @@ } AshTestEnvironmentContent::AshTestEnvironmentContent() - : thread_bundle_(std::make_unique<content::TestBrowserThreadBundle>()) {} + : network_connection_tracker_( + network::TestNetworkConnectionTracker::CreateInstance()), + thread_bundle_(std::make_unique<content::TestBrowserThreadBundle>()) { + content::SetNetworkConnectionTrackerForTesting( + network::TestNetworkConnectionTracker::GetInstance()); +} -AshTestEnvironmentContent::~AshTestEnvironmentContent() = default; +AshTestEnvironmentContent::~AshTestEnvironmentContent() { + content::SetNetworkConnectionTrackerForTesting(nullptr); +} void AshTestEnvironmentContent::SetUp() { scoped_web_contents_creator_ =
diff --git a/ash/test/ash_test_environment_content.h b/ash/test/ash_test_environment_content.h index 0858ff5..d620d35 100644 --- a/ash/test/ash_test_environment_content.h +++ b/ash/test/ash_test_environment_content.h
@@ -13,8 +13,11 @@ class TestBrowserThreadBundle; } -namespace ash { +namespace network { +class TestNetworkConnectionTracker; +} +namespace ash { // AshTestEnvironment implementation for tests that use content. class AshTestEnvironmentContent : public AshTestEnvironment { @@ -28,6 +31,8 @@ std::unique_ptr<AshTestViewsDelegate> CreateViewsDelegate() override; private: + std::unique_ptr<network::TestNetworkConnectionTracker> + network_connection_tracker_; std::unique_ptr<content::TestBrowserThreadBundle> thread_bundle_; std::unique_ptr<views::WebView::ScopedWebContentsCreatorForTesting> scoped_web_contents_creator_;
diff --git a/ash/wm/immersive_context_ash.cc b/ash/wm/immersive_context_ash.cc index 7da202d..ab396e7 100644 --- a/ash/wm/immersive_context_ash.cc +++ b/ash/wm/immersive_context_ash.cc
@@ -7,7 +7,6 @@ #include "ash/public/cpp/immersive/immersive_fullscreen_controller.h" #include "ash/shelf/shelf.h" #include "ash/shell.h" -#include "ash/wm/resize_handle_window_targeter.h" #include "ash/wm/window_state.h" #include "ash/wm/window_util.h" #include "base/logging.h" @@ -22,12 +21,6 @@ ImmersiveContextAsh::~ImmersiveContextAsh() = default; -void ImmersiveContextAsh::InstallResizeHandleWindowTargeter( - ImmersiveFullscreenController* controller) { - wm::InstallResizeHandleWindowTargeterForWindow( - controller->widget()->GetNativeWindow(), controller); -} - void ImmersiveContextAsh::OnEnteringOrExitingImmersive( ImmersiveFullscreenController* controller, bool entering) {
diff --git a/ash/wm/immersive_context_ash.h b/ash/wm/immersive_context_ash.h index 0239cb6a..96bc2afb 100644 --- a/ash/wm/immersive_context_ash.h +++ b/ash/wm/immersive_context_ash.h
@@ -17,8 +17,6 @@ ~ImmersiveContextAsh() override; // ImmersiveContext: - void InstallResizeHandleWindowTargeter( - ImmersiveFullscreenController* controller) override; void OnEnteringOrExitingImmersive(ImmersiveFullscreenController* controller, bool entering) override; gfx::Rect GetDisplayBoundsInScreen(views::Widget* widget) override;
diff --git a/ash/wm/overview/overview_window_drag_controller.cc b/ash/wm/overview/overview_window_drag_controller.cc index 3ea3e98..57c623d 100644 --- a/ash/wm/overview/overview_window_drag_controller.cc +++ b/ash/wm/overview/overview_window_drag_controller.cc
@@ -193,6 +193,11 @@ if (current_drag_behavior_ == DragBehavior::kDragToClose || current_drag_behavior_ == DragBehavior::kUndefined) { if (std::abs(velocity_y) > kFlingToCloseVelocityThreshold) { + if (SplitViewController::ShouldAllowSplitView()) { + split_view_controller_->OnWindowDragEnded( + item_->GetWindow(), snap_position_, location_in_screen); + } + item_->AnimateAndCloseWindow( (location_in_screen - initial_event_location_).y() < 0); did_move_ = false;
diff --git a/ash/wm/resize_handle_window_targeter.cc b/ash/wm/resize_handle_window_targeter.cc deleted file mode 100644 index 03e5910..0000000 --- a/ash/wm/resize_handle_window_targeter.cc +++ /dev/null
@@ -1,98 +0,0 @@ -// 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. - -#include "ash/wm/resize_handle_window_targeter.h" - -#include "ash/public/cpp/ash_constants.h" -#include "ash/public/cpp/immersive/immersive_fullscreen_controller.h" -#include "ash/wm/window_state.h" -#include "ui/aura/window.h" -#include "ui/events/event.h" - -namespace ash { - -ResizeHandleWindowTargeter::ResizeHandleWindowTargeter( - aura::Window* window, - ImmersiveFullscreenController* controller) - : window_(window), immersive_controller_(controller) { - wm::WindowState* window_state = wm::GetWindowState(window_); - OnPostWindowStateTypeChange(window_state, mojom::WindowStateType::DEFAULT); - window_state->AddObserver(this); - window_->AddObserver(this); -} - -ResizeHandleWindowTargeter::~ResizeHandleWindowTargeter() { - if (window_) { - window_->RemoveObserver(this); - wm::GetWindowState(window_)->RemoveObserver(this); - } -} - -void ResizeHandleWindowTargeter::OnPostWindowStateTypeChange( - wm::WindowState* window_state, - mojom::WindowStateType old_type) { - if (window_state->IsMaximizedOrFullscreenOrPinned()) { - frame_border_inset_ = gfx::Insets(); - } else { - frame_border_inset_ = - gfx::Insets(kResizeInsideBoundsSize, kResizeInsideBoundsSize, - kResizeInsideBoundsSize, kResizeInsideBoundsSize); - } -} - -void ResizeHandleWindowTargeter::OnWindowDestroying(aura::Window* window) { - CHECK_EQ(window_, window); - wm::GetWindowState(window_)->RemoveObserver(this); - window_ = NULL; -} - -bool ResizeHandleWindowTargeter::GetHitTestRects( - aura::Window* window, - gfx::Rect* hit_test_rect_mouse, - gfx::Rect* hit_test_rect_touch) const { - if (window == window_) { - // Defer to the parent's targeter on whether |window_| should be able to - // receive the event. - ui::EventTarget* parent = - static_cast<ui::EventTarget*>(window)->GetParentTarget(); - if (parent) { - aura::WindowTargeter* targeter = - static_cast<aura::WindowTargeter*>(parent->GetEventTargeter()); - if (targeter) { - return targeter->GetHitTestRects(window, hit_test_rect_mouse, - hit_test_rect_touch); - } - } - } - - bool got_rects = WindowTargeter::GetHitTestRects(window, hit_test_rect_mouse, - hit_test_rect_touch); - if (!got_rects || !window->parent() || window->parent() != window_) - return got_rects; - - // If the event falls very close to the inside of the frame border, then - // target the window itself, so that the window can be resized easily. - // This is achieved by insetting the child (NativeViewHost). - gfx::Insets mouse_insets; - gfx::Insets touch_insets; - touch_insets = mouse_insets = frame_border_inset_; - - // If the window is in immersive fullscreen, and top-of-window views are - // not revealed, then touch events towards the top of the window - // should not reach the child window so that touch gestures can be used - // to reveal the top-of-windows views. This is needed because the child - // window may consume touch events and prevent touch-scroll gesture from - // being generated. - if (immersive_controller_ && immersive_controller_->IsEnabled() && - !immersive_controller_->IsRevealed()) { - touch_insets = gfx::Insets( - ImmersiveFullscreenController::kImmersiveFullscreenTopEdgeInset, 0, 0, - 0); - } - hit_test_rect_mouse->Inset(mouse_insets); - hit_test_rect_touch->Inset(touch_insets); - return got_rects; -} - -} // namespace ash
diff --git a/ash/wm/resize_handle_window_targeter.h b/ash/wm/resize_handle_window_targeter.h deleted file mode 100644 index ffe5ccd..0000000 --- a/ash/wm/resize_handle_window_targeter.h +++ /dev/null
@@ -1,54 +0,0 @@ -// 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. - -#ifndef ASH_WM_RESIZE_HANDLE_WINDOW_TARGETER_H_ -#define ASH_WM_RESIZE_HANDLE_WINDOW_TARGETER_H_ - -#include "ash/wm/window_state_observer.h" -#include "base/macros.h" -#include "ui/aura/window_observer.h" -#include "ui/aura/window_targeter.h" -#include "ui/gfx/geometry/insets.h" - -namespace ash { - -class ImmersiveFullscreenController; - -// To allow easy resize, the resize handles should slightly overlap the content -// area of non-maximized and non-fullscreen windows. For immersive fullscreen -// windows, this targeter makes sure that touch-events towards the top of the -// screen are targeted to the window itself (instead of a child window that may -// otherwise have been targeted) when the top-of-window views are not revealed. -class ResizeHandleWindowTargeter : public wm::WindowStateObserver, - public aura::WindowObserver, - public aura::WindowTargeter { - public: - ResizeHandleWindowTargeter(aura::Window* window, - ImmersiveFullscreenController* immersive); - ~ResizeHandleWindowTargeter() override; - - private: - // wm::WindowStateObserver: - void OnPostWindowStateTypeChange(wm::WindowState* window_state, - mojom::WindowStateType old_type) override; - // aura::WindowObserver: - void OnWindowDestroying(aura::Window* window) override; - - // aura::WindowTargeter: - bool GetHitTestRects(aura::Window* window, - gfx::Rect* hit_test_rect_mouse, - gfx::Rect* hit_test_rect_touch) const override; - - // The targeter does not take ownership of |window_| or - // |immersive_controller_|. - aura::Window* window_; - gfx::Insets frame_border_inset_; - ImmersiveFullscreenController* immersive_controller_; - - DISALLOW_COPY_AND_ASSIGN(ResizeHandleWindowTargeter); -}; - -} // namespace ash - -#endif // ASH_WM_RESIZE_HANDLE_WINDOW_TARGETER_H_
diff --git a/ash/wm/window_util.cc b/ash/wm/window_util.cc index 6c224e200..79ee999 100644 --- a/ash/wm/window_util.cc +++ b/ash/wm/window_util.cc
@@ -14,7 +14,6 @@ #include "ash/session/session_controller.h" #include "ash/shelf/shelf.h" #include "ash/shell.h" -#include "ash/wm/resize_handle_window_targeter.h" #include "ash/wm/widget_finder.h" #include "ash/wm/window_positioning_utils.h" #include "ash/wm/window_properties.h" @@ -28,6 +27,7 @@ #include "ui/aura/window.h" #include "ui/aura/window_delegate.h" #include "ui/aura/window_event_dispatcher.h" +#include "ui/aura/window_targeter.h" #include "ui/base/hit_test.h" #include "ui/compositor/dip_util.h" #include "ui/display/display.h" @@ -68,6 +68,46 @@ return window_service && window_service->RequestClose(window); } +// This window targeter reserves space for the portion of the resize handles +// that extend within a top level window. +class InteriorResizeHandleTargeter : public aura::WindowTargeter { + public: + InteriorResizeHandleTargeter() { + SetInsets(gfx::Insets(kResizeInsideBoundsSize)); + } + + ~InteriorResizeHandleTargeter() override = default; + + bool GetHitTestRects(aura::Window* target, + gfx::Rect* hit_test_rect_mouse, + gfx::Rect* hit_test_rect_touch) const override { + if (target == window() && window()->parent() && + window()->parent()->targeter()) { + // Defer to the parent's targeter on whether |window_| should be able to + // receive the event. This should be EasyResizeWindowTargeter, which is + // installed on the container window, and is necessary for + // kResizeOutsideBoundsSize to work. + return window()->parent()->targeter()->GetHitTestRects( + target, hit_test_rect_mouse, hit_test_rect_touch); + } + + return WindowTargeter::GetHitTestRects(target, hit_test_rect_mouse, + hit_test_rect_touch); + } + + bool ShouldUseExtendedBounds(const aura::Window* target) const override { + // Fullscreen/maximized windows can't be drag-resized. + if (GetWindowState(window())->IsMaximizedOrFullscreenOrPinned()) + return false; + + // The shrunken hit region only applies to children of |window()|. + return target->parent() == window(); + } + + private: + DISALLOW_COPY_AND_ASSIGN(InteriorResizeHandleTargeter); +}; + } // namespace // TODO(beng): replace many of these functions with the corewm versions. @@ -218,11 +258,8 @@ window->RemovePreTargetHandler(handler); } -void InstallResizeHandleWindowTargeterForWindow( - aura::Window* window, - ImmersiveFullscreenController* immersive_fullscreen_controller) { - window->SetEventTargeter(std::make_unique<ResizeHandleWindowTargeter>( - window, immersive_fullscreen_controller)); +void InstallResizeHandleWindowTargeterForWindow(aura::Window* window) { + window->SetEventTargeter(std::make_unique<InteriorResizeHandleTargeter>()); } bool IsDraggingTabs(const aura::Window* window) {
diff --git a/ash/wm/window_util.h b/ash/wm/window_util.h index f2dea1b..a9feab71 100644 --- a/ash/wm/window_util.h +++ b/ash/wm/window_util.h
@@ -25,8 +25,6 @@ namespace ash { -class ImmersiveFullscreenController; - namespace wm { // Utility functions for window activation. @@ -111,10 +109,9 @@ aura::Window* window); // Installs a resize handler on the window that makes it easier to resize -// the window. See ResizeHandleWindowTargeter for the specifics. +// the window. ASH_EXPORT void InstallResizeHandleWindowTargeterForWindow( - aura::Window* window, - ImmersiveFullscreenController* immersive_fullscreen_controller); + aura::Window* window); // Returns true if |window| is currently in tab-dragging process. ASH_EXPORT bool IsDraggingTabs(const aura::Window* window);
diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py index 2ee739e..67faab1 100755 --- a/build/android/resource_sizes.py +++ b/build/android/resource_sizes.py
@@ -8,6 +8,8 @@ More information at //docs/speed/binary_size/metrics.md. """ +from __future__ import print_function + import argparse import collections from contextlib import contextmanager @@ -139,7 +141,7 @@ # Group any unknown section headers into the "other" group. for section_header, section_size in section_sizes.iteritems(): - print "Unknown elf section header:", section_header + print('Unknown elf section header: %s' % section_header) grouped_section_sizes['other'] += section_size return grouped_section_sizes @@ -253,7 +255,7 @@ # If there are multiple .arsc files, use the resource packaged APK instead. if num_arsc_files > 1: if not out_dir: - print 'Skipping resources.arsc normalization (output directory required)' + print('Skipping resources.arsc normalization (output directory required)') return 0 ap_name = os.path.basename(apk_path).replace('.apk', '.intermediate.ap_') ap_path = os.path.join(out_dir, 'gen/arsc/apks', ap_name) @@ -343,7 +345,8 @@ return self.ComputeExtractedSize() + self.ComputeZippedSize() -def PrintApkAnalysis(apk_filename, tool_prefix, out_dir, chartjson=None): +def GenerateApkAnalysis(apk_filename, tool_prefix, out_dir, + unknown_handler=None): """Analyse APK to determine size contributions of different file classes.""" file_groups = [] @@ -375,7 +378,6 @@ dex_multiplier, skip_extract_lib = _ParseManifestAttributes(apk_filename) total_apk_size = os.path.getsize(apk_filename) - apk_basename = os.path.basename(apk_filename) for member in apk_contents: filename = member.filename if filename.endswith('/'): @@ -425,69 +427,44 @@ total_install_size += group.ComputeExtractedSize() zip_overhead -= actual_size - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Breakdown', group.name + ' size', - actual_size, 'bytes') - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_InstallBreakdown', - group.name + ' size', install_size, 'bytes') + yield ('Breakdown', group.name + ' size', actual_size, 'bytes') + yield ('InstallBreakdown', group.name + ' size', install_size, 'bytes') # Only a few metrics are compressed in the first place. # To avoid over-reporting, track uncompressed size only for compressed # entries. if uncompressed_size != actual_size: - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Uncompressed', - group.name + ' size', uncompressed_size, - 'bytes') + yield ('Uncompressed', group.name + ' size', uncompressed_size, 'bytes') # Per-file zip overhead is caused by: # * 30 byte entry header + len(file name) # * 46 byte central directory entry + len(file name) # * 0-3 bytes for zipalign. - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Breakdown', 'Zip Overhead', - zip_overhead, 'bytes') - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_InstallSize', 'APK size', - total_apk_size, 'bytes') - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_InstallSize', - 'Estimated installed size', total_install_size, 'bytes') + yield ('Breakdown', 'Zip Overhead', zip_overhead, 'bytes') + yield ('InstallSize', 'APK size', total_apk_size, 'bytes') + yield ('InstallSize', 'Estimated installed size', total_install_size, 'bytes') transfer_size = _CalculateCompressedSize(apk_filename) - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_TransferSize', - 'Transfer size (deflate)', transfer_size, 'bytes') + yield ('TransferSize', 'Transfer size (deflate)', transfer_size, 'bytes') # Size of main dex vs remaining. main_dex_info = java_code.FindByPattern('classes.dex') if main_dex_info: main_dex_size = main_dex_info.file_size - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Specifics', - 'main dex size', main_dex_size, 'bytes') + yield ('Specifics', 'main dex size', main_dex_size, 'bytes') secondary_size = java_code.ComputeUncompressedSize() - main_dex_size - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Specifics', - 'secondary dex size', secondary_size, 'bytes') + yield ('Specifics', 'secondary dex size', secondary_size, 'bytes') # Size of main .so vs remaining. main_lib_info = native_code.FindLargest() if main_lib_info: main_lib_size = main_lib_info.file_size - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Specifics', - 'main lib size', main_lib_size, 'bytes') + yield ('Specifics', 'main lib size', main_lib_size, 'bytes') secondary_size = native_code.ComputeUncompressedSize() - main_lib_size - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Specifics', - 'other lib size', secondary_size, 'bytes') + yield ('Specifics', 'other lib size', secondary_size, 'bytes') main_lib_section_sizes = _ExtractMainLibSectionSizesFromApk( apk_filename, main_lib_info.filename, tool_prefix) for metric_name, size in main_lib_section_sizes.iteritems(): - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_MainLibInfo', - metric_name, size, 'bytes') + yield ('MainLibInfo', metric_name, size, 'bytes') # Main metric that we want to monitor for jumps. normalized_apk_size = total_apk_size @@ -524,21 +501,30 @@ normalized_apk_size += int(_NormalizeResourcesArsc( apk_filename, arsc.GetNumEntries(), num_arsc_translations, out_dir)) - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Specifics', - 'normalized apk size', normalized_apk_size, 'bytes') + yield ('Specifics', 'normalized apk size', normalized_apk_size, 'bytes') + yield ('Specifics', 'file count', len(apk_contents), 'zip entries') - perf_tests_results_helper.ReportPerfResult(chartjson, - apk_basename + '_Specifics', - 'file count', len(apk_contents), 'zip entries') + if unknown_handler is not None: + for info in unknown.AllEntries(): + unknown_handler(info) - for info in unknown.AllEntries(): - print 'Unknown entry:', info.filename, info.compress_size + +def PrintApkAnalysis(apk_filename, tool_prefix, out_dir, chartjson=None): + """Calls GenerateApkAnalysis() and report the value.""" + + def PrintUnknown(info): + print('Unknown entry: %s %d' % (info.filename, info.compress_size)) + + title_prefix = os.path.basename(apk_filename) + '_' + for data in GenerateApkAnalysis(apk_filename, tool_prefix, out_dir, + PrintUnknown): + title = title_prefix + data[0] + perf_tests_results_helper.ReportPerfResult(chartjson, title, *data[1:]) def _AnnotatePakResources(out_dir): """Returns a pair of maps: id_name_map, id_header_map.""" - print 'Looking at resources in: %s' % out_dir + print('Looking at resources in: %s' % out_dir) grit_headers = [] for root, _, files in os.walk(out_dir): @@ -556,8 +542,8 @@ i = int(m.group('id')) name = m.group('name') if i in id_name_map and name != id_name_map[i]: - print 'WARNING: Resource ID conflict %s (%s vs %s)' % ( - i, id_name_map[i], name) + print('WARNING: Resource ID conflict %s (%s vs %s)' % ( + i, id_name_map[i], name)) id_name_map[i] = name id_header_map[i] = os.path.relpath(header, out_dir) return id_name_map, id_header_map @@ -599,7 +585,7 @@ sis, _ = GetStaticInitializers( so_with_symbols_path, tool_prefix) for si in sis: - print si + print(si) else: raise Exception('Unstripped .so not found. Looked here: %s', so_with_symbols_path) @@ -616,22 +602,25 @@ return total_size -def _PrintDexAnalysis(apk_filename, chartjson=None): +def GenerateDexAnalysis(apk_filename): sizes, total_size = method_count.ExtractSizesFromZip(apk_filename) - graph_title = os.path.basename(apk_filename) + '_Dex' dex_metrics = method_count.CONTRIBUTORS_TO_DEX_CACHE cumulative_sizes = collections.defaultdict(int) for classes_dex_sizes in sizes.values(): for key in dex_metrics: cumulative_sizes[key] += classes_dex_sizes[key] for key, label in dex_metrics.iteritems(): - perf_tests_results_helper.ReportPerfResult(chartjson, graph_title, label, - cumulative_sizes[key], 'entries') + yield ('Dex', label, cumulative_sizes[key], 'entries') - graph_title = '%sCache' % graph_title - perf_tests_results_helper.ReportPerfResult(chartjson, graph_title, 'DexCache', - total_size, 'bytes') + yield ('DexCache', 'DexCache', total_size, 'bytes') + + +def _PrintDexAnalysis(apk_filename, chartjson=None): + title_prefix = os.path.basename(apk_filename) + '_' + for data in GenerateDexAnalysis(apk_filename): + title = title_prefix + data[0] + perf_tests_results_helper.ReportPerfResult(chartjson, title, *data[1:]) def _PrintPatchSizeEstimate(new_apk, builder, bucket, chartjson=None):
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 9fabc20..91ee031 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -135,6 +135,9 @@ # the space overhead is too great. We should use some mixture of profiles and # optimization settings to better tune the size increase. thin_lto_enable_optimizations = is_chromeos + + # By default only the binaries in official builds get build IDs. + force_local_build_id = false } declare_args() { @@ -334,7 +337,7 @@ } } - if (is_official_build) { + if (is_official_build || force_local_build_id) { # Explicitly pass --build-id to ld. Compilers used to always pass this # implicitly but don't any more (in particular clang when built without # ENABLE_LINKER_BUILD_ID=ON). The crash infrastructure does need a build
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 3303b6c..213bd42 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -8c56b911a94191247fd5cb252b6d07dddb7ecf2c \ No newline at end of file +289d5cb365819037623119ed5f1e92f5d02eaa0c \ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 48a1d276..67a679d3 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -a21249208f6da4f41da84bc5d45bb3f08f12d893 \ No newline at end of file +5a4320207b347eed2c27aaa816d00ef547242a4b \ No newline at end of file
diff --git a/cc/paint/oop_pixeltest.cc b/cc/paint/oop_pixeltest.cc index 8900dde..aade8d5 100644 --- a/cc/paint/oop_pixeltest.cc +++ b/cc/paint/oop_pixeltest.cc
@@ -787,6 +787,46 @@ ExpectEquals(actual, expected); } +TEST_P(OopImagePixelTest, DrawImageWithSetMatrix) { + SCOPED_TRACE(base::StringPrintf("UseTooLargeImage: %d, FilterQuality: %d\n", + UseTooLargeImage(), FilterQuality())); + + gfx::Rect rect(10, 10); + gfx::Size image_size = GetImageSize(); + + SkBitmap bitmap; + bitmap.allocPixelsFlags( + SkImageInfo::MakeN32Premul(image_size.width(), image_size.height()), + SkBitmap::kZeroPixels_AllocFlag); + + SkCanvas canvas(bitmap); + canvas.drawColor(SK_ColorMAGENTA); + SkPaint green; + green.setColor(SK_ColorGREEN); + canvas.drawRect(SkRect::MakeXYWH(1, 2, 3, 4), green); + + sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); + const PaintImage::Id kSomeId = 32; + auto builder = + PaintImageBuilder::WithDefault().set_image(image, 0).set_id(kSomeId); + auto paint_image = builder.TakePaintImage(); + + auto display_item_list = base::MakeRefCounted<DisplayItemList>(); + display_item_list->StartPaint(); + PaintFlags flags; + flags.setFilterQuality(FilterQuality()); + display_item_list->push<SetMatrixOp>(SkMatrix::MakeScale(0.5f, 0.5f)); + display_item_list->push<DrawImageOp>(paint_image, 0.f, 0.f, &flags); + display_item_list->EndPaintOfUnpaired(rect); + display_item_list->Finalize(); + + auto actual = Raster(display_item_list, rect.size()); + auto expected = RasterExpectedBitmap(display_item_list, rect.size()); + ExpectEquals(actual, expected); + + EXPECT_EQ(actual.getColor(0, 0), SK_ColorMAGENTA); +} + TEST_F(OopPixelTest, Preclear) { gfx::Rect rect(10, 10); auto display_item_list = base::MakeRefCounted<DisplayItemList>();
diff --git a/cc/test/test_in_process_context_provider.cc b/cc/test/test_in_process_context_provider.cc index 0352e4a3..c3742164 100644 --- a/cc/test/test_in_process_context_provider.cc +++ b/cc/test/test_in_process_context_provider.cc
@@ -51,7 +51,7 @@ auto result = context->Initialize( nullptr, nullptr, is_offscreen, gpu::kNullSurfaceHandle, attribs, gpu::SharedMemoryLimits(), gpu_memory_buffer_manager, image_factory, - nullptr, std::move(task_runner)); + std::move(task_runner)); DCHECK_EQ(result, gpu::ContextResult::kSuccess); return context;
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentBridge.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentBridge.java index fb43d8e..2a18f7b0 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentBridge.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentBridge.java
@@ -12,6 +12,7 @@ import com.google.android.libraries.feed.host.storage.ContentOperation.Upsert; import org.chromium.base.Callback; +import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.chrome.browser.profiles.Profile; @@ -30,17 +31,24 @@ /** * Creates a {@link FeedContentBridge} for accessing native content storage * implementation for the current user, and initial native side bridge. + * + * @param profile {@link Profile} of the user we are rendering the Feed for. */ + public FeedContentBridge(Profile profile) { + mNativeFeedContentBridge = nativeInit(profile); + } + + /** + * Creates a {@link FeedContentBridge} for accessing native content storage + * implementation for the current user, and initial native side bridge. + */ + @VisibleForTesting public FeedContentBridge() {} /** * Initializes the native side of this bridge. - * - * @param profile {@link Profile} of the user we are rendering the Feed for. */ - public void init(Profile profile) { - mNativeFeedContentBridge = nativeInit(profile); - } + public void init() {} /** Cleans up native half of this bridge. */ public void destroy() { @@ -50,21 +58,21 @@ } public void loadContent(List<String> keys, Callback<Map<String, byte[]>> successCallback, - Callback<Map<String, byte[]>> failureCallback) { + Callback<Void> failureCallback) { assert mNativeFeedContentBridge != 0; String[] keysArray = keys.toArray(new String[keys.size()]); nativeLoadContent(mNativeFeedContentBridge, keysArray, successCallback, failureCallback); } public void loadContentByPrefix(String prefix, Callback<Map<String, byte[]>> successCallback, - Callback<Map<String, byte[]>> failureCallback) { + Callback<Void> failureCallback) { assert mNativeFeedContentBridge != 0; nativeLoadContentByPrefix( mNativeFeedContentBridge, prefix, successCallback, failureCallback); } public void loadAllContentKeys( - Callback<String[]> successCallback, Callback<String[]> failureCallback) { + Callback<String[]> successCallback, Callback<Void> failureCallback) { assert mNativeFeedContentBridge != 0; nativeLoadAllContentKeys(mNativeFeedContentBridge, successCallback, failureCallback); } @@ -116,13 +124,11 @@ private native long nativeInit(Profile profile); private native void nativeDestroy(long nativeFeedContentBridge); private native void nativeLoadContent(long nativeFeedContentBridge, String[] keys, - Callback<Map<String, byte[]>> successCallback, - Callback<Map<String, byte[]>> failureCallback); + Callback<Map<String, byte[]>> successCallback, Callback<Void> failureCallback); private native void nativeLoadContentByPrefix(long nativeFeedContentBridge, String prefix, - Callback<Map<String, byte[]>> successCallback, - Callback<Map<String, byte[]>> failureCallback); + Callback<Map<String, byte[]>> successCallback, Callback<Void> failureCallback); private native void nativeLoadAllContentKeys(long nativeFeedContentBridge, - Callback<String[]> successCallback, Callback<String[]> failureCallback); + Callback<String[]> successCallback, Callback<Void> failureCallback); private native void nativeCommitContentMutation( long nativeFeedContentBridge, Callback<Boolean> callback); private native void nativeCreateContentMutation(long nativeFeedContentBridge);
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentStorage.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentStorage.java index 7ca3baf7..76808794 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentStorage.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentStorage.java
@@ -29,8 +29,7 @@ * @param profile {@link Profile} of the user we are rendering the Feed for. */ public FeedContentStorage(Profile profile) { - mFeedContentBridge = new FeedContentBridge(); - mFeedContentBridge.init(profile); + mFeedContentBridge = new FeedContentBridge(profile); } /** @@ -55,8 +54,8 @@ assert mFeedContentBridge != null; mFeedContentBridge.loadContent(keys, (Map<String, byte[]> data) - -> { consumer.accept(Result.success(data)); }, - (Map<String, byte[]> data) -> { consumer.accept(Result.failure()); }); + -> consumer.accept(Result.success(data)), + (Void ignored) -> consumer.accept(Result.failure())); } @Override @@ -64,16 +63,16 @@ assert mFeedContentBridge != null; mFeedContentBridge.loadContentByPrefix(prefix, (Map<String, byte[]> data) - -> { consumer.accept(Result.success(data)); }, - (Map<String, byte[]> data) -> { consumer.accept(Result.failure()); }); + -> consumer.accept(Result.success(data)), + (Void ignored) -> consumer.accept(Result.failure())); } @Override public void commit(ContentMutation mutation, Consumer<CommitResult> consumer) { assert mFeedContentBridge != null; - mFeedContentBridge.commitContentMutation(mutation, (Boolean result) -> { - consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE); - }); + mFeedContentBridge.commitContentMutation(mutation, + (Boolean result) + -> consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE)); } @Override @@ -81,7 +80,7 @@ assert mFeedContentBridge != null; mFeedContentBridge.loadAllContentKeys( (String[] keys) - -> { consumer.accept(Result.success(Arrays.asList(keys))); }, - (String[] keys) -> { consumer.accept(Result.failure()); }); + -> consumer.accept(Result.success(Arrays.asList(keys))), + (Void ignored) -> consumer.accept(Result.failure())); } }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalBridge.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalBridge.java index 120d3eb4..aea7e3a 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalBridge.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalBridge.java
@@ -11,6 +11,7 @@ import com.google.android.libraries.feed.host.storage.JournalOperation.Type; import org.chromium.base.Callback; +import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.JNINamespace; import org.chromium.chrome.browser.profiles.Profile; @@ -26,18 +27,20 @@ /** * Creates a {@link FeedJournalBridge} for accessing native journal storage * implementation for the current user, and initial native side bridge. - */ - public FeedJournalBridge() {} - - /** - * Initializes the native side of this bridge. * * @param profile {@link Profile} of the user we are rendering the Feed for. */ - public void init(Profile profile) { + + public FeedJournalBridge(Profile profile) { mNativeFeedJournalBridge = nativeInit(profile); } + /** + * Creates a {@link FeedJournalBridge} for testing. + */ + @VisibleForTesting + public FeedJournalBridge() {} + /** Cleans up native half of this bridge. */ public void destroy() { assert mNativeFeedJournalBridge != 0; @@ -46,9 +49,10 @@ } /** Loads the journal and asynchronously returns the contents. */ - public void loadJournal(String journalName, Callback<String[]> callback) { + public void loadJournal(String journalName, Callback<String[]> successCallback, + Callback<Void> failureCallback) { assert mNativeFeedJournalBridge != 0; - nativeLoadJournal(mNativeFeedJournalBridge, journalName, callback); + nativeLoadJournal(mNativeFeedJournalBridge, journalName, successCallback, failureCallback); } /** @@ -87,15 +91,18 @@ } /** Determines whether a journal exists and asynchronously responds. */ - public void doesJournalExist(String journalName, Callback<Boolean> callback) { + public void doesJournalExist( + String journalName, Callback<Boolean> successCallback, Callback<Void> failureCallback) { assert mNativeFeedJournalBridge != 0; - nativeDoesJournalExist(mNativeFeedJournalBridge, journalName, callback); + nativeDoesJournalExist( + mNativeFeedJournalBridge, journalName, successCallback, failureCallback); } /** Asynchronously retrieve a list of all current journals' name. */ - public void loadAllJournalKeys(Callback<List<String>> callback) { + public void loadAllJournalKeys( + Callback<List<String>> successCallback, Callback<Void> failureCallback) { assert mNativeFeedJournalBridge != 0; - nativeLoadAllJournalKeys(mNativeFeedJournalBridge, callback); + nativeLoadAllJournalKeys(mNativeFeedJournalBridge, successCallback, failureCallback); } /** Delete all journals. Reports success or failure. */ @@ -106,8 +113,8 @@ private native long nativeInit(Profile profile); private native void nativeDestroy(long nativeFeedJournalBridge); - private native void nativeLoadJournal( - long nativeFeedJournalBridge, String journalName, Callback<String[]> callback); + private native void nativeLoadJournal(long nativeFeedJournalBridge, String journalName, + Callback<String[]> successCallback, Callback<Void> failureCallback); private native void nativeCommitJournalMutation( long nativeFeedJournalBridge, Callback<Boolean> callback); private native void nativeStartJournalMutation( @@ -116,10 +123,10 @@ private native void nativeAddAppendOperation(long nativeFeedJournalBridge, String value); private native void nativeAddCopyOperation(long nativeFeedJournalBridge, String toJournalName); private native void nativeAddDeleteOperation(long nativeFeedJournalBridge); - private native void nativeDoesJournalExist( - long nativeFeedJournalBridge, String journalName, Callback<Boolean> callback); - private native void nativeLoadAllJournalKeys( - long nativeFeedJournalBridge, Callback<List<String>> callback); + private native void nativeDoesJournalExist(long nativeFeedJournalBridge, String journalName, + Callback<Boolean> successCallback, Callback<Void> failureCallback); + private native void nativeLoadAllJournalKeys(long nativeFeedJournalBridge, + Callback<List<String>> successCallback, Callback<Void> failureCallback); private native void nativeDeleteAllJournals( long nativeFeedJournalBridge, Callback<Boolean> callback); }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalStorage.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalStorage.java index 49556ea9..815ecc7 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalStorage.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedJournalStorage.java
@@ -10,7 +10,8 @@ import com.google.android.libraries.feed.host.storage.JournalMutation; import com.google.android.libraries.feed.host.storage.JournalStorage; -import org.chromium.base.Callback; +import org.chromium.base.VisibleForTesting; +import org.chromium.chrome.browser.profiles.Profile; import java.util.ArrayList; import java.util.List; @@ -21,60 +22,21 @@ public class FeedJournalStorage implements JournalStorage { private FeedJournalBridge mFeedJournalBridge; - private static class StorageCallback<T> implements Callback<T> { - private final Consumer<Result<T>> mConsumer; - - public StorageCallback(Consumer<Result<T>> consumer) { - mConsumer = consumer; - } - - @Override - public void onResult(T data) { - // TODO(gangwu): Need to handle failure case. - mConsumer.accept(Result.success(data)); - } - } - - private static class ReadCallback implements Callback<String[]> { - private final Consumer < Result < List<byte[]>>> mConsumer; - - public ReadCallback(Consumer < Result < List<byte[]>>> consumer) { - mConsumer = consumer; - } - - @Override - public void onResult(String[] entries) { - // TODO(gangwu): Need to handle failure case. - List<byte[]> journal = new ArrayList<byte[]>(); - for (String entry : entries) { - journal.add(entry.getBytes()); - } - mConsumer.accept(Result.success(journal)); - } - } - - private static class CommitCallback implements Callback<Boolean> { - private final Consumer<CommitResult> mConsumer; - - CommitCallback(Consumer<CommitResult> consumer) { - mConsumer = consumer; - } - - @Override - public void onResult(Boolean result) { - if (result) { - mConsumer.accept(CommitResult.SUCCESS); - } else { - mConsumer.accept(CommitResult.FAILURE); - } - } - } - /** * Creates a {@link FeedJournalStorage} for storing journals for the current user. * + * @param profile {@link Profile} of the user we are rendering the Feed for. + */ + public FeedJournalStorage(Profile profile) { + mFeedJournalBridge = new FeedJournalBridge(profile); + } + + /** + * Creates a {@link FeedJournalStorage} for testing. + * * @param bridge {@link FeedJournalBridge} implementation can handle journal storage request. */ + @VisibleForTesting public FeedJournalStorage(FeedJournalBridge bridge) { mFeedJournalBridge = bridge; } @@ -89,30 +51,45 @@ @Override public void read(String journalName, Consumer < Result < List<byte[]>>> consumer) { assert mFeedJournalBridge != null; - mFeedJournalBridge.loadJournal(journalName, new ReadCallback(consumer)); + mFeedJournalBridge.loadJournal(journalName, (String[] entries) -> { + List<byte[]> journal = new ArrayList<byte[]>(); + for (String entry : entries) { + journal.add(entry.getBytes()); + } + consumer.accept(Result.success(journal)); + }, (Void ignored) -> consumer.accept(Result.failure())); } @Override public void commit(JournalMutation mutation, Consumer<CommitResult> consumer) { assert mFeedJournalBridge != null; - mFeedJournalBridge.commitJournalMutation(mutation, new CommitCallback(consumer)); + mFeedJournalBridge.commitJournalMutation(mutation, + (Boolean result) + -> consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE)); } @Override public void exists(String journalName, Consumer<Result<Boolean>> consumer) { assert mFeedJournalBridge != null; - mFeedJournalBridge.doesJournalExist(journalName, new StorageCallback<Boolean>(consumer)); + mFeedJournalBridge.doesJournalExist(journalName, + (Boolean exist) + -> consumer.accept(Result.success(exist)), + (Void ignored) -> consumer.accept(Result.failure())); } @Override public void getAllJournals(Consumer < Result < List<String>>> consumer) { assert mFeedJournalBridge != null; - mFeedJournalBridge.loadAllJournalKeys(new StorageCallback<List<String>>(consumer)); + mFeedJournalBridge.loadAllJournalKeys((List<String> data) + -> consumer.accept(Result.success(data)), + (Void ignored) -> consumer.accept(Result.failure())); } @Override public void deleteAll(Consumer<CommitResult> consumer) { assert mFeedJournalBridge != null; - mFeedJournalBridge.deleteAllJournals(new CommitCallback(consumer)); + mFeedJournalBridge.deleteAllJournals( + (Boolean result) + -> consumer.accept(result ? CommitResult.SUCCESS : CommitResult.FAILURE)); } }
diff --git a/chrome/android/java/res/layout/snackbar.xml b/chrome/android/java/res/layout/snackbar.xml index 0bbc0d6c..e3a6426 100644 --- a/chrome/android/java/res/layout/snackbar.xml +++ b/chrome/android/java/res/layout/snackbar.xml
@@ -71,6 +71,7 @@ android:textAppearance="@style/WhiteBody" /> <Button + style="@style/MainButtonStyle" android:id="@+id/snackbar_button" android:layout_width="wrap_content" android:layout_height="@dimen/snackbar_min_height"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java index 65d0374..383c42a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
@@ -18,9 +18,10 @@ import org.chromium.base.AsyncTask; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; -import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.UserData; +import org.chromium.base.UserDataHost; +import org.chromium.base.VisibleForTesting; import org.chromium.chrome.browser.UrlConstants; -import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; import org.chromium.ui.base.PermissionCallback; import org.chromium.ui.base.WindowAndroid; @@ -38,9 +39,11 @@ * * Prompts the user when a dangerous file is downloaded. Auto-opens PDFs after downloading. */ -public class ChromeDownloadDelegate { +public class ChromeDownloadDelegate implements UserData { private static final String TAG = "Download"; + private static final Class<ChromeDownloadDelegate> USER_DATA_KEY = ChromeDownloadDelegate.class; + // Mime types that Android can't handle when tries to open the file. Chrome may deduct a better // mime type based on file extension. private static final HashSet<String> GENERIC_MIME_TYPES = new HashSet<String>(Arrays.asList( @@ -51,20 +54,28 @@ private final Context mContext; private Tab mTab; + public static ChromeDownloadDelegate from(Tab tab) { + UserDataHost host = tab.getUserDataHost(); + ChromeDownloadDelegate controller = host.getUserData(USER_DATA_KEY); + return controller == null + ? host.setUserData(USER_DATA_KEY, + new ChromeDownloadDelegate(tab.getThemedApplicationContext(), tab)) + : controller; + } + /** * Creates ChromeDownloadDelegate. - * @param context The application context. * @param tab The corresponding tab instance. */ - public ChromeDownloadDelegate(Context context, Tab tab) { + @VisibleForTesting + ChromeDownloadDelegate(Context context, Tab tab) { mContext = context; mTab = tab; - mTab.addObserver(new EmptyTabObserver() { - @Override - public void onDestroyed(Tab tab) { - mTab = null; - } - }); + } + + @Override + public void destroy() { + mTab = null; } /** @@ -149,39 +160,6 @@ } /** - * Enqueue download manager request, only from native side. Note that at this point - * we don't need to show an infobar even when the file already exists. - * - * @param overwrite Whether or not we will overwrite the file. - * @param downloadInfo The download info. - * @return true iff this request resulted in the tab creating the download to close. - */ - @CalledByNative - private boolean enqueueDownloadManagerRequestFromNative( - final boolean overwrite, final DownloadInfo downloadInfo) { - if (overwrite) { - // Android DownloadManager does not have an overwriting option. - // We remove the file here instead. - new AsyncTask<Void>() { - @Override - public Void doInBackground() { - deleteFileForOverwrite(downloadInfo); - return null; - } - - @Override - public void onPostExecute(Void args) { - DownloadController.enqueueDownloadManagerRequest(downloadInfo); - } - } - .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } else { - DownloadController.enqueueDownloadManagerRequest(downloadInfo); - } - return DownloadController.closeTabIfBlank(mTab); - } - - /** * Check the external storage and notify user on error. * * @param fullDirPath The dir path to download a file. Normally this is external storage.
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 fb17b77..b9d10bb 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
@@ -63,7 +63,6 @@ import org.chromium.chrome.browser.crypto.CipherFactory; import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.document.ChromeLauncherActivity; -import org.chromium.chrome.browser.download.ChromeDownloadDelegate; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenOptions; @@ -381,8 +380,6 @@ private int mDefaultThemeColor; private int mThemeColor; - private ChromeDownloadDelegate mDownloadDelegate; - /** * The Text bubble used to display In Product help widget for download feature on videos. */ @@ -1764,8 +1761,6 @@ mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(this); mWebContentsObserver = new TabWebContentsObserver(mWebContents, this); - mDownloadDelegate = new ChromeDownloadDelegate(mThemedApplicationContext, this); - int parentId = getParentId(); if (parentId != INVALID_TAB_ID) { Tab parentTab = getTabModelSelector().getTabById(parentId); @@ -3157,16 +3152,6 @@ return intent; } - /** - * Check whether the context menu download should be intercepted. - * - * @param url URL to be downloaded. - * @return whether the download should be intercepted. - */ - protected boolean shouldInterceptContextMenuDownload(String url) { - return mDownloadDelegate.shouldInterceptContextMenuDownload(url); - } - void handleRendererResponsiveStateChanged(boolean isResponsive) { mIsRendererUnresponsive = !isResponsive; for (TabObserver observer : mObservers) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java index ee215af..1464b9c1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java
@@ -20,6 +20,7 @@ import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.contextmenu.ContextMenuItemDelegate; import org.chromium.chrome.browser.document.ChromeLauncherActivity; +import org.chromium.chrome.browser.download.ChromeDownloadDelegate; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; import org.chromium.chrome.browser.preferences.PrefServiceBridge; @@ -84,7 +85,8 @@ @Override public boolean startDownload(String url, boolean isLink) { - return !isLink || !mTab.shouldInterceptContextMenuDownload(url); + return !isLink + || !ChromeDownloadDelegate.from(mTab).shouldInterceptContextMenuDownload(url); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarControlContainer.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarControlContainer.java index a2e96489..105210e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarControlContainer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarControlContainer.java
@@ -70,6 +70,7 @@ @Override public void getProgressBarDrawingInfo(DrawingInfo drawingInfoOut) { + if (mToolbar == null) return; // TODO(yusufo): Avoid casting to the layout without making the interface bigger. ToolbarProgressBar progressBar = ((ToolbarLayout) mToolbar).getProgressBar(); if (progressBar != null) progressBar.getDrawingInfo(drawingInfoOut); @@ -77,6 +78,7 @@ @Override public int getToolbarBackgroundColor() { + if (mToolbar == null) return 0; return ((ToolbarLayout) mToolbar).getToolbarDataProvider().getPrimaryColor(); } @@ -304,7 +306,7 @@ @Override public boolean shouldRecognizeSwipe(MotionEvent e1, MotionEvent e2) { if (isOnTabStrip(e1)) return false; - if (mToolbar.shouldIgnoreSwipeGesture()) return false; + if (mToolbar != null && mToolbar.shouldIgnoreSwipeGesture()) return false; if (KeyboardVisibilityDelegate.getInstance().isKeyboardShowing( getContext(), ToolbarControlContainer.this)) return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java index cab3d8db..00686f04 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/vr/VrShell.java
@@ -67,6 +67,8 @@ import org.chromium.ui.display.VirtualDisplayAndroid; import org.chromium.ui.widget.UiWidgetFactory; +import java.util.ArrayList; + /** * This view extends from GvrLayout which wraps a GLSurfaceView that renders VR shell. */ @@ -132,8 +134,8 @@ private VrInputMethodManagerWrapper mInputMethodManagerWrapper; - private int mUiActivityResult; - private Runnable mUiActivityResultCallback; + private ArrayList<Integer> mUiOperationResults; + private ArrayList<Runnable> mUiOperationResultCallbacks; public VrShell( ChromeActivity activity, VrShellDelegate delegate, TabModelSelector tabModelSelector) { @@ -1248,21 +1250,46 @@ mNativeVrShell, elementName, actionType, position.x, position.y); } - public void setUiExpectingActivityForTesting(int quiescenceTimeoutMs, Runnable resultCallback) { - mUiActivityResult = VrUiTestActivityResult.UNREPORTED; - mUiActivityResultCallback = resultCallback; - nativeSetUiExpectingActivityForTesting(mNativeVrShell, quiescenceTimeoutMs); + public void registerUiOperationCallbackForTesting( + int actionType, Runnable resultCallback, int quiescenceTimeoutMs) { + assert actionType < UiTestOperationType.NUM_UI_TEST_OPERATION_TYPES; + // Fill the ArrayLists if this is the first time the method has been called. + if (mUiOperationResults == null) { + mUiOperationResults = + new ArrayList<Integer>(UiTestOperationType.NUM_UI_TEST_OPERATION_TYPES); + mUiOperationResultCallbacks = + new ArrayList<Runnable>(UiTestOperationType.NUM_UI_TEST_OPERATION_TYPES); + for (int i = 0; i < UiTestOperationType.NUM_UI_TEST_OPERATION_TYPES; i++) { + mUiOperationResults.add(null); + mUiOperationResultCallbacks.add(null); + } + } + // We currently have two callback types, and only one of them actually cares about the + // value given to the callback, so we can blindly set the default here. If more are added, + // their defaults will have to be properly set here. + mUiOperationResults.set(actionType, VrUiTestActivityResult.UNREPORTED); + mUiOperationResultCallbacks.set(actionType, resultCallback); + + // In the case of the UI activity quiescence callback type, we need to let the native UI + // know how long to wait before timing out. + if (actionType == UiTestOperationType.UI_ACTIVITY_RESULT) { + nativeSetUiExpectingActivityForTesting(mNativeVrShell, quiescenceTimeoutMs); + } } - public int getLastUiActivityResultForTesting() { - return mUiActivityResult; + public void saveNextFrameBufferToDiskForTesting(String filepathBase) { + nativeSaveNextFrameBufferToDiskForTesting(mNativeVrShell, filepathBase); + } + + public int getLastUiOperationResultForTesting(int actionType) { + return mUiOperationResults.get(actionType).intValue(); } @CalledByNative - public void reportUiActivityResultForTesting(int result) { - mUiActivityResult = result; - mUiActivityResultCallback.run(); - mUiActivityResultCallback = null; + public void reportUiOperationResultForTesting(int actionType, int result) { + mUiOperationResults.set(actionType, result); + mUiOperationResultCallbacks.get(actionType).run(); + mUiOperationResultCallbacks.set(actionType, null); } private native long nativeInit(VrShellDelegate delegate, boolean forWebVR, @@ -1314,6 +1341,8 @@ long nativeVrShell, int elementName, int actionType, float x, float y); private native void nativeSetUiExpectingActivityForTesting( long nativeVrShell, int quiescenceTimeoutMs); + private native void nativeSaveNextFrameBufferToDiskForTesting( + long nativeVrShell, String filepathBase); private native void nativeResumeContentRendering(long nativeVrShell); private native void nativeOnOverlayTextureEmptyChanged(long nativeVrShell, boolean empty); }
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 0cb33d7c..b11e805 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -601,7 +601,6 @@ ይሁንና እርስዎ ስውር አይደሉም። ማንነት በማያሳውቅ ሁነታ ላይ መሆን የእርስዎን አሰሳ ከአሰሪዎ፣ ከበይነመረብ አገልጋይዎ ወይም ከሚጎበኟቸው ድር ጣቢያዎች አይደብቁዎውም።</translation> <translation id="572328651809341494">የቅርብ ጊዜ ትሮች</translation> <translation id="5726692708398506830">በገጹ ላይ ያለውን ሁሉንም ነገር ይበልጥ አተልቅ</translation> -<translation id="5731185123186077399">እንደ Google Pay ያሉ ግላዊነት የተላበሱ የGoogle አገልግሎቶች</translation> <translation id="5738816946784116349">የChrome ውርዶች</translation> <translation id="5748802427693696783">ወደ መደበኛ ትሮች ቀይር</translation> <translation id="5749068826913805084">Chrome ፋይሎችን ለማውረድ የማከማቻ መዳረሻ ያስፈልገዋል።</translation>
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 178eac79..ee46c5a3 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -602,7 +602,6 @@ لكنك لن تكون غير مرئي، فاستخدام وضع التصفح المتخفي لا يخفي تصفحك عن صاحب العمل أو مزود خدمة الإنترنت أو مواقع الويب التي تزورها.</translation> <translation id="572328651809341494">علامات التبويب الأخيرة</translation> <translation id="5726692708398506830">تكبير كل محتويات الصفحة</translation> -<translation id="5731185123186077399">الاستفادة من خدمات Google المخصّصة مثل Google Pay</translation> <translation id="5738816946784116349">تنزيلات Chrome</translation> <translation id="5748802427693696783">تم التبديل إلى علامات التبويب القياسية</translation> <translation id="5749068826913805084">يحتاج Chrome الوصول إلى سعة التخزين لتنزيل الملفات.</translation>
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 748fb76..1a3a92a9 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -602,7 +602,6 @@ Сърфирането ви обаче не е невидимо. При преминаване в режим „инкогнито“ то не се скрива от работодателя ви и от доставчика ви на интернет услуги, нито от уебсайтовете, които посещавате.</translation> <translation id="572328651809341494">Скорошни раздели</translation> <translation id="5726692708398506830">Уголемяване на всички елементи на страницата</translation> -<translation id="5731185123186077399">Персонализирани услуги на Google, като Google Pay</translation> <translation id="5738816946784116349">Изтегляния в Chrome</translation> <translation id="5748802427693696783">Превключихте към стандартните раздели</translation> <translation id="5749068826913805084">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 fbaa41e..120d235 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Pestanyes recents</translation> <translation id="5726692708398506830">Augmenta la mida de tots els elements de la pàgina</translation> -<translation id="5731185123186077399">Serveis de Google personalitzats, com ara Google Pay</translation> <translation id="5738816946784116349">Baixades de Chrome</translation> <translation id="5748802427693696783">S'ha canviat a les pestanyes estàndard</translation> <translation id="5749068826913805084">Chrome necessita accedir a l'emmagatzematge per poder baixar fitxers.</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 f153302..fe66922d 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Nedávno použité karty</translation> <translation id="5726692708398506830">Zvětšit veškerý obsah stránky</translation> -<translation id="5731185123186077399">Personalizované služby Google, jako např. Google Pay</translation> <translation id="5738816946784116349">Stahování v Chromu</translation> <translation id="5748802427693696783">Přepnuto na standardní karty</translation> <translation id="5749068826913805084">Aby bylo možné stahovat soubory, Chrome potřebuje přístup k úložišti.</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 7bec5567..90a05757 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -601,7 +601,6 @@ Du er dog ikke usynlig. Inkognitotilstanden skjuler ikke dine søgninger fra din arbejdsgiver, din internetudbyder eller de websites, du besøger.</translation> <translation id="572328651809341494">Seneste faner</translation> <translation id="5726692708398506830">Gør alting på siden større</translation> -<translation id="5731185123186077399">Tilpassede Google-tjenester såsom Google Pay</translation> <translation id="5738816946784116349">Downloads i Chrome</translation> <translation id="5748802427693696783">Skiftet til standardfaner</translation> <translation id="5749068826913805084">Chrome skal have lageradgang for at kunne downloade filer.</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 e63e13ad..9acd37d 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Zuletzt geöffnete Tabs</translation> <translation id="5726692708398506830">Gesamten Seiteninhalt vergrößern</translation> -<translation id="5731185123186077399">Personalisierte Google-Dienste wie Google Pay</translation> <translation id="5738816946784116349">Chrome-Downloads</translation> <translation id="5748802427693696783">Zu Standard-Tabs gewechselt</translation> <translation id="5749068826913805084">Chrome benötigt Speicherzugriff, um Dateien herunterladen zu können.</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 9cd99d1c..8c2defb 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">μόλις τώρα</translation> <translation id="2777555524387840389">Απομένουν <ph name="SECONDS" /> δευτερόλεπτα</translation> <translation id="2781151931089541271">Απομένει 1 δευτερόλεπτο</translation> +<translation id="2803478378562657435">Εμφάνιση αποθηκευμένων κωδικών πρόσβασης και επιλογών κωδικού πρόσβασης</translation> <translation id="2810645512293415242">Απλοποιημένη σελίδα για την αποθήκευση δεδομένων και για πιο γρήγορη φόρτωση.</translation> <translation id="281504910091592009">Προβολή και διαχείριση αποθηκευμένων κωδικών πρόσβασης στον <ph name="BEGIN_LINK" />Λογαριασμό σας Google<ph name="END_LINK" /></translation> <translation id="2818669890320396765">Για να εμφανίζονται οι σελιδοδείκτες σας σε όλες τις συσκευές σας, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό</translation> @@ -600,7 +601,6 @@ Ωστόσο, δεν είστε αόρατοι. Με την ανώνυμη περιήγηση δεν γίνεται απόκρυψη της περιήγησής σας από τον εργοδότη σας, τον πάροχο υπηρεσιών διαδικτύου ή τους ιστότοπους που επισκέπτεστε.</translation> <translation id="572328651809341494">Πρόσφατες καρτέλες</translation> <translation id="5726692708398506830">Μεγέθυνση όλων των στοιχείων της σελίδας</translation> -<translation id="5731185123186077399">Εξατομικευμένες υπηρεσίες Google όπως το Google Pay</translation> <translation id="5738816946784116349">Λήψεις Chrome</translation> <translation id="5748802427693696783">Έγινε εναλλαγή σε τυπικές καρτέλες</translation> <translation id="5749068826913805084">Το Chrome χρειάζεται πρόσβαση στο χώρο αποθήκευσης για τη λήψη αρχείων.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Οι καρτέλες που έχετε ανοίξει στο Chrome στις άλλες συσκευές σας θα εμφανίζονται εδώ.</translation> <translation id="6575643671698722332">Αποτυχία επαναφοράς. Επιβεβαιώστε τη σύνδεση της συσκευής σας και δοκιμάστε ξανά.</translation> <translation id="6583199322650523874">Προσθήκη σελιδοδείκτη στην τρέχουσα σελίδα</translation> +<translation id="6584721918629302382">Επαυξημένη πραγματικότητα</translation> <translation id="6593061639179217415">Για υπολογιστή</translation> <translation id="6600954340915313787">Αντιγράφηκε στο Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Επιβεβαίωση διαγραφής διαπιστευτηρίων συσκευής</translation> <translation id="7481312909269577407">Προώθηση</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (Ενημέρωση στις <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Εμφάνιση κωδικών πρόσβασης</translation> <translation id="7494974237137038751">δεδομένα που εξοικονομήθηκαν</translation> <translation id="7498271377022651285">Περιμένετε…</translation> <translation id="7514365320538308">Λήψη</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">Η λήψη απέτυχε</translation> <translation id="8026334261755873520">Διαγραφή δεδομένων περιήγησης</translation> <translation id="8035133914807600019">Νέος φάκελος…</translation> +<translation id="8037411810184515274">Εικονική πραγματικότητα</translation> <translation id="8037686209485537503">Περισσότερα όπως αυτό</translation> <translation id="8037750541064988519">Απομένουν <ph name="DAYS" /> ημέρες</translation> <translation id="804335162455518893">Δεν βρέθηκε κάρτα SD</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Κωδικοί πρόσβασης Chrome</translation> <translation id="8503813439785031346">Όνομα χρήστη</translation> <translation id="8504988642345501642">Όταν κάνετε κύλιση προς τα επάνω, θα εμφανίζονται γρήγοροι σύνδεσμοι για σχετικές σελίδες. Τα URL των σελίδων που επισκέπτεστε αποστέλλονται στην Google.</translation> +<translation id="8507520749471379845">Υπάρχουν διαθέσιμοι κωδικοί πρόσβασης</translation> <translation id="8514477925623180633">Εξαγωγή κωδικών πρόσβασης που έχουν αποθηκευτεί στο Chrome</translation> <translation id="8514577642972634246">Είσοδος στην κατάσταση ανώνυμης περιήγησης</translation> <translation id="851751545965956758">Αποκλεισμός ιστοτόπων από τη σύνδεση σε συσκευές</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 d9865697..0051729 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
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Recent tabs</translation> <translation id="5726692708398506830">Make everything on the page bigger</translation> -<translation id="5731185123186077399">Personalised Google services such as Google Pay</translation> <translation id="5738816946784116349">Chrome Downloads</translation> <translation id="5748802427693696783">Switched to standard tabs</translation> <translation id="5749068826913805084">Chrome needs storage access to download files.</translation>
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 5016587..88af8e3 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
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">recién</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> segundos restantes</translation> <translation id="2781151931089541271">1 segundo restante</translation> +<translation id="2803478378562657435">Se muestran las contraseñas guardadas y las opciones de contraseña</translation> <translation id="2810645512293415242">La página se simplificó para ahorrar datos y acelerar la carga.</translation> <translation id="281504910091592009">Ver y administrar las contraseñas guardadas en tu <ph name="BEGIN_LINK" />cuenta de Google<ph name="END_LINK" /></translation> <translation id="2818669890320396765">Para que tus favoritos estén en todos tus dispositivos, accede a tu cuenta y activa la sincronización</translation> @@ -600,7 +601,6 @@ 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> <translation id="572328651809341494">Pestañas recientes</translation> <translation id="5726692708398506830">Agrandar todos los elementos de la página</translation> -<translation id="5731185123186077399">Servicios personalizados de Google, como Google Pay</translation> <translation id="5738816946784116349">Descargas de Chrome</translation> <translation id="5748802427693696783">Se seleccionaron las pestañas estándar</translation> <translation id="5749068826913805084">Chrome necesita acceder al almacenamiento para descargar archivos.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Aquí aparecerán las pestañas que abriste en Chrome en tus otros dispositivos.</translation> <translation id="6575643671698722332">Error al restablecer. Comprueba la conexión y vuelve a intentarlo.</translation> <translation id="6583199322650523874">Agregar la página actual a favoritos</translation> +<translation id="6584721918629302382">RA</translation> <translation id="6593061639179217415">Sitio de escritorio</translation> <translation id="6600954340915313787">Se copió en Chrome.</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Confirmar eliminación de credencial de dispositivo</translation> <translation id="7481312909269577407">Reenviar</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (actualización: <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Mostrar contraseñas</translation> <translation id="7494974237137038751">datos ahorrados</translation> <translation id="7498271377022651285">Espera un momento…</translation> <translation id="7514365320538308">Descargar</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">Error en la descarga</translation> <translation id="8026334261755873520">Eliminar datos de navegación</translation> <translation id="8035133914807600019">Nueva carpeta…</translation> +<translation id="8037411810184515274">RV</translation> <translation id="8037686209485537503">Más contenido similar</translation> <translation id="8037750541064988519"><ph name="DAYS" /> días restantes</translation> <translation id="804335162455518893">No se encontró la tarjeta SD</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Contraseñas de Chrome</translation> <translation id="8503813439785031346">Nombre de usuario</translation> <translation id="8504988642345501642">Cuando te desplaces hacia arriba, se mostrarán vínculos rápidos a páginas relacionadas. Se envían a Google las URL de las páginas que visitas.</translation> +<translation id="8507520749471379845">Contraseñas disponibles</translation> <translation id="8514477925623180633">Exportar las contraseñas almacenadas con Chrome</translation> <translation id="8514577642972634246">Acceder al modo de navegación de incógnito</translation> <translation id="851751545965956758">Impedir que los sitios se conecten a los dispositivos</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 8ed5a37..9b2f3a3 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">ahora mismo</translation> <translation id="2777555524387840389">Quedan <ph name="SECONDS" /> segundos</translation> <translation id="2781151931089541271">Queda 1 segundo</translation> +<translation id="2803478378562657435">Mostrando contraseñas guardadas y opciones de contraseña</translation> <translation id="2810645512293415242">Esta página se ha simplificado para ahorrar datos y poder cargarla más rápido.</translation> <translation id="281504910091592009">Consulta y gestiona las contraseñas guardadas en tu <ph name="BEGIN_LINK" />cuenta de Google<ph name="END_LINK" /></translation> <translation id="2818669890320396765">Inicia sesión y activa la sincronización para ver tus marcadores en todos tus dispositivos</translation> @@ -600,7 +601,6 @@ No obstante, tus acciones no serán totalmente invisibles. El uso del modo de 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> <translation id="572328651809341494">Pestañas recientes</translation> <translation id="5726692708398506830">Amplía todo el contenido de la página</translation> -<translation id="5731185123186077399">Servicios de Google personalizados, como Google Pay</translation> <translation id="5738816946784116349">Descargas de Chrome</translation> <translation id="5748802427693696783">Se ha cambiado a las pestañas estándares</translation> <translation id="5749068826913805084">Chrome necesita acceso de almacenamiento para descargar archivos.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Aquí aparecen las pestañas que hayas abierto en Chrome en otros dispositivos.</translation> <translation id="6575643671698722332">Error al restablecer. Comprueba la conexión y vuelve a intentarlo.</translation> <translation id="6583199322650523874">Añade la página actual a marcadores</translation> +<translation id="6584721918629302382">Realidad aumentada</translation> <translation id="6593061639179217415">Versión para ordenador</translation> <translation id="6600954340915313787">Copiada a Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Confirmar eliminación de credencial de dispositivo</translation> <translation id="7481312909269577407">Adelante</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (actualizada el <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Mostrar contraseñas</translation> <translation id="7494974237137038751">datos ahorrados</translation> <translation id="7498271377022651285">Espera…</translation> <translation id="7514365320538308">Descargar</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">No se ha podido descargar el archivo</translation> <translation id="8026334261755873520">Borrar datos de navegación</translation> <translation id="8035133914807600019">Nueva carpeta…</translation> +<translation id="8037411810184515274">Realidad virtual</translation> <translation id="8037686209485537503">Similares</translation> <translation id="8037750541064988519">Quedan <ph name="DAYS" /> días</translation> <translation id="804335162455518893">No se ha encontrado la tarjeta SD</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Contraseñas de Chrome</translation> <translation id="8503813439785031346">Nombre de usuario</translation> <translation id="8504988642345501642">Cuando te desplazas hacia arriba, se muestran enlaces rápidos a páginas relacionadas. Las URL de las páginas que visitas se envían a Google.</translation> +<translation id="8507520749471379845">Contraseñas disponibles</translation> <translation id="8514477925623180633">Exportar contraseñas almacenadas en Chrome</translation> <translation id="8514577642972634246">Navegar en modo de incógnito</translation> <translation id="851751545965956758">No permitir que los sitios web se conecten a dispositivos</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 213b458..addf39f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -600,7 +600,6 @@ با این حال، نامرئی نیستید. رفتن به حالت ناشناس، مرورتان را از کارفرما، ارائهکننده خدمات اینترنتی یا وبسایتهایی که بازید میکنید، پنهان نمیکند.</translation> <translation id="572328651809341494">برگههای اخیر</translation> <translation id="5726692708398506830">بزرگتر کردن همهچیز در صفحه</translation> -<translation id="5731185123186077399">سرویسهای شخصیشده Google مانند Google Pay</translation> <translation id="5738816946784116349">بارگیریهای Chrome</translation> <translation id="5748802427693696783">به برگههای استاندارد تغییر یافت</translation> <translation id="5749068826913805084">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 7eb02ee..3d292972 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -601,7 +601,6 @@ Et ole kuitenkaan näkymätön. Incognito-tila ei piilota selaustietojasi työnantajaltasi, internetpalveluntarjoajaltasi tai vierailemiltasi verkkosivustoilta.</translation> <translation id="572328651809341494">Hiljattain suljetut välilehdet</translation> <translation id="5726692708398506830">Suurenna sivun kaikki sisältö</translation> -<translation id="5731185123186077399">Personoidut Google-palvelut, esim. Google Pay</translation> <translation id="5738816946784116349">Chromen lataukset</translation> <translation id="5748802427693696783">Vaihdettiin näkyviin tavalliset välilehdet.</translation> <translation id="5749068826913805084">Chrome tarvitsee tallennustilan käyttöoikeuden tiedostojen lataamiseen.</translation> @@ -916,7 +915,7 @@ <translation id="8109613176066109935">Ota synkronointi käyttöön, niin voit käyttää kirjanmerkkejä kaikilla laitteillasi</translation> <translation id="8116925261070264013">Mykistetty</translation> <translation id="813082847718468539">Näytä sivuston tiedot</translation> -<translation id="8156139159503939589">Mitä kieliä osaat lukea?</translation> +<translation id="8156139159503939589">Mitä kieliä ymmärrät?</translation> <translation id="8168435359814927499">Sisältö</translation> <translation id="8186512483418048923"><ph name="FILES" /> tiedostoa jäljellä</translation> <translation id="8190358571722158785">1 päivä jäljellä</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 47ba070..249e2a4 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Mga kamakailang tab</translation> <translation id="5726692708398506830">Palakihin ang lahat ng nasa page</translation> -<translation id="5731185123186077399">Mga naka-personalize na serbisyo ng Google tulad ng Google Pay</translation> <translation id="5738816946784116349">Mga Download sa Chrome</translation> <translation id="5748802427693696783">Lumipat sa mga karaniwang tab</translation> <translation id="5749068826913805084">Kailangan ng Chrome ng access sa storage upang mag-download ng mga file.</translation>
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 1cfbf96..94fa597 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Onglets récents</translation> <translation id="5726692708398506830">Agrandir tous les éléments de la page</translation> -<translation id="5731185123186077399">Des services Google personnalisés, tels que Google Pay</translation> <translation id="5738816946784116349">Téléchargements Chrome</translation> <translation id="5748802427693696783">Onglets standards sélectionnés</translation> <translation id="5749068826913805084">Pour télécharger des fichiers, Chrome a besoin d'accéder à l'espace de stockage.</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 8a6c3cd..79af7ee6 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -601,7 +601,6 @@ हालांकि, गुप्त मोड का मतलब यह नहीं है कि आपको कोई भी नहीं देख सकता. गुप्त मोड में आप जो भी ब्राउजिंग करते हैं उसे, आपके नियोक्ता, इंटरनेट सेवा देने वाली कंपनी या आप जिन वेबसाइटों को देखते हैं, वे देख सकते हैं.</translation> <translation id="572328651809341494">हाल ही के टैब</translation> <translation id="5726692708398506830">पेज पर सब कुछ बड़ा करें</translation> -<translation id="5731185123186077399">Google Pay जैसी दर्शकों के पसंद के मुताबिक Google सेवाएं</translation> <translation id="5738816946784116349">Chrome डाउनलोड</translation> <translation id="5748802427693696783">मानक टैब पर स्विच कर दिया गया</translation> <translation id="5749068826913805084">फ़ाइलें डाउनलोड करने के लिए 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 1f87c70..0ae2fbab 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Nedavne kartice</translation> <translation id="5726692708398506830">Povećavanje svega na stranici</translation> -<translation id="5731185123186077399">Prilagođene Googleove usluge kao što je Google Pay</translation> <translation id="5738816946784116349">Chromeova preuzimanja</translation> <translation id="5748802427693696783">Prešli ste na standardne kartice</translation> <translation id="5749068826913805084">Chrome treba pristup pohrani radi preuzimanja datoteka.</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 f3978dc4..7ba4790f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Nemrég megnyitott lapok</translation> <translation id="5726692708398506830">Minden nagyítása az oldalon</translation> -<translation id="5731185123186077399">Személyre szabott Google-szolgáltatások (pl. Google Pay)</translation> <translation id="5738816946784116349">Letöltések a Chrome-ban</translation> <translation id="5748802427693696783">Szabványos lapokra váltva</translation> <translation id="5749068826913805084">A Chrome-nak tárhelyhozzáférésre van szüksége a fájlok letöltéséhez.</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 d23b575b2..95de7ec4 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Tab baru-baru ini</translation> <translation id="5726692708398506830">Memperbesar semua yang ada di halaman</translation> -<translation id="5731185123186077399">Layanan Google yang dipersonalisasi seperti Google Pay</translation> <translation id="5738816946784116349">Hasil Download di Chrome</translation> <translation id="5748802427693696783">Beralih ke tab standar</translation> <translation id="5749068826913805084">Chrome memerlukan akses penyimpanan untuk mendownload file.</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 463480d..53cdd1b 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Schede recenti</translation> <translation id="5726692708398506830">Ingrandisci i contenuti della pagina</translation> -<translation id="5731185123186077399">Servizi Google personalizzati come Google Pay</translation> <translation id="5738816946784116349">Download su Chrome</translation> <translation id="5748802427693696783">Schede standard attivate</translation> <translation id="5749068826913805084">Chrome deve avere accesso allo spazio di archiviazione per poter scaricare file.</translation>
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 c2409915..4b253cd 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -601,7 +601,6 @@ עם זאת, אינך בלתי נראה. מעבר למצב גלישה בסתר אינו מסתיר את הגלישה שלך מהמעסיק, ספק שירות האינטרנט או האתרים שבהם אתה מבקר.</translation> <translation id="572328651809341494">כרטיסיות אחרונות</translation> <translation id="5726692708398506830">הגדל את כל מה שמופיע בדף</translation> -<translation id="5731185123186077399">שירותים מותאמים אישית של Google, כמו Google Pay</translation> <translation id="5738816946784116349">הורדות Chrome</translation> <translation id="5748802427693696783">הוחלף לכרטיסיות רגילות</translation> <translation id="5749068826913805084">לצורך הורדת קבצים, 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 17eae644..64e342d 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">たった今</translation> <translation id="2777555524387840389">残り <ph name="SECONDS" /> 秒</translation> <translation id="2781151931089541271">残り 1 秒</translation> +<translation id="2803478378562657435">保存したパスワードとパスワードのオプションを表示しています</translation> <translation id="2810645512293415242">簡易版ページを使用してデータの保存と読み込みを高速化します。</translation> <translation id="281504910091592009"><ph name="BEGIN_LINK" />Google アカウント<ph name="END_LINK" />での保存パスワードの表示と管理</translation> <translation id="2818669890320396765">お使いのどの端末でも同じブックマークを使用するには、ログインして同期を有効にします</translation> @@ -600,7 +601,6 @@ あらゆる場所に記録が一切残らないわけではありません。シークレット モードを使っても、雇用主、インターネット サービス プロバイダ、訪問先のウェブサイトに閲覧内容が知られる可能性はあります。</translation> <translation id="572328651809341494">最近使ったタブ</translation> <translation id="5726692708398506830">ページ上のすべての要素を拡大する</translation> -<translation id="5731185123186077399">カスタマイズされた Google サービス(Google Pay など)を利用できます</translation> <translation id="5738816946784116349">Chrome のダウンロード</translation> <translation id="5748802427693696783">標準のタブに切り替えました</translation> <translation id="5749068826913805084">Chrome でファイルをダウンロードするにはストレージへのアクセス権が必要です。</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">他の端末の Chrome で開いているタブがここに表示されます。</translation> <translation id="6575643671698722332">再設定できませんでした。デバイスがオンラインになっていることを確認してもう一度お試しください。</translation> <translation id="6583199322650523874">現在のページをブックマークする</translation> +<translation id="6584721918629302382">AR</translation> <translation id="6593061639179217415">PC 版サイト</translation> <translation id="6600954340915313787">Chrome にコピー済み</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">デバイス認証情報の削除を確認する</translation> <translation id="7481312909269577407">進む</translation> <translation id="7493994139787901920"><ph name="VERSION" />(<ph name="TIME_SINCE_UPDATE" />に更新)</translation> +<translation id="7494879913343971937">パスワードを表示</translation> <translation id="7494974237137038751">データ削減量</translation> <translation id="7498271377022651285">お待ちください…</translation> <translation id="7514365320538308">ダウンロード</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">ダウンロード エラー</translation> <translation id="8026334261755873520">閲覧履歴データを消去する</translation> <translation id="8035133914807600019">新しいフォルダ...</translation> +<translation id="8037411810184515274">VR</translation> <translation id="8037686209485537503">もっと見る</translation> <translation id="8037750541064988519">残り <ph name="DAYS" /> 日</translation> <translation id="804335162455518893">SD カードが見つかりません</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Chrome パスワード</translation> <translation id="8503813439785031346">ユーザー名</translation> <translation id="8504988642345501642">上にスクロールしたときに関連ページのクイックリンクを表示します。このとき、アクセスしたページの URL が Google に送信されます。</translation> +<translation id="8507520749471379845">使用可能なパスワード</translation> <translation id="8514477925623180633">Chrome に保存されたパスワードをエクスポートします</translation> <translation id="8514577642972634246">シークレット モードを開始</translation> <translation id="851751545965956758">サイトからデバイスへの接続をブロックする</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 28458fe..853214e 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">방금 전</translation> <translation id="2777555524387840389"><ph name="SECONDS" />초 남음</translation> <translation id="2781151931089541271">1초 남음</translation> +<translation id="2803478378562657435">저장된 비밀번호 및 비밀번호 옵션 표시 중</translation> <translation id="2810645512293415242">페이지가 간소화되어 데이터가 절약되고 로드 속도가 빨라졌습니다.</translation> <translation id="281504910091592009"><ph name="BEGIN_LINK" />Google 계정<ph name="END_LINK" />에서 저장된 비밀번호 보기 및 관리</translation> <translation id="2818669890320396765">어느 기기에서나 내 북마크를 사용하려면 로그인하고 동기화를 사용 설정하세요.</translation> @@ -600,7 +601,6 @@ 하지만 완전한 비밀이 보장되는 것은 아닙니다. 시크릿 모드로 탐색해도 회사, 인터넷 서비스 제공업체(ISP), 방문한 웹사이트에 저장된 흔적까지 없앨 수는 없습니다.</translation> <translation id="572328651809341494">최근 탭</translation> <translation id="5726692708398506830">페이지의 모든 항목 확대</translation> -<translation id="5731185123186077399">Google Pay와 같은 맞춤형 Google 서비스</translation> <translation id="5738816946784116349">Chrome 다운로드</translation> <translation id="5748802427693696783">일반 탭으로 전환됨</translation> <translation id="5749068826913805084">Chrome에서 파일을 다운로드하려면 저장소 액세스 권한이 있어야 합니다.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">다른 기기의 Chrome에서 연 탭이 여기에 표시됩니다.</translation> <translation id="6575643671698722332">재설정하지 못했습니다. 온라인 연결을 확인하고 다시 시도하세요.</translation> <translation id="6583199322650523874">현재 페이지 북마크</translation> +<translation id="6584721918629302382">AR</translation> <translation id="6593061639179217415">데스크톱 사이트</translation> <translation id="6600954340915313787">Chrome에 복사됨</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" />GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">기기 사용자 인증 정보 삭제 확인</translation> <translation id="7481312909269577407">앞으로</translation> <translation id="7493994139787901920"><ph name="VERSION" />(<ph name="TIME_SINCE_UPDATE" />에 업데이트됨)</translation> +<translation id="7494879913343971937">비밀번호 표시</translation> <translation id="7494974237137038751">절약한 데이터</translation> <translation id="7498271377022651285">잠시 기다려 주세요…</translation> <translation id="7514365320538308">다운로드</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">다운로드 실패</translation> <translation id="8026334261755873520">인터넷 사용 기록 삭제</translation> <translation id="8035133914807600019">새 폴더…</translation> +<translation id="8037411810184515274">VR</translation> <translation id="8037686209485537503">비슷한 항목 더보기</translation> <translation id="8037750541064988519"><ph name="DAYS" />일 남음</translation> <translation id="804335162455518893">SD 카드가 없음</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Chrome 비밀번호</translation> <translation id="8503813439785031346">사용자이름</translation> <translation id="8504988642345501642">위로 스크롤하면 관련 페이지의 빠른 링크가 표시됩니다. 방문한 페이지의 URL이 Google로 전송됩니다.</translation> +<translation id="8507520749471379845">사용할 수 있는 비밀번호</translation> <translation id="8514477925623180633">Chrome으로 저장한 비밀번호 내보내기</translation> <translation id="8514577642972634246">시크릿 모드로 들어가기</translation> <translation id="851751545965956758">사이트에서 기기에 연결하지 못하도록 차단</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 ff8c1fd2..d57dec04 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Naujausi skirtukai</translation> <translation id="5726692708398506830">Padidinti visą puslapio turinį</translation> -<translation id="5731185123186077399">Suasmenintos „Google“ paslaugos, pvz., „Google Pay“</translation> <translation id="5738816946784116349">„Chrome“ atsisiuntimai</translation> <translation id="5748802427693696783">Perjungta į įprastus skirtukus</translation> <translation id="5749068826913805084">„Chrome“ reikia prieigos prie saugyklos failams atsisiųsti.</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 8afa0e65..8ceebd0 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">tikko</translation> <translation id="2777555524387840389">Atlikušas <ph name="SECONDS" /> s</translation> <translation id="2781151931089541271">Atlikusi 1 s</translation> +<translation id="2803478378562657435">Tiek rādītas saglabātās paroles un paroļu iespējas</translation> <translation id="2810645512293415242">Lapa tika vienkāršota, lai samazinātu datu lietojumu un paātrinātu ielādi.</translation> <translation id="281504910091592009">Skatiet un pārvaldiet saglabātās paroles savā <ph name="BEGIN_LINK" />Google kontā<ph name="END_LINK" /></translation> <translation id="2818669890320396765">Lai grāmatzīmes būtu pieejamas visās jūsu ierīcēs, pierakstieties un ieslēdziet sinhronizāciju.</translation> @@ -600,7 +601,6 @@ Ņ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> <translation id="572328651809341494">Nesen atvērtas cilnes</translation> <translation id="5726692708398506830">Palielināt visu lapas saturu</translation> -<translation id="5731185123186077399">Google pakalpojumu, piemēram, Google Pay personalizēšana</translation> <translation id="5738816946784116349">Chrome lejupielādes</translation> <translation id="5748802427693696783">Notika pārslēgšanās uz standarta cilnēm</translation> <translation id="5749068826913805084">Chrome ir nepieciešama piekļuve krātuvei, lai varētu lejupielādēt failus.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Šeit būs redzamas cilnes, kuras esat atvēris pārlūkā Chrome citās ierīcēs.</translation> <translation id="6575643671698722332">Atiestatīšana neizdevās. Nodrošiniet, ka ierīce ir tiešsaistē, un mēģiniet vēlreiz.</translation> <translation id="6583199322650523874">Pievienot pašreizējo lapu grāmatzīmēm</translation> +<translation id="6584721918629302382">PR</translation> <translation id="6593061639179217415">Vietne datoriem</translation> <translation id="6600954340915313787">Nokopēta pārlūkā Chrome.</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Ierīces akreditācijas datu dzēšanas apstiprināšana</translation> <translation id="7481312909269577407">Pārsūtīt</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (atjaunināts: <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Rādīt paroles</translation> <translation id="7494974237137038751">Saglabātie dati</translation> <translation id="7498271377022651285">Lūdzu, uzgaidiet...</translation> <translation id="7514365320538308">Lejupielādēt</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">Lejupielāde neizdevās</translation> <translation id="8026334261755873520">Notīrīt pārlūkošanas datus</translation> <translation id="8035133914807600019">Jauna mape…</translation> +<translation id="8037411810184515274">VR</translation> <translation id="8037686209485537503">Līdzīgi produkti</translation> <translation id="8037750541064988519">Atlikušas <ph name="DAYS" /> dienas</translation> <translation id="804335162455518893">SD karte nav atrasta</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Chrome paroles</translation> <translation id="8503813439785031346">Lietotājvārds</translation> <translation id="8504988642345501642">Ritinot augšup, varat skatīt ātrās saites uz saistītajām lapām. Apmeklēto lapu vietrāži URL tiek nosūtīti Google serveriem.</translation> +<translation id="8507520749471379845">Ir pieejamas paroles</translation> <translation id="8514477925623180633">Eksportēt pārlūkā Chrome saglabātās paroles</translation> <translation id="8514577642972634246">Atvērt inkognito režīmā</translation> <translation id="851751545965956758">Neļaut vietnēm izveidot savienojumu ar ierīci</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 aeb2b5ea..e64f5fa4 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Recent gebruikte tabbladen</translation> <translation id="5726692708398506830">Alles op de pagina vergroten</translation> -<translation id="5731185123186077399">Gepersonaliseerde Google-services zoals Google Pay</translation> <translation id="5738816946784116349">Chrome-downloads</translation> <translation id="5748802427693696783">Overgeschakeld naar standaardtabbladen</translation> <translation id="5749068826913805084">Chrome heeft toegang tot de opslag nodig om deze bestanden te kunnen downloaden.</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 c9a4c6e..10ecec1 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">akkurat nå</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sekunder igjen</translation> <translation id="2781151931089541271">1 sekund igjen</translation> +<translation id="2803478378562657435">Viser lagrede passord og passordalternativer</translation> <translation id="2810645512293415242">Siden er forenklet for å spare data og laste den inn raskere.</translation> <translation id="281504910091592009">Se og administrer lagrede passord i <ph name="BEGIN_LINK" />Google-kontoen<ph name="END_LINK" /> din</translation> <translation id="2818669890320396765">For å få bokmerkene dine på alle enhetene dine, logg på og slå på synkronisering</translation> @@ -600,7 +601,6 @@ Du er imidlertid ikke usynlig. Inkognito-modusen skjuler ikke surfingen din for arbeidsgiveren, nettleverandøren eller nettstedene du besøker.</translation> <translation id="572328651809341494">Nylige faner</translation> <translation id="5726692708398506830">Gjør alt på siden større</translation> -<translation id="5731185123186077399">Google-tjenester med et personlig preg, som for eksempel Google Pay</translation> <translation id="5738816946784116349">Chrome-nedlastinger</translation> <translation id="5748802427693696783">Byttet til standardfaner</translation> <translation id="5749068826913805084">Chrome må ha lagringstilgang for å laste ned filer.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Faner du har åpnet i Chrome på de andre enhetene dine, vises her.</translation> <translation id="6575643671698722332">Tilbakestillingen var mislykket. Sjekk at enheten din har Internett-tilkobling og prøv på nytt.</translation> <translation id="6583199322650523874">Sett den aktive siden som bokmerke</translation> +<translation id="6584721918629302382">AR</translation> <translation id="6593061639179217415">Side for datamaskiner</translation> <translation id="6600954340915313787">Kopiert til Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Bekreft sletting av enhetslegitimasjon</translation> <translation id="7481312909269577407">Frem</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (oppdatert <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Vis passord</translation> <translation id="7494974237137038751">data spart</translation> <translation id="7498271377022651285">Vent litt</translation> <translation id="7514365320538308">Last ned</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">Nedlastingen mislyktes</translation> <translation id="8026334261755873520">Slett nettleserdata</translation> <translation id="8035133914807600019">Ny mappe</translation> +<translation id="8037411810184515274">VR</translation> <translation id="8037686209485537503">Mer av dette</translation> <translation id="8037750541064988519"><ph name="DAYS" /> dager igjen</translation> <translation id="804335162455518893">Finner ikke SD-kort</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Chrome-passord</translation> <translation id="8503813439785031346">Brukernavn</translation> <translation id="8504988642345501642">Når du ruller oppover, vises hurtiglinker til relaterte sider. Nettadressene til sidene du besøker, sendes til Google.</translation> +<translation id="8507520749471379845">Passord er tilgjengelige</translation> <translation id="8514477925623180633">Eksportér passord som er lagret med Chrome</translation> <translation id="8514577642972634246">Slå på inkognitomodus</translation> <translation id="851751545965956758">Blokkér at nettsteder kobler til enheter</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 7b5853b4..3ab7232c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Ostatnie karty</translation> <translation id="5726692708398506830">Powiększ całą zawartość strony</translation> -<translation id="5731185123186077399">Spersonalizowane usługi Google, takie jak Google Pay</translation> <translation id="5738816946784116349">Pobrania Chrome</translation> <translation id="5748802427693696783">Przełączono na karty standardowe</translation> <translation id="5749068826913805084">Chrome musi mieć dostęp do pamięci, by pobierać pliki.</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 929df336..c2ed03e 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
@@ -601,7 +601,6 @@ No entanto, o modo invisível NÃO oculta seus dados de navegação. Seu empregador, seu provedor de Internet e os websites visitados continuam tendo acesso a essas informações.</translation> <translation id="572328651809341494">Guias recentes</translation> <translation id="5726692708398506830">Aumentar tudo na página</translation> -<translation id="5731185123186077399">Serviços do Google personalizados, como o Google Pay</translation> <translation id="5738816946784116349">Downloads do Chrome</translation> <translation id="5748802427693696783">Alternada para guias padrão</translation> <translation id="5749068826913805084">O Chrome precisa de acesso de armazenamento para fazer o download de arquivos.</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 625277b..e6131d1 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
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">agora mesmo</translation> <translation id="2777555524387840389">Faltam <ph name="SECONDS" /> segundos</translation> <translation id="2781151931089541271">Falta 1 segundo</translation> +<translation id="2803478378562657435">A mostrar palavras-passe guardadas e opções de palavra-passe</translation> <translation id="2810645512293415242">Página simplificada para poupar dados e carregar mais rapidamente.</translation> <translation id="281504910091592009">Veja e faça a gestão das palavras-passe guardadas na sua <ph name="BEGIN_LINK" />Conta Google<ph name="END_LINK" />.</translation> <translation id="2818669890320396765">Para obter os seus marcadores em todos os dispositivos, inicie sessão e ative a sincronização.</translation> @@ -600,7 +601,6 @@ 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 Sites que visitar.</translation> <translation id="572328651809341494">Separadores recentes</translation> <translation id="5726692708398506830">Aumentar o tamanho de todos os itens na página</translation> -<translation id="5731185123186077399">Serviços Google personalizados, como o Google Pay.</translation> <translation id="5738816946784116349">Transferências do Chrome</translation> <translation id="5748802427693696783">Mudado para separadores padrão</translation> <translation id="5749068826913805084">O Chrome necessita de acesso ao armazenamento para transferir ficheiros.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Os separadores que abriu no Chrome nos seus outros dispositivos são apresentados aqui.</translation> <translation id="6575643671698722332">Falha ao repor. Verifique se o dispositivo está online e tente novamente.</translation> <translation id="6583199322650523874">Adicionar a página atual aos marcadores</translation> +<translation id="6584721918629302382">RA</translation> <translation id="6593061639179217415">Site para computador</translation> <translation id="6600954340915313787">Copiado para o Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Confirmar a eliminação das credenciais do dispositivo</translation> <translation id="7481312909269577407">Avançar</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (atualizado há <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Mostrar palavras-passe</translation> <translation id="7494974237137038751">dados guardados</translation> <translation id="7498271377022651285">Aguarde…</translation> <translation id="7514365320538308">Transferir</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">Falha ao transferir</translation> <translation id="8026334261755873520">Limpar dados de navegação</translation> <translation id="8035133914807600019">Nova pasta…</translation> +<translation id="8037411810184515274">RV</translation> <translation id="8037686209485537503">Mais deste género</translation> <translation id="8037750541064988519">Faltam <ph name="DAYS" /> dias</translation> <translation id="804335162455518893">Cartão SD não encontrado.</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Palavras-passe do Chrome</translation> <translation id="8503813439785031346">Nome de utilizador</translation> <translation id="8504988642345501642">Quando se desloca para cima, são apresentados links rápidos para páginas relacionadas. Os URLs das páginas que visita são enviados para a Google.</translation> +<translation id="8507520749471379845">Palavras-passe disponíveis</translation> <translation id="8514477925623180633">Exportar palavras-passe armazenadas com o Chrome</translation> <translation id="8514577642972634246">Entrar no modo de navegação anónima</translation> <translation id="851751545965956758">Impedir a ligação de sites a dispositivos</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 78e6b772..0face42 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">adineauri</translation> <translation id="2777555524387840389"><ph name="SECONDS" /> sec. rămase</translation> <translation id="2781151931089541271">1 sec. rămasă</translation> +<translation id="2803478378562657435">Se afișează parolele salvate și opțiunile pentru parole</translation> <translation id="2810645512293415242">Pagină simplificată pentru economie de date și încărcare mai rapidă.</translation> <translation id="281504910091592009">Vezi și gestionează parolele salvate în <ph name="BEGIN_LINK" />Contul Google<ph name="END_LINK" /></translation> <translation id="2818669890320396765">Pentru a accesa marcajele pe toate dispozitivele, conectează-te și activează sincronizarea</translation> @@ -600,7 +601,6 @@ 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> <translation id="572328651809341494">File recente</translation> <translation id="5726692708398506830">Mărește întregul conținut al paginii</translation> -<translation id="5731185123186077399">Servicii Google personalizate, cum ar fi Google Pay</translation> <translation id="5738816946784116349">Descărcări Chrome</translation> <translation id="5748802427693696783">Ai comutat la filele standard</translation> <translation id="5749068826913805084">Pentru a descărca fișiere, Chrome necesită acces la stocare.</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">Filele deschise în Chrome pe alte dispozitive vor apărea aici.</translation> <translation id="6575643671698722332">Nu s-a resetat. Asigură-te că ești online și încearcă din nou.</translation> <translation id="6583199322650523874">Marchează pagina curentă</translation> +<translation id="6584721918629302382">RA</translation> <translation id="6593061639179217415">Versiune site desktop</translation> <translation id="6600954340915313787">Copiat în Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">Confirmă ștergerea datelor de conectare de pe dispozitiv</translation> <translation id="7481312909269577407">Înainte</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (Actualizată la <ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">Afișează parolele</translation> <translation id="7494974237137038751">date economisite</translation> <translation id="7498271377022651285">Așteaptă...</translation> <translation id="7514365320538308">Descarcă</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">Descărcarea nu a reușit</translation> <translation id="8026334261755873520">Șterge datele de navigare</translation> <translation id="8035133914807600019">Dosar nou…</translation> +<translation id="8037411810184515274">RV</translation> <translation id="8037686209485537503">Mai multe similare</translation> <translation id="8037750541064988519"><ph name="DAYS" /> zile rămase</translation> <translation id="804335162455518893">Nu s-a găsit cardul SD</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Parole Chrome</translation> <translation id="8503813439785031346">Nume utilizator</translation> <translation id="8504988642345501642">Când derulezi în sus, afișezi linkuri rapide către pagini similare. Adresele URL ale paginilor pe care le accesezi sunt trimise la Google.</translation> +<translation id="8507520749471379845">Parole disponibile</translation> <translation id="8514477925623180633">Exportă parolele stocate în Chrome</translation> <translation id="8514577642972634246">Intră în modul incognito</translation> <translation id="851751545965956758">Blochează conectarea site-urilor la dispozitive</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 8db1fd12..840ff51f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -601,7 +601,6 @@ В режиме инкогнито ваши действия видны системному администратору и интернет-провайдеру, а также доступны веб-сайтам, которые вы посещаете.</translation> <translation id="572328651809341494">Недавние вкладки</translation> <translation id="5726692708398506830">Увеличить масштаб страницы</translation> -<translation id="5731185123186077399">Пользуйтесь персонализированными сервисами Google, например Google Pay.</translation> <translation id="5738816946784116349">Скачанные файлы в Chrome</translation> <translation id="5748802427693696783">Переключено на обычные вкладки</translation> <translation id="5749068826913805084">Для скачивания файлов браузеру Chrome требуется доступ к хранилищу.</translation>
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 fe88408..9d5dc53f 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Nedávne karty</translation> <translation id="5726692708398506830">Zväčšenie obsahu na stránke</translation> -<translation id="5731185123186077399">Prispôsobené služby Googlu, ako Google Pay</translation> <translation id="5738816946784116349">Stiahnutia v Chrome</translation> <translation id="5748802427693696783">Prepnuté na štandardné karty</translation> <translation id="5749068826913805084">Chrome potrebuje na sťahovanie súborov prístup k úložisku.</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 cbfc56f1..b4194f9 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -600,7 +600,6 @@ 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> <translation id="572328651809341494">Nedavni zavihki</translation> <translation id="5726692708398506830">Povečanje vsebine strani</translation> -<translation id="5731185123186077399">Prilagojene Googlove storitve, kot je Google Pay</translation> <translation id="5738816946784116349">Prenosi v Chromu</translation> <translation id="5748802427693696783">Preklopljeno na standardne zavihke</translation> <translation id="5749068826913805084">Chrome potrebuje za prenos datotek dostop do shrambe.</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 bc03dfb..4d0f9c5 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -601,7 +601,6 @@ Међутим, нисте невидљиви. Прелазак у режим без архивирања не сакрива оно што прегледате од послодавца, добављача интернет услуге или веб-сајтова које посећујете.</translation> <translation id="572328651809341494">Недавно коришћене картице</translation> <translation id="5726692708398506830">Увећавање целокупног приказа странице</translation> -<translation id="5731185123186077399">Персонализоване Google услуге као што је Google Pay</translation> <translation id="5738816946784116349">Chrome преузимања</translation> <translation id="5748802427693696783">Пребацили сте на стандардне картице</translation> <translation id="5749068826913805084">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 af253d9e..1c2a720 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -601,7 +601,6 @@ Du är dock inte osynlig. Trots inkognitoläget kan din arbetsgivare, din internetleverantör eller de webbplatser du besöker se din aktivitet.</translation> <translation id="572328651809341494">Senaste flikarna</translation> <translation id="5726692708398506830">Gör allt på sidan större</translation> -<translation id="5731185123186077399">Anpassade tjänster från Google, som Google Pay</translation> <translation id="5738816946784116349">Nedladdningar i Chrome</translation> <translation id="5748802427693696783">Bytte till standardflikar</translation> <translation id="5749068826913805084">Chrome måste ha åtkomst till lagringsutrymmet om det ska gå att ladda ned filer.</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 e807cf9a..4e8b6edb 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -601,7 +601,6 @@ Hata hivyo, huonekani. Kuvinjari katika hali fiche hakufichi kuvinjari kwako kusionekane kwa mwajiri, mtoa huduma wako wa intaneti, au tovuti unazotembelea.</translation> <translation id="572328651809341494">Vichupo vya hivi majuzi</translation> <translation id="5726692708398506830">Fanya kila kitu kwenye ukurasa kiwe kikubwa zaidi</translation> -<translation id="5731185123186077399">Huduma za Google zilizowekewa mapendeleo kama vile Google Pay</translation> <translation id="5738816946784116349">Vipakuliwa vya Chrome</translation> <translation id="5748802427693696783">Imebadilisha kwenda vichupo muundo-msingi</translation> <translation id="5749068826913805084">Chrome inahitaji idhini ya kufikia hifadhi ili ipakue faili.</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 2eec72e1..3274aff0 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -601,7 +601,6 @@ อย่างไรก็ตาม คนอื่นจะยังสามารถมองเห็นคุณ การเข้าสู่โหมดไม่ระบุตัวตนไม่ได้เป็นการซ่อนการท่องเว็บจากนายจ้าง ผู้ให้บริการอินเทอร์เน็ต หรือเว็บไซต์ที่คุณเข้าชม</translation> <translation id="572328651809341494">แท็บล่าสุด</translation> <translation id="5726692708398506830">ขยายรายละเอียดทั้งหมดบนหน้า</translation> -<translation id="5731185123186077399">บริการของ Google อย่างเช่น Google Pay ที่ปรับเปลี่ยนในแบบของคุณ</translation> <translation id="5738816946784116349">การดาวน์โหลดใน Chrome</translation> <translation id="5748802427693696783">สลับเป็นแท็บมาตรฐานแล้ว</translation> <translation id="5749068826913805084">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 06aa984..1ae0771 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Son sekmeler</translation> <translation id="5726692708398506830">Sayfadaki her şeyi büyütür</translation> -<translation id="5731185123186077399">Google Pay gibi kişiselleştirilmiş Google hizmetlerinden yararlanın</translation> <translation id="5738816946784116349">Chrome İndirmeleri</translation> <translation id="5748802427693696783">Standart sekmelere geçildi</translation> <translation id="5749068826913805084">Dosya indirmek için Chrome'un depolama alanına erişmesi gerekiyor.</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 9edeb88..149f9bb 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -601,7 +601,6 @@ Проте ви не можете сховати все. Навіть у режимі анонімного перегляду ваш роботодавець, постачальник послуг Інтернету чи адміністратори веб-сайтів, які ви відвідуєте, можуть бачити, що ви переглядаєте.</translation> <translation id="572328651809341494">Останні вкладки</translation> <translation id="5726692708398506830">Збільшити всі елементи на сторінці</translation> -<translation id="5731185123186077399">Персоналізовані сервіси Google, як-от Google Pay</translation> <translation id="5738816946784116349">Завантаження в Chrome</translation> <translation id="5748802427693696783">Ви перейшли на стандартні вкладки</translation> <translation id="5749068826913805084">Щоб завантажувати файли, 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 0f5b8ca..c36165c 100644 --- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -601,7 +601,6 @@ 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> <translation id="572328651809341494">Các tab gần đây</translation> <translation id="5726692708398506830">Phóng to mọi nội dung trên trang</translation> -<translation id="5731185123186077399">Các dịch vụ được cá nhân hóa của Google, chẳng hạn như Google Pay</translation> <translation id="5738816946784116349">Lượt tải xuống Chrome</translation> <translation id="5748802427693696783">Đã chuyển sang tab chuẩn</translation> <translation id="5749068826913805084">Chrome cần quyền truy cập bộ nhớ để tải xuống tệp.</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 4a51290..3c14a6b 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
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">刚刚</translation> <translation id="2777555524387840389">还剩 <ph name="SECONDS" /> 秒</translation> <translation id="2781151931089541271">还剩 1 秒</translation> +<translation id="2803478378562657435">正在显示已保存的密码和密码选项</translation> <translation id="2810645512293415242">简化版网页不仅可节省数据流量,还可更快速地进行加载。</translation> <translation id="281504910091592009">查看和管理您的 <ph name="BEGIN_LINK" />Google 帐号<ph name="END_LINK" />中保存的密码</translation> <translation id="2818669890320396765">要将您的书签同步到您的所有设备上,请登录您的帐号并开启同步功能</translation> @@ -600,7 +601,6 @@ 但是,这并不意味着您能完全隐身。即使您进入隐身模式,您的雇主、互联网服务提供商和您访问的网站仍然能看到您的浏览活动。</translation> <translation id="572328651809341494">最近打开的标签页</translation> <translation id="5726692708398506830">放大网页上的所有内容</translation> -<translation id="5731185123186077399">个性化的 Google 服务(例如 Google Pay)</translation> <translation id="5738816946784116349">Chrome 下载内容</translation> <translation id="5748802427693696783">已切换到标准标签页</translation> <translation id="5749068826913805084">Chrome 需要具备存储空间使用权限,才能下载文件。</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">您在其他设备上的 Chrome 中打开的标签页将列在此处。</translation> <translation id="6575643671698722332">重置失败。请确保您的设备已联网,然后重试。</translation> <translation id="6583199322650523874">为当前网页添加书签</translation> +<translation id="6584721918629302382">AR</translation> <translation id="6593061639179217415">桌面版网站</translation> <translation id="6600954340915313787">已复制到 Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">确认删除设备凭据</translation> <translation id="7481312909269577407">前进</translation> <translation id="7493994139787901920"><ph name="VERSION" />(上次更新时间:<ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">显示密码</translation> <translation id="7494974237137038751">已节省的流量</translation> <translation id="7498271377022651285">请稍候…</translation> <translation id="7514365320538308">下载</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">下载失败</translation> <translation id="8026334261755873520">清除浏览数据</translation> <translation id="8035133914807600019">新建文件夹…</translation> +<translation id="8037411810184515274">VR</translation> <translation id="8037686209485537503">更多类似内容</translation> <translation id="8037750541064988519">还剩 <ph name="DAYS" /> 天</translation> <translation id="804335162455518893">找不到 SD 卡</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Chrome 密码</translation> <translation id="8503813439785031346">用户名</translation> <translation id="8504988642345501642">当您向上滚动屏幕时,系统会显示指向相关页面的快速链接。您所访问的网页的网址会被发送给 Google。</translation> +<translation id="8507520749471379845">有可用密码</translation> <translation id="8514477925623180633">导出存储在 Chrome 中的密码</translation> <translation id="8514577642972634246">进入隐身模式</translation> <translation id="851751545965956758">禁止网站连接到设备</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 74a0d34..4ab48618 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
@@ -238,6 +238,7 @@ <translation id="2762000892062317888">剛剛</translation> <translation id="2777555524387840389">還剩 <ph name="SECONDS" /> 秒</translation> <translation id="2781151931089541271">還剩 1 秒</translation> +<translation id="2803478378562657435">正在顯示已儲存的密碼和密碼選項</translation> <translation id="2810645512293415242">網頁內容經過簡化,不僅節省數據用量,更加快載入速度。</translation> <translation id="281504910091592009">你可以查看及管理 <ph name="BEGIN_LINK" />Google 帳戶<ph name="END_LINK" />中儲存的密碼</translation> <translation id="2818669890320396765">如要將書籤同步到所有裝置,請登入並開啟同步處理功能</translation> @@ -600,7 +601,6 @@ 不過,這並不代表您完全沒有瀏覽記錄。使用無痕模式時,您的雇主和網際網路服務供應商仍然可以追蹤您的瀏覽記錄,您所造訪的網站也可記錄您的瀏覽活動。</translation> <translation id="572328651809341494">最近開啟的分頁</translation> <translation id="5726692708398506830">放大網頁上的所有內容</translation> -<translation id="5731185123186077399">個人化的 Google 服務,例如 Google Pay</translation> <translation id="5738816946784116349">Chrome 下載內容</translation> <translation id="5748802427693696783">已切換成標準分頁</translation> <translation id="5749068826913805084">Chrome 必須取得儲存空間的存取權才能下載檔案。</translation> @@ -711,6 +711,7 @@ <translation id="6573431926118603307">您在其他裝置上透過 Chrome 開啟的分頁會顯示在這裡。</translation> <translation id="6575643671698722332">重設失敗。請確認裝置已連上網路,然後再試一次。</translation> <translation id="6583199322650523874">將目前的網頁加入書籤</translation> +<translation id="6584721918629302382">AR</translation> <translation id="6593061639179217415">電腦版網站</translation> <translation id="6600954340915313787">已複製到 Chrome</translation> <translation id="6608650720463149374"><ph name="GIGABYTES" /> GB</translation> @@ -827,6 +828,7 @@ <translation id="748127970106343339">確認刪除裝置憑證</translation> <translation id="7481312909269577407">往前</translation> <translation id="7493994139787901920"><ph name="VERSION" /> (上次更新時間:<ph name="TIME_SINCE_UPDATE" />)</translation> +<translation id="7494879913343971937">顯示密碼</translation> <translation id="7494974237137038751">節省的流量</translation> <translation id="7498271377022651285">請稍候…</translation> <translation id="7514365320538308">下載</translation> @@ -894,6 +896,7 @@ <translation id="802154636333426148">下載失敗</translation> <translation id="8026334261755873520">清除瀏覽資料</translation> <translation id="8035133914807600019">新資料夾…</translation> +<translation id="8037411810184515274">VR</translation> <translation id="8037686209485537503">更多類似內容</translation> <translation id="8037750541064988519">還剩 <ph name="DAYS" /> 天</translation> <translation id="804335162455518893">找不到 SD 卡</translation> @@ -950,6 +953,7 @@ <translation id="8503559462189395349">Chrome 密碼</translation> <translation id="8503813439785031346">使用者名稱</translation> <translation id="8504988642345501642">當你向上捲動時顯示相關網頁的快速連結。系統會將你所造訪網頁的網址傳送給 Google。</translation> +<translation id="8507520749471379845">有可用的密碼</translation> <translation id="8514477925623180633">將使用 Chrome 儲存的密碼匯出</translation> <translation id="8514577642972634246">進入無痕模式</translation> <translation id="851751545965956758">禁止網站連線至裝置</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java index eea4178..c8e4fee8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/TestVrShellDelegate.java
@@ -94,12 +94,18 @@ getVrShell().performControllerActionForTesting(elementName, actionType, position); } - public void setUiExpectingActivityForTesting(int quiescenceTimeoutMs, Runnable resultCallback) { - getVrShell().setUiExpectingActivityForTesting(quiescenceTimeoutMs, resultCallback); + public void registerUiOperationCallbackForTesting( + int actionType, Runnable resultCallback, int quiescenceTimeoutMs) { + getVrShell().registerUiOperationCallbackForTesting( + actionType, resultCallback, quiescenceTimeoutMs); } - public int getLastUiActivityResultForTesting() { - return getVrShell().getLastUiActivityResultForTesting(); + public void saveNextFrameBufferToDiskForTesting(String filepathBase) { + getVrShell().saveNextFrameBufferToDiskForTesting(filepathBase); + } + + public int getLastUiOperationResultForTesting(int actionType) { + return getVrShell().getLastUiOperationResultForTesting(actionType); } @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java index b6fba03..1289369a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserDialogTest.java
@@ -13,7 +13,6 @@ import android.graphics.PointF; import android.support.test.InstrumentationRegistry; import android.support.test.filters.LargeTest; -import android.support.test.uiautomator.UiDevice; import org.junit.After; import org.junit.Assert; @@ -47,6 +46,10 @@ public class VrBrowserDialogTest { // A long enough sleep after entering VR to ensure that the VR entry animations are complete. private static final int VR_ENTRY_SLEEP_MS = 1000; + // We need to make sure the port is constant, otherwise the URL changes between test runs, which + // is really bad for image diff tests. There's nothing special about this port other than that + // it shouldn't be in use by anything. + private static final int SERVER_PORT = 39558; // A long enough sleep after triggering/interacting with a dialog to ensure that the interaction // has propagated through the render pipeline, i.e. the result of the interaction will actually // be visible on the screen. @@ -83,14 +86,8 @@ // Ensure that any UI changes that have been rendered and submitted have actually propogated // to the screen. NativeUiUtils.waitNumFrames(2); - // TODO(bsheedy): Make this work on Android P by drawing the view hierarchy to a bitmap. - File screenshotFile = new File(sBaseDirectory, filename + ".png"); - Assert.assertFalse("Failed to delete existing screenshot", - screenshotFile.exists() && !screenshotFile.delete()); - - final UiDevice uiDevice = - UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); - Assert.assertTrue("Failed to take screenshot", uiDevice.takeScreenshot(screenshotFile)); + File baseFilename = new File(sBaseDirectory, filename); + NativeUiUtils.dumpNextFramesFrameBuffers(baseFilename.getPath()); } private void navigateAndDisplayPermissionPrompt(String page, String promptCommand) @@ -98,7 +95,8 @@ // Trying to grant permissions on file:// URLs ends up hitting DCHECKS, so load from a local // server instead. if (mServer == null) { - mServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); + mServer = EmbeddedTestServer.createAndStartServerWithPort( + InstrumentationRegistry.getContext(), SERVER_PORT); } mVrBrowserTestFramework.loadUrlAndAwaitInitialization( mServer.getURL(VrBrowserTestFramework.getEmbeddedServerPathForHtmlTestFile(page)), @@ -106,6 +104,7 @@ // Display the given permission prompt. VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS); + NativeUiUtils.enableMockedInput(); mVrBrowserTestFramework.runJavaScriptOrFail(promptCommand, POLL_TIMEOUT_LONG_MS); VrBrowserTransitionUtils.waitForNativeUiPrompt(POLL_TIMEOUT_LONG_MS); @@ -121,6 +120,7 @@ // Display the JavaScript dialog. VrBrowserTransitionUtils.forceEnterVrBrowserOrFail(POLL_TIMEOUT_LONG_MS); + NativeUiUtils.enableMockedInput(); // We can't use runJavaScriptOrFail here because JavaScript execution is blocked while a // JS dialog is visible, so runJavaScriptOrFail will always time out. JavaScriptUtils.executeJavaScript( @@ -308,7 +308,7 @@ // element, meaning we can't specify it as a click target for the Chrome-side controller. // We also can't use the MockBrowserKeyboardInterface like we do for web input testing, as // that does not seem to work with the omnibox. - NativeUiUtils.revertToRealController(); + NativeUiUtils.revertToRealInput(); // Point at the keyboard and click an arbitrary key EmulatedVrController controller = new EmulatedVrController(mVrTestRule.getActivity()); controller.recenterView();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserTransitionTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserTransitionTest.java index 439042d..b91aa2ce 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserTransitionTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/VrBrowserTransitionTest.java
@@ -389,7 +389,7 @@ // Enable the mock controller even though we don't use it, because the real controller will // never allow the scene to reach quiescense. - NativeUiUtils.enableMockedController(); + NativeUiUtils.enableMockedInput(); NativeUiUtils.performActionAndWaitForUiQuiescence(() -> { ThreadUtils.runOnUiThreadBlocking(() -> { Intent preferencesIntent = PreferencesLauncher.createIntentForSettingsPage( @@ -490,7 +490,7 @@ (IncognitoNewTabPage) mTestRule.getActivity().getActivityTab().getNativePage(); // Enable the mock controller even though we don't use it, because the real controller will // never allow the scene to reach quiescense. - NativeUiUtils.enableMockedController(); + NativeUiUtils.enableMockedInput(); NativeUiUtils.performActionAndWaitForUiQuiescence(() -> { ThreadUtils.runOnUiThreadBlocking( () -> { ntp.getView().findViewById(R.id.learn_more).performClick(); });
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/NativeUiUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/NativeUiUtils.java index c038bbb..000c8e32 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/NativeUiUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/util/NativeUiUtils.java
@@ -14,6 +14,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.vr.TestVrShellDelegate; +import org.chromium.chrome.browser.vr.UiTestOperationType; import org.chromium.chrome.browser.vr.UserFriendlyElementName; import org.chromium.chrome.browser.vr.VrControllerTestAction; import org.chromium.chrome.browser.vr.VrDialog; @@ -21,6 +22,7 @@ import org.chromium.chrome.browser.vr.VrUiTestActivityResult; import org.chromium.chrome.browser.vr.VrViewContainer; +import java.io.File; import java.util.concurrent.CountDownLatch; /** @@ -32,9 +34,13 @@ // with an element. private static final int DEFAULT_UI_QUIESCENCE_TIMEOUT_MS = 1000; - public static void enableMockedController() { + /** + * Enables the use of both the mock head pose (locked forward) and Chrome-side mocked controller + * without performing any specific actions. + */ + public static void enableMockedInput() { TestVrShellDelegate.getInstance().performControllerActionForTesting( - 0 /* elementName, unused */, VrControllerTestAction.ENABLE_MOCKED_CONTROLLER, + 0 /* elementName, unused */, VrControllerTestAction.ENABLE_MOCKED_INPUT, new PointF() /* position, unused */); } @@ -110,24 +116,16 @@ } /** - * Sets the native code to start using the real controller data again instead of fake testing - * data. + * Sets the native code to start using the real controller and head pose data again instead of + * fake testing data. */ - public static void revertToRealController() { + public static void revertToRealInput() { TestVrShellDelegate.getInstance().performControllerActionForTesting( - 0 /* elementName, unused */, VrControllerTestAction.REVERT_TO_REAL_CONTROLLER, + 0 /* elementName, unused */, VrControllerTestAction.REVERT_TO_REAL_INPUT, new PointF() /* position, unused */); } /** - * Sets the native code to start using the real controller data again and waits for the UI to - * update as a result. - */ - public static void revertToRealControllerAndWaitForUiQuiescence() throws InterruptedException { - performActionAndWaitForUiQuiescence(() -> { revertToRealController(); }); - } - - /** * Runs the given Runnable and waits until the native UI reports that it is quiescent. * * @param action A Runnable containing the action to perform. @@ -137,16 +135,17 @@ final TestVrShellDelegate instance = TestVrShellDelegate.getInstance(); final CountDownLatch resultLatch = new CountDownLatch(1); // Run on the UI thread to prevent issues with registering a new callback before - // reportUiActivityResultForTesting has finished. + // ReportUiOperationResultForTesting has finished. ThreadUtils.runOnUiThreadBlocking(() -> { - instance.setUiExpectingActivityForTesting( - DEFAULT_UI_QUIESCENCE_TIMEOUT_MS, () -> { resultLatch.countDown(); }); + instance.registerUiOperationCallbackForTesting(UiTestOperationType.UI_ACTIVITY_RESULT, + () -> { resultLatch.countDown(); }, DEFAULT_UI_QUIESCENCE_TIMEOUT_MS); }); action.run(); // Wait for any outstanding animations to finish. resultLatch.await(); - int uiResult = instance.getLastUiActivityResultForTesting(); + int uiResult = + instance.getLastUiOperationResultForTesting(UiTestOperationType.UI_ACTIVITY_RESULT); Assert.assertEquals("UI reported non-quiescent result '" + vrUiTestActivityResultToString(uiResult) + "'", VrUiTestActivityResult.QUIESCENT, uiResult); @@ -174,6 +173,35 @@ } /** + * Tells the native UI to dump the next frame's frame buffers to disk and waits for it to + * signal that the dump is complete. + * + * @param filepathBase The filepath to use as a base for image dumps. Will have a suffix and + * file extension automatically appended. + */ + public static void dumpNextFramesFrameBuffers(String filepathBase) throws InterruptedException { + // Clear out any existing images with the names of the files that may be created. + for (String suffix : + new String[] {"_WebXrOverlay", "_WebXrContent", "_BrowserUi", "_BrowserContent"}) { + File dumpFile = new File(filepathBase, suffix + ".png"); + Assert.assertFalse("Failed to delete existing screenshot", + dumpFile.exists() && !dumpFile.delete()); + } + + final TestVrShellDelegate instance = TestVrShellDelegate.getInstance(); + final CountDownLatch resultLatch = new CountDownLatch(1); + + // Run on the UI thread to prevent issues with registering a new callback before + // ReportUiOperationResultForTesting has finished. + ThreadUtils.runOnUiThreadBlocking(() -> { + instance.registerUiOperationCallbackForTesting(UiTestOperationType.FRAME_BUFFER_DUMPED, + () -> { resultLatch.countDown(); }, 0 /* unused */); + }); + instance.saveNextFrameBufferToDiskForTesting(filepathBase); + resultLatch.await(); + } + + /** * Returns the Container of 2D UI that is shown in VR. */ public static ViewGroup getVrViewContainer() {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedContentStorageTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedContentStorageTest.java index 08e9535..2489cacd 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedContentStorageTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedContentStorageTest.java
@@ -7,7 +7,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -82,11 +81,9 @@ @Captor private ArgumentCaptor<Callback<String[]>> mArrayOfStringSuccessCallbackArgument; @Captor - private ArgumentCaptor<Callback<String[]>> mArrayOfStringFailureCallbackArgument; - @Captor private ArgumentCaptor < Callback < Map<String, byte[]>>> mMapSuccessCallbackArgument; @Captor - private ArgumentCaptor < Callback < Map<String, byte[]>>> mMapFailureCallbackArgument; + private ArgumentCaptor<Callback<Void>> mFailureCallbackArgument; private FeedContentStorage mContentStorage; @@ -100,11 +97,11 @@ }; } - private Answer<Void> createMapFailureAnswer(Map<String, byte[]> map) { + private Answer<Void> createFailureAnswer() { return new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { - mMapFailureCallbackArgument.getValue().onResult(map); + mFailureCallbackArgument.getValue().onResult(null); return null; } }; @@ -120,16 +117,6 @@ }; } - private Answer<Void> createArrayOfStringFailureAnswer(String[] arrayOfString) { - return new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) { - mArrayOfStringFailureCallbackArgument.getValue().onResult(arrayOfString); - return null; - } - }; - } - private Answer<Void> createBooleanAnswer(Boolean bool) { return new Answer<Void>() { @Override @@ -169,8 +156,6 @@ @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - doNothing().when(mBridge).init(eq(mProfile)); - mBridge.init(mProfile); mContentStorage = new FeedContentStorage(mBridge); } @@ -181,13 +166,13 @@ answerMap.put(CONTENT_KEY1, CONTENT_DATA1); Answer<Void> answer = createMapSuccessAnswer(answerMap); doAnswer(answer).when(mBridge).loadContent(mStringListArgument.capture(), - mMapSuccessCallbackArgument.capture(), mMapFailureCallbackArgument.capture()); + mMapSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); List<String> keys = Arrays.asList(CONTENT_KEY1, CONTENT_KEY2); mContentStorage.get(keys, mMapConsumer); verify(mBridge, times(1)) .loadContent(eq(keys), mMapSuccessCallbackArgument.capture(), - mMapFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); verify(mMapConsumer, times(1)).accept(mMapCaptor.capture()); verifyMapResult(answerMap, true, mMapCaptor.getValue()); } @@ -196,15 +181,15 @@ @SmallTest public void getFailureTest() { Map<String, byte[]> answerMap = new HashMap<>(); - Answer<Void> answer = createMapFailureAnswer(answerMap); + Answer<Void> answer = createFailureAnswer(); doAnswer(answer).when(mBridge).loadContent(mStringListArgument.capture(), - mMapSuccessCallbackArgument.capture(), mMapFailureCallbackArgument.capture()); + mMapSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); List<String> keys = Arrays.asList(CONTENT_KEY1, CONTENT_KEY2); mContentStorage.get(keys, mMapConsumer); verify(mBridge, times(1)) .loadContent(eq(keys), mMapSuccessCallbackArgument.capture(), - mMapFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); verify(mMapConsumer, times(1)).accept(mMapCaptor.capture()); verifyMapResult(answerMap, false, mMapCaptor.getValue()); } @@ -218,12 +203,12 @@ answerMap.put(CONTENT_KEY3, CONTENT_DATA3); Answer<Void> answer = createMapSuccessAnswer(answerMap); doAnswer(answer).when(mBridge).loadContentByPrefix(mStringArgument.capture(), - mMapSuccessCallbackArgument.capture(), mMapFailureCallbackArgument.capture()); + mMapSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); mContentStorage.getAll(CONTENT_KEY1, mMapConsumer); verify(mBridge, times(1)) .loadContentByPrefix(eq(CONTENT_KEY1), mMapSuccessCallbackArgument.capture(), - mMapFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); verify(mMapConsumer, times(1)).accept(mMapCaptor.capture()); verifyMapResult(answerMap, true, mMapCaptor.getValue()); } @@ -235,12 +220,12 @@ Answer<Void> answer = createArrayOfStringSuccessAnswer(answerStrings); doAnswer(answer).when(mBridge).loadAllContentKeys( mArrayOfStringSuccessCallbackArgument.capture(), - mArrayOfStringFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); mContentStorage.getAllKeys(mListConsumer); verify(mBridge, times(1)) .loadAllContentKeys(mArrayOfStringSuccessCallbackArgument.capture(), - mArrayOfStringFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); verify(mListConsumer, times(1)).accept(mStringListCaptor.capture()); verifyArrayOfStringResult(answerStrings, true, mStringListCaptor.getValue()); } @@ -249,15 +234,15 @@ @SmallTest public void getAllKeysFailureTest() { String[] answerStrings = {CONTENT_KEY1, CONTENT_KEY2, CONTENT_KEY3}; - Answer<Void> answer = createArrayOfStringFailureAnswer(answerStrings); + Answer<Void> answer = createFailureAnswer(); doAnswer(answer).when(mBridge).loadAllContentKeys( mArrayOfStringSuccessCallbackArgument.capture(), - mArrayOfStringFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); mContentStorage.getAllKeys(mListConsumer); verify(mBridge, times(1)) .loadAllContentKeys(mArrayOfStringSuccessCallbackArgument.capture(), - mArrayOfStringFailureCallbackArgument.capture()); + mFailureCallbackArgument.capture()); verify(mListConsumer, times(1)).accept(mStringListCaptor.capture()); verifyArrayOfStringResult(answerStrings, false, mStringListCaptor.getValue()); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java index 6cc85ba..345c1fd 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java
@@ -5,9 +5,9 @@ package org.chromium.chrome.browser.feed; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -34,6 +34,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.chrome.browser.profiles.Profile; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -73,50 +74,62 @@ @Captor private ArgumentCaptor<String> mStringArgument; @Captor - private ArgumentCaptor<Callback<Boolean>> mBooleanCallbackArgument; + private ArgumentCaptor<Callback<Boolean>> mBooleanSuccessCallbackArgument; @Captor - private ArgumentCaptor < Callback < List<String>>> mListOfStringCallbackArgument; + private ArgumentCaptor < Callback < List<String>>> mListOfStringSuccessCallbackArgument; @Captor - private ArgumentCaptor<Callback<String[]>> mStringArrayCallbackArgument; + private ArgumentCaptor<Callback<String[]>> mStringArraySuccessCallbackArgument; + @Captor + private ArgumentCaptor<Callback<Void>> mFailureCallbackArgument; @Captor private ArgumentCaptor<JournalMutation> mJournalMutationArgument; private FeedJournalStorage mJournalStorage; - private Answer<Void> createStringArrayAnswer(String[] stringArray) { + private Answer<Void> createStringArraySuccessAnswer(String[] stringArray) { return new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { - mStringArrayCallbackArgument.getValue().onResult(stringArray); + mStringArraySuccessCallbackArgument.getValue().onResult(stringArray); return null; } }; } - private Answer<Void> createStringListAnswer(List<String> stringList) { + private Answer<Void> createFailureAnswer() { return new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { - mListOfStringCallbackArgument.getValue().onResult(stringList); + mFailureCallbackArgument.getValue().onResult(null); return null; } }; } - private Answer<Void> createBooleanAnswer(Boolean bool) { + private Answer<Void> createStringListSuccessAnswer(List<String> stringList) { return new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) { - mBooleanCallbackArgument.getValue().onResult(bool); + mListOfStringSuccessCallbackArgument.getValue().onResult(stringList); + return null; + } + }; + } + + private Answer<Void> createBooleanSuccessAnswer(Boolean bool) { + return new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) { + mBooleanSuccessCallbackArgument.getValue().onResult(bool); return null; } }; } private void verifyListOfBytesResult( - List<String> expectedList, boolean expectedBoolean, Result<List<byte[]>> actualResult) { - assertEquals(expectedBoolean, actualResult.isSuccessful()); - if (!expectedBoolean) return; + List<String> expectedList, boolean expectedSuccess, Result<List<byte[]>> actualResult) { + assertEquals(expectedSuccess, actualResult.isSuccessful()); + if (!expectedSuccess) return; List<byte[]> actualList = actualResult.getValue(); assertEquals(expectedList.size(), actualList.size()); @@ -126,15 +139,15 @@ } private void verifyListOfBytesResult( - String[] expectedString, boolean expectedBoolean, Result<List<byte[]>> actualResult) { + String[] expectedString, boolean expectedSuccess, Result<List<byte[]>> actualResult) { List<String> expectedList = Arrays.asList(expectedString); - verifyListOfBytesResult(expectedList, expectedBoolean, actualResult); + verifyListOfBytesResult(expectedList, expectedSuccess, actualResult); } private void verifyListOfStringResult( - List<String> expectedList, boolean expectedBoolean, Result<List<String>> actualResult) { - assertEquals(expectedBoolean, actualResult.isSuccessful()); - if (!expectedBoolean) return; + List<String> expectedList, boolean expectedSuccess, Result<List<String>> actualResult) { + assertEquals(expectedSuccess, actualResult.isSuccessful()); + if (!expectedSuccess) return; List<String> actualList = actualResult.getValue(); assertEquals(expectedList.size(), actualList.size()); @@ -146,8 +159,6 @@ @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - doNothing().when(mBridge).init(eq(mProfile)); - mBridge.init(mProfile); mJournalStorage = new FeedJournalStorage(mBridge); } @@ -155,52 +166,104 @@ @SmallTest public void readTest() { String[] answerStrings = {JOURNAL_DATA1, JOURNAL_DATA2, JOURNAL_DATA3}; - Answer<Void> answer = createStringArrayAnswer(answerStrings); - doAnswer(answer).when(mBridge).loadJournal( - mStringArgument.capture(), mStringArrayCallbackArgument.capture()); + Answer<Void> answer = createStringArraySuccessAnswer(answerStrings); + doAnswer(answer).when(mBridge).loadJournal(mStringArgument.capture(), + mStringArraySuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); mJournalStorage.read(JOURNAL_KEY1, mListOfByteArrayConsumer); verify(mBridge, times(1)) - .loadJournal(eq(JOURNAL_KEY1), mStringArrayCallbackArgument.capture()); + .loadJournal(eq(JOURNAL_KEY1), mStringArraySuccessCallbackArgument.capture(), + mFailureCallbackArgument.capture()); verify(mListOfByteArrayConsumer, times(1)).accept(mListOfByteArrayCaptor.capture()); verifyListOfBytesResult(answerStrings, true, mListOfByteArrayCaptor.getValue()); } @Test @SmallTest + public void readFailureTest() { + String[] answerStrings = {}; + Answer<Void> answer = createFailureAnswer(); + doAnswer(answer).when(mBridge).loadJournal(mStringArgument.capture(), + mStringArraySuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); + + mJournalStorage.read(JOURNAL_KEY1, mListOfByteArrayConsumer); + verify(mBridge, times(1)) + .loadJournal(eq(JOURNAL_KEY1), mStringArraySuccessCallbackArgument.capture(), + mFailureCallbackArgument.capture()); + verify(mListOfByteArrayConsumer, times(1)).accept(mListOfByteArrayCaptor.capture()); + verifyListOfBytesResult(answerStrings, false, mListOfByteArrayCaptor.getValue()); + } + + @Test + @SmallTest public void existsTest() { - Answer<Void> answer = createBooleanAnswer(true); - doAnswer(answer).when(mBridge).doesJournalExist( - mStringArgument.capture(), mBooleanCallbackArgument.capture()); + Answer<Void> answer = createBooleanSuccessAnswer(true); + doAnswer(answer).when(mBridge).doesJournalExist(mStringArgument.capture(), + mBooleanSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); mJournalStorage.exists(JOURNAL_KEY1, mBooleanConsumer); verify(mBridge, times(1)) - .doesJournalExist(eq(JOURNAL_KEY1), mBooleanCallbackArgument.capture()); + .doesJournalExist(eq(JOURNAL_KEY1), mBooleanSuccessCallbackArgument.capture(), + mFailureCallbackArgument.capture()); verify(mBooleanConsumer, times(1)).accept(mBooleanCaptor.capture()); assertTrue(mBooleanCaptor.getValue().getValue()); } @Test @SmallTest + public void existsFailureTest() { + Answer<Void> answer = createFailureAnswer(); + doAnswer(answer).when(mBridge).doesJournalExist(mStringArgument.capture(), + mBooleanSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); + + mJournalStorage.exists(JOURNAL_KEY1, mBooleanConsumer); + verify(mBridge, times(1)) + .doesJournalExist(eq(JOURNAL_KEY1), mBooleanSuccessCallbackArgument.capture(), + mFailureCallbackArgument.capture()); + verify(mBooleanConsumer, times(1)).accept(mBooleanCaptor.capture()); + assertFalse(mBooleanCaptor.getValue().isSuccessful()); + } + + @Test + @SmallTest public void getAllJournalsTest() { List<String> answerStrings = Arrays.asList(JOURNAL_KEY1, JOURNAL_KEY2, JOURNAL_KEY3); - Answer<Void> answer = createStringListAnswer(answerStrings); - doAnswer(answer).when(mBridge).loadAllJournalKeys(mListOfStringCallbackArgument.capture()); + Answer<Void> answer = createStringListSuccessAnswer(answerStrings); + doAnswer(answer).when(mBridge).loadAllJournalKeys( + mListOfStringSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); mJournalStorage.getAllJournals(mListOfStringConsumer); - verify(mBridge, times(1)).loadAllJournalKeys(mListOfStringCallbackArgument.capture()); + verify(mBridge, times(1)) + .loadAllJournalKeys(mListOfStringSuccessCallbackArgument.capture(), + mFailureCallbackArgument.capture()); verify(mListOfStringConsumer, times(1)).accept(mListOfStringCaptor.capture()); verifyListOfStringResult(answerStrings, true, mListOfStringCaptor.getValue()); } @Test @SmallTest + public void getAllJournalsFailureTest() { + List<String> answerStrings = new ArrayList<String>(); + Answer<Void> answer = createFailureAnswer(); + doAnswer(answer).when(mBridge).loadAllJournalKeys( + mListOfStringSuccessCallbackArgument.capture(), mFailureCallbackArgument.capture()); + + mJournalStorage.getAllJournals(mListOfStringConsumer); + verify(mBridge, times(1)) + .loadAllJournalKeys(mListOfStringSuccessCallbackArgument.capture(), + mFailureCallbackArgument.capture()); + verify(mListOfStringConsumer, times(1)).accept(mListOfStringCaptor.capture()); + assertFalse(mListOfStringCaptor.getValue().isSuccessful()); + } + + @Test + @SmallTest public void deleteAllTest() { - Answer<Void> answer = createBooleanAnswer(true); - doAnswer(answer).when(mBridge).deleteAllJournals(mBooleanCallbackArgument.capture()); + Answer<Void> answer = createBooleanSuccessAnswer(true); + doAnswer(answer).when(mBridge).deleteAllJournals(mBooleanSuccessCallbackArgument.capture()); mJournalStorage.deleteAll(mCommitResultConsumer); - verify(mBridge, times(1)).deleteAllJournals(mBooleanCallbackArgument.capture()); + verify(mBridge, times(1)).deleteAllJournals(mBooleanSuccessCallbackArgument.capture()); verify(mCommitResultConsumer, times(1)).accept(mCommitResultCaptor.capture()); CommitResult commitResult = mCommitResultCaptor.getValue(); assertEquals(CommitResult.SUCCESS, commitResult); @@ -209,11 +272,11 @@ @Test @SmallTest public void commitTest() { - Answer<Void> answerCommitJournal = createBooleanAnswer(true); + Answer<Void> answerCommitJournal = createBooleanSuccessAnswer(true); doAnswer(answerCommitJournal) .when(mBridge) - .commitJournalMutation( - mJournalMutationArgument.capture(), mBooleanCallbackArgument.capture()); + .commitJournalMutation(mJournalMutationArgument.capture(), + mBooleanSuccessCallbackArgument.capture()); mJournalStorage.commit(new JournalMutation.Builder(JOURNAL_KEY1) .append(JOURNAL_DATA1.getBytes()) @@ -222,8 +285,8 @@ .build(), mCommitResultConsumer); verify(mBridge, times(1)) - .commitJournalMutation( - mJournalMutationArgument.capture(), mBooleanCallbackArgument.capture()); + .commitJournalMutation(mJournalMutationArgument.capture(), + mBooleanSuccessCallbackArgument.capture()); verify(mCommitResultConsumer, times(1)).accept(mCommitResultCaptor.capture()); CommitResult commitResult = mCommitResultCaptor.getValue();
diff --git a/chrome/app/resources/chromium_strings_bn.xtb b/chrome/app/resources/chromium_strings_bn.xtb index b19550f8..528d464 100644 --- a/chrome/app/resources/chromium_strings_bn.xtb +++ b/chrome/app/resources/chromium_strings_bn.xtb
@@ -16,7 +16,7 @@ <translation id="1502360822835740515">Chromium কে আপনার ডিফল্ট ব্রাউজার করুন</translation> <translation id="151962892725702025">আপনার ডোমেনে সিঙ্ক উপলব্ধ না থাকার কারণে Chromium OS আপনার ডেটা সিঙ্ক করতে পারেনি৷</translation> <translation id="1585657529869845941">এটি দেখানো হলে <ph name="BEGIN_BOLD" />যেকোনওভাবে পরিবর্তন করতে<ph name="END_BOLD" /> ক্লিক করুন</translation> -<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />-এর মত অতিরিক্ত <ph name="BEGIN_LINK_CROS_OSS" />ওপেন সোর্স সফ্টওয়্যার<ph name="END_LINK_CROS_OSS" /> ব্যবহার করে Chrome OS তৈরি হয়।</translation> +<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />-এর মত অতিরিক্ত <ph name="BEGIN_LINK_CROS_OSS" />ওপেন সোর্স সফ্টওয়্যার<ph name="END_LINK_CROS_OSS" /> ব্যবহার করে Chrome OS তৈরি করা সম্ভব হয়েছে।</translation> <translation id="1668054258064581266">Chromium থেকে আপনার অ্যাকাউন্ট সরানোর পরে, কার্য়করী করতে আপনাকে খোলা ট্যাবগুলিকে পুনরায় লোড করার প্রয়োজন হতে পারে।</translation> <translation id="1688750314291223739">ওয়েবে আপনার ব্যক্তিগতকৃত ব্রাউজার বিষয় সংরক্ষণ করতে সিঙ্ক সেট করুন এবং যেকোনো কম্পিউটারে Chromium থেকে সেগুলিতে অ্যাক্সেস করুন৷</translation> <translation id="1708666629004767631">Chromium-এর একটি নতুন, নিরাপদ সংস্করণ উপলব্ধ আছে৷</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb index 0f02b18..9dcdc973 100644 --- a/chrome/app/resources/chromium_strings_ml.xtb +++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -18,7 +18,7 @@ <translation id="1502360822835740515">Chromium-ത്തെ നിങ്ങളുടെ ഡിഫോൾട്ട് ബ്രൗസറാക്കുക</translation> <translation id="151962892725702025">നിങ്ങളുടെ ഡൊമെയ്നിന് സമന്വയം ലഭ്യമല്ലാത്തതിനാൽ Chromium OS-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation> <translation id="1585657529869845941">ഇത് ദൃശ്യമാകുന്നുവെങ്കിൽ, <ph name="BEGIN_BOLD" />എന്തായാലും മാറുക<ph name="END_BOLD" /> എന്നതിൽ ക്ലിക്ക് ചെയ്യുക</translation> -<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (ബീറ്റ)<ph name="END_LINK_LINUX_OSS" /> പോലെ അധിക <ph name="BEGIN_LINK_CROS_OSS" />ഓപ്പൺ സോഴ്സ് സോഫ്റ്റ്വെയർ<ph name="END_LINK_CROS_OSS" /> മുഖേനയാണ് Chrome OS നിർമ്മിച്ചിരിക്കുന്നത്.</translation> +<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (ബീറ്റ)<ph name="END_LINK_LINUX_OSS" /> പോലെ അധിക <ph name="BEGIN_LINK_CROS_OSS" />ഓപ്പൺ സോഴ്സ് സോഫ്റ്റ്വെയർ<ph name="END_LINK_CROS_OSS" /> ഉപയോഗിച്ചാണ് Chrome OS സാധ്യമാക്കിയിട്ടുള്ളത്.</translation> <translation id="1668054258064581266">Chromium-ൽ നിന്ന് നിങ്ങളുടെ അക്കൗണ്ട് നീക്കംചെയ്തുകഴിഞ്ഞാൽ, അത് പ്രാബല്യത്തിൽ വരുന്നതിന് ഓപ്പൺ ടാബുകൾ വീണ്ടും ലോഡുചെയ്യേണ്ടതായി വരാം.</translation> <translation id="1688750314291223739">നിങ്ങളുടെ വ്യക്തിപരമാക്കിയ ബ്രൗസർ സവിശേഷതകൾ വെബിലേക്ക് സംരക്ഷിച്ച് അവയെ ഏത് കമ്പ്യൂട്ടറിലെയും Chromium-ത്തിൽ നിന്ന് ആക്സസ്സുചെയ്യുന്നതിന് സമന്വയം സജ്ജമാക്കുക.</translation> <translation id="1708666629004767631">പുതിയതും സുരക്ഷിതവുമായ ഒരു Chromium പതിപ്പ് ലഭ്യമാണ്.</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb index 703032a..67584d1 100644 --- a/chrome/app/resources/chromium_strings_mr.xtb +++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -19,10 +19,10 @@ <translation id="1585657529869845941">ते दिसल्यास <ph name="BEGIN_BOLD" />कसेही स्विच करा<ph name="END_BOLD" /> वर क्लिक करा</translation> <translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (बीटा)<ph name="END_LINK_LINUX_OSS" /> सारखेच, अतिरिक्त <ph name="BEGIN_LINK_CROS_OSS" />मुक्त स्रोत सॉफ्टवेअर<ph name="END_LINK_CROS_OSS" /> मुळे Chrome OS शक्य झाले आहे.</translation> <translation id="1668054258064581266">Chromium वरून आपले खाते काढल्यानंतर, प्रभावी होण्यासाठी आपल्याला आपले उघडे टॅब रीलोड करण्याची आवश्यकता असू शकते.</translation> -<translation id="1688750314291223739">वेबवर तुमची वैयक्तीकृत केलेली ब्राउझर वैशिष्ट्ये सेव्ह करण्यासाठी समक्रमण सेट करा आणि कोणत्याही संगणकावरील Chromium वरून त्यात प्रवेश करा.</translation> +<translation id="1688750314291223739">वेबवर तुमची पर्सनलाइझ केलेली ब्राउझर वैशिष्ट्ये सेव्ह करण्यासाठी सिंक सेट करा आणि कोणत्याही कॉंप्युटरवरील Chromium वरून ते अॅक्सेस करा.</translation> <translation id="1708666629004767631">Chromium ची नवीन, सुरक्षित आवृत्ती उपलब्ध आहे.</translation> <translation id="1766096484055239003">तुमच्या अॅडमिनिस्ट्रेटरला अपडेट लागू करता यावे यासाठी तुम्ही Chrome पुन्हा लाँच करण्याची आवश्यकता आहे</translation> -<translation id="1774152462503052664">Chromium पार्श्वभूमीवर चालू द्या</translation> +<translation id="1774152462503052664">Chromium बॅकग्राउंडमध्ये चालू द्या</translation> <translation id="1779356040007214683">Chromium अधिक सुरक्षित बनविण्यासाठी, आम्ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये सूचीबद्ध नसलेले आणि आपल्या माहिती शिवाय कदाचित जोडले गेलेले काही विस्तार अक्षम केले.</translation> <translation id="1808667845054772817">Chromium पुनर्स्थापित करा</translation> <translation id="1869480248812203386">आपण Google कडे संभाव्य सुरक्षितता घटनांच्या तपशीलांचा स्वयंचलितपणे अहवाल देऊन Chromium वापरणे अधिक सुरक्षित आणि अधिक सुलभ करण्यात मदत करू शकता.</translation> @@ -47,11 +47,11 @@ <translation id="2647554856022461007">Chromium तुमचा ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="2648074677641340862">इंस्टॉल करताना ऑपरेटिंग सिस्टम एरर आली. कृपया Chromium पुन्हा डाउनलोड करा.</translation> <translation id="2711502716910134313">Chromium टॅब</translation> -<translation id="2718390899429598676">अतिरिक्त सुरक्षिततेसाठी, Chromium आपला डेटा कूटबद्ध करेल.</translation> +<translation id="2718390899429598676">अतिरिक्त सुरक्षिततेसाठी, Chromium तुमचा डेटा एंक्रिप्ट करेल.</translation> <translation id="2770231113462710648">डीफॉल्ट ब्राउझर यावर बदला:</translation> <translation id="2799223571221894425">पुन्हा लाँच करा</translation> <translation id="2847479871509788944">Chromium मधून काढून टाका...</translation> -<translation id="2886012850691518054">पर्यायी: स्वयंचलितपणे वापर आकडेवारी आणि क्रॅश अहवाल Google कडे पाठवून Chromium ला अधिक चांगले करण्यात मदत करा.</translation> +<translation id="2886012850691518054">पर्यायी: वापर आकडेवारी आणि क्रॅश अहवाल Google कडे आपोआप पाठवून Chromium ला अधिक चांगले करण्यात मदत करा.</translation> <translation id="2898082584336937987">तुमच्या फोनवर Chromium इंस्टॉल करा. आम्ही तुमच्या या फोनवर एक SMS पाठवू: <ph name="PHONE_NUMBER" /></translation> <translation id="2910007522516064972">&Chromium बद्दल</translation> <translation id="2977470724722393594">Chromium अद्ययावत आहे</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index 7f6cb34..e5273e2 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -3141,7 +3141,6 @@ <translation id="5723508132121499792">ምንም የጀርባ መተግበሪያዎች እያሄዱ አይደሉም</translation> <translation id="5727728807527375859">ቅጥያዎች፣ መተግበሪያዎች እና ገፅታዎች ኮምፒውተርዎን ሊጎዱ ይችላሉ። እርግጠኛ ነዎት መቀጠል ይፈልጋሉ?</translation> <translation id="5729712731028706266">&እይታ</translation> -<translation id="5731185123186077399">እንደ Google Pay ያሉ ግላዊነት የተላበሱ የGoogle አገልግሎቶች</translation> <translation id="5731247495086897348">ለ&ጥፍና እና ሂድ</translation> <translation id="5731409020711461763">1 አዲስ ፎቶ</translation> <translation id="5734362860645681824">ተግባቦት</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index c94408c..dd72bc3 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -3137,7 +3137,6 @@ <translation id="5723508132121499792">ليس هناك تطبيقات خلفية قيد التشغيل</translation> <translation id="5727728807527375859">قد تلحق الإضافات والتطبيقات والمظاهر الضرر بالكمبيوتر، فهل تريد بالتأكيد المتابعة؟</translation> <translation id="5729712731028706266">&عرض</translation> -<translation id="5731185123186077399">الاستفادة من خدمات Google المخصّصة مثل Google Pay</translation> <translation id="5731247495086897348">ل&صق وانتقال</translation> <translation id="5731409020711461763">صورة واحدة جديدة</translation> <translation id="5734362860645681824">الاتصالات</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index 96fdb18..2feaaf05 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Не се изпълняват приложения на заден план</translation> <translation id="5727728807527375859">Разширенията, приложенията и темите могат да навредят на компютъра ви. Наистина ли искате да продължите?</translation> <translation id="5729712731028706266">&Изглед</translation> -<translation id="5731185123186077399">Персонализирани услуги на Google, като Google Pay</translation> <translation id="5731247495086897348">&Поставяне и старт</translation> <translation id="5731409020711461763">1 нова снимка</translation> <translation id="5734362860645681824">Комуникации</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index e64890aa..e9ef6f8 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">আপনার ডিভাইসের ব্যবহার আরও সহজ করতে অ্যাক্সেসযোগ্যতার বৈশিষ্ট্যগুলি সক্ষম করুন৷</translation> <translation id="1190144681599273207">এই ফাইল আনয়ন করতে আনুমানিক মোবাইল ডেটার <ph name="FILE_SIZE" /> ব্যবহার করবে৷</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{আপনার কম্পিউটারে সঞ্চিত একটি ফাইল অ্যাক্সেস করে}one{আপনার কম্পিউটারে সঞ্চিত #টি ফাইল অ্যাক্সেস করে}other{আপনার কম্পিউটারে সঞ্চিত #টি ফাইল অ্যাক্সেস করে}}</translation> +<translation id="1193273168751563528">ম্যানেজ করা সেশনে জয়েন করুন</translation> <translation id="1195076408729068893">Smart Lock শুরু করতে আপনার পাসওয়ার্ড লিখুন। পরের বার আপনার <ph name="DEVICE_TYPE" /> আনলক করতে নিজের ফোন ব্যবহার করতে পারবেন।</translation> <translation id="1195447618553298278">অজানা ত্রুটি৷</translation> <translation id="119738088725604856">স্ক্রীনশট উইন্ডো</translation> @@ -1265,7 +1266,7 @@ <translation id="2875698561019555027">(Chrome এর ত্রুটি পৃষ্ঠাগুলি)</translation> <translation id="2876336351874743617">আঙ্গুল ২</translation> <translation id="288042212351694283">আপনার ইউনিভার্সাল ২য় ফ্যাক্টর ডিভাইসগুলির অ্যাক্সেস রয়েছে</translation> -<translation id="2881076733170862447">যখন আপনি এক্সটেনশনটি ক্লিক করেন</translation> +<translation id="2881076733170862447">যখন আপনি এক্সটেনশনে ক্লিক করেন</translation> <translation id="2881966438216424900">অন্তিমবার অ্যক্সেস করা হয়েছে:</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> আবার চালু হবে এবং তাৎক্ষণিকভাবে আবার সেট হবে</translation> <translation id="2885378588091291677">কার্য পরিচালক</translation> @@ -1317,6 +1318,7 @@ <translation id="29488703364906173">আধুনিক ওয়েবের জন্য তৈরি একটি দ্রুত, সহজ, এবং সুরক্ষিত ওয়েব ব্রাউজার৷</translation> <translation id="2951247061394563839">সেন্টার উইন্ডো</translation> <translation id="2958721676848865875">প্যাক এক্সটেন করার সতর্কীকরণ</translation> +<translation id="296026337010986570">হয়ে গেছে! ক্ষতিকারক সফ্টওয়্যার সরানো হয়েছে। এক্সটেনশন আবার চালু করতে, <a href="chrome://extensions">এক্সটেনশন</a> -এ যান।</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (এক্সটেনশান প্রদত্ত)</translation> <translation id="2961695502793809356">এগিয়ে যাওয়ার জন্য ক্লিক করুন, ইতিহাস দেখার জন্য ধরে রাখুন</translation> <translation id="2963151496262057773">নিম্নোক্ত প্ল্যাগ ইনটি প্রতিক্রিয়াবিহীন: <ph name="PLUGIN_NAME" /> আপনি কি এটিকে থামাতে চান?</translation> @@ -1720,6 +1722,7 @@ <translation id="358796204584394954">যুক্ত করতে "<ph name="DEVICE_NAME" />" এ এই কোডটি লিখুন:</translation> <translation id="3589766037099229847">নিরাপত্তাহীন কন্টেন্ট ব্লক করা হয়েছে</translation> <translation id="3590194807845837023">প্রোফাইল আনলক করুন এবং পুনরায় লঞ্চ করুন</translation> +<translation id="3590295622232282437">ম্যানেজ করা সেশনে জয়েন করা হচ্ছে।</translation> <translation id="3592260987370335752">এবং আরও জানুন</translation> <translation id="359283478042092570">Enter</translation> <translation id="3593965109698325041">শংসাপত্র নাম সীমাবদ্ধতাসমূহ</translation> @@ -2662,11 +2665,12 @@ <translation id="5039512255859636053">$১ TB</translation> <translation id="5039804452771397117">অনুমতি দিন</translation> <translation id="5045550434625856497">ভুল পাসওয়ার্ড</translation> +<translation id="504561833207953641">আগে থেকে থাকা ব্রাউজার সেশনে খোলা হচ্ছে।</translation> <translation id="5047421709274785093">মোশন এবং হাল্কা সেন্সর ব্যবহার করা থেকে সাইটকে ব্লক করুন</translation> <translation id="5050042263972837708">গ্রুপের নাম</translation> <translation id="5052499409147950210">সাইট সম্পাদনা করুন</translation> <translation id="5053604404986157245">অনিয়মিতভাবে তৈরি TPM পাসওয়ার্ড উপলব্ধ নয়৷ এটি একটি পাওয়ারওয়াশের পরে স্বাভাবিক হয়৷</translation> -<translation id="5057110919553308744">যখন আপনি এক্সটেনশনটি ক্লিক করেন</translation> +<translation id="5057110919553308744">যখন আপনি এক্সটেনশনে ক্লিক করেন</translation> <translation id="5061347216700970798">{NUM_BOOKMARKS,plural, =1{এই ফোল্ডারটিতে একটি বুকমার্ক আছে। এটা মুছে ফেলার বিষয়ে আপনি কি নিশ্চিত?}one{এই ফোল্ডারটিতে #টি বুকমার্ক আছে। এটা মুছে ফেলার বিষয়ে আপনি কি নিশ্চিত?}other{এই ফোল্ডারটিতে #টি বুকমার্ক আছে। এটা মুছে ফেলার বিষয়ে আপনি কি নিশ্চিত?}}</translation> <translation id="5061708541166515394">তুলনা</translation> <translation id="5062930723426326933">প্রবেশ করুন ব্যর্থ হয়েছে, দয়া করে ইন্টারনেটের সাথে সংযোগ স্থাপন করুন এবং আবার চেষ্টা করুন৷</translation> @@ -2870,6 +2874,7 @@ <translation id="5341980496415249280">অনুগ্রহ করে অপেক্ষা করুন, প্যাকিং করা হচ্ছে....</translation> <translation id="5342091991439452114">পিন অবশ্যই কমপক্ষে <ph name="MINIMUM" /> সংখ্যার হতে হবে</translation> <translation id="5352033265844765294">Time Stamping</translation> +<translation id="5352285283572729470">এই সেটিংটি পরিচালিত</translation> <translation id="5353252989841766347">Chrome থেকে পাসওয়ার্ড রপ্তানি করুন</translation> <translation id="5355097969896547230">আবার খুঁজুন</translation> <translation id="5355926466126177564">আপনি বহুউপযোগী ক্ষেত্র থেকে সার্চ করলে কোন পৃষ্ঠা দেখানো হবে তা "<ph name="EXTENSION_NAME" />" এক্সটেনশানটি পরিবর্তন করেছে।</translation> @@ -3134,7 +3139,6 @@ <translation id="5723508132121499792">কোনো পৃষ্ঠভূমি অ্যাপ্লিকেশান চলছে না</translation> <translation id="5727728807527375859">এক্সটেনশন, apps, এবং থিমগুলি আপনার কম্পিউটারের ক্ষতি করতে পারে৷ আপনি কি চালিয়ে যাওয়ার বিষয়ে নিশ্চিত?</translation> <translation id="5729712731028706266">&দেখুন</translation> -<translation id="5731185123186077399">Google Pay-এর মতো Google পরিষেবাগুলি নিজের মতো সাজিয়ে নিন</translation> <translation id="5731247495086897348">আ&টকান এবং যান</translation> <translation id="5731409020711461763">১টি নতুন ফটো</translation> <translation id="5734362860645681824">যোগাযোগগুলি</translation> @@ -3779,6 +3783,7 @@ <translation id="6680650203439190394">দ্রুততা</translation> <translation id="6681668084120808868">ফটো তুলুন</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" আনইনস্টল করা হবে।</translation> +<translation id="6685083257944113180">থামুন, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Google Play খুলুন</translation> <translation id="6686490380836145850">ডানদিকের ট্যাবগুলি বন্ধ করুন</translation> <translation id="6686817083349815241">আপনার পাসওয়ার্ড সেভ করুন</translation> @@ -4259,6 +4264,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{সবগুলি &নতুন উইন্ডোতে খুলুন}=1{&নতুন উইন্ডোতে খুলুন}one{সবগুলি (#টি) &নতুন উইন্ডোতে খুলুন}other{সবগুলি (#টি) &নতুন উইন্ডোতে খুলুন}}</translation> <translation id="7434509671034404296">ডেভেলপার</translation> <translation id="7436921188514130341">নাম পরিবর্তনের সময় একটি ত্রুটি হয়েছিল।</translation> +<translation id="7441736921018636843">এই সেটিংটি পরিবর্তন করতে, আপনার সিঙ্ক পাসফ্রেজটি সরানোর জন্য <ph name="BEGIN_LINK" />সিঙ্ক রিসেট করুন<ph name="END_LINK" /></translation> <translation id="7441830548568730290">অন্যান্য ব্যবহারকারী</translation> <translation id="7442465037756169001">আপনার Hangouts Meet Hardware সেট আপ করার জন্য প্রস্তুত।</translation> <translation id="744341768939279100">একটি নতুন প্রোফাইল তৈরি করুন</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 2c842d2b2..ed5eaccf 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">No hi cap aplicació en execució en segon pla</translation> <translation id="5727728807527375859">Les extensions, les aplicacions i els temes poden malmetre el vostre equip. Segur que voleu continuar?</translation> <translation id="5729712731028706266">&Lector</translation> -<translation id="5731185123186077399">Serveis de Google personalitzats, com ara Google Pay</translation> <translation id="5731247495086897348">En&ganxa i ves-hi</translation> <translation id="5731409020711461763">1 foto nova</translation> <translation id="5734362860645681824">Comunicacions</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index d488fcf..3af9134 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -3139,7 +3139,6 @@ <translation id="5723508132121499792">Na pozadí nejsou spuštěny žádné aplikace</translation> <translation id="5727728807527375859">Rozšíření, aplikace nebo motivy mohou poškodit váš počítač. Chcete pokračovat?</translation> <translation id="5729712731028706266">&Zobrazit</translation> -<translation id="5731185123186077399">Personalizované služby Google, jako např. Google Pay</translation> <translation id="5731247495086897348">&Vložit a přejít</translation> <translation id="5731409020711461763">1 nová fotka</translation> <translation id="5734362860645681824">Komunikační příslušenství</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index 9065250..bc25394 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -3141,7 +3141,6 @@ <translation id="5723508132121499792">Ingen apps kører i baggrunden</translation> <translation id="5727728807527375859">Udvidelser, programmer og temaer kan beskadige din computer. Er du sikker på, at du vil fortsætte?</translation> <translation id="5729712731028706266">&Vis</translation> -<translation id="5731185123186077399">Tilpassede Google-tjenester såsom Google Pay</translation> <translation id="5731247495086897348">Ind&sæt og fortsæt</translation> <translation id="5731409020711461763">1 nyt billede</translation> <translation id="5734362860645681824">Kommunikation</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 8028e0b2..e5b7acb1 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -3139,7 +3139,6 @@ <translation id="5723508132121499792">Es werden keine Apps im Hintergrund ausgeführt.</translation> <translation id="5727728807527375859">Erweiterungen, Apps und Designs können Ihren Computer beschädigen. Möchten Sie den Vorgang wirklich fortsetzen?</translation> <translation id="5729712731028706266">&Ansicht</translation> -<translation id="5731185123186077399">Personalisierte Google-Dienste wie Google Pay</translation> <translation id="5731247495086897348">Einfügen und &fortfahren</translation> <translation id="5731409020711461763">1 neues Foto</translation> <translation id="5734362860645681824">Kommunikation</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 37c7d57..d7f2a7f5 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Ενεργοποιήστε τις λειτουργίες προσβασιμότητας για να κάνετε τη συσκευή σας πιο εύχρηστη.</translation> <translation id="1190144681599273207">Για την ανάκτηση αυτού του αρχείου θα χρησιμοποιηθούν περίπου <ph name="FILE_SIZE" /> δεδομένων κινητής τηλεφωνίας.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Πρόσβαση σε ένα αρχείο που είναι αποθηκευμένο στον υπολογιστή σας}other{Πρόσβαση σε # αρχεία που είναι αποθηκευμένα στον υπολογιστή σας}}</translation> +<translation id="1193273168751563528">Είσοδος σε διαχειριζόμενη περίοδο σύνδεσης</translation> <translation id="1195076408729068893">Για να ξεκινήσετε το Smart Lock, καταχωρίστε τον κωδικό πρόσβασης. Την επόμενη φορά μπορείτε να χρησιμοποιήσετε το τηλέφωνό σας, για να ξεκλειδώσετε το <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Άγνωστο σφάλμα.</translation> <translation id="119738088725604856">Παράθυρο στιγμιότυπου οθόνης</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">Ένα γρήγορο, απλό και ασφαλές πρόγραμμα περιήγησης ιστού, το οποίο δημιουργήθηκε για τον σύγχρονο ιστό.</translation> <translation id="2951247061394563839">Κέντρο παραθύρου</translation> <translation id="2958721676848865875">Προειδοποίηση στοίβαξης επέκτασης</translation> +<translation id="296026337010986570">Η διαδικασία ολοκληρώθηκε! Το επιβλαβές λογισμικό καταργήθηκε. Για να ενεργοποιήσετε ξανά τις επεκτάσεις, μεταβείτε στην ενότητα <a href="chrome://extensions">Επεκτάσεις</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (παρέχεται επέκταση)</translation> <translation id="2961695502793809356">Κάντε κλικ για να πάτε μπροστά, κρατήστε το κουμπί πατημένο για να δείτε το ιστορικό</translation> <translation id="2963151496262057773">Η ακόλουθη προσθήκη δεν ανταποκρίνεται: <ph name="PLUGIN_NAME" />Θέλετε να την τερματίσετε;</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">Πληκτρολογήστε αυτόν τον κωδικό στη συσκευή "<ph name="DEVICE_NAME" />" για να κάνετε σύζευξη:</translation> <translation id="3589766037099229847">Το μη ασφαλές περιεχόμενο αποκλείστηκε</translation> <translation id="3590194807845837023">Ξεκλείδωμα προφίλ και επανεκκίνηση</translation> +<translation id="3590295622232282437">Είσοδος σε διαχειριζόμενη περίοδο σύνδεσης.</translation> <translation id="3592260987370335752">&Μάθετε περισσότερα</translation> <translation id="359283478042092570">Είσοδος</translation> <translation id="3593965109698325041">Περιορισμοί ονόματος πιστοποιητικού</translation> @@ -2666,6 +2669,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Επιτρέπεται</translation> <translation id="5045550434625856497">Λανθασμένος κωδικός πρόσβασης</translation> +<translation id="504561833207953641">Άνοιγμα σε υπάρχουσα περίοδο σύνδεσης προγράμματος περιήγησης.</translation> <translation id="5047421709274785093">Να μην επιτρέπεται στους ιστοτόπους να χρησιμοποιούν αισθητήρες κίνησης και φωτός</translation> <translation id="5050042263972837708">Όνομα ομάδας</translation> <translation id="5052499409147950210">Επεξεργασία ιστοτόπου</translation> @@ -2875,6 +2879,7 @@ <translation id="5341980496415249280">Περιμένετε, πραγματοποιείται στοίβαξη…</translation> <translation id="5342091991439452114">Το PIN πρέπει να αποτελείται από τουλάχιστον <ph name="MINIMUM" /> ψηφία</translation> <translation id="5352033265844765294">Χρονική σήμανση</translation> +<translation id="5352285283572729470">Αυτή η ρύθμιση είναι διαχειριζόμενη</translation> <translation id="5353252989841766347">Εξαγωγή κωδικών πρόσβασης από το Chrome</translation> <translation id="5355097969896547230">Εύρεση ξανά</translation> <translation id="5355926466126177564">Η επέκταση "<ph name="EXTENSION_NAME" />" άλλαξε τη σελίδα που εμφανίζεται όταν κάνετε αναζήτηση από το κύριο πλαίσιο.</translation> @@ -3139,7 +3144,6 @@ <translation id="5723508132121499792">Δεν εκτελούνται εφαρμογές φόντου</translation> <translation id="5727728807527375859">Οι επεκτάσεις, οι εφαρμογές και τα θέματα μπορεί να βλάψουν τον υπολογιστή σας. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;</translation> <translation id="5729712731028706266">&Προβολή</translation> -<translation id="5731185123186077399">Εξατομικευμένες υπηρεσίες Google όπως το Google Pay</translation> <translation id="5731247495086897348">Επικό&λληση και μετάβαση</translation> <translation id="5731409020711461763">1 νέα φωτογραφία</translation> <translation id="5734362860645681824">Επικοινωνίες</translation> @@ -3784,6 +3788,7 @@ <translation id="6680650203439190394">Βαθμολόγηση</translation> <translation id="6681668084120808868">Λήψη φωτογραφίας</translation> <translation id="6681964764822470072">Η εγκατάσταση της εφαρμογής "<ph name="APP_NAME" />" θα καταργηθεί.</translation> +<translation id="6685083257944113180">Διακοπή, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Άνοιγμα Google Play</translation> <translation id="6686490380836145850">Κλείσιμο καρτελών δεξιά</translation> <translation id="6686817083349815241">Αποθηκεύστε τον κωδικό πρόσβασής σας</translation> @@ -4264,6 +4269,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Άνοιγμα όλων σε &νέο παράθυρο}=1{Άνοιγμα σε &νέο παράθυρο}other{Άνοιγμα όλων (#) σε &νέο παράθυρο}}</translation> <translation id="7434509671034404296">Για Προγραμματιστές</translation> <translation id="7436921188514130341">Δυστυχώς, παρουσιάστηκε σφάλμα κατά τη μετονομασία.</translation> +<translation id="7441736921018636843">Για να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />κάντε επαναφορά στον συγχρονισμό<ph name="END_LINK" />, έτσι ώστε να καταργηθεί η φράση πρόσβασης συγχρονισμού</translation> <translation id="7441830548568730290">Άλλοι χρήστες</translation> <translation id="7442465037756169001">Το Hangouts Meet hardware είναι έτοιμο για ρύθμιση.</translation> <translation id="744341768939279100">Δημιουργήστε ένα νέο προφίλ</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index f286674c..2a5d72b 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -3142,7 +3142,6 @@ <translation id="5723508132121499792">No background apps running</translation> <translation id="5727728807527375859">Extensions, apps and themes can harm your computer. Are you sure that you want to continue?</translation> <translation id="5729712731028706266">&View</translation> -<translation id="5731185123186077399">Personalised Google services such as Google Pay</translation> <translation id="5731247495086897348">Pa&ste and Go</translation> <translation id="5731409020711461763">One new photo</translation> <translation id="5734362860645681824">Communications</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 7fe431d..d4f4e2a 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Permite habilitar las funciones de accesibilidad para que tu dispositivo sea más fácil de usar.</translation> <translation id="1190144681599273207">Para recuperar este archivo, se utilizará aproximadamente <ph name="FILE_SIZE" /> de los datos móviles.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Acceso a un archivo almacenado en la computadora}other{Acceso a # archivos almacenados en la computadora}}</translation> +<translation id="1193273168751563528">Ingresar a sesión administrada</translation> <translation id="1195076408729068893">Para iniciar Smart Lock, ingresa tu contraseña. La próxima vez, puedes usar el teléfono para desbloquear tu <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Error desconocido.</translation> <translation id="119738088725604856">Ventana de captura de pantalla</translation> @@ -1313,6 +1314,7 @@ <translation id="29488703364906173">Un navegador web rápido, seguro y fácil de usar creado para la Web moderna</translation> <translation id="2951247061394563839">Centrar ventana</translation> <translation id="2958721676848865875">Advertencia sobre el empaquetado de extensiones</translation> +<translation id="296026337010986570">Se quitó el software dañino. Para volver a activar las extensiones, visita la sección <a href="chrome://extensions">Extensiones</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (extensión proporcionada)</translation> <translation id="2961695502793809356">Haz clic para continuar o espera para ver el historial</translation> <translation id="2963151496262057773">El siguiente complemento no responde: <ph name="PLUGIN_NAME" /> ¿Quieres detenerlo?</translation> @@ -1719,6 +1721,7 @@ <translation id="358796204584394954">Escribe este código en el dispositivo "<ph name="DEVICE_NAME" />" para sincronizar:</translation> <translation id="3589766037099229847">Se bloqueó el contenido no seguro</translation> <translation id="3590194807845837023">Desbloquear perfil y volver a iniciar</translation> +<translation id="3590295622232282437">Ingresando a la sesión administrada</translation> <translation id="3592260987370335752">&Más información</translation> <translation id="359283478042092570">Ingresar</translation> <translation id="3593965109698325041">Restricciones para el nombre del certificado</translation> @@ -2663,6 +2666,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5045550434625856497">Contraseña incorrecta</translation> +<translation id="504561833207953641">Abriendo en una sesión existente del navegador</translation> <translation id="5047421709274785093">Bloquear el uso de los sensores de luz y movimiento en los sitios</translation> <translation id="5050042263972837708">Nombre del grupo</translation> <translation id="5052499409147950210">Editar sitio</translation> @@ -2872,6 +2876,7 @@ <translation id="5341980496415249280">Realizando el empaquetamiento…</translation> <translation id="5342091991439452114">El PIN debe tener al menos <ph name="MINIMUM" /> dígitos</translation> <translation id="5352033265844765294">Impresión de fecha</translation> +<translation id="5352285283572729470">Esta configuración está administrada</translation> <translation id="5353252989841766347">Exportar contraseñas desde Chrome</translation> <translation id="5355097969896547230">Encontrar nuevamente</translation> <translation id="5355926466126177564">La extensión "<ph name="EXTENSION_NAME" />" cambió la página que se muestra al llevar a cabo búsquedas desde el cuadro multifunción.</translation> @@ -3135,7 +3140,6 @@ <translation id="5723508132121499792">No se ejecutan aplicaciones de fondo</translation> <translation id="5727728807527375859">Las extensiones, las aplicaciones y los temas pueden dañar tu computadora. ¿Estás seguro de que deseas continuar?</translation> <translation id="5729712731028706266">&Ver</translation> -<translation id="5731185123186077399">Servicios personalizados de Google, como Google Pay</translation> <translation id="5731247495086897348">Pe&gar y acceder</translation> <translation id="5731409020711461763">1 foto nueva</translation> <translation id="5734362860645681824">Comunicaciones</translation> @@ -3780,6 +3784,7 @@ <translation id="6680650203439190394">Calificar</translation> <translation id="6681668084120808868">Tomar foto</translation> <translation id="6681964764822470072">Se desinstalará "<ph name="APP_NAME" />".</translation> +<translation id="6685083257944113180">Detener, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Abrir Google Play</translation> <translation id="6686490380836145850">Cerrar pestañas a la derecha</translation> <translation id="6686817083349815241">Guardar la contraseña</translation> @@ -4260,6 +4265,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Abrir todo en una ventana &nueva}=1{Abrir en una ventana &nueva}other{Abrir todo (#) en una ventana &nueva}}</translation> <translation id="7434509671034404296">Opciones para desarrolladores</translation> <translation id="7436921188514130341">Se produjo un error al cambiar el nombre.</translation> +<translation id="7441736921018636843">A fin de cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /> para quitar la frase de contraseña de sincronización</translation> <translation id="7441830548568730290">Otros usuarios</translation> <translation id="7442465037756169001">El hardware de Hangouts Meet ya está listo para su configuración.</translation> <translation id="744341768939279100">Crear un perfil nuevo</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index c58bebb..1e451b7 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Permite habilitar las funciones de accesibilidad para facilitar el uso de tu dispositivo.</translation> <translation id="1190144681599273207">Para recuperar este archivo se utilizarán aproximadamente <ph name="FILE_SIZE" /> de datos móviles.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Acceso a un archivo almacenado en tu ordenador}other{Acceso a # archivos almacenados en tu ordenador}}</translation> +<translation id="1193273168751563528">Entrar en la sesión administrada</translation> <translation id="1195076408729068893">Introduce la contraseña para iniciar Smart Lock. La próxima vez, puedes usar el teléfono para desbloquear tu <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Error desconocido.</translation> <translation id="119738088725604856">Ventana de captura de pantalla</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">Un navegador web rápido, seguro y fácil de usar creado para la Web actual.</translation> <translation id="2951247061394563839">Centrar ventana</translation> <translation id="2958721676848865875">Advertencia sobre el empaquetado de extensión</translation> +<translation id="296026337010986570">Se ha eliminado el software dañino. Para volver a activar las extensiones, ve a <a href="chrome://extensions">Extensiones</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (extensión proporcionada)</translation> <translation id="2961695502793809356">Haz clic para avanzar una página o pulsa unos segundos para ver el historial</translation> <translation id="2963151496262057773">El complemento <ph name="PLUGIN_NAME" /> no responde. ¿Quieres detenerlo?</translation> @@ -1720,6 +1722,7 @@ <translation id="358796204584394954">Escribe este código en el dispositivo <ph name="DEVICE_NAME" /> para vincularlo:</translation> <translation id="3589766037099229847">Contenido no seguro bloqueado</translation> <translation id="3590194807845837023">Desbloquear perfil y volver a iniciar</translation> +<translation id="3590295622232282437">Se está entrando en la sesión administrada.</translation> <translation id="3592260987370335752">&Más información</translation> <translation id="359283478042092570">Acceder</translation> <translation id="3593965109698325041">Restricciones de nombres de certificado</translation> @@ -2662,6 +2665,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5045550434625856497">Contraseña incorrecta</translation> +<translation id="504561833207953641">Se está abriendo en una sesión de navegador existente.</translation> <translation id="5047421709274785093">Evitar que los sitios web usen los sensores de luz y movimiento</translation> <translation id="5050042263972837708">Nombre del grupo</translation> <translation id="5052499409147950210">Editar sitio web</translation> @@ -2871,6 +2875,7 @@ <translation id="5341980496415249280">Espera mientras se comprime…</translation> <translation id="5342091991439452114">El PIN debe tener al menos <ph name="MINIMUM" /> dígitos</translation> <translation id="5352033265844765294">Impresión de fecha</translation> +<translation id="5352285283572729470">Esta configuración está administrada</translation> <translation id="5353252989841766347">Exportar contraseñas de Chrome</translation> <translation id="5355097969896547230">Volver a buscar</translation> <translation id="5355926466126177564">La extensión <ph name="EXTENSION_NAME" /> ha cambiado la página que se muestra al buscar en el omnibox.</translation> @@ -3134,7 +3139,6 @@ <translation id="5723508132121499792">No se están ejecutando aplicaciones en segundo plano.</translation> <translation id="5727728807527375859">Las extensiones, las aplicaciones y los temas pueden dañar tu ordenador. ¿Seguro que quieres continuar?</translation> <translation id="5729712731028706266">&Ver</translation> -<translation id="5731185123186077399">Servicios de Google personalizados, como Google Pay</translation> <translation id="5731247495086897348">Pega&r y acceder</translation> <translation id="5731409020711461763">1 foto nueva</translation> <translation id="5734362860645681824">Comunicaciones</translation> @@ -3778,6 +3782,7 @@ <translation id="6680650203439190394">Velocidad</translation> <translation id="6681668084120808868">Sacar foto</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" se desinstalará.</translation> +<translation id="6685083257944113180">Parar, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Abrir Google Play</translation> <translation id="6686490380836145850">Cerrar pestañas a la derecha</translation> <translation id="6686817083349815241">Guardar tu contraseña</translation> @@ -4258,6 +4263,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Abrir todas en una &nueva ventana}=1{Abrir en una &nueva ventana}other{Abrir (#) en una &nueva ventana}}</translation> <translation id="7434509671034404296">Opciones para desarrolladores</translation> <translation id="7436921188514130341">¡Vaya! No se ha podido cambiar el nombre.</translation> +<translation id="7441736921018636843">Para cambiar este ajuste, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" /> para eliminar tu frase de contraseña de sincronización</translation> <translation id="7441830548568730290">Otros usuarios</translation> <translation id="7442465037756169001">Ya puedes configurar el hardware de Hangouts Meet.</translation> <translation id="744341768939279100">Crear un nuevo perfil</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index c2d73cd..651f1ce 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Taustal rakendusi ei tööta</translation> <translation id="5727728807527375859">Laiendid, rakendused ja teemad võivad teie arvutit kahjustada. Kas soovite kindlasti jätkata?</translation> <translation id="5729712731028706266">&Kuva</translation> -<translation id="5731185123186077399">Isikupärastatud Google'i teenused, nagu Google Pay</translation> <translation id="5731247495086897348">Kl&eebi ja mine</translation> <translation id="5731409020711461763">Üks uus foto</translation> <translation id="5734362860645681824">Vestlusteenused</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 7b3984e1..72fc4c4 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -3139,7 +3139,6 @@ <translation id="5723508132121499792">بدون برنامههای در حال اجرا در پسزمینه</translation> <translation id="5727728807527375859">ممکن است افزونهها برنامهها، و طرحهای زمینه به رایانهٔ شما صدمه بزنند. آیا مطمئنید میخواهید ادامه دهید؟</translation> <translation id="5729712731028706266">&نما</translation> -<translation id="5731185123186077399">سرویسهای شخصیشده Google مانند Google Pay</translation> <translation id="5731247495086897348">جا&گذاری و رفتن</translation> <translation id="5731409020711461763">۱ عکس جدید</translation> <translation id="5734362860645681824">ارتباطات</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index 0910a45..f3051d7a 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -3141,7 +3141,6 @@ <translation id="5723508132121499792">Ei käynnissä olevia taustasovelluksia</translation> <translation id="5727728807527375859">Laajennukset, sovellukset ja teemat saattavat vahingoittaa tietokonettasi. Haluatko varmasti jatkaa?</translation> <translation id="5729712731028706266">&Näytä</translation> -<translation id="5731185123186077399">Personoidut Google-palvelut, esim. Google Pay</translation> <translation id="5731247495086897348">Liitä ja &siirry</translation> <translation id="5731409020711461763">1 uusi valokuva</translation> <translation id="5734362860645681824">Äänilaitteet</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index a730a6c..e2886525 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Walang tumatakbong apps sa background</translation> <translation id="5727728807527375859">Maaaring mapinsala ng mga extension, apps, at mga tema ang iyong computer. Sigurado ka bang gusto mong magpatuloy?</translation> <translation id="5729712731028706266">&Tingnan</translation> -<translation id="5731185123186077399">Mga naka-personalize na serbisyo ng Google tulad ng Google Pay</translation> <translation id="5731247495086897348">I-pa&ste at Umalis</translation> <translation id="5731409020711461763">1 bagong larawan</translation> <translation id="5734362860645681824">Komunikasyon</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index eed450e..cba70304 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Aucune application active en arrière plan</translation> <translation id="5727728807527375859">Les extensions, les applications et les thèmes peuvent endommager votre ordinateur. Voulez-vous vraiment continuer ?</translation> <translation id="5729712731028706266">&Afficher</translation> -<translation id="5731185123186077399">Des services Google personnalisés, tels que Google Pay</translation> <translation id="5731247495086897348">Coller l'URL et y a&ccéder</translation> <translation id="5731409020711461763">Une nouvelle photo</translation> <translation id="5734362860645681824">Communications</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index 0957ea7c..1d4ff86 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">તમારા ઉપકરણને વાપરવા માટે સરળ બનાવવા માટે ઍક્સેસિબિલિટી સુવિધાઓને સક્ષમ કરો.</translation> <translation id="1190144681599273207">આ ફાઇલને આનયન કરવું લગભગ <ph name="FILE_SIZE" /> મોબાઇલ ડેટાનો ઉપયોગ કરશે.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{તમારા કમ્પ્યુટરમાં સંગ્રહિત એક ફાઇલ ઍક્સેસ કરો}one{તમારા કમ્પ્યુટરમાં સંગ્રહિત # ફાઇલો ઍક્સેસ કરો}other{તમારા કમ્પ્યુટરમાં સંગ્રહિત # ફાઇલો ઍક્સેસ કરો}}</translation> +<translation id="1193273168751563528">મેનેજ કરવામાં આવેલ સત્ર દાખલ થાઓ</translation> <translation id="1195076408729068893">Smart Lock શરૂ કરવા માટે, તમારો પાસવર્ડ દાખલ કરો. આગલી વખતે, તમે <ph name="DEVICE_TYPE" />ને અનલૉક કરવા માટે તમારો ફોન વાપરી શકશો.</translation> <translation id="1195447618553298278">અજ્ઞાત ભૂલ.</translation> <translation id="119738088725604856">સ્ક્રીનશૉટ વિંડો</translation> @@ -1312,6 +1313,7 @@ <translation id="29488703364906173">આધુનિક વેબ માટે બનાવવામાં આવેલું, એક ઝડપી, સરળ અને સુરક્ષિત વેબ બ્રાઉઝર.</translation> <translation id="2951247061394563839">મધ્ય વિંડો</translation> <translation id="2958721676848865875">પૅક એક્સટેન્શનની ચેતવણી</translation> +<translation id="296026337010986570">થઈ થયું! નુકસાનકારક સૉફ્ટવેર કાઢી નાખ્યું. એક્સ્ટેંશન ફરી ચાલુ કરવા માટે, <a href="chrome://extensions">એક્સ્ટેંશન</a>ની મુલાકાત લો.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (એક્સ્ટેન્શન પ્રદાન કર્યું)</translation> <translation id="2961695502793809356">આગળ જવા માટે ક્લિક કરો, ઇતિહાસ જોવા માટે હોલ્ડ કરો</translation> <translation id="2963151496262057773">નીચેના પ્લગિન પ્રતિભાવવિહીન છે: <ph name="PLUGIN_NAME" />તમે તેને રોકવા માંગશો?</translation> @@ -1718,6 +1720,7 @@ <translation id="358796204584394954">જોડી બનાવવા માટે "<ph name="DEVICE_NAME" />" પર આ કોડ લખો:</translation> <translation id="3589766037099229847">અસુરક્ષિત કન્ટેન્ટ બ્લૉક</translation> <translation id="3590194807845837023">પ્રોફાઇલ અનલૉક કરો અને ફરીથી લોંચ કરો</translation> +<translation id="3590295622232282437">મેનેજ કરાયેલ સત્રમાં દાખલ થઈ રહ્યાં છીએ.</translation> <translation id="3592260987370335752">&વધુ જાણો</translation> <translation id="359283478042092570">Enter</translation> <translation id="3593965109698325041">પ્રમાણપત્રના નામની મર્યાદાઓ</translation> @@ -2662,6 +2665,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">મંજૂરી આપો</translation> <translation id="5045550434625856497">ખોટો પાસવર્ડ</translation> +<translation id="504561833207953641">હાલના બ્રાઉઝર સત્રમાં ખોલી રહ્યાં છીએ.</translation> <translation id="5047421709274785093">સાઇટને મોશન અને લાઇટ સેન્સરનો ઉપયોગ કરવાથી બ્લૉક કરો</translation> <translation id="5050042263972837708">જૂથનું નામ</translation> <translation id="5052499409147950210">સાઇટ સંપાદિત કરો</translation> @@ -2871,6 +2875,7 @@ <translation id="5341980496415249280">કૃપા કરીને રાહ જુઓ, પૅકિંગ કરીએ છીએ ...</translation> <translation id="5342091991439452114">PIN, ઓછામાં ઓછો <ph name="MINIMUM" /> અંકનો હોવો આવશ્યક છે</translation> <translation id="5352033265844765294">ટાઇમ સ્ટેમ્પિંગ</translation> +<translation id="5352285283572729470">આ સેટિંગ મેનેજ કરવામાં આવી છે</translation> <translation id="5353252989841766347">Chrome માંથી પાસવર્ડ્સનો નિકાસ કરો</translation> <translation id="5355097969896547230">ફરીથી શોધો</translation> <translation id="5355926466126177564">જ્યારે તમે ઑમ્નિબૉક્સથી શોધ કરો છો ત્યારે જે પૃષ્ઠ દર્શાવવામાં આવે છે તે <ph name="EXTENSION_NAME" /> એક્સટેન્શને બદલ્યું છે.</translation> @@ -3136,7 +3141,6 @@ <translation id="5723508132121499792">કોઈપણ પૃષ્ઠભૂમિ ઍપ્લિકેશન ચાલી રહી નથી</translation> <translation id="5727728807527375859">એક્સટેન્શન્સ, ઍપ્લિકેશન અને થીમ્સ તમારા કમ્પ્યુટરને નુકસાન પહોંચાડી શકે છે. શું તમે ખરેખર આગળ વધવા માંગો છો?</translation> <translation id="5729712731028706266">&જુઓ</translation> -<translation id="5731185123186077399">Google Pay જેવી વ્યક્તિગત કરેલી Google સેવાઓ</translation> <translation id="5731247495086897348">પે&સ્ટ કરો અને જાઓ</translation> <translation id="5731409020711461763">1 નવો ફોટો</translation> <translation id="5734362860645681824">સંચાર</translation> @@ -3781,6 +3785,7 @@ <translation id="6680650203439190394">રેટ કરો</translation> <translation id="6681668084120808868">ફોટો લો</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" ને અનઇન્સ્ટૉલ કરવામાં આવશે.</translation> +<translation id="6685083257944113180"><ph name="SINK_NAME" />, <ph name="SINK_STATUS" /> રોકો</translation> <translation id="668599234725812620">Google Play ખોલો</translation> <translation id="6686490380836145850">જમણી બાજુનાં ટૅબ્સ બંધ કરો</translation> <translation id="6686817083349815241">તમારો પાસવર્ડ સાચવો</translation> @@ -4261,6 +4266,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{તમામ URLને &નવી વિંડોમાં ખોલો}=1{URLને &નવી વિંડોમાં ખોલો}one{તમામ (#) URLને &નવી વિંડોમાં ખોલો}other{તમામ (#) URLને &નવી વિંડોમાં ખોલો}}</translation> <translation id="7434509671034404296">વિકાસકર્તા</translation> <translation id="7436921188514130341">અરેરે! નામ બદલતી વખતે એક ભૂલ આવી હતી.</translation> +<translation id="7441736921018636843">આ સેટિંગ બદલવા, સિંક પાસફ્રેઝ કાઢી નાખવા માટે <ph name="BEGIN_LINK" />સિંક રીસેટ કરો<ph name="END_LINK" /></translation> <translation id="7441830548568730290">અન્ય વપરાશકર્તાઓ</translation> <translation id="7442465037756169001">તમારું Hangouts Meet hardware સેટ કરવા માટે તૈયાર છે.</translation> <translation id="744341768939279100">એક નવી પ્રોફાઇલ બનાવો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index a61841f..00eba7b 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -3142,7 +3142,6 @@ <translation id="5723508132121499792">कोई पृष्ठभूमि ऐप्स संचालित नहीं हैं</translation> <translation id="5727728807527375859">एक्सटेंशन, ऐप्स , और थीम आपके कंप्यूटर को हानि पहुंचा सकते हैं. क्या आप वाकई जारी रखना चाहते हैं?</translation> <translation id="5729712731028706266">&देखें</translation> -<translation id="5731185123186077399">Google Pay जैसी दर्शकों के पसंद के मुताबिक Google सेवाएं</translation> <translation id="5731247495086897348">चिप&काएं और जाएं</translation> <translation id="5731409020711461763">1 नई फ़ोटो</translation> <translation id="5734362860645681824">संचार</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index fd32f80..e4314588 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Nema pokrenutih pozadinskih aplikacija</translation> <translation id="5727728807527375859">Proširenja, aplikacije i teme mogu naštetiti vašem računalu. Sigurno želite nastaviti?</translation> <translation id="5729712731028706266">&Prikaži</translation> -<translation id="5731185123186077399">Prilagođene Googleove usluge kao što je Google Pay</translation> <translation id="5731247495086897348">Za&lijepi i idi</translation> <translation id="5731409020711461763">1 nova fotografija</translation> <translation id="5734362860645681824">Komunikacije</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index e8dd9a7..1daeeab 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -3145,7 +3145,6 @@ <translation id="5723508132121499792">Nincs háttérben futó alkalmazás</translation> <translation id="5727728807527375859">A bővítmények, alkalmazások és témák esetleg károsíthatják számítógépét. Biztosan folytatja?</translation> <translation id="5729712731028706266">&Megtekintés</translation> -<translation id="5731185123186077399">Személyre szabott Google-szolgáltatások (pl. Google Pay)</translation> <translation id="5731247495086897348">Beille&sztés</translation> <translation id="5731409020711461763">1 új fotó</translation> <translation id="5734362860645681824">Kommunikáció</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index be05700..8e80959 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Tidak ada apl latar belakang yang sedang berjalan</translation> <translation id="5727728807527375859">Ekstensi, aplikasi, dan tema dapat membahayakan komputer. Yakin ingin lanjut?</translation> <translation id="5729712731028706266">&Lihat</translation> -<translation id="5731185123186077399">Layanan Google yang dipersonalisasi seperti Google Pay</translation> <translation id="5731247495086897348">Tem&pel dan Buka</translation> <translation id="5731409020711461763">1 foto baru</translation> <translation id="5734362860645681824">Komunikasi</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index 5adec183..d3a526a 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -3139,7 +3139,6 @@ <translation id="5723508132121499792">Nessuna applicazione in esecuzione in background</translation> <translation id="5727728807527375859">Estensioni, applicazioni e temi possono danneggiare il tuo computer. Continuare?</translation> <translation id="5729712731028706266">&Visualizza</translation> -<translation id="5731185123186077399">Servizi Google personalizzati come Google Pay</translation> <translation id="5731247495086897348">Incolla e vi&sita</translation> <translation id="5731409020711461763">1 nuova foto</translation> <translation id="5734362860645681824">Comunicazioni</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 93c7ec09..d5834a9 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -3141,7 +3141,6 @@ <translation id="5723508132121499792">אין יישומים פועלים ברקע</translation> <translation id="5727728807527375859">תוספים, Google Apps ועיצובים עלולים לפגוע במחשב שלך. האם אתה בטוח שברצונך להמשיך?</translation> <translation id="5729712731028706266">&הצג</translation> -<translation id="5731185123186077399">שירותים מותאמים אישית של Google, כמו Google Pay</translation> <translation id="5731247495086897348">הד&בק ועבור אל</translation> <translation id="5731409020711461763">תמונה חדשה אחת</translation> <translation id="5734362860645681824">תקשורת</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 0d544166..1bcbae0 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">ユーザー補助機能を有効にするとデバイスが使いやすくなります。</translation> <translation id="1190144681599273207">このファイルを取得すると、約 <ph name="FILE_SIZE" /> のモバイル データを使用します。</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{パソコンに保存されている 1 個のファイルにアクセスします}other{パソコンに保存されている # 個のファイルにアクセスします}}</translation> +<translation id="1193273168751563528">管理対象セッションを開始します</translation> <translation id="1195076408729068893">Smart Lock の使用を開始するには、パスワードを入力します。次回から、スマートフォンで <ph name="DEVICE_TYPE" /> のロックを解除できます。</translation> <translation id="1195447618553298278">不明なエラーです。</translation> <translation id="119738088725604856">スクリーンショット ウィンドウ</translation> @@ -201,7 +202,7 @@ <translation id="1280820357415527819">モバイル ネットワークを検索しています</translation> <translation id="1285320974508926690">このサイトは翻訳しない</translation> <translation id="1285484354230578868">Google ドライブ アカウントでのデータの保存</translation> -<translation id="1288037062697528143">読書灯は日の入り時刻に自動的にオンになります</translation> +<translation id="1288037062697528143">夜間モードは日の入り時刻に自動的にオンになります</translation> <translation id="1288300545283011870">読み上げのプロパティ</translation> <translation id="1293177648337752319">サイトのミュートを解除</translation> <translation id="1293264513303784526">USB-C デバイス(左側面のポート)</translation> @@ -1154,7 +1155,7 @@ <translation id="271033894570825754">新しいファイル</translation> <translation id="2714393097308983682">Google Play ストア</translation> <translation id="2715751256863167692">このアップグレードを行うと、Chromebook がリセットされ、現在のユーザーデータは削除されます。</translation> -<translation id="2718395828230677721">読書灯</translation> +<translation id="2718395828230677721">夜間モード</translation> <translation id="2718998670920917754">ウイルス対策ソフトウェアでウイルスが検出されました。</translation> <translation id="2719936478972253983">以下の Cookie がブロックされました</translation> <translation id="2721037002783622288"><ph name="SEARCH_ENGINE" /> で画像を検索(&S)</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">最新のウェブ環境に対応した高速、シンプル、安全なウェブブラウザです。</translation> <translation id="2951247061394563839">ウィンドウを中央に配置</translation> <translation id="2958721676848865875">拡張機能のパッケージ化に関する警告</translation> +<translation id="296026337010986570">有害なソフトウェアが削除されました。拡張機能をもう一度使用するには、<a href="chrome://extensions">拡張機能</a>のページにアクセスしてください。</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" />(期限延長済み)</translation> <translation id="2961695502793809356">クリックすると次に進みます。押したまま待つと履歴が表示されます。</translation> <translation id="2963151496262057773">プラグイン(<ph name="PLUGIN_NAME" />)は応答していません。強制終了しますか?</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">ペア設定するには「<ph name="DEVICE_NAME" />」で次のコードを入力してください:</translation> <translation id="3589766037099229847">安全でないコンテンツがブロックされました</translation> <translation id="3590194807845837023">プロフィールのロックを解除して再起動</translation> +<translation id="3590295622232282437">管理対象セッションを開始しています。</translation> <translation id="3592260987370335752">詳細(&L)</translation> <translation id="359283478042092570">ログイン</translation> <translation id="3593965109698325041">証明書名の制約</translation> @@ -2108,7 +2111,7 @@ <translation id="4130207949184424187">この拡張機能により、アドレスバーから検索したときに表示されるページが変更されました。</translation> <translation id="413121957363593859">コンポーネント</translation> <translation id="4131410914670010031">白黒</translation> -<translation id="4136203100490971508">読書灯は日の出時刻に自動的にオフになります</translation> +<translation id="4136203100490971508">夜間モードは日の出時刻に自動的にオフになります</translation> <translation id="4138267921960073861">ログイン ページにユーザー名と写真を表示する</translation> <translation id="4144218403971135344">動画の品質を向上させ、バッテリー消費を抑えます。動画はキャスト対応のスクリーンでのみ再生されます。</translation> <translation id="4146026355784316281">常にシステム ビューアで開く</translation> @@ -2666,6 +2669,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">許可</translation> <translation id="5045550434625856497">パスワードが正しくありません</translation> +<translation id="504561833207953641">既存のブラウザ セッションで開いています。</translation> <translation id="5047421709274785093">サイトによるモーション センサーと光センサーの使用をブロックする</translation> <translation id="5050042263972837708">グループ名</translation> <translation id="5052499409147950210">サイトの編集</translation> @@ -2875,6 +2879,7 @@ <translation id="5341980496415249280">圧縮しています。しばらくお待ちください...</translation> <translation id="5342091991439452114">PIN は <ph name="MINIMUM" /> 桁以上で指定してください</translation> <translation id="5352033265844765294">タイム スタンプ</translation> +<translation id="5352285283572729470">この設定は管理されています</translation> <translation id="5353252989841766347">Chrome からパスワードをエクスポート</translation> <translation id="5355097969896547230">もう一度検索する</translation> <translation id="5355926466126177564">拡張機能「<ph name="EXTENSION_NAME" />」により、アドレスバーから検索したときに表示されるページが変更されました。</translation> @@ -3138,7 +3143,6 @@ <translation id="5723508132121499792">実行中のバックグラウンド アプリはありません</translation> <translation id="5727728807527375859">拡張機能、アプリ、テーマはパソコンに悪影響を与える可能性があります。処理を続けてもよろしいですか?</translation> <translation id="5729712731028706266">表示(&V)</translation> -<translation id="5731185123186077399">カスタマイズされた Google サービス(Google Pay など)を利用できます</translation> <translation id="5731247495086897348">貼り付けて実行(&S)</translation> <translation id="5731409020711461763">1 件の新しい写真</translation> <translation id="5734362860645681824">通信</translation> @@ -3783,6 +3787,7 @@ <translation id="6680650203439190394">速度</translation> <translation id="6681668084120808868">写真を撮る</translation> <translation id="6681964764822470072">「<ph name="APP_NAME" />」をアンインストールします。</translation> +<translation id="6685083257944113180"><ph name="SINK_NAME" /> による <ph name="SINK_STATUS" /> を停止します</translation> <translation id="668599234725812620">Google Play を開く</translation> <translation id="6686490380836145850">右側のタブを閉じる</translation> <translation id="6686817083349815241">パスワードを保存</translation> @@ -4264,6 +4269,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{すべてを新しいウィンドウで開く(&N)}=1{新しいウィンドウで開く(&N)}other{すべて(# 件)を新しいウィンドウで開く(&N)}}</translation> <translation id="7434509671034404296">開発 / 管理</translation> <translation id="7436921188514130341">名前の変更中にエラーが発生しました。</translation> +<translation id="7441736921018636843">この設定を変更するには、<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />して同期パスフレーズを削除します</translation> <translation id="7441830548568730290">他のユーザー</translation> <translation id="7442465037756169001">Hangouts Meet ハードウェアを設定できます。</translation> <translation id="744341768939279100">新しいプロフィールを作成</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index e6cb6e4..927f636 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -3141,7 +3141,6 @@ <translation id="5723508132121499792">ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಚಾಲನೆಯಲ್ಲಿಲ್ಲ</translation> <translation id="5727728807527375859">ವಿಸ್ತರಣೆಗಳು, ಅಪ್ಲೀಕೇಶನ್ಗಳು ಮತ್ತು ಥೀಮ್ಗಳು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅನ್ನು ಹಾನಿಗೊಳಿಸಬಹುದು. ನೀವು ಮುಂದುವರಿಯುವುದು ಖಚಿತವೇ? </translation> <translation id="5729712731028706266">&ವೀಕ್ಷಣೆ</translation> -<translation id="5731185123186077399">Google Pay ನಂತಹ ವೈಯಕ್ತಿಕಗೊಳಿಸಿದ Google ಸೇವೆಗಳು</translation> <translation id="5731247495086897348">ಅಂ&ಟಿಸಿ ಮತ್ತು ಹೋಗಿ</translation> <translation id="5731409020711461763">1 ಹೊಸ ಫೋಟೋ</translation> <translation id="5734362860645681824">ಸಂವಹನಗಳು</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 573de35..61cc83d6d 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">기기를 보다 간편하게 사용할 수 있도록 접근성 기능을 사용합니다.</translation> <translation id="1190144681599273207">이 파일을 가져오는 데 약 <ph name="FILE_SIZE" />의 모바일 데이터가 사용됩니다.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{컴퓨터에 저장된 파일 1개에 액세스}other{컴퓨터에 저장된 파일 #개에 액세스}}</translation> +<translation id="1193273168751563528">관리 세션 시작</translation> <translation id="1195076408729068893">Smart Lock을 시작하려면 비밀번호를 입력하세요. 다음번에는 휴대전화를 사용하여 <ph name="DEVICE_TYPE" />을(를) 잠금 해제할 수 있습니다.</translation> <translation id="1195447618553298278">알 수 없는 오류</translation> <translation id="119738088725604856">스크린샷 창</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">최신 웹에 맞게 구축된 빠르고 단순하며 안전한 웹 브라우저입니다.</translation> <translation id="2951247061394563839">창을 중앙에 맞춤</translation> <translation id="2958721676848865875">확장 프로그램 패키지 경고</translation> +<translation id="296026337010986570">유해한 소프트웨어 삭제가 완료되었습니다. 확장 프로그램을 다시 사용 설정하려면 <a href="chrome://extensions">확장 프로그램</a>으로 이동하세요.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" />(확장 프로그램에서 제공)</translation> <translation id="2961695502793809356">클릭하면 다음 페이지로 가고 누르고 있으면 방문 기록이 나타납니다.</translation> <translation id="2963151496262057773">다음 플러그인에서 응답이 없습니다. <ph name="PLUGIN_NAME" />을(를) 중단하시겠습니까?</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">'<ph name="DEVICE_NAME" />'에서 이 코드를 입력하여 다음을 페어링:</translation> <translation id="3589766037099229847">안전하지 않은 콘텐츠가 차단됨</translation> <translation id="3590194807845837023">프로필 잠금 해제 및 다시 시작</translation> +<translation id="3590295622232282437">관리 세션을 시작합니다.</translation> <translation id="3592260987370335752">자세히 알아보기(&L)</translation> <translation id="359283478042092570">로그인</translation> <translation id="3593965109698325041">인증서 이름 제약조건</translation> @@ -2664,6 +2667,7 @@ <translation id="5039512255859636053">$1TB</translation> <translation id="5039804452771397117">허용</translation> <translation id="5045550434625856497">비밀번호가 잘못되었습니다.</translation> +<translation id="504561833207953641">기존 브라우저 세션에서 여는 중입니다.</translation> <translation id="5047421709274785093">사이트에서 모션 및 조도 센서 사용 차단</translation> <translation id="5050042263972837708">그룹 이름</translation> <translation id="5052499409147950210">사이트 수정</translation> @@ -2873,6 +2877,7 @@ <translation id="5341980496415249280">잠시 기다려 주세요. 압축 중입니다...</translation> <translation id="5342091991439452114">PIN은 <ph name="MINIMUM" />자리 이상이어야 합니다.</translation> <translation id="5352033265844765294">시간 기록</translation> +<translation id="5352285283572729470">관리되는 설정입니다.</translation> <translation id="5353252989841766347">Chrome에서 비밀번호 내보내기</translation> <translation id="5355097969896547230">다시 찾기</translation> <translation id="5355926466126177564">검색주소창에서 검색하면 표시되는 페이지가 '<ph name="EXTENSION_NAME" />' 확장 프로그램으로 인해 변경되었습니다.</translation> @@ -3136,7 +3141,6 @@ <translation id="5723508132121499792">실행 중인 백그라운드 앱 없음</translation> <translation id="5727728807527375859">확장 프로그램, 애플리케이션, 테마로 인해 컴퓨터가 손상될 수 있습니다. 계속하시겠습니까?</translation> <translation id="5729712731028706266">보기(&V)</translation> -<translation id="5731185123186077399">Google Pay와 같은 맞춤형 Google 서비스</translation> <translation id="5731247495086897348">붙여넣어 바로가기(&S)</translation> <translation id="5731409020711461763">새로운 사진 1장</translation> <translation id="5734362860645681824">커뮤니케이션</translation> @@ -3781,6 +3785,7 @@ <translation id="6680650203439190394">평가</translation> <translation id="6681668084120808868">사진 찍기</translation> <translation id="6681964764822470072">'<ph name="APP_NAME" />'이(가) 제거됩니다.</translation> +<translation id="6685083257944113180">중지, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Google Play 열기</translation> <translation id="6686490380836145850">우측 탭 닫기</translation> <translation id="6686817083349815241">비밀번호 저장</translation> @@ -4261,6 +4266,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{모두 새 창에서 열기(N)}=1{새 창에서 열기(N)}other{#개 모두 새 창에서 열기(N)}}</translation> <translation id="7434509671034404296">개발자 정보</translation> <translation id="7436921188514130341">이름 변경 중에 오류가 발생했습니다.</translation> +<translation id="7441736921018636843">이 설정을 변경하려면 <ph name="BEGIN_LINK" />동기화를 재설정<ph name="END_LINK" />하여 동기화 암호를 삭제하세요.</translation> <translation id="7441830548568730290">다른 사용자</translation> <translation id="7442465037756169001">행아웃 미팅 하드웨어 설정 준비가 완료되었습니다.</translation> <translation id="744341768939279100">새 프로필 만들기</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index f27ffe6..5e5d7b9 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Nėra vykdomų fono programų</translation> <translation id="5727728807527375859">Plėtiniai, taikomosios programos ir temos gali pakenkti kompiuteriui. Ar tikrai norite tęsti?</translation> <translation id="5729712731028706266">Žiūrėti</translation> -<translation id="5731185123186077399">Suasmenintos „Google“ paslaugos, pvz., „Google Pay“</translation> <translation id="5731247495086897348">Įk&lijuoti ir pradėti</translation> <translation id="5731409020711461763">1 nauj. nuotr.</translation> <translation id="5734362860645681824">Ryšiai</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index cc0928b0..312c3b3 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Iespējojiet pieejamības funkcijas, lai jūsu ierīce kļūtu vienkāršāk lietojama.</translation> <translation id="1190144681599273207">Izgūstot šo failu, tiks izmantoti aptuveni <ph name="FILE_SIZE" /> mobilo datu.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Piekļuve vienam datorā saglabātajam failam}zero{Piekļuve # datorā saglabātajiem failiem}one{Piekļuve # datorā saglabātajam failam}other{Piekļuve # datorā saglabātajiem failiem}}</translation> +<translation id="1193273168751563528">Pievienoties pārvaldītai sesijai</translation> <translation id="1195076408729068893">Lai aktivizētu Smart Lock, ievadiet paroli. Nākamajā reizē varēsiet izmantot tālruni, lai atbloķētu savu ierīci (<ph name="DEVICE_TYPE" />).</translation> <translation id="1195447618553298278">Nezināma kļūda.</translation> <translation id="119738088725604856">Ekrānuzņēmuma logs</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">Ātrs, vienkāršs un drošs tīmekļa pārlūks, kas izstrādāts modernam tīmeklim.</translation> <translation id="2951247061394563839">Centrēt logu</translation> <translation id="2958721676848865875">Paplašinājuma pakošanas brīdinājums</translation> +<translation id="296026337010986570">Gatavs! Kaitīgā programmatūra ir noņemta. Lai atkal ieslēgtu paplašinājumus, dodieties uz lapu <a href="chrome://extensions">Paplašinājumi</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (norādīts paplašinājumā)</translation> <translation id="2961695502793809356">Nospiediet, lai dotos uz priekšu, paturiet, lai redzētu vēsturi</translation> <translation id="2963151496262057773">Šis spraudnis neatbild: <ph name="PLUGIN_NAME" />. Vai vēlaties to apturēt?</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">Lai izveidotu savienojumu pārī, ierīcē “<ph name="DEVICE_NAME" />” ievadiet šo kodu:</translation> <translation id="3589766037099229847">Nedrošais saturs bloķēts</translation> <translation id="3590194807845837023">Atbloķēt profilu un restartēt</translation> +<translation id="3590295622232282437">Notiek pievienošanās pārvaldītai sesijai.</translation> <translation id="3592260987370335752">&Uzziniet vairāk</translation> <translation id="359283478042092570">Ievadīt</translation> <translation id="3593965109698325041">Sertifikāta nosaukuma ierobežojumi</translation> @@ -2666,6 +2669,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Atļaut</translation> <translation id="5045550434625856497">Nepareiza parole</translation> +<translation id="504561833207953641">Notiek atvēršana esošā pārlūka sesijā.</translation> <translation id="5047421709274785093">Neļaut vietnēm izmantot kustību un gaismas sensorus</translation> <translation id="5050042263972837708">Grupas nosaukums</translation> <translation id="5052499409147950210">Vietnes rediģēšana</translation> @@ -2875,6 +2879,7 @@ <translation id="5341980496415249280">Lūdzu, uzgaidiet, notiek pakotnes izveide...</translation> <translation id="5342091991439452114">PIN kodā ir jābūt vismaz <ph name="MINIMUM" /> cipariem.</translation> <translation id="5352033265844765294">Laikspiedola uzlikšana</translation> +<translation id="5352285283572729470">Šis iestatījums tiek pārvaldīts</translation> <translation id="5353252989841766347">Paroļu eksportēšana no pārlūka Chrome</translation> <translation id="5355097969896547230">Atrast vēlreiz</translation> <translation id="5355926466126177564">Paplašinājums “<ph name="EXTENSION_NAME" />” mainīja iestatījumu, kura lapa tiek parādīta, kad veicat meklēšanu, izmantojot universālo lodziņu.</translation> @@ -3138,7 +3143,6 @@ <translation id="5723508132121499792">Nedarbojas neviena fona lietotne</translation> <translation id="5727728807527375859">Paplašinājumi, lietojumprogrammas un motīvi var kaitēt datoram. Vai tiešām vēlaties turpināt?</translation> <translation id="5729712731028706266">&Skatīt</translation> -<translation id="5731185123186077399">Google pakalpojumu, piemēram, Google Pay personalizēšana</translation> <translation id="5731247495086897348">Ielīmēt un dotie&s</translation> <translation id="5731409020711461763">1 jauns fotoattēls</translation> <translation id="5734362860645681824">Saziņa</translation> @@ -3783,6 +3787,7 @@ <translation id="6680650203439190394">Ātrums</translation> <translation id="6681668084120808868">Uzņemt fotoattēlu</translation> <translation id="6681964764822470072">Lietotne <ph name="APP_NAME" /> tiks atinstalēta.</translation> +<translation id="6685083257944113180">Apturēt, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Atvērt pakalpojumu Google Play</translation> <translation id="6686490380836145850">Aizvērt cilnes pa labi</translation> <translation id="6686817083349815241">Saglabājiet savu paroli</translation> @@ -4263,6 +4268,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Atvērt visas jaunā logā}=1{Atvērt jaunā logā}zero{Atvērt visas (#) jaunā logā}one{Atvērt visas (#) jaunā logā}other{Atvērt visas (#) jaunā logā}}</translation> <translation id="7434509671034404296">Izstrādātājs</translation> <translation id="7436921188514130341">Diemžēl pārdēvēšanas laikā radās kļūda.</translation> +<translation id="7441736921018636843">Lai mainītu šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" />, lai noņemtu sinhronizācijas ieejas frāzi.</translation> <translation id="7441830548568730290">Citi lietotāji</translation> <translation id="7442465037756169001">Jūsu Hangouts Meet hardware ir gatavs iestatīšanai.</translation> <translation id="744341768939279100">Izveidot jaunu profilu</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index dfdc545..d923499 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">നിങ്ങളുടെ ഉപകരണം ഉപയോഗിക്കുന്നത് എളുപ്പമാക്കുന്നതിന് ഉപയോഗസഹായി സവിശേഷതകൾ പ്രവർത്തനക്ഷമമാക്കുക.</translation> <translation id="1190144681599273207">ഈ ഫയൽ ലഭ്യമാക്കുന്നതിന് ഏകദേശം <ph name="FILE_SIZE" /> മൊബൈൽ ഡാറ്റ ഉപയോഗിക്കും.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ സംഭരിച്ചിരിക്കുന്ന ഒരു ഫയൽ ആക്സസ് ചെയ്യുക}other{നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ സംഭരിച്ചിരിക്കുന്ന # ഫയലുകൾ ആക്സസ് ചെയ്യുക}}</translation> +<translation id="1193273168751563528">മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ നല്കുക</translation> <translation id="1195076408729068893">Smart Lock ആരംഭിക്കുന്നതിന്, നിങ്ങളുടെ പാസ്വേഡ് നൽകുക. അടുത്ത തവണ, <ph name="DEVICE_TYPE" /> എന്നത് അൺലോക്കുചെയ്യാൻ നിങ്ങളുടെ ഫോൺ ഉപയോഗിക്കാനാകും.</translation> <translation id="1195447618553298278">അജ്ഞാത പിശക്.</translation> <translation id="119738088725604856">സ്ക്രീൻഷോട്ട് വിൻഡോ</translation> @@ -249,7 +250,7 @@ <translation id="1358741672408003399">സ്പെല്ലിംഗും വ്യാകരണവും</translation> <translation id="1361164813881551742">നേരിട്ട് ചേർക്കുക</translation> <translation id="1361655923249334273">ഉപയോഗിക്കാത്ത</translation> -<translation id="1361872463926621533">ആരംഭത്തിൽ ശബ്ദം പ്ലേ ചെയ്യുക</translation> +<translation id="1361872463926621533">ആരംഭിക്കുമ്പോൾ ശബ്ദം പ്ലേ ചെയ്യുക</translation> <translation id="1363028406613469049">ട്രാക്കുചെയ്യുക</translation> <translation id="1367951781824006909">ഒരു ഫയല് തിരഞ്ഞെടുക്കുക</translation> <translation id="1368265273904755308">പ്രശ്നം റിപ്പോര്ട്ടുചെയ്യുക</translation> @@ -569,7 +570,7 @@ <translation id="1817310072033858383"><ph name="DEVICE_TYPE" /> ഉപകരണത്തിനായി ഒരു Smart Lock സജ്ജമാക്കുക</translation> <translation id="1817871734039893258">Microsoft File Recovery</translation> <translation id="1818007989243628752"><ph name="USERNAME" /> എന്നതിന്റെ പാസ്വേഡ് ഇല്ലാതാക്കുക</translation> -<translation id="1818913467757368489">ലോഗ് അപ്ലോഡ് നടന്നുകൊണ്ടിരിക്കുന്നു.</translation> +<translation id="1818913467757368489">ലോഗ് അപ്ലോഡ് പുരോഗമിക്കുന്നു.</translation> <translation id="1819721979226826163">ആപ്പ് അറിയിപ്പുകൾ > Google Play സേവനങ്ങൾ ടാപ്പ് ചെയ്യുക.</translation> <translation id="1826516787628120939">പരിശോധിക്കുന്നു</translation> <translation id="1828378091493947763">ഈ പ്ലഗിൻ ഈ ഉപകരണത്തിൽ പിന്തുണയ്ക്കുന്നില്ല</translation> @@ -625,7 +626,7 @@ <translation id="1897762215429052132">നെറ്റ്വർക്ക് കണക്ഷൻ, ഭാഷ, കീബോർഡ് ലേഔട്ട് എന്നിവ സജ്ജമാക്കുക...</translation> <translation id="1901303067676059328">എല്ലാം &തിരഞ്ഞെടുക്കൂ</translation> <translation id="1902576642799138955">സാധുതാ കാലാവധി</translation> -<translation id="1904518222538904133">നിങ്ങളുടെ കാർഡുകളിൽ 1 മാത്രമേ ഈ ഉപകരണത്തിൽ ഉപയോഗിക്കാനാകൂ</translation> +<translation id="1904518222538904133">നിങ്ങളുടെ കാർഡുകളിൽ ഒന്ന് മാത്രമേ ഈ ഉപകരണത്തിൽ ഉപയോഗിക്കാനാവൂ</translation> <translation id="1905375423839394163">Chromebook ഉപകരണ നാമം</translation> <translation id="1905710495812624430">അനുവദനീയമായ പരമാവധി ശ്രമങ്ങൾ നടത്തിക്കഴിഞ്ഞു.</translation> <translation id="1909880997794698664">കിയോസ്ക് മോഡിൽ ഈ ഉപകരണം ശാശ്വതമായി നിലനിർത്താൻ നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടെന്ന് തീർച്ചയാണോ?</translation> @@ -1028,7 +1029,7 @@ <translation id="2534460670861217804">സുരക്ഷിത HTTP പ്രോക്സി</translation> <translation id="253557089021624350">കണക്ഷൻ നിലനിർത്താനുള്ള ആക്റ്റിവിറ്റികളുടെ എണ്ണം</translation> <translation id="2538361623464451692">സമന്വയം പ്രവർത്തനരഹിതമാക്കി</translation> -<translation id="2539876824180063438">നിങ്ങളുടെ വിരലടയാളത്തിന്റെ വിവിധ ഭാഗങ്ങൾ ചേർക്കാൻ ചൂണ്ടുവിരൽ പതുക്കെ നീക്കുക.</translation> +<translation id="2539876824180063438">നിങ്ങളുടെ ഫിംഗർപ്രിന്റിന്റെ വിവിധ ഭാഗങ്ങൾ ചേർക്കാൻ, ചൂണ്ടുവിരൽ പതുക്കെ നീക്കുക.</translation> <translation id="2541002089857695151">പൂർണ്ണസ്ക്രീൻ കാസ്റ്റ് ചെയ്യൽ ഓപ്റ്റിമൈസ് ചെയ്യണോ?</translation> <translation id="2542049655219295786">Google പട്ടിക</translation> <translation id="2544853746127077729">നെറ്റ്വർക്ക്, പ്രാമാണീകരണ സർട്ടിഫിക്കറ്റ് നിരസിച്ചു</translation> @@ -1313,6 +1314,7 @@ <translation id="29488703364906173">ആധുനിക വെബിനായി സൃഷ്ടിച്ചിരിക്കുന്ന വേഗതയാർന്നതും ലളിതവും സുരക്ഷിതവുമായ വെബ് ബ്രൗസർ.</translation> <translation id="2951247061394563839">വിൻഡോയുടെ മധ്യത്തിൽ</translation> <translation id="2958721676848865875">പായ്ക്ക് വിപുലീകരണ മുന്നറിയിപ്പ്</translation> +<translation id="296026337010986570">പൂര്ത്തിയായി! ദോഷകരമായ സോഫ്റ്റ്വെയര് നീക്കം ചെയ്തു. വിപുലീകരണങ്ങള് വീണ്ടും ഓണാക്കാന്, <a href="chrome://extensions">വിപുലീകരണങ്ങള്</a> സന്ദര്ശിക്കുക.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (വിപുലീകരണം നൽകി)</translation> <translation id="2961695502793809356">മുന്നോട്ട് പോകാൻ ക്ലിക്കുചെയ്യുക, ചരിത്രം കാണാന് ഹോള്ഡ് ചെയ്യുക</translation> <translation id="2963151496262057773">ഇനിപ്പറയുന്ന പ്ലഗിൻ പ്രതികരിക്കാത്തതാണ്: <ph name="PLUGIN_NAME" />അത് നിർത്തണോ?</translation> @@ -1448,7 +1450,7 @@ <translation id="3154429428035006212">ഒരു മാസത്തിലേറെയായി ഓഫ്ലൈനിലാണ്</translation> <translation id="3156531245809797194">Chrome ഉപയോഗിക്കാൻ സൈൻ ഇൻ ചെയ്യുക</translation> <translation id="3157931365184549694">പുനഃസ്ഥാപിക്കുക</translation> -<translation id="3158033540161634471">നിങ്ങളുടെ വിരലടയാളം സജ്ജമാക്കുക</translation> +<translation id="3158033540161634471">നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് സജ്ജമാക്കുക</translation> <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (ഹാർഡ്വെയർ പിന്തുണയുള്ളത്)</translation> <translation id="316125635462764134">അപ്ലിക്കേഷൻ നിക്കം ചെയ്യുക</translation> <translation id="3161522574479303604">എല്ലാ ഭാഷകളും</translation> @@ -1688,7 +1690,7 @@ <translation id="3534879087479077042">ഒരു സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവ് എന്നാലെന്ത്?</translation> <translation id="3538066758857505094">Linux അൺഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പിശക്. വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="354060433403403521">AC അഡാപ്റ്റർ</translation> -<translation id="354068948465830244">ഇതിന് സൈറ്റ് ഡാറ്റ വായിക്കാനും മാറ്റാനുമാകും</translation> +<translation id="354068948465830244">ഇതിന് സൈറ്റ് ഡാറ്റ വായിക്കാനും മാറ്റാനുമാവും</translation> <translation id="3541661933757219855">മറയ്ക്കുന്നതിനായി Ctrl+Alt+/ അല്ലെങ്കില് Escape ടൈപ്പ് ചെയ്യുക</translation> <translation id="3543393733900874979">അപ്ഡേറ്റ് പരാജയപ്പെട്ടു (പിശക്: <ph name="ERROR_NUMBER" />)</translation> <translation id="3543597750097719865">SHA-512 ഉള്ള X9.62 ECDSA സിഗ്നേച്ചർ</translation> @@ -1719,6 +1721,7 @@ <translation id="358796204584394954">ജോടിയാക്കുന്നതിന് "<ph name="DEVICE_NAME" />" എന്നതിൽ ഈ കോഡ് ടൈപ്പുചെയ്യുക:</translation> <translation id="3589766037099229847">സുരക്ഷിതമല്ലാത്ത ഉള്ളടക്കം ബ്ലോക്ക് ചെയ്തു</translation> <translation id="3590194807845837023">പ്രൊഫൈൽ അൺലോക്കുചെയ്ത് വീണ്ടും സമാരംഭിക്കുക</translation> +<translation id="3590295622232282437">മാനേജ് ചെയ്യപ്പെടുന്ന സെഷനില് പ്രവേശിക്കുന്നു.</translation> <translation id="3592260987370335752">&കൂടുതലറിയുക</translation> <translation id="359283478042092570">നൽകുക</translation> <translation id="3593965109698325041">സര്ട്ടിഫിക്കറ്റ് നാമ നിയന്ത്രണങ്ങള്</translation> @@ -1767,7 +1770,7 @@ <translation id="3645372836428131288">ഫിംഗർപ്രിന്റിന്റെ മറ്റൊരു ഭാഗം പകർത്താൻ ചെറുതായി നീക്കുക.</translation> <translation id="3648348069317717750"><ph name="USB_DEVICE_NAME" /> കണ്ടെത്തി</translation> <translation id="3649138363871392317">ഫോട്ടോ എടുത്തു</translation> -<translation id="3650845953328929506">ലോഗ് അപ്ലോഡ് ബാക്കിയാണ്.</translation> +<translation id="3650845953328929506">ലോഗ് അപ്ലോഡ് തീർപ്പാക്കിയിട്ടില്ല.</translation> <translation id="3650952250015018111">ആക്സസ് ചെയ്യാൻ "<ph name="APP_NAME" />" ആപ്പിനെ അനുവദിക്കുക:</translation> <translation id="3651488188562686558">Wi-Fi-യിൽ നിന്ന് വിച്ഛേദിക്കുക</translation> <translation id="3652817283076144888">സമാരംഭിക്കുന്നു</translation> @@ -1919,7 +1922,7 @@ <translation id="3856800405688283469">സമയ മേഖല തിരഞ്ഞെടുക്കുക</translation> <translation id="3857228364945137633">നിങ്ങളുടെ ഫോൺ സമീപത്തുള്ളപ്പോൾ, പാസ്വേഡ് ഇല്ലാതെ <ph name="DEVICE_TYPE" /> അൺലോക്കുചെയ്യുന്നതിന് Smart Lock പരീക്ഷിക്കുക.</translation> <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation> -<translation id="3857807444929313943">ഉയർത്തുക, വീണ്ടും സ്പർശിക്കുക</translation> +<translation id="3857807444929313943">വിരൽ ഉയർത്തി, വീണ്ടും സ്പർശിക്കുക</translation> <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: സമന്വയം താൽക്കാലികമായി നിർത്തി</translation> <translation id="3860381078714302691">Hangouts Meet-ലേക്ക് സ്വാഗതം</translation> <translation id="3861241522664181545">പേജ് താൽക്കാലികമായി നിർത്തി.</translation> @@ -1938,7 +1941,7 @@ <translation id="3873315167136380065">ഇത് ഓണാക്കാൻ, നിങ്ങളുടെ സമന്വയിപ്പിച്ച പാസ്ഫ്രെയ്സ് നീക്കം ചെയ്യാൻ <ph name="BEGIN_LINK" />സമന്വയം പുനഃസജ്ജമാക്കുക<ph name="END_LINK" /></translation> <translation id="3878840326289104869">സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിനെ സൃഷ്ടിക്കുന്നു</translation> <translation id="3879748587602334249">ഡൗൺലോഡ് മാനേജർ</translation> -<translation id="3885455691202481064">നിങ്ങളുടെ ചൂണ്ടുവിരൽ കൊണ്ട് സെൻസറിൽ സ്പർശിക്കുക. ഇത് നിങ്ങളുടെ Chromebook-ന്റെ മുകളിൽ ഇടത് വശത്തുണ്ട്.</translation> +<translation id="3885455691202481064">നിങ്ങളുടെ ചൂണ്ടുവിരൽ ഉപയോഗിച്ച് സെൻസറിൽ സ്പർശിക്കുക. ഇത് നിങ്ങളുടെ Chromebook-ന്റെ മുകളിൽ ഇടത് വശത്താണ് ഉള്ളത്.</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ഉപയോഗിച്ച് കുറിപ്പുകൾ എടുക്കുന്നു</translation> <translation id="3892414795099177503">OpenVPN / L2TP ചേർക്കുക...</translation> <translation id="3893536212201235195">നിങ്ങളുടെ ഉപയോഗസഹായിയുടെ ക്രമീകരണങ്ങൾ വായിച്ച് മാറ്റുക</translation> @@ -1990,7 +1993,7 @@ <translation id="3950820424414687140">സൈൻ ഇൻ</translation> <translation id="3954354850384043518">പുരോഗതിയിലാണ്</translation> <translation id="3954469006674843813"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> ഹേർട്സ്)</translation> -<translation id="3954953195017194676">നിങ്ങൾക്ക് സമീപകാലത്ത് ക്യാപ്ചർചെയ്ത WebRTC ഇവന്റ് ലോഗുകളൊന്നുമില്ല.</translation> +<translation id="3954953195017194676">നിങ്ങൾക്ക്, അടുത്തിടെ രേഖപ്പെടുത്തിയ WebRTC ഇവന്റ് ലോഗുകളൊന്നുമില്ല.</translation> <translation id="3955193568934677022">പരിരക്ഷിത ഉള്ളടക്കം പ്ലേ ചെയ്യാൻ സൈറ്റുകളെ അനുവദിക്കുക (ശുപാർശ ചെയ്തിരിക്കുന്നു)</translation> <translation id="3956702100721821638">Google Play-യിൽ കണക്റ്റ് ചെയ്യാനായില്ല</translation> <translation id="3958088479270651626">ബുക്ക്മാർക്കുകളും ക്രമീകരണവും ഇംപോർട്ട് ചെയ്യുക</translation> @@ -2336,7 +2339,7 @@ <translation id="4555769855065597957">ഷാഡോ</translation> <translation id="4556110439722119938">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ഉപയോഗിക്കുന്നതിന് ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവയെ Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കുന്നതാണ്</translation> <translation id="4558426062282641716">യാന്ത്രിക സമാരംഭിക്കൽ അനുമതി അഭ്യർത്ഥിച്ചു</translation> -<translation id="4558491878126948419"><ph name="DEVICE_TYPE" /> നുറുങ്ങുകളും Google ഉൽപ്പന്നങ്ങളെക്കുറിച്ചുള്ള അപ്ഡേറ്റുകളും നേടുകയും ഫീഡ്ബാക്ക് പങ്കിടുകയും ചെയ്യുക. എപ്പോൾ വേണമെങ്കിലും അൺസബ്സ്ക്രൈബ് ചെയ്യാം.</translation> +<translation id="4558491878126948419"><ph name="DEVICE_TYPE" /> നുറുങ്ങുകളും Google ഉൽപ്പന്നങ്ങളെക്കുറിച്ചുള്ള അപ്ഡേറ്റുകളും നേടുകയും ഫീഡ്ബാക്ക് പങ്കിടുകയും ചെയ്യുക. ഏത് സമയത്തും വരിക്കാരല്ലാതാവാം.</translation> <translation id="4559617833001311418">നിങ്ങളുടെ ചലന സെൻസർ അല്ലെങ്കിൽ വെളിച്ച സെൻസർ ഈ സൈറ്റ് ആക്സസ് ചെയ്യുന്നു.</translation> <translation id="4562155214028662640">വിരലടയാളം ചേർക്കുക</translation> <translation id="4563880231729913339">വിരൽ 3</translation> @@ -2600,7 +2603,7 @@ <translation id="4945444280533270988">Smart Lock ഓണാണ്</translation> <translation id="4953689047182316270">ഉപയോഗസഹായി ഇവന്റുകളോട് പ്രതികരിക്കുക</translation> <translation id="4953808748584563296">ഡിഫോൾട്ടായ ഓറഞ്ച് അവതാർ</translation> -<translation id="4955710816792587366">പിൻ തിരഞ്ഞെടുക്കുക</translation> +<translation id="4955710816792587366">നിങ്ങളുടെ പിൻ തിരഞ്ഞെടുക്കുക</translation> <translation id="4955814292505481804">വാർഷികം</translation> <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> സമന്വയവുമായി ബന്ധപ്പെട്ട ഫീച്ചറുകൾ മാത്രം പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="4959262764292427323">പാസ്വേഡുകൾ നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിക്കുന്നതിനാൽ, ഏത് ഉപകരണത്തിലും അവ നിങ്ങൾക്ക് ഉപയോഗിക്കാനാവും</translation> @@ -2662,6 +2665,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">അനുവദിക്കൂ</translation> <translation id="5045550434625856497">ശരിയല്ലാത്ത രഹസ്യവാക്ക്</translation> +<translation id="504561833207953641">നിലവിലുള്ള ബ്രൗസര് സെഷനില് തുറക്കുന്നു.</translation> <translation id="5047421709274785093">ചലന സെൻസറുകളും വെളിച്ച സെൻസറുകളും ഉപയോഗിക്കുന്നതിൽ നിന്ന് സൈറ്റുകളെ ബ്ലോക്ക് ചെയ്യുക</translation> <translation id="5050042263972837708">ഗ്രൂപ്പിന്റെ പേര്</translation> <translation id="5052499409147950210">സൈറ്റ് എഡിറ്റുചെയ്യുക</translation> @@ -2871,6 +2875,7 @@ <translation id="5341980496415249280">കാത്തിരിക്കുക, പായ്ക്ക് ചെയ്യുന്നു...</translation> <translation id="5342091991439452114">പിൻ നമ്പറിൽ <ph name="MINIMUM" /> അക്കങ്ങളെങ്കിലും വേണം</translation> <translation id="5352033265844765294">സമയ സ്റ്റാമ്പിംഗ്</translation> +<translation id="5352285283572729470">ഈ ക്രമീകരണം മാനേജ് ചെയ്യപ്പെട്ടിരിക്കുന്നു</translation> <translation id="5353252989841766347">Chrome-ൽ നിന്ന് പാസ്വേഡുകൾ എക്സ്പോർട്ടുചെയ്യുക</translation> <translation id="5355097969896547230">വീണ്ടും കണ്ടെത്തുക</translation> <translation id="5355926466126177564">നിങ്ങൾ ഓമ്നിബോക്സിൽ നിന്ന് തിരയുമ്പോൾ ദൃശ്യമാകുന്ന പേജിനെ "<ph name="EXTENSION_NAME" />" വിപുലീകരണം മാറ്റി.</translation> @@ -3134,7 +3139,6 @@ <translation id="5723508132121499792">ഒരു പശ്ചാത്തല ആപ്ലിക്കേഷനുകളും പ്രവർത്തിക്കുന്നില്ല</translation> <translation id="5727728807527375859">വിപുലീകരണങ്ങള്, അപ്ലിക്കേഷനുകള്, തീമുകള് എന്നിവ നിങ്ങളുടെ കമ്പ്യൂട്ടറിന് ഹാനികരമാകും. നിങ്ങള്ക്ക് തുടരണമെന്നുറപ്പാണോ?</translation> <translation id="5729712731028706266">&കാണുക</translation> -<translation id="5731185123186077399">Google Pay പോലുള്ള വ്യക്തിപരമാക്കിയ Google സേവനങ്ങൾ</translation> <translation id="5731247495086897348">ഒട്ടിക്കു&കയും പോകുകയും ചെയ്യുക</translation> <translation id="5731409020711461763">ഒരു പുതിയ ഫോട്ടോ</translation> <translation id="5734362860645681824">കമ്മ്യൂണിക്കേഷനുകൾ</translation> @@ -3185,7 +3189,7 @@ <translation id="5805697420284793859">വിൻഡോ മാനേജർ</translation> <translation id="580571955903695899">ശീര്ഷക പ്രകാരം പുനഃക്രമീകരിക്കുക</translation> <translation id="5807290661599647102">ഒരു സ്ക്രീൻ ലോക്ക് സജ്ജമാക്കുക</translation> -<translation id="5811750797187914944">എല്ലാം സജ്ജമാക്കി</translation> +<translation id="5811750797187914944">എല്ലാം സജ്ജീകരിച്ചു</translation> <translation id="5814126672212206791">കണക്ഷൻ തരം</translation> <translation id="5815645614496570556">X.400 വിലാസം</translation> <translation id="5816434091619127343">അഭ്യർത്ഥിച്ച പ്രിന്റർ മാറ്റങ്ങൾ, പ്രിന്ററിനെ ഉപയോഗിക്കാൻ കഴിയാത്ത നിലയിലാക്കും.</translation> @@ -3223,7 +3227,7 @@ <translation id="5855773610748894548">ക്ഷമിക്കണം, സുരക്ഷിത മൊഡ്യൂൾ പിശക്.</translation> <translation id="5856721540245522153">ഡീബഗ്ഗുചെയ്യൽ ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="5857090052475505287">പുതിയ ഫോള്ഡര്</translation> -<translation id="5858490737742085133">ടെർമിനൽ</translation> +<translation id="5858490737742085133">Terminal</translation> <translation id="585979798156957858">എക്സ്റ്റേണൽ മെറ്റ</translation> <translation id="5860033963881614850">ഓഫാക്കുക</translation> <translation id="5860209693144823476">ടാബ് 3</translation> @@ -3332,7 +3336,7 @@ <translation id="6025215716629925253">സ്റ്റാക്ക് ട്രെയ്സ്</translation> <translation id="6026047032548434446">ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യണോ?</translation> <translation id="6026819612896463875"><ph name="WINDOW_TITLE" /> - USB ഉപകരണം കണക്റ്റുചെയ്തു</translation> -<translation id="6028117231645531007">വിരലടയാളം ചേർക്കുക</translation> +<translation id="6028117231645531007">ഫിംഗർപ്രിന്റ് ചേർക്കുക</translation> <translation id="6029027682598229313">Linux ഇൻസ്റ്റലേഷൻ പൂർത്തിയായി.</translation> <translation id="6029587122245504742">ഏറ്റവും വേഗത കുറഞ്ഞത്</translation> <translation id="6032912588568283682">ഫയല് സിസ്റ്റം</translation> @@ -3370,7 +3374,7 @@ <translation id="6075907793831890935"><ph name="HOSTNAME" /> എന്ന പേരിലുള്ള ഉപകരണം ഉപയോഗിച്ച് ഡാറ്റ എക്സ്ചേഞ്ചുചെയ്യുക</translation> <translation id="6076448957780543068">ഈ സ്ക്രീന്ഷോട്ട് ഉള്പ്പെടുത്തുക</translation> <translation id="6077131872140550515">തിരഞ്ഞെടുത്തവയിൽ നിന്ന് നീക്കംചെയ്യുക</translation> -<translation id="6077189836672154517"><ph name="DEVICE_TYPE" /> നുറുങ്ങുകളും അപ്ഡേറ്റുകളും</translation> +<translation id="6077189836672154517"><ph name="DEVICE_TYPE" />-നെക്കുറിച്ചുള്ള നുറുങ്ങുകളും അപ്ഡേറ്റുകളും</translation> <translation id="6078323886959318429">കുറുക്കുവഴി ചേർക്കുക</translation> <translation id="6078752646384677957">നിങ്ങളുടെ മൈക്രോഫോണും ഓഡിയോ ലെവലുകളും പരിശോധിക്കുക.</translation> <translation id="6080515710685820702">പങ്കിട്ട കമ്പ്യൂട്ടറാണോ ഉപയോഗിക്കുന്നത്? അദൃശ്യ വിൻഡോ പരീക്ഷിച്ചുനോക്കൂ.</translation> @@ -3630,13 +3634,13 @@ <translation id="6456394469623773452">മിഴിവുള്ളതാക്കുക</translation> <translation id="6456631036739229488">Smart Lock ഫോൺ മാറ്റി. Smart Lock അപ്ഡേറ്റുചെയ്യാൻ നിങ്ങളുടെ പാസ്വേഡ് നൽകുക. അടുത്ത തവണ, നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> നിങ്ങളുടെ ഫോൺ അൺലോക്കുചെയ്യും. ക്രമീകരണത്തിൽ Smart Lock ഓഫാക്കുക.</translation> <translation id="645705751491738698">JavaScript തടയുന്നത് തുടരുക</translation> -<translation id="6458701200018867744">(<ph name="WEBRTC_LOG_UPLOAD_TIME" />)-ലെ അപ്ലോഡ് പരാജയപ്പെട്ടു.</translation> +<translation id="6458701200018867744">അപ്ലോഡ് ചെയ്യാനായില്ല (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">കണ്ടെത്തുന്നതിനായി തിരഞ്ഞെടുപ്പ് ഉപയോഗിക്കുക</translation> <translation id="6459799433792303855">സജീവ വിൻഡോ മറ്റൊരു ഡിസ്പ്ലേയിലേക്ക് നീക്കി.</translation> <translation id="6460601847208524483">അടുത്തത് കണ്ടെത്തുക</translation> <translation id="6463795194797719782">&എഡിറ്റ്ചെയ്യൂ</translation> <translation id="6466988389784393586">&എല്ലാ ബുക്ക്മാര്ക്കുകളും തുറക്കുക</translation> -<translation id="6467304607960172345">പൂർണ്ണസ്ക്രീൻ വീഡിയോകൾ ഒപ്റ്റിമൈസ് ചെയ്യുക</translation> +<translation id="6467304607960172345">പൂർണ്ണ സ്ക്രീൻ വീഡിയോകൾ ഒപ്റ്റിമൈസ് ചെയ്യുക</translation> <translation id="6468485451923838994">ഫോണ്ടുകൾ</translation> <translation id="6472207088655375767">OTP</translation> <translation id="6472893788822429178">ഹോം ബട്ടണ് കാണിക്കുക</translation> @@ -3781,6 +3785,7 @@ <translation id="6680650203439190394">റേറ്റ് ചെയ്യുക</translation> <translation id="6681668084120808868">ഫോട്ടോ എടുക്കുക</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" അൺഇൻസ്റ്റാൾ ചെയ്യുന്നതാണ്.</translation> +<translation id="6685083257944113180"><ph name="SINK_NAME" />, <ph name="SINK_STATUS" /> എന്നിവ നിര്ത്തുക</translation> <translation id="668599234725812620">Google Play തുറക്കുക</translation> <translation id="6686490380836145850">വലത്തേക്കുള്ള ടാബുകള് അടയ്ക്കുക</translation> <translation id="6686817083349815241">നിങ്ങളുടെ പാസ്വേഡ് സംരക്ഷിക്കുക</translation> @@ -3812,7 +3817,7 @@ <translation id="6725206449694821596">ഇന്റർനെറ്റ് പ്രിന്റിംഗ് പ്രോട്ടോക്കോൾ (IPP)</translation> <translation id="6727005317916125192">മുമ്പത്തെ പാൻ</translation> <translation id="6732801395666424405">സർട്ടിഫിക്കറ്റുകൾ ലോഡുചെയ്തില്ല</translation> -<translation id="6732900235521116609">കുറുക്കുവഴി നീക്കം ചെയ്യാനാകില്ല</translation> +<translation id="6732900235521116609">കുറുക്കുവഴി നീക്കം ചെയ്യാനാവില്ല</translation> <translation id="6735304988756581115">കുക്കികളും മറ്റ് സൈറ്റ് ഡാറ്റയും കാണിക്കുക...</translation> <translation id="6736045498964449756">ക്ഷമിക്കണം, പാസ്വേഡുകൾ പൊരുത്തപ്പെടുന്നില്ല!</translation> <translation id="6736243959894955139">വിലാസം</translation> @@ -3941,7 +3946,7 @@ <translation id="694592694773692225">ഈ പേജിൽ റീഡയറക്ട് ചെയ്യുന്നത് ബ്ലോക്ക് ചെയ്തു.</translation> <translation id="6949306908218145636">തുറന്ന പേജുകൾ ബുക്ക്മാർക്ക് ചെയ്യുക...</translation> <translation id="6950627417367801484">ആപ്പുകൾ പുനഃസ്ഥാപിക്കുക</translation> -<translation id="6950943362443484797">ആ ആപ്പ് ഞങ്ങൾ നിങ്ങൾക്കായി ഇൻസ്റ്റാൾ ചെയ്യും</translation> +<translation id="6950943362443484797">നിങ്ങൾക്കായി ആ ആപ്പ് ഞങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യും</translation> <translation id="6951153907720526401">പേയ്മെന്റ് ഹാൻഡ്ലറുകൾ</translation> <translation id="6955446738988643816">പോപ്പ്അപ്പ് പരിശോധിക്കുക</translation> <translation id="6957231940976260713">സേവനത്തിന്റെ പേര്</translation> @@ -4025,7 +4030,7 @@ <translation id="706626672220389329">പങ്കിടൽ മൗണ്ട് ചെയ്യുന്നതിൽ പിശക്. നിർദ്ദിഷ്ട പങ്കിടൽ മുമ്പേ മൗണ്ട് ചെയ്തിട്ടുണ്ട്.</translation> <translation id="7066944511817949584">"<ph name="DEVICE_NAME" />" എന്നതിലേക്ക് കണക്റ്റുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു.</translation> <translation id="7067725467529581407">ഇത് വീണ്ടും കണിക്കരുത്.</translation> -<translation id="7070484045139057854">ഇതിന് സൈറ്റ് ഡാറ്റ വായിക്കാനും മാറ്റാനുമാകും</translation> +<translation id="7070484045139057854">ഇതിന് സൈറ്റ് ഡാറ്റ വായിക്കാനും മാറ്റാനുമാവും</translation> <translation id="7072010813301522126">കുറുക്കുവഴിയുടെ പേര്</translation> <translation id="707392107419594760">നിങ്ങളുടെ കീബോര്ഡ് തിരഞ്ഞെടുക്കുക :</translation> <translation id="7075513071073410194">RSA എന്ക്രിപ്ഷനോടുകൂടിയ PKCS #1 MD5 </translation> @@ -4261,6 +4266,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{എല്ലാം &പുതിയ വിൻഡോയിൽ തുറക്കുക}=1{&പുതിയ വിന്ഡോയില് തുറക്കുക}other{എല്ലാം (#) &പുതിയ വിൻഡോയിൽ തുറക്കുക}}</translation> <translation id="7434509671034404296">വികാസകന്</translation> <translation id="7436921188514130341">ക്ഷമിക്കണം! പേരുമാറ്റുന്നതിനിടെ ഒരു പിശകുണ്ടായി.</translation> +<translation id="7441736921018636843">ഈ ക്രമീകരണം മാറ്റാന്, നിങ്ങളുടെ സമന്വയ പാസ്ഫ്രെയ്സ് നീക്കം ചെയ്യുന്നതിന് <ph name="BEGIN_LINK" />സമന്വയം പുനഃസജ്ജീകരിക്കുക<ph name="END_LINK" /></translation> <translation id="7441830548568730290">മറ്റ് ഉപയോക്താക്കൾ</translation> <translation id="7442465037756169001">നിങ്ങളുടെ Hangouts Meet hardware സജ്ജമാക്കാൻ തയ്യാറാണ്.</translation> <translation id="744341768939279100">ഒരു പുതിയ പ്രൊഫൈൽ സൃഷ്ടിക്കുക</translation> @@ -4302,7 +4308,7 @@ <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">നിങ്ങളുടെ പഴയ പാസ്വേഡ് മറന്നോ?</translation> <translation id="7497215489070763236">സെർവർ CA സർട്ടിഫിക്കറ്റ്</translation> -<translation id="7497981768003291373">നിങ്ങൾക്ക് സമീപകാലത്ത് ക്യാപ്ചർ ചെയ്ത WebRTC ടെക്സ്റ്റ് ലോഗുകളൊന്നുമില്ല.</translation> +<translation id="7497981768003291373">നിങ്ങൾക്ക് അടുത്തിടെ രേഖപ്പെടുത്തിയ WebRTC ടെക്സ്റ്റ് ലോഗുകളൊന്നുമില്ല.</translation> <translation id="7502658306369382406">IPv6 വിലാസം</translation> <translation id="7503191893372251637">നെറ്റ്സ്കേപ്പ് സര്ട്ടിഫിക്കറ്റ് തരം</translation> <translation id="7503821294401948377">ബ്രൗസർ പ്രവർത്തനത്തിനായി '<ph name="ICON" />' ഐക്കൺ ലോഡ് ചെയ്യാനായില്ല.</translation> @@ -4509,7 +4515,7 @@ <ph name="LINE_BREAK2" /> കുറച്ച് ഫോട്ടോകൾ തിരഞ്ഞെടുത്ത് പരീക്ഷിക്കുക.</translation> <translation id="782590969421016895">നിലവിലെ പേജുകള് ഉപയോഗിക്കുക</translation> -<translation id="7826346148677309647">Play സ്റ്റോറിൽ നിങ്ങളുടെ ഉപകരണത്തിനായി കൂടുതൽ ആപ്പുകൾ കണ്ടെത്താനാകും.</translation> +<translation id="7826346148677309647">നിങ്ങളുടെ ഉപകരണത്തിനായി കൂടുതൽ ആപ്പുകൾ Play സ്റ്റോറിൽ കണ്ടെത്താനാവും.</translation> <translation id="7826790948326204519"><ph name="BEGIN_H3" />ഡീബഗ് ചെയ്യൽ ഫീച്ചറുകൾ<ph name="END_H3" /> <ph name="BR" /> നിങ്ങളുടെ ഉപകരണത്തിൽ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിനും ഇഷ്ടാനുസൃത കോഡ് പരീക്ഷിക്കുന്നതിനും Chrome OS ഉപകരണത്തിൽ ഡീബഗ് ചെയ്യൽ ഫീച്ചറുകൾ പ്രവർത്തനക്ഷമമാക്കാനാവും. ഇനി പറയുന്നവ ചെയ്യാൻ ഇത് നിങ്ങളെ അനുവദിക്കും:<ph name="BR" /> @@ -4706,7 +4712,7 @@ <translation id="8059417245945632445">&ഉപകരണങ്ങൾ പരിശോധിക്കുക</translation> <translation id="8063235345342641131">ഡിഫോൾട്ടായ പച്ച അവതാർ</translation> <translation id="8064671687106936412">കീ:</translation> -<translation id="8065485338434000013">നിങ്ങളുടെ ചില കാർഡുകൾ മാത്രമേ ഈ ഉപകരണത്തിൽ ഉപയോഗിക്കാനാകു</translation> +<translation id="8065485338434000013">നിങ്ങളുടെ ചില കാർഡുകൾ മാത്രമേ ഈ ഉപകരണത്തിൽ ഉപയോഗിക്കാനാവൂ</translation> <translation id="806812017500012252">ശീര്ഷക പ്രകാരം പുനര്ക്രമീകരിക്കുക</translation> <translation id="8068253693380742035">സൈൻ ഇൻ ചെയ്യാൻ സ്പർശിക്കുക</translation> <translation id="8069615408251337349">Google ക്ലൗഡ് പ്രിന്റ്</translation> @@ -4784,7 +4790,7 @@ <translation id="8191453843330043793">V8 പ്രോക്സി റിസോൾവർ</translation> <translation id="8193175696669055101">ഉപകരണ മോഡൽ</translation> <translation id="8195027750202970175">ഡിസ്കിലെ വലുപ്പം</translation> -<translation id="8198323535106903877"><ph name="NUMBER_OF_APPS" /> ആപ്പുകൾ ഞങ്ങൾ നിങ്ങൾക്കായി ഇൻസ്റ്റാൾ ചെയ്യും</translation> +<translation id="8198323535106903877">നിങ്ങൾക്കായി ആ <ph name="NUMBER_OF_APPS" /> ആപ്പുകൾ ഞങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യും</translation> <translation id="8199300056570174101">നെറ്റ്വർക്കും (സേവനം) ഉപകരണ പ്രോപ്പർട്ടികളും</translation> <translation id="8200772114523450471">തുടരൂ</translation> <translation id="8202160505685531999">നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> പ്രൊഫൈൽ അപ്ഡേറ്റുചെയ്യാൻ പാസ്വേഡ് വീണ്ടും നൽകുക.</translation> @@ -5117,8 +5123,8 @@ <translation id="8716931980467311658">ഈ <ph name="DEVICE_TYPE" /> നിന്നുള്ള നിങ്ങളുടെ Linux ഫയലുകളുടെ ഫോൾഡറിലുള്ള എല്ലാ Linux ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കണോ?</translation> <translation id="8719653885894320876"><ph name="PLUGIN_NAME" /> ഡൗൺലോഡ് ചെയ്യാനായില്ല</translation> <translation id="8723829621484579639">ഇനിപ്പറയുന്നതിന്റെ ഇൻകോഗ്നിറ്റോ ഉപഫ്രെയിമുകൾ: <ph name="PARENT_SITE" /></translation> -<translation id="8724405322205516354">നിങ്ങൾ ഈ ഐക്കൺ കാണുമ്പോൾ, തിരിച്ചറിയലിനോ ഒരു വാങ്ങലിന് അംഗീകാരം നൽകാനോ നിങ്ങളുടെ വിരലടയാളം ഉപയോഗിക്കുക.</translation> -<translation id="8724409975248965964">വിരലടയാളം ചേർത്തു</translation> +<translation id="8724405322205516354">ഈ ഐക്കൺ കാണുമ്പോൾ, തിരിച്ചറിയലിനോ ഒരു വാങ്ങലിന് അംഗീകാരം നൽകാനോ നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുക.</translation> +<translation id="8724409975248965964">ഫിംഗർപ്രിന്റ് ചേർത്തു</translation> <translation id="8724859055372736596">&ഫോള്ഡറില് കാണിക്കുക</translation> <translation id="8725066075913043281">വീണ്ടും ശ്രമിക്കുക</translation> <translation id="8725178340343806893">പ്രിയങ്കരങ്ങള്/ബുക്മാര്ക്കുകള്</translation> @@ -5197,7 +5203,7 @@ <translation id="8838770651474809439">ഹാംബർഗർ</translation> <translation id="883911313571074303">ചിത്രം വ്യാഖ്യാനിക്കുക</translation> <translation id="8845001906332463065">സഹായം സ്വീകരിക്കുക</translation> -<translation id="8846132060409673887">ഈ കമ്പ്യൂട്ടറിന്റെ നിർമ്മാതാവ്, മോഡൽ എന്നിവ വായിക്കുക</translation> +<translation id="8846132060409673887">ഈ കമ്പ്യൂട്ടറിന്റെ നിർമ്മാതാവ്, മോഡൽ എന്നിവയെക്കുറിച്ചുള്ള വിവരം വായിക്കുക</translation> <translation id="8846141544112579928">കീബോർഡിനായി തിരയുന്നു...</translation> <translation id="8847988622838149491">USB</translation> <translation id="8859057652521303089">നിങ്ങളുടെ ഭാഷ തിരഞ്ഞെടുക്കുക :</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 9fd545d..b787401 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -9,7 +9,7 @@ <translation id="1010833424573920260">{NUM_PAGES,plural, =1{अप्रतिसादात्मक पृष्ठ}one{अप्रतिसादात्मक पृष्ठ}other{अप्रतिसादात्मक पृष्ठे}}</translation> <translation id="1012794136286421601">तुमचे दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फायली सिंक केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन अॅक्सेस करण्यासाठी Google ड्राइव्ह अॅप उघडा.</translation> <translation id="1012876632442809908">USB-C डिव्हाइस (पुढील बाजूचे पोर्ट)</translation> -<translation id="1013707859758800957">या पृष्ठावर चालण्यासाठी सॅन्डबॉक्स न केलेल्या प्लगिनला अनुमती देण्यात आली.</translation> +<translation id="1013707859758800957">या पेजवर चालण्यासाठी सॅंडबॉक्स न केलेल्या प्लगिनला अनुमती देण्यात आली.</translation> <translation id="1015318665228971643">फोल्डर नाव एडिट करा</translation> <translation id="1016437870506746108">{COUNT,plural, =0{सर्व नवीन विंडोमध्ये उघडा}=1{नवीन विंडोमध्ये उघडा}one{सर्व (#) नवीन विंडोमध्ये उघडा}other{सर्व (#) नवीन विंडोमध्ये उघडा}}</translation> <translation id="1016566241875885511">अतिरिक्त माहिती (पर्यायी)</translation> @@ -111,7 +111,7 @@ <translation id="1153356358378277386">जोडलेली डीव्हाइस</translation> <translation id="1156488781945104845">वर्तमान वेळ</translation> <translation id="1157102636231978136">तुमच्या Google खात्याशी सिंक केलेला, तुमचा ब्राउझ केलेला डेटा आणि अॅक्टिव्हिटी</translation> -<translation id="1161575384898972166">कृपया क्लायंट सर्टिफिकेट निर्यात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation> +<translation id="1161575384898972166">कृपया क्लायंट प्रमाणपत्र निर्यात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation> <translation id="1161699061380012396">Chrome OS इनपुट पद्धत</translation> <translation id="1163931534039071049">फ्रेम स्त्रोत &पहा</translation> <translation id="1164674268730883318"><ph name="DEVICE_TYPE" /> साठी Smart Lock बंंद करायचे?</translation> @@ -137,6 +137,7 @@ <translation id="1189418886587279221">आपले डिव्हाइस वापरण्यास सुलभ करण्यासाठी प्रवेशयोग्यता वैशिष्ट्ये सक्षम करा.</translation> <translation id="1190144681599273207">ही फाइल प्राप्त करताना अंदाजे <ph name="FILE_SIZE" /> मोबाइल डेटा वापरला जाईल.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{आपल्या संगणकावर संचयित केलेल्या फाईलवर प्रवेश करा}one{आपल्या संगणकावर संचयित केलेल्या # फाईलवर प्रवेश करा}other{आपल्या संगणकावर संचयित केलेल्या # फायलींवर प्रवेश करा}}</translation> +<translation id="1193273168751563528">व्यवस्थापित केलेल्या सेशनमध्ये एंटर करा</translation> <translation id="1195076408729068893">Smart Lock चालू करण्यासाठी तुमचा पासवर्ड टाका. पुढच्या वेळी तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी तुम्ही तुमचा फोन वापरू शकता.</translation> <translation id="1195447618553298278">अज्ञात एरर.</translation> <translation id="119738088725604856">स्क्रीनशॉट विंडो</translation> @@ -160,7 +161,7 @@ <translation id="121783623783282548">पासवर्ड जुळत नाहीत.</translation> <translation id="1218860753635451122">"मी सहमती दर्शवतो" या बटणावर क्लिक करून तुम्ही या Google सेवांसाठी वर वर्णन केलेल्या प्रक्रियांना सहमती दर्शवता.</translation> <translation id="122082903575839559">सर्टिफिकेट स्वाक्षरी अल्गोरिदम</translation> -<translation id="1221024147024329929">PKCS #1 RSA कूटबद्धीकरणासह MD2</translation> +<translation id="1221024147024329929">PKCS #1 RSA एंक्रिप्शनसह MD2</translation> <translation id="1221825588892235038">केवळ निवड</translation> <translation id="1223853788495130632">या सेटिंगसाठी आपला प्रशासक विशिष्ट मूल्याची शिफारस करतो.</translation> <translation id="1224275271335624810">सर्वात जलद</translation> @@ -280,7 +281,7 @@ <translation id="1401165786814632797">तुमचे डिव्हाइस सुरू आणि अनलॉक असताना कधीही "OK Google" म्हणा आणि तुमचे असिस्टंट अॅक्सेस करा.</translation> <translation id="140250605646987970">आपला फोन सापडला. परंतु Smart Lock केवळ Android 5.0 आणि वरील डिव्हाइसेसवर कार्य करते. <a>अधिक जाणून घ्या</a></translation> <translation id="140520891692800925"><ph name="PROFILE_DISPLAY_NAME" /> (पर्यवेक्षी)</translation> -<translation id="1405476660552109915">या साइटसाठी <ph name="PASSWORD_MANAGER_BRAND" /> ने आपले खाते सेव्ह करावे असे आपण इच्छिता?</translation> +<translation id="1405476660552109915">या साइटसाठी <ph name="PASSWORD_MANAGER_BRAND" /> ने तुमचे खाते सेव्ह करावे असे तुम्ही इच्छिता?</translation> <translation id="1406500794671479665">सत्यापित करत आहे...</translation> <translation id="1407489512183974736">मध्यभागी क्रॉप केला</translation> <translation id="1408504635543854729">फायली अॅपमध्ये डिव्हाइसची सामग्री एक्सप्लोर करा. प्रशासकाने सामग्री प्रतिबंधित केली आहे आणि सुधारित केली जाऊ शकत नाही.</translation> @@ -329,7 +330,7 @@ <translation id="1474339897586437869">"<ph name="FILENAME" />" अपलोड केली नाही. आपल्या Google ड्राइव्हमध्ये पर्याप्त स्थान नाही.</translation> <translation id="1475502736924165259">आपल्याकडे फाईलवर प्रमाणपत्रे आहेत जी अन्य कोणत्याही श्रेणींसाठी योग्य नाहीत</translation> <translation id="1476607407192946488">&भाषा सेटिंग्ज</translation> -<translation id="1477301030751268706">ओळख API टोकन कॅश </translation> +<translation id="1477301030751268706">ओळख API टोकन कॅशे</translation> <translation id="1478233201128522094">पुढच्या वेळी एक नवीन फोन <ph name="DEVICE_TYPE" /> ला अनलॉक करेल. सेटिंग्जमधून Smart Lock बंद करा.</translation> <translation id="1478340334823509079">तपशील: <ph name="FILE_NAME" /></translation> <translation id="1478607704480248626">इंस्टॉल करणे सुरू केलेले नाही</translation> @@ -359,7 +360,7 @@ प्रॉक्सी सर्व्हर कार्य करत असल्याचे तपासण्यासाठी आपल्या नेटवर्क प्रशासकाशी संपर्क साधा. आपला प्रॉक्सी सर्व्हर वापरण्यावर आपला विश्वास नसल्यास, आपल्या <ph name="LINK_START" />प्रॉक्सी सेटिंग्ज<ph name="LINK_END" /> समायोजित करा.</translation> -<translation id="1511388193702657997">आपले वेब पासवर्ड सेव्ह करण्याचा ऑफर देते</translation> +<translation id="1511388193702657997">तुमचे वेब पासवर्ड सेव्ह करण्याचा ऑफर देते</translation> <translation id="1512210426710821809">हे पहिल्यासारखे करण्याचा एकमेव मार्ग म्हणजे <ph name="IDS_SHORT_PRODUCT_OS_NAME" /> पुन्हा इन्स्टॉल करणे.</translation> <translation id="151501797353681931">Safari मधून आयात केलेले</translation> <translation id="1521442365706402292">प्रमाणपत्रे व्यवस्थापित करा</translation> @@ -409,7 +410,7 @@ <translation id="1588870296199743671">यासह दुवा उघडा...</translation> <translation id="1589055389569595240">शुद्धलेखन आणि व्याकरण दर्शवा</translation> <translation id="1593594475886691512">स्वरूपन करत आहे...</translation> -<translation id="159359590073980872">इमेज कॅश</translation> +<translation id="159359590073980872">इमेज कॅशे</translation> <translation id="1593926297800505364">पेमेंट पद्धत सेव्ह करा</translation> <translation id="1598233202702788831">आपल्या प्रशासकाने अपडेट अक्षम केली आहेत.</translation> <translation id="1600857548979126453">पृष्ठ डीबगर बॅकएंडवर प्रवेश करा</translation> @@ -429,7 +430,7 @@ <translation id="162035744160882748">सिंक, पर्सनलायझेशन आणि इतर Google सेवा सुरू करा</translation> <translation id="1620510694547887537">कॅमेरा</translation> <translation id="1623132449929929218">इमेज सध्या उपलब्ध नाहीत. वॉलपेपर संग्रह पाहण्यासाठी कृपया इंटरनेटला पुन्हा कनेक्ट करा.</translation> -<translation id="1624026626836496796">हे फक्त एकदाच घडेल आणि आपले क्रेडेन्शियल संचयित केले जाणार नाहीत.</translation> +<translation id="1624026626836496796">हे फक्त एकदाच घडेल आणि तुमची क्रेडेंशियल स्टोअर केली जाणार नाहीत.</translation> <translation id="1627276047960621195">फाईल वर्णनकर्ते</translation> <translation id="1627408615528139100">आधीच डाउनलोड केलेले आहे</translation> <translation id="1632803087685957583">आपल्या कीबोर्डचा पुनरावृत्ती दर, शब्दाचे पूर्वानुमान आणि बरेच काही समायोजित करण्याची आपल्याला अनुमती देते</translation> @@ -439,7 +440,7 @@ <translation id="1637765355341780467">आपले प्रोफाइल उघडताना काहीतरी चूक झाली. काही वैशिष्ट्ये अनुपलब्ध असू शकतात.</translation> <translation id="1639239467298939599">लोड करीत आहे</translation> <translation id="163993578339087550"><ph name="SERVICE_NAME" /> ला तुम्ही पात्र Chrome OS डिव्हाइस वापरता आहात का हे तपासायचे आहे.</translation> -<translation id="1640283014264083726">PKCS #1 RSA कूटबद्धीकरणासह MD4</translation> +<translation id="1640283014264083726">PKCS #1 RSA एंक्रिप्शनसह MD4</translation> <translation id="1641113438599504367">सुरक्षित ब्राउझिंग</translation> <translation id="1642494467033190216">इतर डीबगिंग वैशिष्ट्ये सक्षम करण्यापूर्वी rootfs संरक्षण काढणे आणि रीस्टार्ट करणे आवश्यक आहे.</translation> <translation id="1643050526526937107">फक्त सिंक करा</translation> @@ -447,7 +448,7 @@ <translation id="1644574205037202324">इतिहास</translation> <translation id="1645516838734033527">तुमचा <ph name="DEVICE_TYPE" /> सुरक्षित ठेवण्यासाठी Smart Lockला तुमच्या फोनवर स्क्रीन लॉकची आवश्यकता आहे.</translation> <translation id="1646102270785326155">एकदा हा वापरकर्ता काढल्यानंतर या वापरकर्त्याशी संबद्ध सर्व फायली आणि स्थानिक डेटा कायमचा हटवला जाईल. $1 अद्याप नंतर साइन इन करू शकतो.</translation> -<translation id="1646982517418478057">कृपया हे सर्टिफिकेट कूटबद्ध करण्यासाठी एक पासवर्ड एंटर करा</translation> +<translation id="1646982517418478057">कृपया हे प्रमाणपत्र एंक्रिप्ट करण्यासाठी एक पासवर्ड एंटर करा</translation> <translation id="164814987133974965">तुमच्या मार्गदर्शनाने एक पर्यवेक्षी वापरकर्ता वेब एक्सप्लोर करू शकतो. पर्यवेक्षी वापरकर्त्याचे व्यवस्थापक म्हणून, तुम्ही विशिष्ट वेबसाइट <ph name="BEGIN_BOLD" />अनुमत किंवा प्रतिबंधित<ph name="END_BOLD" /> करू शकता, पर्यवेक्षी वापरकर्त्याने भेट दिलेल्या वेबसाइटचे <ph name="BEGIN_BOLD" />पुनरावलोकन<ph name="END_BOLD" /> करू शकता आणि अन्य सेटिंग्ज @@ -458,7 +459,7 @@ <translation id="1650709179466243265">www. आणि .com जोडा आणि पत्ता उघडा</translation> <translation id="1651008383952180276">आपण समान सांकेतिक वाक्यांश दोनदा एंटर करणे आवश्यक आहे</translation> <translation id="1653526288038954982">{NUM_PRINTER,plural, =1{Google क्लाउड प्रिंट वर प्रिंटर जोडा जेणेकरून आपण कुठूनही प्रिंट करू शकता.}one{Google क्लाउड प्रिंट वर # प्रिंटर जोडा जेणेकरून आपण कुठूनही प्रिंट करू शकता.}other{Google क्लाउड प्रिंट वर # प्रिंटर जोडा जेणेकरून आपण कुठूनही प्रिंट करू शकता.}}</translation> -<translation id="1657406563541664238">वापर आकडेवारी आणि क्रॅश अहवाल स्वयंचलितपणे Google कडे पाठवून <ph name="PRODUCT_NAME" /> ला अधिक चांगले करण्यास मदत करा</translation> +<translation id="1657406563541664238">वापर आकडेवारी आणि क्रॅश अहवाल आपोआप Google कडे पाठवून <ph name="PRODUCT_NAME" /> ला अधिक चांगले करण्यास मदत करा</translation> <translation id="1658424621194652532">हे पृष्ठ आपल्या मायक्रोफोनवर प्रवेश करत आहे.</translation> <translation id="1660204651932907780">साइटना ध्वनी प्ले करण्याची परवानगी द्या (शिफारस केलेले)</translation> <translation id="1661156625580498328">AES एंक्रिप्शन लागू करा (शिफारस केलेले).</translation> @@ -540,7 +541,7 @@ <translation id="1774833706453699074">उघडी पेज बुकमार्क करा...</translation> <translation id="1775381402323441512">व्हिडिओ माहिती</translation> <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation> -<translation id="177694132944350798">आपला डेटा <ph name="TIME" /> पर्यंत आपल्या Google संकेतशब्दासह कूटबद्ध केला होता. संकालन सुरु करण्यासाठी तो एंटर करा.</translation> +<translation id="177694132944350798">तुमचा डेटा <ph name="TIME" /> पर्यंत तुमच्या Google पासवर्डसह एंक्रिप्ट केला होता. सिंक सुरु करण्यासाठी तो एंटर करा.</translation> <translation id="1779652936965200207">कृपया ही पासकी "<ph name="DEVICE_NAME" />" वर प्रविष्ट करा:</translation> <translation id="1779766957982586368">विंडो बंद करा</translation> <translation id="1781502536226964113">नवीन टॅब पृष्ठ उघडा</translation> @@ -587,7 +588,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> बंद केला आहे</translation> <translation id="1842766183094193446">तुम्हाला खरंच डेमो मोड सुरू करायचा आहे का?</translation> <translation id="1844692022597038441">ही फाइल ऑफलाइन उपलब्ध नाही.</translation> -<translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> चालविण्यासाठी Control-क्लिक करा</translation> +<translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> चालवण्यासाठी Control-क्लिक करा</translation> <translation id="1847880352285315359">सेव्ह केले</translation> <translation id="1848219224579402567">लिड बंद असताना साइन आउट करा</translation> <translation id="184823282865851239">साइटने अनाहूत जाहिराती दाखवणे सुरू ठेवल्यास ब्लॉक करा</translation> @@ -660,7 +661,7 @@ <translation id="1954813140452229842">शेअर माउंट करताना एरर आली. कृपया तुमची क्रेडेंशियल तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="1956050014111002555">फाइलमध्ये एकाधिक प्रमाणपत्रे आहेत ज्यापैकी एकही आयात झालेले नाही: </translation> <translation id="1956390763342388273">हे "<ph name="FOLDER_PATH" />" वरील सर्व फायली अपलोड करेल. जर तुमचा साइटवर विश्वास असेल तरच हे करा.</translation> -<translation id="1962233722219655970">हे पृष्ठ एक मूळ क्लायंट अॅप वापरते जो आपल्या संगणकावर कार्य करत नाही.</translation> +<translation id="1962233722219655970">हे पेज एक मूळ क्लायंट अॅप वापरते जो तुमच्या कॉंप्युटरवर काम करत नाही.</translation> <translation id="1962969542251276847">लॉक स्क्रीन</translation> <translation id="1963227389609234879">सर्व काढून टाका</translation> <translation id="1965624977906726414">यास विशेष परवानग्या नाहीत.</translation> @@ -706,7 +707,7 @@ <translation id="2028997212275086731">RAR संग्रहण</translation> <translation id="2034346955588403444">इतर WiFi नेटवर्क जोडा</translation> <translation id="203574396658008164">लॉक स्क्रीनवरून टीप घेणे चालू करा</translation> -<translation id="2040460856718599782">अरेरे! आपल्याला प्रमाणीकृत करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमची साइन इन क्रेडेन्शियल दोनदा तपासा आणि पुन्हा प्रयत्न करा.</translation> +<translation id="2040460856718599782">अरेरे! तुम्हाला अॉथेंटिकेट करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमची साइन इन क्रेडेंशियल दोनदा तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="2043818754674261542">फोनला हे <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी अंतर ठेवण्याची आवश्यकता आहे</translation> <translation id="204497730941176055">Microsoft Certificate Template Name</translation> <translation id="2045117674524495717">कीबोर्ड शॉर्टकट मदतकर्ता</translation> @@ -805,7 +806,7 @@ <translation id="2187895286714876935">सर्व्हर सर्टिफिकेट आयात एरर</translation> <translation id="2187906491731510095">विस्तार अपडेट केले</translation> <translation id="2188881192257509750"><ph name="APPLICATION" /> उघडा</translation> -<translation id="2190069059097339078">WiFi क्रेडेन्शियल मिळविणारा</translation> +<translation id="2190069059097339078">WiFi क्रेडेंशियल मिळविणारा</translation> <translation id="219008588003277019">नेटिव्ह क्लायंट मॉड्यूल: <ph name="NEXE_NAME" /></translation> <translation id="2190355936436201913">(रिक्त)</translation> <translation id="2191223688506386601">एक शेवटची गोष्ट</translation> @@ -879,7 +880,7 @@ <translation id="2288181517385084064">व्हिडिओ रेकॉर्डरवर स्विच करा</translation> <translation id="2288735659267887385">प्रवेशयोग्यता सेटिंग्ज</translation> <translation id="2291643155573394834">पुढील टॅब</translation> -<translation id="2292848386125228270">कृपया <ph name="PRODUCT_NAME" /> चा सामान्य वापरकर्ता म्हणून प्रारंभ करा. आपल्याला विकासासाठी मूळ म्हणून चालविणे आवश्यक असल्यास, सॅन्डबॉक्स ध्वजांकन नाही -- सह पुन्हा चालवा.</translation> +<translation id="2292848386125228270">कृपया <ph name="PRODUCT_NAME" /> चा सामान्य वापरकर्ता म्हणून सुरू करा. तुम्हाला विकासासाठी मूळ म्हणून चालवणे आवश्यक असल्यास, सॅंडबॉक्स फ्लॅग नाही -- सह पुन्हा रन करा.</translation> <translation id="2294358108254308676">आपण <ph name="PRODUCT_NAME" /> स्थापित करू इच्छिता?</translation> <translation id="2297705863329999812">प्रिंटर शोधा</translation> <translation id="2300383962156589922"><ph name="APP_NAME" /> ला कस्टमाइझ आणि नियंत्रित करा</translation> @@ -1052,7 +1053,7 @@ <translation id="2570454805927264159">तुमच्या असिस्टंटकडून सर्वोत्तम ते मिळवा</translation> <translation id="257088987046510401">थीम</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> साठी केवळ-वाचनीय प्रवेश मंजूर केला गेला आहे.</translation> -<translation id="2575247648642144396">विस्तार वर्तमान पृष्ठावर क्रिया करु शकत असेल तेव्हा हे चिन्ह दृश्यमान होईल. चिन्हावर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हा विस्तार वापरा.</translation> +<translation id="2575247648642144396">एक्स्टेंशन सद्य पेजवर क्रिया करु शकत असेल तेव्हा हे आयकन दृश्यमान होईल. आयकनवर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हे एक्स्टेंशन वापरा.</translation> <translation id="2575268751393592580">तुमचा फोन आढळला नाही. तुमचे <ph name="DEVICE_TYPE" /> वाय-फाय किंवा मोबाइल नेटवर्कशी कनेक्ट असल्याची खात्री करा. <a>आणखी जाणून घ्या</a></translation> <translation id="257779572837908839">मीटिंगसाठी Chromebox म्हणून सेट अप करा</translation> <translation id="2579575372772932244">प्रोफाईल पुन्हा-तयार करीत आहे, कृपया प्रतीक्षा करा...</translation> @@ -1095,7 +1096,7 @@ <translation id="2631498379019108537">शेल्फ मधील इनपुट पर्याय दर्शवा</translation> <translation id="2633199387167390344"><ph name="NAME" /> <ph name="USAGE" /> MB डिस्क स्थान वापरत आहे.</translation> <translation id="2633212996805280240">"<ph name="EXTENSION_NAME" />" काढून टाकायचे?</translation> -<translation id="263325223718984101"><ph name="PRODUCT_NAME" /> स्थापना पूर्ण करू शकत नाही, परंतु ते त्याच्या डिस्क इमेजवरून चालत राहील.</translation> +<translation id="263325223718984101"><ph name="PRODUCT_NAME" /> इंस्टॉलेशन पूर्ण करू शकत नाही, परंतु ते त्याच्या डिस्क इमेजवरून चालत राहील.</translation> <translation id="2635276683026132559">साइन करत आहे</translation> <translation id="2636625531157955190">Chrome इमेज अॅक्सेस करू शकत नाही.</translation> <translation id="2638087589890736295">संकालन प्रारंभ करण्यासाठी सांकेतिक वाक्यांश आवश्यक आहे</translation> @@ -1298,7 +1299,7 @@ <translation id="2921081876747860777">कृपया आपला स्थानिक डेटा संरक्षित करण्यासाठी एक पासवर्ड तयार करा.</translation> <translation id="2925966894897775835">पत्रके</translation> <translation id="2926085873880284723">डीफॉल्ट शॉर्टकट रिस्टोअर करा</translation> -<translation id="2927017729816812676">कॅश स्टोरेज</translation> +<translation id="2927017729816812676">कॅशे स्टोरेज</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (मुलांसाठी खाते)</translation> <translation id="2932483646085333864">साइन आउट करा नंतर संकालन सुरू करण्यासाठी पुन्हा साइन इन करा</translation> <translation id="2932883381142163287">दुरुपयोगाची तक्रार नोंदवा</translation> @@ -1315,6 +1316,7 @@ <translation id="29488703364906173">हे आधुनिक वेबसाठी बनविलेले जलद, सोपे आणि सुरक्षित वेब ब्राउझर आहे.</translation> <translation id="2951247061394563839">विंडो मध्यभागी आणा</translation> <translation id="2958721676848865875">पॅक विस्तार चेतावणी</translation> +<translation id="296026337010986570">पूर्ण झाले! धोकादायक सॉफ्टवेअर काढून टाकले. एक्स्टेंशन पुन्हा सुरू करण्यासाठी <a href="chrome://extensions">Extensions</a> ला भेट द्या.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (विस्तार प्रदान केला)</translation> <translation id="2961695502793809356">पुढे जाण्यासाठी क्लिक करा, इतिहास पहाण्यासाठी होल्ड करा</translation> <translation id="2963151496262057773">खालील प्लगिन असंवादी आहे: <ph name="PLUGIN_NAME" />आपण हे थांबवू इच्छिता?</translation> @@ -1323,7 +1325,7 @@ <translation id="2971213274238188218">चकाकी कमी करा</translation> <translation id="2972557485845626008">फर्मवेयर</translation> <translation id="2972581237482394796">&पुन्हा करा</translation> -<translation id="2972642118232180842">फक्त महत्त्वाचा आशय चालवा (शिफारस केलेले)</translation> +<translation id="2972642118232180842">फक्त महत्त्वाचा आशय रन करा (शिफारस केलेले)</translation> <translation id="2973324205039581528">साइट निःशब्द करा</translation> <translation id="2979639724566107830">नवीन विंडोमध्ये उघडा</translation> <translation id="2981113813906970160">मोठा माउस कर्सर दर्शवा</translation> @@ -1338,7 +1340,7 @@ <translation id="299483336428448530">आपल्या पालकाद्वारे इंस्टॉल केले.</translation> <translation id="3002017044809397427">आपला <ph name="PHONE_TYPE" /> सापडला. परंतु Smart Lock केवळ Android 5.0 आणि वरील डिव्हाइसेसवर कार्य करते. <a>अधिक जाणून घ्या</a></translation> <translation id="3003144360685731741">प्राधान्यीकृत नेटवर्क</translation> -<translation id="3003623123441819449">CSS कॅश </translation> +<translation id="3003623123441819449">CSS कॅशे</translation> <translation id="3003633581067744647">थंबनेल व्ह्यू वर स्विच करा</translation> <translation id="3003828226041301643">डिव्हाइस डोमेनशी जोडू शकत नाही. तुम्हाला डिव्हाइस जोडण्याचे विशेषाधिकार आहेत याची खात्री करण्यासाठी तुमचे खाते तपासा.</translation> <translation id="3003967365858406397">तुमचे <ph name="PHONE_NAME" /> एक खाजगी वाय-फाय कनेक्शन तयार करेल.</translation> @@ -1367,7 +1369,7 @@ <translation id="3022978424994383087">ते समजू शकले नाही.</translation> <translation id="3023464535986383522">बोलण्यासाठी निवडा</translation> <translation id="3024374909719388945">24-तासांचे घड्याळ वापरा</translation> -<translation id="302781076327338683">कॅश बायपास करणे रीलोड करा</translation> +<translation id="302781076327338683">कॅशे बायपास करणे रीलोड करा</translation> <translation id="3031417829280473749">एजंट X</translation> <translation id="3031557471081358569">आयात करण्यासाठी आयटम निवडा:</translation> <translation id="3031601332414921114">प्रिंट पुन्हा सुरू करा</translation> @@ -1388,7 +1390,7 @@ <translation id="3061707000357573562">पॅच सेवा</translation> <translation id="3065041951436100775">टॅबने नष्ट केलेला अभिप्राय</translation> <translation id="3067198179881736288">अॅप इंस्टॉल करायचे?</translation> -<translation id="3067198360141518313">हे प्लगइन चालवा</translation> +<translation id="3067198360141518313">हे प्लगिन रन करा</translation> <translation id="3071624960923923138">नवीन टॅब उघडण्यासाठी तुम्ही येथे क्लिक करू शकता</translation> <translation id="3074037959626057712">तुम्ही साइन इन केलेले आहे आणि सिंक करणे चालू केलेले आहे</translation> <translation id="3075874217500066906">Powerwash प्रक्रिया सुरु करण्यासाठी रीस्टार्ट आवश्यक आहे. रीस्टार्ट केल्यानंतर आपण पुढे सुरु ठेवू इच्छिता याची पुष्टी करण्यासाठी आपल्याला विचारले जाईल.</translation> @@ -1413,9 +1415,9 @@ <translation id="3101709781009526431">तारीख आणि वेळ</translation> <translation id="310671807099593501">साइट ब्लूटूथ वापरत आहे</translation> <translation id="3115128645424181617">तुमचा फोन आढळला नाही. तो सोयीस्कर असल्याची आणि ब्लूटूथ सुरू असल्याची खात्री करा.</translation> -<translation id="3115147772012638511">कॅशेसाठी प्रतीक्षा करीत आहे...</translation> +<translation id="3115147772012638511">कॅशेसाठी प्रतीक्षा करत आहे...</translation> <translation id="3118319026408854581"><ph name="PRODUCT_NAME" /> मदत</translation> -<translation id="3120430004221004537">दिलेल्या ऑपरेशनसाठी यावर अपुरे कूटबद्धीकरण: "<ph name="DEVICE_NAME" />".</translation> +<translation id="3120430004221004537">दिलेल्या ऑपरेशनसाठी यावर अपुरे एंक्रिप्शन आहे: "<ph name="DEVICE_NAME" />".</translation> <translation id="3121793941267913344">हा <ph name="IDS_SHORT_PRODUCT_NAME" /> डिव्हाइस रीसेट करा</translation> <translation id="3122464029669770682">सीपीयू</translation> <translation id="3122496702278727796">डेटा निर्देशिका तयार करण्यात अयशस्वी</translation> @@ -1443,7 +1445,7 @@ <translation id="3150927491400159470">कठीण रीलोड</translation> <translation id="315116470104423982">मोबाइल डेटा</translation> <translation id="3151539355209957474">प्रारंभ वेळ</translation> -<translation id="3151562827395986343">इतिहास, कुकीज, कॅशे आणि बरेच काही साफ करा</translation> +<translation id="3151562827395986343">इतिहास, कुकी, कॅशे आणि बरेच काही साफ करा</translation> <translation id="3151786313568798007">अभिमुखता</translation> <translation id="3153862085237805241">कार्ड सेव्ह करा</translation> <translation id="3154351730702813399">डिव्हाइस प्रशासक कदाचित आपल्या ब्राउझिंग क्रियाकलापाचे परीक्षण करू शकतो.</translation> @@ -1513,7 +1515,7 @@ <translation id="3278877214895457897">तुमचे Chromebook सेट केल्यानंतर तुमच्या असिस्टंटकडून कधीही मदत मिळवण्यासाठी असिस्टंट बटण दाबा किंवा "OK Google" म्हणा.</translation> <translation id="3279230909244266691">या प्रक्रियेला काही मिनिटे लागू शकतात. व्हर्च्युअल मशीन सुरू करत आहे.</translation> <translation id="3279741024917655738">क्षेत्रे व्हिडिओ दाखवा</translation> -<translation id="3280237271814976245">&म्हणून सेव्ह करा...</translation> +<translation id="3280237271814976245">या फॉरमॅटमध्ये सेव्ह करा...</translation> <translation id="3280243678470289153">Chrome मध्ये रहा</translation> <translation id="3280431534455935878">तयारी करीत आहे</translation> <translation id="3282568296779691940">Chrome वर साइन इन करा</translation> @@ -1586,7 +1588,7 @@ <translation id="3380365263193509176">अज्ञात एरर</translation> <translation id="3382073616108123819">अरेरे! या डिव्हाइससाठी डिव्हाइस अभिज्ञापक निर्धारित करण्यात सिस्टम अयशस्वी.</translation> <translation id="338583716107319301">विभाजक</translation> -<translation id="3389312115541230716">टास्कबार मधील <ph name="SMALL_PRODUCT_LOGO" /> चिन्हावर उजवे क्लिक करा</translation> +<translation id="3389312115541230716">टास्कबार मधील <ph name="SMALL_PRODUCT_LOGO" /> आयकनवर राइट क्लिक करा</translation> <translation id="3391716558283801616">टॅब 7</translation> <translation id="3396800784455899911">"स्वीकारा आणि सुरू ठेवा" या बटणावर क्लिक करून तुम्ही या Google सेवांसाठी वर वर्णन केलेल्या प्रक्रियांना सहमती दर्शवता.</translation> <translation id="3399432415385675819">सूचना बंद केल्या जातील</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">जोडण्यासाठी "<ph name="DEVICE_NAME" />" वर हा कोड टाइप करा:</translation> <translation id="3589766037099229847">असुरक्षित आशय ब्लॉक केला</translation> <translation id="3590194807845837023">प्रोफाईल अनलॉक करा आणि रीलाँच करा</translation> +<translation id="3590295622232282437">व्यवस्थापित केलेल्या सेशनमध्ये एंटर करत आहे.</translation> <translation id="3592260987370335752">&अधिक जाणून घ्या</translation> <translation id="359283478042092570">एंटर करा</translation> <translation id="3593965109698325041">सर्टिफिकेट नाव प्रतिबंध</translation> @@ -1813,7 +1816,7 @@ <translation id="3709244229496787112">डाउनलोड पूर्ण होण्यापूर्वी ब्राउझर बंद करण्यात आला.</translation> <translation id="3711895659073496551">निलंबन</translation> <translation id="3712217561553024354">या डिव्हाइसला तुमचे Google खाते असलेले इतर डिव्हाइस शोधू द्या ज्यावर मोबाइल डेटा कनेक्शन आहे</translation> -<translation id="3712897371525859903">पृष्ठ &म्हणून सेव्ह करा...</translation> +<translation id="3712897371525859903">पेज या फॉरमॅटमध्ये सेव्ह करा...</translation> <translation id="371300529209814631">मागे/पुढे</translation> <translation id="3714633008798122362">वेब कॅलेंडर</translation> <translation id="3719826155360621982">मुख्यपृष्ठ</translation> @@ -2011,7 +2014,7 @@ <translation id="397703832102027365">पूर्ण करीत आहे...</translation> <translation id="3979395879372752341">नवीन विस्तार जोडला (<ph name="EXTENSION_NAME" />)</translation> <translation id="3979748722126423326"><ph name="NETWORKDEVICE" /> सक्षम करा</translation> -<translation id="3981760180856053153">चुकीचे सेव्ह प्रकार एंटर केले.</translation> +<translation id="3981760180856053153">अवैध सेव्ह प्रकार एंटर केले.</translation> <translation id="3983586614702900908">अज्ञात विक्रेत्याकडील डिव्हाइसेस</translation> <translation id="3984159763196946143">डेमो मोड सुरू करता आला नाही</translation> <translation id="3985261842049607969">Google ड्राइव्हवर बॅक अप घ्या. तुमचा डेटा सहजपणे रिस्टोर करा किंवा कधीही डिव्हाइस स्विच करा. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation> @@ -2136,7 +2139,7 @@ <translation id="4195643157523330669">नवीन विंडोमध्ये उघडा</translation> <translation id="4195814663415092787">आपण सोडले होते तिथून पुढे सुरु करा</translation> <translation id="4197674956721858839">झिप निवड</translation> -<translation id="4198146608511578238">तुमच्या Google साहाय्यकाशी बोलण्यासाठी फक्त लाँचर आयकन दाबून ठेवा.</translation> +<translation id="4198146608511578238">तुमच्या Google असिस्टंटशी बोलण्यासाठी फक्त लाँचर आयकन दाबून ठेवा.</translation> <translation id="4200689466366162458">सानुकूल शब्द</translation> <translation id="4200983522494130825">नवीन &टॅब</translation> <translation id="4206144641569145248">एलियन</translation> @@ -2211,7 +2214,7 @@ <translation id="4324577459193912240">फाइल अपूर्ण आहे</translation> <translation id="4330387663455830245"><ph name="LANGUAGE" /> कधीही भाषांतरित करू नका</translation> <translation id="4330437798887640816">उच्च तीव्रता मोड टॉगल करा</translation> -<translation id="4333854382783149454">PKCS #1 RSA कूटबद्दीकरणासह SHA-1</translation> +<translation id="4333854382783149454">PKCS #1 RSA एंक्रिप्शनसह SHA-1</translation> <translation id="4336032328163998280">कॉपी ऑपरेशन अयशस्वी. <ph name="ERROR_MESSAGE" /></translation> <translation id="4336979451636460645">नेटवर्क लॉगसाठी, हे पहा: <ph name="DEVICE_LOG_LINK" /></translation> <translation id="4340515029017875942">"<ph name="EXTENSION_NAME" />" अॅपसह <ph name="ORIGIN" /> संवाद प्रस्थापित करू इच्छितो</translation> @@ -2222,7 +2225,7 @@ <translation id="4356334633973342967">किंवा आपल्या स्वत:चा ड्राइव्हर निर्दिष्ट करा:</translation> <translation id="4358353773267946514"><ph name="LANGUAGE_1" />, <ph name="LANGUAGE_2" /></translation> <translation id="4359408040881008151">अवलंबून असलेल्या विस्तारा(रां) मुळे इंस्टॉल केले.</translation> -<translation id="4361142739114356624">या क्लायंट सर्टिफिकेटासाठी खाजगी की नाही किंवा चुकीची आहे</translation> +<translation id="4361142739114356624">या क्लायंट प्रमाणपत्रासाठी खाजगी, की अनुपलब्ध किंवा अवैध आहे</translation> <translation id="4363771538994847871">कोणतीही कास्ट गंतव्यस्थाने सापडली नाहीत. मदत हवी आहे?</translation> <translation id="4364567974334641491"><ph name="APP_NAME" /> विंडो सामायिक करीत आहे.</translation> <translation id="4364830672918311045">सूचना डिस्प्ले करा</translation> @@ -2288,7 +2291,7 @@ <translation id="4475552974751346499">डाउनलोड शोधा</translation> <translation id="4476590490540813026">व्यायामपटू</translation> <translation id="4477015793815781985">Ctrl, Alt किंवा ⌘ चा समावेश करा</translation> -<translation id="4478664379124702289">म्हणून दु&वा सेव्ह करा...</translation> +<translation id="4478664379124702289">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation> <translation id="4479424953165245642">कियोस्क अॅप्लिकेशन व्यवस्थापित करा</translation> <translation id="4479639480957787382">इथरनेट</translation> <translation id="4480590691557335796">Chrome तुम्हाला काँप्युटरवरील नुकसानकारक सॉफ्टवेअर शोधू शकते आणि ते काढू शकते</translation> @@ -2298,9 +2301,9 @@ <translation id="449938344715680828">बाहेर पडण्यासाठी |<ph name="ACCELERATOR3" />| नंतर |<ph name="ACCELERATOR1" />|+|<ph name="ACCELERATOR2" />| दाबा</translation> <translation id="4499718683476608392">एका क्लिकमध्ये फॉर्म भरण्यासाठी क्रेडिट कार्ड ऑटोफिल सुरू करा</translation> <translation id="4500114933761911433"><ph name="PLUGIN_NAME" /> क्रॅश झाले आहे</translation> -<translation id="450099669180426158">उद्गार चिन्हाचे चिन्ह</translation> +<translation id="450099669180426158">उद्गारवाचक चिन्हाचा आयकन</translation> <translation id="4501530680793980440">काढून टाकण्याची पुष्टी करा</translation> -<translation id="4504940961672722399">या चिन्हावर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हा विस्तार वापरा.</translation> +<translation id="4504940961672722399">या आयकनवर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हे एक्स्टेंशन वापरा.</translation> <translation id="4508051413094283164">सर्व गुप्त विंडोमध्ये उघडा</translation> <translation id="4508265954913339219">सक्रियन अयशस्वी</translation> <translation id="4508765956121923607">स्त्रो&त पाहा</translation> @@ -2478,7 +2481,7 @@ <translation id="4777825441726637019">Play स्टोअर</translation> <translation id="4779083564647765204">झूम</translation> <translation id="477945296921629067">{NUM_POPUPS,plural, =1{पॉप-अप ब्लॉक केला}one{# पॉप-अप ब्लॉक केला}other{# पॉप-अप ब्लॉक केले}}</translation> -<translation id="4780321648949301421">पृष्ठ या रूपात सेव्ह करा...</translation> +<translation id="4780321648949301421">पेज या फॉरमॅटमध्ये सेव्ह करा...</translation> <translation id="4781787911582943401">स्क्रीनची झूम इन करा</translation> <translation id="4784330909746505604">PowerPoint सादरीकरण</translation> <translation id="4790972063719531840">Google कडे निदान आणि वापर डेटा स्वयंचलितपणे पाठवा</translation> @@ -2646,7 +2649,7 @@ <translation id="5010043101506446253">सर्टिफिकेट अधिकारी</translation> <translation id="5010929733229908807"><ph name="TIME" /> - वाजता सर्व डेटा आपल्या संकालित संकेतशब्दासह कूटबद्ध केला गेला</translation> + वाजता सर्व डेटा तुमच्या सिंक केलेल्या पासवर्डसह एंक्रिप्ट केला गेला</translation> <translation id="5015344424288992913">प्रॉक्सी निराकरण करीत आहे...</translation> <translation id="5015762597229892204">एक प्रिंटर ड्राइव्हर अॅप निवडा</translation> <translation id="5017508259293544172">LEAP</translation> @@ -2666,6 +2669,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">परवानगी द्या</translation> <translation id="5045550434625856497">अयोग्य पासवर्ड</translation> +<translation id="504561833207953641">अस्तित्वात असलेल्या ब्राउझर सेशनमध्ये उघडत आहे.</translation> <translation id="5047421709274785093">गती आणि प्रकाश सेन्सर वापरण्यापासून साइटना ब्लॉक करा</translation> <translation id="5050042263972837708">गट नाव</translation> <translation id="5052499409147950210">साइट संपादित करा</translation> @@ -2694,7 +2698,7 @@ <translation id="5087864757604726239">परत</translation> <translation id="5087926280563932024">तुमच्या खात्याची पडताळणी करता आली नाही. कृपया पुन्हा प्रयत्न करा किंवा तुमचे Chromebook रीस्टार्ट करा.</translation> <translation id="5088172560898466307">सर्व्हर होस्टनाव</translation> -<translation id="5088534251099454936">PKCS #1 RSA कूटबद्धीकरणासह SHA-512</translation> +<translation id="5088534251099454936">PKCS #1 RSA एंक्रिप्शनसह SHA-512</translation> <translation id="509429900233858213">एक एरर आली आहे.</translation> <translation id="5094721898978802975">मूळ अनुप्रयोगांना सहकार्य करून संवाद प्रस्थापित करा</translation> <translation id="5097002363526479830">'<ph name="NAME" />': नेटवर्कशी कनेक्ट करण्यात अयशस्वी. <ph name="DETAILS" /></translation> @@ -2706,7 +2710,7 @@ <translation id="5109044022078737958">Mia</translation> <translation id="5111692334209731439">&बुकमार्क व्यवस्थापक</translation> <translation id="5112577000029535889">&विकसक साधने</translation> -<translation id="5113739826273394829">आपण हे चिन्ह क्लिक केल्यास, आपण हे <ph name="DEVICE_TYPE" /> व्यक्तीचलितरित्या लॉक कराल. पुढील वेळी, प्रविष्ट करण्यासाठी आपल्याला आपला पासवर्ड टाइप करण्याची आवश्यकता असेल.</translation> +<translation id="5113739826273394829">तुम्ही या आयकनवर क्लिक केल्यास, तुम्ही हे <ph name="DEVICE_TYPE" /> मॅन्युअली लॉक कराल. पुढील वेळी, एंटर करण्यासाठी तुम्ही तुमचा पासवर्ड टाइप करण्याची आवश्यकता असेल.</translation> <translation id="5115309401544567011">कृपया तुमचा <ph name="DEVICE_TYPE" /> उर्जा स्रोताशी जोडा.</translation> <translation id="5116628073786783676">म्हणून ऑडिओ ज&तन करा...</translation> <translation id="5117427536932535467">थीम आणि वॉलपेपर</translation> @@ -2834,7 +2838,7 @@ <translation id="5297082477358294722">पासवर्ड सेव्ह केलेले आहेत. तुमच्या <ph name="SAVED_PASSWORDS_STORE" /> मध्ये सेव्ह केलेले पासवर्ड पाहा आणि व्यवस्थापित करा.</translation> <translation id="5298219193514155779">द्वारा निर्मित थीम</translation> <translation id="5299109548848736476">Do Not Track</translation> -<translation id="5299682071747318445">आपल्या संंकालित वाक्यांशासह सर्व डेटा कूटबद्ध केला आहे</translation> +<translation id="5299682071747318445">तुमच्या सिंक पासफ्रेजसह सर्व डेटा एंक्रिप्ट केला आहे</translation> <translation id="5300287940468717207">साइट परवानग्या रीसेट करायच्या?</translation> <translation id="5300589172476337783">दर्शवा</translation> <translation id="5301751748813680278">अतिथी म्हणून एंटर होत आहे.</translation> @@ -2863,7 +2867,7 @@ <translation id="5331425616433531170">"<ph name="CHROME_EXTENSION_NAME" />" जोडू इच्छिते</translation> <translation id="5331975486040154427">USB-C डिव्हाइस (डाव्या बाजूचे मागील पोर्ट)</translation> <translation id="5332624210073556029">टाइम झोन:</translation> -<translation id="5334142896108694079">स्क्रिप्ट कॅश </translation> +<translation id="5334142896108694079">स्क्रिप्ट कॅशे</translation> <translation id="5334844597069022743">स्त्रोत पहा</translation> <translation id="5335458522276292100"><ph name="FILE_COUNT" /> चा <ph name="BEGIN_LINK" />Google ड्राइव्ह<ph name="END_LINK" /> वर बॅकअप घेत आहे</translation> <translation id="5336126339807372270">कोणत्याही साइटना USB डिव्हाइस अॅक्सेस करू देऊ नका</translation> @@ -2875,6 +2879,7 @@ <translation id="5341980496415249280">कृपया वाट पहा, पॅकिंग करत आहे...</translation> <translation id="5342091991439452114">पिन किमान <ph name="MINIMUM" /> अंकांचा असणे आवश्यक आहे</translation> <translation id="5352033265844765294">वेळ स्टॅम्पिंग</translation> +<translation id="5352285283572729470">हे सेटिंग व्यवस्थापित केलेले आहे</translation> <translation id="5353252989841766347">Chrome मधून पासवर्ड निर्यात करा</translation> <translation id="5355097969896547230">पुन्हा शोधा</translation> <translation id="5355926466126177564">आपण ओम्निबॉक्समधून शोधता तेव्हा कोणते पृष्ठ दर्शविले जाते हे "<ph name="EXTENSION_NAME" />" विस्ताराने बदलले आहे.</translation> @@ -2931,7 +2936,7 @@ <translation id="5431825016875453137">OpenVPN / L2TP</translation> <translation id="5432996274932278848">तुमचे डिव्हाइस, अॅप्स आणि वेब शोधा. तुमची अॅप्स नेव्हिगेट करण्यासाठी बाण की वापरा.</translation> <translation id="543381445212956829">WiMAX सक्षम आहे</translation> -<translation id="5434065355175441495">PKCS #1 RSA कूटबद्धीकरण</translation> +<translation id="5434065355175441495">PKCS #1 RSA एंक्रिप्शन</translation> <translation id="5434706434408777842">F3</translation> <translation id="5436492226391861498">प्रॉक्झी टनलसाठी प्रतीक्षा करत आहे...</translation> <translation id="5436510242972373446"><ph name="SITE_NAME" /> शोधा:</translation> @@ -2955,7 +2960,7 @@ <translation id="5458998536542739734">स्क्रीनवरील टिपा लॉक करा</translation> <translation id="5463275305984126951"><ph name="LOCATION" /> ची अनुक्रमणिका</translation> <translation id="5463856536939868464">मेनूमध्ये लपलेले बुकमार्क आहेत</translation> -<translation id="5464632865477611176">यावेळी चालवा</translation> +<translation id="5464632865477611176">यावेळी रन करा</translation> <translation id="5465662442746197494">मदत हवी आहे?</translation> <translation id="5469954281417596308">बुकमार्क व्यवस्थापक</translation> <translation id="5471768120198416576">हाय! मी तुमचा टेक्स्ट टू स्पीच व्हॉइस आहे.</translation> @@ -2984,7 +2989,7 @@ <translation id="5502500733115278303">Firefox कडून आयातीत</translation> <translation id="5505095961735225576">Hangouts Meetला ते कोणत्या डोमेनवर आहे ते जाणून घ्यायचे आहे. त्यासाठी तुम्हाला तुमच्या खात्यामध्ये साइन करावे लागेल.</translation> <translation id="5507756662695126555">अस्वीकार नसलेले</translation> -<translation id="5509693895992845810">&म्हणून सेव्ह करा...</translation> +<translation id="5509693895992845810">या फॉरमॅटमध्ये सेव्ह करा...</translation> <translation id="5509914365760201064">जारी केले: <ph name="CERTIFICATE_AUTHORITY" /></translation> <translation id="5511823366942919280">आपल्याला खात्री आहे की आपण "शार्क" म्हणून हे डिव्हाइस सेट इच्छिता?</translation> <translation id="5512653252560939721">वापरकर्ता सर्टिफिकेट हार्डवेअर-बॅक्ड असणे आवश्यक आहे.</translation> @@ -2992,7 +2997,7 @@ <translation id="5516183516694518900">आपल्या सर्व डिव्हाइसेसवर आपले बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज मिळविण्यासाठी आपल्या Google खात्यासह Chrome मध्ये साइन इन करा.</translation> <translation id="551752069230578406">आपल्या खात्यास प्रिंटर जोडत आहे - यास थोडा वेळ लागू शकतो...</translation> <translation id="5518219166343146486">साइटला क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पाहायच्या असतील, तेव्हा विचारा</translation> -<translation id="5518584115117143805">ईमेल कूटबद्धीकरण सर्टिफिकेट</translation> +<translation id="5518584115117143805">ईमेल एंक्रिप्शन प्रमाणपत्र</translation> <translation id="5521078259930077036">आपण अपेक्षा करत होता हे तेच होमपेज आहे?</translation> <translation id="5522156646677899028">या विस्तारामध्ये एक गंभीर सुरक्षा भेद्यता आहे.</translation> <translation id="5524517123096967210">फाइल वाचली जाऊ शकली नाही.</translation> @@ -3020,7 +3025,7 @@ <translation id="5546865291508181392">शोधा</translation> <translation id="5551573675707792127">कीबोर्ड आणि मजकूर इनपुट</translation> <translation id="5553089923092577885">सर्टिफिकेट धोरण मॅपिंग</translation> -<translation id="5554489410841842733">जेव्हा विस्तार वर्तमान पृष्ठावर कार्य करेल तेव्हा हे प्रतीक दृश्यमान होईल.</translation> +<translation id="5554489410841842733">जेव्हे एक्स्टेंशन सद्य पेजवर काम करेल तेव्हा हे आयकन दृश्यमान होईल.</translation> <translation id="5554720593229208774">ईमेल प्रमाणन अधिकृतता</translation> <translation id="5556206011531515970">आपले डीफॉल्ट ब्राउझर निवडण्यासाठी पुढील क्लिक करा.</translation> <translation id="5556459405103347317">रीलोड करा</translation> @@ -3138,7 +3143,6 @@ <translation id="5723508132121499792">कोणतेही पार्श्वभूमी अॅप्लिकेशन चालत नाहीत</translation> <translation id="5727728807527375859">विस्तार, अॅप्लिकेशन आणि थीम आपल्या संगणकास हानी पोहोचवू शकतात. तुमची खात्री आहे की आपण सुरू ठेवू इच्छिता?</translation> <translation id="5729712731028706266">&दृश्य</translation> -<translation id="5731185123186077399">Google Pay सारख्या पर्सनलाइझ केलेल्या Google सेवा</translation> <translation id="5731247495086897348">पे&स्ट करा आणि जा</translation> <translation id="5731409020711461763">1 नवीन फोटो</translation> <translation id="5734362860645681824">संप्रेषणे</translation> @@ -3146,7 +3150,7 @@ <translation id="5739458112391494395">खूप मोठा</translation> <translation id="5740331643563157105"><ph name="LANGUAGE_1" />, <ph name="LANGUAGE_2" /> आणि अन्य <ph name="NUM_ADDITIONAL_LANGUAGES" /></translation> <translation id="574209121243317957">पिच</translation> -<translation id="5746169159649715125">पीडीएफ म्हणून सेव्ह करा</translation> +<translation id="5746169159649715125">PDF म्हणून सेव्ह करा</translation> <translation id="5747552184818312860">कालबाह्य होईल</translation> <translation id="5747785204778348146">विकासक - अस्थिर</translation> <translation id="5750324801516359607">दूर आहे</translation> @@ -3200,7 +3204,7 @@ <translation id="5828633471261496623">प्रिंट करत आहे...</translation> <translation id="5829401023154985950">व्यवस्थापित करा...</translation> <translation id="5830410401012830739">स्थान सेटिंग्ज व्यवस्थापित करा...</translation> -<translation id="5830720307094128296">पृष्ठ &म्हणून सेव्ह करा...</translation> +<translation id="5830720307094128296">पेज या फॉरमॅटमध्ये सेव्ह करा...</translation> <translation id="5832805196449965646">व्यक्ती जोडा</translation> <translation id="583281660410589416">अज्ञात</translation> <translation id="5832976493438355584">लॉक केले</translation> @@ -3212,7 +3216,7 @@ <translation id="5835754902560991078">अत्यंत कमी (0.6s)</translation> <translation id="5838456317242088717">वर्तमान गुप्त सत्र</translation> <translation id="5842497610951477805">ब्लूटूथ सक्षम आहे</translation> -<translation id="5843250171025351504">तुमच्या अॅडमिनिस्ट्रेटराने नमूद केलेल्या किमान क्लायंट आवृत्तीसह तुमचे डिव्हाइस आता सुसंगत नाही. कृपया लॉग इन करण्यासाठी अपडेट करा.</translation> +<translation id="5843250171025351504">तुमच्या प्रशासकाने निर्दिष्ट केलेल्या किमान क्लायंट आवृत्तीसह तुमचे डिव्हाइस आता कंपॅटिबल नाही. कृपया लॉग इन करण्यासाठी अपडेट करा.</translation> <translation id="5846929185714966548">टॅब 4</translation> <translation id="5849212445710944278">आधीच जोडला आहे</translation> <translation id="5849570051105887917">मुख्यपृष्ठ प्रदाता कोड</translation> @@ -3236,7 +3240,7 @@ <translation id="5862109781435984885">शेल्फमधील लेखणी साधने दर्शवा</translation> <translation id="5863445608433396414">डीबगिंग वैशिष्ट्ये सक्षम करा</translation> <translation id="5864471791310927901">DHCP लुकअप अयशस्वी</translation> -<translation id="586567932979200359">तुम्ही <ph name="PRODUCT_NAME" /> त्याच्या डिस्क इमेजवरून चालवत आहात. तुमच्या कॉंप्युटरवर ते स्थापित केल्यामुळे तुम्हाला ते डिस्क इमेजशिवाय चालवू देते आणि ते अद्ययावत ठेवले जाईल याची खात्री करते.</translation> +<translation id="586567932979200359">तुम्ही <ph name="PRODUCT_NAME" /> त्याच्या डिस्क इमेजवरून चालवत आहात. तुमच्या कॉंप्युटरवर ते इंस्टॉल केल्यामुळे तुम्हाला ते डिस्क इमेजशिवाय चालवू देते आणि ते अद्ययावत ठेवले जाईल हे निश्चित करते.</translation> <translation id="5866557323934807206">भविष्यातील भेटींसाठी या सेटिंग्ज साफ करा</translation> <translation id="5866840822086176774">खूप मजबूत</translation> <translation id="5867841422488265304">वेब पत्ता शोधा किंवा टाइप करा</translation> @@ -3295,7 +3299,7 @@ <translation id="5955282598396714173">तुमचा पासवर्ड एक्सपायर झाला आहे. तो बदलण्यासाठी कृपया साइन आऊट करा आणि पुन्हा साइन इन करा.</translation> <translation id="5956585768868398362">आपण अपेक्षा करत होता हे तेच शोध पृष्ठ आहे?</translation> <translation id="5957613098218939406">अधिक पर्याय</translation> -<translation id="5957987129450536192">तुमच्या प्रोफाइल इमेज जवळच्या बोलण्यासाठी निवडा या आयकनवर टॅप करा, त्यानंतर तुम्हाला जे ऐकायचे आहे ते निवडा.</translation> +<translation id="5957987129450536192">तुमच्या प्रोफाइल इमेज जवळच्या बोलण्यासाठी निवडा आयकनवर टॅप करा, त्यानंतर तुम्हाला जे ऐकायचे आहे ते निवडा.</translation> <translation id="5958529069007801266">पर्यवेक्षी वापरकर्ता</translation> <translation id="5959471481388474538">नेटवर्क उपलब्ध नाही</translation> <translation id="595959584676692139">हे एक्स्टेंशन वापरण्यासाठी पेज रीलोड करा</translation> @@ -3359,7 +3363,7 @@ <translation id="6052976518993719690">SSL प्रमाणपत्र अधिकृतता</translation> <translation id="6053401458108962351">&ब्राउझिंग डेटा साफ करा...</translation> <translation id="6055171183283175969">आपण एंटर केलेला पासवर्ड चुकीचा आहे.</translation> -<translation id="6055392876709372977">PKCS #1 RSA कूटबद्धीकरणासह SHA-256</translation> +<translation id="6055392876709372977">PKCS #1 RSA एंक्रिप्शनसह SHA-256</translation> <translation id="6056710589053485679">सामान्य रीलोड</translation> <translation id="6057381398996433816">या साइटला तुमचे गती किंवा प्रकाश सेन्सर वापरण्यापासून ब्लॉक केले गेले आहे.</translation> <translation id="6059652578941944813">सर्टिफिकेट पदानुक्रम</translation> @@ -3433,7 +3437,7 @@ <translation id="6154697846084421647">सध्या साइन इन </translation> <translation id="6155141482566063812">बॅकग्राउंड टॅब तुमची स्क्रीन शेअर करत आहे</translation> <translation id="6156323911414505561">बुकमार्क बार दर्शवा</translation> -<translation id="6156863943908443225">स्क्रिप्ट कॅश </translation> +<translation id="6156863943908443225">स्क्रिप्ट कॅशे</translation> <translation id="6156960295318603523">भाषा सेटिंग्ज</translation> <translation id="6160625263637492097">प्रमाणीकरणासाठी प्रमाणपत्रे प्रदान करा</translation> <translation id="6163363155248589649">&सामान्य</translation> @@ -3530,7 +3534,7 @@ <translation id="630065524203833229">नि&र्गमन</translation> <translation id="6305607932814307878">जागतिक धोरण:</translation> <translation id="6307990684951724544">सिस्टीम व्यस्त</translation> -<translation id="6308937455967653460">म्हणून दु&वा सेव्ह करा...</translation> +<translation id="6308937455967653460">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation> <translation id="6311220991371174222">आपले प्रोफाइल उघडताना काहीतरी चूक झाल्याने Chrome प्रारंभ करू शकत नाही. Chrome रीस्टार्ट करून पहा.</translation> <translation id="6312400084708441752">नुकसानकारक सॉफ्टवेअर, सिस्टम सेटिंग्ज आणि तुमच्या कॉंप्युटरवरील प्रक्रियांबद्दलच्या माहितीचा समावेश असतो</translation> <translation id="6312403991423642364">अज्ञात नेटवर्क एरर</translation> @@ -3563,7 +3567,7 @@ <translation id="6352773953037195952">सर्वोच्च</translation> <translation id="6354918092619878358">SECG एल्लिपटिक कर्व्ह secp256r1 (aka ANSI X9.62 prime256v1, NIST P-256)</translation> <translation id="6356138805250111037">ब्राउझरमध्ये आपण जे टाइप करता ते Google कडे पाठवून आणखी स्मार्ट शब्दलेखन-तपासणी</translation> -<translation id="63566973648609420">फक्त आपला सांकेतिक वाक्यांश असलेली एखादी व्यक्ती आपला कूटबद्ध डेटा वाचू शकते. सांकेतिक वाक्यांश Google कडे पाठविला किंवा त्याद्वारे संचयित केला जात नाही. आपण आपला सांकेतिक वाक्यांश विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, आपल्याला <ph name="BEGIN_LINK" />संकालन रीसेट करण्याची आवश्यकता असेल<ph name="END_LINK" />.</translation> +<translation id="63566973648609420">फक्त तुमचा पासफ्रेज असलेली एखादी व्यक्ती तुमचा एंक्रिप्ट केलेला डेटा वाचू शकते. पासफ्रेज Google कडे पाठवला किंवा त्याद्वारे स्टोअर केला जात नाही. तुम्ही तुमचा पासफ्रेज विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, तुम्हाला <ph name="BEGIN_LINK" />सिंक रीसेट करण्याची आवश्यकता असेल<ph name="END_LINK" />.</translation> <translation id="6357619544108132570"><ph name="SHORT_PRODUCT_NAME" /> कुटुंबात आपले स्वागत आहे. हा नेहमीचा कॉंप्युटर नाहीये.</translation> <translation id="6361850914223837199">एरर तपशील:</translation> <translation id="6362853299801475928">&समस्या नोंदवणे...</translation> @@ -3575,7 +3579,7 @@ <translation id="6374108032506706911">Android साठीचे Smart Lock सेट अप करा</translation> <translation id="6374469231428023295">पुन्हा प्रयत्न करा</translation> <translation id="6380143666419481200">स्वीकारा आणि सुरू ठेवा</translation> -<translation id="6383051423892982287">स्वतःच्या <ph name="BEGIN_LINK" />संकालन वाक्यांशासह<ph name="END_LINK" /> संकालित केलेला डेटा कूटबद्ध करा</translation> +<translation id="6383051423892982287">स्वतःच्या <ph name="BEGIN_LINK" />सिंक पासफ्रेजसह<ph name="END_LINK" /> सिंक केलेल्या केलेला डेटा एंक्रिप्ट करा</translation> <translation id="6384275966486438344">आपल्या शोध सेटिंग्ज यावर बदला: <ph name="SEARCH_HOST" /></translation> <translation id="6385543213911723544">साइट कुकी डेटा सेव्ह करू आणि वाचू शकतात</translation> <translation id="6388429472088318283">भाषा शोधा</translation> @@ -3615,7 +3619,7 @@ <translation id="6430814529589430811">Base64-encoded ASCII, एकल सर्टिफिकेट</translation> <translation id="6431217872648827691"><ph name="TIME" /> - पासून सर्व डेटा आपल्या Google संकेतशब्दासह कूटबद्ध केला गेला</translation> + पासून सर्व डेटा तुमच्या Google पासवर्डसह एंक्रिप्ट केला गेला</translation> <translation id="6431347207794742960">या संगणकाच्या सर्व वापरकर्त्यांसाठी <ph name="PRODUCT_NAME" /> स्वयंचलित अपडेट सेट करतील.</translation> <translation id="6434309073475700221">नाकारा</translation> <translation id="6436164536244065364">वेब स्टोअर मध्ये पहा</translation> @@ -3704,12 +3708,12 @@ <translation id="6556866813142980365">पुन्हा करा</translation> <translation id="6558280019477628686">एक एरर आली. काही आयटम हटवता आले नाहीत.</translation> <translation id="6561726789132298588">प्रविष्ट करा</translation> -<translation id="656293578423618167">फाइल पथ किंवा नाव खूप मोठे आहे. कृपया एका छोट्या नावाने किंवा दुसर्या स्थानावर सेव्ह करा. </translation> +<translation id="656293578423618167">फाइल पथ किंवा नाव खूप मोठे आहे. कृपया एका छोट्या नावाने किंवा दुसर्या स्थानावर सेव्ह करा.</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" हटवत आहे...</translation> -<translation id="6567688344210276845">पृष्ठ क्रियांसाठी प्रतीक '<ph name="ICON" />' लोड करणे शक्य नाही.</translation> +<translation id="6567688344210276845">पेज क्रियेसाठी '<ph name="ICON" />' आयकन लोड करता आला नाही.</translation> <translation id="657402800789773160">हे पृष्ठ &रीलोड करा</translation> <translation id="6577284282025554716">डाउनलोड रद्द केले: <ph name="FILE_NAME" /></translation> -<translation id="6578664922716508575">आपल्या Google वापरकर्तानाव आणि पासवर्डासह संंकालित केलेले पासवर्ड कूटबद्ध करा</translation> +<translation id="6578664922716508575">तुमच्या Google वापरकर्तानाव आणि पासवर्डसह सिंक केलेले पासवर्ड एंक्रिप्ट करा</translation> <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - डेस्कटॉप अाशय शेअर केला</translation> <translation id="6580151766480067746">ARC आवृत्ती</translation> <translation id="6581162200855843583">Google ड्राइव्ह दुवा</translation> @@ -3723,7 +3727,7 @@ <translation id="6590458744723262880">फोल्डरचे नाव बदला</translation> <translation id="6592267180249644460">WebRTC लॉग ने कॅप्चर केलेला <ph name="WEBRTC_LOG_CAPTURE_TIME" /></translation> <translation id="6594883168703494535">तुमच्या Google खात्यामध्ये साइन इन करण्यासाठी Smart Lock वापरा</translation> -<translation id="6596325263575161958">कूटबद्धता पर्याय</translation> +<translation id="6596325263575161958">एंक्रिप्शन पर्याय</translation> <translation id="6596745167571172521">Caps Lock अक्षम करा</translation> <translation id="6596816719288285829">IP पत्ता</translation> <translation id="6597017209724497268">नमुने</translation> @@ -3785,9 +3789,10 @@ <translation id="6680650203439190394">रेट करा</translation> <translation id="6681668084120808868">फोटो घ्या</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" अनइंस्टॉल केला जाईल.</translation> +<translation id="6685083257944113180"><ph name="SINK_NAME" />, <ph name="SINK_STATUS" /> थांबवा</translation> <translation id="668599234725812620">Google Play उघडा</translation> <translation id="6686490380836145850">उजवीकडील टॅब बंद करा</translation> -<translation id="6686817083349815241">आपला पासवर्ड सेव्ह करा</translation> +<translation id="6686817083349815241">तुमचा पासवर्ड सेव्ह करा</translation> <translation id="6690565918367819723"><ph name="PROFILE_NAME" /> व्यक्ती स्विच करा</translation> <translation id="6690659332373509948">फाईल विश्लेषित करण्यात अक्षम: <ph name="FILE_NAME" /></translation> <translation id="6690751852586194791">या डिव्हाइसवर जोडण्यासाठी एक पर्यवेक्षी वापरकर्ता निवडा.</translation> @@ -3799,7 +3804,7 @@ <translation id="6701535245008341853">प्रोफाइल मिळविणे शक्य नाही.</translation> <translation id="6702639462873609204">&संपादन...</translation> <translation id="6706210727756204531">व्याप्ती</translation> -<translation id="6707389671160270963">SSL क्लायंट अधिकृतता</translation> +<translation id="6707389671160270963">SSL क्लायंट प्रमाणपत्र</translation> <translation id="6708029444764748914">तुमच्या डिव्हाइसमध्ये साइन इन करण्यासाठी तुमचा पिन पुन्हा एंटर करा.</translation> <translation id="6708242697268981054">मूळ:</translation> <translation id="6709357832553498500"><ph name="EXTENSIONNAME" /> वापरून कनेक्ट करा</translation> @@ -3861,10 +3866,10 @@ <translation id="6802031077390104172"><ph name="USAGE" /> (<ph name="OID" />)</translation> <translation id="6804671422566312077">सर्व बुकमार्क &नवीन विंडोमध्ये उघडा</translation> <translation id="6805038906417219576">ठीक आहे</translation> -<translation id="6805647936811177813">कृपया <ph name="HOST_NAME" /> वरून क्लायंट सर्टिफिकेट आयात करण्यासाठी <ph name="TOKEN_NAME" /> वर साइन इन करा.</translation> +<translation id="6805647936811177813">कृपया <ph name="HOST_NAME" /> वरून क्लायंट प्रमाणपत्र आयात करण्यासाठी <ph name="TOKEN_NAME" /> वर साइन इन करा.</translation> <translation id="680572642341004180"><ph name="SHORT_PRODUCT_OS_NAME" /> वरील RLZ ट्रॅकिंग सक्षम करा.</translation> <translation id="6807889908376551050">सर्व दर्शवा...</translation> -<translation id="6810613314571580006">संचयित क्रेडेन्शियल वापरून वेबसाइटवर स्वयंचलितपणे साइन इन करा. वैशिष्ट्य अक्षम केले असते तेव्हा, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी आपल्याला पुष्टीकरणासाठी विचारले जाईल.</translation> +<translation id="6810613314571580006">स्टोअर क्रेडेंशियल वापरून वेबसाइटवर आपोआप साइन इन करा. वैशिष्ट्य अक्षम केले असते तेव्हा, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी तुम्हाला पुष्टीकरणासाठी विचारले जाईल.</translation> <translation id="6810768462515084623">अरेरे! तुमच्या पासवर्डची मुदत संपली आहे असे दिसते. कृपया तो दुसऱ्या डिव्हाइसवर रिन्यू करा आणि पुन्हा प्रयत्न करा.</translation> <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> मूळ म्हणून चालवणे शक्य नाही.</translation> <translation id="6812841287760418429">बदल ठेवा</translation> @@ -4020,7 +4025,7 @@ <translation id="7055152154916055070">रीडिरेक्ट ब्लॉक केले:</translation> <translation id="7056526158851679338">&निरीक्षण डिव्हाइसेस</translation> <translation id="7059858479264779982">स्वयं-लाँच करा वर सेट करा</translation> -<translation id="7059893117020417984">खाजगीरीत्या ब्राउझ करण्यासाठी, गुप्त विंडो उघडण्याकरता डॉट्स आयकन मेनुवर क्लिक करा</translation> +<translation id="7059893117020417984">खाजगीरीत्या ब्राउझ करण्यासाठी, गुप्त विंडो उघडण्याकरता डॉट्स आयकन मेन्यूवर क्लिक करा</translation> <translation id="7062222374113411376">अलीकडील बंद केलेल्या साइटना डेटा पाठविणे आणि प्राप्त करणे समाप्त करण्यासाठी अनुमती द्या (शिफारस केलेले)</translation> <translation id="7063129466199351735">प्रक्रिया करण्याचे शॉर्टकट...</translation> <translation id="7063957500469387217">Google क्लाउड मुद्रणामधील प्रिंटर सेट करा किंवा व्यवस्थापित करा.</translation> @@ -4032,7 +4037,7 @@ <translation id="7070484045139057854">हे साइट डेटा वाचू आणि बदलू शकते</translation> <translation id="7072010813301522126">शॉर्टकट नाव</translation> <translation id="707392107419594760">आपला कीबोर्ड निवडा:</translation> -<translation id="7075513071073410194">PKCS #1 MD5 With RSA कूटबद्धीकरण</translation> +<translation id="7075513071073410194">PKCS #1 MD5 With RSA एंक्रिप्शन</translation> <translation id="7075625805486468288">तुमची HTTPS/SSL प्रमाणपत्रे आणि सेटिंग्ज व्यवस्थापित करा</translation> <translation id="7076293881109082629">साइन इन करीत आहे</translation> <translation id="7077829361966535409">वर्तमान प्रॉक्सी सेटिंग्ज वापरून साइन-इन पृष्ठ लोड करण्यास अयशस्वी झाले. कृपया <ph name="GAIA_RELOAD_LINK_START" />पुन्हा साइन इन करण्याचा प्रयत्न करा<ph name="GAIA_RELOAD_LINK_END" />, किंवा भिन्न <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी सेटिंग्ज<ph name="PROXY_SETTINGS_LINK_END" /> वापरा.</translation> @@ -4040,7 +4045,7 @@ <translation id="708060913198414444">ऑडिओ पत्ता कॉपी करा</translation> <translation id="7081952801286122383">तुम्ही गुप्त मोड वर आहात</translation> <translation id="708278670402572152">स्कॅनिंग सुरू करण्यासाठी डिस्कनेक्ट करा</translation> -<translation id="7084192839369222683">फक्त महत्वाची सामग्री चालवा</translation> +<translation id="7084192839369222683">फक्त महत्वाचा आशय रन करा</translation> <translation id="7085389578340536476">Chrome ला ऑडिओ रेकॉर्ड करण्याची अनुमती द्यायची का?</translation> <translation id="7088434364990739311">अपडेट तपासणी सुरू होण्यात अयशस्वी (एरर कोड <ph name="ERROR" />).</translation> <translation id="7088561041432335295">Zip Archiver - Files अॅपमध्ये झिप फायली उघडा आणि पॅक करा.</translation> @@ -4111,7 +4116,7 @@ <translation id="7189234443051076392">तुमच्या डिव्हाइसवर पुरेशी जागा असल्याची खात्री करा</translation> <translation id="7189965711416741966">फिंगरप्रिंट जोडले.</translation> <translation id="7191159667348037">अज्ञात मुद्रक (USB)</translation> -<translation id="7191454237977785534">या रूपात फाइल सेव्ह करा</translation> +<translation id="7191454237977785534">या फॉरमॅटमध्ये फाइल सेव्ह करा</translation> <translation id="7193374945610105795"><ph name="ORIGIN" /> चे कोणतेही पासवर्ड सेव्ह केलेले नाहीत</translation> <translation id="7196835305346730603">जवळपासचे Chromeboxes शोधत आहे...</translation> <translation id="7197160646667308890"><ph name="BEGIN_PARAGRAPH1" />ही तुमच्या डिव्हाइसबद्दल आणि तुम्ही ती कशी वापरता याविषयी सामान्य माहिती आहे (जसे की बॅटरीचा स्तर, अॅप वापर आणि नेटवर्क कनेक्टिव्हिटी). Google ची उत्पादने आणि सेवा सर्वांसाठी सुधारण्यास डेटा वापरला जाईल. काही एकत्रित माहितीची भागीदारांना मदत होईल, जसे की Android डेव्हलपर, त्यांची अॅप्स आणि उत्पादने देखील अधिक चांगली बनवतात.<ph name="END_PARAGRAPH1" /> @@ -4144,7 +4149,7 @@ <translation id="7238585580608191973">SHA-256 बोटाचा ठसा</translation> <translation id="7240120331469437312">सर्टिफिकेट विषय वैकल्पिक नाव</translation> <translation id="7240339475467890413">नवीन हॉटस्पॉटशी कनेक्ट करायचे?</translation> -<translation id="7241389281993241388">कृपया क्लायंट सर्टिफिकेट आयात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation> +<translation id="7241389281993241388">कृपया क्लायंट प्रमाणपत्र आयात करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation> <translation id="7243632151880336635">साफ करा आणि साइन आउट करा</translation> <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (उत्कृष्ट)</translation> <translation id="7246339268451149667">फिंगरप्रिंट अनलॉक सक्षम करायचे?</translation> @@ -4223,7 +4228,7 @@ <translation id="7360183604634508679">बुकमार्क मेनू</translation> <translation id="7360233684753165754"><ph name="PAGE_NUMBER" /> पेज <ph name="PRINTER_NAME" /> कडे</translation> <translation id="7361039089383199231">$1 बाइट</translation> -<translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> चालविण्यासाठी उजवे-क्लिक करा</translation> +<translation id="7361297102842600584"><ph name="PLUGIN_NAME" /> चालवण्यासाठी राइट-क्लिक करा</translation> <translation id="7364796246159120393">फाइल निवडा</translation> <translation id="7366415735885268578">एक साइट जोडा</translation> <translation id="7366909168761621528">ब्राउझिंग डेटा</translation> @@ -4243,13 +4248,13 @@ <translation id="7388222713940428051">अतिथी विंडो उघडा</translation> <translation id="7392118418926456391">व्हायरस स्कॅन अयशस्वी</translation> <translation id="7392915005464253525">बंद केलेली विंडो पु&न्हा उघडा</translation> -<translation id="7396845648024431313"><ph name="APP_NAME" /> सिस्टम सुरू करताना लाँच केले जाईल आणि एकदा आपण सर्व अन्य <ph name="PRODUCT_NAME" /> विंडो बंद केल्यावर देखील पार्श्वभूमीमध्ये चालू राहील.</translation> +<translation id="7396845648024431313">सिस्टीम सुरूाच्या वेळी <ph name="APP_NAME" /> लाँच होईल आणि एकदा तुम्ही सर्व अन्य <ph name="PRODUCT_NAME" /> विंडो बंद केल्यानंतर बॅकग्राउंडमध्ये चालणे सुरु ठेवेल.</translation> <translation id="7400418766976504921">URL</translation> <translation id="740083207982962331">कृपया आपला Chromebox रीस्टार्ट होताना प्रतीक्षा करा...</translation> <translation id="7400839060291901923">तुमच्या <ph name="PHONE_NAME" />वर कनेक्शन सेट अप करा</translation> <translation id="740624631517654988">पॉप-अप अवरोधित</translation> <translation id="7407430846095439694">आयात करा आणि प्रतिबद्ध करा</translation> -<translation id="7409836189476010449">फ्लॅश चालवा</translation> +<translation id="7409836189476010449">फ्लॅश रन करा</translation> <translation id="7410344089573941623"><ph name="HOST" /> आपल्या कॅमेरा आणि मायक्रोफोनवर प्रवेश करू इच्छित असल्यास विचारा</translation> <translation id="741204030948306876">होय, मला मान्य आहे</translation> <translation id="7412226954991670867">GPU मेमरी</translation> @@ -4265,6 +4270,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{सर्व नवीन विंडोमध्ये उघडा}=1{ नवीन विंडोमध्ये उघडा}one{सर्व (#) नवीन विंडोमध्ये उघडा}other{सर्व (#) नवीन विंडोमध्ये उघडा}}</translation> <translation id="7434509671034404296">विकसक</translation> <translation id="7436921188514130341">ओहो! नाव बदलताना एक एरर आली होती.</translation> +<translation id="7441736921018636843">हे सेटिंग बदलण्यासाठी, तुमची सिंक पासफ्रेझ काढून टाकण्यासाठी <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation> <translation id="7441830548568730290">इतर वापरकर्ते</translation> <translation id="7442465037756169001">तुमचे Hangouts Meet hardware सेट अप होण्यासाठी सज्ज आहे.</translation> <translation id="744341768939279100">एक नवीन प्रोफाईल तयार करा</translation> @@ -4309,13 +4315,13 @@ <translation id="7497981768003291373">तुमच्याकडे नुकतेच कॅप्चर केलेले कोणतेही WebRTC मजकूर लॉग नाहीत.</translation> <translation id="7502658306369382406">IPv6 पत्ता</translation> <translation id="7503191893372251637">Netscape सर्टिफिकेट प्रकार</translation> -<translation id="7503821294401948377">ब्राउझर क्रियांसाठी '<ph name="ICON" />' प्रतीक लोड करणे शक्य नाही.</translation> +<translation id="7503821294401948377">ब्राउझर क्रियेसाठी '<ph name="ICON" />' आयकन लोड करू शकलो नाही.</translation> <translation id="750509436279396091">डाउनलोड फोल्डर उघडा</translation> <translation id="7505167922889582512">लपविलेल्या फायली दर्शवा</translation> <translation id="7506541170099744506">एंटरप्राइझ व्यवस्थापनासाठी आपल्या <ph name="DEVICE_TYPE" /> ची यशस्वीरित्या नोंदणी केली गेली.</translation> <translation id="7507930499305566459">स्थिती प्रतिसादकर्ता सर्टिफिकेट</translation> <translation id="7508545000531937079">स्लाइडशो</translation> -<translation id="7513029293694390567">संचयित क्रेडेन्शियल वापरून वेबसाइटवर स्वयंचलितपणे साइन इन करा. अक्षम केले असल्यास, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी आपल्याला पुष्टीकरणासाठी विचारले जाईल.</translation> +<translation id="7513029293694390567">स्टोअर क्रेडेंशियल वापरून वेबसाइटवर आपोआप साइन इन करा. अक्षम केले असल्यास, वेबसाइटवर साइन इन करण्यापूर्वी प्रत्येकवेळी तुम्हाला पुष्टीकरणासाठी विचारले जाईल.</translation> <translation id="7515154058529101840"><ph name="BEGIN_PARAGRAPH1" />स्थान शोधण्यास अॅप्सला मदत करा. अॅप्ससाठी स्थान सुधारण्यात मदत करण्यासाठी Google ची स्थान सेवा वापरा. Google अधूनमधून स्थान डेटा गोळा करू शकतो आणि स्थान अचूकता आणि स्थान-आधारित सेवा सुधारित करण्यासाठी अनामिक मार्गाने डेटा वापरू शकतो.<ph name="END_PARAGRAPH1" /> <ph name="BEGIN_PARAGRAPH2" />तुमच्या डिव्हाइसच्या स्थानाचा अंदाज घेण्यात मदत करण्यासाठी Google ची स्थान सेवा वाय फाय, मोबाईल नेटवर्क आणि सेन्सर सारखे स्त्रोत वापरते. तुमच्या डिव्हाइसची स्थान सेटिंग सुरू असताना ही सेवा सुरू असेल.<ph name="END_PARAGRAPH2" /> <ph name="BEGIN_PARAGRAPH3" />तुमच्या डिव्हाइसवर मुख्य स्थान सेटिंग बंद करून तुम्ही स्थान बंद करू शकता. तुम्ही स्थान सेटिंग्जमध्ये वाय फाय, मोबाईल नेटवर्क आणि स्थानासाठी सेन्सरचा वापर देखील बंद करू शकता.<ph name="END_PARAGRAPH3" /></translation> @@ -4454,7 +4460,7 @@ <translation id="7748626145866214022">अॅक्शन बारवर आणखी पर्याय उपलब्ध आहेत. अॅक्शन बारवर फोकस करण्यासाठी Alt + A दाबा.</translation> <translation id="7750228210027921155">चित्रात-चित्र</translation> <translation id="7751260505918304024">सर्व दर्शवा</translation> -<translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कोठे सेव्ह करावी ते विचारा</translation> +<translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कुठे सेव्ह करावी ते विचारा</translation> <translation id="7758143121000533418">Family Link</translation> <translation id="7758450972308449809">तुमच्या डिस्प्लेच्या सीमा समायोजित करा</translation> <translation id="7760004034676677601">आपण अपेक्षा करत होता हे तेच प्रारंभ पृष्ठ आहे?</translation> @@ -4479,8 +4485,8 @@ <translation id="7786889348652477777">&अॅप रीलोड करा</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> +<ph name="MARKUP_2" />तुम्हाला ऑफलाइन अॅक्सेस करण्याची यापुढे आवश्यकता नसलेल्या फायली अनपिन करा<ph name="MARKUP_3" /> +<ph name="MARKUP_4" />तुमच्या डाउनलोड फोल्डरमधून फायली हटवा<ph name="MARKUP_5" /></translation> <translation id="7788298548579301890">आपल्या संगणकावरील दुसर्या प्रोग्रामने एक अॅप जोडला जो Chrome ची कार्य करण्याची पद्धत कदाचित बदलू शकतो. <ph name="EXTENSION_NAME" /></translation> <translation id="7788383851298063850">काय होत आहे ते आम्हाला सांगा</translation> @@ -4629,7 +4635,7 @@ <translation id="7966241909927244760">इमेज पत्ता कॉपी करा</translation> <translation id="7968742106503422125">आपण कॉपी आणि पेस्ट करता तो डेटा वाचा आणि सुधारित करा</translation> <translation id="7968833647796919681">कार्यप्रदर्शन डेटा संकलन सक्षम करा</translation> -<translation id="7972714317346275248">PKCS #1 RSA कूटबद्धीकरणासह SHA-384</translation> +<translation id="7972714317346275248">PKCS #1 RSA एंक्रिप्शनसह SHA-384</translation> <translation id="7973962044839454485">अयोग्य वापरकर्तानावामुळे किंवा संकेतशब्दामुळे PPP प्रमाणीकरण अयशस्वी झाले</translation> <translation id="7974566588408714340"><ph name="EXTENSIONNAME" /> वापरून पुन्हा प्रयत्न करून पहा</translation> <translation id="7974936243149753750">ओव्हरस्कॅन</translation> @@ -4799,7 +4805,7 @@ <translation id="8214489666383623925">फाइल उघडा...</translation> <translation id="8214962590150211830">या व्यक्तीस काढून टाका</translation> <translation id="8217399928341212914">एकाधिक फायलींचे स्वयंचलित डाउनलोड अवरोधित करणे सुरू ठेवा</translation> -<translation id="8223479393428528563">ऑफलाइन वापराकरिता या फायली सेव्ह करण्यासाठी, परत ऑनलाइन व्हा, फायलींवर राइट-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation> +<translation id="8223479393428528563">ऑफलाइन वापराकरिता या फायली सेव्ह करण्यासाठी, परत ऑनलाइन जा, फायलींवर राइट-क्लिक करा आणि <ph name="OFFLINE_CHECKBOX_NAME" /> पर्याय निवडा.</translation> <translation id="8225753906568652947">तुमच्या ऑफर रिडीम करा</translation> <translation id="8226222018808695353">निषिद्ध केलेले</translation> <translation id="8226619461731305576">रांग</translation> @@ -4839,7 +4845,7 @@ <translation id="8274332263553132018">फाइल कास्ट करा</translation> <translation id="8274924778568117936">अपडेट पूर्ण होईपर्यंत तुमचे <ph name="DEVICE_TYPE" /> बंद करू नका. इंस्टॉलेशन पूर्ण झाल्यानंतर तुमचे <ph name="DEVICE_TYPE" /> पुन्हा सुरू हाेईल .</translation> <translation id="8275038454117074363">आयात</translation> -<translation id="8276560076771292512">कॅश आणि कठीण रीलोड रिक्त करा</translation> +<translation id="8276560076771292512">कॅशे आणि हार्ड रीलोड रिकामे करा</translation> <translation id="8281886186245836920">वगळा</translation> <translation id="8282947398454257691">आपला अनन्य डिव्हाइस अभिज्ञापक जाणून घ्या</translation> <translation id="8283475148136688298">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना प्रमाणीकरण कोड नाकारण्यात आला.</translation> @@ -4948,7 +4954,7 @@ <translation id="8463955938112983119"><ph name="PLUGIN_NAME" /> अक्षम केले.</translation> <translation id="8464132254133862871">हे वापरकर्ता खाते सेवेसाठी आदेय नाही.</translation> <translation id="8465252176946159372">वैध नाही</translation> -<translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ला चालविण्यासाठी तुमची परवानगी आवश्यक आहे.</translation> +<translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ला रन करण्यासाठी तुमची परवानगी आवश्यक आहे.</translation> <translation id="8466234950814670489">Tar संग्रहण</translation> <translation id="8466417995783206254">हा टॅब चित्रात-चित्र मोडमध्ये व्हिडिओ प्ले करत आहे.</translation> <translation id="8468750959626135884">Android फोनसह आपले <ph name="DEVICE_TYPE" /> अनलॉक करा.</translation> @@ -4968,7 +4974,7 @@ <translation id="8487700953926739672">ऑफलाइन उपलब्ध</translation> <translation id="8490896350101740396">खालील कियोस्क अॅप्स <ph name="UPDATED_APPS" /> "UPDATED_APPS" अपडेट करण्यात आले आहेत. कृपया अपडेट प्रक्रिया पूर्ण करण्यासाठी डिव्हाइस रीबूट करा.</translation> <translation id="8493236660459102203">मायक्रोफोन:</translation> -<translation id="8496717697661868878">हे प्लगइन चालवा</translation> +<translation id="8496717697661868878">हे प्लगिन रन करा</translation> <translation id="8497219075884839166">Windows सुविधा</translation> <translation id="8498214519255567734">तुमच्या स्क्रीनकडे पाहणे किंवा मंद उजेडात वाचणे सोपे करते</translation> <translation id="8498395510292172881">Chrome मध्ये वाचन सुरू ठेवा</translation> @@ -4993,7 +4999,7 @@ <translation id="8541166929715485291">सिस्टम डेटा पाठवा. आपोआप निदान आणि डिव्हाइस आणि अॅप वापर डेटा Google ला पाठवा. या डिव्हाइससाठी निदान आणि वापर डेटा Google ला पाठवण्याचे मालक निवडू शकतो. तुम्ही हे <ph name="BEGIN_LINK1" />सेटिंग्ज<ph name="END_LINK1" /> मध्ये पाहू शकता. तुम्ही अतिरिक्त वेब आणि अॅप अॅक्टिव्हिटी चालू केली असल्यास, ही माहिती तुमच्या खात्यात स्टोअर केली जाईल जेणेकरून तुम्ही ती माझी अॅक्टिव्हिटी मध्ये व्यवस्थापित करू शकाल. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation> <translation id="8545575359873600875">क्षमस्व, आपला पासवर्ड सत्यापित केला जाऊ शकला नाही. या पर्यवेक्षी वापरकर्त्याच्या व्यवस्थापकाने अलीकडे संकेतश्द बदलला असू शकतो. तसे असल्यास, आपण पुढील वेळी साइन इन कराल तेव्हा नवीन पासवर्ड लागू केला जाईल. आपला जुना पासवर्ड वापरून पहा.</translation> <translation id="8546186510985480118">डिव्हाइसवर स्थान कमी आहे</translation> -<translation id="8546306075665861288">इमेज कॅश</translation> +<translation id="8546306075665861288">इमेज कॅशे</translation> <translation id="8546541260734613940">[*.]example.com</translation> <translation id="854655314928502177">वेब प्रॉक्सी स्वयं शोध URL:</translation> <translation id="8546930481464505581">स्पर्श बार कस्टमाइझ करा</translation> @@ -5026,7 +5032,7 @@ <translation id="8596540852772265699">सानुकूल फायली</translation> <translation id="8597845839771543242">गुणधर्म स्वरूपन:</translation> <translation id="8598453409908276158">सँडबॉक्स न केलेले प्लग-इन ब्लॉक केले</translation> -<translation id="8601206103050338563">TLS WWW Client Authentication</translation> +<translation id="8601206103050338563">TLS WWW क्लायंट अॉथेंटिकेशन</translation> <translation id="8602851771975208551">आपल्या संगणकावरील दुसऱ्या प्रोग्रामने Chrome च्या कार्य करण्याचा मार्ग बदलू शकणारा अॅप जोडला.</translation> <translation id="8605428685123651449">SQLite मेमरी</translation> <translation id="8606726445206553943">आपले MIDI डिव्हाइसेस वापरा</translation> @@ -5039,7 +5045,7 @@ <translation id="862542460444371744">&विस्तार</translation> <translation id="8627151598708688654">स्त्रोत निवडा</translation> <translation id="862727964348362408">निलंबित</translation> -<translation id="862750493060684461">CSS कॅश </translation> +<translation id="862750493060684461">CSS कॅशे</translation> <translation id="8627795981664801467">केवळ सुरक्षित कनेक्शन</translation> <translation id="8630903300770275248">पर्यवेक्षी वापरकर्ता आयात करा</translation> <translation id="8631032106121706562">पाकळ्या</translation> @@ -5127,7 +5133,7 @@ <translation id="8726206820263995930">सर्व्हरवरून धोरण सेटिंग्ज आणताना एरर: <ph name="CLIENT_ERROR" />.</translation> <translation id="8727344521467137076">Chrome ला तुमच्या काँप्युटरवर धोकादायक सॉफ्टवेअर आढळले आहे. Chrome ते काढून टाकेल आणि तुमचा ब्राउझर पुन्हा नीट चालावा यासाठी तुमच्या सेटिंग्ज रिस्टोअर करेल.</translation> <translation id="8730621377337864115">पूर्ण झाले</translation> -<translation id="8732030010853991079">या चिन्हावर क्लिक करुन हा विस्तार वापरा.</translation> +<translation id="8732030010853991079">या आयकनवर क्लिक करुन हे एक्स्टेंशन वापरा.</translation> <translation id="8732212173949624846">आपल्या सर्व साइन इन केलेल्या डिव्हाइसेसवर आपला ब्राउझिंग इतिहास वाचा आणि बदला</translation> <translation id="8734073480934656039">ही सेटिंग सक्षम करणे कियोस्क अनुप्रयोगांना सुरूवातीस स्वयंचलितपणे लाँच करण्याची अनुमती देते.</translation> <translation id="873545264931343897"><ph name="PLUGIN_NAME" /> अपडेट समाप्त झाल्यावर, ते सक्रिय करण्यासाठी पृष्ठ रीलोड करा</translation> @@ -5289,7 +5295,7 @@ <translation id="8984179138335769204">त्वरित लाँच</translation> <translation id="8984654317541110628">फाइल शेअर URL</translation> <translation id="8986362086234534611">विसरा</translation> -<translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल स्वयंचलितपणे पाठवा</translation> +<translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवा</translation> <translation id="8987927404178983737">महिना</translation> <translation id="8991520179165052608">साइट तुमचा मायक्रोफोन वापरू शकते</translation> <translation id="899403249577094719">Netscape सर्टिफिकेट मूळ URL</translation> @@ -5301,7 +5307,7 @@ <translation id="9004952710076978168">अज्ञात मुद्रकासाठी एक सूचना प्राप्त झाली.</translation> <translation id="9008201768610948239">दुर्लक्ष करा</translation> <translation id="9009369504041480176">अपलोड करीत आहे (<ph name="PROGRESS_PERCENT" />%)...</translation> -<translation id="9011163749350026987">चिन्ह नेहमी दर्शवा</translation> +<translation id="9011163749350026987">आयकन नेहमी दाखवा</translation> <translation id="9011178328451474963">अंतिम टॅब</translation> <translation id="9013707997379828817">तुमच्या अॅडमिनिस्ट्रेटरने हे डिव्हाइस रोल बॅक केले आहे. कृपया महत्त्वाच्या फायली सेव्ह करा, त्यानंतर रीस्टार्ट करा. या डिव्हाइस वरील सर्व डेटा हटवला जाईल.</translation> <translation id="9014987600015527693">दुसरा फोन दर्शवा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index b75c3fa..d65ec239 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Tiada apl latar belakang dijalankan</translation> <translation id="5727728807527375859">Sambungan, apl dan tema boleh membahayakan komputer anda. Adakah anda pasti anda mahu meneruskan?</translation> <translation id="5729712731028706266">&Lihat</translation> -<translation id="5731185123186077399">Perkhidmatan Google yang diperibadikan seperti Google Pay</translation> <translation id="5731247495086897348">Ta&mpal dan Pergi</translation> <translation id="5731409020711461763">1 foto baharu</translation> <translation id="5734362860645681824">Komunikasi</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 4fe3d349..5f48ae3 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Geen actieve achtergrondapps</translation> <translation id="5727728807527375859">Extensies, applicaties en thema's kunnen schade toebrengen aan je computer. Weet je zeker dat je wilt doorgaan?</translation> <translation id="5729712731028706266">&Weergave</translation> -<translation id="5731185123186077399">Gepersonaliseerde Google-services zoals Google Pay</translation> <translation id="5731247495086897348">Pla&kken en gaan</translation> <translation id="5731409020711461763">1 nieuwe foto</translation> <translation id="5734362860645681824">Communicatie</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 96d703f..7c3ce34e 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Aktivér tilgjengelighetsfunksjoner for å gjøre enheten din enklere å bruke.</translation> <translation id="1190144681599273207">Henting av denne filen kommer til å bruke ca. <ph name="FILE_SIZE" /> mobildata.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Tilgang til en fil som er lagret på datamaskinen din}other{Tilgang til # filer som er lagret på datamaskinen din}}</translation> +<translation id="1193273168751563528">Start en administrert økt</translation> <translation id="1195076408729068893">For å starte Smart Lock, skriv inn passordet ditt. Neste gang kan du bruke telefonen til å låse opp <ph name="DEVICE_TYPE" />-enheten.</translation> <translation id="1195447618553298278">Ukjent feil.</translation> <translation id="119738088725604856">Ta en skjermdump av vinduet</translation> @@ -1312,6 +1313,7 @@ <translation id="29488703364906173">En rask, enkel og sikker nettleser, utviklet for et moderne Internett.</translation> <translation id="2951247061394563839">Sentrér vinduet</translation> <translation id="2958721676848865875">Advarsel om pakkeutvidelse</translation> +<translation id="296026337010986570">Ferdig! Skadelig programvare er fjernet. For å slå på utvidelser igjen, gå til <a href="chrome://extensions">Utvidelser</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (fra utvidelse)</translation> <translation id="2961695502793809356">Klikk for å gå fremover – hold for å se logg</translation> <translation id="2963151496262057773">Følgende programtillegg svarer ikke: <ph name="PLUGIN_NAME" />Vil du stoppe det?</translation> @@ -1717,6 +1719,7 @@ <translation id="358796204584394954">Skriv inn denne koden på «<ph name="DEVICE_NAME" />» for å koble til:</translation> <translation id="3589766037099229847">Usikkert innhold er blokkert</translation> <translation id="3590194807845837023">Lås opp profilen og start på nytt</translation> +<translation id="3590295622232282437">Starter en administrert økt.</translation> <translation id="3592260987370335752">&Les mer</translation> <translation id="359283478042092570">Angi</translation> <translation id="3593965109698325041">Begrensninger for sertifikatnavn</translation> @@ -2658,6 +2661,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Tillat</translation> <translation id="5045550434625856497">Feil passord</translation> +<translation id="504561833207953641">Åpner i den eksisterende nettleserøkten.</translation> <translation id="5047421709274785093">Blokkér nettsteder fra å bruke bevegelses- og lyssensorer</translation> <translation id="5050042263972837708">Gruppenavn</translation> <translation id="5052499409147950210">Rediger nettstedet</translation> @@ -2867,6 +2871,7 @@ <translation id="5341980496415249280">Vent litt – pakker …</translation> <translation id="5342091991439452114">PIN-koden må inneholde minst <ph name="MINIMUM" /> sifre</translation> <translation id="5352033265844765294">Tidsangivelse</translation> +<translation id="5352285283572729470">Denne innstillingen er administrert</translation> <translation id="5353252989841766347">Eksportér passord fra Chrome</translation> <translation id="5355097969896547230">Finn på nytt</translation> <translation id="5355926466126177564">Utvidelsen «<ph name="EXTENSION_NAME" />» har endret hvilken side som vises når du søker fra multifunksjonsfeltet.</translation> @@ -3130,7 +3135,6 @@ <translation id="5723508132121499792">Ingen bakgrunnsprogrammer kjører</translation> <translation id="5727728807527375859">Utvidelser, programtillegg og temaer kan skade datamaskinen. Er du sikker på at du vil fortsette?</translation> <translation id="5729712731028706266">&Vis</translation> -<translation id="5731185123186077399">Google-tjenester med et personlig preg, som for eksempel Google Pay</translation> <translation id="5731247495086897348">&Lim inn og gå til</translation> <translation id="5731409020711461763">1 nytt bilde</translation> <translation id="5734362860645681824">Kommunikasjon</translation> @@ -3774,6 +3778,7 @@ <translation id="6680650203439190394">Vurder</translation> <translation id="6681668084120808868">Ta et bilde</translation> <translation id="6681964764822470072">«<ph name="APP_NAME" />» blir avinstallert.</translation> +<translation id="6685083257944113180">Stopp, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Åpne Google Play.</translation> <translation id="6686490380836145850">Lukk fanene til høyre</translation> <translation id="6686817083349815241">Lagre passordet ditt</translation> @@ -4254,6 +4259,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Åpne alle i &nye vinduer}=1{Åpne i et &nytt vindu}other{Åpne alle (#) i &nye vinduer}}</translation> <translation id="7434509671034404296">Utvikler</translation> <translation id="7436921188514130341">Æsj! Det oppsto en feil under navneendringen.</translation> +<translation id="7441736921018636843">For å endre denne innstillingen, <ph name="BEGIN_LINK" />tilbakestill synkronisering<ph name="END_LINK" /> for å fjerne passordfrasen din for synkronisering</translation> <translation id="7441830548568730290">Andre brukere</translation> <translation id="7442465037756169001">Hangouts Meet hardware er klar til å konfigureres.</translation> <translation id="744341768939279100">Opprett en ny profil</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index f4a3711..ae49a8b 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Brak aplikacji uruchomionych w tle</translation> <translation id="5727728807527375859">Rozszerzenia, aplikacje i motywy mogą wyrządzić szkody na komputerze. Czy na pewno chcesz kontynuować?</translation> <translation id="5729712731028706266">&Widok</translation> -<translation id="5731185123186077399">Spersonalizowane usługi Google, takie jak Google Pay</translation> <translation id="5731247495086897348">Wkl&ej i otwórz</translation> <translation id="5731409020711461763">jedno nowe zdjęcie</translation> <translation id="5734362860645681824">Komunikacja</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index 7aff7fd..17d1a7d 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Nenhum aplicativo de fundo sendo executado</translation> <translation id="5727728807527375859">Extensões, aplicativos e temas podem danificar o seu computador. Tem certeza que quer continuar?</translation> <translation id="5729712731028706266">&Visualizar</translation> -<translation id="5731185123186077399">Serviços do Google personalizados, como o Google Pay</translation> <translation id="5731247495086897348">&Colar e ir</translation> <translation id="5731409020711461763">Uma nova foto</translation> <translation id="5734362860645681824">Comunicações</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index a595488..b85c9256 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Ativa as funcionalidades de acessibilidade para facilitar a utilização do dispositivo.</translation> <translation id="1190144681599273207">A obtenção deste ficheiro utilizará aproximadamente <ph name="FILE_SIZE" /> de dados móveis.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Acesso a um ficheiro armazenado no computador}other{Acesso a # ficheiros armazenados no computador}}</translation> +<translation id="1193273168751563528">Entrar na sessão gerida</translation> <translation id="1195076408729068893">Para iniciar o Smart Lock, introduza a sua palavra-passe. Da próxima vez, pode utilizar o telemóvel para desbloquear o <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Erro desconhecido.</translation> <translation id="119738088725604856">Janela de captura de ecrã</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">Navegador de Internet rápido, simples e seguro, concebido para a Web moderna.</translation> <translation id="2951247061394563839">Centrar janela</translation> <translation id="2958721676848865875">Aviso de extensão do pacote</translation> +<translation id="296026337010986570">Concluído! Software prejudicial removido. Para voltar a ativar as extensões, aceda a <a href="chrome://extensions">Extensões</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (extensão fornecida)</translation> <translation id="2961695502793809356">Clique para avançar, mantenha premido para ver o histórico</translation> <translation id="2963151496262057773">O seguinte plug-in está sem resposta: <ph name="PLUGIN_NAME" /> @@ -1723,6 +1725,7 @@ <translation id="358796204584394954">Introduza este código no "<ph name="DEVICE_NAME" />" para sincronizar:</translation> <translation id="3589766037099229847">Conteúdo inseguro bloqueado</translation> <translation id="3590194807845837023">Desbloquear perfil e reiniciar</translation> +<translation id="3590295622232282437">A entrar na sessão gerida…</translation> <translation id="3592260987370335752">&Saiba mais</translation> <translation id="359283478042092570">Aceder</translation> <translation id="3593965109698325041">Restrições de nome do certificado</translation> @@ -2667,6 +2670,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Permitir</translation> <translation id="5045550434625856497">Palavra-passe incorrecta</translation> +<translation id="504561833207953641">A abrir numa sessão existente do navegador…</translation> <translation id="5047421709274785093">Impedir que os sites utilizem sensores de movimento e de luz</translation> <translation id="5050042263972837708">Nome do grupo</translation> <translation id="5052499409147950210">Editar site</translation> @@ -2876,6 +2880,7 @@ <translation id="5341980496415249280">Aguarde, a acondicionar...</translation> <translation id="5342091991439452114">O PIN deve ter pelo menos <ph name="MINIMUM" /> dígitos</translation> <translation id="5352033265844765294">Carimbo de data/hora</translation> +<translation id="5352285283572729470">Esta definição é gerida</translation> <translation id="5353252989841766347">Exportar palavras-passe do Chrome</translation> <translation id="5355097969896547230">Localizar novamente</translation> <translation id="5355926466126177564">A extensão "<ph name="EXTENSION_NAME" />" alterou a página apresentada quando pesquisa a partir da caixa geral.</translation> @@ -3140,7 +3145,6 @@ <translation id="5723508132121499792">Não há aplicações em execução em segundo plano</translation> <translation id="5727728807527375859">As extensões, as aplicações e os temas podem danificar o computador. Tem a certeza de que pretende continuar?</translation> <translation id="5729712731028706266">&Ver</translation> -<translation id="5731185123186077399">Serviços Google personalizados, como o Google Pay.</translation> <translation id="5731247495086897348">Co&lar e ir</translation> <translation id="5731409020711461763">1 nova foto</translation> <translation id="5734362860645681824">Comunicações</translation> @@ -3785,6 +3789,7 @@ <translation id="6680650203439190394">Classificar</translation> <translation id="6681668084120808868">Tirar foto</translation> <translation id="6681964764822470072">O "<ph name="APP_NAME" />" será desinstalado.</translation> +<translation id="6685083257944113180">Parar, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Abrir o Google Play</translation> <translation id="6686490380836145850">Fechar separadores à direita</translation> <translation id="6686817083349815241">Guardar a sua palavra-passe</translation> @@ -4265,6 +4270,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Abrir todos numa &nova janela}=1{Abrir numa &nova janela}other{Abrir todos (#) numa &nova janela}}</translation> <translation id="7434509671034404296">Programador</translation> <translation id="7436921188514130341">Ah, bolas! Ocorreu um erro durante a mudança de nome.</translation> +<translation id="7441736921018636843">Para alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" /> para remover a sua frase de acesso de sincronização</translation> <translation id="7441830548568730290">Outros utilizadores</translation> <translation id="7442465037756169001">O hardware Hangouts Meet está pronto para ser configurado.</translation> <translation id="744341768939279100">Criar um novo perfil</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 09687b72..dcc6c8c 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">Activați funcțiile de accesibilitate, pentru a face dispozitivul mai ușor de utilizat.</translation> <translation id="1190144681599273207">Preluarea acestui fișier va utiliza aproximativ <ph name="FILE_SIZE" /> din datele mobile.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{Accesează un fișier stocat pe computer}few{Accesează # fișiere stocate pe computer}other{Accesează # de fișiere stocate pe computer}}</translation> +<translation id="1193273168751563528">Accesează sesiunea gestionată</translation> <translation id="1195076408729068893">Pentru a porni Smart Lock, introdu parola. Data viitoare, poți folosi telefonul pentru a debloca dispozitivul <ph name="DEVICE_TYPE" />.</translation> <translation id="1195447618553298278">Eroare necunoscută.</translation> <translation id="119738088725604856">Face o captură de ecran a ferestrei</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">Un browser web rapid, simplu și sigur, creat pentru internetul modern.</translation> <translation id="2951247061394563839">Centrați fereastra</translation> <translation id="2958721676848865875">Avertisment privind pachetul pentru extensie</translation> +<translation id="296026337010986570">Gata! Software-ul dăunător a fost eliminat. Pentru a reactiva extensiile, accesează <a href="chrome://extensions">Extensii</a>.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (oferit de extensie)</translation> <translation id="2961695502793809356">Dă clic pentru a naviga înainte, ține apăsat pentru a vedea istoricul</translation> <translation id="2963151496262057773">Următorul plugin este inactiv: <ph name="PLUGIN_NAME" />. Dorești să îl oprești?</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">Pentru a conecta, introduceți acest cod pe „<ph name="DEVICE_NAME" />”:</translation> <translation id="3589766037099229847">Conținut nesecurizat blocat</translation> <translation id="3590194807845837023">Deblocați profilul și relansați Chrome</translation> +<translation id="3590295622232282437">Se accesează sesiunea gestionată.</translation> <translation id="3592260987370335752">&Aflați mai multe</translation> <translation id="359283478042092570">Accesați</translation> <translation id="3593965109698325041">Limitări privind numele certificatului</translation> @@ -2666,6 +2669,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">Permite</translation> <translation id="5045550434625856497">Parolă incorectă</translation> +<translation id="504561833207953641">Se deschide în sesiunea de browser existentă.</translation> <translation id="5047421709274785093">Blochează folosirea senzorilor de mișcare și de lumină de către site-uri</translation> <translation id="5050042263972837708">Numele grupului</translation> <translation id="5052499409147950210">Editează site-ul</translation> @@ -2875,6 +2879,7 @@ <translation id="5341980496415249280">Așteaptă, se împachetează...</translation> <translation id="5342091991439452114">Codul PIN trebuie să conțină minimum <ph name="MINIMUM" /> cifre</translation> <translation id="5352033265844765294">Marcare temporală</translation> +<translation id="5352285283572729470">Această setare este gestionată</translation> <translation id="5353252989841766347">Exportă parolele din Chrome</translation> <translation id="5355097969896547230">Găsește din nou</translation> <translation id="5355926466126177564">Extensia „<ph name="EXTENSION_NAME" />” a modificat ce pagină se afișează când cauți din caseta polivalentă.</translation> @@ -3138,7 +3143,6 @@ <translation id="5723508132121499792">Nu rulează aplicații în fundal</translation> <translation id="5727728807527375859">Extensiile, aplicațiile și temele pot dăuna computerului. Sigur vrei să continui?</translation> <translation id="5729712731028706266">&Afișează</translation> -<translation id="5731185123186077399">Servicii Google personalizate, cum ar fi Google Pay</translation> <translation id="5731247495086897348">In&serează și accesează</translation> <translation id="5731409020711461763">1 fotografie nouă</translation> <translation id="5734362860645681824">Comunicații</translation> @@ -3783,6 +3787,7 @@ <translation id="6680650203439190394">Ritmul</translation> <translation id="6681668084120808868">Fotografiază</translation> <translation id="6681964764822470072">Aplicația „<ph name="APP_NAME" />” va fi dezinstalată.</translation> +<translation id="6685083257944113180">Oprește, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Deschide Google Play</translation> <translation id="6686490380836145850">Închide filele de la dreapta</translation> <translation id="6686817083349815241">Salvați parola</translation> @@ -4263,6 +4268,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{Deschide-le pe toate într-o fereastră &nouă}=1{Deschide într-o fereastră &nouă}few{Deschide-le pe toate (#) într-o fereastră &nouă}other{Deschide-le pe toate (#) într-o fereastră &nouă}}</translation> <translation id="7434509671034404296">Dezvoltator</translation> <translation id="7436921188514130341">Of, nu mai merge! A apărut o eroare la redenumire.</translation> +<translation id="7441736921018636843">Ca să modifici setarea, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" /> pentru a elimina expresia de acces pentru sincronizare</translation> <translation id="7441830548568730290">Alți utilizatori</translation> <translation id="7442465037756169001">Hardware-ul Hangouts Meet este gata pentru configurare.</translation> <translation id="744341768939279100">Creați un profil nou</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index bf896b9..666b210 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Нет приложений, работающих в фоновом режиме</translation> <translation id="5727728807527375859">Расширения и темы могут причинить вред вашему компьютеру. Продолжить?</translation> <translation id="5729712731028706266">&Вид</translation> -<translation id="5731185123186077399">Пользуйтесь персонализированными сервисами Google, например Google Pay.</translation> <translation id="5731247495086897348">Вс&тавить из буфера и перейти</translation> <translation id="5731409020711461763">новых фото: 1</translation> <translation id="5734362860645681824">Оборудование</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 93898d53..eb8cee26 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Na pozadí nie sú spustené žiadne aplikácie</translation> <translation id="5727728807527375859">Rozšírenia, aplikácie a motívy môžu poškodiť váš počítač. Naozaj chcete pokračovať?</translation> <translation id="5729712731028706266">&Zobraziť</translation> -<translation id="5731185123186077399">Prispôsobené služby Googlu, ako Google Pay</translation> <translation id="5731247495086897348">Prilepiť a &otvoriť</translation> <translation id="5731409020711461763">1 nová fotka</translation> <translation id="5734362860645681824">Komunikácia</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index a39cec1..3d412f13 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Noben program se ne izvaja v ozadju</translation> <translation id="5727728807527375859">Razširitve, aplikacije in teme lahko škodujejo računalniku. Ali ste prepričani, da želite nadaljevati?</translation> <translation id="5729712731028706266">&Pogled</translation> -<translation id="5731185123186077399">Prilagojene Googlove storitve, kot je Google Pay</translation> <translation id="5731247495086897348">&Prilepi in nadaljuj</translation> <translation id="5731409020711461763">1 nova fotografija</translation> <translation id="5734362860645681824">Komunikacije</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 40c783d..aaa6a29 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -3141,7 +3141,6 @@ <translation id="5723508132121499792">Није покренута ниједна позадинска апликација</translation> <translation id="5727728807527375859">Додаци, апликације и теме могу да оштете рачунар. Желите ли стварно да наставите?</translation> <translation id="5729712731028706266">&Прикажи</translation> -<translation id="5731185123186077399">Персонализоване Google услуге као што је Google Pay</translation> <translation id="5731247495086897348">На&лепи и иди</translation> <translation id="5731409020711461763">1 нова слика</translation> <translation id="5734362860645681824">Комуникације</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index 5f73c8d..f6fa64f 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -3142,7 +3142,6 @@ <translation id="5723508132121499792">Inga bakgrundsprogram körs</translation> <translation id="5727728807527375859">Tillägg, program och teman kan skada din dator. Vill du fortsätta?</translation> <translation id="5729712731028706266">&Visa</translation> -<translation id="5731185123186077399">Anpassade tjänster från Google, som Google Pay</translation> <translation id="5731247495086897348">Kl&istra in och öppna</translation> <translation id="5731409020711461763">1 nytt foto</translation> <translation id="5734362860645681824">Kommunikation</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 53750c7..825f9824 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -3134,7 +3134,6 @@ <translation id="5723508132121499792">Hakuna programu ya maandharinyuma inayoendesha</translation> <translation id="5727728807527375859">Viendelezi, programu, na mandhari vinaweza kudhuru kompyuta yako. Je, una hakika unataka kuendelea?</translation> <translation id="5729712731028706266">&Ona</translation> -<translation id="5731185123186077399">Huduma za Google zilizowekewa mapendeleo kama vile Google Pay</translation> <translation id="5731247495086897348">&Bandika Uende</translation> <translation id="5731409020711461763">Picha 1 mpya</translation> <translation id="5734362860645681824">Mawasiliano</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 231e7da..88ed6dfe 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">இயக்கத்தில் எந்த பின்புல பயன்பாடுகளும் இல்லை</translation> <translation id="5727728807527375859">நீட்டிப்புகள், பயன்பாடுகள் மற்றும் தீம்கள் ஆகியவை உங்கள் கணினிக்கு தீங்கு விளைவிக்கலாம். நிச்சயமாகத் தொடர விரும்புகிறீர்களா?</translation> <translation id="5729712731028706266">&காண்க</translation> -<translation id="5731185123186077399">Google Pay போன்ற தனிப்பயனாக்கிய Google சேவைகள்</translation> <translation id="5731247495086897348">ஒட்&டிவிட்டு செல்</translation> <translation id="5731409020711461763">1 புதிய படம்</translation> <translation id="5734362860645681824">தகவல்தொடர்புகள்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index fa43fe6..aead4d11 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">మీ పరికరాన్ని సులభంగా ఉపయోగించడానికి ప్రాప్యత లక్షణాలను ప్రారంభించండి.</translation> <translation id="1190144681599273207">ఈ ఫైల్ను పొందడానికి మొబైల్ డేటాలో సుమారుగా <ph name="FILE_SIZE" /> ఉపయోగించబడుతుంది.</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{మీ కంప్యూటర్లో నిల్వ చేసిన ఫైల్ను ప్రాప్యత చేయండి}other{మీ కంప్యూటర్లో నిల్వ చేసిన # ఫైల్లను ప్రాప్యత చేయండి}}</translation> +<translation id="1193273168751563528">నిర్వహిత సెషన్లోకి వెళ్లండి</translation> <translation id="1195076408729068893">Smart Lockను ప్రారంభించడానికి, మీ పాస్వర్డ్ను నమోదు చేయండి. తదుపరిసారి, మీ <ph name="DEVICE_TYPE" />ని అన్లాక్ చేయడానికి మీరు మీ ఫోన్ను ఉపయోగించవచ్చు.</translation> <translation id="1195447618553298278">తెలియని లోపం.</translation> <translation id="119738088725604856">స్క్రీన్షాట్ విండో</translation> @@ -572,7 +573,7 @@ <translation id="1817310072033858383">మీ <ph name="DEVICE_TYPE" />కి Smart Lock సెటప్ చేయండి</translation> <translation id="1817871734039893258">Microsoft File Recovery</translation> <translation id="1818007989243628752"><ph name="USERNAME" /> యొక్క పాస్వర్డ్ను తొలగించండి</translation> -<translation id="1818913467757368489">అప్లోడ్ జరుగుతోంది.</translation> +<translation id="1818913467757368489">లాగ్ అప్లోడ్ చేయబడుతోంది.</translation> <translation id="1819721979226826163">యాప్ నోటిఫికేషన్లు > Google Play సేవలను నొక్కండి.</translation> <translation id="1826516787628120939">తనిఖీ చేస్తోంది</translation> <translation id="1828378091493947763">ఈ పరికరంలో ఈ ప్లగిన్కు మద్దతు లేదు</translation> @@ -628,7 +629,7 @@ <translation id="1897762215429052132">నెట్వర్క్ కనెక్షన్, భాష, కీబోర్డ్ లేఅవుట్ను సెటప్ చేయండి...</translation> <translation id="1901303067676059328">&అన్నీ ఎంచుకోండి</translation> <translation id="1902576642799138955">చెల్లుబాటు కాలం</translation> -<translation id="1904518222538904133">మీ పరికరాల్లో 1 మాత్రమే ఈ పరికరంలో ఉపయోగించబడతాయి</translation> +<translation id="1904518222538904133">మీ కార్డ్లలో 1 మాత్రమే ఈ పరికరంలో ఉపయోగించవచ్చు</translation> <translation id="1905375423839394163">Chromebook పరికరం పేరు</translation> <translation id="1905710495812624430">అనుమతించిన గరిష్ట ప్రయత్నాలు మించిపోయారు.</translation> <translation id="1909880997794698664">మీరు ఖచ్చితంగా ఈ పరికరాన్ని శాశ్వతంగా కియోస్క్ మోడ్లో ఉంచాలనుకుంటున్నారా?</translation> @@ -1031,7 +1032,7 @@ <translation id="2534460670861217804">సురక్షిత HTTP ప్రాక్సీ</translation> <translation id="253557089021624350">సక్రియ కార్యాచరణల గణన</translation> <translation id="2538361623464451692">సింక్ నిలిపివేయబడింది</translation> -<translation id="2539876824180063438">మీ వేలిముద్ర యొక్క వేర్వేరు భాగాలను జోడించడానికి మీ చూపుడు వేలును కొద్దిగా తరలించండి.</translation> +<translation id="2539876824180063438">మీ వేలిముద్ర యొక్క వేర్వేరు భాగాలను జోడించడానికి మీ చూపుడు వేలును కొద్దిగా జరపండి.</translation> <translation id="2541002089857695151">పూర్తిస్క్రీన్ ప్రసారాన్ని ఆప్టిమైజ్ చేయాలా?</translation> <translation id="2542049655219295786">Google పట్టిక</translation> <translation id="2544853746127077729">ప్రామాణీకరణ ప్రమాణపత్రం నెట్వర్క్ ద్వారా తిరస్కరించబడింది</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">ఆధునిక వెబ్ కోసం రూపొందించబడిన వేగవంతమైన, సరళమైన మరియు సురక్షితమైన వెబ్ బ్రౌజర్.</translation> <translation id="2951247061394563839">విండోను మధ్యలో ఉంచు</translation> <translation id="2958721676848865875">ప్యాక్ పొడిగింపు హెచ్చరిక</translation> +<translation id="296026337010986570">పూర్తయింది! హానికరమైన సాఫ్ట్వేర్ తీసివేయబడింది. ఎక్స్టెన్షన్లను తిరిగి ఆన్ చేయడానికి, <a href="chrome://extensions">ఎక్స్టెన్షన్లు</a> సందర్శించండి.</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (పొడిగింపు అందించినది)</translation> <translation id="2961695502793809356">ముందుకు వెళ్ళడానికి క్లిక్ చెయ్యండి, చరిత్రను చూడటానికి నొక్కి ఉంచండి</translation> <translation id="2963151496262057773">క్రింది ప్లగిన్ ప్రతిస్పందించడం లేదు: <ph name="PLUGIN_NAME" />మీరు దీన్ని ఆపివేయాలనుకుంటున్నారా?</translation> @@ -1523,7 +1525,7 @@ <translation id="3289856944988573801">నవీకరణల కోసం తనిఖీ చేయడానికి, దయచేసి ఈథర్నెట్ లేదా Wi-Fiని ఉపయోగించండి.</translation> <translation id="32939749466444286">Linux కంటైనర్ ప్రారంభించబడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="3294437725009624529">అతిథి</translation> -<translation id="329703603001918157">సత్వరమార్గాన్ని సవరించడం సాధ్యపడదు</translation> +<translation id="329703603001918157">షార్ట్కట్ని సవరించడం సాధ్యపడదు</translation> <translation id="3297951628821704004">ఈ పరికరం నుండి ఖాతాను తీసివేయండి</translation> <translation id="329838636886466101">సరి చేయి</translation> <translation id="3298789223962368867">చెల్లని URL ఎంటర్ చెయ్యబడింది.</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">జత చేయడానికి "<ph name="DEVICE_NAME" />"లో ఈ కోడ్ను టైప్ చేయండి:</translation> <translation id="3589766037099229847">అసురక్షిత కంటెంట్ బ్లాక్ చేయబడింది</translation> <translation id="3590194807845837023">ప్రొఫైల్ని అన్లాక్ చేసి, మళ్లీ లాంచ్ చేయి</translation> +<translation id="3590295622232282437">నిర్వహిత సెషన్లోకి ప్రవేశిస్తోంది.</translation> <translation id="3592260987370335752">&మరింత తెలుసుకోండి</translation> <translation id="359283478042092570">నమోదు చేయి</translation> <translation id="3593965109698325041">సర్టిఫికెట్ పేరు పరిమితులు</translation> @@ -1737,7 +1740,7 @@ <translation id="3606712892509067288">Better Together నుండి తీసివేయి</translation> <translation id="3608454375274108141">F10</translation> <translation id="3608576286259426129">వినియోగదారు చిత్ర పరిదృశ్యం</translation> -<translation id="3609446736023031597">Play Store అనువర్తనాల్లో చివరి నవీకరణలు మరియు సిఫార్సులను పొందండి</translation> +<translation id="3609446736023031597">Play Store యాప్లలో అత్యంత తాజా అప్డేట్లు మరియు సిఫార్సులను పొందండి</translation> <translation id="3609785682760573515">సమకాలీకరిస్తోంది...</translation> <translation id="3609895557594655134">Android VPNని జోడించండి...</translation> <translation id="361106536627977100">ఫ్లాష్ డేటా</translation> @@ -1770,7 +1773,7 @@ <translation id="3645372836428131288">వేలిముద్రలోని వేరే భాగాన్ని క్యాప్చర్ చేయడం కోసం కొద్దిగా కదిలించండి.</translation> <translation id="3648348069317717750"><ph name="USB_DEVICE_NAME" /> గుర్తించబడింది</translation> <translation id="3649138363871392317">ఫోటో క్యాప్చర్ చేయబడింది</translation> -<translation id="3650845953328929506">అప్లోడ్ లాగ్ పెండింగ్ లో ఉంది.</translation> +<translation id="3650845953328929506">లాగ్ అప్లోడ్ పెండింగ్లో ఉంది.</translation> <translation id="3650952250015018111">యాక్సెస్ చేయడానికి "<ph name="APP_NAME" />"ని అనుమతించండి:</translation> <translation id="3651488188562686558">Wi-Fi నుండి డిస్కనెక్ట్ చేయి</translation> <translation id="3652817283076144888">ప్రారంభిస్తోంది</translation> @@ -1941,7 +1944,7 @@ <translation id="3873315167136380065">దీన్ని ఆన్ చేయడానికి, మీ సమకాలీకరణ రహస్య పదబంధాన్ని తీసివేయడానికి <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" /></translation> <translation id="3878840326289104869">పర్యవేక్షించబడే వినియోగదారుని సృష్టిస్తోంది</translation> <translation id="3879748587602334249">డౌన్లోడ్ నిర్వాహికి</translation> -<translation id="3885455691202481064">మీ చూపుడు వేలుతో సెన్సార్ ను తాకండి. ఇది మీ Chromebook పైభాగంలో ఉంది.</translation> +<translation id="3885455691202481064">మీ చూపుడు వేలుతో సెన్సార్ను తాకండి. ఇది మీ Chromebookలో ఎగువన ఎడమ వైపు ఉంది.</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" />తో గమనికలు రూపొందిస్తున్నారు</translation> <translation id="3892414795099177503">OpenVPN / L2TPని జోడించు...</translation> <translation id="3893536212201235195">మీ ప్రాప్యత సౌలభ్య సెట్టింగ్లను చదవడానికి మరియు మార్చడానికి అనుమతి</translation> @@ -1994,7 +1997,7 @@ <translation id="3950820424414687140">సైన్ ఇన్</translation> <translation id="3954354850384043518">ప్రోగ్రెస్లో ఉంది</translation> <translation id="3954469006674843813"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> హెర్జ్)</translation> -<translation id="3954953195017194676">మీకు ఇటీవల పట్టుబడిన WebRTC ఈవెంట్ లాగ్లు లేవు.</translation> +<translation id="3954953195017194676">మీ వద్ద ఇటీవల క్యాప్చర్ చేయబడిన WebRTC ఈవెంట్ లాగ్లు ఏవీ లేవు.</translation> <translation id="3955193568934677022">రక్షిత కంటెంట్ను ప్లే చేయడానికి సైట్లను అనుమతించు (సిఫార్సు చేయబడింది)</translation> <translation id="3956702100721821638">Google Playని చేరుకోవడం సాధ్యం కాలేదు</translation> <translation id="3958088479270651626">బుక్మార్క్లను మరియు సెట్టింగ్లను దిగుమతి చేయి</translation> @@ -2340,7 +2343,7 @@ <translation id="4555769855065597957">నీడ</translation> <translation id="4556110439722119938">మీ బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు మరియు ఇతర సెట్టింగ్లు మీ Google ఖాతాకు సమకాలీకరించబడతాయి, కాబట్టి మీరు వీటిని మీ అన్ని పరికరాల్లో ఉపయోగించవచ్చు</translation> <translation id="4558426062282641716">స్వీయ-ప్రారంభ అనుమతి అభ్యర్థించబడింది</translation> -<translation id="4558491878126948419"><ph name="DEVICE_TYPE" /> చిట్కాలు మరియు Google ఉత్పత్తుల నవీకరణలు పొందండి మరియు అభిప్రాయాన్ని భాగస్వామ్యం చేయండి. ఏ సమయంలో అయినా సభ్యత్వాన్ని తీసివేయండి.</translation> +<translation id="4558491878126948419"><ph name="DEVICE_TYPE" /> చిట్కాలు మరియు Google ఉత్పత్తులకు చెందిన అప్డేట్లను పొందండి మరియు అభిప్రాయాన్ని షేర్ చేయండి. ఏ సమయంలో అయినా సభ్యత్వాన్ని తీసివేయండి.</translation> <translation id="4559617833001311418">ఈ సైట్ మీ మోషన్ లేదా లైట్ సెన్సార్లను యాక్సెస్ చేస్తోంది.</translation> <translation id="4562155214028662640">వేలిముద్రను జోడించు</translation> <translation id="4563880231729913339">మూడో వేలు</translation> @@ -2666,11 +2669,12 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">అనుమతించు</translation> <translation id="5045550434625856497">సరికాని పాస్వర్డ్</translation> +<translation id="504561833207953641">ఇప్పటికే ఉన్న బ్రౌజర్ సెషన్లో తెరుస్తోంది.</translation> <translation id="5047421709274785093">చలనం మరియు కాంతి సర్దుబాటు సెన్సార్లను ఉపయోగించకుండా సైట్లను బ్లాక్ చేయి</translation> <translation id="5050042263972837708">సమూహం పేరు</translation> <translation id="5052499409147950210">సైట్ను సవరించండి</translation> <translation id="5053604404986157245">యాదృచ్చికంగా రూపొందించబడిన TPM పాస్వర్డ్ అందుబాటులో లేదు. ఇది పవర్వాష్ తర్వాత సర్వసాధారణం.</translation> -<translation id="5057110919553308744">మీరు పొడిగింపును క్లిక్ చేసినప్పుడు</translation> +<translation id="5057110919553308744">మీరు ఎక్స్టెన్షన్ క్లిక్ చేసినప్పుడు</translation> <translation id="5061347216700970798">{NUM_BOOKMARKS,plural, =1{ఈ ఫోల్డర్ ఒక బుక్మార్క్ను కలిగి ఉంది. మీరు ఈ ఫోల్డర్ను ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?}other{ఈ ఫోల్డర్ # బుక్మార్క్లను కలిగి ఉంది. మీరు ఈ ఫోల్డర్ను ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?}}</translation> <translation id="5061708541166515394">వ్యత్యాసం</translation> <translation id="5062930723426326933">సైన్-ఇన్ విఫలమైంది, దయచేసి ఇంటర్నెట్కు కనెక్ట్ చేసి మళ్లీ ప్రయత్నించండి.</translation> @@ -2875,6 +2879,7 @@ <translation id="5341980496415249280">దయచేసి వేచి ఉండండి, ప్యాకింగ్ జరుగుతోంది...</translation> <translation id="5342091991439452114">PIN తప్పనిసరిగా కనీసం <ph name="MINIMUM" /> అంకెలు ఉండాలి</translation> <translation id="5352033265844765294">టైమ్ స్టాంపింగ్</translation> +<translation id="5352285283572729470">ఈ సెట్టింగ్ నిర్వహించబడుతుంది</translation> <translation id="5353252989841766347">Chrome నుండి పాస్వర్డ్లను ఎగుమతి చేయండి</translation> <translation id="5355097969896547230">మళ్ళీ కనుగొనండి</translation> <translation id="5355926466126177564">"<ph name="EXTENSION_NAME" />" పొడిగింపు మీరు ఓమ్నిపెట్టె నుండి శోధించేటప్పుడు చూపబడే పేజీని మార్చింది.</translation> @@ -3138,7 +3143,6 @@ <translation id="5723508132121499792">నేపథ్య అనువర్తనాలు ఏవీ అమలులోలేవు</translation> <translation id="5727728807527375859">ఎక్స్టెన్షన్స్, అనువర్తనాలు మరియు థీమ్లు మీ కంప్యూటర్కు హాని కలిగిస్తాయి. మీరు కొనసాగించాలనుకుంటున్నారా?</translation> <translation id="5729712731028706266">&వీక్షణ</translation> -<translation id="5731185123186077399">Google Pay వంటి వ్యక్తిగతీకరించిన Google సేవలు</translation> <translation id="5731247495086897348">పే&స్ట్ చేసి ముందుకు వెళ్ళండి</translation> <translation id="5731409020711461763">1 కొత్త ఫోటో</translation> <translation id="5734362860645681824">కమ్యూనికేషన్లు</translation> @@ -3374,7 +3378,7 @@ <translation id="6075907793831890935"><ph name="HOSTNAME" /> పేరు గల పరికరంతో డేటాను ఇచ్చిపుచ్చుకోవడానికి అనుమతి</translation> <translation id="6076448957780543068">ఈ స్క్రీన్షాట్ని చేర్చు</translation> <translation id="6077131872140550515">ప్రాధాన్య నెట్వర్క్ల నుండి తీసివేయి</translation> -<translation id="6077189836672154517"><ph name="DEVICE_TYPE" />లో చిట్కాలు మరియు అప్డేట్లు</translation> +<translation id="6077189836672154517"><ph name="DEVICE_TYPE" />కు సంబంధించిన చిట్కాలు మరియు అప్డేట్లు</translation> <translation id="6078323886959318429">సత్వరమార్గాన్ని జోడించు</translation> <translation id="6078752646384677957">దయచేసి మీ మైక్రోఫోన్ మరియు ఆడియో స్థాయిలను తనిఖీ చేయండి.</translation> <translation id="6080515710685820702">షేర్డ్ కంప్యూటర్ని ఉపయోగిస్తున్నారా? అజ్ఞాత విండోలో తెరవండి.</translation> @@ -3783,6 +3787,7 @@ <translation id="6680650203439190394">రేట్</translation> <translation id="6681668084120808868">ఫోటోను తీయి</translation> <translation id="6681964764822470072">"<ph name="APP_NAME" />" అన్ఇన్స్టాల్ చేయబడుతుంది.</translation> +<translation id="6685083257944113180">ఆపివేయి, <ph name="SINK_NAME" />, <ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">Google Playని తెరువు</translation> <translation id="6686490380836145850">కుడివైపు ట్యాబ్లను మూసివేయి</translation> <translation id="6686817083349815241">మీ పాస్వర్డ్ను సేవ్ చేయండి</translation> @@ -3814,7 +3819,7 @@ <translation id="6725206449694821596">ఇంటర్నెట్ ముద్రణ ప్రోటోకాల్ (IPP)</translation> <translation id="6727005317916125192">మునుపటి పేన్</translation> <translation id="6732801395666424405">ప్రమాణపత్రాలు లోడ్ కాలేదు</translation> -<translation id="6732900235521116609">సత్వరమార్గాన్ని తొలగించలేరు</translation> +<translation id="6732900235521116609">షార్ట్కట్ను తొలగించలేరు</translation> <translation id="6735304988756581115">కుక్కీలు మరియు ఇతర సైట్ డేటాను చూపించు... </translation> <translation id="6736045498964449756">అయ్యో, పాస్వర్డ్లు సరిపోలలేదు!</translation> <translation id="6736243959894955139">చిరునామా</translation> @@ -4263,6 +4268,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{అన్నింటినీ &కొత్త విండోలో తెరవండి}=1{&కొత్త విండోలో తెరవండి}other{అన్నింటినీ (#) &కొత్త విండోలో తెరవండి}}</translation> <translation id="7434509671034404296">డెవలపర్</translation> <translation id="7436921188514130341">అయ్యో! పేరు మారుస్తున్నప్పుడు లోపం ఏర్పడింది.</translation> +<translation id="7441736921018636843">ఈ సెట్టింగ్ని మార్చడానికి, మీ సమకాలీకరణ రహస్య పదబంధాన్ని తీసివేయడానికి <ph name="BEGIN_LINK" />సమకాలీకరణను రీసెట్ చేయండి<ph name="END_LINK" /></translation> <translation id="7441830548568730290">ఇతర వినియోగదారులు</translation> <translation id="7442465037756169001">మీ Hangouts Meet hardware సెటప్ చేయడానికి సిద్ధంగా ఉంది.</translation> <translation id="744341768939279100">కొత్త ప్రొఫైల్ని సృష్టించు...</translation> @@ -4304,7 +4310,7 @@ <translation id="7494694779888133066"><ph name="WIDTH" /> x <ph name="HEIGHT" /></translation> <translation id="7495778526395737099">మీ పాత పాస్వర్డ్ను మర్చిపోయారా?</translation> <translation id="7497215489070763236">సర్వర్ CA సర్టిఫికేట్</translation> -<translation id="7497981768003291373">మీకు ఇటీవల అప్లోడ్ చేసిన WebRTC లాగ్లు ఏవీ లేవు.</translation> +<translation id="7497981768003291373">మీ వద్ద ఇటీవల క్యాప్చర్ చేయబడిన WebRTC వచన లాగ్లు ఏవీ లేవు.</translation> <translation id="7502658306369382406">IPv6 చిరునామా</translation> <translation id="7503191893372251637">Netscape సర్టిఫికెట్ రకం</translation> <translation id="7503821294401948377">బ్రౌజర్ చర్య కోసం '<ph name="ICON" />' చిహ్నం లోడ్ చేయబడలేదు.</translation> @@ -4704,7 +4710,7 @@ <translation id="8059417245945632445">&పరికరాలను పర్యవేక్షించు</translation> <translation id="8063235345342641131">డిఫాల్ట్ ఆకుపచ్చ రంగు అవతార్</translation> <translation id="8064671687106936412">కీలకమైన:</translation> -<translation id="8065485338434000013">ఈ పరికరంలో మీ కార్డ్లలో కొన్ని మాత్రమే ఉపయోగించబడతాయి</translation> +<translation id="8065485338434000013">మీ కార్డ్లలో కొన్ని మాత్రమే ఈ పరికరంలో ఉపయోగించవచ్చు</translation> <translation id="806812017500012252">శీర్షిక ద్వారా క్రమాన్ని మార్చు</translation> <translation id="8068253693380742035">సైన్ ఇన్ చేయడానికి తాకండి</translation> <translation id="8069615408251337349">Google క్లౌడ్ ప్రింట్</translation> @@ -5197,7 +5203,7 @@ <translation id="8838770651474809439">హాంబర్గర్</translation> <translation id="883911313571074303">చిత్రాన్ని అనులేఖించు</translation> <translation id="8845001906332463065">సహాయం పొందండి</translation> -<translation id="8846132060409673887">ఈ కంప్యూటర్ తయారీదారు మరియు మోడల్ని చదవండి</translation> +<translation id="8846132060409673887">ఈ కంప్యూటర్ తయారీదారు పేరు మరియు మోడల్కి సంబంధించిన సమాచారాన్ని చదవగలుగుతుంది</translation> <translation id="8846141544112579928">కీబోర్డ్ కోసం శోధిస్తోంది...</translation> <translation id="8847988622838149491">USB</translation> <translation id="8859057652521303089">మీ భాషను ఎంచుకోండి:</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 2dc8e47..b6504fc 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">ไม่มีแอปพลิเคชันทำงานในพื้นหลัง</translation> <translation id="5727728807527375859">ส่วนขยาย แอปพลิเคชัน และธีมอาจเป็นอันตรายต่อคอมพิวเตอร์ของคุณได้ คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ</translation> <translation id="5729712731028706266">&มุมมอง</translation> -<translation id="5731185123186077399">บริการของ Google อย่างเช่น Google Pay ที่ปรับเปลี่ยนในแบบของคุณ</translation> <translation id="5731247495086897348">&วางแล้วไป</translation> <translation id="5731409020711461763">รูปภาพใหม่ 1 รูป</translation> <translation id="5734362860645681824">การสื่อสาร</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index a32abce..3347cdb 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -3144,7 +3144,6 @@ <translation id="5723508132121499792">Çalışan hiç arka plan uygulaması yok</translation> <translation id="5727728807527375859">Uzantılar, uygulamalar ve temalar bilgisayarınıza zarar verebilir. Devam etmek istediğinizden emin misiniz?</translation> <translation id="5729712731028706266">&Görüntüle</translation> -<translation id="5731185123186077399">Google Pay gibi kişiselleştirilmiş Google hizmetlerinden yararlanın</translation> <translation id="5731247495086897348">Ya&pıştır ve Git</translation> <translation id="5731409020711461763">1 yeni fotoğraf</translation> <translation id="5734362860645681824">İletişim</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index e72c59f..e8c7e3c 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Не запущено жодну фонову програму</translation> <translation id="5727728807527375859">Розширення, служби та теми можуть зашкодити вашому комп'ютеру. Дійсно продовжити?</translation> <translation id="5729712731028706266">&Перегляд</translation> -<translation id="5731185123186077399">Персоналізовані сервіси Google, як-от Google Pay</translation> <translation id="5731247495086897348">Вста&вити та перейти</translation> <translation id="5731409020711461763">1 нове фото</translation> <translation id="5734362860645681824">Зв’язок</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 9f037b2..1339294 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -3143,7 +3143,6 @@ <translation id="5723508132121499792">Không có ứng dụng nền nào đang chạy</translation> <translation id="5727728807527375859">Tiện ích, ứng dụng và chủ đề có thể gây hại cho máy tính của bạn. Bạn có chắc chắn muốn tiếp tục không?</translation> <translation id="5729712731028706266">&Xem</translation> -<translation id="5731185123186077399">Các dịch vụ được cá nhân hóa của Google, chẳng hạn như Google Pay</translation> <translation id="5731247495086897348">Dá&n và Truy cập</translation> <translation id="5731409020711461763">1 ảnh mới</translation> <translation id="5734362860645681824">Truyền thông</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 3b40023..6607c82 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">启用辅助功能,以便更轻松地使用您的设备。</translation> <translation id="1190144681599273207">抓取此文件将使用约 <ph name="FILE_SIZE" /> 移动数据。</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{可访问您计算机上存储的 1 个文件}other{可访问您计算机上存储的 # 个文件}}</translation> +<translation id="1193273168751563528">进入受管理自助服务终端</translation> <translation id="1195076408729068893">要启动 Smart Lock,请输入您的密码。下次,您就能使用配对手机来解锁您的 <ph name="DEVICE_TYPE" /> 了。</translation> <translation id="1195447618553298278">未知错误。</translation> <translation id="119738088725604856">窗口的屏幕截图</translation> @@ -1312,6 +1313,7 @@ <translation id="29488703364906173">一款快速、简单且安全的网络浏览器,能很好满足现代网络对浏览器的要求。</translation> <translation id="2951247061394563839">使窗口居中</translation> <translation id="2958721676848865875">打包扩展程序警告</translation> +<translation id="296026337010986570">搞定了!已移除有害软件。要想重新开启扩展程序,请前往<a href="chrome://extensions">扩展程序</a>页面。</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" />(已提供扩展功能)</translation> <translation id="2961695502793809356">点击可前进,按住可查看历史记录</translation> <translation id="2963151496262057773">以下插件没有响应:<ph name="PLUGIN_NAME" />。是否要停止使用该插件?</translation> @@ -1716,6 +1718,7 @@ <translation id="358796204584394954">请在“<ph name="DEVICE_NAME" />”上输入以下代码进行配对:</translation> <translation id="3589766037099229847">已拦截不安全内容</translation> <translation id="3590194807845837023">解锁个人资料并重新启动</translation> +<translation id="3590295622232282437">正在进入受管理自助服务终端。</translation> <translation id="3592260987370335752">了解详情(&L)</translation> <translation id="359283478042092570">输入</translation> <translation id="3593965109698325041">证书名称约束</translation> @@ -2658,6 +2661,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">允许</translation> <translation id="5045550434625856497">密码不正确</translation> +<translation id="504561833207953641">正在现有的浏览器会话中打开。</translation> <translation id="5047421709274785093">禁止网站使用动态传感器和光传感器</translation> <translation id="5050042263972837708">群组名称</translation> <translation id="5052499409147950210">修改网站</translation> @@ -2862,6 +2866,7 @@ <translation id="5341980496415249280">正在打包,请稍候…</translation> <translation id="5342091991439452114">PIN 码必须至少为 <ph name="MINIMUM" /> 位数</translation> <translation id="5352033265844765294">时间戳</translation> +<translation id="5352285283572729470">这是一项受管设置</translation> <translation id="5353252989841766347">从 Chrome 中导出密码</translation> <translation id="5355097969896547230">重新查找</translation> <translation id="5355926466126177564">“<ph name="EXTENSION_NAME" />”扩展程序更改了您通过多功能框进行搜索时系统显示的页面。</translation> @@ -3125,7 +3130,6 @@ <translation id="5723508132121499792">没有任何后台应用在运行</translation> <translation id="5727728807527375859">扩展功能、应用和主题背景可能会损害您的计算机。您确定要继续吗?</translation> <translation id="5729712731028706266">视图(&V)</translation> -<translation id="5731185123186077399">个性化的 Google 服务(例如 Google Pay)</translation> <translation id="5731247495086897348">粘贴并转到(&S)</translation> <translation id="5731409020711461763">1 张新照片</translation> <translation id="5734362860645681824">通讯</translation> @@ -3769,6 +3773,7 @@ <translation id="6680650203439190394">语速</translation> <translation id="6681668084120808868">拍照</translation> <translation id="6681964764822470072">系统即将卸载“<ph name="APP_NAME" />”。</translation> +<translation id="6685083257944113180">停止,<ph name="SINK_NAME" />,<ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">打开 Google Play</translation> <translation id="6686490380836145850">关闭右侧标签页</translation> <translation id="6686817083349815241">保存您的密码</translation> @@ -4249,6 +4254,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{在新窗口中打开全部网址(&N)}=1{在新窗口中打开 1 个网址(&N)}other{在新窗口中打开全部(# 个)网址(&N)}}</translation> <translation id="7434509671034404296">开发者</translation> <translation id="7436921188514130341">糟糕!重命名过程中出错了。</translation> +<translation id="7441736921018636843">要更改此设置,请<ph name="BEGIN_LINK" />重置同步功能<ph name="END_LINK" />以移除同步密码</translation> <translation id="7441830548568730290">其他用户</translation> <translation id="7442465037756169001">您的 Hangouts Meet 设备现已可供设置了。</translation> <translation id="744341768939279100">创建新的个人资料</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index d3ca5d4a..b1e70b28 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -137,6 +137,7 @@ <translation id="1189418886587279221">啟用協助功能,讓你使用裝置更輕鬆。</translation> <translation id="1190144681599273207">擷取這個檔案大約會使用 <ph name="FILE_SIZE" /> 行動數據流量。</translation> <translation id="11901918071949011">{NUM_FILES,plural, =1{存取 1 個儲存在您電腦上的檔案}other{存取 # 個儲存在您電腦上的檔案}}</translation> +<translation id="1193273168751563528">進入受管理工作階段</translation> <translation id="1195076408729068893">如要啟動 Smart Lock,請輸入你的密碼。下次即可使用手機為你的 <ph name="DEVICE_TYPE" /> 解鎖。</translation> <translation id="1195447618553298278">未知的錯誤。</translation> <translation id="119738088725604856">螢幕擷取畫面視窗</translation> @@ -1316,6 +1317,7 @@ <translation id="29488703364906173">一款快速、簡單又安全的新世代網路瀏覽器。</translation> <translation id="2951247061394563839">置中視窗</translation> <translation id="2958721676848865875">封裝擴充功能警告</translation> +<translation id="296026337010986570">大功告成!有害軟體已移除。如要重新開啟擴充功能,請造訪<a href="chrome://extensions">擴充功能</a>。</translation> <translation id="2961090598421146107"><ph name="CERTIFICATE_NAME" /> (擴充功能已提供)</translation> <translation id="2961695502793809356">按一下到下一頁,按住可查看記錄</translation> <translation id="2963151496262057773">下列外掛程式無回應:<ph name="PLUGIN_NAME" /> 您要停止執行嗎?</translation> @@ -1722,6 +1724,7 @@ <translation id="358796204584394954">在「<ph name="DEVICE_NAME" />」上輸入此代碼即可配對:</translation> <translation id="3589766037099229847">已封鎖不安全的內容</translation> <translation id="3590194807845837023">解除鎖定設定檔並重新啟動</translation> +<translation id="3590295622232282437">正在進入受管理工作階段。</translation> <translation id="3592260987370335752">瞭解詳情(&L)</translation> <translation id="359283478042092570">輸入</translation> <translation id="3593965109698325041">憑證名稱限制</translation> @@ -2664,6 +2667,7 @@ <translation id="5039512255859636053">$1 TB</translation> <translation id="5039804452771397117">允許</translation> <translation id="5045550434625856497">密碼不正確</translation> +<translation id="504561833207953641">正於現有瀏覽器工作階段中開啟。</translation> <translation id="5047421709274785093">禁止網站使用動作感應器和光源感應器</translation> <translation id="5050042263972837708">群組名稱</translation> <translation id="5052499409147950210">編輯網站</translation> @@ -2873,6 +2877,7 @@ <translation id="5341980496415249280">封裝中,請稍候...</translation> <translation id="5342091991439452114">PIN 至少需有 <ph name="MINIMUM" /> 碼</translation> <translation id="5352033265844765294">時間戳記</translation> +<translation id="5352285283572729470">這是受管理的設定</translation> <translation id="5353252989841766347">從 Chrome 中匯出密碼</translation> <translation id="5355097969896547230">重新尋找</translation> <translation id="5355926466126177564">擴充功能「<ph name="EXTENSION_NAME" />」已變更您使用網址列搜尋時所顯示的網頁。</translation> @@ -3136,7 +3141,6 @@ <translation id="5723508132121499792">沒有執行中的背景應用程式</translation> <translation id="5727728807527375859">擴充功能、應用程式及主題可能損害你的電腦,確定要繼續?</translation> <translation id="5729712731028706266">檢視(&V)</translation> -<translation id="5731185123186077399">個人化的 Google 服務,例如 Google Pay</translation> <translation id="5731247495086897348">貼上並前往(&S)</translation> <translation id="5731409020711461763">1 張新相片</translation> <translation id="5734362860645681824">通訊</translation> @@ -3780,6 +3784,7 @@ <translation id="6680650203439190394">語速</translation> <translation id="6681668084120808868">拍照</translation> <translation id="6681964764822470072">系統會解除安裝「<ph name="APP_NAME" />」。</translation> +<translation id="6685083257944113180">停止,<ph name="SINK_NAME" />,<ph name="SINK_STATUS" /></translation> <translation id="668599234725812620">開啟 Google Play</translation> <translation id="6686490380836145850">關閉右邊的分頁</translation> <translation id="6686817083349815241">儲存你的密碼</translation> @@ -4260,6 +4265,7 @@ <translation id="7433692219247014412">{COUNT,plural, =0{在新視窗中開啟所有書籤(&N)}=1{在新視窗中開啟(&N)}other{在新視窗中開啟全部 # 個書籤(&N)}}</translation> <translation id="7434509671034404296">開發人員選項</translation> <translation id="7436921188514130341">糟糕!重新命名過程中發生錯誤。</translation> +<translation id="7441736921018636843">如要變更這項設定,請<ph name="BEGIN_LINK" />重設同步處理功能<ph name="END_LINK" />以移除同步處理通關密語</translation> <translation id="7441830548568730290">其他使用者</translation> <translation id="7442465037756169001">現在可以開始設定你的 Hangouts Meet 設備了。</translation> <translation id="744341768939279100">建立新的設定檔</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb index cc0cedee..e80ce015 100644 --- a/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -26,7 +26,7 @@ <translation id="1587325591171447154"><ph name="FILE_NAME" /> বিপজ্জনক, তাই Chrome এটিকে অবরুদ্ধ করেছে।</translation> <translation id="1619887657840448962">Chrome কে আরও নিরাপদ করতে, আমরা নীচের এক্সটেনশানটি অক্ষম করেছি যা <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> এ তালিকাবদ্ধ করা হয়নি এবং হয়ত আপনাকে না জানিয়ে যোগ করা হয়েছিল৷</translation> <translation id="1628000112320670027">Chrome সম্পর্কে সহায়তা পান</translation> -<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />-এর মত অতিরিক্ত <ph name="BEGIN_LINK_CROS_OSS" />ওপেন সোর্স সফ্টওয়্যার<ph name="END_LINK_CROS_OSS" /> ব্যবহার করে Chrome OS তৈরি হয়।</translation> +<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (Beta)<ph name="END_LINK_LINUX_OSS" />-এর মত অতিরিক্ত <ph name="BEGIN_LINK_CROS_OSS" />ওপেন সোর্স সফ্টওয়্যার<ph name="END_LINK_CROS_OSS" /> ব্যবহার করে Chrome OS তৈরি করা সম্ভব হয়েছে।</translation> <translation id="1674870198290878346">Chrome এ ছদ্ম&বেশী উইন্ডোতে লিঙ্ক খুলুন</translation> <translation id="1682634494516646069">Google Chrome-এর ডেটা নির্দেশিকা পড়তে এবং লিখতে পারে না:
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb index bd81d4a..faa9a167 100644 --- a/chrome/app/resources/google_chrome_strings_ml.xtb +++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -28,7 +28,7 @@ <translation id="1587325591171447154"><ph name="FILE_NAME" /> അപകടകരമായതിനാൽ, Chrome ഇതിനെ ബ്ലോക്കുചെയ്തു.</translation> <translation id="1619887657840448962">Chrome സുരക്ഷിതമാക്കാൻ, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റുചെയ്യാത്ത ചില വിപുലീകരണങ്ങൾ ഞങ്ങൾ പ്രവർത്തനരഹിതമാക്കി, അവ നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation> <translation id="1628000112320670027">Chrome ഉപയോഗിക്കുന്നതിനുള്ള സഹായം തേടുക</translation> -<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (ബീറ്റ)<ph name="END_LINK_LINUX_OSS" /> പോലെ അധിക <ph name="BEGIN_LINK_CROS_OSS" />ഓപ്പൺ സോഴ്സ് സോഫ്റ്റ്വെയർ<ph name="END_LINK_CROS_OSS" /> മുഖേനയാണ് Chrome OS നിർമ്മിച്ചിരിക്കുന്നത്.</translation> +<translation id="1662639173275167396"><ph name="BEGIN_LINK_LINUX_OSS" />Linux (ബീറ്റ)<ph name="END_LINK_LINUX_OSS" /> പോലെ അധിക <ph name="BEGIN_LINK_CROS_OSS" />ഓപ്പൺ സോഴ്സ് സോഫ്റ്റ്വെയർ<ph name="END_LINK_CROS_OSS" /> ഉപയോഗിച്ചാണ് Chrome OS സാധ്യമാക്കിയിട്ടുള്ളത്.</translation> <translation id="1674870198290878346">Chrome ആൾ&മാറാട്ട വിൻഡോയിൽ ലിങ്ക് തുറക്കുക</translation> <translation id="1682634494516646069">Google Chrome-ന് ഇതിന്റെ ഡാറ്റാ ഡയറക്ടറി വായിക്കാനും അതിൽ എഴുതാനും കഴിയില്ല:
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index adeb5ea..b57016f 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -73,7 +73,7 @@ <translation id="2586406160782125153">हे या डिव्हाइस मधून आपला ब्राउझिंग डेटा हटवेल. नंतर आपला डेटा पुनर्प्राप्त करण्यासाठी, Chrome मध्ये <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation> <translation id="2588322182880276190">Chrome लोगो</translation> <translation id="2652691236519827073">लिंक नवीन Chrome &टॅबमध्ये उघडा</translation> -<translation id="2665296953892887393">Google कडे क्रॅश अहवाल आणि <ph name="UMA_LINK" /> पाठवून Google Chrome ला</translation> +<translation id="2665296953892887393">Google कडे क्रॅश अहवाल आणि <ph name="UMA_LINK" /> पाठवून Google Chrome ला अधिक चांगले बनवण्यात मदत करा</translation> <translation id="2689103672227170538">आपण Chrome सुरू करता तेव्हा कोणते पृष्ठ दर्शविले जाते हे या विस्ताराने बदलले आहे.</translation> <translation id="2765403129283291972">या साइटसाठी Chrome ला तुमचा मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation> <translation id="2770231113462710648">डीफॉल्ट ब्राउझर यावर बदला:</translation> @@ -148,7 +148,7 @@ <translation id="4771048833395599659">ही फाईल कदाचित धोकादायक असू शकते, त्यामुळे Chrome ने ती अवरोधित केली आहे.</translation> <translation id="4794050651896644714">Chrome मध्ये तपशील सेव्ह करा</translation> <translation id="4804732725083176494">या डीव्हाइसच्या प्रशासकाने Chrome मध्ये साइन इन करणे बंद केले आहे.</translation> -<translation id="4891791193823137474">पार्श्वभूमीत Google Chrome चालू द्या</translation> +<translation id="4891791193823137474">बॅकग्राउंडमध्ये Google Chrome चालू द्या</translation> <translation id="4895437082222824641">लिंक नवीन Chrome &टॅबमध्ये उघडा</translation> <translation id="4921569541910214635">एक कॉंप्युटर सामायिक करायचा? आपल्याला आवडते त्या प्रकारे आपण आता Chrome सेट करू शकता.</translation> <translation id="4945319281866068441">{0,plural, =1{Chrome OS एका दिवसात रीस्टार्ट करा}one{Chrome OS # दिवसात रीस्टार्ट करा}other{Chrome OS # दिवसांमध्ये रीस्टार्ट करा}}</translation> @@ -186,7 +186,7 @@ <translation id="5941830788786076944">Google Chromeला डीफॉल्ट ब्राउझर बनवा</translation> <translation id="6014844626092547096">आपण आता Chrome वर साइन इन आहात! आपल्या प्रशासकाद्वारे संकालन अक्षम केले गेले आहे.</translation> <translation id="6040143037577758943">बंद करा</translation> -<translation id="6070348360322141662">अतिरिक्त सुरक्षिततेसाठी, Google Chrome आपला डेटा कूटबद्ध करेल</translation> +<translation id="6070348360322141662">अतिरिक्त सुरक्षिततेसाठी, Google Chrome तुमचा डेटा एंक्रिप्ट करेल</translation> <translation id="6113794647360055231">Chrome आता उत्कृष्ट झाले आहे</translation> <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> – Google Chrome</translation> <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome बीटा</translation> @@ -224,7 +224,7 @@ <translation id="7398801000654795464">आपण <ph name="USER_EMAIL_ADDRESS" /> या रुपात Chrome मध्ये साइन इन केले होते. कृपया पुन्हा साइन इन करण्यासाठी समान खाते वापरा.</translation> <translation id="7408085963519505752">Chrome OS अटी</translation> <translation id="7419046106786626209">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Chrome OS आपला डेटा संकालित करू शकले नाही.</translation> -<translation id="7459554271817304652">तुमची वैयक्तीकृत केलेली ब्राउझर वैशिष्ट्ये सेव्ह करण्यासाठी समक्रमण सेट करा आणि कोणत्याही संगणकावरील Google Chrome वरून त्यात प्रवेश करा.</translation> +<translation id="7459554271817304652">तुमची पर्सनलाइझ केलेली ब्राउझर वैशिष्ट्ये सेव्ह करण्यासाठी सिंक सेट करा आणि कोणत्याही कॉंप्युटरवरील Google Chrome वरून ते अॅक्सेस करा.</translation> <translation id="7473136999113284234">Chrome स्वयंचलितपणे अपडेट होते जेणेकरून आपल्याकडे नेहमी सर्वात नवीन आवृत्ती असते.</translation> <translation id="7486227612705979895">अॅड्रेस बारमध्ये सूचना देण्यासाठी Chrome तुमची ड्राइव्ह अॅक्सेस करेल</translation> <translation id="7535429826459677826">Google Chrome विकासक</translation>
diff --git a/chrome/app_shim/BUILD.gn b/chrome/app_shim/BUILD.gn index d2c12e7a..8e5763f8 100644 --- a/chrome/app_shim/BUILD.gn +++ b/chrome/app_shim/BUILD.gn
@@ -21,6 +21,7 @@ "//ipc", "//mojo/core/embedder", "//ui/base", + "//ui/views:views", ] }
diff --git a/chrome/app_shim/OWNERS b/chrome/app_shim/OWNERS index fff9c34f..0269cd30 100644 --- a/chrome/app_shim/OWNERS +++ b/chrome/app_shim/OWNERS
@@ -1,2 +1,3 @@ +ccameron@chromium.org dominickn@chromium.org tapted@chromium.org
diff --git a/chrome/app_shim/chrome_main_app_mode_mac.mm b/chrome/app_shim/chrome_main_app_mode_mac.mm index a5961c61..208384cd 100644 --- a/chrome/app_shim/chrome_main_app_mode_mac.mm +++ b/chrome/app_shim/chrome_main_app_mode_mac.mm
@@ -8,6 +8,7 @@ // those app bundles. #import <Cocoa/Cocoa.h> +#include <utility> #include <vector> #include "base/at_exit.h" @@ -43,6 +44,8 @@ #include "mojo/public/cpp/system/isolated_connection.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/views/cocoa/bridge_factory_impl.h" +#include "ui/views_bridge_mac/mojo/bridge_factory.mojom.h" namespace { @@ -126,6 +129,8 @@ // chrome::mojom::AppShim implementation. void LaunchAppDone(apps::AppShimLaunchResult result) override; + void CreateViewsBridgeFactory( + views_bridge_mac::mojom::BridgeFactoryRequest request) override; void Hide() override; void UnhideWithoutActivation() override; void SetUserAttention(apps::AppShimAttentionType attention_type) override; @@ -303,6 +308,11 @@ launch_app_done_ = true; } +void AppShimController::CreateViewsBridgeFactory( + views_bridge_mac::mojom::BridgeFactoryRequest request) { + views_bridge_mac::BridgeFactoryImpl::Get()->BindRequest(std::move(request)); +} + void AppShimController::Hide() { [NSApp hide:nil]; }
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 56e24d3..7ee27cb8 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -4590,7 +4590,6 @@ "../android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerServiceFactory.java", "../android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerTabUtils.java", "../android/java/src/org/chromium/chrome/browser/dom_distiller/DomDistillerUIUtils.java", - "../android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java", "../android/java/src/org/chromium/chrome/browser/download/DownloadController.java", "../android/java/src/org/chromium/chrome/browser/download/DownloadInfo.java", "../android/java/src/org/chromium/chrome/browser/download/DownloadItem.java",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index d7e5713..0d09997 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -1218,13 +1218,13 @@ #if !defined(OS_ANDROID) const FeatureEntry::FeatureParam kProactiveTabFreezeAndDiscard_FreezeOnly[] = { - {resource_coordinator::ProactiveTabFreezeAndDiscardParams:: - kShouldProactivelyDiscard.name, + {resource_coordinator:: + kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, "false"}}; const FeatureEntry::FeatureParam kProactiveTabFreezeAndDiscard_FreezeAndDiscard[] = { - {resource_coordinator::ProactiveTabFreezeAndDiscardParams:: - kShouldProactivelyDiscard.name, + {resource_coordinator:: + kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, "true"}}; const FeatureEntry::FeatureVariation kProactiveTabFreezeAndDiscardVariations[] = {{"Freeze only", kProactiveTabFreezeAndDiscard_FreezeOnly, @@ -4235,7 +4235,7 @@ FEATURE_WITH_PARAMS_VALUE_TYPE( features::kProactiveTabFreezeAndDiscard, kProactiveTabFreezeAndDiscardVariations, - features::kProactiveTabFreezeAndDiscard.name)}, + resource_coordinator::kProactiveTabFreezeAndDiscardFeatureName)}, {"site-characteristics-database", flag_descriptions::kSiteCharacteristicsDatabaseName, flag_descriptions::kSiteCharacteristicsDatabaseDescription, kOsDesktop,
diff --git a/chrome/browser/android/feed/feed_content_bridge.cc b/chrome/browser/android/feed/feed_content_bridge.cc index 9087c51..1b59573 100644 --- a/chrome/browser/android/feed/feed_content_bridge.cc +++ b/chrome/browser/android/feed/feed_content_bridge.cc
@@ -40,6 +40,54 @@ using base::android::ToJavaArrayOfStrings; using base::android::JavaByteArrayToByteVector; +namespace { + +void OnLoadContentDone(ScopedJavaGlobalRef<jobject> success_callback, + ScopedJavaGlobalRef<jobject> failure_callback, + bool success, + std::vector<FeedContentDatabase::KeyAndData> pairs) { + std::vector<std::string> keys; + std::vector<std::string> data; + for (auto pair : pairs) { + keys.push_back(std::move(pair.first)); + data.push_back(std::move(pair.second)); + } + + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobjectArray> j_keys = ToJavaArrayOfStrings(env, keys); + ScopedJavaLocalRef<jobjectArray> j_data = ToJavaArrayOfByteArray(env, data); + + // Create Java Map by JNI call. + ScopedJavaLocalRef<jobject> j_pairs = + Java_FeedContentBridge_createKeyAndDataMap(env, j_keys, j_data); + + if (!success) { + RunObjectCallbackAndroid(failure_callback, nullptr); + return; + } + RunObjectCallbackAndroid(success_callback, j_pairs); +} + +void OnLoadAllContentKeysDone(ScopedJavaGlobalRef<jobject> success_callback, + ScopedJavaGlobalRef<jobject> failure_callback, + bool success, + std::vector<std::string> keys) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jobjectArray> j_keys = ToJavaArrayOfStrings(env, keys); + + if (!success) { + RunObjectCallbackAndroid(failure_callback, nullptr); + return; + } + RunObjectCallbackAndroid(success_callback, j_keys); +} + +void OnStorageCommitDone(ScopedJavaGlobalRef<jobject> callback, bool success) { + RunBooleanCallbackAndroid(callback, success); +} + +} // namespace + static jlong JNI_FeedContentBridge_Init( JNIEnv* env, const JavaParamRef<jobject>& j_this, @@ -77,9 +125,8 @@ ScopedJavaGlobalRef<jobject> failure_callback(j_failure_callback); feed_content_database_->LoadContent( - keys, base::BindOnce(&FeedContentBridge::OnLoadContentDone, - weak_ptr_factory_.GetWeakPtr(), success_callback, - failure_callback)); + keys, + base::BindOnce(&OnLoadContentDone, success_callback, failure_callback)); } void FeedContentBridge::LoadContentByPrefix( @@ -93,9 +140,8 @@ ScopedJavaGlobalRef<jobject> failure_callback(j_failure_callback); feed_content_database_->LoadContentByPrefix( - prefix, base::BindOnce(&FeedContentBridge::OnLoadContentDone, - weak_ptr_factory_.GetWeakPtr(), success_callback, - failure_callback)); + prefix, + base::BindOnce(&OnLoadContentDone, success_callback, failure_callback)); } void FeedContentBridge::LoadAllContentKeys( @@ -107,8 +153,7 @@ ScopedJavaGlobalRef<jobject> failure_callback(j_failure_callback); feed_content_database_->LoadAllContentKeys(base::BindOnce( - &FeedContentBridge::OnLoadAllContentKeysDone, - weak_ptr_factory_.GetWeakPtr(), success_callback, failure_callback)); + &OnLoadAllContentKeysDone, success_callback, failure_callback)); } void FeedContentBridge::CommitContentMutation( @@ -120,8 +165,7 @@ feed_content_database_->CommitContentMutation( std::move(content_mutation_), - base::BindOnce(&FeedContentBridge::OnStorageCommitDone, - weak_ptr_factory_.GetWeakPtr(), callback)); + base::BindOnce(&OnStorageCommitDone, callback)); } void FeedContentBridge::CreateContentMutation(JNIEnv* j_env, @@ -177,52 +221,4 @@ content_mutation_->AppendDeleteAllOperation(); } -void FeedContentBridge::OnLoadContentDone( - ScopedJavaGlobalRef<jobject> success_callback, - ScopedJavaGlobalRef<jobject> failure_callback, - bool success, - std::vector<FeedContentDatabase::KeyAndData> pairs) { - std::vector<std::string> keys; - std::vector<std::string> data; - for (auto pair : pairs) { - keys.push_back(std::move(pair.first)); - data.push_back(std::move(pair.second)); - } - - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jobjectArray> j_keys = ToJavaArrayOfStrings(env, keys); - ScopedJavaLocalRef<jobjectArray> j_data = ToJavaArrayOfByteArray(env, data); - - // Create Java Map by JNI call. - ScopedJavaLocalRef<jobject> j_pairs = - Java_FeedContentBridge_createKeyAndDataMap(env, j_keys, j_data); - - if (!success) { - RunObjectCallbackAndroid(failure_callback, j_pairs); - return; - } - RunObjectCallbackAndroid(success_callback, j_pairs); -} - -void FeedContentBridge::OnLoadAllContentKeysDone( - ScopedJavaGlobalRef<jobject> success_callback, - ScopedJavaGlobalRef<jobject> failure_callback, - bool success, - std::vector<std::string> keys) { - JNIEnv* env = AttachCurrentThread(); - ScopedJavaLocalRef<jobjectArray> j_keys = ToJavaArrayOfStrings(env, keys); - - if (!success) { - RunObjectCallbackAndroid(failure_callback, j_keys); - return; - } - RunObjectCallbackAndroid(success_callback, j_keys); -} - -void FeedContentBridge::OnStorageCommitDone( - ScopedJavaGlobalRef<jobject> callback, - bool success) { - RunBooleanCallbackAndroid(callback, success); -} - } // namespace feed
diff --git a/chrome/browser/android/feed/feed_content_bridge.h b/chrome/browser/android/feed/feed_content_bridge.h index e728ae8..6fdbac99 100644 --- a/chrome/browser/android/feed/feed_content_bridge.h +++ b/chrome/browser/android/feed/feed_content_bridge.h
@@ -69,19 +69,6 @@ const base::android::JavaRef<jobject>& j_this); private: - void OnLoadContentDone( - base::android::ScopedJavaGlobalRef<jobject> success_callback, - base::android::ScopedJavaGlobalRef<jobject> failure_callback, - bool success, - std::vector<FeedContentDatabase::KeyAndData> pairs); - void OnLoadAllContentKeysDone( - base::android::ScopedJavaGlobalRef<jobject> success_callback, - base::android::ScopedJavaGlobalRef<jobject> failure_callback, - bool success, - std::vector<std::string> keys); - void OnStorageCommitDone(base::android::ScopedJavaGlobalRef<jobject> callback, - bool success); - // This unique_ptr will hold a list of ContentOperations which are not // committed yet. After commit to database, this unique_ptr will be reset. std::unique_ptr<ContentMutation> content_mutation_;
diff --git a/chrome/browser/android/feed/feed_journal_bridge.cc b/chrome/browser/android/feed/feed_journal_bridge.cc index 17c48cee..5fc8d67 100644 --- a/chrome/browser/android/feed/feed_journal_bridge.cc +++ b/chrome/browser/android/feed/feed_journal_bridge.cc
@@ -34,18 +34,37 @@ namespace { -void OnLoadJournalDone(base::android::ScopedJavaGlobalRef<jobject> callback, - std::vector<std::string> entries) { +void OnLoadJournalDone( + base::android::ScopedJavaGlobalRef<jobject> success_callback, + base::android::ScopedJavaGlobalRef<jobject> failure_callback, + bool success, + std::vector<std::string> entries) { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobjectArray> j_entries = ToJavaArrayOfStrings(env, entries); - RunObjectCallbackAndroid(callback, j_entries); + if (!success) { + RunObjectCallbackAndroid(failure_callback, nullptr); + return; + } + RunObjectCallbackAndroid(success_callback, j_entries); +} + +void OnStorageCheckExistingCallbackDone( + ScopedJavaGlobalRef<jobject> success_callback, + ScopedJavaGlobalRef<jobject> failure_callback, + bool success, + bool exists) { + if (!success) { + RunObjectCallbackAndroid(failure_callback, nullptr); + return; + } + RunBooleanCallbackAndroid(success_callback, exists); } void OnStorageBooleanCallbackDone(ScopedJavaGlobalRef<jobject> callback, - bool result) { - RunBooleanCallbackAndroid(callback, result); + bool exists) { + RunBooleanCallbackAndroid(callback, exists); } } // namespace @@ -81,12 +100,15 @@ JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this, const base::android::JavaRef<jstring>& j_journal_name, - const base::android::JavaRef<jobject>& j_callback) { + const base::android::JavaRef<jobject>& j_success_callback, + const base::android::JavaRef<jobject>& j_failure_callback) { std::string journal_name = ConvertJavaStringToUTF8(j_env, j_journal_name); - ScopedJavaGlobalRef<jobject> callback(j_callback); + ScopedJavaGlobalRef<jobject> success_callback(j_success_callback); + ScopedJavaGlobalRef<jobject> failure_callback(j_failure_callback); feed_journal_database_->LoadJournal( - journal_name, base::BindOnce(&OnLoadJournalDone, callback)); + journal_name, + base::BindOnce(&OnLoadJournalDone, success_callback, failure_callback)); } void FeedJournalBridge::CommitJournalMutation( @@ -105,22 +127,27 @@ JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this, const base::android::JavaRef<jstring>& j_journal_name, - const base::android::JavaRef<jobject>& j_callback) { + const base::android::JavaRef<jobject>& j_success_callback, + const base::android::JavaRef<jobject>& j_failure_callback) { std::string journal_name = ConvertJavaStringToUTF8(j_env, j_journal_name); - ScopedJavaGlobalRef<jobject> callback(j_callback); + ScopedJavaGlobalRef<jobject> success_callback(j_success_callback); + ScopedJavaGlobalRef<jobject> failure_callback(j_failure_callback); feed_journal_database_->DoesJournalExist( - journal_name, base::BindOnce(&OnStorageBooleanCallbackDone, callback)); + journal_name, base::BindOnce(&OnStorageCheckExistingCallbackDone, + success_callback, failure_callback)); } void FeedJournalBridge::LoadAllJournalKeys( JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this, - const base::android::JavaRef<jobject>& j_callback) { - ScopedJavaGlobalRef<jobject> callback(j_callback); + const base::android::JavaRef<jobject>& j_success_callback, + const base::android::JavaRef<jobject>& j_failure_callback) { + ScopedJavaGlobalRef<jobject> success_callback(j_success_callback); + ScopedJavaGlobalRef<jobject> failure_callback(j_failure_callback); feed_journal_database_->LoadAllJournalKeys( - base::BindOnce(&OnLoadJournalDone, callback)); + base::BindOnce(&OnLoadJournalDone, success_callback, failure_callback)); } void FeedJournalBridge::DeleteAllJournals(
diff --git a/chrome/browser/android/feed/feed_journal_bridge.h b/chrome/browser/android/feed/feed_journal_bridge.h index 9d19e76..c7f4a26 100644 --- a/chrome/browser/android/feed/feed_journal_bridge.h +++ b/chrome/browser/android/feed/feed_journal_bridge.h
@@ -34,17 +34,22 @@ void LoadJournal(JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this, const base::android::JavaRef<jstring>& j_journal_name, - const base::android::JavaRef<jobject>& j_callback); + const base::android::JavaRef<jobject>& j_success_callback, + const base::android::JavaRef<jobject>& j_failure_callback); void CommitJournalMutation(JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this, const base::android::JavaRef<jobject>& j_callback); - void DoesJournalExist(JNIEnv* j_env, - const base::android::JavaRef<jobject>& j_this, - const base::android::JavaRef<jstring>& j_journal_name, - const base::android::JavaRef<jobject>& j_callback); - void LoadAllJournalKeys(JNIEnv* j_env, - const base::android::JavaRef<jobject>& j_this, - const base::android::JavaRef<jobject>& j_callback); + void DoesJournalExist( + JNIEnv* j_env, + const base::android::JavaRef<jobject>& j_this, + const base::android::JavaRef<jstring>& j_journal_name, + const base::android::JavaRef<jobject>& j_success_callback, + const base::android::JavaRef<jobject>& j_failure_callback); + void LoadAllJournalKeys( + JNIEnv* j_env, + const base::android::JavaRef<jobject>& j_this, + const base::android::JavaRef<jobject>& j_success_callback, + const base::android::JavaRef<jobject>& j_failure_callback); void DeleteAllJournals(JNIEnv* j_env, const base::android::JavaRef<jobject>& j_this, const base::android::JavaRef<jobject>& j_callback);
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn index 07a9d75..5cb8767 100644 --- a/chrome/browser/android/vr/BUILD.gn +++ b/chrome/browser/android/vr/BUILD.gn
@@ -21,6 +21,8 @@ "autocomplete_controller.h", "browser_renderer_factory.cc", "browser_renderer_factory.h", + "cardboard_input_delegate.cc", + "cardboard_input_delegate.h", "gl_browser_interface.h", "gvr_graphics_delegate.cc", "gvr_graphics_delegate.h",
diff --git a/chrome/browser/android/vr/browser_renderer_factory.cc b/chrome/browser/android/vr/browser_renderer_factory.cc index 6999e00b..93a0d5ce 100644 --- a/chrome/browser/android/vr/browser_renderer_factory.cc +++ b/chrome/browser/android/vr/browser_renderer_factory.cc
@@ -7,6 +7,7 @@ #include <utility> #include "base/threading/thread_task_runner_handle.h" +#include "chrome/browser/android/vr/cardboard_input_delegate.h" #include "chrome/browser/android/vr/gvr_input_delegate.h" #include "chrome/browser/android/vr/gvr_keyboard_delegate.h" #include "chrome/browser/android/vr/gvr_scheduler_delegate.h" @@ -63,8 +64,13 @@ vr_gl_thread, vr_gl_thread, std::move(keyboard_delegate), std::move(text_input_delegate), std::move(audio_delegate), params->ui_initial_state); - auto input_delegate = - std::make_unique<GvrInputDelegate>(params->gvr_api, vr_gl_thread); + std::unique_ptr<InputDelegate> input_delegate; + if (params->cardboard_gamepad) { + input_delegate = std::make_unique<CardboardInputDelegate>(params->gvr_api); + } else { + input_delegate = + std::make_unique<GvrInputDelegate>(params->gvr_api, vr_gl_thread); + } auto graphics_delegate = std::make_unique<GvrGraphicsDelegate>( vr_gl_thread, base::BindOnce(&UiInterface::OnGlInitialized, base::Unretained(ui.get())),
diff --git a/chrome/browser/android/vr/cardboard_input_delegate.cc b/chrome/browser/android/vr/cardboard_input_delegate.cc new file mode 100644 index 0000000..67c2087 --- /dev/null +++ b/chrome/browser/android/vr/cardboard_input_delegate.cc
@@ -0,0 +1,80 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/vr/cardboard_input_delegate.h" + +#include "chrome/browser/vr/input_event.h" +#include "chrome/browser/vr/model/controller_model.h" +#include "device/vr/android/gvr/gvr_delegate.h" + +namespace vr { + +CardboardInputDelegate::CardboardInputDelegate(gvr::GvrApi* gvr_api) + : gvr_api_(gvr_api) {} + +CardboardInputDelegate::~CardboardInputDelegate() = default; + +void CardboardInputDelegate::OnTriggerEvent(bool pressed) { + if (pressed) { + cardboard_trigger_pressed_ = true; + } else if (cardboard_trigger_pressed_) { + cardboard_trigger_pressed_ = false; + cardboard_trigger_clicked_ = true; + } +} + +gfx::Transform CardboardInputDelegate::GetHeadPose() { + gfx::Transform head_pose; + device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_, &head_pose); + return head_pose; +} + +void CardboardInputDelegate::UpdateController(const gfx::Transform& head_pose, + base::TimeTicks current_time, + bool is_webxr_frame) {} + +ControllerModel CardboardInputDelegate::GetControllerModel( + const gfx::Transform& head_pose) { + // On cardboard, we have some UI frames, such as when no WebXR frame have + // arrived. But in this case, we don't have any elements that react to input. + return {}; +} + +InputEventList CardboardInputDelegate::GetGestures( + base::TimeTicks current_time) { + return {}; +} + +device::mojom::XRInputSourceStatePtr +CardboardInputDelegate::GetInputSourceState() { + device::mojom::XRInputSourceStatePtr state = + device::mojom::XRInputSourceState::New(); + // Only one gaze input source to worry about, so it can have a static id. + state->source_id = 1; + + // Report any trigger state changes made since the last call and reset the + // state here. + state->primary_input_pressed = cardboard_trigger_pressed_; + state->primary_input_clicked = cardboard_trigger_clicked_; + cardboard_trigger_clicked_ = false; + + state->description = device::mojom::XRInputSourceDescription::New(); + + // It's a gaze-cursor-based device. + state->description->target_ray_mode = device::mojom::XRTargetRayMode::GAZING; + state->description->emulated_position = true; + + // No implicit handedness + state->description->handedness = device::mojom::XRHandedness::NONE; + + // Pointer and grip transforms are omitted since this is a gaze-based source. + + return state; +} + +void CardboardInputDelegate::OnResume() {} + +void CardboardInputDelegate::OnPause() {} + +} // namespace vr
diff --git a/chrome/browser/android/vr/cardboard_input_delegate.h b/chrome/browser/android/vr/cardboard_input_delegate.h new file mode 100644 index 0000000..bde39bf --- /dev/null +++ b/chrome/browser/android/vr/cardboard_input_delegate.h
@@ -0,0 +1,44 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_VR_CARDBOARD_INPUT_DELEGATE_H_ +#define CHROME_BROWSER_ANDROID_VR_CARDBOARD_INPUT_DELEGATE_H_ + +#include "base/macros.h" +#include "chrome/browser/vr/input_delegate.h" + +namespace gvr { +class GvrApi; +} + +namespace vr { + +class CardboardInputDelegate : public InputDelegate { + public: + explicit CardboardInputDelegate(gvr::GvrApi* gvr_api); + ~CardboardInputDelegate() override; + + // InputDelegate implementation. + gfx::Transform GetHeadPose() override; + void OnTriggerEvent(bool pressed) override; + void UpdateController(const gfx::Transform& head_pose, + base::TimeTicks current_time, + bool is_webxr_frame) override; + ControllerModel GetControllerModel(const gfx::Transform& head_pose) override; + InputEventList GetGestures(base::TimeTicks current_time) override; + device::mojom::XRInputSourceStatePtr GetInputSourceState() override; + void OnResume() override; + void OnPause() override; + + private: + gvr::GvrApi* gvr_api_; + bool cardboard_trigger_pressed_ = false; + bool cardboard_trigger_clicked_ = false; + + DISALLOW_COPY_AND_ASSIGN(CardboardInputDelegate); +}; + +} // namespace vr + +#endif // CHROME_BROWSER_ANDROID_VR_CARDBOARD_INPUT_DELEGATE_H_
diff --git a/chrome/browser/android/vr/gvr_graphics_delegate.cc b/chrome/browser/android/vr/gvr_graphics_delegate.cc index 085e094..1e78f3b 100644 --- a/chrome/browser/android/vr/gvr_graphics_delegate.cc +++ b/chrome/browser/android/vr/gvr_graphics_delegate.cc
@@ -13,6 +13,8 @@ #include "chrome/browser/vr/gl_texture_location.h" #include "chrome/browser/vr/vr_geometry_util.h" #include "chrome/browser/vr/vr_gl_util.h" +#include "third_party/skia/include/core/SkImageEncoder.h" +#include "third_party/skia/include/core/SkPixmap.h" #include "ui/gfx/geometry/angle_conversions.h" #include "ui/gl/android/scoped_java_surface.h" #include "ui/gl/android/surface_texture.h" @@ -291,6 +293,10 @@ content_surface_texture_->UpdateTexImage(); } +void GvrGraphicsDelegate::SetFrameDumpFilepathBase(std::string& filepath_base) { + frame_buffer_dump_filepath_base_ = filepath_base; +} + void GvrGraphicsDelegate::OnContentFrameAvailable() { if (content_paused_) return; @@ -538,6 +544,10 @@ glDisable(GL_POLYGON_OFFSET_FILL); glViewport(0, 0, webxr_surface_size_.width(), webxr_surface_size_.height()); + if (!frame_buffer_dump_filepath_base_.empty()) { + frame_buffer_dump_filepath_suffix_ = "_WebXrContent"; + last_bound_buffer_index_ = kNoMultiSampleBuffer; + } } void GvrGraphicsDelegate::PrepareBufferForWebXrOverlayElements() { @@ -548,6 +558,10 @@ viewport_list_.SetBufferViewport(2, webvr_overlay_viewport_.left); viewport_list_.SetBufferViewport(3, webvr_overlay_viewport_.right); glClear(GL_COLOR_BUFFER_BIT); + if (!frame_buffer_dump_filepath_base_.empty()) { + frame_buffer_dump_filepath_suffix_ = "_WebXrOverlay"; + last_bound_buffer_index_ = kMultiSampleBuffer; + } } void GvrGraphicsDelegate::PrepareBufferForContentQuadLayer( @@ -575,6 +589,10 @@ kContentBorderPixels, content_tex_buffer_size_.width() + 2 * kContentBorderPixels, content_tex_buffer_size_.height() + 2 * kContentBorderPixels); + if (!frame_buffer_dump_filepath_base_.empty()) { + frame_buffer_dump_filepath_suffix_ = "_BrowserContent"; + last_bound_buffer_index_ = kNoMultiSampleBuffer; + } } void GvrGraphicsDelegate::PrepareBufferForBrowserUi() { @@ -585,6 +603,10 @@ main_viewport_.right); acquired_frame_.BindBuffer(kMultiSampleBuffer); glClear(GL_COLOR_BUFFER_BIT); + if (!frame_buffer_dump_filepath_base_.empty()) { + frame_buffer_dump_filepath_suffix_ = "_BrowserUi"; + last_bound_buffer_index_ = kMultiSampleBuffer; + } } FovRectangles GvrGraphicsDelegate::GetRecommendedFovs() { @@ -611,6 +633,7 @@ } void GvrGraphicsDelegate::OnFinishedDrawingBuffer() { + MaybeDumpFrameBufferToDisk(); acquired_frame_.Unbind(); } @@ -667,6 +690,39 @@ return; } +void GvrGraphicsDelegate::MaybeDumpFrameBufferToDisk() { + if (frame_buffer_dump_filepath_base_.empty()) + return; + + // Create buffer + std::unique_ptr<SkBitmap> bitmap = std::make_unique<SkBitmap>(); + int width = swap_chain_.GetBufferSize(last_bound_buffer_index_).width; + int height = swap_chain_.GetBufferSize(last_bound_buffer_index_).height; + CHECK(bitmap->tryAllocN32Pixels(width, height, false)); + + // Read pixels from frame buffer + SkPixmap pixmap; + CHECK(bitmap->peekPixels(&pixmap)); + glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, + pixmap.writable_addr()); + DCHECK(glGetError() == GL_NO_ERROR); + + // Flip image vertically since SkBitmap expects the pixels in a different + // order. + for (int col = 0; col < width; ++col) { + for (int row = 0; row < height / 2; ++row) { + std::swap(*pixmap.writable_addr32(col, row), + *pixmap.writable_addr32(col, height - row - 1)); + } + } + + std::string filename = frame_buffer_dump_filepath_base_ + + frame_buffer_dump_filepath_suffix_ + ".png"; + SkFILEWStream stream(filename.c_str()); + DCHECK(stream.isValid()); + CHECK(SkEncodeImage(&stream, *bitmap, SkEncodedImageFormat::kPNG, 100)); +} + void GvrGraphicsDelegate::SubmitToGvr(const gfx::Transform& head_pose) { TRACE_EVENT0("gpu", __func__); gvr::Mat4f mat;
diff --git a/chrome/browser/android/vr/gvr_graphics_delegate.h b/chrome/browser/android/vr/gvr_graphics_delegate.h index fac0b3c9..ff39cdba 100644 --- a/chrome/browser/android/vr/gvr_graphics_delegate.h +++ b/chrome/browser/android/vr/gvr_graphics_delegate.h
@@ -137,6 +137,7 @@ void BufferBoundsChanged(const gfx::Size& content_buffer_size, const gfx::Size& overlay_buffer_size) override; void ResumeContentRendering() override; + void SetFrameDumpFilepathBase(std::string& filepath_base) override; // End GraphicsDelegate overrides. void UIBoundsChanged(int width, int height); @@ -156,6 +157,7 @@ void OnUiFrameAvailable(); void WebVrWaitForServerFence(); + void MaybeDumpFrameBufferToDisk(); WebXrPresentationState* webxr_; @@ -213,6 +215,10 @@ std::vector<gvr::BufferSpec> specs_; + std::string frame_buffer_dump_filepath_base_; + std::string frame_buffer_dump_filepath_suffix_; + unsigned int last_bound_buffer_index_; + base::WeakPtrFactory<GvrGraphicsDelegate> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(GvrGraphicsDelegate);
diff --git a/chrome/browser/android/vr/gvr_input_delegate.cc b/chrome/browser/android/vr/gvr_input_delegate.cc index 165a1e4..29a5f66 100644 --- a/chrome/browser/android/vr/gvr_input_delegate.cc +++ b/chrome/browser/android/vr/gvr_input_delegate.cc
@@ -34,6 +34,10 @@ return head_pose; } +void GvrInputDelegate::OnTriggerEvent(bool pressed) { + NOTREACHED(); +} + void GvrInputDelegate::UpdateController(const gfx::Transform& head_pose, base::TimeTicks current_time, bool is_webxr_frame) {
diff --git a/chrome/browser/android/vr/gvr_input_delegate.h b/chrome/browser/android/vr/gvr_input_delegate.h index de519dc0..be3c23f 100644 --- a/chrome/browser/android/vr/gvr_input_delegate.h +++ b/chrome/browser/android/vr/gvr_input_delegate.h
@@ -26,6 +26,7 @@ ~GvrInputDelegate() override; // InputDelegate implementation. + void OnTriggerEvent(bool pressed) override; gfx::Transform GetHeadPose() override; void UpdateController(const gfx::Transform& head_pose, base::TimeTicks current_time,
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.cc b/chrome/browser/android/vr/gvr_scheduler_delegate.cc index 933e033..9267c566 100644 --- a/chrome/browser/android/vr/gvr_scheduler_delegate.cc +++ b/chrome/browser/android/vr/gvr_scheduler_delegate.cc
@@ -118,14 +118,6 @@ ScheduleOrCancelWebVrFrameTimeout(); } -void GvrSchedulerDelegate::OnTriggerEvent(bool pressed) { - if (pressed) { - cardboard_trigger_pressed_ = true; - } else if (cardboard_trigger_pressed_) { - cardboard_trigger_pressed_ = false; - cardboard_trigger_clicked_ = true; - } -} void GvrSchedulerDelegate::SetWebXrMode(bool enabled) { BaseSchedulerDelegate::SetWebXrMode(enabled); @@ -398,14 +390,14 @@ vsync_helper_.RequestVSync(); - pending_vsync_ = true; - pending_time_ = frame_time; - WebXrTryStartAnimatingFrame(true); - if (ShouldDrawWebVr()) browser_renderer_->ProcessControllerInputForWebXr(frame_time); else DrawFrame(-1, frame_time); + + webxr_vsync_pending_ = true; + pending_time_ = frame_time; + WebXrTryStartAnimatingFrame(true); } void GvrSchedulerDelegate::DrawFrame(int16_t frame_index, @@ -717,7 +709,7 @@ return false; } - if (!pending_vsync_) { + if (!webxr_vsync_pending_) { DVLOG(2) << __func__ << ": waiting for pending_vsync (too fast)"; return false; } @@ -870,10 +862,10 @@ void GvrSchedulerDelegate::SendVSync() { DCHECK(!get_frame_data_callback_.is_null()); - DCHECK(pending_vsync_); + DCHECK(webxr_vsync_pending_); // Mark the VSync as consumed. - pending_vsync_ = false; + webxr_vsync_pending_ = false; device::mojom::XRFrameDataPtr frame_data = device::mojom::XRFrameData::New(); @@ -909,13 +901,7 @@ } TRACE_EVENT0("gpu", "GvrSchedulerDelegate::XRInput"); - if (cardboard_gamepad_) { - std::vector<device::mojom::XRInputSourceStatePtr> input_states; - input_states.push_back(GetGazeInputSourceState()); - pose->input_state = std::move(input_states); - } else { - pose->input_state = std::move(input_states_); - } + pose->input_state = std::move(input_states_); frame_data->pose = std::move(pose); @@ -1039,34 +1025,6 @@ return expected_frame_time; } -device::mojom::XRInputSourceStatePtr -GvrSchedulerDelegate::GetGazeInputSourceState() { - device::mojom::XRInputSourceStatePtr state = - device::mojom::XRInputSourceState::New(); - - // Only one gaze input source to worry about, so it can have a static id. - state->source_id = 1; - - // Report any trigger state changes made since the last call and reset the - // state here. - state->primary_input_pressed = cardboard_trigger_pressed_; - state->primary_input_clicked = cardboard_trigger_clicked_; - cardboard_trigger_clicked_ = false; - - state->description = device::mojom::XRInputSourceDescription::New(); - - // It's a gaze-cursor-based device. - state->description->target_ray_mode = device::mojom::XRTargetRayMode::GAZING; - state->description->emulated_position = true; - - // No implicit handedness - state->description->handedness = device::mojom::XRHandedness::NONE; - - // Pointer and grip transforms are omitted since this is a gaze-based source. - - return state; -} - void GvrSchedulerDelegate::ClosePresentationBindings() { CancelWebXrFrameTimeout(); submit_client_.reset();
diff --git a/chrome/browser/android/vr/gvr_scheduler_delegate.h b/chrome/browser/android/vr/gvr_scheduler_delegate.h index 9f72bdc..9fdf9c1 100644 --- a/chrome/browser/android/vr/gvr_scheduler_delegate.h +++ b/chrome/browser/android/vr/gvr_scheduler_delegate.h
@@ -67,7 +67,6 @@ void AddInputSourceState(device::mojom::XRInputSourceStatePtr state) override; void OnPause() override; void OnResume() override; - void OnTriggerEvent(bool pressed) override; void SetWebXrMode(bool enabled) override; void SetShowingVrDialog(bool showing) override; void SubmitDrawnFrame(FrameType frame_type, @@ -121,8 +120,6 @@ base::TimeDelta GetPredictedFrameTime(); - device::mojom::XRInputSourceStatePtr GetGazeInputSourceState(); - device::mojom::XRPresentationTransportOptionsPtr GetWebXrFrameTransportOptions( const device::mojom::XRRuntimeSessionOptionsPtr&); @@ -179,9 +176,6 @@ WebXrPresentationState webxr_; bool showing_vr_dialog_ = false; bool cardboard_gamepad_ = false; - // TODO(acondor): Move trigger data to controller delegate. - bool cardboard_trigger_pressed_ = false; - bool cardboard_trigger_clicked_ = false; // WebXR currently supports multiple render path choices, with runtime // selection based on underlying support being available and feature flags. @@ -212,11 +206,11 @@ // get_frame_data_callback_. The callback is executed by SendVSync once // WebVrCanAnimateFrame returns true. // - // pending_vsync_ is set to true in OnVSync and false in SendVSync. It + // webxr_vsync_pending_ is set to true in OnVSync and false in SendVSync. It // throttles animation to no faster than the VSync rate. The pending_time_ is // updated in OnVSync and used as the rAF animation timer in SendVSync. base::TimeTicks pending_time_; - bool pending_vsync_ = false; + bool webxr_vsync_pending_ = false; device::mojom::XRFrameDataProvider::GetFrameDataCallback get_frame_data_callback_;
diff --git a/chrome/browser/android/vr/vr_gl_thread.cc b/chrome/browser/android/vr/vr_gl_thread.cc index e2c60a7..623ba72 100644 --- a/chrome/browser/android/vr/vr_gl_thread.cc +++ b/chrome/browser/android/vr/vr_gl_thread.cc
@@ -516,12 +516,13 @@ base::BindOnce(&BrowserUiInterface::RemoveAllTabs, weak_browser_ui_)); } -void VrGLThread::ReportUiActivityResultForTesting( +void VrGLThread::ReportUiOperationResultForTesting( + const UiTestOperationType& action_type, const VrUiTestActivityResult& result) { DCHECK(OnGlThread()); main_thread_task_runner_->PostTask( - FROM_HERE, base::BindOnce(&VrShell::ReportUiActivityResultForTesting, - weak_vr_shell_, result)); + FROM_HERE, base::BindOnce(&VrShell::ReportUiOperationResultForTesting, + weak_vr_shell_, action_type, result)); } bool VrGLThread::OnMainThread() const {
diff --git a/chrome/browser/android/vr/vr_gl_thread.h b/chrome/browser/android/vr/vr_gl_thread.h index 6ca8c86..120bee4 100644 --- a/chrome/browser/android/vr/vr_gl_thread.h +++ b/chrome/browser/android/vr/vr_gl_thread.h
@@ -76,7 +76,8 @@ // BrowserRendererBrowserInterface implementation (BrowserRenderer calling to // VrShell). void ForceExitVr() override; - void ReportUiActivityResultForTesting( + void ReportUiOperationResultForTesting( + const UiTestOperationType& action_type, const VrUiTestActivityResult& result) override; // PlatformInputHandler
diff --git a/chrome/browser/android/vr/vr_shell.cc b/chrome/browser/android/vr/vr_shell.cc index 0e94995..79b864c 100644 --- a/chrome/browser/android/vr/vr_shell.cc +++ b/chrome/browser/android/vr/vr_shell.cc
@@ -1268,10 +1268,24 @@ gl_thread_->GetBrowserRenderer(), ui_expectation)); } -void VrShell::ReportUiActivityResultForTesting(VrUiTestActivityResult result) { +void VrShell::SaveNextFrameBufferToDiskForTesting( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + jstring filepath_base) { + PostToGlThread( + FROM_HERE, + base::BindOnce( + &BrowserRenderer::SaveNextFrameBufferToDiskForTesting, + gl_thread_->GetBrowserRenderer(), + base::android::ConvertJavaStringToUTF8(env, filepath_base))); +} + +void VrShell::ReportUiOperationResultForTesting(UiTestOperationType action_type, + VrUiTestActivityResult result) { JNIEnv* env = base::android::AttachCurrentThread(); - Java_VrShell_reportUiActivityResultForTesting(env, j_vr_shell_, - static_cast<int>(result)); + Java_VrShell_reportUiOperationResultForTesting(env, j_vr_shell_, + static_cast<int>(action_type), + static_cast<int>(result)); } void VrShell::PerformControllerActionForTesting(
diff --git a/chrome/browser/android/vr/vr_shell.h b/chrome/browser/android/vr/vr_shell.h index 504aaae..043cbe3 100644 --- a/chrome/browser/android/vr/vr_shell.h +++ b/chrome/browser/android/vr/vr_shell.h
@@ -56,6 +56,7 @@ class VrInputConnection; class VrShellDelegate; class VrWebContentsObserver; +enum class UiTestOperationType; enum class VrUiTestActivityResult; struct Assets; struct AutocompleteRequest; @@ -280,7 +281,13 @@ const base::android::JavaParamRef<jobject>& obj, jint quiescence_timeout_ms); - void ReportUiActivityResultForTesting(VrUiTestActivityResult result); + void SaveNextFrameBufferToDiskForTesting( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + jstring filepath_base); + + void ReportUiOperationResultForTesting(UiTestOperationType action_type, + VrUiTestActivityResult result); void PerformControllerActionForTesting( JNIEnv* env,
diff --git a/chrome/browser/apps/app_shim/BUILD.gn b/chrome/browser/apps/app_shim/BUILD.gn index 82b974de..d2d02de18 100644 --- a/chrome/browser/apps/app_shim/BUILD.gn +++ b/chrome/browser/apps/app_shim/BUILD.gn
@@ -37,5 +37,6 @@ "//content/public/common", "//extensions/browser", "//extensions/common", + "//ui/views:views", ] }
diff --git a/chrome/browser/apps/app_shim/OWNERS b/chrome/browser/apps/app_shim/OWNERS index fff9c34f..0269cd30 100644 --- a/chrome/browser/apps/app_shim/OWNERS +++ b/chrome/browser/apps/app_shim/OWNERS
@@ -1,2 +1,3 @@ +ccameron@chromium.org dominickn@chromium.org tapted@chromium.org
diff --git a/chrome/browser/apps/app_shim/app_shim_host_mac.cc b/chrome/browser/apps/app_shim/app_shim_host_mac.cc index e91a775..4cee08a6 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_mac.cc +++ b/chrome/browser/apps/app_shim/app_shim_host_mac.cc
@@ -11,6 +11,8 @@ #include "base/logging.h" #include "chrome/browser/apps/app_shim/app_shim_handler_mac.h" #include "content/public/browser/browser_thread.h" +#include "ui/base/ui_base_features.h" +#include "ui/views_bridge_mac/mojo/bridge_factory.mojom.h" AppShimHost::AppShimHost() : host_binding_(this), initial_launch_finished_(false) {} @@ -63,6 +65,15 @@ return; app_shim_ = std::move(app_shim_ptr); + // Create the interface that will be used by views::NativeWidgetMac to create + // NSWindows hosted in the app shim process. + if (features::HostWindowsInAppShimProcess()) { + views_bridge_mac::mojom::BridgeFactoryRequest views_bridge_factory_request; + views_bridge_factory_host_ = std::make_unique<views::BridgeFactoryHost>( + &views_bridge_factory_request); + app_shim_->CreateViewsBridgeFactory( + std::move(views_bridge_factory_request)); + } profile_path_ = profile_dir; app_id_ = app_id;
diff --git a/chrome/browser/apps/app_shim/app_shim_host_mac.h b/chrome/browser/apps/app_shim/app_shim_host_mac.h index 8fd31a5a..9f51c0e 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_mac.h +++ b/chrome/browser/apps/app_shim/app_shim_host_mac.h
@@ -16,6 +16,7 @@ #include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/platform/platform_channel_endpoint.h" #include "mojo/public/cpp/system/isolated_connection.h" +#include "ui/views/cocoa/bridge_factory_host.h" // This is the counterpart to AppShimController in // chrome/app/chrome_main_app_mode_mac.mm. The AppShimHost owns itself, and is @@ -61,6 +62,7 @@ mojo::IsolatedConnection mojo_connection_; chrome::mojom::AppShimPtr app_shim_; + std::unique_ptr<views::BridgeFactoryHost> views_bridge_factory_host_; mojo::Binding<chrome::mojom::AppShimHost> host_binding_; std::string app_id_; base::FilePath profile_path_;
diff --git a/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc b/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc index b28da16f..9e4984ef 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc +++ b/chrome/browser/apps/app_shim/app_shim_host_mac_unittest.cc
@@ -44,6 +44,8 @@ received_launch_done_result_ = true; launch_done_result_ = result; } + void CreateViewsBridgeFactory( + views_bridge_mac::mojom::BridgeFactoryRequest request) override {} void Hide() override {} void UnhideWithoutActivation() override {} void SetUserAttention(apps::AppShimAttentionType attention_type) override {}
diff --git a/chrome/browser/apps/app_shim/app_shim_host_manager_browsertest_mac.mm b/chrome/browser/apps/app_shim/app_shim_host_manager_browsertest_mac.mm index 5119f91..89ab8ca 100644 --- a/chrome/browser/apps/app_shim/app_shim_host_manager_browsertest_mac.mm +++ b/chrome/browser/apps/app_shim/app_shim_host_manager_browsertest_mac.mm
@@ -49,6 +49,8 @@ // chrome::mojom::AppShim implementation (not used in testing, but can be). void LaunchAppDone(apps::AppShimLaunchResult result) override {} + void CreateViewsBridgeFactory( + views_bridge_mac::mojom::BridgeFactoryRequest request) override {} void Hide() override {} void UnhideWithoutActivation() override {} void SetUserAttention(apps::AppShimAttentionType attention_type) override {}
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc index 33cf79fc..426e9a0a 100644 --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc
@@ -38,6 +38,7 @@ #include "chrome/browser/chrome_child_process_watcher.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/chrome_device_client.h" +#include "chrome/browser/chrome_feature_list_creator.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/component_updater/chrome_component_updater_configurator.h" #include "chrome/browser/component_updater/supervised_user_whitelist_installer.h" @@ -216,8 +217,8 @@ } BrowserProcessImpl::BrowserProcessImpl( - scoped_refptr<PersistentPrefStore> user_pref_store) - : user_pref_store_(std::move(user_pref_store)), + ChromeFeatureListCreator* chrome_feature_list_creator) + : chrome_feature_list_creator_(chrome_feature_list_creator), pref_service_factory_( std::make_unique<prefs::InProcessPrefServiceFactory>()) { g_browser_process = this; @@ -1110,17 +1111,29 @@ base::FilePath local_state_path; CHECK(base::PathService::Get(chrome::FILE_LOCAL_STATE, &local_state_path)); + auto pref_registry = base::MakeRefCounted<PrefRegistrySimple>(); + if (chrome_feature_list_creator_) + local_state_ = chrome_feature_list_creator_->TakePrefService(); + PrefRegistrySimple* pref_pregistry_simple = + local_state_ ? static_cast<PrefRegistrySimple*>( + local_state_->DeprecatedGetPrefRegistry()) + : pref_registry.get(); // Register local state preferences. - RegisterLocalState(pref_registry.get()); + RegisterLocalState(pref_pregistry_simple); auto delegate = pref_service_factory_->CreateDelegate(); - delegate->InitPrefRegistry(pref_registry.get()); - local_state_ = chrome_prefs::CreateLocalState( - local_state_path, policy_service(), std::move(pref_registry), false, - std::move(delegate), std::move(user_pref_store_)); - DCHECK(local_state_); + delegate->InitPrefRegistry(pref_pregistry_simple); + if (local_state_) { + chrome_prefs::InstallPoliciesOnLocalState( + local_state_.get(), policy_service(), std::move(delegate)); + } else { + local_state_ = chrome_prefs::CreateLocalState( + local_state_path, policy_service(), std::move(pref_registry), false, + std::move(delegate)); + DCHECK(local_state_); + } sessions::SessionIdGenerator::GetInstance()->Init(local_state_.get()); }
diff --git a/chrome/browser/browser_process_impl.h b/chrome/browser/browser_process_impl.h index ada99565..22ade27f 100644 --- a/chrome/browser/browser_process_impl.h +++ b/chrome/browser/browser_process_impl.h
@@ -35,6 +35,7 @@ class ChromeChildProcessWatcher; class ChromeDeviceClient; +class ChromeFeatureListCreator; class ChromeMetricsServicesManagerClient; class ChromeResourceDispatcherHostDelegate; class DevToolsAutoOpener; @@ -82,7 +83,7 @@ // destination) of user prefs for Local State instead of loading the JSON file // from disk. explicit BrowserProcessImpl( - scoped_refptr<PersistentPrefStore> user_pref_store); + ChromeFeatureListCreator* chrome_feature_list_creator); ~BrowserProcessImpl() override; // Called to complete initialization. @@ -329,10 +330,9 @@ scoped_refptr<DownloadRequestLimiter> download_request_limiter_; - // A pref store that is created from the Local State file. This is handed-off - // to |local_state_| when it's created. It will use it, if non-null, instead - // of loading the user prefs from disk. - scoped_refptr<PersistentPrefStore> user_pref_store_; + // If non-null, this object holds a pref store that will be taken by + // BrowserProcessImpl to create the |local_state_|. + ChromeFeatureListCreator* chrome_feature_list_creator_; // Ensures that the observers of plugin/print disable/enable state // notifications are properly added and removed.
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd index c04570dab..c074001 100644 --- a/chrome/browser/browser_resources.grd +++ b/chrome/browser/browser_resources.grd
@@ -70,13 +70,16 @@ </structures> <includes> <if expr="is_win or is_macosx or desktop_linux or chromeos"> - <include name="IDR_ABOUT_DISCARDS_CSS" file="resources\discards\discards.css" type="BINDATA" /> - <include name="IDR_ABOUT_DISCARDS_HTML" file="resources\discards\discards.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_ABOUT_DISCARDS_DATABASE_TAB_HTML" file="resources\discards\database_tab.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_ABOUT_DISCARDS_DISCARDS_TAB_HTML" file="resources\discards\discards_tab.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_ABOUT_DISCARDS_JS" file="resources\discards\discards.js" type="BINDATA" /> - <include name="IDR_ABOUT_DISCARDS_MOJO_JS" file="${root_gen_dir}\chrome\browser\ui\webui\discards\discards.mojom.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_ABOUT_DISCARDS_LIFECYCLE_UNIT_STATE_MOJO_JS" file="${root_gen_dir}\chrome\browser\resource_coordinator\lifecycle_unit_state.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_DISCARDS_DATABASE_TAB_HTML" file="resources\discards\database_tab.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_DISCARDS_DATABASE_TAB_JS" file="resources\discards\database_tab.js" type="BINDATA" /> + <include name="IDR_DISCARDS_DISCARDS_MAIN_HTML" file="resources\discards\discards_main.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_DISCARDS_DISCARDS_MAIN_JS" file="resources\discards\discards_main.js" type="BINDATA" /> + <include name="IDR_DISCARDS_DISCARDS_TAB_HTML" file="resources\discards\discards_tab.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_DISCARDS_DISCARDS_TAB_JS" file="resources\discards\discards_tab.js" type="BINDATA" /> + <include name="IDR_DISCARDS_HTML" file="resources\discards\discards.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_DISCARDS_JS" file="resources\discards\discards.js" type="BINDATA" /> + <include name="IDR_DISCARDS_LIFECYCLE_UNIT_STATE_MOJO_JS" file="${root_gen_dir}\chrome\browser\resource_coordinator\lifecycle_unit_state.mojom.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_DISCARDS_MOJO_JS" file="${root_gen_dir}\chrome\browser\ui\webui\discards\discards.mojom.js" use_base_dir="false" type="BINDATA" /> </if> <if expr="is_win"> <include name="IDR_ABOUT_CONFLICTS_HTML" file="resources\conflicts\about_conflicts.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index c30c4f9..628634b 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc
@@ -405,9 +405,9 @@ registry->RegisterStringPref(language::prefs::kApplicationLocale, std::string()); const std::unique_ptr<PrefService> parent_local_state = - chrome_prefs::CreateLocalState( - parent_profile, g_browser_process->policy_service(), - std::move(registry), false, nullptr, nullptr); + chrome_prefs::CreateLocalState(parent_profile, + g_browser_process->policy_service(), + std::move(registry), false, nullptr); // Right now, we only inherit the locale setting from the parent profile. local_state->SetString( language::prefs::kApplicationLocale, @@ -1004,8 +1004,8 @@ // Create BrowserProcess in PreEarlyInitialization() so that we can load // field trials (and all it depends upon). - browser_process_ = std::make_unique<BrowserProcessImpl>( - chrome_feature_list_creator_->GetPrefStore()); + browser_process_ = + std::make_unique<BrowserProcessImpl>(chrome_feature_list_creator_); bool failed_to_load_resource_bundle = false; const int load_local_state_result =
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 58e8c1e..19d875b 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -434,6 +434,8 @@ #include "chrome/browser/extensions/bookmark_app_navigation_throttle.h" #include "chrome/browser/extensions/chrome_content_browser_client_extensions_part.h" #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" +#include "chrome/browser/extensions/user_script_listener.h" +#include "chrome/browser/media/cast_transport_host_filter.h" #include "chrome/browser/speech/extension_api/tts_engine_delegate_factory_impl.h" #include "chrome/browser/speech/extension_api/tts_engine_extension_api.h" #include "chrome/browser/ui/extensions/hosted_app_browser_controller.h" @@ -461,10 +463,6 @@ #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/permissions/socket_permission.h" #include "extensions/common/switches.h" -#endif - -#if BUILDFLAG(ENABLE_EXTENSIONS) -#include "chrome/browser/media/cast_transport_host_filter.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) #if BUILDFLAG(ENABLE_MUS) @@ -4041,6 +4039,13 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) throttles.push_back( std::make_unique<extensions::ExtensionNavigationThrottle>(handle)); + + std::unique_ptr<content::NavigationThrottle> user_script_throttle = + extensions::ExtensionsBrowserClient::Get() + ->GetUserScriptListener() + ->CreateNavigationThrottle(handle); + if (user_script_throttle) + throttles.push_back(std::move(user_script_throttle)); #endif #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
diff --git a/chrome/browser/chrome_content_browser_manifest_overlay.json b/chrome/browser/chrome_content_browser_manifest_overlay.json index 15d4ec5e..a1d52602 100644 --- a/chrome/browser/chrome_content_browser_manifest_overlay.json +++ b/chrome/browser/chrome_content_browser_manifest_overlay.json
@@ -73,7 +73,7 @@ "unzip": [ "unzip_file" ], "util_win" : [ "shell_util_win" ], "wifi_util_win": [ "wifi_credentials" ], - "xr_device_service": [ "xr_device_provider" ] + "xr_device_service": [ "xr_device_provider", "xr_device_test_hook" ] } }, "navigation:frame": {
diff --git a/chrome/browser/chrome_feature_list_creator.cc b/chrome/browser/chrome_feature_list_creator.cc index 44ba341d..486de8f 100644 --- a/chrome/browser/chrome_feature_list_creator.cc +++ b/chrome/browser/chrome_feature_list_creator.cc
@@ -7,6 +7,8 @@ #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/path_service.h" +#include "chrome/browser/prefs/chrome_command_line_pref_store.h" +#include "chrome/browser/prefs/chrome_pref_service_factory.h" #include "chrome/common/chrome_paths.h" #include "components/prefs/json_pref_store.h" #include "components/prefs/pref_registry.h" @@ -28,7 +30,11 @@ PrefServiceFactory factory; factory.set_user_prefs(pref_store_); - + factory.set_command_line_prefs( + base::MakeRefCounted<ChromeCommandLinePrefStore>( + base::CommandLine::ForCurrentProcess())); + factory.set_read_error_callback(base::BindRepeating( + &chrome_prefs::HandlePersistentPrefStoreReadError, local_state_file)); scoped_refptr<PrefRegistry> registry = new PrefRegistrySimple(); simple_local_state_ = factory.Create(registry); } @@ -37,6 +43,10 @@ return pref_store_; } +std::unique_ptr<PrefService> ChromeFeatureListCreator::TakePrefService() { + return std::move(simple_local_state_); +} + void ChromeFeatureListCreator::CreateFeatureList() { CreatePrefService(); // TODO(hanxi): Add implementation to create feature list.
diff --git a/chrome/browser/chrome_feature_list_creator.h b/chrome/browser/chrome_feature_list_creator.h index 9d8b0f80..fdd42d80 100644 --- a/chrome/browser/chrome_feature_list_creator.h +++ b/chrome/browser/chrome_feature_list_creator.h
@@ -19,6 +19,9 @@ // Gets the pref store that is used to create feature list. scoped_refptr<PersistentPrefStore> GetPrefStore(); + // Passing ownership of the |simple_local_state_| to the caller. + std::unique_ptr<PrefService> TakePrefService(); + // Initializes all necessary parameters to create the feature list and calls // base::FeatureList::SetInstance() to set the global instance. void CreateFeatureList(); @@ -30,6 +33,8 @@ scoped_refptr<PersistentPrefStore> pref_store_; + // If TakePrefService() is called, the caller will take the ownership + // of this variable. Stop using this variable afterwards. std::unique_ptr<PrefService> simple_local_state_; DISALLOW_COPY_AND_ASSIGN(ChromeFeatureListCreator);
diff --git a/chrome/browser/chromeos/android_sms/android_sms_service.cc b/chrome/browser/chromeos/android_sms/android_sms_service.cc index 1611ded..44281ad 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_service.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_service.cc
@@ -47,6 +47,7 @@ MultiDeviceSetupClient* multidevice_setup_client = MultiDeviceSetupClientFactory::GetForProfile( Profile::FromBrowserContext(browser_context_)); + DCHECK(multidevice_setup_client); connection_manager_ = std::make_unique<ConnectionManager>( service_worker_context, std::make_unique<ConnectionEstablisherImpl>(),
diff --git a/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc b/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc index 6e4622aa..d6df3ab 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc
@@ -39,7 +39,10 @@ KeyedService* AndroidSmsServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { if (!base::FeatureList::IsEnabled( - chromeos::features::kAndroidMessagesIntegration)) { + chromeos::features::kAndroidMessagesIntegration) || + !base::FeatureList::IsEnabled( + chromeos::features::kEnableUnifiedMultiDeviceSetup) || + !base::FeatureList::IsEnabled(chromeos::features::kMultiDeviceApi)) { return nullptr; }
diff --git a/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.cc b/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.cc index 7e006cf..616acea 100644 --- a/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.cc +++ b/chrome/browser/chromeos/arc/app_shortcuts/arc_app_shortcuts_request.cc
@@ -50,7 +50,18 @@ void ArcAppShortcutsRequest::OnGetAppShortcutItems( std::vector<mojom::AppShortcutItemPtr> shortcut_items) { + // In case |shortcut_items| is empty report now, otherwise + // |OnAllIconDecodeRequestsDone| will be called immediately on creation. As + // result of handling this the request will be deleted and assigning + // |barrier_closure_| will happen on deleted object that will cause memory + // corruption. + if (shortcut_items.empty()) { + base::ResetAndReturn(&callback_).Run(nullptr); + return; + } + items_ = std::make_unique<ArcAppShortcutItems>(); + // Using base::Unretained(this) here is safe since we own barrier_closure_. barrier_closure_ = base::BarrierClosure( shortcut_items.size(),
diff --git a/chrome/browser/chromeos/crostini/crostini_pref_names.cc b/chrome/browser/chromeos/crostini/crostini_pref_names.cc index 9d73792..5d9f929 100644 --- a/chrome/browser/chromeos/crostini/crostini_pref_names.cc +++ b/chrome/browser/chromeos/crostini/crostini_pref_names.cc
@@ -12,16 +12,19 @@ // A boolean preference representing whether a user has opted in to use // Crostini (Called "Linux Apps" in UI). const char kCrostiniEnabled[] = "crostini.enabled"; -const char kCrostiniRegistry[] = "crostini.registry"; const char kCrostiniMimeTypes[] = "crostini.mime_types"; +const char kCrostiniRegistry[] = "crostini.registry"; +// List of filesystem paths that are shared with the crostini container. +const char kCrostiniSharedPaths[] = "crostini.shared_paths"; // A boolean preference representing a user level enterprise policy to enable // Crostini use. const char kUserCrostiniAllowedByPolicy[] = "crostini.user_allowed_by_policy"; void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterBooleanPref(kCrostiniEnabled, false); - registry->RegisterDictionaryPref(kCrostiniRegistry); registry->RegisterDictionaryPref(kCrostiniMimeTypes); + registry->RegisterDictionaryPref(kCrostiniRegistry); + registry->RegisterListPref(kCrostiniSharedPaths); registry->RegisterBooleanPref(kUserCrostiniAllowedByPolicy, true); }
diff --git a/chrome/browser/chromeos/crostini/crostini_pref_names.h b/chrome/browser/chromeos/crostini/crostini_pref_names.h index 8749cdf..5e9997a 100644 --- a/chrome/browser/chromeos/crostini/crostini_pref_names.h +++ b/chrome/browser/chromeos/crostini/crostini_pref_names.h
@@ -11,8 +11,9 @@ namespace prefs { extern const char kCrostiniEnabled[]; -extern const char kCrostiniRegistry[]; extern const char kCrostiniMimeTypes[]; +extern const char kCrostiniRegistry[]; +extern const char kCrostiniSharedPaths[]; extern const char kUserCrostiniAllowedByPolicy[]; void RegisterProfilePrefs(PrefRegistrySimple* registry);
diff --git a/chrome/browser/chromeos/crostini/crostini_share_path.cc b/chrome/browser/chromeos/crostini/crostini_share_path.cc index d63b948..4634ff4e 100644 --- a/chrome/browser/chromeos/crostini/crostini_share_path.cc +++ b/chrome/browser/chromeos/crostini/crostini_share_path.cc
@@ -7,11 +7,13 @@ #include "base/bind.h" #include "base/optional.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" +#include "chrome/browser/chromeos/crostini/crostini_pref_names.h" #include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/profiles/profile.h" #include "chromeos/dbus/concierge/service.pb.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/seneschal_client.h" +#include "components/prefs/pref_service.h" namespace crostini { @@ -28,6 +30,7 @@ std::string vm_name, std::string path, base::OnceCallback<void(bool, std::string)> callback) { + // TODO(joelhockey): Save new path into prefs once management UI is ready. base::Optional<vm_tools::concierge::VmInfo> vm_info = crostini::CrostiniManager::GetForProfile(profile)->GetVmInfo( std::move(vm_name)); @@ -61,4 +64,14 @@ response.value().failure_reason()); } +std::vector<std::string> CrostiniSharePath::GetSharedPaths(Profile* profile) { + std::vector<std::string> result; + const base::ListValue* shared_paths = + profile->GetPrefs()->GetList(prefs::kCrostiniSharedPaths); + for (const auto& path : *shared_paths) { + result.emplace_back(path.GetString()); + } + return result; +} + } // namespace crostini
diff --git a/chrome/browser/chromeos/crostini/crostini_share_path.h b/chrome/browser/chromeos/crostini/crostini_share_path.h index 07df2fc..dee5f84 100644 --- a/chrome/browser/chromeos/crostini/crostini_share_path.h +++ b/chrome/browser/chromeos/crostini/crostini_share_path.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_CHROMEOS_CROSTINI_CROSTINI_SHARE_PATH_H_ #define CHROME_BROWSER_CHROMEOS_CROSTINI_CROSTINI_SHARE_PATH_H_ +#include <vector> + #include "base/macros.h" #include "base/memory/singleton.h" #include "base/memory/weak_ptr.h" @@ -20,6 +22,7 @@ // Returns the singleton instance of CrostiniSharePath. static CrostiniSharePath* GetInstance(); + // Share specified path with vm. void SharePath(Profile* profile, std::string vm_name, std::string path, @@ -29,6 +32,9 @@ base::OnceCallback<void(bool, std::string)> callback, base::Optional<vm_tools::seneschal::SharePathResponse> response) const; + // Get list of all shared paths for the default crostini container. + std::vector<std::string> GetSharedPaths(Profile* profile); + private: friend struct base::DefaultSingletonTraits<CrostiniSharePath>;
diff --git a/chrome/browser/chromeos/drive/fileapi/drivefs_async_file_util.cc b/chrome/browser/chromeos/drive/fileapi/drivefs_async_file_util.cc index b5fe7b4..175cb74 100644 --- a/chrome/browser/chromeos/drive/fileapi/drivefs_async_file_util.cc +++ b/chrome/browser/chromeos/drive/fileapi/drivefs_async_file_util.cc
@@ -7,6 +7,7 @@ #include <utility> #include "chrome/browser/chromeos/drive/drive_integration_service.h" +#include "chrome/browser/chromeos/drive/file_system_util.h" #include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/callback_helpers.h" #include "storage/browser/fileapi/file_system_operation_context.h" @@ -45,66 +46,62 @@ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); auto* drive_integration_service = - drive::DriveIntegrationServiceFactory::GetForProfile(profile_); - if (!drive_integration_service->IsMounted()) { - return Fail(); + drive::util::GetIntegrationServiceByProfile(profile_); + base::FilePath source_path("/"); + base::FilePath destination_path("/"); + if (!drive_integration_service || + !drive_integration_service->GetMountPointPath().AppendRelativePath( + src_url_.path(), &source_path) || + !drive_integration_service->GetMountPointPath().AppendRelativePath( + dest_url_.path(), &destination_path)) { + origin_task_runner_->PostTask( + FROM_HERE, base::BindOnce(std::move(callback_), + base::File::FILE_ERROR_INVALID_OPERATION)); + origin_task_runner_->DeleteSoon(FROM_HERE, this); + return; } - base::FilePath path("/"); - if (!drive_integration_service->GetMountPointPath().AppendRelativePath( - src_url_.path(), &path)) { - return Fail(); - } - drive_integration_service->GetDriveFsInterface()->GetMetadata( - path, false, - mojo::WrapCallbackWithDropHandler( - base::BindOnce(&CopyOperation::GotMetadata, base::Unretained(this)), - base::BindOnce(&CopyOperation::Fail, base::Unretained(this)))); + drive_integration_service->GetDriveFsInterface()->CopyFile( + source_path, destination_path, + mojo::WrapCallbackWithDefaultInvokeIfNotRun( + base::BindOnce(&CopyOperation::CopyComplete, + base::Unretained(this)), + drive::FILE_ERROR_ABORT)); } private: - void Fail() { + void CopyComplete(drive::FileError error) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - origin_task_runner_->PostTask( - FROM_HERE, - base::BindOnce(std::move(callback_), base::File::FILE_ERROR_FAILED)); - delete this; - } + switch (error) { + case drive::FILE_ERROR_NOT_FOUND: + case drive::FILE_ERROR_NO_CONNECTION: + origin_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&CopyOperation::FallbackToNativeCopyOnOriginThread, + base::Unretained(this))); + break; - void FallbackToNativeCopy() { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - - origin_task_runner_->PostTask( - FROM_HERE, - base::BindOnce(&CopyOperation::FallbackToNativeCopyOnOriginThread, - base::Unretained(this))); + default: + origin_task_runner_->PostTask( + FROM_HERE, base::BindOnce(std::move(callback_), + FileErrorToBaseFileError(error))); + origin_task_runner_->DeleteSoon(FROM_HERE, this); + } } void FallbackToNativeCopyOnOriginThread() { DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); + if (!async_file_util_) { + std::move(callback_).Run(base::File::FILE_ERROR_ABORT); + return; + } async_file_util_->AsyncFileUtilAdapter::CopyFileLocal( std::move(context_), src_url_, dest_url_, option_, std::move(progress_callback_), std::move(callback_)); delete this; } - void GotMetadata(drive::FileError error, - drivefs::mojom::FileMetadataPtr metadata) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - - if (!metadata) { - return Fail(); - } - if (metadata->type != drivefs::mojom::FileMetadata::Type::kHosted) { - return FallbackToNativeCopy(); - } - - // TODO(crbug.com/870009): Implement copy for hosted files once DriveFS - // provides an API. - Fail(); - } - Profile* const profile_; std::unique_ptr<storage::FileSystemOperationContext> context_; const storage::FileSystemURL src_url_; @@ -114,6 +111,8 @@ storage::AsyncFileUtil::StatusCallback callback_; scoped_refptr<base::SequencedTaskRunner> origin_task_runner_; base::WeakPtr<DriveFsAsyncFileUtil> async_file_util_; + + DISALLOW_COPY_AND_ASSIGN(CopyOperation); }; } // namespace
diff --git a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc index 616ae5cb..d61e74e 100644 --- a/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/file_manager/file_manager_private_apitest.cc
@@ -28,6 +28,7 @@ #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/api/file_system_provider_capabilities/file_system_provider_capabilities_handler.h" #include "chrome/test/base/testing_profile.h" +#include "chromeos/dbus/concierge/service.pb.h" #include "chromeos/dbus/cros_disks_client.h" #include "chromeos/disks/disk.h" #include "chromeos/disks/mock_disk_mount_manager.h" @@ -560,6 +561,17 @@ &downloads)); ASSERT_TRUE(base::CreateDirectory(downloads.AppendASCII("share_dir"))); + // Setup prefs crostini.shared_paths. + base::FilePath shared1 = downloads.AppendASCII("shared1"); + base::FilePath shared2 = downloads.AppendASCII("shared2"); + ASSERT_TRUE(base::CreateDirectory(shared1)); + ASSERT_TRUE(base::CreateDirectory(shared2)); + base::ListValue shared_paths; + shared_paths.AppendString(shared1.value()); + shared_paths.AppendString(shared2.value()); + browser()->profile()->GetPrefs()->Set(crostini::prefs::kCrostiniSharedPaths, + shared_paths); + ASSERT_TRUE(RunComponentExtensionTest("file_browser/crostini_test")); }
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc index 3eb4e99..5ba7112 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -720,6 +720,45 @@ } ExtensionFunction::ResponseAction +FileManagerPrivateInternalGetCrostiniSharedPathsFunction::Run() { + Profile* profile = Profile::FromBrowserContext(browser_context()); + file_manager::util::FileDefinitionList file_definition_list; + auto shared_paths = + crostini::CrostiniSharePath::GetInstance()->GetSharedPaths(profile); + for (const std::string& path : shared_paths) { + file_manager::util::FileDefinition file_definition; + // All shared paths should be directories. Even if this is not true, it + // is fine for foreground/js/crostini.js class to think so. + // We verify that the paths are in fact valid directories before calling + // seneschal/9p. + file_definition.is_directory = true; + if (file_manager::util::ConvertAbsoluteFilePathToRelativeFileSystemPath( + profile, extension_id(), base::FilePath(path), + &file_definition.virtual_path)) { + file_definition_list.emplace_back(std::move(file_definition)); + } + } + + file_manager::util::ConvertFileDefinitionListToEntryDefinitionList( + profile, extension_id(), + file_definition_list, // Safe, since copied internally. + base::Bind(&FileManagerPrivateInternalGetCrostiniSharedPathsFunction:: + OnConvertFileDefinitionListToEntryDefinitionList, + this)); + return RespondLater(); +} + +void FileManagerPrivateInternalGetCrostiniSharedPathsFunction:: + OnConvertFileDefinitionListToEntryDefinitionList( + std::unique_ptr<file_manager::util::EntryDefinitionList> + entry_definition_list) { + DCHECK(entry_definition_list); + + Respond(OneArgument(file_manager::util::ConvertEntryDefinitionListToListValue( + *entry_definition_list))); +} + +ExtensionFunction::ResponseAction FileManagerPrivateInternalInstallLinuxPackageFunction::Run() { using extensions::api::file_manager_private_internal::InstallLinuxPackage:: Params; @@ -909,16 +948,13 @@ continue; file_manager::util::FileDefinition file_definition; - const bool result = - file_manager::util::ConvertAbsoluteFilePathToRelativeFileSystemPath( - chrome_details_.GetProfile(), extension_id(), file.url().path(), - &file_definition.virtual_path); - if (!result) - continue; - // Recent file system only lists regular files, not directories. file_definition.is_directory = false; - file_definition_list.emplace_back(std::move(file_definition)); + if (file_manager::util::ConvertAbsoluteFilePathToRelativeFileSystemPath( + chrome_details_.GetProfile(), extension_id(), file.url().path(), + &file_definition.virtual_path)) { + file_definition_list.emplace_back(std::move(file_definition)); + } } file_manager::util::ConvertFileDefinitionListToEntryDefinitionList(
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h index fbb92b9..3f6bbc2 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h
@@ -272,11 +272,13 @@ public: DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.isCrostiniEnabled", FILEMANAGERPRIVATE_ISCROSTINIENABLED) + FileManagerPrivateIsCrostiniEnabledFunction() = default; protected: ~FileManagerPrivateIsCrostiniEnabledFunction() override = default; ResponseAction Run() override; + DISALLOW_COPY_AND_ASSIGN(FileManagerPrivateIsCrostiniEnabledFunction); }; // Implements the chrome.fileManagerPrivate.mountCrostini method. @@ -297,6 +299,7 @@ private: std::string source_path_; std::string mount_label_; + DISALLOW_COPY_AND_ASSIGN(FileManagerPrivateMountCrostiniFunction); }; // Implements the chrome.fileManagerPrivate.sharePathWithCrostini @@ -306,6 +309,7 @@ public: DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.sharePathWithCrostini", FILEMANAGERPRIVATEINTERNAL_SHAREPATHWITHCROSTINI) + FileManagerPrivateInternalSharePathWithCrostiniFunction() = default; protected: ~FileManagerPrivateInternalSharePathWithCrostiniFunction() override = default; @@ -313,6 +317,31 @@ private: ResponseAction Run() override; void SharePathCallback(bool success, std::string failure_reason); + DISALLOW_COPY_AND_ASSIGN( + FileManagerPrivateInternalSharePathWithCrostiniFunction); +}; + +// Implements the chrome.fileManagerPrivate.getCrostiniSharedPaths +// method. Returns list of file entries. +class FileManagerPrivateInternalGetCrostiniSharedPathsFunction + : public UIThreadExtensionFunction { + public: + DECLARE_EXTENSION_FUNCTION( + "fileManagerPrivateInternal.getCrostiniSharedPaths", + FILEMANAGERPRIVATEINTERNAL_GETCROSTINISHAREDPATHS) + FileManagerPrivateInternalGetCrostiniSharedPathsFunction() = default; + + protected: + ~FileManagerPrivateInternalGetCrostiniSharedPathsFunction() override = + default; + + private: + ResponseAction Run() override; + void OnConvertFileDefinitionListToEntryDefinitionList( + std::unique_ptr<file_manager::util::EntryDefinitionList> + entry_definition_list); + DISALLOW_COPY_AND_ASSIGN( + FileManagerPrivateInternalGetCrostiniSharedPathsFunction); }; // Implements the chrome.fileManagerPrivate.installLinuxPackage method. @@ -322,6 +351,7 @@ public: DECLARE_EXTENSION_FUNCTION("fileManagerPrivateInternal.installLinuxPackage", FILEMANAGERPRIVATEINTERNAL_INSTALLLINUXPACKAGE) + FileManagerPrivateInternalInstallLinuxPackageFunction() = default; protected: ~FileManagerPrivateInternalInstallLinuxPackageFunction() override = default; @@ -330,6 +360,8 @@ ResponseAction Run() override; void OnInstallLinuxPackage(crostini::ConciergeClientResult result, const std::string& failure_reason); + DISALLOW_COPY_AND_ASSIGN( + FileManagerPrivateInternalInstallLinuxPackageFunction); }; // Implements the chrome.fileManagerPrivate.getCustomActions method.
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc index 308b295..69f7393 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -579,9 +579,11 @@ TestCase("showToggleHiddenAndroidFoldersGearMenuItemsInMyFiles"), TestCase("enableToggleHiddenAndroidFoldersShowsHiddenFiles"))); -WRAPPED_INSTANTIATE_TEST_CASE_P(Crostini, /* crostini.js */ - FilesAppBrowserTest, - ::testing::Values(TestCase("mountCrostini"))); +WRAPPED_INSTANTIATE_TEST_CASE_P( + Crostini, /* crostini.js */ + FilesAppBrowserTest, + ::testing::Values(TestCase("mountCrostini"), + TestCase("sharePathWithCrostini"))); WRAPPED_INSTANTIATE_TEST_CASE_P( MyFiles, /* my_files.js */
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc index d8daff1..6994153e 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
@@ -24,6 +24,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/chromeos/crostini/crostini_pref_names.h" +#include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/drive/file_system_util.h" #include "chrome/browser/chromeos/file_manager/file_manager_test_util.h" #include "chrome/browser/chromeos/file_manager/mount_test_util.h" @@ -40,6 +41,7 @@ #include "chromeos/chromeos_switches.h" #include "chromeos/components/drivefs/drivefs_host.h" #include "chromeos/components/drivefs/fake_drivefs.h" +#include "chromeos/dbus/concierge/service.pb.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_cros_disks_client.h" #include "components/drive/chromeos/file_system_interface.h" @@ -977,6 +979,7 @@ if (!IsGuestModeTest()) { enabled_features.emplace_back(features::kCrostini); enabled_features.emplace_back(features::kExperimentalCrostiniUI); + command_line->AppendSwitch(chromeos::switches::kCrostiniFiles); } if (IsDriveFsTest()) { enabled_features.emplace_back(chromeos::features::kDriveFs); @@ -1347,7 +1350,13 @@ if (source_url.scheme() != "sshfs") { return {}; } + // Mount crostini volume, and set VM now running for CrostiniManager. CHECK(crostini_volume_->Mount(profile())); + crostini::CrostiniManager* crostini_manager = + crostini::CrostiniManager::GetForProfile(profile()->GetOriginalProfile()); + vm_tools::concierge::VmInfo vm_info; + crostini_manager->AddRunningVmForTesting(kCrostiniDefaultVmName, + std::move(vm_info)); return crostini_volume_->mount_path(); }
diff --git a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc index 98ee538e..b442e1a9 100644 --- a/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc +++ b/chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chromeos/assistant/buildflags.h" +#include "chromeos/chromeos_switches.h" namespace chromeos { namespace { @@ -38,9 +39,10 @@ return; #if BUILDFLAG(ENABLE_CROS_ASSISTANT) - if (arc::IsAssistantAllowedForProfile( + if (chromeos::switches::IsAssistantEnabled() && + arc::IsAssistantAllowedForProfile( ProfileManager::GetActiveUserProfile()) == - ash::mojom::AssistantAllowedState::ALLOWED) { + ash::mojom::AssistantAllowedState::ALLOWED) { view_->Show(); return; }
diff --git a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc index c81f28a3..b5ac544 100644 --- a/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc +++ b/chrome/browser/chromeos/policy/remote_commands/crd_host_delegate.cc
@@ -148,7 +148,6 @@ bool CRDHostDelegate::IsRunningKiosk() const { auto* user_manager = user_manager::UserManager::Get(); - // TODO(antrim): find out if Arc Kiosk is also eligible. if (!user_manager->IsLoggedInAsKioskApp() && !user_manager->IsLoggedInAsArcKioskApp()) { return false; @@ -164,10 +163,8 @@ CHECK(manager->GetApp(manager->GetAutoLaunchApp(), &app)); return app.was_auto_launched_with_zero_delay; } else { // ARC Kiosk - chromeos::ArcKioskAppManager* manager = chromeos::ArcKioskAppManager::Get(); - if (!manager->GetAutoLaunchAccountId().is_valid()) - return false; - return manager->current_app_was_auto_launched_with_zero_delay(); + return chromeos::ArcKioskAppManager::Get() + ->current_app_was_auto_launched_with_zero_delay(); } }
diff --git a/chrome/browser/chromeos/policy/remote_commands/device_command_start_crd_session_job.h b/chrome/browser/chromeos/policy/remote_commands/device_command_start_crd_session_job.h index 96857ed..1f748c7 100644 --- a/chrome/browser/chromeos/policy/remote_commands/device_command_start_crd_session_job.h +++ b/chrome/browser/chromeos/policy/remote_commands/device_command_start_crd_session_job.h
@@ -64,7 +64,7 @@ // Check if required system services are ready. virtual bool AreServicesReady() const = 0; - // Check if device is running in Kiosk mode. + // Check if device is running an auto-launched Kiosk. virtual bool IsRunningKiosk() const = 0; // Return current user idleness period.
diff --git a/chrome/browser/devtools/devtools_file_helper.cc b/chrome/browser/devtools/devtools_file_helper.cc index 0cc55275..9c791d9eb 100644 --- a/chrome/browser/devtools/devtools_file_helper.cc +++ b/chrome/browser/devtools/devtools_file_helper.cc
@@ -121,14 +121,12 @@ }; void WriteToFile(const base::FilePath& path, const std::string& content) { - base::AssertBlockingAllowed(); DCHECK(!path.empty()); base::WriteFile(path, content.c_str(), content.length()); } void AppendToFile(const base::FilePath& path, const std::string& content) { - base::AssertBlockingAllowed(); DCHECK(!path.empty()); base::AppendToFile(path, content.c_str(), content.size());
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc index d4b100e..c99f1db 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -32,6 +32,7 @@ #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/menu_manager.h" #include "chrome/browser/extensions/updater/chrome_update_client_config.h" +#include "chrome/browser/extensions/user_script_listener.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/profiles/profile.h" @@ -536,6 +537,14 @@ return g_browser_process->system_network_context_manager()->GetContext(); } +UserScriptListener* ChromeExtensionsBrowserClient::GetUserScriptListener() { + // Create lazily since this accesses g_browser_process which may not be set up + // when ChromeExtensionsBrowserClient is created. + if (!user_script_listener_) + user_script_listener_ = std::make_unique<UserScriptListener>(); + return user_script_listener_.get(); +} + // static void ChromeExtensionsBrowserClient::set_did_chrome_update_for_testing( bool did_update) {
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h index c22ee9a..fdbc265 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.h +++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -151,6 +151,7 @@ content::BrowserContext* context) const override; bool IsWebUIAllowedToMakeNetworkRequests(const url::Origin& origin) override; network::mojom::NetworkContext* GetSystemNetworkContext() override; + UserScriptListener* GetUserScriptListener() override; static void set_did_chrome_update_for_testing(bool did_update); @@ -169,6 +170,8 @@ std::unique_ptr<KioskDelegate> kiosk_delegate_; + std::unique_ptr<UserScriptListener> user_script_listener_; + DISALLOW_COPY_AND_ASSIGN(ChromeExtensionsBrowserClient); };
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc index 17bade97..0aeac72 100644 --- a/chrome/browser/extensions/service_worker_apitest.cc +++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -421,7 +421,7 @@ } void SetUp() override { - content::background_sync_test_util::SetIgnoreNetworkChangeNotifier(true); + content::background_sync_test_util::SetIgnoreNetworkChanges(true); ServiceWorkerTest::SetUp(); }
diff --git a/chrome/browser/extensions/user_script_listener.cc b/chrome/browser/extensions/user_script_listener.cc index a5252f35..207ebb3 100644 --- a/chrome/browser/extensions/user_script_listener.cc +++ b/chrome/browser/extensions/user_script_listener.cc
@@ -13,26 +13,26 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/navigation_throttle.h" #include "content/public/browser/notification_service.h" -#include "content/public/browser/resource_throttle.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/extension.h" #include "extensions/common/manifest_handlers/content_scripts_handler.h" #include "extensions/common/url_pattern.h" -#include "net/url_request/url_request.h" using content::BrowserThread; -using content::ResourceThrottle; +using content::NavigationThrottle; using content::ResourceType; namespace extensions { class UserScriptListener::Throttle - : public ResourceThrottle, + : public NavigationThrottle, public base::SupportsWeakPtr<UserScriptListener::Throttle> { public: - Throttle() : should_defer_(true), did_defer_(false) { - } + explicit Throttle(content::NavigationHandle* navigation_handle) + : NavigationThrottle(navigation_handle) {} void ResumeIfDeferred() { DCHECK(should_defer_); @@ -45,23 +45,24 @@ } } - // ResourceThrottle implementation: - void WillStartRequest(bool* defer) override { + // NavigationThrottle implementation: + ThrottleCheckResult WillStartRequest() override { // Only defer requests if Resume has not yet been called. if (should_defer_) { - *defer = true; did_defer_ = true; timer_.reset(new base::ElapsedTimer()); + return DEFER; } + return PROCEED; } - const char* GetNameForLogging() const override { + const char* GetNameForLogging() override { return "UserScriptListener::Throttle"; } private: - bool should_defer_; - bool did_defer_; + bool should_defer_ = true; + bool did_defer_ = false; std::unique_ptr<base::ElapsedTimer> timer_; DISALLOW_COPY_AND_ASSIGN(Throttle); @@ -70,21 +71,21 @@ struct UserScriptListener::ProfileData { // True if the user scripts contained in |url_patterns| are ready for // injection. - bool user_scripts_ready; + bool user_scripts_ready = false; // A list of URL patterns that have will have user scripts applied to them. URLPatterns url_patterns; - - ProfileData() : user_scripts_ready(false) {} }; -UserScriptListener::UserScriptListener() - : user_scripts_ready_(false), extension_registry_observer_(this) { +UserScriptListener::UserScriptListener() : extension_registry_observer_(this) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - for (auto* profile : - g_browser_process->profile_manager()->GetLoadedProfiles()) { - extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); + // Profile manager can be null in unit tests. + if (g_browser_process->profile_manager()) { + for (auto* profile : + g_browser_process->profile_manager()->GetLoadedProfiles()) { + extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); + } } registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, @@ -97,30 +98,27 @@ content::NotificationService::AllSources()); } -ResourceThrottle* UserScriptListener::CreateResourceThrottle( - const GURL& url, - ResourceType resource_type) { - if (!ShouldDelayRequest(url, resource_type)) - return NULL; +std::unique_ptr<NavigationThrottle> +UserScriptListener::CreateNavigationThrottle( + content::NavigationHandle* navigation_handle) { + if (!ShouldDelayRequest(navigation_handle->GetURL())) + return nullptr; - Throttle* throttle = new Throttle(); + auto throttle = std::make_unique<Throttle>(navigation_handle); throttles_.push_back(throttle->AsWeakPtr()); return throttle; } -UserScriptListener::~UserScriptListener() { +void UserScriptListener::SetUserScriptsNotReadyForTesting( + content::BrowserContext* context) { + AppendNewURLPatterns(context, {URLPattern(URLPattern::SCHEME_ALL, + URLPattern::kAllUrlsPattern)}); } -bool UserScriptListener::ShouldDelayRequest(const GURL& url, - ResourceType resource_type) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); +UserScriptListener::~UserScriptListener() {} - // If it's a frame load, then we need to check the URL against the list of - // user scripts to see if we need to wait. - if (resource_type != content::RESOURCE_TYPE_MAIN_FRAME && - resource_type != content::RESOURCE_TYPE_SUB_FRAME) - return false; - +bool UserScriptListener::ShouldDelayRequest(const GURL& url) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); // Note: we could delay only requests made by the profile who is causing the // delay, but it's a little more complicated to associate requests with the // right profile. Since this is a rare case, we'll just take the easy way @@ -155,7 +153,7 @@ } void UserScriptListener::CheckIfAllUserScriptsReady() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CURRENTLY_ON(BrowserThread::UI); bool was_ready = user_scripts_ready_; user_scripts_ready_ = true; @@ -169,39 +167,39 @@ StartDelayedRequests(); } -void UserScriptListener::UserScriptsReady(void* profile_id) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); +void UserScriptListener::UserScriptsReady(content::BrowserContext* context) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); - profile_data_[profile_id].user_scripts_ready = true; + profile_data_[context].user_scripts_ready = true; CheckIfAllUserScriptsReady(); } -void UserScriptListener::ProfileDestroyed(void* profile_id) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - profile_data_.erase(profile_id); +void UserScriptListener::ProfileDestroyed(content::BrowserContext* context) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + profile_data_.erase(context); // We may have deleted the only profile we were waiting on. CheckIfAllUserScriptsReady(); } -void UserScriptListener::AppendNewURLPatterns(void* profile_id, +void UserScriptListener::AppendNewURLPatterns(content::BrowserContext* context, const URLPatterns& new_patterns) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CURRENTLY_ON(BrowserThread::UI); user_scripts_ready_ = false; - ProfileData& data = profile_data_[profile_id]; + ProfileData& data = profile_data_[context]; data.user_scripts_ready = false; data.url_patterns.insert(data.url_patterns.end(), new_patterns.begin(), new_patterns.end()); } -void UserScriptListener::ReplaceURLPatterns(void* profile_id, +void UserScriptListener::ReplaceURLPatterns(content::BrowserContext* context, const URLPatterns& patterns) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CURRENTLY_ON(BrowserThread::UI); - ProfileData& data = profile_data_[profile_id]; + ProfileData& data = profile_data_[context]; data.url_patterns = patterns; } @@ -231,16 +229,12 @@ } case chrome::NOTIFICATION_PROFILE_DESTROYED: { Profile* profile = content::Source<Profile>(source).ptr(); - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&UserScriptListener::ProfileDestroyed, this, profile)); + ProfileDestroyed(profile); break; } case extensions::NOTIFICATION_USER_SCRIPTS_UPDATED: { Profile* profile = content::Source<Profile>(source).ptr(); - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&UserScriptListener::UserScriptsReady, this, profile)); + UserScriptsReady(profile); break; } default: @@ -257,10 +251,7 @@ URLPatterns new_patterns; CollectURLPatterns(extension, &new_patterns); if (!new_patterns.empty()) { - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&UserScriptListener::AppendNewURLPatterns, this, - browser_context, new_patterns)); + AppendNewURLPatterns(browser_context, new_patterns); } } @@ -280,10 +271,7 @@ if (it->get() != extension) CollectURLPatterns(it->get(), &new_patterns); } - BrowserThread::PostTask( - BrowserThread::IO, FROM_HERE, - base::BindOnce(&UserScriptListener::ReplaceURLPatterns, this, - browser_context, new_patterns)); + ReplaceURLPatterns(browser_context, new_patterns); } void UserScriptListener::OnShutdown(ExtensionRegistry* registry) {
diff --git a/chrome/browser/extensions/user_script_listener.h b/chrome/browser/extensions/user_script_listener.h index 1a26db1..c8207ab 100644 --- a/chrome/browser/extensions/user_script_listener.h +++ b/chrome/browser/extensions/user_script_listener.h
@@ -11,20 +11,19 @@ #include "base/compiler_specific.h" #include "base/containers/circular_deque.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" -#include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" -#include "content/public/common/resource_type.h" #include "extensions/browser/extension_registry_observer.h" class GURL; class URLPattern; namespace content { -class ResourceThrottle; +class BrowserContext; +class NavigationHandle; +class NavigationThrottle; } namespace extensions { @@ -35,33 +34,24 @@ // script, and if so, whether that user script is ready; if not, we delay the // request. // -// This class lives mostly on the IO thread. It listens on the UI thread for -// updates to loaded extensions. -class UserScriptListener : public base::RefCountedThreadSafe< - UserScriptListener, - content::BrowserThread::DeleteOnUIThread>, - public content::NotificationObserver, +// This class lives on the UI thread. +class UserScriptListener : public content::NotificationObserver, public ExtensionRegistryObserver { public: UserScriptListener(); - - // Constructs a ResourceThrottle if the UserScriptListener needs to delay the - // given URL. Otherwise, this method returns NULL. - content::ResourceThrottle* CreateResourceThrottle( - const GURL& url, - content::ResourceType resource_type); - - private: - friend struct content::BrowserThread::DeleteOnThread< - content::BrowserThread::UI>; - friend class base::DeleteHelper<UserScriptListener>; - - typedef std::list<URLPattern> URLPatterns; - ~UserScriptListener() override; - bool ShouldDelayRequest(const GURL& url, - content::ResourceType resource_type); + // Constructs a NavigationThrottle if the UserScriptListener needs to delay + // the given navigation. Otherwise, this method returns NULL. + std::unique_ptr<content::NavigationThrottle> CreateNavigationThrottle( + content::NavigationHandle* navigation_handle); + + void SetUserScriptsNotReadyForTesting(content::BrowserContext* context); + + private: + using URLPatterns = std::list<URLPattern>; + + bool ShouldDelayRequest(const GURL& url); void StartDelayedRequests(); // Update user_scripts_ready_ based on the status of all profiles. On a @@ -69,21 +59,23 @@ void CheckIfAllUserScriptsReady(); // Resume any requests that we delayed in order to wait for user scripts. - void UserScriptsReady(void* profile_id); + void UserScriptsReady(content::BrowserContext* context); // Clean up per-profile information related to the given profile. - void ProfileDestroyed(void* profile_id); + void ProfileDestroyed(content::BrowserContext* context); // Appends new url patterns to our list, also setting user_scripts_ready_ // to false. - void AppendNewURLPatterns(void* profile_id, const URLPatterns& new_patterns); + void AppendNewURLPatterns(content::BrowserContext* context, + const URLPatterns& new_patterns); // Replaces our url pattern list. This is only used when patterns have been // deleted, so user_scripts_ready_ remains unchanged. - void ReplaceURLPatterns(void* profile_id, const URLPatterns& patterns); + void ReplaceURLPatterns(content::BrowserContext* context, + const URLPatterns& patterns); // True if all user scripts from all profiles are ready. - bool user_scripts_ready_; + bool user_scripts_ready_ = false; // Stores a throttle per URL request that we have delayed. class Throttle; @@ -93,7 +85,7 @@ // Per-profile bookkeeping so we know when all user scripts are ready. struct ProfileData; - typedef std::map<void*, ProfileData> ProfileDataMap; + using ProfileDataMap = std::map<content::BrowserContext*, ProfileData>; ProfileDataMap profile_data_; // --- UI thread:
diff --git a/chrome/browser/extensions/user_script_listener_browsertest.cc b/chrome/browser/extensions/user_script_listener_browsertest.cc new file mode 100644 index 0000000..7fb616c --- /dev/null +++ b/chrome/browser/extensions/user_script_listener_browsertest.cc
@@ -0,0 +1,73 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/extension_browsertest.h" +#include "chrome/browser/extensions/user_script_listener.h" +#include "chrome/test/base/testing_profile.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/notification_service.h" +#include "content/public/test/test_navigation_observer.h" +#include "extensions/browser/notification_types.h" + +namespace extensions { +namespace { + +// Observer to wait for navigation start and ensure it is deferred. +class DidStartNavigationObserver : public content::WebContentsObserver { + public: + explicit DidStartNavigationObserver(content::WebContents* web_contents) + : content::WebContentsObserver(web_contents) {} + + void ExpectNavigationDeferredAfterStart() { + run_loop_.Run(); + EXPECT_TRUE(handle_); + EXPECT_TRUE(handle_->IsDeferredForTesting()); + } + + private: + // WebContentsObserver implementation: + void DidStartNavigation(content::NavigationHandle* handle) override { + handle_ = handle; + run_loop_.Quit(); + } + + content::NavigationHandle* handle_ = nullptr; + base::RunLoop run_loop_; +}; + +} // namespace + +using UserScriptListenerTest = ExtensionBrowserTest; + +// Test that navigations block while waiting for content scripts to load. +IN_PROC_BROWSER_TEST_F(UserScriptListenerTest, + NavigationWaitsForContentScriptsToLoad) { + ASSERT_TRUE(embedded_test_server()->Start()); + + TestingProfile profile; + ExtensionsBrowserClient::Get() + ->GetUserScriptListener() + ->SetUserScriptsNotReadyForTesting(&profile); + + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + content::TestNavigationObserver nav_observer(web_contents, 1); + DidStartNavigationObserver start_observer(web_contents); + + ui_test_utils::NavigateToURLWithDisposition( + browser(), embedded_test_server()->GetURL("/echo"), + WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE); + + start_observer.ExpectNavigationDeferredAfterStart(); + + content::NotificationService::current()->Notify( + extensions::NOTIFICATION_USER_SCRIPTS_UPDATED, + content::Source<Profile>(&profile), + content::NotificationService::NoDetails()); + + nav_observer.Wait(); +} + +} // namespace extensions
diff --git a/chrome/browser/extensions/user_script_listener_unittest.cc b/chrome/browser/extensions/user_script_listener_unittest.cc index 0182176..523601be7 100644 --- a/chrome/browser/extensions/user_script_listener_unittest.cc +++ b/chrome/browser/extensions/user_script_listener_unittest.cc
@@ -10,6 +10,7 @@ #include "base/files/file_util.h" #include "base/json/json_file_value_serializer.h" #include "base/macros.h" +#include "base/path_service.h" #include "base/run_loop.h" #include "base/threading/thread.h" #include "chrome/browser/chrome_notification_types.h" @@ -20,18 +21,13 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/navigation_throttle.h" #include "content/public/browser/notification_service.h" -#include "content/public/browser/resource_throttle.h" #include "content/public/test/test_browser_thread_bundle.h" #include "content/public/test/test_utils.h" +#include "content/public/test/web_contents_tester.h" #include "extensions/browser/extension_registry.h" -#include "net/base/request_priority.h" -#include "net/traffic_annotation/network_traffic_annotation_test_helper.h" -#include "net/url_request/url_request.h" -#include "net/url_request/url_request_filter.h" -#include "net/url_request/url_request_interceptor.h" -#include "net/url_request/url_request_test_job.h" -#include "net/url_request/url_request_test_util.h" #include "testing/gtest/include/gtest/gtest.h" #if defined(OS_CHROMEOS) @@ -39,7 +35,7 @@ #include "components/user_manager/scoped_user_manager.h" #endif -using content::ResourceThrottle; +using content::NavigationThrottle; namespace extensions { @@ -47,41 +43,6 @@ const char kMatchingUrl[] = "http://google.com/"; const char kNotMatchingUrl[] = "http://example.com/"; -const char kTestData[] = "Hello, World!"; -const void* kUserDataKey = &kUserDataKey; - -class ThrottleDelegate : public base::SupportsUserData::Data, - public ResourceThrottle::Delegate { - public: - ThrottleDelegate(net::URLRequest* request, ResourceThrottle* throttle) - : request_(request), throttle_(throttle) { - throttle_->set_delegate_for_testing(this); - } - - // ResourceThrottle::Delegate implementation: - void Resume() override { request_->Start(); } - void Cancel() override { NOTREACHED(); } - void CancelWithError(int error_code) override { NOTREACHED(); } - - private: - net::URLRequest* request_; - std::unique_ptr<ResourceThrottle> throttle_; -}; - -// A simple test net::URLRequestJob. We don't care what it does, only that -// whether it starts and finishes. -class SimpleTestJob : public net::URLRequestTestJob { - public: - SimpleTestJob(net::URLRequest* request, - net::NetworkDelegate* network_delegate) - : net::URLRequestTestJob(request, - network_delegate, - test_headers(), - kTestData, - true) {} - private: - ~SimpleTestJob() override {} -}; // Yoinked from extension_manifest_unittest.cc. std::unique_ptr<base::DictionaryValue> LoadManifestFile( @@ -89,7 +50,7 @@ std::string* error) { EXPECT_TRUE(base::PathExists(path)); JSONFileValueDeserializer deserializer(path); - return base::DictionaryValue::From(deserializer.Deserialize(NULL, error)); + return base::DictionaryValue::From(deserializer.Deserialize(nullptr, error)); } scoped_refptr<Extension> LoadExtension(const std::string& filename, @@ -102,28 +63,11 @@ AppendASCII(filename.c_str()); std::unique_ptr<base::DictionaryValue> value = LoadManifestFile(path, error); if (!value) - return NULL; + return nullptr; return Extension::Create(path.DirName(), Manifest::UNPACKED, *value, Extension::NO_FLAGS, error); } -class SimpleTestJobURLRequestInterceptor - : public net::URLRequestInterceptor { - public: - SimpleTestJobURLRequestInterceptor() {} - ~SimpleTestJobURLRequestInterceptor() override {} - - // net::URLRequestJobFactory::ProtocolHandler - net::URLRequestJob* MaybeInterceptRequest( - net::URLRequest* request, - net::NetworkDelegate* network_delegate) const override { - return new SimpleTestJob(request, network_delegate); - } - - private: - DISALLOW_COPY_AND_ASSIGN(SimpleTestJobURLRequestInterceptor); -}; - } // namespace class UserScriptListenerTest : public testing::Test { @@ -131,23 +75,7 @@ UserScriptListenerTest() : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), profile_manager_( - new TestingProfileManager(TestingBrowserProcess::GetGlobal())), - profile_(nullptr), - service_(nullptr) { - net::URLRequestFilter::GetInstance()->AddHostnameInterceptor( - "http", "google.com", std::unique_ptr<net::URLRequestInterceptor>( - new SimpleTestJobURLRequestInterceptor())); - net::URLRequestFilter::GetInstance()->AddHostnameInterceptor( - "http", "example.com", std::unique_ptr<net::URLRequestInterceptor>( - new SimpleTestJobURLRequestInterceptor())); - } - - ~UserScriptListenerTest() override { - net::URLRequestFilter::GetInstance()->RemoveHostnameHandler("http", - "google.com"); - net::URLRequestFilter::GetInstance()->RemoveHostnameHandler("http", - "example.com"); - } + new TestingProfileManager(TestingBrowserProcess::GetGlobal())) {} void SetUp() override { #if defined(OS_CHROMEOS) @@ -157,43 +85,26 @@ ASSERT_TRUE(profile_manager_->SetUp()); profile_ = profile_manager_->CreateTestingProfile("test-profile"); ASSERT_TRUE(profile_); - TestExtensionSystem* test_extension_system = static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile_)); service_ = test_extension_system->CreateExtensionService( base::CommandLine::ForCurrentProcess(), base::FilePath(), false); - listener_ = new UserScriptListener(); - } - - void TearDown() override { - listener_ = NULL; + web_contents_ = content::WebContentsTester::CreateTestWebContents( + profile_, content::SiteInstance::Create(profile_)); } protected: - std::unique_ptr<net::URLRequest> StartTestRequest( - net::URLRequest::Delegate* delegate, - const std::string& url_string, - net::TestURLRequestContext* context) { - GURL url(url_string); - std::unique_ptr<net::URLRequest> request(context->CreateRequest( - url, net::DEFAULT_PRIORITY, delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); + NavigationThrottle::ThrottleCheckResult StartTestRequest( + const std::string& url_string) { + handle_ = content::NavigationHandle::CreateNavigationHandleForTesting( + GURL(url_string), web_contents_->GetMainFrame()); - ResourceThrottle* throttle = listener_->CreateResourceThrottle( - url, content::RESOURCE_TYPE_MAIN_FRAME); - - bool defer = false; - if (throttle) { - request->SetUserData(kUserDataKey, std::make_unique<ThrottleDelegate>( - request.get(), throttle)); - - throttle->WillStartRequest(&defer); - } - - if (!defer) - request->Start(); - - return request; + std::unique_ptr<NavigationThrottle> throttle = + listener_.CreateNavigationThrottle(handle_.get()); + if (throttle) + handle_->RegisterThrottleForTesting(std::move(throttle)); + return handle_->CallWillStartRequestForTesting(); } void LoadTestExtension() { @@ -219,9 +130,11 @@ content::TestBrowserThreadBundle thread_bundle_; std::unique_ptr<TestingProfileManager> profile_manager_; - scoped_refptr<UserScriptListener> listener_; - TestingProfile* profile_; - ExtensionService* service_; + UserScriptListener listener_; + TestingProfile* profile_ = nullptr; + ExtensionService* service_ = nullptr; + std::unique_ptr<content::WebContents> web_contents_; + std::unique_ptr<content::NavigationHandle> handle_; #if defined(OS_CHROMEOS) std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_; #endif @@ -232,70 +145,46 @@ TEST_F(UserScriptListenerTest, DelayAndUpdate) { LoadTestExtension(); - net::TestDelegate delegate; - net::TestURLRequestContext context; - std::unique_ptr<net::URLRequest> request( - StartTestRequest(&delegate, kMatchingUrl, &context)); - ASSERT_FALSE(request->is_pending()); + EXPECT_EQ(NavigationThrottle::DEFER, StartTestRequest(kMatchingUrl)); content::NotificationService::current()->Notify( extensions::NOTIFICATION_USER_SCRIPTS_UPDATED, content::Source<Profile>(profile_), content::NotificationService::NoDetails()); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(kTestData, delegate.data_received()); + EXPECT_FALSE(handle_->IsDeferredForTesting()); } TEST_F(UserScriptListenerTest, DelayAndUnload) { LoadTestExtension(); - net::TestDelegate delegate; - net::TestURLRequestContext context; - std::unique_ptr<net::URLRequest> request( - StartTestRequest(&delegate, kMatchingUrl, &context)); - ASSERT_FALSE(request->is_pending()); + EXPECT_EQ(NavigationThrottle::DEFER, StartTestRequest(kMatchingUrl)); UnloadTestExtension(); base::RunLoop().RunUntilIdle(); // This is still not enough to start delayed requests. We have to notify the // listener that the user scripts have been updated. - ASSERT_FALSE(request->is_pending()); + EXPECT_TRUE(handle_->IsDeferredForTesting()); content::NotificationService::current()->Notify( extensions::NOTIFICATION_USER_SCRIPTS_UPDATED, content::Source<Profile>(profile_), content::NotificationService::NoDetails()); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(kTestData, delegate.data_received()); + EXPECT_FALSE(handle_->IsDeferredForTesting()); } TEST_F(UserScriptListenerTest, NoDelayNoExtension) { - net::TestDelegate delegate; - net::TestURLRequestContext context; - std::unique_ptr<net::URLRequest> request( - StartTestRequest(&delegate, kMatchingUrl, &context)); - - // The request should be started immediately. - ASSERT_TRUE(request->is_pending()); - - base::RunLoop().RunUntilIdle(); - EXPECT_EQ(kTestData, delegate.data_received()); + EXPECT_EQ(NavigationThrottle::PROCEED, StartTestRequest(kMatchingUrl)); + EXPECT_FALSE(handle_->IsDeferredForTesting()); } TEST_F(UserScriptListenerTest, NoDelayNotMatching) { LoadTestExtension(); - net::TestDelegate delegate; - net::TestURLRequestContext context; - std::unique_ptr<net::URLRequest> request( - StartTestRequest(&delegate, kNotMatchingUrl, &context)); - - // The request should be started immediately. - ASSERT_TRUE(request->is_pending()); - - base::RunLoop().RunUntilIdle(); - EXPECT_EQ(kTestData, delegate.data_received()); + EXPECT_EQ(NavigationThrottle::PROCEED, StartTestRequest(kNotMatchingUrl)); + EXPECT_FALSE(handle_->IsDeferredForTesting()); } TEST_F(UserScriptListenerTest, MultiProfile) { @@ -315,11 +204,7 @@ registry->AddEnabled(extension); registry->TriggerOnLoaded(extension.get()); - net::TestDelegate delegate; - net::TestURLRequestContext context; - std::unique_ptr<net::URLRequest> request( - StartTestRequest(&delegate, kMatchingUrl, &context)); - ASSERT_FALSE(request->is_pending()); + EXPECT_EQ(NavigationThrottle::DEFER, StartTestRequest(kMatchingUrl)); // When the first profile's user scripts are ready, the request should still // be blocked waiting for profile2. @@ -328,8 +213,7 @@ content::Source<Profile>(profile_), content::NotificationService::NoDetails()); base::RunLoop().RunUntilIdle(); - ASSERT_FALSE(request->is_pending()); - EXPECT_TRUE(delegate.data_received().empty()); + EXPECT_TRUE(handle_->IsDeferredForTesting()); // After profile2 is ready, the request should proceed. content::NotificationService::current()->Notify( @@ -337,7 +221,7 @@ content::Source<Profile>(profile2), content::NotificationService::NoDetails()); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(kTestData, delegate.data_received()); + EXPECT_FALSE(handle_->IsDeferredForTesting()); } // Test when the script updated notification occurs before the throttle's @@ -345,19 +229,12 @@ // throttles. TEST_F(UserScriptListenerTest, ResumeBeforeStart) { LoadTestExtension(); - net::TestDelegate delegate; - net::TestURLRequestContext context; - GURL url(kMatchingUrl); - std::unique_ptr<net::URLRequest> request(context.CreateRequest( - url, net::DEFAULT_PRIORITY, &delegate, TRAFFIC_ANNOTATION_FOR_TESTS)); + handle_ = content::NavigationHandle::CreateNavigationHandleForTesting( + GURL(kMatchingUrl), web_contents_->GetMainFrame()); - ResourceThrottle* throttle = - listener_->CreateResourceThrottle(url, content::RESOURCE_TYPE_MAIN_FRAME); + std::unique_ptr<NavigationThrottle> throttle = + listener_.CreateNavigationThrottle(handle_.get()); ASSERT_TRUE(throttle); - request->SetUserData(kUserDataKey, std::make_unique<ThrottleDelegate>( - request.get(), throttle)); - - ASSERT_FALSE(request->is_pending()); content::NotificationService::current()->Notify( extensions::NOTIFICATION_USER_SCRIPTS_UPDATED, @@ -365,9 +242,7 @@ content::NotificationService::NoDetails()); base::RunLoop().RunUntilIdle(); - bool defer = false; - throttle->WillStartRequest(&defer); - ASSERT_FALSE(defer); + ASSERT_EQ(content::NavigationThrottle::PROCEED, throttle->WillStartRequest()); } } // namespace
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc index 5ee4566..60905ec 100644 --- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc +++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
@@ -96,7 +96,6 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/api/streams_private/streams_private_api.h" -#include "chrome/browser/extensions/user_script_listener.h" #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" #include "extensions/common/extension_urls.h" #include "extensions/common/user_script.h" @@ -326,13 +325,7 @@ ChromeResourceDispatcherHostDelegate::ChromeResourceDispatcherHostDelegate() : download_request_limiter_(g_browser_process->download_request_limiter()), - safe_browsing_(g_browser_process->safe_browsing_service()) -#if BUILDFLAG(ENABLE_EXTENSIONS) - , - user_script_listener_(new extensions::UserScriptListener()) -#endif -{ -} + safe_browsing_(g_browser_process->safe_browsing_service()) {} ChromeResourceDispatcherHostDelegate::~ChromeResourceDispatcherHostDelegate() { #if BUILDFLAG(ENABLE_EXTENSIONS) @@ -480,14 +473,6 @@ if (first_throttle) throttles->push_back(base::WrapUnique(first_throttle)); -#if BUILDFLAG(ENABLE_EXTENSIONS) - content::ResourceThrottle* wait_for_extensions_init_throttle = - user_script_listener_->CreateResourceThrottle(request->url(), - resource_type); - if (wait_for_extensions_init_throttle) - throttles->push_back(base::WrapUnique(wait_for_extensions_init_throttle)); -#endif - const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); if (info->IsPrerendering()) { // TODO(jam): remove this throttle once http://crbug.com/740130 is fixed and
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h index 47ef7539..72af8f7a 100644 --- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h +++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.h
@@ -24,10 +24,6 @@ class NavigationData; } -namespace extensions { -class UserScriptListener; -} - namespace net { class URLRequest; } @@ -114,7 +110,6 @@ scoped_refptr<DownloadRequestLimiter> download_request_limiter_; scoped_refptr<safe_browsing::SafeBrowsingService> safe_browsing_; #if BUILDFLAG(ENABLE_EXTENSIONS) - scoped_refptr<extensions::UserScriptListener> user_script_listener_; std::map<net::URLRequest*, StreamTargetInfo> stream_target_info_; #endif
diff --git a/chrome/browser/no_background_tasks_browsertest.cc b/chrome/browser/no_background_tasks_browsertest.cc index 529e0c2..446c7cb9 100644 --- a/chrome/browser/no_background_tasks_browsertest.cc +++ b/chrome/browser/no_background_tasks_browsertest.cc
@@ -58,12 +58,12 @@ // Verify that it is possible to get the first non-empty paint without running // background tasks. // -// TODO(fdoray): Enable on ChromeOS once all dependencies on background tasks to -// produce the first non-empty paint have been removed. https://crbug.com/831835 -// This test is flaky on Mac: https://crbug.com/833989 -// TODO(http://crbug.com/876184 Command line is too long for win-asan. -#if defined(OS_CHROMEOS) || defined(OS_MACOSX) || \ - (defined(OS_WIN) && defined(ADDRESS_SANITIZER)) +// TODO(fdoray) https://crbug.com/833989: +// - Flaky timeout on Mac +// - Flaky timeout on ChromeOS ASAN +// - Consistent timeout on Win ASAN +#if defined(OS_MACOSX) || \ + (defined(ADDRESS_SANITIZER) && (defined(OS_CHROMEOS) || defined(OS_WIN))) #define MAYBE_FirstNonEmptyPaintWithoutBackgroundTasks \ DISABLED_FirstNonEmptyPaintWithoutBackgroundTasks #else
diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc index c22257a..323c79a0 100644 --- a/chrome/browser/prefs/chrome_pref_service_factory.cc +++ b/chrome/browser/prefs/chrome_pref_service_factory.cc
@@ -303,56 +303,6 @@ return result; } -// Shows notifications which correspond to PersistentPrefStore's reading errors. -void HandleReadError(const base::FilePath& pref_filename, - PersistentPrefStore::PrefReadError error) { - // The error callback is always invoked back on the main thread (which is - // BrowserThread::UI unless called during early initialization before the main - // thread is promoted to BrowserThread::UI). - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || - !BrowserThread::IsThreadInitialized(BrowserThread::UI)); - - // Sample the histogram also for the successful case in order to get a - // baseline on the success rate in addition to the error distribution. - UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, - PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); - - if (error != PersistentPrefStore::PREF_READ_ERROR_NONE) { -#if !defined(OS_CHROMEOS) - // Failing to load prefs on startup is a bad thing(TM). See bug 38352 for - // an example problem that this can cause. - // Do some diagnosis and try to avoid losing data. - int message_id = 0; - if (error <= PersistentPrefStore::PREF_READ_ERROR_JSON_TYPE) { - message_id = IDS_PREFERENCES_CORRUPT_ERROR; - } else if (error != PersistentPrefStore::PREF_READ_ERROR_NO_FILE) { - message_id = IDS_PREFERENCES_UNREADABLE_ERROR; - } - - if (message_id) { - // Note: ThreadTaskRunnerHandle() is usually BrowserThread::UI but during - // early startup it can be ChromeBrowserMainParts::DeferringTaskRunner - // which will forward to BrowserThread::UI when it's initialized. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&ShowProfileErrorDialog, ProfileErrorType::PREFERENCES, - message_id, - sql::GetCorruptFileDiagnosticsInfo(pref_filename))); - } -#else - // On ChromeOS error screen with message about broken local state - // will be displayed. - - // A supplementary error message about broken local state - is included - // in logs and user feedbacks. - if (error != PersistentPrefStore::PREF_READ_ERROR_NONE && - error != PersistentPrefStore::PREF_READ_ERROR_NO_FILE) { - LOG(ERROR) << "An error happened during prefs loading: " << error; - } -#endif - } -} - std::unique_ptr<ProfilePrefStoreManager> CreateProfilePrefStoreManager( const base::FilePath& profile_path) { std::string legacy_device_id; @@ -404,8 +354,8 @@ factory->set_command_line_prefs( base::MakeRefCounted<ChromeCommandLinePrefStore>( base::CommandLine::ForCurrentProcess())); - factory->set_read_error_callback( - base::BindRepeating(&HandleReadError, pref_filename)); + factory->set_read_error_callback(base::BindRepeating( + &chrome_prefs::HandlePersistentPrefStoreReadError, pref_filename)); factory->set_user_prefs(std::move(user_pref_store)); factory->SetPrefModelAssociatorClient( ChromePrefModelAssociatorClient::GetInstance()); @@ -456,20 +406,15 @@ policy::PolicyService* policy_service, scoped_refptr<PrefRegistry> pref_registry, bool async, - std::unique_ptr<PrefValueStore::Delegate> delegate, - scoped_refptr<PersistentPrefStore> user_pref_store) { - if (!user_pref_store) { - // The new JsonPrefStore will read content from |pref_filename| in - // PrefServiceSyncableFactory. Errors are ignored. - user_pref_store = base::MakeRefCounted<JsonPrefStore>( - pref_filename, std::unique_ptr<PrefFilter>()); - } + std::unique_ptr<PrefValueStore::Delegate> delegate) { sync_preferences::PrefServiceSyncableFactory factory; PrepareFactory(&factory, pref_filename, policy_service, nullptr, // supervised_user_settings - std::move(user_pref_store), + base::MakeRefCounted<JsonPrefStore>( + pref_filename, std::unique_ptr<PrefFilter>()), nullptr, // extension_prefs async); + return factory.Create(std::move(pref_registry), std::move(delegate)); } @@ -503,6 +448,18 @@ return factory.CreateSyncable(std::move(pref_registry), std::move(delegate)); } +void InstallPoliciesOnLocalState( + PrefService* preexisting_local_state, + policy::PolicyService* policy_service, + std::unique_ptr<PrefValueStore::Delegate> delegate) { + sync_preferences::PrefServiceSyncableFactory factory; + policy::BrowserPolicyConnector* policy_connector = + g_browser_process->browser_policy_connector(); + factory.SetManagedPolicies(policy_service, policy_connector); + factory.SetRecommendedPolicies(policy_service, policy_connector); + factory.ChangePrefValueStore(preexisting_local_state, std::move(delegate)); +} + void DisableDomainCheckForTesting() { #if defined(OS_WIN) g_disable_domain_check_for_testing = true; @@ -530,4 +487,54 @@ ProfilePrefStoreManager::RegisterProfilePrefs(registry); } +void HandlePersistentPrefStoreReadError( + const base::FilePath& pref_filename, + PersistentPrefStore::PrefReadError error) { + // The error callback is always invoked back on the main thread (which is + // BrowserThread::UI unless called during early initialization before the main + // thread is promoted to BrowserThread::UI). + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || + !BrowserThread::IsThreadInitialized(BrowserThread::UI)); + + // Sample the histogram also for the successful case in order to get a + // baseline on the success rate in addition to the error distribution. + UMA_HISTOGRAM_ENUMERATION("PrefService.ReadError", error, + PersistentPrefStore::PREF_READ_ERROR_MAX_ENUM); + + if (error != PersistentPrefStore::PREF_READ_ERROR_NONE) { +#if !defined(OS_CHROMEOS) + // Failing to load prefs on startup is a bad thing(TM). See bug 38352 for + // an example problem that this can cause. + // Do some diagnosis and try to avoid losing data. + int message_id = 0; + if (error <= PersistentPrefStore::PREF_READ_ERROR_JSON_TYPE) { + message_id = IDS_PREFERENCES_CORRUPT_ERROR; + } else if (error != PersistentPrefStore::PREF_READ_ERROR_NO_FILE) { + message_id = IDS_PREFERENCES_UNREADABLE_ERROR; + } + + if (message_id) { + // Note: ThreadTaskRunnerHandle() is usually BrowserThread::UI but during + // early startup it can be ChromeBrowserMainParts::DeferringTaskRunner + // which will forward to BrowserThread::UI when it's initialized. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&ShowProfileErrorDialog, ProfileErrorType::PREFERENCES, + message_id, + sql::GetCorruptFileDiagnosticsInfo(pref_filename))); + } +#else + // On ChromeOS error screen with message about broken local state + // will be displayed. + + // A supplementary error message about broken local state - is included + // in logs and user feedbacks. + if (error != PersistentPrefStore::PREF_READ_ERROR_NONE && + error != PersistentPrefStore::PREF_READ_ERROR_NO_FILE) { + LOG(ERROR) << "An error happened during prefs loading: " << error; + } +#endif + } +} + } // namespace chrome_prefs
diff --git a/chrome/browser/prefs/chrome_pref_service_factory.h b/chrome/browser/prefs/chrome_pref_service_factory.h index 3318afc..7dd4cf5 100644 --- a/chrome/browser/prefs/chrome_pref_service_factory.h +++ b/chrome/browser/prefs/chrome_pref_service_factory.h
@@ -8,6 +8,7 @@ #include <memory> #include "base/memory/ref_counted.h" +#include "components/prefs/persistent_pref_store.h" #include "components/prefs/pref_value_store.h" #include "services/preferences/public/mojom/tracked_preference_validation_delegate.mojom.h" @@ -63,16 +64,12 @@ // the created PrefService or NULL if creation has failed. Note, it is // guaranteed that in asynchronous version initialization happens after this // function returned. - -// |user_pref_store| instance is an existing pref store that the local state -// PrefService uses as its persistent user pref store. std::unique_ptr<PrefService> CreateLocalState( const base::FilePath& pref_filename, policy::PolicyService* policy_service, scoped_refptr<PrefRegistry> pref_registry, bool async, - std::unique_ptr<PrefValueStore::Delegate> delegate, - scoped_refptr<PersistentPrefStore> user_pref_store); + std::unique_ptr<PrefValueStore::Delegate> delegate); std::unique_ptr<sync_preferences::PrefServiceSyncable> CreateProfilePrefs( const base::FilePath& pref_filename, @@ -85,6 +82,18 @@ scoped_refptr<base::SequencedTaskRunner> io_task_runner, std::unique_ptr<PrefValueStore::Delegate> delegate); +// Installs policy related PrefStores on |preexisting_local_state|. +// |preexisting_local_state| instance is a local state that has user PrefStore +// and commandline PrefStore initialized. It is missing the mandatory and +// recommended PrefStores and this method will add them to it. +// |policy_service| is used as the source for mandatory or recommended +// policies. +// |delegate| is passed to listen to PrefStore initialization events. +void InstallPoliciesOnLocalState( + PrefService* preexisting_local_state, + policy::PolicyService* policy_service, + std::unique_ptr<PrefValueStore::Delegate> delegate); + // Call before startup tasks kick in to ignore the presence of a domain when // determining the active SettingsEnforcement group. For testing only. void DisableDomainCheckForTesting(); @@ -106,6 +115,11 @@ // Register user prefs used by chrome preference system. void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); +// Shows notifications which correspond to PersistentPrefStore's reading errors. +void HandlePersistentPrefStoreReadError( + const base::FilePath& pref_filename, + PersistentPrefStore::PrefReadError error); + } // namespace chrome_prefs #endif // CHROME_BROWSER_PREFS_CHROME_PREF_SERVICE_FACTORY_H_
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.cc b/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.cc index e7ec23c..1a3bbce 100644 --- a/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.cc +++ b/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.cc
@@ -380,20 +380,13 @@ loaded_tabs_in_background_count_--; // Only update the observation durations if there's no more backgounded // instance of this origin. - if (loaded_tabs_in_background_count_ > 0U) - return; - - DCHECK(!background_session_begin_.is_null()); - base::TimeDelta extra_observation_duration = - NowTicks() - background_session_begin_; - - // Update the observation duration fields. - for (auto* iter : GetAllFeaturesFromProto(&site_characteristics_)) - IncrementFeatureObservationDuration(iter, extra_observation_duration); + if (loaded_tabs_in_background_count_ == 0U) + FlushFeaturesObservationDurationToProto(); } const SiteCharacteristicsProto& LocalSiteCharacteristicsDataImpl::FlushStateToProto() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Update the proto with the most current performance measurement averages. if (cpu_usage_estimate_.num_datums() || private_footprint_kb_estimate_.num_datums()) { @@ -407,8 +400,26 @@ } } + if (loaded_tabs_in_background_count_ > 0U) + FlushFeaturesObservationDurationToProto(); + return site_characteristics_; } +void LocalSiteCharacteristicsDataImpl:: + FlushFeaturesObservationDurationToProto() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(!background_session_begin_.is_null()); + + base::TimeTicks now = NowTicks(); + + base::TimeDelta extra_observation_duration = now - background_session_begin_; + background_session_begin_ = now; + + // Update the observation duration fields. + for (auto* iter : GetAllFeaturesFromProto(&site_characteristics_)) + IncrementFeatureObservationDuration(iter, extra_observation_duration); +} + } // namespace internal } // namespace resource_coordinator
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.h b/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.h index 54e1bd6..415c1dc 100644 --- a/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.h +++ b/chrome/browser/resource_coordinator/local_site_characteristics_data_impl.h
@@ -176,6 +176,8 @@ FRIEND_TEST_ALL_PREFIXES( resource_coordinator::LocalSiteCharacteristicsDataReaderTest, FreeingReaderDoesntCauseWriteOperation); + FRIEND_TEST_ALL_PREFIXES(LocalSiteCharacteristicsDataImplTest, + FlushingStateToProtoDoesntAffectData); // Add |extra_observation_duration| to the observation window of a given // feature if it hasn't been used yet, do nothing otherwise. @@ -211,6 +213,10 @@ // Flush any state that's maintained in member variables to the proto. const SiteCharacteristicsProto& FlushStateToProto(); + // Updates the proto with the current total observation duration and updates + // |background_session_begin_| to NowTicks(). + void FlushFeaturesObservationDurationToProto(); + // This site's characteristics, contains the features and other values are // measured. SiteCharacteristicsProto site_characteristics_;
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_data_impl_unittest.cc b/chrome/browser/resource_coordinator/local_site_characteristics_data_impl_unittest.cc index d0abbe3..2d8f8c4 100644 --- a/chrome/browser/resource_coordinator/local_site_characteristics_data_impl_unittest.cc +++ b/chrome/browser/resource_coordinator/local_site_characteristics_data_impl_unittest.cc
@@ -136,6 +136,7 @@ } const url::Origin kDummyOrigin = url::Origin::Create(GURL("foo.com")); + const url::Origin kDummyOrigin2 = url::Origin::Create(GURL("bar.com")); base::SimpleTestTickClock test_clock_; ScopedSetTickClockForTesting scoped_set_tick_clock_for_testing_; @@ -653,5 +654,47 @@ ::testing::Mock::VerifyAndClear(&mock_db); } +TEST_F(LocalSiteCharacteristicsDataImplTest, + FlushingStateToProtoDoesntAffectData) { + // Create 2 DataImpl object and do the same operations on them, ensures that + // calling FlushStateToProto doesn't affect the data that gets recorded. + + auto local_site_data = + GetDataImpl(kDummyOrigin, &destroy_delegate_, &database_); + auto local_site_data_ref = + GetDataImpl(kDummyOrigin2, &destroy_delegate_, &database_); + + local_site_data->NotifySiteLoaded(); + local_site_data->NotifyLoadedSiteBackgrounded(); + local_site_data_ref->NotifySiteLoaded(); + local_site_data_ref->NotifyLoadedSiteBackgrounded(); + + test_clock_.Advance(base::TimeDelta::FromSeconds(15)); + local_site_data->FlushStateToProto(); + test_clock_.Advance(base::TimeDelta::FromSeconds(15)); + + local_site_data->NotifyUsesAudioInBackground(); + local_site_data_ref->NotifyUsesAudioInBackground(); + + local_site_data->FlushStateToProto(); + + EXPECT_EQ(local_site_data->FeatureObservationTimestamp( + local_site_data->site_characteristics_for_testing() + .uses_audio_in_background()), + local_site_data_ref->FeatureObservationTimestamp( + local_site_data_ref->site_characteristics_for_testing() + .uses_audio_in_background())); + + EXPECT_EQ(local_site_data->FeatureObservationDuration( + local_site_data->site_characteristics_for_testing() + .updates_title_in_background()), + local_site_data_ref->FeatureObservationDuration( + local_site_data_ref->site_characteristics_for_testing() + .updates_title_in_background())); + + local_site_data->NotifySiteUnloaded(TabVisibility::kBackground); + local_site_data_ref->NotifySiteUnloaded(TabVisibility::kBackground); +} + } // namespace internal } // namespace resource_coordinator
diff --git a/chrome/browser/resource_coordinator/tab_manager_features.cc b/chrome/browser/resource_coordinator/tab_manager_features.cc index b4827d7..e44e75a 100644 --- a/chrome/browser/resource_coordinator/tab_manager_features.cc +++ b/chrome/browser/resource_coordinator/tab_manager_features.cc
@@ -30,7 +30,8 @@ // Enables proactive tab freezing and discarding. const base::Feature kProactiveTabFreezeAndDiscard{ - "ProactiveTabFreezeAndDiscard", base::FEATURE_DISABLED_BY_DEFAULT}; + resource_coordinator::kProactiveTabFreezeAndDiscardFeatureName, + base::FEATURE_DISABLED_BY_DEFAULT}; // Enables the site characteristics database. const base::Feature kSiteCharacteristicsDatabase{ @@ -78,6 +79,11 @@ } // namespace +const char kProactiveTabFreezeAndDiscardFeatureName[] = + "ProactiveTabFreezeAndDiscard"; +const char kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam[] = + "ShouldProactivelyDiscard"; + // Instantiate the feature parameters for proactive tab discarding. constexpr base::FeatureParam<bool> ProactiveTabFreezeAndDiscardParams::kShouldProactivelyDiscard;
diff --git a/chrome/browser/resource_coordinator/tab_manager_features.h b/chrome/browser/resource_coordinator/tab_manager_features.h index 207e1a8..590db23 100644 --- a/chrome/browser/resource_coordinator/tab_manager_features.h +++ b/chrome/browser/resource_coordinator/tab_manager_features.h
@@ -25,6 +25,13 @@ namespace resource_coordinator { +// The name of the ProactiveTabFreezeAndDiscard feature. +extern const char kProactiveTabFreezeAndDiscardFeatureName[]; + +// The name of the |ShouldProactivelyDiscard| parameter of the +// ProactiveTabFreezeAndDiscard feature. +extern const char kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam[]; + // Parameters used by the proactive tab discarding feature. // // Proactive discarding has 5 key parameters: @@ -69,8 +76,8 @@ // feature. static constexpr base::FeatureParam<bool> kShouldProactivelyDiscard{ - &features::kProactiveTabFreezeAndDiscard, "ShouldProactivelyDiscard", - false}; + &features::kProactiveTabFreezeAndDiscard, + kProactiveTabFreezeAndDiscard_ShouldProactivelyDiscardParam, false}; static constexpr base::FeatureParam<bool> kShouldPeriodicallyUnfreeze{ &features::kProactiveTabFreezeAndDiscard, "ShouldPeriodicallyUnfreeze", false};
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index bb7c0b6..27599cdd 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -15,6 +15,7 @@ ] if (is_linux || is_win || is_mac) { deps += [ + "discards:closure_compile", "md_bookmarks:closure_compile", "md_downloads:closure_compile", "md_history:closure_compile",
diff --git a/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy.js b/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy.js index 9ee23923..47602c9 100644 --- a/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy.js +++ b/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy.js
@@ -302,6 +302,11 @@ } } + // It's possible the end of the wrapped cursor falls at the + // |translatedContent.byteLength| exactly. + this.maybeSetWrappedCursor_( + index - cellsPadded, wrappedBrailleArray.length); + // Convert the wrapped Braille Uint8 Array back to ArrayBuffer. var wrappedBrailleUint8Array = new Uint8Array(wrappedBrailleArray); this.wrappedBuffer_ = new ArrayBuffer(wrappedBrailleUint8Array.length); @@ -327,7 +332,10 @@ }, /** - * + * Refreshes the wrapped cursor given a mapping from an unwrapped index to a + * wrapped index. + * @param {number} unwrappedIndex + * @param {number} wrappedIndex */ maybeSetWrappedCursor_: function(unwrappedIndex, wrappedIndex) { // We only care about the bounds of the index start/end.
diff --git a/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy_test.unitjs b/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy_test.unitjs index 765e8a2..161d4fa3 100644 --- a/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy_test.unitjs +++ b/chrome/browser/resources/chromeos/chromevox/braille/pan_strategy_test.unitjs
@@ -268,3 +268,27 @@ panner.next(); assertEquals('789', panner.getCurrentTextViewportContents()); }); + +TEST_F('CvoxPanStrategyUnitTest', 'WrappedUnwrappedCursors', function() { + var panner = new cvox.PanStrategy(); + panner.setPanStrategy(true); + + // 30 cells with blank cells at positions 8, 22 and 26. + var content = createArrayBuffer('11234567 9112345678911 345 789'); + + panner.setCursor(1, 3); + panner.setContent('a', content, [], 0); + panner.setDisplaySize(2, 10); + assertEqualsJSON({start: 1, end: 3}, panner.getCursor()); + assertEqualsJSON({start: 1, end: 3}, panner.wrappedCursor_); + + panner.setCursor(5, 10); + panner.setContent('a', content, [], 0); + assertEqualsJSON({start: 5, end: 10}, panner.getCursor()); + assertEqualsJSON({start: 5, end: 11}, panner.wrappedCursor_); + + panner.setCursor(9, 9); + panner.setContent('a', content, [], 0); + assertEqualsJSON({start: 9, end: 9}, panner.getCursor()); + assertEqualsJSON({start: 10, end: 11}, panner.wrappedCursor_); +});
diff --git a/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js b/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js index f410e83..46d2f72 100644 --- a/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js +++ b/chrome/browser/resources/chromeos/chromevox/common/editable_text_base.js
@@ -343,7 +343,8 @@ if (evt.value == this.value) { this.describeSelectionChanged(evt); } else { - this.describeTextChanged(evt); + this.describeTextChanged( + new cvox.TextChangeEvent(this.value, this.start, this.end, true), evt); } this.lastChangeDescribed = true; @@ -460,11 +461,13 @@ /** * Describe a change where the text changes. + * @param {cvox.TextChangeEvent} prev The previous text change event. * @param {cvox.TextChangeEvent} evt The text change event. */ -cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function(evt) { +cvox.ChromeVoxEditableTextBase.prototype.describeTextChanged = function( + prev, evt) { var personality = {}; - if (evt.value.length < (this.value.length - 1)) { + if (evt.value.length < (prev.value.length - 1)) { personality = cvox.AbstractTts.PERSONALITY_DELETED; } if (this.isPassword) { @@ -476,7 +479,7 @@ return; } - var value = this.value; + var value = prev.value; var len = value.length; var newLen = evt.value.length; var autocompleteSuffix = ''; @@ -497,11 +500,11 @@ // and any new text was inserted at that character position. // This would handle pasting and entering text by typing, both from // a cursor and from a selection. - var prefixLen = this.start; - var suffixLen = len - this.end; + var prefixLen = prev.start; + var suffixLen = len - prev.end; if (newLen >= prefixLen + suffixLen + (evtEnd - evt.start) && evtValue.substr(0, prefixLen) == value.substr(0, prefixLen) && - evtValue.substr(newLen - suffixLen) == value.substr(this.end)) { + evtValue.substr(newLen - suffixLen) == value.substr(prev.end)) { // However, in a dynamic content editable, defer to authoritative events // (clipboard, key press) to reduce guess work when observing insertions. // Only use this logic when observing deletions (and insertion of word @@ -511,7 +514,7 @@ this instanceof cvox.ChromeVoxEditableContentEditable) || newLen < len || this.isWordBreakChar(evt.value[newLen - 1] || '')) { this.describeTextChangedHelper( - evt, prefixLen, suffixLen, autocompleteSuffix, personality); + prev, evt, prefixLen, suffixLen, autocompleteSuffix, personality); } return; } @@ -522,18 +525,18 @@ // a word or line. prefixLen = evt.start; suffixLen = newLen - evtEnd; - if (this.start == this.end && evt.start == evtEnd && + if (prev.start == prev.end && evt.start == evtEnd && evtValue.substr(0, prefixLen) == value.substr(0, prefixLen) && evtValue.substr(newLen - suffixLen) == value.substr(len - suffixLen)) { // Forward deletions causes reading of the character immediately to the // right of the caret or the deleted text depending on the iBeam cursor // setting. - if (this.start == evt.start && this.end == evt.end && + if (prev.start == evt.start && prev.end == evt.end && !cvox.ChromeVoxEditableTextBase.useIBeamCursor) { this.speak(evt.value[evt.start], evt.triggeredByUser); } else { this.describeTextChangedHelper( - evt, prefixLen, suffixLen, autocompleteSuffix, personality); + prev, evt, prefixLen, suffixLen, autocompleteSuffix, personality); } return; } @@ -573,7 +576,7 @@ if (this.multiline) { // Fall back to announce deleted but omit the text that was deleted. - if (evt.value.length < this.value.length) { + if (evt.value.length < prev.value.length) { this.speak(Msgs.getMsg('text_deleted'), evt.triggeredByUser, personality); } // The below is a somewhat loose way to deal with non-standard @@ -588,7 +591,7 @@ // If the text is short, just speak the whole thing. if (newLen <= this.maxShortPhraseLen) { - this.describeTextChangedHelper(evt, 0, 0, '', personality); + this.describeTextChangedHelper(prev, evt, 0, 0, '', personality); return; } @@ -612,7 +615,8 @@ suffixLen--; } - this.describeTextChangedHelper(evt, prefixLen, suffixLen, '', personality); + this.describeTextChangedHelper( + prev, evt, prefixLen, suffixLen, '', personality); }; @@ -620,6 +624,7 @@ * The function called by describeTextChanged after it's figured out * what text was deleted, what text was inserted, and what additional * autocomplete text was added. + * @param {cvox.TextChangeEvent} prev The previous text change event. * @param {cvox.TextChangeEvent} evt The text change event. * @param {number} prefixLen The number of characters in the common prefix * of this.value and newValue. @@ -631,11 +636,11 @@ * @param {Object=} opt_personality Personality to speak the text. */ cvox.ChromeVoxEditableTextBase.prototype.describeTextChangedHelper = function( - evt, prefixLen, suffixLen, autocompleteSuffix, opt_personality) { - var len = this.value.length; + prev, evt, prefixLen, suffixLen, autocompleteSuffix, opt_personality) { + var len = prev.value.length; var newLen = evt.value.length; var deletedLen = len - prefixLen - suffixLen; - var deleted = this.value.substr(prefixLen, deletedLen); + var deleted = prev.value.substr(prefixLen, deletedLen); var insertedLen = newLen - prefixLen - suffixLen; var inserted = evt.value.substr(prefixLen, insertedLen); var utterance = '';
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js index 2cc4762..1c5612d4 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js
@@ -326,8 +326,11 @@ anchorLine.isSameLine(prevAnchorLine) && focusLine.isSameLine(prevFocusLine)) { // Intra-line changes. - this.changed(new cvox.TextChangeEvent( - cur.text || '', cur.startOffset, cur.endOffset, true)); + var text = cur.text; + if (text == '\n') + text = ''; + this.changed( + new cvox.TextChangeEvent(text, cur.startOffset, cur.endOffset, true)); this.brailleCurrentRichLine_(); // Finally, queue up any text markers/styles at bounds. @@ -378,7 +381,28 @@ // ax gets fixed. var curBase = baseLineOnStart ? focusLine : anchorLine; - if (cur.text == '') { + if ((cur.startContainer_.role == RoleType.TEXT_FIELD || + (cur.startContainer_ == prev.startContainer_ && + cur.endContainer_ == prev.endContainer_)) && + cur.startContainerValue_ != prev.startContainerValue_) { + // This block catches text changes between |prev| and | cur|. Note that we + // can end up here if |prevAnchorLine| or |prevFocusLine| were invalid + // above for intra-line changes. This block therefore catches all text + // changes including those that occur within a single line and up to those + // that occur within a static text. It also catches text changes that + // result in an empty text field, so we handle the case where the + // container is the text field itself. + + // Take the difference of the text at the paragraph level (i.e. the value + // of the container) and speak that. + this.describeTextChanged( + new cvox.TextChangeEvent( + prev.startContainerValue_, prev.localContainerStartOffset_, + prev.localContainerEndOffset_, true), + new cvox.TextChangeEvent( + cur.startContainerValue_, cur.localContainerStartOffset_, + cur.localContainerEndOffset_, true)); + } else if (cur.text == '') { // This line has no text content. Describe the DOM selection. new Output() .withRichSpeechAndBraille( @@ -553,7 +577,9 @@ * @private */ speakCurrentRichLine_: function(prevLine) { - var prev = prevLine ? prevLine.startContainer_ : this.node_; + var prev = (prevLine && prevLine.startContainer_.role) ? + prevLine.startContainer_ : + null; var lineNodes = /** @type {Array<!AutomationNode>} */ ( this.line_.value_.getSpansInstanceOf( @@ -565,7 +591,8 @@ var o = new Output() .withRichSpeech( - Range.fromNode(cur), prev ? Range.fromNode(prev) : null, + Range.fromNode(cur), + prev ? Range.fromNode(prev) : Range.fromNode(cur), Output.EventType.NAVIGATE) .withQueueMode(queueMode); @@ -763,6 +790,8 @@ this.lineEnd_; /** @private {AutomationNode|undefined} */ this.startContainer_; + /** @private {string} */ + this.startContainerValue_ = ''; /** @private {AutomationNode|undefined} */ this.lineStartContainer_; /** @private {number} */ @@ -798,6 +827,10 @@ this.startContainer_ = this.start_.node; if (this.startContainer_.role == RoleType.INLINE_TEXT_BOX) this.startContainer_ = this.startContainer_.parent; + this.startContainerValue_ = + this.startContainer_.role == RoleType.TEXT_FIELD ? + this.startContainer_.value || '' : + this.startContainer_.name || ''; this.endContainer_ = this.end_.node; if (this.endContainer_.role == RoleType.INLINE_TEXT_BOX) this.endContainer_ = this.endContainer_.parent;
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs index 6ecad019..d1d8630 100644 --- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs +++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/editing_test.extjs
@@ -31,6 +31,12 @@ return mockFeedback; }, + press: function(keyCode, modifiers) { + return function() { + BackgroundKeyboardHandler.sendKeyPress(keyCode, modifiers); + }; + }, + }; var doc = function() {/*! @@ -940,3 +946,59 @@ input.focus(); }); }); + +TEST_F('EditingTest', 'BackwardWordDelete', function() { + var mockFeedback = this.createMockFeedback(); + this.runWithLoadedTree(function() {/*! + <div + style='max-width: 5px; overflow-wrap: normal' + contenteditable + role="textbox"> + this is a test + </div> + */}, function(root) { + var input = root.find({role: RoleType.TEXT_FIELD}); + this.listenOnce(input, 'focus', function() { + mockFeedback.call(this.press(35 /* end */, {ctrl: true})) + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('test, deleted') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('a , deleted') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('is , deleted') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('this , deleted') + .replay(); + }); + input.focus(); + }); +}); + +TEST_F('EditingTest', 'BackwardWordDeleteAcrossParagraphs', function() { + var mockFeedback = this.createMockFeedback(); + this.runWithLoadedTree(function() {/*! + <div + style='max-width: 5px; overflow-wrap: normal' + contenteditable + role="textbox"> + <p>first line</p> + <p>second line</p> + </div> + */}, function(root) { + var input = root.find({role: RoleType.TEXT_FIELD}); + this.listenOnce(input, 'focus', function() { + mockFeedback.call(this.press(35 /* end */, {ctrl: true})) + .expectSpeech('line') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('line, deleted') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('second , deleted') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('first\u00a0') + .call(this.press(8 /* backspace */, {ctrl: true})) + .expectSpeech('first , deleted') + .replay(); + }); + input.focus(); + }); +});
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb index cea4c77..39671243 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ml.xtb
@@ -5,7 +5,7 @@ <translation id="1011903154582639569">ഒരു കീ കണ്ടെത്തുക, തുടർന്ന് ടൈപ്പ് ചെയ്യാൻ ഉയർത്തുക</translation> <translation id="1012173283529841972">ലിസ്റ്റ് ഇനം</translation> <translation id="1013742170491673792">srched</translation> -<translation id="1014370462248694370">വലത് വശത്ത് രണ്ട് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="1014370462248694370">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് വലത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="1022586497894531524">നിങ്ങൾ ആദ്യമായാണോ ChromeVox സംഭാഷണ ഫീഡ്ബാക്ക് ഉപയോഗിക്കുന്നത്? ChromeVox ആരംഭിക്കാൻ ആവശ്യമായ കാര്യങ്ങളെ കുറിച്ച് ഈ ട്യൂട്ടോറിയലിൽ വിവരിക്കുന്നു.</translation> <translation id="1023866615269196768">സ്പാൻ ചെയ്തു.</translation> <translation id="1025074108959230262">സ്റ്റിക്കി മോഡ് പ്രവർത്തനരഹിതമാക്കി</translation> @@ -22,7 +22,7 @@ <translation id="1106741348836243114">ശബ്ദ ഫീഡ്ബാക്ക് (ഇയർകോൺസ്) ഓണാക്കുക അല്ലെങ്കിൽ ഓഫാക്കുക.</translation> <translation id="1108651818222110612">ഉപശീർഷകം</translation> <translation id="1120743664840974483">{"a": "alpha", "b": "bravo", "c": "charlie", "d": "delta", "e": "echo", "f": "foxtrot", "g": "golf", "h": "hotel", "i": "india", "j": "juliet","k": "kilo", "l": "lima", "m": "mike", "n": "november", "o": "oscar","p": "papa", "q": "quebec", "r": "romeo", "s": "sierra", "t": "tango", "u": "uniform", "v": "victor", "w": "whiskey","x": "xray", "y": "yankee", "z": "zulu"}</translation> -<translation id="1120938014254001895">മുകളിലേക്ക് രണ്ട് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="1120938014254001895">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് മുകളിലോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="1124771028211010580">നിലവിലുള്ള ഡിസ്പ്ലേ ശൈലി വശങ്ങളിൽ കാണിക്കുന്ന തരത്തിലാണ്.</translation> <translation id="113582498867142724"><ph name="NUM" /> ഇനങ്ങളുള്ള <ph name="TAG" /> ശേഖരം</translation> <translation id="1155043339247954670">അടുത്ത ലിസ്റ്റ് ഇനം ഒന്നുമില്ല.</translation> @@ -93,7 +93,7 @@ <translation id="1722567105086139392">ലിങ്ക്</translation> <translation id="1727806147743597030">ftr</translation> <translation id="174268867904053074">അടുത്ത ഗ്രാഫിക്</translation> -<translation id="1765245556747822181">മുകളിലേക്ക് ഒരു വിരൽ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="1765245556747822181">ഒരു വിരൽ ഉപയോഗിച്ച് മുകളിലോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="1781173782405573156">പാസ് ത്രൂ കീ</translation> <translation id="1787176709638001873">പാസ്വേഡിനായി വാചകം എഡിറ്റുചെയ്യുക</translation> <translation id="1802710350767629429">അപ്ഡേറ്റ് കുറിപ്പുകൾ കാണിക്കുക</translation> @@ -139,7 +139,7 @@ <translation id="2223693656926968778">നിലവിലുള്ള ഇനത്തിൽ പ്രവർത്തനം നടത്തുക</translation> <translation id="225732394367814946">സംഭാഷണ റേറ്റ് വർദ്ധിപ്പിക്കുക</translation> <translation id="2267945578749931355">അടുത്ത പ്രതീകം</translation> -<translation id="2278490101488436824">മൂന്ന് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="2278490101488436824">മൂന്ന് വിരലുകൾ ഉപയോഗിച്ച് ഇടത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="2281234842553884450">മുൻ സ്ലൈഡർ</translation> <translation id="2294136146931447363">ഇറ്റാലിക്ക് തുടങ്ങുന്നു</translation> <translation id="2311237334957139798">അതിസൂക്ഷമമായ രീതിയിൽ മുൻപത്തേതിലേക്ക് നീക്കുക</translation> @@ -212,20 +212,20 @@ <translation id="2864481629947106776">മുൻ ലിങ്ക്</translation> <translation id="2867808975387772810">ഗ്രന്ഥസൂചി</translation> <translation id="2873259058405069099">പട്ടികയുടെ തുടക്കത്തിലേക്ക് പോകുക</translation> -<translation id="2879867157561757640">താഴേയ്ക്ക് മൂന്ന് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="2879867157561757640">മൂന്ന് വിരലുകൾ ഉപയോഗിച്ച് താഴോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="288178314850623291">നിർദ്ദിഷ്ട തരത്തിലുള്ള ഘടകങ്ങളിലേക്ക് പോകാൻ 'കമാൻഡുകളിലേക്ക് പോകുക' ഉപയോഗിക്കുക. തലക്കെട്ടുകളിലൂടെ മുന്നോട്ട് പോകാൻ തിരയൽ + H അമർത്തുകയോ പിന്നോട്ട് പോകാൻ തിരയൽ + ഷിഫ്റ്റ് + H അമർത്തുകയോ ചെയ്യുക.</translation> <translation id="2894654529758326923">വിവരം</translation> <translation id="2899328121302785497">{COUNT,plural, =1{ഇടത് ബ്രേസ്}other{# ഇടത് ബ്രേസുകൾ}}</translation> <translation id="2909478709401302630">സൂപ്പർസ്ക്രിപ്റ്റ് ആരംഭിക്കുന്നു</translation> <translation id="2911433807131383493">ChromeVox ട്യൂട്ടോറിയൽ തുറക്കുക</translation> -<translation id="2912405967290226587">വലത്തേക്ക് മൂന്ന് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="2912405967290226587">മൂന്ന് വിരലുകൾ ഉപയോഗിച്ച് വലത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="2932083475399492303">ഘടനാപരമായവയ്ക്ക് അല്ലെങ്കിൽ ലേഔട്ടിന് ഇടയിലുള്ള ലൈൻ തരം ടോഗിൾ ചെയ്യുക</translation> <translation id="2944762337049891859">പേജ് പൂർണ്ണമായി ലോഡുചെയ്ത ശേഷം അത് സ്വയമേവ വായിക്കുക.</translation> <translation id="2964026537669811554">ശീർഷക ഗ്രൂപ്പ്</translation> <translation id="296951647852255825">{COUNT,plural, =1{ടാബ്}other{# ടാബുകൾ}}</translation> <translation id="2972078295414139404">സന്ദർശിച്ച മുമ്പത്തെ ലിങ്കൊന്നുമില്ല.</translation> <translation id="2972205263822847197">ഉപകരണ നുറുങ്ങ്</translation> -<translation id="297825089465017871">ഇടത് വശത്തേക്ക് രണ്ട് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="297825089465017871">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് ഇടത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="2998131015536248178">മുമ്പത്തെ പ്രതീകം</translation> <translation id="2999559350546931576">പിച്ച് കുറയ്ക്കുക</translation> <translation id="2999945368667127852">അടുത്ത മീഡിയ വിജറ്റൊന്നുമില്ല.</translation> @@ -237,7 +237,7 @@ <translation id="3046838483509668188">ChromeVox ഓപ്ഷനുകൾ</translation> <translation id="3047143736589213134">പരീക്ഷണാത്മക കീമാപ്പ്</translation> <translation id="3060756054951570867"><ph name="TITLE" /> മെനു തുറന്നു</translation> -<translation id="3070245424257836917">മുകളിലേക്ക് മൂന്ന് വിരലുകൾ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="3070245424257836917">മൂന്ന് വിരലുകൾ ഉപയോഗിച്ച് മുകളിലോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="3078345202707391975">അടുത്ത നില 2 ശീർഷകം</translation> <translation id="3078740164268491126">പട്ടിക</translation> <translation id="3082249673510793544">പിന്നോട്ട് സ്ക്രോൾ ചെയ്യുക</translation> @@ -350,7 +350,7 @@ <translation id="3599054940393788245">ആന്തരിക മാത്ത് അല്ല</translation> <translation id="360241989769010433">കടപ്പാട്</translation> <translation id="3616113530831147358">ഓഡിയോ</translation> -<translation id="3622350485154495700">ഒരു വിരൽ ഉപയോഗിച്ച് ഇരട്ട ടാപ്പ് ചെയ്യുക</translation> +<translation id="3622350485154495700">ഒരു വിരൽ ഉപയോഗിച്ച് രണ്ടുതവണ ടാപ്പ് ചെയ്യുക</translation> <translation id="3646890046000188562">{COUNT,plural, =1{ബാക്ക്ടിക്ക്}other{# ബാക്ക്ടിക്കുകൾ}}</translation> <translation id="3650317109285159359">chkmnuitm</translation> <translation id="3655855170848725876">{COUNT,plural, =1{ഡോളർ}other{# ഡോളർ ചിഹ്നങ്ങൾ}}</translation> @@ -470,7 +470,7 @@ <translation id="4688873778442829762">grd</translation> <translation id="4693675773662933727">മുമ്പത്തെ ലാൻഡ്മാർക്ക്</translation> <translation id="4696413482802371445">അടുത്ത നില 5 ശീർഷകം ഒന്നുമില്ല.</translation> -<translation id="4710166929009737753">വലത്തേക്ക് ഒരു വിരൽ കൊണ്ട് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="4710166929009737753">ഒരു വിരൽ ഉപയോഗിച്ച് വലത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="4729095194763193578">മുൻ പട്ടിക വരി</translation> <translation id="4736221692378411923">ഓഗസ്റ്റ്</translation> <translation id="4740661827607246557">സഹായ കമാൻഡുകൾ</translation> @@ -483,7 +483,7 @@ <translation id="4826415162591436065">മുന്നോട്ട് നാവിഗേറ്റ് ചെയ്യുക</translation> <translation id="4826604887384865800">അടുത്ത ജമ്പ്</translation> <translation id="4827410568042294688">തിരഞ്ഞെടുത്തത് ഒഴിവാക്കി</translation> -<translation id="4838490795649708173">നാല് വിരലുകൾ ഉപയോഗിച്ച് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="4838490795649708173">നാല് വിരലുകൾ ഉപയോഗിച്ച് ടാപ്പ് ചെയ്യുക</translation> <translation id="4839925464551908214">മുമ്പത്തെ വരിയിലേക്ക് പോവുക</translation> <translation id="4842108708071771135">അടുത്ത ബ്ലോക്ക്ക്വോട്ട് ഒന്നുമില്ല.</translation> <translation id="4844625982113518938">ഏതെങ്കിലും കീയുടെ പേര് അറിയുന്നതിന് അത് അമർത്തുക. Ctrl+W "അറിയുക" മോഡ് അടയ്ക്കും.</translation> @@ -620,7 +620,7 @@ <translation id="5750633686117194034">മോഡിഫയർ ഒന്നും അമർത്തിയില്ല; ഒന്നോ അതിലധികമോ മോഡിഫയറുകൾ അമർത്തിപ്പിടിക്കുക; പൂർത്തിയാക്കിക്കഴിഞ്ഞാൽ വിരലുകൾ എടുക്കുക, തുടർന്ന് നിങ്ങൾ സജ്ജമാക്കിയ കീകൾ കേൾക്കും. പുറത്തുകടക്കാൻ ടാബ് അമർത്തുക.</translation> <translation id="5760594853119905566">അനുബന്ധം</translation> <translation id="5788275253279308023">ആൾമാറാട്ട വിൻഡോ <ph name="TITLE" /> ടാബ്</translation> -<translation id="5805940204952508776">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="5805940204952508776">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് ടാപ്പ് ചെയ്യുക</translation> <translation id="5806206155699461681">നിർദ്ദിഷ്ട സൈറ്റുകൾ മെച്ചപ്പെടുത്തുക (Google തിരയൽ പോലെയുള്ളവ).</translation> <translation id="5819072574982403430">ട്രീ ഇനം</translation> <translation id="5826479389509458994">വരി <ph name="ROW" /> നിര <ph name="COL" /></translation> @@ -725,10 +725,10 @@ <translation id="6786800275320335305">ലേഖനം</translation> <translation id="6787839852456839824">കീബോർഡ് കുറുക്കുവഴികൾ</translation> <translation id="6793101435925451627">lstbx</translation> -<translation id="6826226459053491773">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് താഴേയ്ക്ക് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="6826226459053491773">രണ്ട് വിരലുകൾ ഉപയോഗിച്ച് താഴോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="6833103209700200188">അടിക്കുറിപ്പ്</translation> <translation id="6858047746862060282">ആമുഖം</translation> -<translation id="6859876496651143278">ഒരു വിരൽ കൊണ്ട് ഇടത്തേക്ക് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="6859876496651143278">ഒരു വിരൽ ഉപയോഗിച്ച് ഇടത്തോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="6871161210040114857">കേസ് സെൻസിറ്റീവല്ല.</translation> <translation id="6877435256196695200">അടുത്ത ഗ്രാഫിക് ഒന്നുമില്ല.</translation> <translation id="6897341342232909480">ഇടതുവശത്തേക്ക് നീക്കുക</translation> @@ -978,7 +978,7 @@ <translation id="923331726185079994">ChromeVox അപ്ഡേറ്റുചെയ്തു</translation> <translation id="930275611743429116">തിരഞ്ഞെടുക്കൽ ആരംഭിക്കുകയോ അവസാനിപ്പിക്കുകയോ ചെയ്യുക.</translation> <translation id="948171205378458592">സംഭാഷണ റേറ്റ് കുറയ്ക്കുക</translation> -<translation id="958854023026327378">ഒരു വിരൽ കൊണ്ട് താഴേയ്ക്ക് സ്വൈപ്പ് ചെയ്യുക</translation> +<translation id="958854023026327378">ഒരു വിരൽ ഉപയോഗിച്ച് താഴോട്ട് സ്വൈപ്പ് ചെയ്യുക</translation> <translation id="962913030769097253">അടുത്ത നില 1 ശീർഷകം</translation> <translation id="973955474346881951">സ്റ്റിക്കി മോഡ് പ്രവർത്തനക്ഷമമാക്കുക/പ്രവർത്തനരഹിതമാക്കുക</translation> <translation id="976849232629612000">ഇനങ്ങളൊന്നുമില്ല.</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb index 3bed0ce0..3a10a55 100644 --- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
@@ -136,7 +136,7 @@ <translation id="2199994615414171367">मागील गणित</translation> <translation id="2203046366315513658">मूल्य कमी करा</translation> <translation id="2220529011494928058">समस्येची तक्रार करा</translation> -<translation id="2223693656926968778">वर्तमान आयटमवर कार्यवाही करा</translation> +<translation id="2223693656926968778">सद्य आयटमवर कार्यवाही करा</translation> <translation id="225732394367814946">बोलण्याचा दर वाढवा</translation> <translation id="2267945578749931355">पुढील वर्ण</translation> <translation id="2278490101488436824">तीन बोटांनी डावीकडे स्वाइप करा</translation>
diff --git a/chrome/browser/resources/chromeos/multidevice_setup/password_page.html b/chrome/browser/resources/chromeos/multidevice_setup/password_page.html index 2e24d15..c0b02b7 100644 --- a/chrome/browser/resources/chromeos/multidevice_setup/password_page.html +++ b/chrome/browser/resources/chromeos/multidevice_setup/password_page.html
@@ -32,9 +32,9 @@ <span id="email">[[email_]]</span> </div> <cr-input id="passwordInput" type="password" - placeholder="$i18n{enterPassword}" + placeholder="[[i18n('enterPassword')]]" invalid="[[passwordInvalid_]]" - error-message="$i18n{wrongPassword}" + error-message="[[i18n('wrongPassword')]]" value="{{inputValue_}}" aria-disabled="false" on-change="onUserPressedEnter_">
diff --git a/chrome/browser/resources/chromeos/multidevice_setup/start_setup_page.html b/chrome/browser/resources/chromeos/multidevice_setup/start_setup_page.html index 721f9aa..46441b82 100644 --- a/chrome/browser/resources/chromeos/multidevice_setup/start_setup_page.html +++ b/chrome/browser/resources/chromeos/multidevice_setup/start_setup_page.html
@@ -86,24 +86,26 @@ </div> <div id="feature-details-container" class="flex"> <div id="feature-details-container-header"> - $i18n{startSetupPageFeatureListHeader} + [[i18n('startSetupPageFeatureListHeader')]] </div> <div class="feature-detail"> <iron-icon icon="multidevice-setup-icons-20:messages"></iron-icon> - <span>$i18nRaw{startSetupPageFeatureListAwm}</span> + <span inner-h-t-m-l=" + [[i18nAdvanced('startSetupPageFeatureListAwm')]]"> + </span> </div> <div class="feature-detail"> <iron-icon icon="multidevice-setup-icons-20:downloads"> </iron-icon> - <span>$i18n{startSetupPageFeatureListInstallApps}</span> + <span>[[i18n('startSetupPageFeatureListInstallApps')]]</span> </div> <div class="feature-detail"> <iron-icon icon="multidevice-setup-icons-20:features"></iron-icon> - <span>$i18n{startSetupPageFeatureListAddFeatures}</span> + <span>[[i18n('startSetupPageFeatureListAddFeatures')]]</span> </div> </div> </div> - <div id="footnote">$i18n{startSetupPageFootnote}</div> + <div id="footnote">[[i18n('startSetupPageFootnote')]]</div> </div> </ui-page> </template>
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb index a3eb685..3e5690e 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_bn.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">bn</translation> <translation id="2714180132046334502">গাঢ় ব্যাকগ্রাউন্ড</translation> <translation id="27349076983469322">হালকা ব্যাকগ্রাউন্ড</translation> +<translation id="3283583562490372694">টিকচিহ্ন সরানো হয়েছে</translation> <translation id="335581015389089642">স্পিচ</translation> <translation id="4004802134384979325">চেক করা</translation> <translation id="4827410568042294688">অনির্বাচিত</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">শব্দ হাইলাইট করার জন্য রং:</translation> <translation id="6837853484260746864">একটি ভয়েস বেছে নিন:</translation> <translation id="7261612856573623172">সিস্টেম টেক্সট টু স্পিচ ভয়েস</translation> +<translation id="7317017974771324508">আংশিকভাবে বেছে নেওয়া হয়েছে</translation> <translation id="7768784765476638775">বাছুন ও শুনুন</translation> <translation id="7914870167134465181">হাইলাইট করা</translation> <translation id="8033827949643255796">নির্বাচিত</translation> <translation id="8324974933005349667">টেক্সট টু স্পিচ সেটিংস ব্যক্তিগতকৃত করুন</translation> +<translation id="8944511129464116546">আংশিকভাবে টিকচিহ্ন দেওয়া হয়েছে</translation> <translation id="992256792861109788">গোলাপী</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb index ca31fde..8aa3aea 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_el.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">el</translation> <translation id="2714180132046334502">Σκούρο φόντο</translation> <translation id="27349076983469322">Ανοιχτόχρωμο φόντο</translation> +<translation id="3283583562490372694">καταργήθηκε η επιλογή του</translation> <translation id="335581015389089642">Ομιλία</translation> <translation id="4004802134384979325">επιλεγμένο</translation> <translation id="4827410568042294688">μη επιλεγμένο</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Χρώμα επισήμανσης λέξεων:</translation> <translation id="6837853484260746864">Επιλογή φωνής:</translation> <translation id="7261612856573623172">Φωνή συστήματος μετατροπής κειμένου σε ομιλία</translation> +<translation id="7317017974771324508">μερικώς επιλεγμένο</translation> <translation id="7768784765476638775">Επιλέξτε για εκφώνηση</translation> <translation id="7914870167134465181">Επισήμανση</translation> <translation id="8033827949643255796">επιλεγμένο</translation> <translation id="8324974933005349667">Εξατομίκευση ρυθμίσεων μετατροπής κειμένου σε ομιλία</translation> +<translation id="8944511129464116546">μερικώς επιλεγμένο</translation> <translation id="992256792861109788">Ροζ</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb index 23f6275..aa5ffab3 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es-419.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">es-419</translation> <translation id="2714180132046334502">Fondo oscuro</translation> <translation id="27349076983469322">Fondo claro</translation> +<translation id="3283583562490372694">se desmarcó</translation> <translation id="335581015389089642">Voz</translation> <translation id="4004802134384979325">seleccionada</translation> <translation id="4827410568042294688">sin seleccionar</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Color para destacar palabras:</translation> <translation id="6837853484260746864">Seleccionar una voz:</translation> <translation id="7261612856573623172">Voz en la función de texto a voz del sistema</translation> +<translation id="7317017974771324508">se seleccionó parcialmente</translation> <translation id="7768784765476638775">Seleccionar para pronunciar</translation> <translation id="7914870167134465181">Destacar</translation> <translation id="8033827949643255796">seleccionados</translation> <translation id="8324974933005349667">Personalizar la configuración de texto a voz</translation> +<translation id="8944511129464116546">se marcó parcialmente</translation> <translation id="992256792861109788">Rosa</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb index f827dce..47179873 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_es.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">es</translation> <translation id="2714180132046334502">Fondo oscuro</translation> <translation id="27349076983469322">Fondo claro</translation> +<translation id="3283583562490372694">desmarcada</translation> <translation id="335581015389089642">Voz</translation> <translation id="4004802134384979325">marcada</translation> <translation id="4827410568042294688">no seleccionado</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Color para destacar palabras:</translation> <translation id="6837853484260746864">Selecciona una voz:</translation> <translation id="7261612856573623172">Nombre de la síntesis de voz del sistema</translation> +<translation id="7317017974771324508">seleccionado parcialmente</translation> <translation id="7768784765476638775">Enunciar Selección</translation> <translation id="7914870167134465181">Destacar</translation> <translation id="8033827949643255796">seleccionados</translation> <translation id="8324974933005349667">Personalizar la configuración de síntesis de voz</translation> +<translation id="8944511129464116546">marcada parcialmente</translation> <translation id="992256792861109788">Rosa</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb index b7e0e66..fe2928e 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_gu.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">gu</translation> <translation id="2714180132046334502">ઘાટું બૅકગ્રાઉન્ડ</translation> <translation id="27349076983469322">આછું બૅકગ્રાઉન્ડ</translation> +<translation id="3283583562490372694">અનચેક કરેલ</translation> <translation id="335581015389089642">ભાષા</translation> <translation id="4004802134384979325">તપાસેલું</translation> <translation id="4827410568042294688">પસંદ ન કરેલ</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">શબ્દ હાઇલાઇટ કરવા માટેનો રંગ:</translation> <translation id="6837853484260746864">વૉઇસ પસંદ કરો:</translation> <translation id="7261612856573623172">સિસ્ટમ ટેક્સ્ટ-ટુ-સ્પીચ વૉઇસ</translation> +<translation id="7317017974771324508">આંશિકરૂપે પસંદ કરેલ</translation> <translation id="7768784765476638775">સાંભળવા માટે પસંદ કરો</translation> <translation id="7914870167134465181">હાઇલાઇટિંગ</translation> <translation id="8033827949643255796">પસંદ કરેલ</translation> <translation id="8324974933005349667">'ટેક્સ્ટ-ટૂ-સ્પીચ' સેટિંગને વ્યક્તિગત કરો</translation> +<translation id="8944511129464116546">આંશિક રૂપે ચેક કરેલ</translation> <translation id="992256792861109788">ગુલાબી</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb index 33397b6..3daafb5 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ja.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">ja</translation> <translation id="2714180132046334502">暗い背景</translation> <translation id="27349076983469322">明るい背景</translation> +<translation id="3283583562490372694">オフ</translation> <translation id="335581015389089642">スピーチ</translation> <translation id="4004802134384979325">オン</translation> <translation id="4827410568042294688">選択していません</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">次の色で単語をハイライト表示:</translation> <translation id="6837853484260746864">音声を選択:</translation> <translation id="7261612856573623172">システムのテキスト読み上げの音声</translation> +<translation id="7317017974771324508">一部選択</translation> <translation id="7768784765476638775">選択して読み上げ</translation> <translation id="7914870167134465181">強調表示</translation> <translation id="8033827949643255796">選択しました</translation> <translation id="8324974933005349667">テキスト読み上げの設定をカスタマイズする</translation> +<translation id="8944511129464116546">一部オン</translation> <translation id="992256792861109788">ピンク</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb index 8ef2cca..3eb1ea3 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ko.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">ko</translation> <translation id="2714180132046334502">어두운 배경</translation> <translation id="27349076983469322">밝은 배경</translation> +<translation id="3283583562490372694">선택 해제됨</translation> <translation id="335581015389089642">음성</translation> <translation id="4004802134384979325">선택됨</translation> <translation id="4827410568042294688">선택되지 않음</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">단어 하이라이트 색상:</translation> <translation id="6837853484260746864">음성 선택:</translation> <translation id="7261612856573623172">시스템 TTS(텍스트 음성 변환) 음성</translation> +<translation id="7317017974771324508">일부만 선택됨</translation> <translation id="7768784765476638775">텍스트 읽어주기</translation> <translation id="7914870167134465181">강조표시</translation> <translation id="8033827949643255796">선택됨</translation> <translation id="8324974933005349667">TTS(텍스트 음성 변환) 설정 맞춤설정</translation> +<translation id="8944511129464116546">일부만 확인됨</translation> <translation id="992256792861109788">분홍색</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb index 6c8f0d880..b9759f7 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_lv.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">lv</translation> <translation id="2714180132046334502">Tumšs fons</translation> <translation id="27349076983469322">Gaišs fons</translation> +<translation id="3283583562490372694">nav atzīmēts</translation> <translation id="335581015389089642">Runa</translation> <translation id="4004802134384979325">atzīmēts</translation> <translation id="4827410568042294688">nav atlasīts</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Krāsa vārdu izcelšanai:</translation> <translation id="6837853484260746864">Atlasiet balsi:</translation> <translation id="7261612856573623172">Sistēmas Teksta pārvēršanas runā iestatījumi</translation> +<translation id="7317017974771324508">daļēji atlasīts</translation> <translation id="7768784765476638775">Atlasīt, lai izrunātu</translation> <translation id="7914870167134465181">Iezīmēšana</translation> <translation id="8033827949643255796">atlasīti</translation> <translation id="8324974933005349667">Personalizēt pakalpojuma Teksta pārvēršana runā iestatījumus</translation> +<translation id="8944511129464116546">daļēji atzīmēts</translation> <translation id="992256792861109788">Rozā</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb index d76517a1..045bdbcf 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ml.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">ml</translation> <translation id="2714180132046334502">ഇരുണ്ട പശ്ചാത്തലം</translation> <translation id="27349076983469322">ലൈറ്റ് പശ്ചാത്തലം</translation> +<translation id="3283583562490372694">അണ്ചെക്ക് ചെയ്തു</translation> <translation id="335581015389089642">സംഭാഷണം</translation> <translation id="4004802134384979325">ചെക്കുചെയ്തു</translation> <translation id="4827410568042294688">തിരഞ്ഞെടുത്തത് ഒഴിവാക്കി</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">പദ ഹൈലൈറ്റുകളുടെ നിറം:</translation> <translation id="6837853484260746864">ഒരു ശബ്ദം തിരഞ്ഞെടുക്കുക:</translation> <translation id="7261612856573623172">സിസ്റ്റം ടെക്സ്റ്റ്-ടു-സ്പീച്ച് ശബ്ദം</translation> +<translation id="7317017974771324508">ഭാഗികമായി തിരഞ്ഞെടുത്തു</translation> <translation id="7768784765476638775">വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക</translation> <translation id="7914870167134465181">ഹൈലൈറ്റ് ചെയ്യുന്നു</translation> <translation id="8033827949643255796">തിരഞ്ഞെടുത്തു</translation> <translation id="8324974933005349667">ടെക്സ്റ്റ്-ടു-സ്പീച്ച് ക്രമീകരണം വ്യക്തിപരമാക്കുക</translation> +<translation id="8944511129464116546">ഭാഗികമായി ചെക്ക് മാർക്കിട്ടു</translation> <translation id="992256792861109788">പിങ്ക്</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb index 1afb13c..043f469 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_mr.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">en</translation> <translation id="2714180132046334502">गडद बॅकग्राउंड</translation> <translation id="27349076983469322">फिकट बॅकग्राउंड</translation> +<translation id="3283583562490372694">चौकटीतली खूण काढून टाकली</translation> <translation id="335581015389089642">भाषण</translation> <translation id="4004802134384979325">चेक केलेले</translation> <translation id="4827410568042294688">न निवडलेले</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">शब्द हायलाइट करण्यासाठी रंग:</translation> <translation id="6837853484260746864">आवाज निवडा:</translation> <translation id="7261612856573623172">सिस्टम टेक्स्ट टू स्पीच व्हॉइस</translation> +<translation id="7317017974771324508">अंशत: निवडलेले</translation> <translation id="7768784765476638775">बोलण्यासाठी निवडा</translation> <translation id="7914870167134465181">हायलाइट करणे</translation> <translation id="8033827949643255796">निवडलेले</translation> <translation id="8324974933005349667">टेक्स्ट टू स्पीच सेटिंग्ज पर्सनलाइझ करा</translation> +<translation id="8944511129464116546">अंशत: तपासलेले</translation> <translation id="992256792861109788">गुलाबी</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb index ff8e1ba1..b344d688 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_no.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">no</translation> <translation id="2714180132046334502">Mørk bakgrunn</translation> <translation id="27349076983469322">Lys bakgrunn</translation> +<translation id="3283583562490372694">ikke avmerket</translation> <translation id="335581015389089642">Tale</translation> <translation id="4004802134384979325">merket av</translation> <translation id="4827410568042294688">fjernet fra utvalget</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Farge for fremheving av ord:</translation> <translation id="6837853484260746864">Velg en stemme:</translation> <translation id="7261612856573623172">Systemstemme for tekst til tale</translation> +<translation id="7317017974771324508">delvis valgt</translation> <translation id="7768784765476638775">Tekstopplesing</translation> <translation id="7914870167134465181">Fremheving</translation> <translation id="8033827949643255796">valgt</translation> <translation id="8324974933005349667">Gi innstillingene for tekst til tale et personlig preg</translation> +<translation id="8944511129464116546">delvis avmerket</translation> <translation id="992256792861109788">Rosa</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb index 25e1bc0..9d0c07f 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_pt-PT.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">pt-PT</translation> <translation id="2714180132046334502">Fundo escuro</translation> <translation id="27349076983469322">Fundo claro</translation> +<translation id="3283583562490372694">desselecionada</translation> <translation id="335581015389089642">Voz</translation> <translation id="4004802134384979325">marcada</translation> <translation id="4827410568042294688">não selecionado</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Cor para os realces das palavras:</translation> <translation id="6837853484260746864">Selecionar uma voz:</translation> <translation id="7261612856573623172">Voz da síntese de voz do sistema</translation> +<translation id="7317017974771324508">parcialmente selecionado</translation> <translation id="7768784765476638775">Selecionar para ativar voz</translation> <translation id="7914870167134465181">Realce</translation> <translation id="8033827949643255796">selecionado</translation> <translation id="8324974933005349667">Personalizar as definições da síntese de voz</translation> +<translation id="8944511129464116546">parcialmente selecionada</translation> <translation id="992256792861109788">Rosa</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb index 4da15a6..5df66696 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_ro.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">ro</translation> <translation id="2714180132046334502">Fundal întunecat</translation> <translation id="27349076983469322">Fundal deschis</translation> +<translation id="3283583562490372694">debifată</translation> <translation id="335581015389089642">Voce</translation> <translation id="4004802134384979325">bifată</translation> <translation id="4827410568042294688">neselectat</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">Culoare pentru evidențierea cuvintelor:</translation> <translation id="6837853484260746864">Selectează o voce:</translation> <translation id="7261612856573623172">Vocea sistemului de redare vocală a textului</translation> +<translation id="7317017974771324508">selectat parțial</translation> <translation id="7768784765476638775">Selectează și ascultă</translation> <translation id="7914870167134465181">Evidențiere</translation> <translation id="8033827949643255796">selectate</translation> <translation id="8324974933005349667">Personalizează setările redării vocale a textului</translation> +<translation id="8944511129464116546">bifat parțial</translation> <translation id="992256792861109788">Roz</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb index b6ceaea..c4e923b 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_te.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">en</translation> <translation id="2714180132046334502">ముదురు నేపథ్యం</translation> <translation id="27349076983469322">తేలికపాటి నేపథ్యం</translation> +<translation id="3283583562490372694">ఎంపికను తీసివేసారు</translation> <translation id="335581015389089642">ప్రసంగం</translation> <translation id="4004802134384979325">ఎంచుకోబడింది</translation> <translation id="4827410568042294688">ఎంపిక తీసివేయబడింది</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">పదం హైలైట్ల కోసం రంగు:</translation> <translation id="6837853484260746864">వాయిస్ని ఎంచుకోండి:</translation> <translation id="7261612856573623172">వచనం నుండి ప్రసంగం సిస్టమ్ వాయిస్</translation> +<translation id="7317017974771324508">పాక్షికంగా ఎంచుకున్నారు</translation> <translation id="7768784765476638775">వినడానికి ఎంచుకోండి</translation> <translation id="7914870167134465181">హైలైటింగ్</translation> <translation id="8033827949643255796">ఎంచుకోబడ్డాయి</translation> <translation id="8324974933005349667">వచనం నుండి ప్రసంగం సెట్టింగ్లను వ్యక్తిగతీకరించండి</translation> +<translation id="8944511129464116546">పాక్షికంగా ఎంచుకున్నారు</translation> <translation id="992256792861109788">గులాబి రంగు</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb index 576b64b..c8729d9 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-CN.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">zh-CN</translation> <translation id="2714180132046334502">深色背景</translation> <translation id="27349076983469322">浅色背景</translation> +<translation id="3283583562490372694">未选中</translation> <translation id="335581015389089642">语音</translation> <translation id="4004802134384979325">已选中</translation> <translation id="4827410568042294688">已取消选中</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">字词的突出显示颜色:</translation> <translation id="6837853484260746864">请选择一种声音:</translation> <translation id="7261612856573623172">系统默认文字转语音声音</translation> +<translation id="7317017974771324508">部分选定</translation> <translation id="7768784765476638775">随选朗读</translation> <translation id="7914870167134465181">突出显示</translation> <translation id="8033827949643255796">已选中</translation> <translation id="8324974933005349667">个性化文字转语音设置</translation> +<translation id="8944511129464116546">部分选中</translation> <translation id="992256792861109788">粉色</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb index 96cb5e9..6c7ffda 100644 --- a/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb +++ b/chrome/browser/resources/chromeos/select_to_speak/strings/select_to_speak_strings_zh-TW.xtb
@@ -9,6 +9,7 @@ <translation id="2089387485033699258">en</translation> <translation id="2714180132046334502">深色背景</translation> <translation id="27349076983469322">淺色背景</translation> +<translation id="3283583562490372694">未勾選</translation> <translation id="335581015389089642">語音</translation> <translation id="4004802134384979325">已勾選</translation> <translation id="4827410568042294688">已取消選取</translation> @@ -17,9 +18,11 @@ <translation id="6475604559827479857">文字醒目顯示顏色:</translation> <translation id="6837853484260746864">選擇語音:</translation> <translation id="7261612856573623172">系統預設文字轉語音聲音</translation> +<translation id="7317017974771324508">部分已選取</translation> <translation id="7768784765476638775">隨選朗讀</translation> <translation id="7914870167134465181">醒目顯示</translation> <translation id="8033827949643255796">已選取</translation> <translation id="8324974933005349667">個人化文字轉語音設定</translation> +<translation id="8944511129464116546">部分已勾選</translation> <translation id="992256792861109788">粉紅色</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/browser/resources/chromeos/switch_access/automation_manager.js b/chrome/browser/resources/chromeos/switch_access/automation_manager.js index 3efcb360..c8bd64c 100644 --- a/chrome/browser/resources/chromeos/switch_access/automation_manager.js +++ b/chrome/browser/resources/chromeos/switch_access/automation_manager.js
@@ -5,53 +5,499 @@ /** * Class to manage interactions with the accessibility tree, including moving * to and selecting nodes. - * - * @constructor - * @param {!chrome.automation.AutomationNode} desktop */ -function AutomationManager(desktop) { +class AutomationManager { /** - * Currently highlighted node. + * @constructor + * @param {!chrome.automation.AutomationNode} desktop + */ + constructor(desktop) { + /** + * Handles communication with and navigation within the context menu. + */ + this.contextMenuManager_ = new ContextMenuManager(this, desktop); + + /** + * + * The desktop node. + * + * @private {!chrome.automation.AutomationNode} + */ + this.desktop_ = desktop; + + /** + * The currently highlighted node. + * + * @private {!chrome.automation.AutomationNode} + */ + this.node_ = desktop; + + /** + * The root of the subtree that the user is navigating through. + * + * @private {!chrome.automation.AutomationNode} + */ + this.scope_ = desktop; + + /** + * A stack of past scopes. Allows user to traverse back to previous groups + * after selecting one or more groups. The most recent group is at the end + * of the array. + * + * @private {Array<!chrome.automation.AutomationNode>} + */ + this.scopeStack_ = []; + + /** + * Keeps track of when we're visiting the current scope as an actionable + * node. + * @private {boolean} + */ + this.visitingScopeAsActionable_ = false; + + this.init_(); + } + + /** + * Open the context menu for the currently highlighted node. + */ + enterContextMenu() { + // If we're currently visiting the context menu, this command should select + // the highlighted element. + if (this.contextMenuManager_.selectCurrentNode()) + return; + + this.contextMenuManager_.enter(this.getRelevantMenuActions_()); + } + + /** + * Find the previous interesting node and update |this.node_|. If there is no + * previous node, |this.node_| will be set to the youngest descendant in the + * SwitchAccess scope tree to loop again. + */ + moveBackward() { + if (this.contextMenuManager_.moveBackward()) + return; + + this.startAtValidNode_(); + + let treeWalker = new AutomationTreeWalker( + this.node_, constants.Dir.BACKWARD, + SwitchAccessPredicate.restrictions(this.scope_)); + + // Special case: Scope is actionable + if (this.node_ === this.scope_ && this.visitingScopeAsActionable_) { + this.visitingScopeAsActionable_ = false; + this.setCurrentNode_(this.node_); + return; + } + + let node = treeWalker.next().node; + + // Special case: Scope is actionable + if (node === this.scope_ && SwitchAccessPredicate.isActionable(node)) { + this.showScopeAsActionable_(); + return; + } + + // If treeWalker returns undefined, that means we're at the end of the tree + // and we should start over. + if (!node) + node = this.youngestDescendant_(this.scope_); + + this.setCurrentNode_(node); + } + + /** + * Find the next interesting node, and update |this.node_|. If there is no + * next node, |this.node_| will be set equal to |this.scope_| to loop again. + */ + moveForward() { + if (this.contextMenuManager_.moveForward()) + return; + + this.startAtValidNode_(); + + let treeWalker = new AutomationTreeWalker( + this.node_, constants.Dir.FORWARD, + SwitchAccessPredicate.restrictions(this.scope_)); + + // Special case: Scope is actionable. + if (this.node_ === this.scope_ && + SwitchAccessPredicate.isActionable(this.node_) && + !this.visitingScopeAsActionable_) { + this.showScopeAsActionable_(); + return; + } + this.visitingScopeAsActionable_ = false; + + let node = treeWalker.next().node; + // If treeWalker returns undefined, that means we're at the end of the tree + // and we should start over. + if (!node) + node = this.scope_; + + this.setCurrentNode_(node); + } + + /** + * Perform the default action for the currently highlighted node. If the node + * is the current scope, go back to the previous scope. If the node is a group + * other than the current scope, go into that scope. If the node is + * interesting, perform the default action on it. + */ + selectCurrentNode() { + if (this.contextMenuManager_.selectCurrentNode()) + return; + + if (!this.node_.role) + return; + + if (this.node_ === this.scope_) { + // If we're visiting the scope as actionable, perform the default action. + if (this.visitingScopeAsActionable_) { + this.node_.doDefault(); + return; + } + + // Don't let user select the top-level root node (i.e., the desktop node). + if (this.scopeStack_.length === 0) + return; + + // Find a previous scope that is still valid. The stack here always has + // at least one valid scope (i.e., the desktop node). + do { + this.scope_ = this.scopeStack_.pop(); + } while (!this.scope_.role && this.scopeStack_.length > 0); + + this.updateFocusRing_(); + return; + } + + if (SwitchAccessPredicate.isGroup(this.node_, this.scope_)) { + this.scopeStack_.push(this.scope_); + this.scope_ = this.node_; + this.moveForward(); + return; + } + + this.node_.doDefault(); + } + + // ----------------------Private Methods--------------------- + + /** + * Create a new scope stack and set the current scope for |node|. * - * @private {!chrome.automation.AutomationNode} + * @param {!chrome.automation.AutomationNode} node + * @private */ - this.node_ = desktop; + buildScopeStack_(node) { + // Create list of |node|'s ancestors, with highest level ancestor at the + // end. + let ancestorList = []; + while (node.parent) { + ancestorList.push(node.parent); + node = node.parent; + } + + // Starting with desktop as the scope, if an ancestor is a group, set it to + // the new scope and push the old scope onto the scope stack. + this.scopeStack_ = []; + this.scope_ = this.desktop_; + while (ancestorList.length > 0) { + let ancestor = ancestorList.pop(); + if (ancestor.role === chrome.automation.RoleType.DESKTOP) + continue; + if (SwitchAccessPredicate.isGroup(ancestor, this.scope_)) { + this.scopeStack_.push(this.scope_); + this.scope_ = ancestor; + } + } + } /** - * The root of the subtree that the user is navigating through. + * Determines which menu actions are relevant, given the current node and + * scope. + * @private + */ + getRelevantMenuActions_() { + // TODO(crbug/881080): determine relevant actions programmatically. + let actions = + [ContextMenuManager.Action.CLICK, ContextMenuManager.Action.OPTIONS]; + return actions; + } + + /** + * When an interesting element gains focus on the page, move to it. If an + * element gains focus but is not interesting, move to the next interesting + * node after it. * - * @private {!chrome.automation.AutomationNode} + * @param {!chrome.automation.AutomationEvent} event + * @private */ - this.scope_ = desktop; + handleFocusChange_(event) { + if (this.node_ === event.target) + return; + + // Rebuild scope stack and set scope for focused node. + this.buildScopeStack_(event.target); + + // Move to focused node. + this.node_ = event.target; + + // In case the node that gained focus is not a subtreeLeaf. + if (SwitchAccessPredicate.isSubtreeLeaf(this.node_, this.scope_)) + this.updateFocusRing_(); + else + this.moveForward(); + } /** - * The desktop node. + * When a node is removed from the page, move to a new valid node. * - * @private {!chrome.automation.AutomationNode} + * @param {!chrome.automation.TreeChange} treeChange + * @private */ - this.desktop_ = desktop; + handleNodeRemoved_(treeChange) { + // TODO(elichtenberg): Only listen to NODE_REMOVED callbacks. Don't need + // any others. + if (treeChange.type !== chrome.automation.TreeChangeType.NODE_REMOVED) + return; + + // TODO(elichtenberg): Currently not getting NODE_REMOVED event when whole + // tree is deleted. Once fixed, can delete this. Should only need to check + // if target is current node. + let removedByRWA = + treeChange.target.role === chrome.automation.RoleType.ROOT_WEB_AREA && + !this.node_.role; + + if (!removedByRWA && treeChange.target !== this.node_) + return; + + chrome.accessibilityPrivate.setFocusRing([]); + + // Current node not invalid until after treeChange callback, so move to + // valid node after callback. Delay added to prevent moving to another + // node about to be made invalid. If already at a valid node (e.g., user + // moves to it or focus changes to it), won't need to move to a new node. + window.setTimeout(function() { + if (!this.node_.role) + this.moveForward(); + }.bind(this), 100); + } /** - * A stack of past scopes. Allows user to traverse back to previous groups - * after selecting one or more groups. The most recent group is at the end - * of the array. + * @private + */ + init_() { + this.desktop_.addEventListener( + chrome.automation.EventType.FOCUS, this.handleFocusChange_.bind(this), + false); + + // TODO(elichtenberg): Use a more specific filter than ALL_TREE_CHANGES. + chrome.automation.addTreeChangeObserver( + chrome.automation.TreeChangeObserverFilter.ALL_TREE_CHANGES, + this.handleNodeRemoved_.bind(this)); + } + + /** + * Set |this.node_| to |node|, and update its appearance onscreen. * - * @private {Array<!chrome.automation.AutomationNode>} + * @param {!chrome.automation.AutomationNode} node */ - this.scopeStack_ = []; + setCurrentNode_(node) { + this.node_ = node; + this.updateFocusRing_(); + } /** - * Handles communication with and navigation within the context menu. + * Show the current scope as an actionable item. */ - this.contextMenuManager_ = new ContextMenuManager(this, desktop); + showScopeAsActionable_() { + this.node_ = this.scope_; + this.visitingScopeAsActionable_ = true; + + this.updateFocusRing_(AutomationManager.Color.LEAF); + } /** - * Keeps track of when we're visiting the current scope as an actionable node. - * @private {boolean} + * Checks if this.node_ is valid. If so, do nothing. + * + * If this.node_ is not valid, set this.node_ to a valid scope. Will check the + * current scope and past scopes until a valid scope is found. this.node_ + * is set to that valid scope. + * + * @private */ - this.visitingScopeAsActionable_ = false; + startAtValidNode_() { + if (this.node_.role) + return; - this.init_(); + // Current node is invalid, but current scope is still valid, so set node + // to the current scope. + if (this.scope_.role) + this.node_ = this.scope_; + + // Current node and current scope are invalid, so set both to a valid scope + // from the scope stack. The stack here always has at least one valid scope + // (i.e., the desktop node). + while (!this.node_.role && this.scopeStack_.length > 0) { + this.node_ = this.scopeStack_.pop(); + this.scope_ = this.node_; + } + } + + /** + * Set the focus ring for the current node and determine the color for it. + * + * @param {AutomationManager.Color=} opt_color + * @private + */ + updateFocusRing_(opt_color) { + let color; + if (this.node_ === this.scope_) + color = AutomationManager.Color.SCOPE; + else if (SwitchAccessPredicate.isGroup(this.node_, this.scope_)) + color = AutomationManager.Color.GROUP; + else + color = AutomationManager.Color.LEAF; + + color = opt_color || color; + chrome.accessibilityPrivate.setFocusRing([this.node_.location], color); + } + + /** + * Get the youngest descendant of |node|, if it has one within the current + * scope. + * + * @param {!chrome.automation.AutomationNode} node + * @return {!chrome.automation.AutomationNode} + * @private + */ + youngestDescendant_(node) { + let leaf = SwitchAccessPredicate.leaf(this.scope_); + + while (node.lastChild && !leaf(node)) + node = node.lastChild; + + return node; + } + + // ----------------------Debugging Methods------------------------ + + /** + * Prints a debug version of the accessibility tree with annotations of + * various SwitchAccess properties. + * + * To use, got to the console for SwitchAccess and run + * switchAccess.automationManager_.printDebugSwitchAccessTree() + * + * @param {AutomationManager.DisplayMode} opt_displayMode - an optional + * parameter that controls which nodes are printed. Default is + * INTERESTING_NODE. + * @return {SwitchAccessDebugNode|undefined} + */ + printDebugSwitchAccessTree( + opt_displayMode = AutomationManager.DisplayMode.INTERESTING_NODE) { + let allNodes = opt_displayMode === AutomationManager.DisplayMode.ALL; + let debugRoot = + AutomationManager.switchAccessDebugTree_(this.desktop_, allNodes); + if (debugRoot) + AutomationManager.printDebugNode_(debugRoot, 0, opt_displayMode); + return debugRoot; + } + /** + * creates a tree for debugging the SwitchAccess predicates, rooted at + * node, based on the Accessibility tree. + * + * @param {!chrome.automation.AutomationNode} node + * @param {boolean} allNodes + * @return {SwitchAccessDebugNode|undefined} + * @private + */ + static switchAccessDebugTree_(node, allNodes) { + let debugNode = this.createAnnotatedDebugNode_(node, allNodes); + if (!debugNode) + return; + + for (let child of node.children) { + let dChild = this.switchAccessDebugTree_(child, allNodes); + if (dChild) + debugNode.children.push(dChild); + } + return debugNode; + } + + /** + * Creates a debug node from the given automation node, with annotations of + * various SwitchAccess properties. + * + * @param {!chrome.automation.AutomationNode} node + * @param {boolean} allNodes + * @return {SwitchAccessDebugNode|undefined} + * @private + */ + static createAnnotatedDebugNode_(node, allNodes) { + if (!allNodes && !SwitchAccessPredicate.isInterestingSubtree(node)) + return; + + let debugNode = {}; + if (node.role) + debugNode.role = node.role; + if (node.name) + debugNode.name = node.name; + + debugNode.isActionable = SwitchAccessPredicate.isActionable(node); + debugNode.isGroup = SwitchAccessPredicate.isGroup(node, node); + debugNode.isInterestingSubtree = + SwitchAccessPredicate.isInterestingSubtree(node); + + debugNode.children = []; + debugNode.baseNode = node; + return debugNode; + } + + /** + * Prints the debug subtree rooted at |node| in pre-order. + * + * @param {SwitchAccessDebugNode} node + * @param {!number} indent + * @param {AutomationManager.DisplayMode} displayMode + * @private + */ + static printDebugNode_(node, indent, displayMode) { + if (!node) + return; + + let result = ' '.repeat(indent); + if (node.role) + result += 'role:' + node.role + ' '; + if (node.name) + result += 'name:' + node.name + ' '; + result += 'isActionable? ' + node.isActionable; + result += ', isGroup? ' + node.isGroup; + result += ', isInterestingSubtree? ' + node.isInterestingSubtree; + + switch (displayMode) { + case AutomationManager.DisplayMode.ALL: + console.log(result); + break; + case AutomationManager.DisplayMode.INTERESTING_SUBTREE: + if (node.isInterestingSubtree) + console.log(result); + break; + case AutomationManager.DisplayMode.INTERESTING_NODE: + default: + if (node.isActionable || node.isGroup) + console.log(result); + break; + } + + let children = node.children || []; + for (let child of children) + this.printDebugNode_(child, indent + 2, displayMode); + } } /** @@ -88,474 +534,4 @@ * children: Array<SwitchAccessDebugNode>, * baseNode: chrome.automation.AutomationNode}} */ -var SwitchAccessDebugNode; - -AutomationManager.prototype = { - /** - * @private - */ - init_: function() { - this.desktop_.addEventListener( - chrome.automation.EventType.FOCUS, this.handleFocusChange_.bind(this), - false); - - // TODO(elichtenberg): Eventually use a more specific filter than - // ALL_TREE_CHANGES. - chrome.automation.addTreeChangeObserver( - chrome.automation.TreeChangeObserverFilter.ALL_TREE_CHANGES, - this.handleNodeRemoved_.bind(this)); - }, - - /** - * When an interesting element gains focus on the page, move to it. If an - * element gains focus but is not interesting, move to the next interesting - * node after it. - * - * @param {!chrome.automation.AutomationEvent} event - * @private - */ - handleFocusChange_: function(event) { - if (this.node_ === event.target) - return; - - // Rebuild scope stack and set scope for focused node. - this.buildScopeStack_(event.target); - - // Move to focused node. - this.node_ = event.target; - - // In case the node that gained focus is not a subtreeLeaf. - if (SwitchAccessPredicate.isSubtreeLeaf(this.node_, this.scope_)) - this.updateFocusRing_(); - else - this.moveForward(); - }, - - /** - * Create a new scope stack and set the current scope for |node|. - * - * @param {!chrome.automation.AutomationNode} node - * @private - */ - buildScopeStack_: function(node) { - // Create list of |node|'s ancestors, with highest level ancestor at the - // end. - let ancestorList = []; - while (node.parent) { - ancestorList.push(node.parent); - node = node.parent; - } - - // Starting with desktop as the scope, if an ancestor is a group, set it to - // the new scope and push the old scope onto the scope stack. - this.scopeStack_ = []; - this.scope_ = this.desktop_; - while (ancestorList.length > 0) { - let ancestor = ancestorList.pop(); - if (ancestor.role === chrome.automation.RoleType.DESKTOP) - continue; - if (SwitchAccessPredicate.isGroup(ancestor, this.scope_)) { - this.scopeStack_.push(this.scope_); - this.scope_ = ancestor; - } - } - }, - - /** - * When a node is removed from the page, move to a new valid node. - * - * @param {!chrome.automation.TreeChange} treeChange - * @private - */ - handleNodeRemoved_: function(treeChange) { - // TODO(elichtenberg): Only listen to NODE_REMOVED callbacks. Don't need - // any others. - if (treeChange.type !== chrome.automation.TreeChangeType.NODE_REMOVED) - return; - - // TODO(elichtenberg): Currently not getting NODE_REMOVED event when whole - // tree is deleted. Once fixed, can delete this. Should only need to check - // if target is current node. - let removedByRWA = - treeChange.target.role === chrome.automation.RoleType.ROOT_WEB_AREA && - !this.node_.role; - - if (!removedByRWA && treeChange.target !== this.node_) - return; - - chrome.accessibilityPrivate.setFocusRing([]); - - // Current node not invalid until after treeChange callback, so move to - // valid node after callback. Delay added to prevent moving to another - // node about to be made invalid. If already at a valid node (e.g., user - // moves to it or focus changes to it), won't need to move to a new node. - window.setTimeout(function() { - if (!this.node_.role) - this.moveForward(); - }.bind(this), 100); - }, - - /** - * Find the next interesting node, and update |this.node_|. If there is no - * next node, |this.node_| will be set equal to |this.scope_| to loop again. - */ - moveForward: function() { - if (this.contextMenuManager_.inContextMenu) { - this.contextMenuManager_.moveForward(); - return; - } - - // If node is invalid, set node to last valid scope. - this.startAtValidNode_(); - - let treeWalker = new AutomationTreeWalker( - this.node_, constants.Dir.FORWARD, - SwitchAccessPredicate.restrictions(this.scope_)); - - // Special case: Scope is actionable. - if (this.node_ === this.scope_ && - SwitchAccessPredicate.isActionable(this.node_) && - !this.visitingScopeAsActionable_) { - this.showScopeAsActionable_(); - return; - } - this.visitingScopeAsActionable_ = false; - - let node = treeWalker.next().node; - // If treeWalker returns undefined, that means we're at the end of the tree - // and we should start over. - if (!node) - node = this.scope_; - - this.setCurrentNode_(node); - }, - - /** - * Find the previous interesting node and update |this.node_|. If there is no - * previous node, |this.node_| will be set to the youngest descendant in the - * SwitchAccess scope tree to loop again. - */ - moveBackward: function() { - if (this.contextMenuManager_.inContextMenu) { - this.contextMenuManager_.moveBackward(); - return; - } - - // If node is invalid, set node to last valid scope. - this.startAtValidNode_(); - - let treeWalker = new AutomationTreeWalker( - this.node_, constants.Dir.BACKWARD, - SwitchAccessPredicate.restrictions(this.scope_)); - - // Special case: Scope is actionable - if (this.node_ === this.scope_ && this.visitingScopeAsActionable_) { - this.visitingScopeAsActionable_ = false; - this.setCurrentNode_(this.node_); - return; - } - - let node = treeWalker.next().node; - - // Special case: Scope is actionable - if (node === this.scope_ && SwitchAccessPredicate.isActionable(node)) { - this.showScopeAsActionable_(); - return; - } - - // If treeWalker returns undefined, that means we're at the end of the tree - // and we should start over. - if (!node) - node = this.youngestDescendant_(this.scope_); - - this.setCurrentNode_(node); - }, - - /** - * Set |this.node_| to |node|, and update its appearance onscreen. - * - * @param {!chrome.automation.AutomationNode} node - */ - setCurrentNode_: function(node) { - this.node_ = node; - this.updateFocusRing_(); - }, - - /** - * Show the current scope as an actionable item. - */ - showScopeAsActionable_: function() { - this.node_ = this.scope_; - this.visitingScopeAsActionable_ = true; - - this.updateFocusRing_(AutomationManager.Color.LEAF); - }, - - /** - * Open the context menu for the currently highlighted node. - */ - enterContextMenu: function() { - // If we're currently visiting the context menu, this command should select - // the highlighted element. - if (this.contextMenuManager_.inContextMenu) { - this.contextMenuManager_.selectCurrentNode(); - return; - } - // TODO(crbug/881080): determine relevant actions programmatically. - let actions = - [ContextMenuManager.Action.CLICK, ContextMenuManager.Action.OPTIONS]; - - this.contextMenuManager_.enter(actions); - }, - - /** - * Perform the default action for the currently highlighted node. If the node - * is the current scope, go back to the previous scope. If the node is a group - * other than the current scope, go into that scope. If the node is - * interesting, perform the default action on it. - */ - selectCurrentNode: function() { - if (this.contextMenuManager_.inContextMenu) { - this.contextMenuManager_.selectCurrentNode(); - return; - } - - if (!this.node_.role) - return; - - if (this.node_ === this.scope_) { - // If we're visiting the scope as actionable, perform the default action. - if (this.visitingScopeAsActionable_) { - this.node_.doDefault(); - return; - } - - // Don't let user select the top-level root node (i.e., the desktop node). - if (this.scopeStack_.length === 0) - return; - - // Find a previous scope that is still valid. The stack here always has - // at least one valid scope (i.e., the desktop node). - do { - this.scope_ = this.scopeStack_.pop(); - } while (!this.scope_.role && this.scopeStack_.length > 0); - - this.updateFocusRing_(); - return; - } - - if (SwitchAccessPredicate.isGroup(this.node_, this.scope_)) { - this.scopeStack_.push(this.scope_); - this.scope_ = this.node_; - this.moveForward(); - return; - } - - this.node_.doDefault(); - }, - - /** - * Set the focus ring for the current node and determine the color for it. - * - * @param {AutomationManager.Color=} opt_color - * @private - */ - updateFocusRing_: function(opt_color) { - let color; - if (this.node_ === this.scope_) - color = AutomationManager.Color.SCOPE; - else if (SwitchAccessPredicate.isGroup(this.node_, this.scope_)) - color = AutomationManager.Color.GROUP; - else - color = AutomationManager.Color.LEAF; - - color = opt_color || color; - chrome.accessibilityPrivate.setFocusRing([this.node_.location], color); - }, - - /** - * Checks if this.node_ is valid. If so, do nothing. - * - * If this.node_ is not valid, set this.node_ to a valid scope. Will check the - * current scope and past scopes until a valid scope is found. this.node_ - * is set to that valid scope. - * - * @private - */ - startAtValidNode_: function() { - if (this.node_.role) - return; - - // Current node is invalid, but current scope is still valid, so set node - // to the current scope. - if (this.scope_.role) - this.node_ = this.scope_; - - // Current node and current scope are invalid, so set both to a valid scope - // from the scope stack. The stack here always has at least one valid scope - // (i.e., the desktop node). - while (!this.node_.role && this.scopeStack_.length > 0) { - this.node_ = this.scopeStack_.pop(); - this.scope_ = this.node_; - } - }, - - // TODO(elichtenberg): Move print functions to a custom logger class. Only - // log when debuggingEnabled is true. - /** - * Print out details about a node. - * - * @param {chrome.automation.AutomationNode} node - * @private - */ - printNode_: function(node) { - if (node) { - console.log('Name = ' + node.name); - console.log('Role = ' + node.role); - console.log('Root role = ' + node.root.role); - if (!node.parent) - console.log('At index ' + node.indexInParent + ', has no parent'); - else { - let numSiblings = node.parent.children.length; - console.log( - 'At index ' + node.indexInParent + ', there are ' + numSiblings + - ' siblings'); - } - console.log('Has ' + node.children.length + ' children'); - } else { - console.log('Node is null'); - } - console.log(node); - console.log('\n'); - }, - - /** - * Get the youngest descendant of |node|, if it has one within the current - * scope. - * - * @param {!chrome.automation.AutomationNode} node - * @return {!chrome.automation.AutomationNode} - * @private - */ - youngestDescendant_: function(node) { - let leaf = SwitchAccessPredicate.leaf(this.scope_); - - while (node.lastChild && !leaf(node)) - node = node.lastChild; - - return node; - }, - - /** - * Prints a debug version of the accessibility tree with annotations of - * various SwitchAccess properties. - * - * To use, got to the console for SwitchAccess and run - * switchAccess.automationManager_.printDebugSwitchAccessTree() - * - * @param {AutomationManager.DisplayMode=} opt_displayMode - an optional - * parameter that controls which nodes are printed. Default is - * INTERESTING_NODE. - * @return {SwitchAccessDebugNode|undefined} - */ - printDebugSwitchAccessTree: function(opt_displayMode) { - let displayMode = - opt_displayMode || AutomationManager.DisplayMode.INTERESTING_NODE; - let allNodes = displayMode === AutomationManager.DisplayMode.ALL; - let debugRoot = this.switchAccessDebugTree_(this.desktop_, allNodes); - if (debugRoot) - this.printDebugNode_(debugRoot, 0, displayMode); - return debugRoot; - }, - /** - * creates a tree for debugging the SwitchAccess predicates, rooted at - * node, based on the Accessibility tree. - * - * @param {!chrome.automation.AutomationNode} node - * @param {boolean} allNodes - * @return {SwitchAccessDebugNode|undefined} - * @private - */ - switchAccessDebugTree_: function(node, allNodes) { - let debugNode = this.createAnnotatedDebugNode_(node, allNodes); - if (!debugNode) - return; - - for (let child of node.children) { - let dChild = this.switchAccessDebugTree_(child, allNodes); - if (dChild) - debugNode.children.push(dChild); - } - return debugNode; - }, - - /** - * Creates a debug node from the given automation node, with annotations of - * various SwitchAccess properties. - * - * @param {!chrome.automation.AutomationNode} node - * @param {boolean} allNodes - * @return {SwitchAccessDebugNode|undefined} - * @private - */ - createAnnotatedDebugNode_: function(node, allNodes) { - if (!allNodes && !SwitchAccessPredicate.isInterestingSubtree(node)) - return; - - let debugNode = {}; - if (node.role) - debugNode.role = node.role; - if (node.name) - debugNode.name = node.name; - - debugNode.isActionable = SwitchAccessPredicate.isActionable(node); - debugNode.isGroup = SwitchAccessPredicate.isGroup(node, node); - debugNode.isInterestingSubtree = - SwitchAccessPredicate.isInterestingSubtree(node); - - debugNode.children = []; - debugNode.baseNode = node; - return debugNode; - }, - - /** - * Prints the debug subtree rooted at |node| in pre-order. - * - * @param {SwitchAccessDebugNode} node - * @param {!number} indent - * @param {AutomationManager.DisplayMode} displayMode - * @private - */ - printDebugNode_: function(node, indent, displayMode) { - if (!node) - return; - - let result = ' '.repeat(indent); - if (node.role) - result += 'role:' + node.role + ' '; - if (node.name) - result += 'name:' + node.name + ' '; - result += 'isActionable? ' + node.isActionable; - result += ', isGroup? ' + node.isGroup; - result += ', isInterestingSubtree? ' + node.isInterestingSubtree; - - switch (displayMode) { - case AutomationManager.DisplayMode.ALL: - console.log(result); - break; - case AutomationManager.DisplayMode.INTERESTING_SUBTREE: - if (node.isInterestingSubtree) - console.log(result); - break; - case AutomationManager.DisplayMode.INTERESTING_NODE: - default: - if (node.isActionable || node.isGroup) - console.log(result); - break; - } - - let children = node.children || []; - for (let child of children) - this.printDebugNode_(child, indent + 2, displayMode); - } -}; +let SwitchAccessDebugNode;
diff --git a/chrome/browser/resources/chromeos/switch_access/context_menu_manager.js b/chrome/browser/resources/chromeos/switch_access/context_menu_manager.js index 8f13171..e457d60 100644 --- a/chrome/browser/resources/chromeos/switch_access/context_menu_manager.js +++ b/chrome/browser/resources/chromeos/switch_access/context_menu_manager.js
@@ -43,8 +43,9 @@ /** * Keeps track of when we're in the context menu. + * @private {boolean} */ - this.inContextMenu = false; + this.inContextMenu_ = false; this.init_(); } @@ -80,7 +81,7 @@ * @param {!Array<!ContextMenuManager.Action>} actions */ enter: function(actions) { - this.inContextMenu = true; + this.inContextMenu_ = true; if (actions !== this.actions_) { this.actions_ = actions; MessageHandler.sendMessage( @@ -96,7 +97,7 @@ */ exit: function() { this.clearFocusRing_(); - this.inContextMenu = false; + this.inContextMenu_ = false; if (this.node_) this.node_ = null; }, @@ -104,10 +105,11 @@ /** * Move to the next available action in the menu. If this is no next action, * select the whole context menu to loop again. + * @return {boolean} Whether this function had any effect. */ moveForward: function() { - if (!this.node_) - return; + if (!this.node_ || !this.inContextMenu_) + return false; this.clearFocusRing_(); let treeWalker = new AutomationTreeWalker( @@ -119,15 +121,17 @@ else this.node_ = node; this.updateFocusRing_(); + return true; }, /** * Move to the previous available action in the context menu. If we're at the * beginning of the list, start again at the end. + * @return {boolean} Whether this function had any effect. */ moveBackward: function() { - if (!this.node_) - return; + if (!this.node_ || !this.inContextMenu_) + return false; this.clearFocusRing_(); let treeWalker = new AutomationTreeWalker( @@ -148,20 +152,23 @@ this.node_ = node; this.updateFocusRing_(); + return true; }, /** * Perform the action indicated by the current button (or no action if the * entire menu is selected). Then exit the context menu and return to * traditional navigation. + * @return {boolean} Whether this function had any effect. */ selectCurrentNode: function() { - if (!this.node_) - return; + if (!this.node_ || !this.inContextMenu_) + return false; this.clearFocusRing_(); this.node_.doDefault(); this.exit(); + return true; }, /**
diff --git a/chrome/browser/resources/chromeos/sys_internals/index.html b/chrome/browser/resources/chromeos/sys_internals/index.html index 1ca94540..0a89e1b7 100644 --- a/chrome/browser/resources/chromeos/sys_internals/index.html +++ b/chrome/browser/resources/chromeos/sys_internals/index.html
@@ -65,7 +65,7 @@ <div class="content" id="infopage-num-of-cpu"></div> <div class="title">Usage</div> <div class="content" id="infopage-cpu-usage"></div> - <div class="title">Kernal Time</div> + <div class="title">Kernel Time</div> <div class="content" id="infopage-cpu-kernel"></div> <div class="title">User Time</div> <div class="content" id="infopage-cpu-user"></div>
diff --git a/chrome/browser/resources/discards/BUILD.gn b/chrome/browser/resources/discards/BUILD.gn new file mode 100644 index 0000000..f21bf22 --- /dev/null +++ b/chrome/browser/resources/discards/BUILD.gn
@@ -0,0 +1,49 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//third_party/closure_compiler/compile_js.gni") + +js_type_check("closure_compile") { + deps = [ + ":database_tab", + ":discards", + ":discards_tab", + ] +} + +js_library("discards") { + deps = [ + "//ui/webui/resources/js:assert", + "//ui/webui/resources/js:util", + ] +} + +js_library("database_tab") { + deps = [ + ":discards", + "//ui/webui/resources/js:assert", + "//ui/webui/resources/js:util", + ] + extra_deps = [ "//chrome/browser/ui/webui/discards:mojo_bindings_js" ] + externs_list = [ + "$root_gen_dir/chrome/browser/ui/webui/discards/discards.mojom.externs.js", + "$root_gen_dir/chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.externs.js", + "$externs_path/mojo.js", + ] +} + +js_library("discards_tab") { + deps = [ + ":discards", + "//ui/webui/resources/js:assert", + "//ui/webui/resources/js:icon", + "//ui/webui/resources/js:util", + ] + extra_deps = [ "//chrome/browser/ui/webui/discards:mojo_bindings_js" ] + externs_list = [ + "$root_gen_dir/chrome/browser/ui/webui/discards/discards.mojom.externs.js", + "$root_gen_dir/chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.externs.js", + "$externs_path/mojo.js", + ] +}
diff --git a/chrome/browser/resources/discards/database_tab.html b/chrome/browser/resources/discards/database_tab.html index 5776b06..6ff5cd3 100644 --- a/chrome/browser/resources/discards/database_tab.html +++ b/chrome/browser/resources/discards/database_tab.html
@@ -6,26 +6,68 @@ This is an internal only page meant for debugging. It is not intended for general use and is not localized. --> -<!doctype html> -<div id="tab_contents"> - <div id="database"> - <div class="content-header">Database</div> - <table id="tab-database-info-table"> +<link rel="import" href="chrome://resources/html/polymer.html"> + +<dom-module id="database-tab"> + <template> + <style> + table { + border-collapse: collapse; + } + + table td, + table th { + border: 1px solid #777; + padding-left: 4px; + padding-right: 4px; + } + + table th { + background: rgb(224, 236, 255); + padding-bottom: 4px; + padding-inline-end: 16px; + padding-top: 4px; + white-space: nowrap; + } + + table th[data-sort-key] { + cursor: pointer; + } + + .header-cell-container { + align-items: center; + display: flex; + justify-content: flex-start; + } + + .title-cell { + max-width: 200px; + overflow: hidden; + white-space: nowrap; + } + + .title-cell-container { + align-items: center; + display: flex; + justify-content: flex-start; + } + </style> + <table> <thead> - <tr id="tab-database-info-table-header"> + <tr> <th> <div class="header-cell-container"> - <div>Origin</div> + Origin </div> </th> <th> <div class="header-cell-container"> - <div>Dirty</div> + Dirty </div> </th> <th> <div class="header-cell-container"> - <div>Last Loaded</div> + Last Loaded </div> </th> <th> @@ -78,21 +120,24 @@ </th> </tr> </thead> - <tbody id="database-info-table-body"> + <tbody> + <template is="dom-repeat" sort="compareRows_" items="[[rows_]]"> + <tr> + <td class="origin-cell">[[item.origin]]</td> + <td class="dirty-cell">[[boolToString_(item.dirty)]]</td> + <td>[[lastUseToString_(item.value.lastLoaded)]]</td> + <td>[[featureToString_(item.value.updatesFaviconInBackground)]]</td> + <td>[[featureToString_(item.value.updatesTitleInBackground)]]</td> + <td>[[featureToString_(item.value.usesAudioInBackground)]]</td> + <td> + [[featureToString_(item.value.usesNotificationsInBackground)]] + </td> + <td>[[getAvgCPU_(item.value.loadTimeEstimates)]]</td> + <td>[[getAvgMemory_(item.value.loadTimeEstimates)]]</td> + </tr> + </template> </tbody> </table> - <template id="database-info-row"> - <tr> - <td class="origin-cell"></td> - <td class="dirty-cell"></td> - <td class="last-loaded-cell"></td> - <td class="updates-favicon-in-background-cell"></td> - <td class="updates-title-in-background-cell"></td> - <td class="uses-audio-in-background-cell"></td> - <td class="uses-notifications-in-background-cell"></td> - <td class="avg-cpu-cell"></td> - <td class="avg-memory-cell"></td> - </tr> - </template> - </div> -</div> + </template> + <script src="database_tab.js"></script> +</dom-module>
diff --git a/chrome/browser/resources/discards/database_tab.js b/chrome/browser/resources/discards/database_tab.js new file mode 100644 index 0000000..aa3a02f --- /dev/null +++ b/chrome/browser/resources/discards/database_tab.js
@@ -0,0 +1,144 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +Polymer({ + is: 'database-tab', + + properties: { + /** + * List of database rows. + * @private {?Array<!mojom.SiteCharacteristicsDatabaseEntry>} + */ + rows_: { + type: Array, + }, + }, + + /** @private {number} */ + updateTimer_: 0, + + /** @private {!Object} */ + requestedOrigins_: {}, + + /** @private {?mojom.DiscardsDetailsProviderPtr} */ + uiHandler_: null, + + /** @override */ + ready: function() { + this.requestedOrigins_ = {}; + this.uiHandler_ = discards.getOrCreateUiHandler(); + + // Specifies the update interval of the table, in ms. + const UPDATE_INTERVAL_MS = 1000; + + // Update immediately. + this.updateDbRows_(); + + // Set an interval timer to update periodically. + this.updateTimer_ = + setInterval(this.updateDbRows_.bind(this), UPDATE_INTERVAL_MS); + }, + + /** + * Issues a request for the data and renders on response. + * @private + */ + updateDbRows_: function() { + this.uiHandler_ + .getSiteCharacteristicsDatabase(Object.keys(this.requestedOrigins_)) + .then(response => { + // Bail if the SiteCharacteristicsDatabase is turned off. + if (!response.result) + return; + + // Add any new origins to the (monotonically increasing) + // set of requested origins. + const dbRows = response.result.dbRows; + for (let dbRow of dbRows) + this.requestedOrigins_[dbRow.origin] = true; + this.rows_ = dbRows; + }); + }, + + /** + * Compares two db rows by their origin. + * @param {mojom.SiteCharacteristicsDatabaseEntry} a The first value being + * compared. + * @param {mojom.SiteCharacteristicsDatabaseEntry} b The second value being + * compared. + * @return {number} A negative number if a < b, 0 if a == b, and a positive + * number if a > b. + * @private + */ + compareRows_: function(a, b) { + return a.origin.localeCompare(b.origin); + }, + + + /** + * @param {boolean} value The value to convert. + * @return {string} A display string representing value. + * @private + */ + boolToString_: function(value) { + return discards.boolToString(value); + }, + + /** + * @param {number} time Time in seconds since epoch. + * in question. + * @return {string} A user-friendly string explaining how long ago time + * occurred. + * @private + */ + lastUseToString_: function(time) { + const nowSecondsFromEpoch = Math.round(Date.now() / 1000); + return discards.durationToString(nowSecondsFromEpoch - time); + }, + + /** + * @param {?mojom.SiteCharacteristicsFeature} feature The feature + * in question. + * @return {string} A human-readable string representing the feature. + * @private + */ + featureToString_: function(feature) { + if (!feature) + return 'N/A'; + + if (feature.useTimestamp) { + const nowSecondsFromEpoch = Math.round(Date.now() / 1000); + return 'Used ' + + discards.durationToString(nowSecondsFromEpoch - feature.useTimestamp); + } + + if (feature.observationDuration) { + return discards.secondsToString(feature.observationDuration); + } + + return 'N/A'; + }, + + /** + * @param {?mojom.SiteCharacteristicsPerformanceMeasurement} + * loadTimeEstimates The load time estimates to convert. + * @return {string} The average CPU usage string or 'N/A' if unavailable. + * @private + */ + getAvgCPU_: function(loadTimeEstimates) { + return loadTimeEstimates ? loadTimeEstimates.avgCpuUsageUs.toString() : + 'N/A'; + }, + + /** + * @param {?mojom.SiteCharacteristicsPerformanceMeasurement} + * loadTimeEstimates The load time estimates to convert. + * @return {string} The average memory usage string or 'N/A' if unavailable. + * @private + */ + getAvgMemory_: function(loadTimeEstimates) { + return loadTimeEstimates ? loadTimeEstimates.avgFootprintKb.toString() : + 'N/A'; + }, +});
diff --git a/chrome/browser/resources/discards/discards.css b/chrome/browser/resources/discards/discards.css deleted file mode 100644 index 098c668..0000000 --- a/chrome/browser/resources/discards/discards.css +++ /dev/null
@@ -1,230 +0,0 @@ -/* Copyright 2017 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. */ - -table { - border-collapse: collapse; -} - -table td, -table th { - border: 1px solid #777; - padding-left: 4px; - padding-right: 4px; -} - -table th { - background: rgb(224, 236, 255); - padding-bottom: 4px; - padding-inline-end: 16px; - padding-top: 4px; - white-space: nowrap; -} - -table th[data-sort-key] { - cursor: pointer; -} - -table th div.header-cell-container { - align-items: center; - display: flex; - justify-content: flex-start; - /* Make sure mouse events pass through to the underlying <th>. */ - pointer-events: none; -} - -table th div.header-cell-container div { - /* Make sure mouse events pass through to the underlying <th>. */ - pointer-events: none; -} - -table th div.header-cell-container div div { - /* Make sure mouse events pass through to the underlying <th>. */ - pointer-events: none; -} - -table td.title-cell { - max-width: 200px; - overflow: hidden; - white-space: nowrap; -} - -table td div.title-cell-container { - align-items: center; - display: flex; - justify-content: flex-start; -} - -table td div.favicon-div { - height: 16px; - margin: 3px; - min-width: 16px; -} - -table td div.title-div { - overflow: hidden; - white-space: nowrap; -} - -table td.tab-url-cell { - max-width: 200px; - overflow: hidden; - white-space: nowrap; -} - -table td.visibility-cell { - width: 6em; -} - -table td.loading-state-cell { - width: 6em; -} - -table td.state-cell { - width: 10em; -} - -table td.boolean-cell, -table td.discard-count-cell, -table td.reactivation-score-cell, -table td.site-engagement-score-cell, -table td.utility-rank-cell { - text-align: center; -} - -table td div[is=action-link], -table td.actions-cell { - font-size: 0.6rem; -} - -table tr:hover { - background: rgb(255, 255, 187); -} - -th div.header-cell-container::after { - content: '▲'; - opacity: 0; -} - -th.sort-column div.header-cell-container::after { - content: '▲'; - opacity: 1; -} - -th[data-sort-reverse].sort-column div.header-cell-container::after { - content: '▼'; - opacity: 1; -} - -* { - box-sizing: border-box; -} - -html { - height: 100%; -} - -body { - color: rgb(48, 57, 66); - display: flex; - flex-direction: column; - font-size: 13px; - height: 100%; - margin: 0; - overflow: auto; -} - -#navigation { - flex-shrink: 0; - padding-top: 20px; - width: 150px; -} - -.tab-header { - border-inline-start: 6px solid transparent; - padding-left: 15px; -} - -.tab-header.selected { - border-inline-start-color: rgb(78, 87, 100); -} - -.tab-header > button { - background-color: white; - border: 0; - cursor: pointer; - font: inherit; - line-height: 17px; - margin: 6px 0; - padding: 0 2px; -} - -.tab-header:not(.selected) > button { - color: #999; -} - -#container { - display: flex; - height: 100% -} - -#infobar { - background: rgb(255, 212, 0); - display: none; - padding: 4px 0; - text-align: center; -} - -#infobar.show { - display: block; -} - -#content { - flex-grow: 1; -} - -#content > div { - min-width: 32em; - padding: 0 20px 65px 0; -} -#content > div:not(.selected) { - display: none; -} - -.content-header { - background: linear-gradient(white, white 40%, rgba(255, 255, 255, 0.92)); - border-bottom: 1px solid #eee; - font-size: 150%; - padding: 20px 0 10px 0; - z-index: 1; -} - -#caption { - color: rgb(92, 97, 102); - font-size: 150%; - padding-bottom: 10px; - padding-left: 20px; -} - -.tooltip-container { - position: relative; -} - -.tooltip { - background: black; - color: white; - display: none; - font-size: 0.75rem; - left: 50%; - margin-left: -100px; - margin-top: 4px; - padding: 4px; - position: absolute; - top: 100%; - width: 200px; - z-index: 1; -} - -.tooltip-container:hover > .tooltip { - display: block; -}
diff --git a/chrome/browser/resources/discards/discards.html b/chrome/browser/resources/discards/discards.html index b3e992a..79431b35 100644 --- a/chrome/browser/resources/discards/discards.html +++ b/chrome/browser/resources/discards/discards.html
@@ -4,35 +4,22 @@ found in the LICENSE file. This is an internal only page meant for debugging. It is not intended for -general use and is not localized. ---> +general use and is not localized.--> <!doctype html> <html lang="en"> <head> <title>Discards</title> <meta charset="utf-8"> - <link rel="stylesheet" href="chrome://resources/css/action_link.css"> - <link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> - <link rel="import" href="discards_tab.html"> - <link rel="import" href="database_tab.html"> + <link rel="import" href="discards_main.html"> <script src="chrome://resources/js/cr.js"></script> <script src="chrome://resources/js/icon.js"></script> <script src="chrome://resources/js/mojo_bindings.js"></script> <script src="chrome://resources/js/util.js"></script> <script src="chrome/browser/ui/webui/discards/discards.mojom.js"></script> <script src="discards.js"></script> - <link rel="stylesheet" type="text/css" href="discards.css"> + <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> </head> <body> - <div id="container"> - <div id="navigation"> - <div id="caption">Discards</div> - </div> - <div id="content"> -<!-- This will be populated with nodes imported from the rel="import" links - above, which in turn contain elements used to populate the sidebar. ---> - </div> - </div> + <discards-main></discards-main> </body> </html>
diff --git a/chrome/browser/resources/discards/discards.js b/chrome/browser/resources/discards/discards.js index 82772a2..dfd1c7c 100644 --- a/chrome/browser/resources/discards/discards.js +++ b/chrome/browser/resources/discards/discards.js
@@ -8,49 +8,23 @@ // The following variables are initialized by 'initialize'. // Points to the Mojo WebUI handler. let uiHandler; - // After initialization this points to the discard info table body. - let tabDiscardsInfoTableBody; - // After initialization this points to the database info table body. - let dbInfoTableBody; - - // This holds the sorted db infos as retrieved from the uiHandler. - let dbInfos; - // This holds the sorted tab discard tabInfos as retrieved from the uiHandler. - let tabInfos; - // Holds information about the current sorting of the table. - let sortKey; - let sortReverse; - // Points to the timer that refreshes the table content. - let updateTimer; - - // Specifies the update interval of the page, in ms. - const UPDATE_INTERVAL_MS = 1000; /** - * Ensures the info table table body has the appropriate length. Decorates - * newly created rows with a 'row-index' attribute to enable event listeners - * to quickly determine the index of the row. + * @return {!mojom.DiscardsDetailsProviderPtr} The UI handler. */ - function ensureInfoTableLength(infoTableBody, infos, rowCreator) { - let rows = infoTableBody.querySelectorAll('tr'); - if (rows.length < infos.length) { - for (let i = rows.length; i < infos.length; ++i) { - let row = rowCreator(); - row.setAttribute('data-row-index', i.toString()); - infoTableBody.appendChild(row); - } - } else if (rows.length > infos.length) { - for (let i = infos.length; i < rows.length; ++i) { - infoTableBody.removeChild(rows[i]); - } + function getOrCreateUiHandler() { + if (!uiHandler) { + uiHandler = new mojom.DiscardsDetailsProviderPtr; + Mojo.bindInterface( + mojom.DiscardsDetailsProvider.name, + mojo.makeRequest(uiHandler).handle); } + return uiHandler; } /** - * Determines if the provided state is related to discarding. - * @param {state} The discard state. - * @return {boolean} True if the state is related to discarding, false - * otherwise. + * @param {mojom.LifecycleUnitState} state The discard state. + * @return {boolean} Whether the state is related to discarding. */ function isDiscardRelatedState(state) { return state == mojom.LifecycleUnitState.PENDING_DISCARD || @@ -117,16 +91,6 @@ } /** - * Sorts the tab discards info data in |tabInfos| according to the current - * |sortKey|. - */ - function sortTabDiscardsInfoTable() { - tabInfos = tabInfos.sort((a, b) => { - return (sortReverse ? -1 : 1) * compareTabDiscardsInfos(sortKey, a, b); - }); - } - - /** * Pluralizes a string according to the given count. Assumes that appending an * 's' is sufficient to make a string plural. * @param {string} s The string to be made plural if necessary. @@ -222,654 +186,14 @@ return bool ? '✔' : '✘️'; } - /** - * Returns a string representation of a visibility enum value for display in - * a table. - * @param {int} visibility A value in LifecycleUnitVisibility. - * @return {string} A string representation of the visibility. - */ - function visibilityToString(visibility) { - switch (visibility) { - case mojom.LifecycleUnitVisibility.HIDDEN: - return 'hidden'; - case mojom.LifecycleUnitVisibility.OCCLUDED: - return 'occluded'; - case mojom.LifecycleUnitVisibility.VISIBLE: - return 'visible'; - } - assertNotReached('Unknown visibility: ' + visibility); - } - - /** - * Returns a string representation of a loading state enum value for display - * in a table. - * @param {int} loadingState A value in LifecycleUnitLoadingState enum. - * @return {string} A string representation of the loading state. - */ - function loadingStateToString(loadingState) { - switch (loadingState) { - case mojom.LifecycleUnitLoadingState.UNLOADED: - return 'unloaded'; - case mojom.LifecycleUnitLoadingState.LOADING: - return 'loading'; - case mojom.LifecycleUnitLoadingState.LOADED: - return 'loaded'; - } - assertNotReached('Unknown loadingState: ' + loadingState); - } - - /** - * Returns a string representation of a discard reason. - * @param {mojom.LifecycleUnitDiscardReason} reason The discard reason. - * @return {string} A string representation of the discarding reason. - */ - function discardReasonToString(reason) { - switch (reason) { - case mojom.LifecycleUnitDiscardReason.EXTERNAL: - return 'external'; - case mojom.LifecycleUnitDiscardReason.PROACTIVE: - return 'proactive'; - case mojom.LifecycleUnitDiscardReason.URGENT: - return 'urgent'; - } - assertNotReached('Unknown discard reason: ' + reason); - } - - /** - * Returns a string representation of a lifecycle state. - * @param {mojom.LifecycleUnitState} state The lifecycle state. - * @param {mojom.LifecycleUnitDiscardReason} reason The discard reason. This - * is only used if the state is discard related. - * @param {int} visibility A value in LifecycleUnitVisibility. - * @param {boolean} hasFocus Whether or not the tab has input focus. - * @return {string} A string representation of the lifecycle state, augmented - * with the discard reason if appropriate. - */ - function lifecycleStateToString(state, reason, visibility, hasFocus) { - let pageLifecycleStateFromVisibilityAndFocus = function() { - switch (visibility) { - case mojom.LifecycleUnitVisibility.HIDDEN: - case mojom.LifecycleUnitVisibility.OCCLUDED: - // An occluded page is also considered hidden. - return 'hidden'; - case mojom.LifecycleUnitVisibility.VISIBLE: - return hasFocus ? 'active' : 'passive'; - } - assertNotReached('Unknown visibility: ' + visibility); - }; - - switch (state) { - case mojom.LifecycleUnitState.ACTIVE: - return pageLifecycleStateFromVisibilityAndFocus(); - case mojom.LifecycleUnitState.THROTTLED: - return pageLifecycleStateFromVisibilityAndFocus() + ' (throttled)'; - case mojom.LifecycleUnitState.PENDING_FREEZE: - return pageLifecycleStateFromVisibilityAndFocus() + ' (pending frozen)'; - case mojom.LifecycleUnitState.FROZEN: - return 'frozen'; - case mojom.LifecycleUnitState.PENDING_DISCARD: - return pageLifecycleStateFromVisibilityAndFocus() + - ' (pending discard (' + discardReasonToString(reason) + '))'; - case mojom.LifecycleUnitState.DISCARDED: - return 'discarded (' + discardReasonToString(reason) + ')'; - case mojom.LifecycleUnitState.PENDING_UNFREEZE: - return 'frozen (pending unfreeze)'; - } - assertNotReached('Unknown lifecycle state: ' + state); - } - - /** - * Returns the index of the row in the table that houses the given |element|. - * @param {HTMLElement} element Any element in the DOM. - */ - function getRowIndex(element) { - let row = element.closest('tr'); - return parseInt(row.getAttribute('data-row-index'), 10); - } - - /** - * Creates an empty tab discards table row with action-link listeners, etc. - * By default the links are inactive. - */ - function createEmptyTabDiscardsInfoTableRow() { - let template = $('tab-discard-info-row'); - let content = document.importNode(template.content, true); - let row = content.querySelector('tr'); - - // Set up the listener for the auto-discardable toggle action. - let isAutoDiscardable = row.querySelector('.is-auto-discardable-link'); - isAutoDiscardable.setAttribute('disabled', ''); - isAutoDiscardable.addEventListener('click', (e) => { - // Get the info backing this row. - let info = tabInfos[getRowIndex(e.target)]; - // Disable the action. The update function is responsible for - // re-enabling actions if necessary. - e.target.setAttribute('disabled', ''); - // Perform the action. - uiHandler.setAutoDiscardable(info.id, !info.isAutoDiscardable) - .then(updateTables()); - }); - - let loadListener = function(e) { - // Get the info backing this row. - let info = tabInfos[getRowIndex(e.target)]; - // Perform the action. - uiHandler.loadById(info.id); - }; - let loadLink = row.querySelector('.load-link'); - loadLink.addEventListener('click', loadListener); - - // Set up the listeners for freeze links. - let freezeListener = function(e) { - // Get the info backing this row. - let info = tabInfos[getRowIndex(e.target)]; - // Perform the action. - uiHandler.freezeById(info.id); - }; - let freezeLink = row.querySelector('.freeze-link'); - freezeLink.addEventListener('click', freezeListener); - - // Set up the listeners for discard links. - let discardListener = function(e) { - // Get the info backing this row. - let info = tabInfos[getRowIndex(e.target)]; - // Determine whether this is urgent or not. - let urgent = e.target.classList.contains('discard-urgent-link'); - // Disable the action. The update function is responsible for - // re-enabling actions if necessary. - e.target.setAttribute('disabled', ''); - // Perform the action. - uiHandler.discardById(info.id, urgent).then((response) => { - updateTables(); - }); - }; - let discardLink = row.querySelector('.discard-link'); - let discardUrgentLink = row.querySelector('.discard-urgent-link'); - discardLink.addEventListener('click', discardListener); - discardUrgentLink.addEventListener('click', discardListener); - - return row; - } - - /** - * Given an "action-link" element, enables or disables it. - */ - function setActionLinkEnabled(element, enabled) { - if (enabled) - element.removeAttribute('disabled'); - else - element.setAttribute('disabled', ''); - } - - /** - * Updates a tab discards info table row in place. Sets/unsets 'disabled' - * attributes on action-links as necessary, and populates all contents. - */ - function updateTabDiscardsInfoTableRow(row, info) { - // Update the content. - row.querySelector('.utility-rank-cell').textContent = - info.utilityRank.toString(); - row.querySelector('.reactivation-score-cell').textContent = - info.hasReactivationScore ? info.reactivationScore.toFixed(4) : 'N/A'; - row.querySelector('.site-engagement-score-cell').textContent = - info.siteEngagementScore.toFixed(1); - row.querySelector('.favicon-div').style.backgroundImage = - cr.icon.getFavicon(info.tabUrl); - row.querySelector('.title-div').textContent = info.title; - row.querySelector('.tab-url-cell').textContent = info.tabUrl; - row.querySelector('.visibility-cell').textContent = - visibilityToString(info.visibility); - row.querySelector('.loading-state-cell').textContent = - loadingStateToString(info.loadingState); - row.querySelector('.can-freeze-div').textContent = - boolToString(info.canFreeze); - row.querySelector('.can-discard-div').textContent = - boolToString(info.canDiscard); - // The lifecycle state is meaningless for tabs that have never been loaded. - row.querySelector('.state-cell').textContent = - (info.loadingState != mojom.LifecycleUnitLoadingState.UNLOADED || - info.discardCount > 0) ? - lifecycleStateToString( - info.state, info.discardReason, info.visibility, info.hasFocus) : - ''; - row.querySelector('.discard-count-cell').textContent = - info.discardCount.toString(); - row.querySelector('.is-auto-discardable-div').textContent = - boolToString(info.isAutoDiscardable); - row.querySelector('.last-active-cell').textContent = - durationToString(info.lastActiveSeconds); - - // Update the tooltips with 'Can Freeze/Discard?' reasons. - row.querySelector('.can-freeze-tooltip').innerHTML = - info.cannotFreezeReasons.join('<br />'); - row.querySelector('.can-discard-tooltip').innerHTML = - info.cannotDiscardReasons.join('<br />'); - - row.querySelector('.is-auto-discardable-link').removeAttribute('disabled'); - setActionLinkEnabled( - row.querySelector('.can-freeze-link'), - (!info.canFreeze && info.cannotFreezeReasons.length > 0)); - setActionLinkEnabled( - row.querySelector('.can-discard-link'), - (!info.canDiscard && info.cannotDiscardReasons.length > 0)); - let loadLink = row.querySelector('.load-link'); - let freezeLink = row.querySelector('.freeze-link'); - let discardLink = row.querySelector('.discard-link'); - let discardUrgentLink = row.querySelector('.discard-urgent-link'); - - // Determine which action links should be enabled/disabled. By default - // everything is disabled and links are selectively enabled depending on the - // tab state. - let loadEnabled = false; - let freezeEnabled = false; - let discardEnabled = false; - let discardUrgentEnabled = false; - if (info.loadingState == mojom.LifecycleUnitLoadingState.UNLOADED) { - loadEnabled = true; - } else if ( - info.visibility == mojom.LifecycleUnitVisibility.HIDDEN || - info.visibility == mojom.LifecycleUnitVisibility.OCCLUDED) { - // Only tabs that aren't visible can be frozen or discarded for now. - freezeEnabled = true; - discardEnabled = true; - discardUrgentEnabled = true; - switch (info.state) { - case mojom.LifecycleUnitState.DISCARDED: - case mojom.LifecycleUnitState.PENDING_DISCARD: - discardUrgentEnabled = false; - discardEnabled = false; - // Deliberately fall through. - - case mojom.LifecycleUnitState.FROZEN: - case mojom.LifecycleUnitState.PENDING_FREEZE: - freezeEnabled = false; - // Deliberately fall through. - - case mojom.LifecycleUnitState.THROTTLED: - case mojom.LifecycleUnitState.ACTIVE: - // Everything stays enabled, - } - } - - setActionLinkEnabled(loadLink, loadEnabled); - setActionLinkEnabled(freezeLink, freezeEnabled); - setActionLinkEnabled(discardLink, discardEnabled); - setActionLinkEnabled(discardUrgentLink, discardUrgentEnabled); - } - - /** - * Causes the discards info table to be rendered. Reuses existing table rows - * in place to minimize disruption to the page. - */ - function renderTabDiscardsInfoTable() { - ensureInfoTableLength( - tabDiscardsInfoTableBody, tabInfos, createEmptyTabDiscardsInfoTableRow); - let rows = tabDiscardsInfoTableBody.querySelectorAll('tr'); - for (let i = 0; i < tabInfos.length; ++i) - updateTabDiscardsInfoTableRow(rows[i], tabInfos[i]); - } - - function createEmptyDbInfoTableRow() { - let template = $('database-info-row'); - let content = document.importNode(template.content, true); - let row = content.querySelector('tr'); - - return row; - } - - /** - * Returns a string representing the state of a feature. - */ - function featureToString(now, feature) { - if (feature.useTimestamp) { - return 'Last Used: ' + durationToString(now - feature.useTimestamp); - } else { - // TODO(siggi): This should note that the feature has been deemed to - // be unused after a finch-controlled duration. - return 'Total Observation: ' + - secondsToString(feature.observationDuration); - } - } - /** - * Updates a db info table row in place. - */ - function updateDbInfoTableRow(row, info) { - row.querySelector('.origin-cell').textContent = info.origin; - row.querySelector('.dirty-cell').textContent = boolToString(info.isDirty); - let value = info.value; - let lastLoaded = 'N/A'; - let updatesFaviconInBackground = 'N/A'; - let updatesTitleInBackground = 'N/A'; - let usesAudioInBackground = 'N/A'; - let usesNotificationsInBackground = 'N/A'; - let avgCpuUsage = 'N/A'; - let avgMemoryFootprint = 'N/A'; - if (value) { - let nowSecondsFromEpoch = Math.round((new Date()).getTime() / 1000); - lastLoaded = durationToString(nowSecondsFromEpoch - value.lastLoaded); - - updatesFaviconInBackground = featureToString( - nowSecondsFromEpoch, value.updatesFaviconInBackground); - updatesTitleInBackground = - featureToString(nowSecondsFromEpoch, value.updatesTitleInBackground); - usesAudioInBackground = - featureToString(nowSecondsFromEpoch, value.usesAudioInBackground); - usesNotificationsInBackground = featureToString( - nowSecondsFromEpoch, value.usesNotificationsInBackground); - - let loadTimeEstimates = value.loadTimeEstimates; - if (loadTimeEstimates) { - avgCpuUsage = loadTimeEstimates.avgCpuUsageUs.toString(); - avgMemoryFootprint = loadTimeEstimates.avgFootprintKb.toString(); - } - } - row.querySelector('.last-loaded-cell').textContent = lastLoaded; - - row.querySelector('.updates-favicon-in-background-cell').textContent = - updatesFaviconInBackground; - row.querySelector('.updates-title-in-background-cell').textContent = - updatesTitleInBackground; - row.querySelector('.uses-audio-in-background-cell').textContent = - usesAudioInBackground; - row.querySelector('.uses-notifications-in-background-cell').textContent = - usesNotificationsInBackground; - row.querySelector('.avg-cpu-cell').textContent = avgCpuUsage; - row.querySelector('.avg-memory-cell').textContent = avgMemoryFootprint; - } - - function renderDbInfoTable() { - ensureInfoTableLength(dbInfoTableBody, dbInfos, createEmptyDbInfoTableRow); - let rows = dbInfoTableBody.querySelectorAll('tr'); - for (let i = 0; i < dbInfos.length; ++i) - updateDbInfoTableRow(rows[i], dbInfos[i]); - } - - function stableUpdateDatabaseInfoTableImpl() { - // Add all the origins we've seen so far to requestedOrigins, which means - // the table will grow monotonically until the page is reloaded. - let requestedOrigins = []; - for (let i = 0; i < dbInfos.length; ++i) - requestedOrigins.push(dbInfos[i].origin); - - uiHandler.getSiteCharacteristicsDatabase(requestedOrigins) - .then((response) => { - // Bail if the SiteCharacteristicsDatabase is turned off. - if (!response.result) - return; - - let newInfos = response.result.dbRows; - let stableInfos = []; - - // Update existing dbInfos in place, remove old ones, and append new - // ones. This tries to keep the existing ordering stable so that - // clicking links is minimally disruptive. - for (let i = 0; i < dbInfos.length; ++i) { - let oldInfo = dbInfos[i]; - let newInfo = null; - for (let j = 0; j < newInfos.length; ++j) { - if (newInfos[j].origin == oldInfo.origin) { - newInfo = newInfos[j]; - break; - } - } - - // Old dbInfos that have corresponding new dbInfos are pushed first, - // in the current order of the old dbInfos. - if (newInfo != null) - stableInfos.push(newInfo); - } - - // Make sure info about new tabs is appended to the end, in the order - // they were originally returned. - for (let i = 0; i < newInfos.length; ++i) { - let newInfo = newInfos[i]; - let oldInfo = null; - for (let j = 0; j < dbInfos.length; ++j) { - if (dbInfos[j].origin == newInfo.origin) { - oldInfo = dbInfos[j]; - break; - } - } - - // Entirely new information (has no corresponding old info) is - // appended to the end. - if (oldInfo == null) - stableInfos.push(newInfo); - } - - // Swap out the current info with the new stably sorted information. - dbInfos = stableInfos; - - // Render the content in place. - renderDbInfoTable(); - }); - } - - /** - * Causes the discard info table to be updated in as stable a manner as - * possible. That is, rows will stay in their relative positions, even if the - * current sort order is violated. Only the addition or removal of rows (tabs) - * can cause the layout to change. - */ - function stableUpdateTabDiscardsInfoTableImpl() { - uiHandler.getTabDiscardsInfo().then((response) => { - let newInfos = response.infos; - let stableInfos = []; - - // Update existing tabInfos in place, remove old ones, and append new - // ones. This tries to keep the existing ordering stable so that clicking - // links is minimally disruptive. - for (let i = 0; i < tabInfos.length; ++i) { - let oldInfo = tabInfos[i]; - let newInfo = null; - for (let j = 0; j < newInfos.length; ++j) { - if (newInfos[j].id == oldInfo.id) { - newInfo = newInfos[j]; - break; - } - } - - // Old tabInfos that have corresponding new tabInfos are pushed first, - // in the current order of the old tabInfos. - if (newInfo != null) - stableInfos.push(newInfo); - } - - // Make sure info about new tabs is appended to the end, in the order they - // were originally returned. - for (let i = 0; i < newInfos.length; ++i) { - let newInfo = newInfos[i]; - let oldInfo = null; - for (let j = 0; j < tabInfos.length; ++j) { - if (tabInfos[j].id == newInfo.id) { - oldInfo = tabInfos[j]; - break; - } - } - - // Entirely new information (has no corresponding old info) is appended - // to the end. - if (oldInfo == null) - stableInfos.push(newInfo); - } - - // Swap out the current info with the new stably sorted information. - tabInfos = stableInfos; - - // Render the content in place. - renderTabDiscardsInfoTable(); - }); - } - - /** - * Initiates table updates, called on a timer as well as explicitly on - * user action. - */ - function updateTablesImpl() { - stableUpdateTabDiscardsInfoTableImpl(); - stableUpdateDatabaseInfoTableImpl(); - } - - /** - * A wrapper to updateTablesImpl that is called due to user action and not - * due to the automatic timer. Cancels the existing timer and reschedules it - * after rendering instantaneously. - */ - function updateTables() { - if (updateTimer) - clearInterval(updateTimer); - updateTablesImpl(); - updateTimer = setInterval(updateTablesImpl, UPDATE_INTERVAL_MS); - } - - /** - * Initializes the navigation bar with buttons for each content header - * in the content element. - */ - function initNavBar() { - const tabContents = document.querySelectorAll('#content > div'); - for (let i = 0; i != tabContents.length; i++) { - const tabContent = tabContents[i]; - const tabName = tabContent.querySelector('.content-header').textContent; - - const tabHeader = document.createElement('div'); - tabHeader.className = 'tab-header'; - const button = document.createElement('button'); - button.textContent = tabName; - tabHeader.appendChild(button); - tabHeader.addEventListener('click', selectTab.bind(null, tabContent.id)); - $('navigation').appendChild(tabHeader); - } - } - - /** - * Event handler that selects the tab indicated by the window location hash. - * Invoked on hashchange events and initialization. - */ - function onHashChange() { - const hash = window.location.hash.slice(1).toLowerCase(); - if (!selectTab(hash)) - selectTab('discards'); - } - - /** - * @param {string} id Tab id. - * @return {boolean} True if successful. - */ - function selectTab(id) { - const tabContents = document.querySelectorAll('#content > div'); - const tabHeaders = $('navigation').querySelectorAll('.tab-header'); - let found = false; - for (let i = 0; i != tabContents.length; i++) { - const tabContent = tabContents[i]; - const tabHeader = tabHeaders[i]; - if (tabContent.id == id) { - tabContent.classList.add('selected'); - tabHeader.classList.add('selected'); - found = true; - } else { - tabContent.classList.remove('selected'); - tabHeader.classList.remove('selected'); - } - } - if (!found) - return false; - window.location.hash = id; - return true; - } - - /** - * Initializes this page. Invoked by the DOMContentLoaded event. - */ - function initialize() { - let importLinks = document.querySelectorAll('link[rel=import]'); - let contentNode = $('content'); - for (let i = 0; i < importLinks.length; ++i) { - let importLink = /** @type {!HTMLLinkElement} */ (importLinks[i]); - if (!importLink.import) { - // Happens when a <link rel=import> is inside a <template>. - continue; - } - let tabContentsNode = importLink.import.querySelector('#tab_contents'); - contentNode.appendChild( - document.importNode(tabContentsNode.firstElementChild, true)); - } - - initNavBar(); - onHashChange(); - - uiHandler = new mojom.DiscardsDetailsProviderPtr; - Mojo.bindInterface( - mojom.DiscardsDetailsProvider.name, mojo.makeRequest(uiHandler).handle); - - dbInfoTableBody = $('database-info-table-body'); - dbInfos = []; - - tabDiscardsInfoTableBody = $('tab-discards-info-table-body'); - tabInfos = []; - sortKey = 'utilityRank'; - sortReverse = false; - updateTimer = null; - - // Set the column sort handlers. - let tabDiscardsInfoTableHeader = $('tab-discards-info-table-header'); - let headers = tabDiscardsInfoTableHeader.children; - for (let header of headers) { - header.addEventListener('click', (e) => { - let newSortKey = e.target.dataset.sortKey; - - // Skip columns that aren't explicitly labeled with a sort-key - // attribute. - if (newSortKey == null) - return; - - // Reverse the sort key if the key itself hasn't changed. - if (sortKey == newSortKey) { - sortReverse = !sortReverse; - } else { - sortKey = newSortKey; - sortReverse = false; - } - - // Undecorate the old sort column, and decorate the new one. - let oldSortColumn = document.querySelector('.sort-column'); - oldSortColumn.classList.remove('sort-column'); - e.target.classList.add('sort-column'); - if (sortReverse) - e.target.setAttribute('data-sort-reverse', ''); - else - e.target.removeAttribute('data-sort-reverse'); - - sortTabDiscardsInfoTable(); - renderTabDiscardsInfoTable(); - }); - } - - // Setup the "Discard a tab now" links. - let discardNow = $('discard-now-link'); - let discardNowUrgent = $('discard-now-urgent-link'); - let discardListener = function(e) { - e.target.setAttribute('disabled', ''); - let urgent = e.target.id.includes('urgent'); - uiHandler.discard(urgent).then(() => { - updateTables(); - e.target.removeAttribute('disabled'); - }); - }; - discardNow.addEventListener('click', discardListener); - discardNowUrgent.addEventListener('click', discardListener); - - updateTables(); - } - - document.addEventListener('DOMContentLoaded', initialize); - window.addEventListener('hashchange', onHashChange); - // These functions are exposed on the 'discards' object created by // cr.define. This allows unittesting of these functions. return { + boolToString: boolToString, compareTabDiscardsInfos: compareTabDiscardsInfos, durationToString: durationToString, - maybeMakePlural: maybeMakePlural + getOrCreateUiHandler: getOrCreateUiHandler, + maybeMakePlural: maybeMakePlural, + secondsToString: secondsToString }; });
diff --git a/chrome/browser/resources/discards/discards_main.html b/chrome/browser/resources/discards/discards_main.html new file mode 100644 index 0000000..95253c260 --- /dev/null +++ b/chrome/browser/resources/discards/discards_main.html
@@ -0,0 +1,32 @@ +<!-- +Copyright 2018 The Chromium Authors. All rights reserved. +Use of this source code is governed by a BSD-style license that can be +found in the LICENSE file. + +This is an internal only page meant for debugging. It is not intended for +general use and is not localized. +--> +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/cr_elements/hidden_style_css.html"> +<link rel="import" href="chrome://resources/cr_elements/paper_tabs_style_css.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/iron-pages/iron-pages.html"> +<link rel="import" href="chrome://resources/polymer/v1_0/paper-tabs/paper-tabs.html"> +<link rel="import" href="database_tab.html"> +<link rel="import" href="discards_tab.html"> + +<dom-module id="discards-main"> + <template> + <style include="paper-tabs-style cr-hidden-style"></style> + <paper-tabs noink selected="{{selected}}"> + <paper-tab>Discards</paper-tab> + <paper-tab>Database</paper-tab> + </paper-tabs> + + <iron-pages selected="[[selected]]"> + <discards-tab></discards-tab> + <database-tab></database-tab> + </iron-pages> + </template> + <script src="discards_main.js"></script> +</dom-module>
diff --git a/chrome/browser/resources/discards/discards_main.js b/chrome/browser/resources/discards/discards_main.js new file mode 100644 index 0000000..968b02e --- /dev/null +++ b/chrome/browser/resources/discards/discards_main.js
@@ -0,0 +1,11 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +Polymer({ + is: 'discards-main', + + properties: { + selected: {type: Number, value: 0}, + }, +});
diff --git a/chrome/browser/resources/discards/discards_tab.html b/chrome/browser/resources/discards/discards_tab.html index e6685e5..2e342915 100644 --- a/chrome/browser/resources/discards/discards_tab.html +++ b/chrome/browser/resources/discards/discards_tab.html
@@ -6,163 +6,305 @@ This is an internal only page meant for debugging. It is not intended for general use and is not localized. --> -<!doctype html> -<div id="tab_contents"> - <div id="discards"> - <div class="content-header">Discards</div> - <div is="action-link" id="discard-now-link"> - [Discard a tab now] +<link rel="import" href="chrome://resources/html/polymer.html"> + +<link rel="import" href="chrome://resources/html/action_link.html"> +<link rel="import" href="chrome://resources/html/action_link_css.html"> + +<dom-module id="discards-tab"> + <template> + <style include="action-link"> + table { + border-collapse: collapse; + } + + table td, + table th { + border: 1px solid #777; + padding-left: 4px; + padding-right: 4px; + } + + table th { + background: rgb(224, 236, 255); + padding-bottom: 4px; + padding-inline-end: 16px; + padding-top: 4px; + white-space: nowrap; + } + + table th[data-sort-key] { + cursor: pointer; + } + + table th div.header-cell-container { + align-items: center; + display: flex; + justify-content: flex-start; + } + + table td.title-cell { + max-width: 200px; + overflow: hidden; + white-space: nowrap; + } + + table td div.title-cell-container { + align-items: center; + display: flex; + justify-content: flex-start; + } + + table td div.favicon-div { + height: 16px; + margin: 3px; + min-width: 16px; + } + + table td div.title-div { + overflow: hidden; + white-space: nowrap; + } + + table td.tab-url-cell { + max-width: 200px; + overflow: hidden; + white-space: nowrap; + } + + table td.visibility-cell { + width: 6em; + } + + table td.loading-state-cell { + width: 6em; + } + + table td.state-cell { + width: 10em; + } + + table td.boolean-cell, + table td.discard-count-cell, + table td.reactivation-score-cell, + table td.site-engagement-score-cell, + table td.utility-rank-cell { + text-align: center; + } + + table td div[is=action-link], + table td.actions-cell { + font-size: 0.6rem; + } + + table tr:hover { + background: rgb(255, 255, 187); + } + + th div.header-cell-container::after { + content: '▲'; + opacity: 0; + } + + th.sort-column div.header-cell-container::after { + content: '▲'; + opacity: 1; + } + + th.sort-column-reverse div.header-cell-container::after { + content: '▼'; + opacity: 1; + } + + .tooltip-container { + position: relative; + } + + .tooltip { + background: black; + color: white; + display: none; + font-size: 0.75rem; + left: 50%; + margin-left: -100px; + margin-top: 4px; + padding: 4px; + position: absolute; + top: 100%; + width: 200px; + z-index: 1; + } + + .tooltip-container:hover > .tooltip { + display: block; + } + </style> + <div id="discards"> + <div is="action-link" on-click="discardNow_"> + [Discard a tab now] + </div> + <div is="action-link" on-click="discardUrgentNow_"> + [Urgent discard a tab now] + </div> + <table id="tab-discard-info-table"> + <thead on-click="onHeaderClick_"> + <tr id="tab-discards-info-table-header"> + <th data-sort-key="utilityRank" class="sort-column"> + <div class="header-cell-container"> + <div> + <div>Utility</div> + <div>Rank<div> + </div> + </div> + </th> + <th data-sort-key="reactivationScore"> + <div class="header-cell-container"> + <div> + <div>Reactivation</div> + <div>Score</div> + </div> + </div> + </th> + <th data-sort-key="siteEngagementScore"> + <div class="header-cell-container"> + <div> + <div>Site</div> + <div>Engagement</div> + <div>Score</div> + </div> + </div> + </th> + <th data-sort-key="title"> + <div class="header-cell-container"> + Tab Title + </div> + </th> + <th data-sort-key="tabUrl"> + <div class="header-cell-container"> + Tab URL + </div> + </th> + <th data-sort-key="visibility"> + <div class="header-cell-container"> + Visibility + </div> + </th> + <th data-sort-key="loadingState""> + <div class="header-cell-container"> + Loading State + </div> + </th> + <th data-sort-key="state"> + <div class="header-cell-container"> + <div> + <div>Lifecycle</div> + <div>State</div> + </div> + </div> + </th> + <th data-sort-key="canFreeze"> + <div class="header-cell-container"> + Can freeze? + </div> + </th> + <th data-sort-key="canDiscard"> + <div class="header-cell-container"> + Can discard? + </div> + </th> + <th data-sort-key="discardCount"> + <div class="header-cell-container"> + <div> + <div>Discard</div> + <div>Count</div> + </div> + </div> + </div></th> + <th data-sort-key="isAutoDiscardable"> + <div class="header-cell-container"> + <div> + <div>Auto</div> + <div>Discardable</div> + </div> + </div> + </th> + <th data-sort-key="lastActiveSeconds"> + <div class="header-cell-container"> + Last Active + </div> + </th> + <th> + <div class="header-cell-container"> + Actions + </div> + </th> + </tr> + </thead> + <tbody id="tab-discards-info-table-body"> + <template is="dom-repeat" + sort="[[computeSortFunction_(sortKey_, sortReverse_)]]" + items="[[tabInfos_]]"> + <tr> + <td>[[item.utilityRank]]</td> + <td>[[getReactivationScore_(item)]]</td> + <td>[[getSiteEngagementScore_(item)]]</td> + <td> + <div class="title-cell-container"> + <div class="favicon-div" + style$="[[getFavIconStyle_(item)]];"></div> + <div class="title-cell">[[item.title]]</div> + </div> + </td> + <td class="tab-url-cell">[[item.tabUrl]]</td> + <td>[[visibilityToString_(item.visibility)]]</td> + <td>[[loadingStateToString_(item.loadingState)]]</td> + <td>[[getLifeCycleState_(item)]]</td> + <td class="boolean-cell"> + <div>[[boolToString_(item.canFreeze)]]</div> + <div is="action-link" class="tooltip-container" + disabled$="[[!hasCannotFreezeReasons_(item)]]"> + [View Reason] + <div class="tooltip">[[cannotFreezeReasons_(item)]]</div> + </div> + </td> + <td class="boolean-cell"> + <div>[[boolToString_(item.canDiscard)]]</div> + <div is="action-link" class="tooltip-container" + disabled$="[[!hasCannotDiscardReasons_(item)]]"> + [View Reason] + <div class="tooltip">[[cannotDiscardReasons_(item)]]</div> + </div> + </td> + <td>[[item.discardCount]]</td> + <td class="boolean-cell"> + <div>[[boolToString_(item.isAutoDiscardable)]]</div> + <div is="action-link" class="is-auto-discardable-link" + on-click="toggleAutoDiscardable_"> + [Toggle] + </div> + </td> + <td class="last-active-cell"> + [[durationToString_(item.lastActiveSeconds)]] + </td> + <td class="actions-cell"> + <div is="action-link" on-click="loadTab_" + disabled$="[[!canLoad_(item)]]"> + [Load]</div> + <div is="action-link" on-click="freezeTab_" + disabled$="[[!canFreeze_(item)]]">[Freeze]</div> + <div is="action-link" on-click="discardTab_" + disabled$="[[!canDiscard_(item)]]">[Discard]</div> + <div is="action-link" on-click="urgentDiscardTab_" + disabled$="[[!canDiscard_(item)]]"> + [Urgent Discard] + </div> + </td> + </tr> + </template> + </tbody> + </table> </div> - <div is="action-link" id="discard-now-urgent-link"> - [Urgent discard a tab now] - </div> - <table id="tab-discard-info-table"> - <thead> - <tr id="tab-discards-info-table-header"> - <th data-sort-key="utilityRank" class="sort-column"> - <div class="header-cell-container"> - <div> - <div>Utility</div> - <div>Rank<div> - </div> - </div> - </th> - <th data-sort-key="reactivationScore"> - <div class="header-cell-container"> - <div> - <div>Reactivation</div> - <div>Score</div> - </div> - </div> - </th> - <th data-sort-key="siteEngagementScore"> - <div class="header-cell-container"> - <div> - <div>Site</div> - <div>Engagement</div> - <div>Score</div> - </div> - </div> - </th> - <th data-sort-key="title"> - <div class="header-cell-container"> - Tab Title - </div> - </th> - <th data-sort-key="tabUrl"> - <div class="header-cell-container"> - Tab URL - </div> - </th> - <th data-sort-key="visibility"> - <div class="header-cell-container"> - Visibility - </div> - </th> - <th data-sort-key="loadingState"> - <div class="header-cell-container"> - Loading State - </div> - </th> - <th data-sort-key="state"> - <div class="header-cell-container"> - <div> - <div>Lifecycle</div> - <div>State</div> - </div> - </div> - </th> - <th data-sort-key="canFreeze"> - <div class="header-cell-container"> - <div> - <div>Can freeze?</div> - </div> - </div> - </th> - <th data-sort-key="canDiscard"> - <div class="header-cell-container"> - <div> - <div>Can discard?</div> - </div> - </div> - </th> - <th data-sort-key="discardCount"> - <div class="header-cell-container"> - <div> - <div>Discard</div> - <div>Count</div> - </div> - </div> - </div></th> - <th data-sort-key="isAutoDiscardable"> - <div class="header-cell-container"> - <div> - <div>Auto</div> - <div>Discardable</div> - </div> - </div> - </th> - <th data-sort-key="lastActiveSeconds"> - <div class="header-cell-container"> - Last Active - </div> - </th> - <th> - <div class="header-cell-container"> - Actions - </div> - </th> - </tr> - </thead> - <tbody id="tab-discards-info-table-body"> - </tbody> - </table> - <template id="tab-discard-info-row"> - <tr> - <td class="utility-rank-cell"></td> - <td class="reactivation-score-cell"></td> - <td class="site-engagement-score-cell"></td> - <td class="title-cell"> - <div class="title-cell-container"> - <div class="favicon-div"></div> - <div class="title-div"></div> - </div> - </td> - <td class="tab-url-cell"></td> - <td class="visibility-cell"></td> - <td class="loading-state-cell"></td> - <td class="state-cell"></td> - <td class="can-freeze-cell boolean-cell"> - <div class="can-freeze-div"></div> - <div is="action-link" class="tooltip-container can-freeze-link"> - [View Reason] - <div class="tooltip can-freeze-tooltip"></div> - </div> - </td> - <td class="can-discard-cell boolean-cell"> - <div class="can-discard-div"></div> - <div is="action-link" class="tooltip-container can-discard-link"> - [View Reason] - <div class="tooltip can-discard-tooltip"></div> - </div> - </td> - <td class="discard-count-cell"></td> - <td class="is-auto-discardable-cell boolean-cell"> - <div class="is-auto-discardable-div"></div> - <div is="action-link" class="is-auto-discardable-link"> - [Toggle] - </div> - </td> - <td class="last-active-cell"></td> - <td class="actions-cell"> - <div is="action-link" class="load-link">[Load]</div> - <div is="action-link" class="freeze-link">[Freeze]</div> - <div is="action-link" class="discard-link">[Discard]</div> - <div is="action-link" class="discard-urgent-link"> - [Urgent Discard] - </div> - </td> - </tr> - </template> - </div> -</div> + </template> + <script src="discards_tab.js"></script> +</dom-module> +
diff --git a/chrome/browser/resources/discards/discards_tab.js b/chrome/browser/resources/discards/discards_tab.js new file mode 100644 index 0000000..f377ad0 --- /dev/null +++ b/chrome/browser/resources/discards/discards_tab.js
@@ -0,0 +1,493 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +Polymer({ + is: 'discards-tab', + + properties: { + /** + * List of tabinfos. + * @private {?Array<!mojom.TabDiscardsInfo>} + */ + tabInfos_: { + type: Array, + }, + + /** + * The current sort key, exposed to allow dom-repeat to observe changes + * to it for re-sorting on changes. + */ + sortKey_: { + type: String, + value: 'utilityRank', + }, + + /** + * True if sorting in reverse, expowsed to allow dom-repeat to observe + * changes to it for re-sorting on changes. + */ + sortReverse_: { + type: Boolean, + value: false, + }, + }, + + /** @private The current update timer if any. */ + updateTimer_: 0, + + /** @private {(mojom.DiscardsDetailsProviderPtr|null)} */ + uiHandler_: null, + + /** @override */ + ready: function() { + this.uiHandler_ = discards.getOrCreateUiHandler(); + + this.updateTable_(); + }, + + /** + * Returns a sort function to compare tab infos based on the provided sort key + * and a boolean reverse flag. + * @param {string} sortKey The sort key for the returned function. + * @param {boolean} sortReverse True if sorting is reversed. + * @return {function({Object}, {Object}): number} + * A comparison function that compares two tab infos, returns + * negative number if a < b, 0 if a == b, and a positive + * number if a > b. + * @private + */ + computeSortFunction_: function(sortKey, sortReverse) { + return function(a, b) { + const comp = discards.compareTabDiscardsInfos(sortKey, a, b); + return sortReverse ? -comp : comp; + }; + }, + + /** + * Returns a string representation of a visibility enum value for display in + * a table. + * @param {mojom.LifecycleUnitVisibility} visibility A visibility value. + * @return {string} A string representation of the visibility. + * @private + */ + visibilityToString_: function(visibility) { + switch (visibility) { + case mojom.LifecycleUnitVisibility.HIDDEN: + return 'hidden'; + case mojom.LifecycleUnitVisibility.OCCLUDED: + return 'occluded'; + case mojom.LifecycleUnitVisibility.VISIBLE: + return 'visible'; + } + assertNotReached('Unknown visibility: ' + visibility); + }, + + /** + * Returns a string representation of a loading state enum value for display + * in a table. + * @param {mojom.LifecycleUnitLoadingState} loadingState A loading state + * value. + * @return {string} A string representation of the loading state. + * @private + */ + loadingStateToString_: function(loadingState) { + switch (loadingState) { + case mojom.LifecycleUnitLoadingState.UNLOADED: + return 'unloaded'; + case mojom.LifecycleUnitLoadingState.LOADING: + return 'loading'; + case mojom.LifecycleUnitLoadingState.LOADED: + return 'loaded'; + } + assertNotReached('Unknown loadingState: ' + loadingState); + }, + + /** + * Returns a string representation of a discard reason. + * @param {mojom.LifecycleUnitDiscardReason} reason The discard reason. + * @return {string} A string representation of the discarding reason. + * @private + */ + discardReasonToString_: function(reason) { + switch (reason) { + case mojom.LifecycleUnitDiscardReason.EXTERNAL: + return 'external'; + case mojom.LifecycleUnitDiscardReason.PROACTIVE: + return 'proactive'; + case mojom.LifecycleUnitDiscardReason.URGENT: + return 'urgent'; + } + assertNotReached('Unknown discard reason: ' + reason); + }, + + /** + * Returns a string representation of a lifecycle state. + * @param {mojom.LifecycleUnitState} state The lifecycle state. + * @param {mojom.LifecycleUnitDiscardReason} reason The discard reason. This + * is only used if the state is discard related. + * @param {mojom.LifecycleUnitVisibility} visibility A visibility value. + * @param {boolean} hasFocus Whether or not the tab has input focus. + * @return {string} A string representation of the lifecycle state, augmented + * with the discard reason if appropriate. + * @private + */ + lifecycleStateToString_: function(state, reason, visibility, hasFocus) { + const pageLifecycleStateFromVisibilityAndFocus = function() { + switch (visibility) { + case mojom.LifecycleUnitVisibility.HIDDEN: + case mojom.LifecycleUnitVisibility.OCCLUDED: + // An occluded page is also considered hidden. + return 'hidden'; + case mojom.LifecycleUnitVisibility.VISIBLE: + return hasFocus ? 'active' : 'passive'; + } + assertNotReached('Unknown visibility: ' + visibility); + }; + + switch (state) { + case mojom.LifecycleUnitState.ACTIVE: + return pageLifecycleStateFromVisibilityAndFocus(); + case mojom.LifecycleUnitState.THROTTLED: + return pageLifecycleStateFromVisibilityAndFocus() + ' (throttled)'; + case mojom.LifecycleUnitState.PENDING_FREEZE: + return pageLifecycleStateFromVisibilityAndFocus() + ' (pending frozen)'; + case mojom.LifecycleUnitState.FROZEN: + return 'frozen'; + case mojom.LifecycleUnitState.PENDING_DISCARD: + return pageLifecycleStateFromVisibilityAndFocus() + + ' (pending discard (' + this.discardReasonToString_(reason) + '))'; + case mojom.LifecycleUnitState.DISCARDED: + return 'discarded (' + this.discardReasonToString_(reason) + ')'; + case mojom.LifecycleUnitState.PENDING_UNFREEZE: + return 'frozen (pending unfreeze)'; + } + assertNotReached('Unknown lifecycle state: ' + state); + }, + + /** + * Dispatches a request to update tabInfos_. + * @private + */ + updateTableImpl_: function() { + this.uiHandler_.getTabDiscardsInfo().then(response => { + this.tabInfos_ = response.infos; + }); + }, + + /** + * A wrapper to updateTableImpl_ that is called due to user action and not + * due to the automatic timer. Cancels the existing timer and reschedules it + * after rendering instantaneously. + * @private + */ + updateTable_: function() { + if (this.updateTimer_) + clearInterval(this.updateTimer_); + this.updateTableImpl_(); + this.updateTimer_ = setInterval(this.updateTableImpl_.bind(this), 1000); + }, + + /** + * Formats an items reactivation for display. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {string} The formatted reactivation score. + * @private + */ + getReactivationScore_: function(item) { + return item.hasReactivationScore ? item.reactivationScore.toFixed(4) : + 'N/A'; + }, + + /** + * Formats an items site engagement score for display. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {string} The formatted site engagemetn score. + * @private + */ + getSiteEngagementScore_: function(item) { + return item.siteEngagementScore.toFixed(1); + }, + + /** + * Retrieves favicon style tag value for an item. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {string} A style to retrieve and display the item's favicon. + * @private + */ + getFavIconStyle_: function(item) { + return 'background-image:' + cr.icon.getFavicon(item.tabUrl); + }, + + /** + * Formats an items lifecycle state for display. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {string} A human readable lifecycle state. + * @private + */ + getLifeCycleState_: function(item) { + if (item.loadingState != mojom.LifecycleUnitLoadingState.UNLOADED || + item.discardCount > 0) { + return this.lifecycleStateToString_( + item.state, item.discardReason, item.visibility, item.hasFocus); + } else { + return ''; + } + }, + + /** + * Returns a string representation of a boolean value for display in a table. + * @param {boolean} value A boolean value. + * @return {string} A string representing the bool. + * @private + */ + boolToString_: function(value) { + return discards.boolToString(value); + }, + + /** + * Converts a |secondsAgo| duration to a user friendly string. + * @param {number} secondsAgo The duration to render. + * @return {string} An English string representing the duration. + * @private + */ + durationToString_: function(secondsAgo) { + return discards.durationToString(secondsAgo); + }, + + /** + * Tests whether an item has reasons why it cannot be frozen. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {boolean} true iff there are reasons why the item cannot be frozen. + * @private + */ + hasCannotFreezeReasons_: function(item) { + return item.cannotFreezeReasons.length != 0; + }, + + /** + * Returns a string with the reasons an item cannot be frozen, for display in + * a tooltip. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {string} A string with the reasons. + * @private + */ + cannotFreezeReasons_: function(item) { + return item.cannotFreezeReasons.join('<br />'); + }, + + /** + * Tests whether an item has reasons why it cannot be discarded. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {boolean} true iff there are reasons why the item cannot be + * discarded. + * @private + */ + hasCannotDiscardReasons_: function(item) { + return item.cannotDiscardReasons.length != 0; + }, + + /** + * Returns a string with the reasons an item cannot be discarded, for display + * in a tooltip. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {string} A string with the reasons. + * @private + */ + cannotDiscardReasons_: function(item) { + return item.cannotDiscardReasons.join('<br />'); + }, + + /** + * Sets a new sort key for this item, or toggles the sorting order if called + * with the current sort key. + * @param {string} sortKey The new sort key. + * @private + */ + setSortKey_: function(sortKey) { + if (this.sortKey_ == sortKey) + this.sortReverse_ = !this.sortReverse_; + else + this.sortKey_ = sortKey; + }, + + /** + * Tests whether an item can be loaded. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {boolean} true iff the item can be loaded. + * @private + */ + canLoad_: function(item) { + return item.loadingState == mojom.LifecycleUnitLoadingState.UNLOADED; + }, + + /** + * Tests whether an item can be frozen. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {boolean} true iff the item can be frozen. + * @private + */ + canFreeze_: function(item) { + if (item.visibility == mojom.LifecycleUnitVisibility.HIDDEN || + item.visibility == mojom.LifecycleUnitVisibility.OCCLUDED) { + // Only tabs that aren't visible can be frozen for now. + switch (item.state) { + case mojom.LifecycleUnitState.DISCARDED: + case mojom.LifecycleUnitState.PENDING_DISCARD: + case mojom.LifecycleUnitState.FROZEN: + case mojom.LifecycleUnitState.PENDING_FREEZE: + return false; + } + return true; + } + return false; + }, + + /** + * Tests whether an item can be discarded. + * @param {mojom.TabDiscardsInfo} item The item in question. + * @return {boolean} true iff the item can be discarded. + * @private + */ + canDiscard_: function(item) { + if (item.visibility == mojom.LifecycleUnitVisibility.HIDDEN || + item.visibility == mojom.LifecycleUnitVisibility.OCCLUDED) { + // Only tabs that aren't visible can be discarded for now. + switch (item.state) { + case mojom.LifecycleUnitState.DISCARDED: + case mojom.LifecycleUnitState.PENDING_DISCARD: + return false; + } + return true; + } + return false; + }, + + /** + * Invoked when the table header is tapped, sets a new sort key and updates + * element styles to present the new sort key. + * @param {Event} e The event. + * @private + */ + onHeaderClick_: function(e) { + // Find the sortKey of the clicked header by walking up the path, looking + // for an element with a sortKey. + /** + * A sort key header element. + * @typedef {{ + * dataset: { + * sortKey: string + * }, + * }} + */ + let newElement = null; + for (let i = 0; i < e.path.length; ++i) { + if (e.path[i].dataset.sortKey) { + newElement = e.path[i]; + break; + } + } + + // Remove the presentation styles on the old sort header. + const target = e.currentTarget; + let oldElement = target.querySelector('.sort-column'); + if (oldElement) { + oldElement.classList.remove('sort-column'); + } else { + oldElement = target.querySelector('.sort-column-reverse'); + oldElement.classList.remove('sort-column-reverse'); + } + + // Update the sort key and the styles on the new sort header. + this.setSortKey_(newElement.dataset.sortKey); + const newClass = this.sortReverse_ ? 'sort-column-reverse' : 'sort-column'; + newElement.classList.add(newClass); + }, + + /** + * Event handler that toggles the auto discardable flag on an item. + * @param {Event} e The event. + * @private + */ + toggleAutoDiscardable_: function(e) { + const item = e.model.item; + this.uiHandler_.setAutoDiscardable(item.id, !item.isAutoDiscardable) + .then(this.updateTable_.bind(this)); + }, + + /** + * Event handler that loads a tab. + * @param {Event} e The event. + * @private + */ + loadTab_: function(e) { + this.uiHandler_.loadById(e.model.item.id); + }, + + /** + * Event handler that freezes a tab. + * @param {Event} e The event. + * @private + */ + freezeTab_: function(e) { + this.uiHandler_.freezeById(e.model.item.id); + }, + + /** + * Implementation function for tab discarding. + * @param {Event} e The event. + * @param {boolean} urgent True if tab should be urgently discarded. + * @private + */ + discardTabImpl_: function(e, urgent) { + this.uiHandler_.discardById(e.model.item.id, urgent) + .then(this.updateTable_.bind(this)); + }, + + /** + * Event handler that discards a given tab. + * @param {Event} e The event. + * @private + */ + discardTab_: function(e) { + this.discardTabImpl_(e, false); + }, + + /** + * Event handler that discards a given tab urgently. + * @param {Event} e The event. + * @private + */ + urgentDiscardTab_: function(e) { + this.discardTabImpl_(e, true); + }, + + /** + * Implementation function to discard the next discardable tab. + * @param {boolean} urgent True if tab should be urgently discarded. + * @private + */ + discardImpl_: function(urgent) { + this.uiHandler_.discard(urgent).then(() => { + this.updateTable_(); + }); + }, + + /** + * Event handler that discards the next discardable tab. + * @param {Event} e The event. + * @private + */ + discardNow_: function(e) { + this.discardImpl_(false); + }, + + /** + * Event handler that discards the next discardable tab urgently. + * @param {Event} e The event. + * @private + */ + discardUrgentNow_: function(e) { + this.discardImpl_(true); + }, +});
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc index 2e4acce..ab5983e 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.cc
@@ -555,6 +555,10 @@ case BubbleType::INACTIVE: NOTREACHED(); } + + if (observer_for_testing_) { + observer_for_testing_->OnBubbleShown(); + } } void SaveCardBubbleControllerImpl::UpdateIcon() {
diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h index c7f9a56..6ece42e 100644 --- a/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl.h
@@ -31,6 +31,13 @@ public content::WebContentsObserver, public content::WebContentsUserData<SaveCardBubbleControllerImpl> { public: + // An observer class used by browsertests that gets notified whenever + // particular actions occur. + class ObserverForTest { + public: + virtual void OnBubbleShown() = 0; + }; + ~SaveCardBubbleControllerImpl() override; // Sets up the controller for local save and shows the bubble. @@ -123,6 +130,7 @@ private: friend class content::WebContentsUserData<SaveCardBubbleControllerImpl>; + friend class SaveCardBubbleViewsBrowserTestBase; void FetchAccountInfo(); @@ -133,6 +141,11 @@ void OpenUrl(const GURL& url); + // For testing. + void SetEventObserverForTesting(ObserverForTest* observer) { + observer_for_testing_ = observer; + } + // The web_contents associated with this controller. content::WebContents* web_contents_; @@ -190,6 +203,9 @@ // The security level for the current context. security_state::SecurityLevel security_level_; + // Observer for when a bubble is created. Initialized only during tests. + ObserverForTest* observer_for_testing_ = nullptr; + DISALLOW_COPY_AND_ASSIGN(SaveCardBubbleControllerImpl); };
diff --git a/chrome/browser/ui/views/autofill/dialog_view_ids.h b/chrome/browser/ui/views/autofill/dialog_view_ids.h index d76f6d3..4f298d5 100644 --- a/chrome/browser/ui/views/autofill/dialog_view_ids.h +++ b/chrome/browser/ui/views/autofill/dialog_view_ids.h
@@ -22,6 +22,9 @@ SIGN_IN_PROMO_VIEW, // Contains the sign-in promo view MANAGE_CARDS_VIEW, // The manage cards view + // The sub-view that contains the sign-in button in the promo. + SIGN_IN_VIEW, + // The following are views::LabelButton objects (clickable). OK_BUTTON, // Can say [Save], [Next], [Confirm], // or [Done] depending on context
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc index 13b5bbc..54005152 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views.cc
@@ -205,9 +205,10 @@ return view; } -void SaveCardBubbleViews::SetFootnoteViewForTesting( - views::View* footnote_view) { +void SaveCardBubbleViews::InitFootnoteView(views::View* footnote_view) { + DCHECK(!footnote_view_); footnote_view_ = footnote_view; + footnote_view_->set_id(DialogViewId::FOOTNOTE_VIEW); } void SaveCardBubbleViews::AssignIdsToDialogClientView() {
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views.h b/chrome/browser/ui/views/autofill/save_card_bubble_views.h index 008c1c0f..692015bb 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views.h +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views.h
@@ -83,8 +83,8 @@ // footnote. virtual std::unique_ptr<views::View> CreateMainContentView(); - // Set the footnote view so that its accessible for testing. - void SetFootnoteViewForTesting(views::View* footnote_view); + // Called by sub-classes to initialize |footnote_view_|. + virtual void InitFootnoteView(views::View* footnote_view); SaveCardBubbleController* controller() { return controller_; @@ -101,11 +101,7 @@ ~SaveCardBubbleViews() override; private: - FRIEND_TEST_ALL_PREFIXES(SaveCardBubbleViewsFullFormBrowserTest, - Upload_ClickingCloseClosesBubble); - FRIEND_TEST_ALL_PREFIXES( - SaveCardBubbleViewsFullFormBrowserTest, - Upload_DecliningUploadDoesNotLogUserAcceptedCardOriginUMA); + friend class SaveCardBubbleViewsBrowserTestBase; views::View* footnote_view_ = nullptr;
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc index 053d17c..21d9b8c 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest.cc
@@ -2,10 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <memory> #include <string> #include "base/strings/utf_string_conversions.h" #include "base/test/metrics/histogram_tester.h" +#include "base/test/metrics/user_action_tester.h" #include "chrome/browser/ui/autofill/save_card_bubble_controller_impl.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" @@ -13,6 +15,7 @@ #include "chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.h" #include "components/autofill/core/browser/autofill_experiments.h" #include "components/autofill/core/common/autofill_features.h" +#include "components/signin/core/browser/signin_buildflags.h" #include "content/public/test/browser_test_utils.h" #include "net/url_request/test_url_fetcher_factory.h" #include "ui/views/bubble/bubble_frame_view.h" @@ -21,6 +24,14 @@ #include "ui/views/controls/textfield/textfield.h" #include "ui/views/window/dialog_client_view.h" +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +#include "chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h" +#endif + +#if defined(OS_CHROMEOS) +#include "chrome/browser/ui/settings_window_manager_chromeos.h" +#endif + using base::Bucket; using testing::ElementsAre; @@ -94,17 +105,24 @@ // Clicking [Save] should accept and close it. base::HistogramTester histogram_tester; + base::UserActionTester user_action_tester; ClickOnDialogViewWithIdAndWait(DialogViewId::OK_BUTTON); // UMA should have recorded bubble acceptance. histogram_tester.ExpectUniqueSample( "Autofill.SaveCreditCardPrompt.Local.FirstShow", AutofillMetrics::SAVE_CARD_PROMPT_END_ACCEPTED, 1); - // The sign-in promo should not be shown because the experiment is disabled. - // TODO(crbug/855186): Add test that checks that sign-in promo is not showing. + + // No bubble should be showing and no sign-in impression should have been + // recorded. + EXPECT_EQ(nullptr, GetSaveCardBubbleViews()); + EXPECT_FALSE(GetSaveCardIconView()->visible()); + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Signin_Impression_FromSaveCardBubble")); } // Tests the sign in promo bubble. Ensures that clicking the [Save] button // on the local save bubble successfully causes the sign in promo to show. +#if !defined(OS_CHROMEOS) IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, Local_ClickingSaveShowsSigninPromo) { // Enable the sign-in promo. @@ -126,11 +144,24 @@ EXPECT_TRUE( FindViewInBubbleById(DialogViewId::MAIN_CONTENT_VIEW_LOCAL)->visible()); + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + // Click [Save] should close the offer-to-save bubble // and pop up the sign-in promo. - // TODO(crbug/855186): Add test that checks that sign-in promo shows after - // clicking save. + base::UserActionTester user_action_tester; + ClickOnDialogViewWithId(DialogViewId::OK_BUTTON); + WaitForObservedEvent(); + + // Sign-in promo should be showing and user actions should have recorded + // impression. + EXPECT_TRUE( + FindViewInBubbleById(DialogViewId::SIGN_IN_PROMO_VIEW)->visible()); } +#endif // Tests the sign in promo bubble. Ensures that the sign-in promo // is not shown when the user is signed-in and syncing, even if @@ -161,11 +192,381 @@ // Click [Save] should close the offer-to-save bubble // but no sign-in promo should show because user is signed in. + base::UserActionTester user_action_tester; ClickOnDialogViewWithIdAndWait(DialogViewId::OK_BUTTON); - // TODO(crbug/855186): Add test that checks that sign-in promo - // is not showing. + + // No bubble should be showing and no sign-in impression should have been + // recorded. + EXPECT_EQ(nullptr, GetSaveCardBubbleViews()); + EXPECT_EQ(0, user_action_tester.GetActionCount( + "Signin_Impression_FromSaveCardBubble")); } +// Tests the sign in promo bubble. Ensures that signin impression is recorded +// when promo is shown. +#if !defined(OS_CHROMEOS) +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_Metrics_SigninImpressionSigninPromo) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + + // Click [Save] should close the offer-to-save bubble + // and pop up the sign-in promo. + base::UserActionTester user_action_tester; + ClickOnDialogViewWithId(DialogViewId::OK_BUTTON); + WaitForObservedEvent(); + + // User actions should have recorded impression. + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_Impression_FromSaveCardBubble")); +} +#endif + +// Tests the sign in promo bubble. Ensures that signin action is recorded when +// user accepts promo. +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_Metrics_AcceptingSigninPromo) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + + // Click [Save] should close the offer-to-save bubble + // and pop up the sign-in promo. + base::UserActionTester user_action_tester; + ClickOnDialogViewWithId(DialogViewId::OK_BUTTON); + WaitForObservedEvent(); + + // Click on [Sign in] button. + ClickOnDialogView(static_cast<DiceBubbleSyncPromoView*>( + FindViewInBubbleById(DialogViewId::SIGN_IN_VIEW)) + ->GetSigninButtonForTesting()); + + // User actions should have recorded impression and click. + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_Impression_FromSaveCardBubble")); + EXPECT_EQ( + 1, user_action_tester.GetActionCount("Signin_Signin_FromSaveCardBubble")); +} +#endif + +// Tests the manage cards bubble. Ensures that it shows up by clicking the +// credit card icon. +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_ClickingIconShowsManageCards) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + +#if !defined(OS_CHROMEOS) + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); +#endif + + // Click [Save] should close the offer-to-save bubble and show "Card saved" + // animation -- followed by the sign-in promo (if not on Chrome OS). + ClickOnDialogViewWithIdAndWait(DialogViewId::OK_BUTTON); + +#if !defined(OS_CHROMEOS) + // Wait for and then close the promo. + WaitForObservedEvent(); + ClickOnCloseButton(); +#endif + + // Open up Manage Cards prompt. + base::HistogramTester histogram_tester; + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + ClickOnView(GetSaveCardIconView()); + WaitForObservedEvent(); + + // Bubble should be showing. + EXPECT_TRUE(FindViewInBubbleById(DialogViewId::MANAGE_CARDS_VIEW)->visible()); + histogram_tester.ExpectUniqueSample("Autofill.ManageCardsPrompt.Local", + AutofillMetrics::MANAGE_CARDS_SHOWN, 1); +} + +// Tests the manage cards bubble. Ensures that clicking the [Manage cards] +// button redirects properly. +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_ManageCardsButtonRedirects) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + +#if !defined(OS_CHROMEOS) + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); +#endif + + // Click [Save] should close the offer-to-save bubble and show "Card saved" + // animation -- followed by the sign-in promo (if not on Chrome OS). + ClickOnDialogViewWithIdAndWait(DialogViewId::OK_BUTTON); + +#if !defined(OS_CHROMEOS) + // Wait for and then close the promo. + WaitForObservedEvent(); + ClickOnCloseButton(); +#endif + + // Open up Manage Cards prompt. + base::HistogramTester histogram_tester; + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + ClickOnView(GetSaveCardIconView()); + WaitForObservedEvent(); + + // Click on the redirect button. + ClickOnDialogViewWithId(DialogViewId::MANAGE_CARDS_BUTTON); + +#if defined(OS_CHROMEOS) + // ChromeOS should have opened up the settings window. + EXPECT_TRUE( + chrome::SettingsWindowManager::GetInstance()->FindBrowserForProfile( + browser()->profile())); +#else + // Otherwise, another tab should have opened. + EXPECT_EQ(2, browser()->tab_strip_model()->count()); +#endif + + // Metrics should have been recorded correctly. + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1), + Bucket(AutofillMetrics::MANAGE_CARDS_MANAGE_CARDS, 1))); +} + +// Tests the manage cards bubble. Ensures that clicking the [Done] +// button closes the bubble. +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_ManageCardsDoneButtonClosesBubble) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + +#if !defined(OS_CHROMEOS) + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); +#endif + + // Click [Save] should close the offer-to-save bubble and show "Card saved" + // animation -- followed by the sign-in promo (if not on Chrome OS). + ClickOnDialogViewWithIdAndWait(DialogViewId::OK_BUTTON); + +#if !defined(OS_CHROMEOS) + // Wait for and then close the promo. + WaitForObservedEvent(); + ClickOnCloseButton(); +#endif + + // Open up Manage Cards prompt. + base::HistogramTester histogram_tester; + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + ClickOnView(GetSaveCardIconView()); + WaitForObservedEvent(); + + // Click on the [Done] button. + ClickOnDialogViewWithIdAndWait(DialogViewId::OK_BUTTON); + + // No bubble should be showing now and metrics should be recorded correctly. + EXPECT_EQ(nullptr, GetSaveCardBubbleViews()); + EXPECT_THAT( + histogram_tester.GetAllSamples("Autofill.ManageCardsPrompt.Local"), + ElementsAre(Bucket(AutofillMetrics::MANAGE_CARDS_SHOWN, 1), + Bucket(AutofillMetrics::MANAGE_CARDS_DONE, 1))); +} + +// Tests the manage cards bubble. Ensures that sign-in impression is recorded +// correctly. +#if !defined(OS_CHROMEOS) +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_Metrics_SigninImpressionManageCards) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + + // Click [Save] should close the offer-to-save bubble + // and pop up the sign-in promo. + base::UserActionTester user_action_tester; + ClickOnDialogViewWithId(DialogViewId::OK_BUTTON); + WaitForObservedEvent(); + + // Close promo. + ClickOnCloseButton(); + + // Open up Manage Cards prompt. + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + ClickOnView(GetSaveCardIconView()); + WaitForObservedEvent(); + + // User actions should have recorded impression. + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_Impression_FromManageCardsBubble")); +} +#endif + +// Tests the Manage Cards bubble. Ensures that signin action is recorded when +// user accepts footnote promo. +#if BUILDFLAG(ENABLE_DICE_SUPPORT) +IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, + Local_Metrics_AcceptingFootnotePromoManageCards) { + // Enable the sign-in promo. + scoped_feature_list_.InitAndEnableFeature( + features::kAutofillSaveCardSignInAfterLocalSave); + + // Set up the Payments RPC. + SetUploadDetailsRpcPaymentsDeclines(); + + // Submitting the form and having Payments decline offering to save should + // show the local save bubble. + // (Must wait for response from Payments before accessing the controller.) + ResetEventWaiterForSequence( + {DialogEvent::REQUESTED_UPLOAD_SAVE, + DialogEvent::RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, + DialogEvent::OFFERED_LOCAL_SAVE}); + FillAndSubmitForm(); + WaitForObservedEvent(); + + // Adding an event observer to the controller so we can wait for the bubble to + // show. + AddEventObserverToController(); + ReduceAnimationTime(); + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + + // Click [Save] should close the offer-to-save bubble + // and pop up the sign-in promo. + base::UserActionTester user_action_tester; + ClickOnDialogViewWithId(DialogViewId::OK_BUTTON); + WaitForObservedEvent(); + + // Close promo. + ClickOnCloseButton(); + + // Open up Manage Cards prompt. + ResetEventWaiterForSequence({DialogEvent::BUBBLE_SHOWN}); + ClickOnView(GetSaveCardIconView()); + WaitForObservedEvent(); + + // Click on [Sign in] button in footnote. + ClickOnDialogView(static_cast<DiceBubbleSyncPromoView*>( + FindViewInBubbleById(DialogViewId::FOOTNOTE_VIEW)) + ->GetSigninButtonForTesting()); + + // User actions should have recorded impression and click. + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_Impression_FromManageCardsBubble")); + EXPECT_EQ(1, user_action_tester.GetActionCount( + "Signin_Signin_FromManageCardsBubble")); +} +#endif + // Tests the local save bubble. Ensures that the Harmony version of the bubble // does not have a [No thanks] button (it has an [X] Close button instead.) IN_PROC_BROWSER_TEST_F(SaveCardBubbleViewsFullFormBrowserTest, @@ -300,8 +701,7 @@ // Clicking the [X] close button should dismiss the bubble. base::HistogramTester histogram_tester; - ClickOnDialogViewAndWait( - GetSaveCardBubbleViews()->GetBubbleFrameView()->GetCloseButtonForTest()); + ClickOnCloseButton(); } // Tests the upload save bubble. Ensures that the bubble does not surface the @@ -814,8 +1214,7 @@ EXPECT_TRUE(FindViewInBubbleById(DialogViewId::FOOTNOTE_VIEW)->visible()); // Clicking the [X] close button should dismiss the bubble. - ClickOnDialogViewAndWait( - GetSaveCardBubbleViews()->GetBubbleFrameView()->GetCloseButtonForTest()); + ClickOnCloseButton(); // Ensure that UMA was logged correctly. histogram_tester.ExpectUniqueSample(
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.cc b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.cc index 841ee5e8..86cfa810 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.cc +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.cc
@@ -7,6 +7,7 @@ #include <list> #include <memory> #include <string> +#include <utility> #include "chrome/browser/signin/account_fetcher_service_factory.h" #include "chrome/browser/signin/account_tracker_service_factory.h" @@ -16,9 +17,13 @@ #include "chrome/browser/ui/autofill/chrome_autofill_client.h" #include "chrome/browser/ui/autofill/save_card_bubble_controller_impl.h" #include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/location_bar/location_bar.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/views/autofill/dialog_view_ids.h" #include "chrome/browser/ui/views/autofill/save_card_bubble_views.h" +#include "chrome/browser/ui/views/autofill/save_card_icon_view.h" +#include "chrome/browser/ui/views/location_bar/location_bar_view.h" #include "chrome/test/base/ui_test_utils.h" #include "components/autofill/content/browser/content_autofill_driver.h" #include "components/autofill/core/browser/credit_card_save_manager.h" @@ -134,6 +139,11 @@ event_waiter_->OnEvent(DialogEvent::SENT_UPLOAD_CARD_REQUEST); } +void SaveCardBubbleViewsBrowserTestBase::OnBubbleShown() { + if (event_waiter_) + event_waiter_->OnEvent(DialogEvent::BUBBLE_SHOWN); +} + void SaveCardBubbleViewsBrowserTestBase::SetUpInProcessBrowserTestFixture() { will_create_browser_context_services_subscription_ = BrowserContextDependencyManager::GetInstance() @@ -336,6 +346,18 @@ net::HTTP_INTERNAL_SERVER_ERROR); } +void SaveCardBubbleViewsBrowserTestBase::ClickOnView(views::View* view) { + DCHECK(view); + ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), + ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, + ui::EF_LEFT_MOUSE_BUTTON); + view->OnMousePressed(pressed); + ui::MouseEvent released_event = ui::MouseEvent( + ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), + ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); + view->OnMouseReleased(released_event); +} + void SaveCardBubbleViewsBrowserTestBase::ClickOnDialogView(views::View* view) { GetSaveCardBubbleViews() ->GetDialogClientView() @@ -346,16 +368,7 @@ ->non_client_view() ->frame_view()); bubble_frame_view->ResetViewShownTimeStampForTesting(); - - DCHECK(view); - ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), - ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, - ui::EF_LEFT_MOUSE_BUTTON); - view->OnMousePressed(pressed); - ui::MouseEvent released_event = ui::MouseEvent( - ui::ET_MOUSE_RELEASED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), - ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); - view->OnMouseReleased(released_event); + ClickOnView(view); } void SaveCardBubbleViewsBrowserTestBase::ClickOnDialogViewAndWait( @@ -407,6 +420,13 @@ return specified_view; } +void SaveCardBubbleViewsBrowserTestBase::ClickOnCloseButton() { + SaveCardBubbleViews* save_card_bubble_views = GetSaveCardBubbleViews(); + DCHECK(save_card_bubble_views); + ClickOnDialogViewAndWait( + save_card_bubble_views->GetBubbleFrameView()->GetCloseButtonForTest()); +} + SaveCardBubbleViews* SaveCardBubbleViewsBrowserTestBase::GetSaveCardBubbleViews() { SaveCardBubbleControllerImpl* save_card_bubble_controller_impl = @@ -420,11 +440,31 @@ return static_cast<SaveCardBubbleViews*>(save_card_bubble_view); } +SaveCardIconView* SaveCardBubbleViewsBrowserTestBase::GetSaveCardIconView() { + if (!browser()) + return nullptr; + LocationBarView* location_bar_view = + static_cast<LocationBarView*>(browser()->window()->GetLocationBar()); + DCHECK(location_bar_view->save_credit_card_icon_view()); + return location_bar_view->save_credit_card_icon_view(); +} + content::WebContents* SaveCardBubbleViewsBrowserTestBase::GetActiveWebContents() { return browser()->tab_strip_model()->GetActiveWebContents(); } +void SaveCardBubbleViewsBrowserTestBase::AddEventObserverToController() { + SaveCardBubbleControllerImpl* save_card_bubble_controller_impl = + SaveCardBubbleControllerImpl::FromWebContents(GetActiveWebContents()); + DCHECK(save_card_bubble_controller_impl); + save_card_bubble_controller_impl->SetEventObserverForTesting(this); +} + +void SaveCardBubbleViewsBrowserTestBase::ReduceAnimationTime() { + GetSaveCardIconView()->ReduceAnimationTimeForTesting(); +} + void SaveCardBubbleViewsBrowserTestBase::ResetEventWaiterForSequence( std::list<DialogEvent> event_sequence) { event_waiter_ =
diff --git a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.h b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.h index 4c8e110..481d931 100644 --- a/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.h +++ b/chrome/browser/ui/views/autofill/save_card_bubble_views_browsertest_base.h
@@ -13,8 +13,10 @@ #include "base/command_line.h" #include "base/macros.h" #include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/autofill/save_card_bubble_controller_impl.h" #include "chrome/browser/ui/views/autofill/dialog_view_ids.h" #include "chrome/browser/ui/views/autofill/save_card_bubble_views.h" +#include "chrome/browser/ui/views/autofill/save_card_icon_view.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/autofill/core/browser/credit_card_save_manager.h" #include "components/autofill/core/browser/test_event_waiter.h" @@ -36,7 +38,8 @@ // need to show and interact with the offer-to-save bubble. class SaveCardBubbleViewsBrowserTestBase : public InProcessBrowserTest, - public CreditCardSaveManager::ObserverForTest { + public CreditCardSaveManager::ObserverForTest, + public SaveCardBubbleControllerImpl::ObserverForTest { public: // Various events that can be waited on by the DialogEventWaiter. enum DialogEvent : int { @@ -44,6 +47,7 @@ REQUESTED_UPLOAD_SAVE, RECEIVED_GET_UPLOAD_DETAILS_RESPONSE, SENT_UPLOAD_CARD_REQUEST, + BUBBLE_SHOWN }; protected: @@ -63,6 +67,9 @@ void OnReceivedGetUploadDetailsResponse() override; void OnSentUploadCardRequest() override; + // SaveCardBubbleControllerImpl::ObserverForTest: + void OnBubbleShown() override; + // BrowserTestBase: void SetUpInProcessBrowserTestFixture() override; @@ -90,9 +97,12 @@ void SetUploadDetailsRpcServerError(); // Clicks on the given views::View*. + void ClickOnView(views::View* view); + + // Clicks on the given dialog views::View*. void ClickOnDialogView(views::View* view); - // Clicks on the given views::View* and waits for the dialog to close. + // Clicks on the given dialog views::View* and waits for the dialog to close. void ClickOnDialogViewAndWait(views::View* view); // Clicks on a view from within the dialog. @@ -104,11 +114,26 @@ // Returns the views::View* that was previously assigned the id |view_id|. views::View* FindViewInBubbleById(DialogViewId view_id); + // Assert that there is a SaveCardBubbleViews bubble open, then click on the + // [X] button. + void ClickOnCloseButton(); + // Gets the views::View* instance of the save credit card bubble. SaveCardBubbleViews* GetSaveCardBubbleViews(); + // Gets the views::View* instance of the credit card icon. + SaveCardIconView* GetSaveCardIconView(); + content::WebContents* GetActiveWebContents(); + // Adding an observer to the controller so we know when the sign-in promo + // shows after the animation. + void AddEventObserverToController(); + + // Reduces the animation time to one millisecond so that the test does not + // take long. + void ReduceAnimationTime(); + // Resets the event waiter for a given |event_sequence|. void ResetEventWaiterForSequence(std::list<DialogEvent> event_sequence); // Wait for the event(s) passed to ResetEventWaiter*() to occur.
diff --git a/chrome/browser/ui/views/autofill/save_card_icon_view.h b/chrome/browser/ui/views/autofill/save_card_icon_view.h index 409d85ed..9fd90f1 100644 --- a/chrome/browser/ui/views/autofill/save_card_icon_view.h +++ b/chrome/browser/ui/views/autofill/save_card_icon_view.h
@@ -38,6 +38,8 @@ const gfx::VectorIcon& GetVectorIcon() const override; private: + friend class SaveCardBubbleViewsBrowserTestBase; + SaveCardBubbleControllerImpl* GetController() const; // gfx::AnimationDelegate:
diff --git a/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc index 6891ab9e..80a01bf 100644 --- a/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_manage_cards_bubble_views.cc
@@ -35,7 +35,7 @@ if (!controller()->ShouldShowSignInPromo()) return nullptr; - views::View* footnote_view_ = nullptr; + views::View* promo_view = nullptr; Profile* profile = controller()->GetProfile(); sync_promo_delegate_ = @@ -44,7 +44,7 @@ signin_metrics::AccessPoint::ACCESS_POINT_MANAGE_CARDS_BUBBLE); if (AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)) { #if BUILDFLAG(ENABLE_DICE_SUPPORT) - footnote_view_ = new DiceBubbleSyncPromoView( + promo_view = new DiceBubbleSyncPromoView( profile, sync_promo_delegate_.get(), signin_metrics::AccessPoint::ACCESS_POINT_MANAGE_CARDS_BUBBLE, IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE, IDS_AUTOFILL_SYNC_PROMO_MESSAGE, @@ -53,15 +53,15 @@ NOTREACHED(); #endif } else { - footnote_view_ = new BubbleSyncPromoView( + promo_view = new BubbleSyncPromoView( sync_promo_delegate_.get(), signin_metrics::AccessPoint::ACCESS_POINT_MANAGE_CARDS_BUBBLE, IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED, IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED); } - SetFootnoteViewForTesting(footnote_view_); - return footnote_view_; + InitFootnoteView(promo_view); + return promo_view; } views::View* SaveCardManageCardsBubbleViews::CreateExtraView() {
diff --git a/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.cc index 78c721ba..d7a89ab 100644 --- a/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/ui/views/autofill/save_card_offer_bubble_views.h" +#include <memory> + #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/app/vector_icons/vector_icons.h" @@ -56,12 +58,11 @@ if (controller()->GetLegalMessageLines().empty()) return nullptr; - footnote_view_ = + legal_message_view_ = new LegalMessageView(controller()->GetLegalMessageLines(), this); - footnote_view_->set_id(DialogViewId::FOOTNOTE_VIEW); - SetFootnoteViewForTesting(footnote_view_); - return footnote_view_; + InitFootnoteView(legal_message_view_); + return legal_message_view_; } bool SaveCardOfferBubbleViews::Accept() { @@ -101,7 +102,7 @@ if (!controller()) return; - footnote_view_->OnLinkClicked(label, range, web_contents_); + legal_message_view_->OnLinkClicked(label, range, web_contents_); } void SaveCardOfferBubbleViews::ContentsChanged(
diff --git a/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.h b/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.h index b68ee32..fe71f2ec 100644 --- a/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.h +++ b/chrome/browser/ui/views/autofill/save_card_offer_bubble_views.h
@@ -55,7 +55,7 @@ views::Textfield* cardholder_name_textfield_ = nullptr; - LegalMessageView* footnote_view_ = nullptr; + LegalMessageView* legal_message_view_ = nullptr; DISALLOW_COPY_AND_ASSIGN(SaveCardOfferBubbleViews); };
diff --git a/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc b/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc index 8efd4143..2ddd989 100644 --- a/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/save_card_sign_in_promo_bubble_views.cc
@@ -48,6 +48,7 @@ provider->GetDistanceMetric(views::DISTANCE_UNRELATED_CONTROL_VERTICAL))); view->set_id(DialogViewId::SIGN_IN_PROMO_VIEW); + std::unique_ptr<views::View> signin_view; Profile* profile = controller()->GetProfile(); sync_promo_delegate_ = std::make_unique<SaveCardSignInPromoBubbleViews::SyncPromoDelegate>( @@ -55,19 +56,21 @@ signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE); if (AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)) { #if BUILDFLAG(ENABLE_DICE_SUPPORT) - view->AddChildView(new DiceBubbleSyncPromoView( + signin_view = std::make_unique<DiceBubbleSyncPromoView>( profile, sync_promo_delegate_.get(), - signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE)); + signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE); #else NOTREACHED(); #endif } else { - view->AddChildView(new BubbleSyncPromoView( + signin_view = std::make_unique<BubbleSyncPromoView>( sync_promo_delegate_.get(), signin_metrics::AccessPoint::ACCESS_POINT_SAVE_CARD_BUBBLE, IDS_AUTOFILL_SIGNIN_PROMO_LINK_DICE_DISABLED, - IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED)); + IDS_AUTOFILL_SIGNIN_PROMO_MESSAGE_DICE_DISABLED); } + signin_view->set_id(DialogViewId::SIGN_IN_VIEW); + view->AddChildView(signin_view.release()); return view; }
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc index 1966de20..3483129af 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
@@ -122,8 +122,7 @@ if (IsMash()) return; - ash::wm::InstallResizeHandleWindowTargeterForWindow(frame->GetNativeWindow(), - nullptr); + ash::wm::InstallResizeHandleWindowTargeterForWindow(frame->GetNativeWindow()); ash::Shell::Get()->AddShellObserver(this); // The ServiceManagerConnection may be nullptr in tests.
diff --git a/chrome/browser/ui/views/frame/immersive_context_mus.cc b/chrome/browser/ui/views/frame/immersive_context_mus.cc index 871b552..81b95e9 100644 --- a/chrome/browser/ui/views/frame/immersive_context_mus.cc +++ b/chrome/browser/ui/views/frame/immersive_context_mus.cc
@@ -17,12 +17,6 @@ ImmersiveContextMus::~ImmersiveContextMus() {} -void ImmersiveContextMus::InstallResizeHandleWindowTargeter( - ash::ImmersiveFullscreenController* controller) { - // There shouldn't be a need to do anything here, the windowmanager takes care - // of this for us. -} - void ImmersiveContextMus::OnEnteringOrExitingImmersive( ash::ImmersiveFullscreenController* controller, bool entering) {
diff --git a/chrome/browser/ui/views/frame/immersive_context_mus.h b/chrome/browser/ui/views/frame/immersive_context_mus.h index 43ab5d3e..25cc9f5 100644 --- a/chrome/browser/ui/views/frame/immersive_context_mus.h +++ b/chrome/browser/ui/views/frame/immersive_context_mus.h
@@ -14,8 +14,6 @@ ~ImmersiveContextMus() override; // ash::ImmersiveContext: - void InstallResizeHandleWindowTargeter( - ash::ImmersiveFullscreenController* controller) override; void OnEnteringOrExitingImmersive( ash::ImmersiveFullscreenController* controller, bool entering) override;
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc index c49a812..48ec85b 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -538,6 +538,10 @@ slide_animation_.Reset(show_label); } +void IconLabelBubbleView::ReduceAnimationTimeForTesting() { + slide_animation_.SetSlideDuration(1); +} + void IconLabelBubbleView::PauseAnimation() { if (slide_animation_.is_animating()) { // If the user clicks while we're animating, the bubble arrow will be
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h index 7fb9872..c6e9984 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -185,6 +185,10 @@ // currently paused. bool is_animation_paused() const { return is_animation_paused_; } + // Reduces the slide duration to 1ms such that animation still follows + // through in the code but is short enough that it is essentially skipped. + void ReduceAnimationTimeForTesting(); + private: // Spacing between the image and the label. int GetInternalSpacing() const;
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc index 5fc622d5..7daee94 100644 --- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc +++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
@@ -81,9 +81,15 @@ } void MediaRouterDialogControllerViews::OnWidgetClosing(views::Widget* widget) { + DCHECK_EQ(CastDialogView::GetCurrentDialogWidget(), widget); Reset(); } +void MediaRouterDialogControllerViews::OnWidgetDestroying( + views::Widget* widget) { + widget->RemoveObserver(this); +} + MediaRouterDialogControllerViews::MediaRouterDialogControllerViews( content::WebContents* web_contents) : MediaRouterDialogControllerImplBase(web_contents) {}
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h index c8ae230..93d604d 100644 --- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h +++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_UI_VIEWS_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_VIEWS_H_ #define CHROME_BROWSER_UI_VIEWS_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_VIEWS_H_ +#include <memory> + #include "base/macros.h" #include "chrome/browser/ui/media_router/media_router_dialog_controller_impl_base.h" #include "chrome/browser/ui/views/media_router/media_router_views_ui.h" @@ -31,6 +33,7 @@ // views::WidgetObserver: void OnWidgetClosing(views::Widget* widget) override; + void OnWidgetDestroying(views::Widget* widget) override; private: friend class content::WebContentsUserData<MediaRouterDialogControllerViews>;
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views_browsertest.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views_browsertest.cc new file mode 100644 index 0000000..bb44a62 --- /dev/null +++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views_browsertest.cc
@@ -0,0 +1,63 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/macros.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_commands.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/views/media_router/cast_dialog_view.h" +#include "chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/page_transition_types.h" +#include "ui/views/widget/widget.h" + +using content::WebContents; + +namespace media_router { + +class MediaRouterDialogControllerViewsTest : public InProcessBrowserTest { + public: + MediaRouterDialogControllerViewsTest() = default; + ~MediaRouterDialogControllerViewsTest() override = default; + + void OpenMediaRouterDialog(); + + protected: + WebContents* initiator_; + MediaRouterDialogControllerViews* dialog_controller_; + + private: + DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerViewsTest); +}; + +void MediaRouterDialogControllerViewsTest::OpenMediaRouterDialog() { + // Start with one window with one tab. + EXPECT_EQ(1, browser()->tab_strip_model()->count()); + + // Create a reference to initiator contents. + initiator_ = browser()->tab_strip_model()->GetActiveWebContents(); + + dialog_controller_ = + MediaRouterDialogControllerViews::GetOrCreateForWebContents(initiator_); + ASSERT_TRUE(dialog_controller_); + + // Show the media router dialog for the initiator. + dialog_controller_->ShowMediaRouterDialog(); + ASSERT_TRUE(dialog_controller_->IsShowingMediaRouterDialog()); +} + +// Create/Get a media router dialog for initiator. +IN_PROC_BROWSER_TEST_F(MediaRouterDialogControllerViewsTest, + OpenCloseMediaRouterDialog) { + OpenMediaRouterDialog(); + views::Widget* widget = CastDialogView::GetCurrentDialogWidget(); + ASSERT_TRUE(widget); + EXPECT_TRUE(widget->HasObserver(dialog_controller_)); + dialog_controller_->CloseMediaRouterDialog(); + EXPECT_FALSE(dialog_controller_->IsShowingMediaRouterDialog()); + EXPECT_EQ(CastDialogView::GetCurrentDialogWidget(), nullptr); +} + +} // namespace media_router
diff --git a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc index c1e8a5463..38396bf 100644 --- a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc +++ b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc
@@ -110,6 +110,10 @@ NOTREACHED(); } +views::View* DiceBubbleSyncPromoView::GetSigninButtonForTesting() { + return signin_button_view_ ? signin_button_view_->signin_button() : nullptr; +} + void DiceBubbleSyncPromoView::EnableSync( bool is_default_promo_account, const base::Optional<AccountInfo>& account) {
diff --git a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h index 187f519..1d8ff96 100644 --- a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h +++ b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h
@@ -52,6 +52,9 @@ // views::ButtonListener: void ButtonPressed(views::Button* sender, const ui::Event& event) override; + // Returns the sign-in button. + views::View* GetSigninButtonForTesting(); + private: // Used to enable sync in the DiceAccountsMenu and when |signin_button_| is // pressed.
diff --git a/chrome/browser/ui/webui/discards/discards_ui.cc b/chrome/browser/ui/webui/discards/discards_ui.cc index 4722a349..69b3776 100644 --- a/chrome/browser/ui/webui/discards/discards_ui.cc +++ b/chrome/browser/ui/webui/discards/discards_ui.cc
@@ -354,20 +354,24 @@ std::unique_ptr<content::WebUIDataSource> source( content::WebUIDataSource::Create(chrome::kChromeUIDiscardsHost)); - source->AddResourcePath("discards.css", IDR_ABOUT_DISCARDS_CSS); - source->AddResourcePath("discards.js", IDR_ABOUT_DISCARDS_JS); - source->AddResourcePath("discards_tab.html", - IDR_ABOUT_DISCARDS_DISCARDS_TAB_HTML); - source->AddResourcePath("database_tab.html", - IDR_ABOUT_DISCARDS_DATABASE_TAB_HTML); + source->AddResourcePath("discards.js", IDR_DISCARDS_JS); + + source->AddResourcePath("discards_main.html", + IDR_DISCARDS_DISCARDS_MAIN_HTML); + source->AddResourcePath("discards_main.js", IDR_DISCARDS_DISCARDS_MAIN_JS); + + source->AddResourcePath("discards_tab.js", IDR_DISCARDS_DISCARDS_TAB_JS); + source->AddResourcePath("discards_tab.html", IDR_DISCARDS_DISCARDS_TAB_HTML); + source->AddResourcePath("database_tab.js", IDR_DISCARDS_DATABASE_TAB_JS); + source->AddResourcePath("database_tab.html", IDR_DISCARDS_DATABASE_TAB_HTML); // Full paths (relative to src) are important for Mojom generated files. source->AddResourcePath("chrome/browser/ui/webui/discards/discards.mojom.js", - IDR_ABOUT_DISCARDS_MOJO_JS); + IDR_DISCARDS_MOJO_JS); source->AddResourcePath( "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.js", - IDR_ABOUT_DISCARDS_LIFECYCLE_UNIT_STATE_MOJO_JS); + IDR_DISCARDS_LIFECYCLE_UNIT_STATE_MOJO_JS); - source->SetDefaultResource(IDR_ABOUT_DISCARDS_HTML); + source->SetDefaultResource(IDR_DISCARDS_HTML); Profile* profile = Profile::FromWebUI(web_ui); content::WebUIDataSource::Add(profile, source.release());
diff --git a/chrome/browser/ui/window_sizer/window_sizer_ash_uitest.cc b/chrome/browser/ui/window_sizer/window_sizer_ash_uitest.cc index 8dfe388..2ab0b17 100644 --- a/chrome/browser/ui/window_sizer/window_sizer_ash_uitest.cc +++ b/chrome/browser/ui/window_sizer/window_sizer_ash_uitest.cc
@@ -19,6 +19,7 @@ #include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h" #include "ui/events/test/event_generator.h" +#include "ui/views/bubble/bubble_border.h" #include "ui/views/controls/menu/menu_config.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/view.h" @@ -71,17 +72,25 @@ // Chrome replies to Ash with the context menu items to display. ChromeLauncherController::instance()->FlushForTesting(); + const views::MenuConfig& menu_config = views::MenuConfig::instance(); // Move the cursor up to the "New window" menu option - assumes menu content. - const int offset = + const int y_offset = // Top half of the button we just clicked on. ash::ShelfConstants::button_size() / 2 + // Space between shelf top and menu bottom. Here we get this menu with // a right-click but long-pressing yields the same result. All menus // here use a touchable layout. - views::MenuConfig::instance().touchable_anchor_offset + + menu_config.touchable_anchor_offset + // 2 menu items we don't want, and go over part of the one we want. - 2.2 * views::MenuConfig::instance().touchable_menu_height; - generator.MoveMouseBy(0, -offset); + 2.2 * menu_config.touchable_menu_height; + const int x_offset = + // Skip over the left edge border inset. + views::BubbleBorder::GetBorderAndShadowInsets( + menu_config.touchable_menu_shadow_elevation) + .left() + + // Space between the left edge and the item content. + menu_config.item_horizontal_padding; + generator.MoveMouseBy(x_offset, -y_offset); generator.ReleaseRightButton(); // Ash notifies Chrome's ShelfItemDelegate that the menu item was selected.
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn index 0508007..f7e2ccd 100644 --- a/chrome/browser/vr/BUILD.gn +++ b/chrome/browser/vr/BUILD.gn
@@ -372,6 +372,7 @@ test("vr_common_unittests") { sources = [ "animation_unittest.cc", + "base_scheduler_delegate_unittest.cc", "browser_renderer_unittest.cc", "databinding/binding_unittest.cc", "databinding/vector_binding_unittest.cc",
diff --git a/chrome/browser/vr/base_scheduler_delegate_unittest.cc b/chrome/browser/vr/base_scheduler_delegate_unittest.cc new file mode 100644 index 0000000..363d56c --- /dev/null +++ b/chrome/browser/vr/base_scheduler_delegate_unittest.cc
@@ -0,0 +1,126 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/vr/base_scheduler_delegate.h" + +#include "base/memory/scoped_refptr.h" +#include "base/test/test_mock_time_task_runner.h" +#include "base/threading/thread_task_runner_handle.h" +#include "chrome/browser/vr/scheduler_ui_interface.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace vr { + +class MockSchedulerUi : public SchedulerUiInterface { + public: + MockSchedulerUi() = default; + ~MockSchedulerUi() override = default; + + // SchedulerUiInterface + MOCK_METHOD0(OnWebXrFrameAvailable, void()); + MOCK_METHOD0(OnWebXrTimedOut, void()); + MOCK_METHOD0(OnWebXrTimeoutImminent, void()); +}; + +class ConcreteSchedulerDelegate : public BaseSchedulerDelegate { + public: + explicit ConcreteSchedulerDelegate(SchedulerUiInterface* ui) + : BaseSchedulerDelegate(ui, true, 2, 5) {} + ~ConcreteSchedulerDelegate() override = default; + + void ScheduleWebXrFrameTimeout() { + BaseSchedulerDelegate::ScheduleWebXrFrameTimeout(); + } + void OnNewWebXrFrame() { BaseSchedulerDelegate::OnNewWebXrFrame(); } + + private: + void OnPause() override {} + void OnResume() override {} + void SetShowingVrDialog(bool showing) override {} + void SetBrowserRenderer( + SchedulerBrowserRendererInterface* browser_renderer) override {} + void SubmitDrawnFrame(FrameType frame_type, + const gfx::Transform& head_pose) override {} + void AddInputSourceState( + device::mojom::XRInputSourceStatePtr state) override {} + void ConnectPresentingService( + device::mojom::VRDisplayInfoPtr display_info, + device::mojom::XRRuntimeSessionOptionsPtr options) override {} +}; + +class SchedulerDelegateTest : public testing::Test { + public: + void SetUp() override { + test_task_runner_ = + base::WrapRefCounted(new base::TestMockTimeTaskRunner()); + on_destroy_ = + base::ThreadTaskRunnerHandle::OverrideForTesting(test_task_runner_); + } + + void FastForwardBy(base::TimeDelta delta) { + test_task_runner_->FastForwardBy(delta); + } + + private: + scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_; + base::ScopedClosureRunner on_destroy_; +}; + +TEST_F(SchedulerDelegateTest, NoTimeoutWhenWebXrFrameArrivesFast) { + MockSchedulerUi ui; + ConcreteSchedulerDelegate scheduler_delegate(&ui); + scheduler_delegate.ScheduleWebXrFrameTimeout(); + + EXPECT_CALL(ui, OnWebXrTimeoutImminent()).Times(0); + EXPECT_CALL(ui, OnWebXrTimedOut()).Times(0); + FastForwardBy(base::TimeDelta::FromSeconds(1)); + scheduler_delegate.OnNewWebXrFrame(); + FastForwardBy(base::TimeDelta::FromSeconds(10)); +} + +TEST_F(SchedulerDelegateTest, OneTimeoutWhenWebXrFrameArrivesSlow) { + MockSchedulerUi ui; + ConcreteSchedulerDelegate scheduler_delegate(&ui); + scheduler_delegate.ScheduleWebXrFrameTimeout(); + + EXPECT_CALL(ui, OnWebXrTimeoutImminent()).Times(1); + EXPECT_CALL(ui, OnWebXrTimedOut()).Times(0); + FastForwardBy(base::TimeDelta::FromSeconds(3)); + scheduler_delegate.OnNewWebXrFrame(); + FastForwardBy(base::TimeDelta::FromSeconds(10)); +} + +TEST_F(SchedulerDelegateTest, TwoTimeoutsWhenWebXrFrameDoesNotArrive) { + MockSchedulerUi ui; + ConcreteSchedulerDelegate scheduler_delegate(&ui); + scheduler_delegate.ScheduleWebXrFrameTimeout(); + + EXPECT_CALL(ui, OnWebXrTimeoutImminent()).Times(1); + EXPECT_CALL(ui, OnWebXrTimedOut()).Times(1); + FastForwardBy(base::TimeDelta::FromSeconds(10)); +} + +TEST_F(SchedulerDelegateTest, NoTimeoutIfExitPresent) { + MockSchedulerUi ui; + ConcreteSchedulerDelegate scheduler_delegate(&ui); + scheduler_delegate.ScheduleWebXrFrameTimeout(); + + EXPECT_CALL(ui, OnWebXrTimeoutImminent()).Times(0); + EXPECT_CALL(ui, OnWebXrTimedOut()).Times(0); + scheduler_delegate.OnExitPresent(); + FastForwardBy(base::TimeDelta::FromSeconds(10)); +} + +TEST_F(SchedulerDelegateTest, NoTimeoutIfUnsetWebXrMode) { + MockSchedulerUi ui; + ConcreteSchedulerDelegate scheduler_delegate(&ui); + scheduler_delegate.ScheduleWebXrFrameTimeout(); + + EXPECT_CALL(ui, OnWebXrTimeoutImminent()).Times(0); + EXPECT_CALL(ui, OnWebXrTimedOut()).Times(0); + scheduler_delegate.SetWebXrMode(false); + FastForwardBy(base::TimeDelta::FromSeconds(10)); +} + +} // namespace vr
diff --git a/chrome/browser/vr/browser_renderer.cc b/chrome/browser/vr/browser_renderer.cc index d5f314b2..096818e4 100644 --- a/chrome/browser/vr/browser_renderer.cc +++ b/chrome/browser/vr/browser_renderer.cc
@@ -64,6 +64,8 @@ ui_->SetContentUsesQuadLayer(use_quad_layer); graphics_delegate_->InitializeBuffers(); + graphics_delegate_->SetFrameDumpFilepathBase( + frame_buffer_dump_filepath_base_); if (frame_type == kWebXrFrame) { DCHECK(!use_quad_layer); DrawWebXr(); @@ -80,6 +82,7 @@ "controller", ui_controller_update_time_.GetAverage().InMicroseconds()); + ReportFrameBufferDumpForTesting(); scheduler_delegate_->SubmitDrawnFrame(frame_type, head_pose); } @@ -149,7 +152,7 @@ } void BrowserRenderer::OnTriggerEvent(bool pressed) { - scheduler_delegate_->OnTriggerEvent(pressed); + input_delegate_->OnTriggerEvent(pressed); } void BrowserRenderer::SetWebXrMode(bool enabled) { @@ -249,6 +252,11 @@ base::TimeDelta::FromMilliseconds(ui_expectation.quiescence_timeout_ms); } +void BrowserRenderer::SaveNextFrameBufferToDiskForTesting( + std::string filepath_base) { + frame_buffer_dump_filepath_base_ = filepath_base; +} + void BrowserRenderer::AcceptDoffPromptForTesting() { ui_->AcceptDoffPromptForTesting(); } @@ -332,8 +340,7 @@ void BrowserRenderer::PerformControllerActionForTesting( ControllerTestInput controller_input) { DCHECK(input_delegate_); - if (controller_input.action == - VrControllerTestAction::kRevertToRealController) { + if (controller_input.action == VrControllerTestAction::kRevertToRealInput) { if (using_input_delegate_for_testing_) { DCHECK(static_cast<InputDelegateForTesting*>(input_delegate_.get()) ->IsQueueEmpty()) @@ -351,8 +358,7 @@ std::make_unique<InputDelegateForTesting>(ui_.get()); input_delegate_for_testing_.swap(input_delegate_); } - if (controller_input.action != - VrControllerTestAction::kEnableMockedController) { + if (controller_input.action != VrControllerTestAction::kEnableMockedInput) { static_cast<InputDelegateForTesting*>(input_delegate_.get()) ->QueueControllerActionForTesting(controller_input); } @@ -390,7 +396,18 @@ void BrowserRenderer::ReportUiActivityResultForTesting( VrUiTestActivityResult result) { ui_test_state_ = nullptr; - browser_->ReportUiActivityResultForTesting(result); + browser_->ReportUiOperationResultForTesting( + UiTestOperationType::kUiActivityResult, result); +} + +void BrowserRenderer::ReportFrameBufferDumpForTesting() { + if (frame_buffer_dump_filepath_base_.empty()) + return; + + frame_buffer_dump_filepath_base_.clear(); + browser_->ReportUiOperationResultForTesting( + UiTestOperationType::kFrameBufferDumped, + VrUiTestActivityResult::kQuiescent /* unused */); } } // namespace vr
diff --git a/chrome/browser/vr/browser_renderer.h b/chrome/browser/vr/browser_renderer.h index 2af36dd..a53539d 100644 --- a/chrome/browser/vr/browser_renderer.h +++ b/chrome/browser/vr/browser_renderer.h
@@ -77,6 +77,7 @@ void PerformControllerActionForTesting(ControllerTestInput controller_input); void SetUiExpectingActivityForTesting( UiTestActivityExpectation ui_expectation); + void SaveNextFrameBufferToDiskForTesting(std::string filepath_base); void AcceptDoffPromptForTesting(); void ConnectPresentingService( device::mojom::VRDisplayInfoPtr display_info, @@ -108,6 +109,7 @@ void ReportUiStatusForTesting(const base::TimeTicks& current_time, bool ui_updated); void ReportUiActivityResultForTesting(VrUiTestActivityResult result); + void ReportFrameBufferDumpForTesting(); std::unique_ptr<UiInterface> ui_; std::unique_ptr<SchedulerDelegate> scheduler_delegate_; @@ -115,6 +117,7 @@ std::unique_ptr<InputDelegate> input_delegate_; std::unique_ptr<InputDelegate> input_delegate_for_testing_; bool using_input_delegate_for_testing_ = false; + std::string frame_buffer_dump_filepath_base_; std::unique_ptr<PlatformUiInputDelegate> vr_dialog_input_delegate_;
diff --git a/chrome/browser/vr/browser_renderer_browser_interface.h b/chrome/browser/vr/browser_renderer_browser_interface.h index e99a0c1b..8ce4826 100644 --- a/chrome/browser/vr/browser_renderer_browser_interface.h +++ b/chrome/browser/vr/browser_renderer_browser_interface.h
@@ -15,7 +15,8 @@ virtual ~BrowserRendererBrowserInterface() = default; virtual void ForceExitVr() = 0; - virtual void ReportUiActivityResultForTesting( + virtual void ReportUiOperationResultForTesting( + const UiTestOperationType& action_type, const VrUiTestActivityResult& result) = 0; };
diff --git a/chrome/browser/vr/browser_renderer_unittest.cc b/chrome/browser/vr/browser_renderer_unittest.cc index 39cc580..47bc5de 100644 --- a/chrome/browser/vr/browser_renderer_unittest.cc +++ b/chrome/browser/vr/browser_renderer_unittest.cc
@@ -88,7 +88,6 @@ void OnPause() override {} void OnResume() override {} MOCK_METHOD0(OnExitPresent, void()); - void OnTriggerEvent(bool pressed) override {} MOCK_METHOD1(SetWebXrMode, void(bool)); MOCK_METHOD1(SetShowingVrDialog, void(bool)); void SetBrowserRenderer(SchedulerBrowserRendererInterface*) override {} @@ -140,6 +139,7 @@ std::move(callback).Run(); return true; } + void SetFrameDumpFilepathBase(std::string& filepath_base) override {} private: void UseBuffer() { @@ -156,6 +156,7 @@ // InputDelegate gfx::Transform GetHeadPose() override { return {}; } + void OnTriggerEvent(bool pressed) override {} MOCK_METHOD3(UpdateController, void(const gfx::Transform&, base::TimeTicks, bool)); MOCK_METHOD1(GetControllerModel, ControllerModel(const gfx::Transform&));
diff --git a/chrome/browser/vr/graphics_delegate.h b/chrome/browser/vr/graphics_delegate.h index 8b33131..7bb46e6 100644 --- a/chrome/browser/vr/graphics_delegate.h +++ b/chrome/browser/vr/graphics_delegate.h
@@ -62,6 +62,8 @@ // These methods return true when succeeded. virtual bool Initialize(const scoped_refptr<gl::GLSurface>& surface) = 0; virtual bool RunInSkiaContext(base::OnceClosure callback) = 0; + + virtual void SetFrameDumpFilepathBase(std::string& filepath_base) = 0; }; } // namespace vr
diff --git a/chrome/browser/vr/input_delegate.h b/chrome/browser/vr/input_delegate.h index 5175dc36..b8a05b97 100644 --- a/chrome/browser/vr/input_delegate.h +++ b/chrome/browser/vr/input_delegate.h
@@ -28,6 +28,7 @@ virtual ~InputDelegate() {} virtual gfx::Transform GetHeadPose() = 0; + virtual void OnTriggerEvent(bool pressed) = 0; virtual void UpdateController(const gfx::Transform& head_pose, base::TimeTicks current_time, bool is_webxr_frame) = 0;
diff --git a/chrome/browser/vr/input_delegate_for_testing.cc b/chrome/browser/vr/input_delegate_for_testing.cc index 621c0fb..1cd0d55 100644 --- a/chrome/browser/vr/input_delegate_for_testing.cc +++ b/chrome/browser/vr/input_delegate_for_testing.cc
@@ -45,10 +45,14 @@ return gfx::Transform(); } +void InputDelegateForTesting::OnTriggerEvent(bool pressed) { + NOTREACHED(); +} + void InputDelegateForTesting::QueueControllerActionForTesting( ControllerTestInput controller_input) { DCHECK_NE(controller_input.action, - VrControllerTestAction::kRevertToRealController); + VrControllerTestAction::kRevertToRealInput); ControllerModel controller_model; auto target_point = ui_->GetTargetPointForTesting( controller_input.element_name, controller_input.position);
diff --git a/chrome/browser/vr/input_delegate_for_testing.h b/chrome/browser/vr/input_delegate_for_testing.h index 8a37c66..af494d6 100644 --- a/chrome/browser/vr/input_delegate_for_testing.h +++ b/chrome/browser/vr/input_delegate_for_testing.h
@@ -26,6 +26,7 @@ // InputDelegate implementation. gfx::Transform GetHeadPose() override; + void OnTriggerEvent(bool pressed) override; void UpdateController(const gfx::Transform& head_pose, base::TimeTicks current_time, bool is_webxr_frame) override;
diff --git a/chrome/browser/vr/scheduler_delegate.h b/chrome/browser/vr/scheduler_delegate.h index dec866d..7f5a7e6c 100644 --- a/chrome/browser/vr/scheduler_delegate.h +++ b/chrome/browser/vr/scheduler_delegate.h
@@ -31,13 +31,12 @@ virtual void OnResume() = 0; virtual void OnExitPresent() = 0; - virtual void OnTriggerEvent(bool pressed) = 0; virtual void SetWebXrMode(bool enabled) = 0; virtual void SetShowingVrDialog(bool showing) = 0; virtual void SetBrowserRenderer( SchedulerBrowserRendererInterface* browser_renderer) = 0; virtual void SubmitDrawnFrame(FrameType frame_type, - const gfx::Transform& transform) = 0; + const gfx::Transform& head_pose) = 0; virtual void AddInputSourceState( device::mojom::XRInputSourceStatePtr state) = 0; virtual void ConnectPresentingService(
diff --git a/chrome/browser/vr/test/mock_openvr_device_hook_base.cc b/chrome/browser/vr/test/mock_openvr_device_hook_base.cc index 6694bff..6c8cfde5 100644 --- a/chrome/browser/vr/test/mock_openvr_device_hook_base.cc +++ b/chrome/browser/vr/test/mock_openvr_device_hook_base.cc
@@ -3,42 +3,62 @@ // found in the LICENSE file. #include "chrome/browser/vr/test/mock_openvr_device_hook_base.h" +#include "content/public/common/service_manager_connection.h" +#include "device/vr/public/mojom/isolated_xr_service.mojom.h" +#include "services/service_manager/public/cpp/connector.h" -MockOpenVRBase::MockOpenVRBase() { - device::OpenVRDeviceProvider::SetTestHook(this); +MockOpenVRDeviceHookBase::MockOpenVRDeviceHookBase() : binding_(this) { + content::ServiceManagerConnection* connection = + content::ServiceManagerConnection::GetForProcess(); + connection->GetConnector()->BindInterface( + device::mojom::kVrIsolatedServiceName, + mojo::MakeRequest(&test_hook_registration_)); + + device_test::mojom::XRTestHookPtr client; + binding_.Bind(mojo::MakeRequest(&client)); + + mojo::ScopedAllowSyncCallForTesting scoped_allow_sync; + test_hook_registration_->SetTestHook(std::move(client)); } -MockOpenVRBase::~MockOpenVRBase() { - device::OpenVRDeviceProvider::SetTestHook(nullptr); +MockOpenVRDeviceHookBase::~MockOpenVRDeviceHookBase() { + StopHooking(); } -void MockOpenVRBase::OnFrameSubmitted(device::SubmittedFrameData frame_data) {} - -device::DeviceConfig MockOpenVRBase::WaitGetDeviceConfig() { - device::DeviceConfig ret = {0.1f /* ipd*/, - {1, 1, 1, 1} /* raw projection left */, - {1, 1, 1, 1} /* raw projection right */}; - return ret; +void MockOpenVRDeviceHookBase::StopHooking() { + // We don't call test_hook_registration_->SetTestHook(nullptr), since that + // will potentially deadlock with reentrant or crossing synchronous mojo + // calls. + binding_.Close(); + test_hook_registration_ = nullptr; } -device::PoseFrameData MockOpenVRBase::WaitGetPresentingPose() { - device::PoseFrameData pose = {}; - pose.is_valid = true; - // Identity matrix. - pose.device_to_origin[0] = 1; - pose.device_to_origin[5] = 1; - pose.device_to_origin[10] = 1; - pose.device_to_origin[15] = 1; - return pose; +void MockOpenVRDeviceHookBase::OnFrameSubmitted( + device_test::mojom::SubmittedFrameDataPtr frame_data, + device_test::mojom::XRTestHook::OnFrameSubmittedCallback callback) { + std::move(callback).Run(); } -device::PoseFrameData MockOpenVRBase::WaitGetMagicWindowPose() { - device::PoseFrameData pose = {}; - pose.is_valid = true; - // Identity matrix. - pose.device_to_origin[0] = 1; - pose.device_to_origin[5] = 1; - pose.device_to_origin[10] = 1; - pose.device_to_origin[15] = 1; - return pose; +void MockOpenVRDeviceHookBase::WaitGetDeviceConfig( + device_test::mojom::XRTestHook::WaitGetDeviceConfigCallback callback) { + device_test::mojom::DeviceConfigPtr ret = + device_test::mojom::DeviceConfig::New(); + ret->interpupillary_distance = 0.1f; + ret->projection_left = device_test::mojom::ProjectionRaw::New(1, 1, 1, 1); + ret->projection_right = device_test::mojom::ProjectionRaw::New(1, 1, 1, 1); + std::move(callback).Run(std::move(ret)); +} + +void MockOpenVRDeviceHookBase::WaitGetPresentingPose( + device_test::mojom::XRTestHook::WaitGetPresentingPoseCallback callback) { + auto pose = device_test::mojom::PoseFrameData::New(); + pose->device_to_origin = gfx::Transform(); + std::move(callback).Run(std::move(pose)); +} + +void MockOpenVRDeviceHookBase::WaitGetMagicWindowPose( + device_test::mojom::XRTestHook::WaitGetMagicWindowPoseCallback callback) { + auto pose = device_test::mojom::PoseFrameData::New(); + pose->device_to_origin = gfx::Transform(); + std::move(callback).Run(std::move(pose)); }
diff --git a/chrome/browser/vr/test/mock_openvr_device_hook_base.h b/chrome/browser/vr/test/mock_openvr_device_hook_base.h index 950b4b0c..cb789451 100644 --- a/chrome/browser/vr/test/mock_openvr_device_hook_base.h +++ b/chrome/browser/vr/test/mock_openvr_device_hook_base.h
@@ -5,19 +5,33 @@ #ifndef CHROME_BROWSER_VR_TEST_MOCK_OPENVR_DEVICE_HOOK_BASE_H_ #define CHROME_BROWSER_VR_TEST_MOCK_OPENVR_DEVICE_HOOK_BASE_H_ -#include "device/vr/openvr/openvr_device_provider.h" -#include "device/vr/openvr/test/test_hook.h" +#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" +#include "mojo/public/cpp/bindings/binding.h" -class MockOpenVRBase : public device::OpenVRTestHook { +class MockOpenVRDeviceHookBase : public device_test::mojom::XRTestHook { public: - MockOpenVRBase(); - virtual ~MockOpenVRBase(); + MockOpenVRDeviceHookBase(); + ~MockOpenVRDeviceHookBase() override; - // OpenVRTestHook - void OnFrameSubmitted(device::SubmittedFrameData frame_data) override; - device::DeviceConfig WaitGetDeviceConfig() override; - device::PoseFrameData WaitGetPresentingPose() override; - device::PoseFrameData WaitGetMagicWindowPose() override; + // device_test::mojom::XRTestHook + void OnFrameSubmitted(device_test::mojom::SubmittedFrameDataPtr frame_data, + device_test::mojom::XRTestHook::OnFrameSubmittedCallback + callback) override; + void WaitGetDeviceConfig( + device_test::mojom::XRTestHook::WaitGetDeviceConfigCallback callback) + override; + void WaitGetPresentingPose( + device_test::mojom::XRTestHook::WaitGetPresentingPoseCallback callback) + override; + void WaitGetMagicWindowPose( + device_test::mojom::XRTestHook::WaitGetMagicWindowPoseCallback callback) + override; + + void StopHooking(); + + private: + mojo::Binding<device_test::mojom::XRTestHook> binding_; + device_test::mojom::XRTestHookRegistrationPtr test_hook_registration_; }; #endif // CHROME_BROWSER_VR_TEST_MOCK_OPENVR_DEVICE_HOOK_BASE_H_
diff --git a/chrome/browser/vr/test/xr_browser_test.cc b/chrome/browser/vr/test/xr_browser_test.cc index ef389d7..7f8517fa1 100644 --- a/chrome/browser/vr/test/xr_browser_test.cc +++ b/chrome/browser/vr/test/xr_browser_test.cc
@@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/command_line.h" +#include "base/debug/debugger.h" #include "base/environment.h" #include "base/files/file_path.h" #include "base/files/file_util.h" @@ -156,7 +157,11 @@ const base::TimeDelta& period) { base::Time start = base::Time::Now(); bool successful = false; - while (base::Time::Now() - start < timeout) { + + // Poll until the timeout has elapsed, or never if a debugger is attached + // because that allows code to be slowly stepped through without breaking + // tests. + while (base::Time::Now() - start < timeout || base::debug::BeingDebugged()) { successful = condition.Run(); if (successful) { break;
diff --git a/chrome/browser/vr/testapp/gl_renderer.cc b/chrome/browser/vr/testapp/gl_renderer.cc index 8303e453..0fa6ba3 100644 --- a/chrome/browser/vr/testapp/gl_renderer.cc +++ b/chrome/browser/vr/testapp/gl_renderer.cc
@@ -76,6 +76,7 @@ int GlRenderer::GetContentBufferWidth() { return 0; } +void GlRenderer::SetFrameDumpFilepathBase(std::string& filepath_base) {} void GlRenderer::RenderFrame() { // Checking and clearing GL errors can be expensive, but we can afford to do
diff --git a/chrome/browser/vr/testapp/gl_renderer.h b/chrome/browser/vr/testapp/gl_renderer.h index 95ed445..342f37eb 100644 --- a/chrome/browser/vr/testapp/gl_renderer.h +++ b/chrome/browser/vr/testapp/gl_renderer.h
@@ -50,6 +50,8 @@ float* border_y) override; int GetContentBufferWidth() override; + void SetFrameDumpFilepathBase(std::string& filepath_base) override; + void RenderFrame(); void PostRenderFrameTask(); void set_vr_context(VrTestContext* vr_context) { vr_context_ = vr_context; }
diff --git a/chrome/browser/vr/ui_test_input.h b/chrome/browser/vr/ui_test_input.h index 225a509..05171cec9 100644 --- a/chrome/browser/vr/ui_test_input.h +++ b/chrome/browser/vr/ui_test_input.h
@@ -27,6 +27,15 @@ // menu }; +// These are the types of actions that Java can request callbacks for once +// they are complete. +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.vr +enum class UiTestOperationType : int { + kUiActivityResult = 0, // Result after being told to wait for quiescence + kFrameBufferDumped, // Signal that the frame buffer was dumped to disk + kNumUiTestOperationTypes, // Must be last +}; + // These are used to report the current state of the UI after performing an // action // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.vr @@ -43,8 +52,8 @@ enum class VrControllerTestAction : int { kClick, kHover, - kEnableMockedController, - kRevertToRealController, + kEnableMockedInput, + kRevertToRealInput, kClickDown, kClickUp, kMove,
diff --git a/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc b/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc index 79a99ae2..b344012 100644 --- a/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc +++ b/chrome/browser/vr/webxr_vr_frame_pose_browser_test.cc
@@ -15,23 +15,27 @@ namespace { struct Frame { - device::SubmittedFrameData submitted; - device::PoseFrameData pose; - device::DeviceConfig config; + device_test::mojom::SubmittedFrameDataPtr submitted; + device_test::mojom::PoseFrameDataPtr pose; + device_test::mojom::DeviceConfigPtr config; }; -class MyOpenVRMock : public MockOpenVRBase { +class MyOpenVRMock : public MockOpenVRDeviceHookBase { public: - void OnFrameSubmitted(device::SubmittedFrameData frame_data) final; - device::DeviceConfig WaitGetDeviceConfig() final { - device::DeviceConfig ret = { - 0.2f /* ipd */, - {0.1f, 0.2f, 0.3f, 0.4f} /* left projection raw */, - {0.5f, 0.6f, 0.7f, 0.8f} /* right projection raw */}; - return ret; + void OnFrameSubmitted( + device_test::mojom::SubmittedFrameDataPtr frame_data, + device_test::mojom::XRTestHook::OnFrameSubmittedCallback callback) final; + void WaitGetDeviceConfig( + device_test::mojom::XRTestHook::WaitGetDeviceConfigCallback callback) + final { + std::move(callback).Run(GetDeviceConfig()); } - device::PoseFrameData WaitGetPresentingPose() final; - device::PoseFrameData WaitGetMagicWindowPose() final; + void WaitGetPresentingPose( + device_test::mojom::XRTestHook::WaitGetPresentingPoseCallback callback) + final; + void WaitGetMagicWindowPose( + device_test::mojom::XRTestHook::WaitGetMagicWindowPoseCallback callback) + final; // The test waits for a submitted frame before returning. void WaitForFrames(int count) { @@ -46,7 +50,17 @@ } std::vector<Frame> submitted_frames; - device::PoseFrameData last_immersive_frame_data = {}; + device_test::mojom::PoseFrameDataPtr last_immersive_frame_data; + + device_test::mojom::DeviceConfigPtr GetDeviceConfig() { + auto config = device_test::mojom::DeviceConfig::New(); + config->interpupillary_distance = 0.2f; + config->projection_left = + device_test::mojom::ProjectionRaw::New(0.1f, 0.2f, 0.3f, 0.4f); + config->projection_right = + device_test::mojom::ProjectionRaw::New(0.5f, 0.6f, 0.7f, 0.8f); + return config; + } private: // Set to null on background thread after calling Quit(), so we can ensure we @@ -56,23 +70,25 @@ int wait_frame_count_ = 0; int num_frames_submitted_ = 0; - bool has_last_immersive_frame_data_ = false; int frame_id_ = 0; }; -unsigned int ParseColorFrameId(device::Color color) { +unsigned int ParseColorFrameId(const device_test::mojom::ColorPtr& color) { // Corresponding math in test_webxr_poses.html. - unsigned int frame_id = - static_cast<unsigned int>(color.r) + 256 * color.g + 256 * 256 * color.b; + unsigned int frame_id = static_cast<unsigned int>(color->r) + 256 * color->g + + 256 * 256 * color->b; return frame_id; } -void MyOpenVRMock::OnFrameSubmitted(device::SubmittedFrameData frame_data) { - unsigned int frame_id = ParseColorFrameId(frame_data.color); +void MyOpenVRMock::OnFrameSubmitted( + device_test::mojom::SubmittedFrameDataPtr frame_data, + device_test::mojom::XRTestHook::OnFrameSubmittedCallback callback) { + unsigned int frame_id = ParseColorFrameId(frame_data->color); DLOG(ERROR) << "Frame Submitted: " << num_frames_submitted_ << " " << frame_id; - submitted_frames.push_back( - {frame_data, last_immersive_frame_data, WaitGetDeviceConfig()}); + submitted_frames.push_back({std::move(frame_data), + last_immersive_frame_data.Clone(), + GetDeviceConfig()}); num_frames_submitted_++; if (num_frames_submitted_ >= wait_frame_count_ && wait_frame_count_ > 0 && @@ -81,60 +97,62 @@ wait_loop_ = nullptr; } - EXPECT_TRUE(has_last_immersive_frame_data_) + EXPECT_TRUE(!!last_immersive_frame_data) << "Frame submitted without any frame data provided"; // We expect a waitGetPoses, then 2 submits (one for each eye), so after 2 // submitted frames don't use the same frame_data again. if (num_frames_submitted_ % 2 == 0) - has_last_immersive_frame_data_ = false; + last_immersive_frame_data = nullptr; + + std::move(callback).Run(); } -device::PoseFrameData MyOpenVRMock::WaitGetMagicWindowPose() { - device::PoseFrameData pose = {}; - pose.is_valid = true; +void MyOpenVRMock::WaitGetMagicWindowPose( + device_test::mojom::XRTestHook::WaitGetMagicWindowPoseCallback callback) { + auto pose = device_test::mojom::PoseFrameData::New(); + // Almost identity matrix - enough different that we can identify if magic // window poses are used instead of presenting poses. - pose.device_to_origin[0] = 1; - pose.device_to_origin[5] = -1; - pose.device_to_origin[10] = 1; - pose.device_to_origin[15] = 1; - return pose; + pose->device_to_origin = + gfx::Transform(1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + std::move(callback).Run(std::move(pose)); } -device::PoseFrameData MyOpenVRMock::WaitGetPresentingPose() { +void MyOpenVRMock::WaitGetPresentingPose( + device_test::mojom::XRTestHook::WaitGetPresentingPoseCallback callback) { DLOG(ERROR) << "WaitGetPresentingPose: " << frame_id_; - device::PoseFrameData pose = {}; - pose.is_valid = true; + auto pose = device_test::mojom::PoseFrameData::New(); + // Start with identity matrix. - pose.device_to_origin[0] = 1; - pose.device_to_origin[5] = 1; - pose.device_to_origin[10] = 1; - pose.device_to_origin[15] = 1; + pose->device_to_origin = gfx::Transform(); // Add a translation so each frame gets a different transform, and so its easy // to identify what the expected pose is. - pose.device_to_origin[3] = frame_id_; + pose->device_to_origin->Translate3d(0, 0, frame_id_); - has_last_immersive_frame_data_ = true; frame_id_++; - last_immersive_frame_data = pose; + last_immersive_frame_data = pose.Clone(); - return pose; + std::move(callback).Run(std::move(pose)); } -std::string GetMatrixAsString(const float m[]) { +std::string GetMatrixAsString(const gfx::Transform& m) { // Dump the transpose of the matrix due to openvr vs. webxr matrix format // differences. return base::StringPrintf( - "[%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f]", m[0], - m[4], m[8], m[12], m[1], m[5], m[9], m[13], m[2], m[6], m[10], m[14], - m[3], m[7], m[11], m[15]); + "[%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f]", + m.matrix().get(0, 0), m.matrix().get(1, 0), m.matrix().get(2, 0), + m.matrix().get(3, 0), m.matrix().get(0, 1), m.matrix().get(1, 1), + m.matrix().get(2, 1), m.matrix().get(3, 1), m.matrix().get(0, 2), + m.matrix().get(1, 2), m.matrix().get(2, 2), m.matrix().get(3, 2), + m.matrix().get(0, 3), m.matrix().get(1, 3), m.matrix().get(2, 3), + m.matrix().get(3, 3)); } std::string GetPoseAsString(const Frame& frame) { - return GetMatrixAsString(frame.pose.device_to_origin); + return GetMatrixAsString(*(frame.pose->device_to_origin)); } } // namespace @@ -162,7 +180,7 @@ // Stop hooking OpenVR, so we can safely analyze our cached data without // incoming calls (there may be leftover mojo messages queued). - device::OpenVRDeviceProvider::SetTestHook(nullptr); + my_mock.StopHooking(); // Analyze the submitted frames - check for a few things: // 1. Each frame id should be submitted at most once for each of the left and @@ -172,15 +190,15 @@ std::set<unsigned int> seen_left; std::set<unsigned int> seen_right; unsigned int max_frame_id = 0; - for (auto frame : my_mock.submitted_frames) { - const device::SubmittedFrameData& data = frame.submitted; + for (const auto& frame : my_mock.submitted_frames) { + const device_test::mojom::SubmittedFrameDataPtr& data = frame.submitted; // The test page encodes the frame id as the clear color. - unsigned int frame_id = ParseColorFrameId(data.color); + unsigned int frame_id = ParseColorFrameId(data->color); // Validate that each frame is only seen once for each eye. DLOG(ERROR) << "Frame id: " << frame_id; - if (data.left_eye) { + if (data->eye == device_test::mojom::Eye::LEFT) { EXPECT_TRUE(seen_left.find(frame_id) == seen_left.end()) << "Frame for left eye submitted more than once"; seen_left.insert(frame_id);
diff --git a/chrome/browser/vr/webxr_vr_pixel_browser_test.cc b/chrome/browser/vr/webxr_vr_pixel_browser_test.cc index 325a5115..a4c4b43b 100644 --- a/chrome/browser/vr/webxr_vr_pixel_browser_test.cc +++ b/chrome/browser/vr/webxr_vr_pixel_browser_test.cc
@@ -15,9 +15,11 @@ namespace vr { -class MyOpenVRMock : public MockOpenVRBase { +class MyOpenVRMock : public MockOpenVRDeviceHookBase { public: - void OnFrameSubmitted(device::SubmittedFrameData frame_data) final; + void OnFrameSubmitted( + device_test::mojom::SubmittedFrameDataPtr frame_data, + device_test::mojom::XRTestHook::OnFrameSubmittedCallback callback) final; void WaitForFrame() { DCHECK(!wait_loop_); @@ -30,20 +32,24 @@ wait_loop_ = nullptr; } - device::Color last_submitted_color_ = {}; + device_test::mojom::ColorPtr last_submitted_color_ = {}; unsigned int num_submitted_frames_ = 0; private: base::RunLoop* wait_loop_ = nullptr; }; -void MyOpenVRMock::OnFrameSubmitted(device::SubmittedFrameData frame_data) { - last_submitted_color_ = frame_data.color; +void MyOpenVRMock::OnFrameSubmitted( + device_test::mojom::SubmittedFrameDataPtr frame_data, + device_test::mojom::XRTestHook::OnFrameSubmittedCallback callback) { + last_submitted_color_ = std::move(frame_data->color); num_submitted_frames_++; if (wait_loop_) { wait_loop_->Quit(); } + + std::move(callback).Run(); } // Pixel test for WebVR/WebXR - start presentation, submit frames, get data back @@ -67,14 +73,14 @@ my_mock.WaitForFrame(); - device::Color expected = {0, 0, 255, 255}; - EXPECT_EQ(expected.r, my_mock.last_submitted_color_.r) + auto expected = device_test::mojom::Color::New(0, 0, 255, 255); + EXPECT_EQ(expected->r, my_mock.last_submitted_color_->r) << "Red channel of submitted color does not match expectation"; - EXPECT_EQ(expected.g, my_mock.last_submitted_color_.g) + EXPECT_EQ(expected->g, my_mock.last_submitted_color_->g) << "Green channel of submitted color does not match expectation"; - EXPECT_EQ(expected.b, my_mock.last_submitted_color_.b) + EXPECT_EQ(expected->b, my_mock.last_submitted_color_->b) << "Blue channel of submitted color does not match expectation"; - EXPECT_EQ(expected.a, my_mock.last_submitted_color_.a) + EXPECT_EQ(expected->a, my_mock.last_submitted_color_->a) << "Alpha channel of submitted color does not match expectation"; }
diff --git a/chrome/chrome_cleaner/constants/BUILD.gn b/chrome/chrome_cleaner/constants/BUILD.gn index d2e8e24..256b02e 100644 --- a/chrome/chrome_cleaner/constants/BUILD.gn +++ b/chrome/chrome_cleaner/constants/BUILD.gn
@@ -51,3 +51,10 @@ "uws_id.h", ] } + +source_set("quarantine_constants") { + sources = [ + "quarantine_constants.cc", + "quarantine_constants.h", + ] +}
diff --git a/chrome/chrome_cleaner/constants/quarantine_constants.cc b/chrome/chrome_cleaner/constants/quarantine_constants.cc new file mode 100644 index 0000000..a9d189f --- /dev/null +++ b/chrome/chrome_cleaner/constants/quarantine_constants.cc
@@ -0,0 +1,18 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/chrome_cleaner/constants/quarantine_constants.h" + +namespace chrome_cleaner { + +// The quarantine folder name under Chrome Cleanup folder. +constexpr wchar_t kQuarantineFolder[] = L"Quarantine"; + +// Fixed zip archive password for quarantine. +constexpr char kQuarantinePassword[] = "chrome_cleanup"; + +// The size limit of source file is 1GB. +constexpr int64_t kQuarantineSourceSizeLimit = 1024 * 1024 * 1024; + +} // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/constants/quarantine_constants.h b/chrome/chrome_cleaner/constants/quarantine_constants.h new file mode 100644 index 0000000..bf1a5b39 --- /dev/null +++ b/chrome/chrome_cleaner/constants/quarantine_constants.h
@@ -0,0 +1,18 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_CHROME_CLEANER_CONSTANTS_QUARANTINE_CONSTANTS_H_ +#define CHROME_CHROME_CLEANER_CONSTANTS_QUARANTINE_CONSTANTS_H_ + +#include <stdint.h> + +namespace chrome_cleaner { + +extern const wchar_t kQuarantineFolder[]; +extern const char kQuarantinePassword[]; +extern const int64_t kQuarantineSourceSizeLimit; + +} // namespace chrome_cleaner + +#endif // CHROME_CHROME_CLEANER_CONSTANTS_QUARANTINE_CONSTANTS_H_
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index 981e6809..bf0f202 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -738,6 +738,10 @@ "//url/mojom:url_mojom_origin", ] + if (is_mac) { + public_deps += [ "//ui/views_bridge_mac:mojo" ] + } + if (safe_browsing_mode == 1) { public_deps += [ "//chrome/services/file_util/public/mojom" ] }
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl index 336bf0d8..d5d83983 100644 --- a/chrome/common/extensions/api/file_manager_private.idl +++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -736,6 +736,10 @@ // |entries| Recently modified entries. callback GetRecentFilesCallback = void([instanceOf=Entry] object[] entries); +// |entries| Entries shared with crostini container. +callback GetCrostiniSharedPathsCallback = + void([instanceOf = Entry] object[] entries); + // |status| Result of starting the install // |failure_reason| Reason for failure for a 'failed' status callback InstallLinuxPackageCallback = void( @@ -1115,6 +1119,10 @@ static void sharePathWithCrostini( [instanceof=DirectoryEntry] object entry, SimpleCallback callback); + // Returns list of paths shared with crostini container. + [nocompile] + static void getCrostiniSharedPaths(GetCrostiniSharedPathsCallback callback); + // Starts installation of a Linux package. [nocompile] static void installLinuxPackage([instanceof=Entry] object entry,
diff --git a/chrome/common/extensions/api/file_manager_private_internal.idl b/chrome/common/extensions/api/file_manager_private_internal.idl index 0d126488..51236b33 100644 --- a/chrome/common/extensions/api/file_manager_private_internal.idl +++ b/chrome/common/extensions/api/file_manager_private_internal.idl
@@ -32,6 +32,7 @@ callback ValidatePathNameLengthCallback = void(boolean result); callback GetDirectorySizeCallback = void(double size); callback GetRecentFilesCallback = void(EntryDescription[] entries); + callback GetCrostiniSharedPathsCallback = void(EntryDescription[] entries); callback InstallLinuxPackageCallback = void(fileManagerPrivate.InstallLinuxPackageResponse response, optional DOMString failure_reason); @@ -102,6 +103,8 @@ GetRecentFilesCallback callback); static void sharePathWithCrostini(DOMString url, SimpleCallback callback); + static void getCrostiniSharedPaths( + GetCrostiniSharedPathsCallback callback); static void installLinuxPackage(DOMString url, InstallLinuxPackageCallback callback); static void getThumbnail(DOMString url,
diff --git a/chrome/common/mac/app_shim.mojom b/chrome/common/mac/app_shim.mojom index 2b02a9a..4ad1dbd 100644 --- a/chrome/common/mac/app_shim.mojom +++ b/chrome/common/mac/app_shim.mojom
@@ -5,6 +5,7 @@ module chrome.mojom; import "mojo/public/mojom/base/file_path.mojom"; +import "ui/views_bridge_mac/mojo/bridge_factory.mojom"; [Native] enum AppShimLaunchType; @@ -20,6 +21,11 @@ // Interface through which the browser communicates to a shim process. interface AppShim { + // Create the interface through which BridgedNativeWidget instances may be + // created (for views::Widgets whose NSWindows exist in the app shim process). + CreateViewsBridgeFactory( + views_bridge_mac.mojom.BridgeFactory& views_bridge_factory); + // Signals that a previous LaunchApp message has been processed, and lets the // app shim process know whether it was registered successfully. LaunchAppDone(AppShimLaunchResult launch_result);
diff --git a/chrome/renderer/autofill/form_autocomplete_browsertest.cc b/chrome/renderer/autofill/form_autocomplete_browsertest.cc index a9c3207..939d212 100644 --- a/chrome/renderer/autofill/form_autocomplete_browsertest.cc +++ b/chrome/renderer/autofill/form_autocomplete_browsertest.cc
@@ -803,7 +803,7 @@ // Simulate same document navigation. autofill_agent_->form_tracker_for_testing()->DidCommitProvisionalLoad( - false, true /*is_same_document_navigation*/); + true /*is_same_document_navigation*/, ui::PAGE_TRANSITION_LINK); base::RunLoop().RunUntilIdle(); VerifyReceivedAddressRendererMessages(
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc index 2e787b7..06c8e95d 100644 --- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -701,7 +701,7 @@ void FireDidCommitProvisionalLoad() { FormTracker* tracker = autofill_agent_->form_tracker_for_testing(); static_cast<content::RenderFrameObserver*>(tracker) - ->DidCommitProvisionalLoad(false, true); + ->DidCommitProvisionalLoad(true, ui::PAGE_TRANSITION_LINK); } FakeMojoPasswordManagerDriver fake_driver_;
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc index c6575bf..b1c6a400 100644 --- a/chrome/renderer/chrome_render_frame_observer.cc +++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -375,7 +375,8 @@ } void ChromeRenderFrameObserver::DidStartProvisionalLoad( - WebDocumentLoader* document_loader) { + WebDocumentLoader* document_loader, + bool is_content_initiated) { // Let translate_helper do any preparatory work for loading a URL. if (!translate_helper_) return; @@ -385,8 +386,8 @@ } void ChromeRenderFrameObserver::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { WebLocalFrame* frame = render_frame()->GetWebFrame(); // Don't do anything for subframes.
diff --git a/chrome/renderer/chrome_render_frame_observer.h b/chrome/renderer/chrome_render_frame_observer.h index 19dc723..9bab7def 100644 --- a/chrome/renderer/chrome_render_frame_observer.h +++ b/chrome/renderer/chrome_render_frame_observer.h
@@ -52,11 +52,12 @@ const std::string& interface_name, mojo::ScopedInterfaceEndpointHandle* handle) override; bool OnMessageReceived(const IPC::Message& message) override; - void DidStartProvisionalLoad(blink::WebDocumentLoader* loader) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void DidFinishLoad() override; void DidCreateNewDocument() override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void DidClearWindowObject() override; void DidMeaningfulLayout(blink::WebMeaningfulLayout layout_type) override; void OnDestruct() override;
diff --git a/chrome/renderer/content_settings_observer.cc b/chrome/renderer/content_settings_observer.cc index cd447a7..801f504 100644 --- a/chrome/renderer/content_settings_observer.cc +++ b/chrome/renderer/content_settings_observer.cc
@@ -206,8 +206,8 @@ } void ContentSettingsObserver::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); if (frame->Parent()) return; // Not a top-level navigation.
diff --git a/chrome/renderer/content_settings_observer.h b/chrome/renderer/content_settings_observer.h index 1d88cc6..28b8eaf4 100644 --- a/chrome/renderer/content_settings_observer.h +++ b/chrome/renderer/content_settings_observer.h
@@ -120,8 +120,8 @@ // RenderFrameObserver implementation. bool OnMessageReceived(const IPC::Message& message) override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void OnDestruct() override; // chrome::mojom::ContentSettingsRenderer:
diff --git a/chrome/renderer/content_settings_observer_browsertest.cc b/chrome/renderer/content_settings_observer_browsertest.cc index 5add036..b41d3ba 100644 --- a/chrome/renderer/content_settings_observer_browsertest.cc +++ b/chrome/renderer/content_settings_observer_browsertest.cc
@@ -98,8 +98,8 @@ protected: // RenderFrameObserver: void OnDestruct() override {} - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override { + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override { EXPECT_EQ(expectation_, predicate_.Run()); }
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc index ec711db9..13c4ad8 100644 --- a/chrome/renderer/net/net_error_helper.cc +++ b/chrome/renderer/net/net_error_helper.cc
@@ -272,14 +272,14 @@ } void NetErrorHelper::DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) { + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) { core_->OnStartLoad(GetFrameType(render_frame()), GetLoadingPageType(document_loader)); } -void NetErrorHelper::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { +void NetErrorHelper::DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) { // If this is a "same-document" navigation, it's not a real navigation. There // wasn't a start event for it, either, so just ignore it. if (is_same_document_navigation)
diff --git a/chrome/renderer/net/net_error_helper.h b/chrome/renderer/net/net_error_helper.h index 40d3f18c..80eb0bff 100644 --- a/chrome/renderer/net/net_error_helper.h +++ b/chrome/renderer/net/net_error_helper.h
@@ -79,9 +79,10 @@ void Feedback() override; // RenderFrameObserver implementation. - void DidStartProvisionalLoad(blink::WebDocumentLoader* loader) override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* loader, + bool is_content_initiated) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void DidFinishLoad() override; void OnStop() override; void WasShown() override;
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc index e2fd15f5..62a5f901 100644 --- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc +++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
@@ -154,7 +154,8 @@ } void MetricsRenderFrameObserver::DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) { + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) { // Create a new data use tracker for the new provisional load. provisional_frame_resource_data_use_ = std::make_unique<PageResourceDataUse>(); @@ -168,8 +169,8 @@ } void MetricsRenderFrameObserver::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { // Same-document navigations (e.g. a navigation from a fragment link) aren't // full page loads, since they don't go to network to load the main HTML // resource. DidStartProvisionalLoad doesn't get invoked for same document
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h index 3555122..d78e6ede 100644 --- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h +++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.h
@@ -53,11 +53,11 @@ int request_id, const network::URLLoaderCompletionStatus& status) override; void DidCancelResponse(int request_id) override; - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void DidFailProvisionalLoad(const blink::WebURLError& error) override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void OnDestruct() override; // Invoked when a frame is going away. This is our last chance to send IPCs
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc index 8be20eb..3ba040ac 100644 --- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc +++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer_unittest.cc
@@ -81,8 +81,8 @@ page_load_metrics::InitPageLoadTimingForTest(&timing); timing.navigation_start = nav_start; observer.ExpectPageLoadTiming(timing); - observer.DidStartProvisionalLoad(nullptr); - observer.DidCommitProvisionalLoad(true, false); + observer.DidStartProvisionalLoad(nullptr, true); + observer.DidCommitProvisionalLoad(false, ui::PAGE_TRANSITION_LINK); observer.GetMockTimer()->Fire(); timing.document_timing->first_layout = first_layout; @@ -104,8 +104,8 @@ page_load_metrics::InitPageLoadTimingForTest(&timing); timing.navigation_start = nav_start; observer.ExpectPageLoadTiming(timing); - observer.DidStartProvisionalLoad(nullptr); - observer.DidCommitProvisionalLoad(true, false); + observer.DidStartProvisionalLoad(nullptr, true); + observer.DidCommitProvisionalLoad(false, ui::PAGE_TRANSITION_LINK); observer.GetMockTimer()->Fire(); timing.document_timing->first_layout = first_layout; @@ -151,8 +151,8 @@ page_load_metrics::InitPageLoadTimingForTest(&timing); timing.navigation_start = nav_start; observer.ExpectPageLoadTiming(timing); - observer.DidStartProvisionalLoad(nullptr); - observer.DidCommitProvisionalLoad(true, false); + observer.DidStartProvisionalLoad(nullptr, true); + observer.DidCommitProvisionalLoad(false, ui::PAGE_TRANSITION_LINK); observer.GetMockTimer()->Fire(); timing.document_timing->first_layout = first_layout; @@ -178,8 +178,8 @@ observer.SetMockTimer(nullptr); observer.ExpectPageLoadTiming(timing_2); - observer.DidStartProvisionalLoad(nullptr); - observer.DidCommitProvisionalLoad(true, false); + observer.DidStartProvisionalLoad(nullptr, true); + observer.DidCommitProvisionalLoad(false, ui::PAGE_TRANSITION_LINK); observer.GetMockTimer()->Fire(); timing_2.document_timing->first_layout = first_layout_2;
diff --git a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js index 1330e2e..244d826f 100644 --- a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js +++ b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js
@@ -224,6 +224,16 @@ url, callback); }); + apiFunctions.setHandleRequest( + 'getCrostiniSharedPaths', function(callback) { + fileManagerPrivateInternal.getCrostiniSharedPaths( + function(entryDescriptions) { + callback(entryDescriptions.map(function(description) { + return GetExternalFileEntry(description); + })); + }); + }); + apiFunctions.setHandleRequest('installLinuxPackage', function( entry, callback) { var url = fileManagerPrivateNatives.GetEntryURL(entry);
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc b/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc index 8d8cd2a..2d453ce 100644 --- a/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc +++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate.cc
@@ -147,8 +147,8 @@ } void PhishingClassifierDelegate::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); // A new page is starting to load, so cancel classificaiton. // @@ -158,16 +158,12 @@ // be called again for the same-document navigation. We need to be sure not // to swap out the page text while the term feature extractor is still // running. - DocumentState* document_state = - DocumentState::FromDocumentLoader(frame->GetDocumentLoader()); - NavigationState* navigation_state = document_state->navigation_state(); - CancelPendingClassification(navigation_state->WasWithinSameDocument() - ? NAVIGATE_WITHIN_PAGE - : NAVIGATE_AWAY); + CancelPendingClassification(is_same_document_navigation ? NAVIGATE_WITHIN_PAGE + : NAVIGATE_AWAY); if (frame->Parent()) return; - last_main_frame_transition_ = navigation_state->GetTransitionType(); + last_main_frame_transition_ = transition; } void PhishingClassifierDelegate::PageCaptured(base::string16* page_text,
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_delegate.h b/chrome/renderer/safe_browsing/phishing_classifier_delegate.h index f598c2c..157a1f8 100644 --- a/chrome/renderer/safe_browsing/phishing_classifier_delegate.h +++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate.h
@@ -68,8 +68,8 @@ // WebFrame. Typically, this will cause any pending classification to be // cancelled. However, if the navigation is within the same page, we // continue running the current classification. - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; private: friend class PhishingClassifierDelegateTest;
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc index 514d9bd..d20ca24 100644 --- a/chrome/renderer/searchbox/searchbox.cc +++ b/chrome/renderer/searchbox/searchbox.cc
@@ -528,8 +528,8 @@ return GetMostVisitedItemWithID(item_id, &item) ? item.url : GURL(); } -void SearchBox::DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) { +void SearchBox::DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) { can_run_js_in_renderframe_ = true; }
diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h index 8085fc37..166ec73 100644 --- a/chrome/renderer/searchbox/searchbox.h +++ b/chrome/renderer/searchbox/searchbox.h
@@ -162,8 +162,8 @@ private: // Overridden from content::RenderFrameObserver: - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void OnDestruct() override; // Overridden from chrome::mojom::EmbeddedSearchClient:
diff --git a/chrome/services/isolated_xr_device/BUILD.gn b/chrome/services/isolated_xr_device/BUILD.gn index e371a3f..ad93a68 100644 --- a/chrome/services/isolated_xr_device/BUILD.gn +++ b/chrome/services/isolated_xr_device/BUILD.gn
@@ -11,12 +11,17 @@ "xr_device_service.h", "xr_runtime_provider.cc", "xr_runtime_provider.h", + "xr_test_hook_registration.cc", + "xr_test_hook_registration.h", + "xr_test_hook_wrapper.cc", + "xr_test_hook_wrapper.h", ] deps = [ "//base", "//device/vr:vr", "//device/vr/public/mojom", + "//device/vr/public/mojom:test_mojom", "//services/service_manager/public/cpp", "//services/service_manager/public/mojom", ]
diff --git a/chrome/services/isolated_xr_device/manifest.json b/chrome/services/isolated_xr_device/manifest.json index 5346733..4f1080e 100644 --- a/chrome/services/isolated_xr_device/manifest.json +++ b/chrome/services/isolated_xr_device/manifest.json
@@ -5,7 +5,8 @@ "interface_provider_specs": { "service_manager:connector": { "provides": { - "xr_device_provider": [ "device.mojom.IsolatedXRRuntimeProvider" ] + "xr_device_provider": [ "device.mojom.IsolatedXRRuntimeProvider" ], + "xr_device_test_hook": [ "device_test.mojom.XRTestHookRegistration" ] }, "requires": { }
diff --git a/chrome/services/isolated_xr_device/xr_device_service.cc b/chrome/services/isolated_xr_device/xr_device_service.cc index 45e9138..245d357 100644 --- a/chrome/services/isolated_xr_device/xr_device_service.cc +++ b/chrome/services/isolated_xr_device/xr_device_service.cc
@@ -6,6 +6,7 @@ #include "base/bind.h" #include "chrome/services/isolated_xr_device/xr_runtime_provider.h" +#include "chrome/services/isolated_xr_device/xr_test_hook_registration.h" #include "mojo/public/cpp/bindings/strong_binding.h" #include "services/service_manager/public/cpp/service_context.h" @@ -23,10 +24,20 @@ std::move(request)); } +void XrDeviceService::OnTestHookRequest( + device_test::mojom::XRTestHookRegistrationRequest request) { + mojo::MakeStrongBinding( + std::make_unique<XRTestHookRegistration>(ref_factory_->CreateRef()), + std::move(request)); +} + XrDeviceService::XrDeviceService() { // Register device provider here. registry_.AddInterface(base::BindRepeating( &XrDeviceService::OnDeviceProviderRequest, base::Unretained(this))); + + registry_.AddInterface(base::BindRepeating( + &XrDeviceService::OnTestHookRequest, base::Unretained(this))); } XrDeviceService::~XrDeviceService() {}
diff --git a/chrome/services/isolated_xr_device/xr_device_service.h b/chrome/services/isolated_xr_device/xr_device_service.h index fe8cb8ab..1c61352 100644 --- a/chrome/services/isolated_xr_device/xr_device_service.h +++ b/chrome/services/isolated_xr_device/xr_device_service.h
@@ -5,6 +5,7 @@ #ifndef CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_DEVICE_SERVICE_H_ #define CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_DEVICE_SERVICE_H_ +#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" #include "device/vr/public/mojom/isolated_xr_service.mojom.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "services/service_manager/public/cpp/binder_registry.h" @@ -22,6 +23,8 @@ ~XrDeviceService() override; void OnDeviceProviderRequest( device::mojom::IsolatedXRRuntimeProviderRequest request); + void OnTestHookRequest( + device_test::mojom::XRTestHookRegistrationRequest request); private: // service_manager::Service
diff --git a/chrome/services/isolated_xr_device/xr_runtime_provider.h b/chrome/services/isolated_xr_device/xr_runtime_provider.h index a68f3bd..93102e14 100644 --- a/chrome/services/isolated_xr_device/xr_runtime_provider.h +++ b/chrome/services/isolated_xr_device/xr_runtime_provider.h
@@ -5,6 +5,7 @@ #ifndef CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_RUNTIME_PROVIDER_H_ #define CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_RUNTIME_PROVIDER_H_ +#include "device/vr/buildflags/buildflags.h" #include "device/vr/public/mojom/isolated_xr_service.mojom.h" #include "services/service_manager/public/cpp/service_context.h" #include "services/service_manager/public/cpp/service_context_ref.h" @@ -29,8 +30,13 @@ IsolatedXRRuntimeProvider(); +#if BUILDFLAG(ENABLE_OCULUS_VR) std::unique_ptr<device::OculusDevice> oculus_device_; +#endif + +#if BUILDFLAG(ENABLE_OPENVR) std::unique_ptr<device::OpenVRDevice> openvr_device_; +#endif device::mojom::IsolatedXRRuntimeProviderClientPtr client_; };
diff --git a/chrome/services/isolated_xr_device/xr_test_hook_registration.cc b/chrome/services/isolated_xr_device/xr_test_hook_registration.cc new file mode 100644 index 0000000..71f818c5 --- /dev/null +++ b/chrome/services/isolated_xr_device/xr_test_hook_registration.cc
@@ -0,0 +1,50 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/services/isolated_xr_device/xr_test_hook_registration.h" +#include "chrome/services/isolated_xr_device/xr_test_hook_wrapper.h" +#include "device/vr/openvr/openvr_api_wrapper.h" + +namespace device { + +void XRTestHookRegistration::SetTestHook( + device_test::mojom::XRTestHookPtr hook, + device_test::mojom::XRTestHookRegistration::SetTestHookCallback callback) { + // Create a new wrapper (or use null) + std::unique_ptr<XRTestHookWrapper> wrapper = + hook ? std::make_unique<XRTestHookWrapper>(hook.PassInterface()) + : nullptr; + + // Register the wrapper testhook with OpenVR. + OpenVRWrapper::SetTestHook(wrapper.get()); + + // Store the new wrapper, so we keep it alive. + wrapper_ = std::move(wrapper); + + std::move(callback).Run(); +} + +XRTestHookRegistration::~XRTestHookRegistration() { + // If we have an existing wrapper, and it is bound to a thread, post a message + // to destroy it on that thread. + if (wrapper_) { + auto runner = wrapper_->GetBoundTaskRunner(); + runner->PostTask(FROM_HERE, + base::BindOnce( + [](std::unique_ptr<XRTestHookWrapper> wrapper) { + // Unset the testhook wrapper with OpenVR, so any + // future calls to OpenVR don't use it. + OpenVRWrapper::SetTestHook(nullptr); + + // Destroy the test hook wrapper on this thread. + }, + std::move(wrapper_))); + } +} + +XRTestHookRegistration::XRTestHookRegistration( + std::unique_ptr<service_manager::ServiceContextRef> service_ref) + : service_ref_(std::move(service_ref)) {} + +} // namespace device
diff --git a/chrome/services/isolated_xr_device/xr_test_hook_registration.h b/chrome/services/isolated_xr_device/xr_test_hook_registration.h new file mode 100644 index 0000000..ed60274b --- /dev/null +++ b/chrome/services/isolated_xr_device/xr_test_hook_registration.h
@@ -0,0 +1,37 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_REGISTRATION_H_ +#define CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_REGISTRATION_H_ + +#include <memory> + +#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" +#include "services/service_manager/public/cpp/service_context.h" +#include "services/service_manager/public/cpp/service_context_ref.h" + +namespace device { +class XRTestHookWrapper; + +class XRTestHookRegistration + : public device_test::mojom::XRTestHookRegistration { + public: + explicit XRTestHookRegistration( + std::unique_ptr<service_manager::ServiceContextRef> service_ref); + ~XRTestHookRegistration() final; + + // device_test::mojom::XRTestHookRegistration + void SetTestHook( + device_test::mojom::XRTestHookPtr hook, + device_test::mojom::XRTestHookRegistration::SetTestHookCallback callback) + override; + + private: + std::unique_ptr<XRTestHookWrapper> wrapper_; + const std::unique_ptr<service_manager::ServiceContextRef> service_ref_; +}; + +} // namespace device + +#endif // CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_REGISTRATION_H_
diff --git a/chrome/services/isolated_xr_device/xr_test_hook_wrapper.cc b/chrome/services/isolated_xr_device/xr_test_hook_wrapper.cc new file mode 100644 index 0000000..f3ed6a6 --- /dev/null +++ b/chrome/services/isolated_xr_device/xr_test_hook_wrapper.cc
@@ -0,0 +1,123 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/services/isolated_xr_device/xr_test_hook_wrapper.h" + +namespace device { + +XRTestHookWrapper::XRTestHookWrapper( + device_test::mojom::XRTestHookPtrInfo hook_info) + : hook_info_(std::move(hook_info)) {} + +void XRTestHookWrapper::OnFrameSubmitted(SubmittedFrameData frame_data) { + if (hook_) { + auto submitted = device_test::mojom::SubmittedFrameData::New(); + submitted->color = + device_test::mojom::Color::New(frame_data.color.r, frame_data.color.g, + frame_data.color.b, frame_data.color.a); + + submitted->image_size = + gfx::Size(frame_data.image_width, frame_data.image_height); + submitted->eye = frame_data.left_eye ? device_test::mojom::Eye::LEFT + : device_test::mojom::Eye::RIGHT; + submitted->viewport = + gfx::Rect(frame_data.viewport.left, frame_data.viewport.right, + frame_data.viewport.top, frame_data.viewport.bottom); + hook_->OnFrameSubmitted(std::move(submitted)); + } +} + +DeviceConfig XRTestHookWrapper::WaitGetDeviceConfig() { + if (hook_) { + device_test::mojom::DeviceConfigPtr config; + hook_->WaitGetDeviceConfig(&config); + if (config) { + DeviceConfig ret = {}; + ret.interpupillary_distance = config->interpupillary_distance; + ret.viewport_left[0] = config->projection_left->left; + ret.viewport_left[1] = config->projection_left->right; + ret.viewport_left[2] = config->projection_left->top; + ret.viewport_left[3] = config->projection_left->left; + + ret.viewport_right[0] = config->projection_right->left; + ret.viewport_right[1] = config->projection_right->right; + ret.viewport_right[2] = config->projection_right->top; + ret.viewport_right[3] = config->projection_right->left; + return ret; + } + } + + return {}; +} + +PoseFrameData XRTestHookWrapper::WaitGetPresentingPose() { + if (hook_) { + device_test::mojom::PoseFrameDataPtr pose; + hook_->WaitGetPresentingPose(&pose); + if (pose) { + PoseFrameData ret = {}; + ret.is_valid = !!pose->device_to_origin; + if (ret.is_valid) { + for (int row = 0; row < 4; ++row) { + for (int col = 0; col < 4; ++col) { + ret.device_to_origin[row * 4 + col] = + pose->device_to_origin->matrix().getFloat(row, col); + } + } + } + + return ret; + } + } + + return {}; +} + +PoseFrameData XRTestHookWrapper::WaitGetMagicWindowPose() { + if (hook_) { + device_test::mojom::PoseFrameDataPtr pose; + hook_->WaitGetMagicWindowPose(&pose); + if (pose) { + PoseFrameData ret = {}; + ret.is_valid = !!pose->device_to_origin; + if (ret.is_valid) { + for (int row = 0; row < 4; ++row) { + for (int col = 0; col < 4; ++col) { + ret.device_to_origin[row * 4 + col] = + pose->device_to_origin->matrix().getFloat(row, col); + } + } + } + + return ret; + } + } + + return {}; +} + +void XRTestHookWrapper::AttachCurrentThread() { + if (hook_info_) { + hook_.Bind(std::move(hook_info_)); + } + + current_task_runner_ = base::ThreadTaskRunnerHandle::Get(); +} + +void XRTestHookWrapper::DetachCurrentThread() { + if (hook_) { + hook_info_ = hook_.PassInterface(); + } + + current_task_runner_ = nullptr; +} + +scoped_refptr<base::SingleThreadTaskRunner> +XRTestHookWrapper::GetBoundTaskRunner() { + return current_task_runner_; +} + +XRTestHookWrapper::~XRTestHookWrapper() = default; + +} // namespace device
diff --git a/chrome/services/isolated_xr_device/xr_test_hook_wrapper.h b/chrome/services/isolated_xr_device/xr_test_hook_wrapper.h new file mode 100644 index 0000000..873c713 --- /dev/null +++ b/chrome/services/isolated_xr_device/xr_test_hook_wrapper.h
@@ -0,0 +1,41 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_WRAPPER_H_ +#define CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_WRAPPER_H_ + +#include "device/vr/openvr/test/test_hook.h" +#include "device/vr/public/mojom/browser_test_interfaces.mojom.h" + +namespace device { + +// Wraps a mojo test hook to implement the OpenVRTestHook C++ interface. Our +// use of OpenVR is single-threaded at a time, and we initialize/uninitialize +// as we switch between immersive and non-immersive sessions. +// The mojo pointer is thread-affine, but we can keep the same mojo connection +// by getting its PtrInfo so we temporarily make the test hook mojo pointer +// live on the thread that we are using OpenVR on while OpenVR is initialized. +class XRTestHookWrapper : public OpenVRTestHook { + public: + explicit XRTestHookWrapper(device_test::mojom::XRTestHookPtrInfo hook_info); + virtual ~XRTestHookWrapper(); + + void OnFrameSubmitted(SubmittedFrameData frame_data) override; + DeviceConfig WaitGetDeviceConfig() override; + PoseFrameData WaitGetPresentingPose() override; + PoseFrameData WaitGetMagicWindowPose() override; + void AttachCurrentThread() override; + void DetachCurrentThread() override; + + scoped_refptr<base::SingleThreadTaskRunner> GetBoundTaskRunner(); + + private: + device_test::mojom::XRTestHookPtr hook_; + device_test::mojom::XRTestHookPtrInfo hook_info_; + scoped_refptr<base::SingleThreadTaskRunner> current_task_runner_; +}; + +} // namespace device + +#endif // CHROME_SERVICES_ISOLATED_XR_DEVICE_XR_TEST_HOOK_WRAPPER_H_
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 33a1ece..64d7698 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -1407,6 +1407,7 @@ "../browser/extensions/updater/extension_update_client_base_browsertest.cc", "../browser/extensions/updater/extension_update_client_base_browsertest.h", "../browser/extensions/updater/update_service_browsertest.cc", + "../browser/extensions/user_script_listener_browsertest.cc", "../browser/extensions/view_extension_source_browsertest.cc", "../browser/extensions/wake_event_page_apitest.cc", "../browser/extensions/wasm_app_browsertest.cc", @@ -1430,6 +1431,7 @@ "../browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_model_browsertest_win.cc", "../browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_test_utils.cc", "../browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_test_utils.h", + "../browser/ui/views/media_router/media_router_dialog_controller_views_browsertest.cc", "../browser/ui/webui/media_router/media_router_dialog_controller_webui_impl_browsertest.cc", ]
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc index 4fee8e0..5ab8e67 100644 --- a/chrome/test/base/in_process_browser_test.cc +++ b/chrome/test/base/in_process_browser_test.cc
@@ -88,8 +88,13 @@ #endif #if defined(OS_CHROMEOS) +#include "ash/test/ui_controls_factory_ash.h" #include "chrome/browser/chromeos/input_method/input_method_configuration.h" #include "chrome/test/base/default_ash_event_generator_delegate.h" +#include "ui/aura/test/ui_controls_factory_aura.h" +#include "ui/aura/window.h" +#include "ui/base/test/ui_controls.h" +#include "ui/base/ui_base_features.h" #include "ui/events/test/event_generator.h" #endif // defined(OS_CHROMEOS) @@ -481,6 +486,16 @@ SetInitialWebContents(tab); } +#if defined(OS_CHROMEOS) + if (features::IsUsingWindowService()) { + aura::WindowTreeHost* host = + browser_ ? browser_->window()->GetNativeWindow()->GetHost() : nullptr; + ui_controls::InstallUIControlsAura(aura::test::CreateUIControlsAura(host)); + } else { + ui_controls::InstallUIControlsAura(ash::test::CreateAshUIControls()); + } +#endif + #if !defined(OS_ANDROID) // Do not use the real StorageMonitor for tests, which introduces another // source of variability and potential slowness.
diff --git a/chrome/test/base/interactive_ui_tests_main.cc b/chrome/test/base/interactive_ui_tests_main.cc index d63a4d4..1635f55 100644 --- a/chrome/test/base/interactive_ui_tests_main.cc +++ b/chrome/test/base/interactive_ui_tests_main.cc
@@ -20,10 +20,6 @@ #endif #endif -#if defined(OS_CHROMEOS) -#include "ash/test/ui_controls_factory_ash.h" -#endif - #if defined(OS_WIN) #include "base/win/scoped_com_initializer.h" #include "chrome/test/base/always_on_top_window_killer_win.h" @@ -47,7 +43,8 @@ ui_controls::EnableUIControls(); #if defined(OS_CHROMEOS) - ui_controls::InstallUIControlsAura(ash::test::CreateAshUIControls()); + // Do not InstallUIControlsAura in ChromeOS, it will be installed in + // InProcessBrowserTest::PreRunTestOnMainThread(). #elif defined(USE_AURA) #if defined(OS_WIN) com_initializer_.reset(new base::win::ScopedCOMInitializer());
diff --git a/chrome/test/base/view_event_test_base.cc b/chrome/test/base/view_event_test_base.cc index 19ab40f..4b69c3f 100644 --- a/chrome/test/base/view_event_test_base.cc +++ b/chrome/test/base/view_event_test_base.cc
@@ -20,6 +20,14 @@ #include "ui/views/view.h" #include "ui/views/widget/widget.h" +#if defined(OS_CHROMEOS) +#include "ash/test/ui_controls_factory_ash.h" +#include "ui/aura/test/ui_controls_factory_aura.h" +#include "ui/aura/window.h" +#include "ui/base/test/ui_controls_aura.h" +#include "ui/base/ui_base_features.h" +#endif + namespace { // View subclass that allows you to specify the preferred size. @@ -94,6 +102,13 @@ gfx::NativeWindow context = platform_part_->GetContext(); window_ = views::Widget::CreateWindowWithContext(this, context); window_->Show(); +#if defined(OS_CHROMEOS) + ui_controls::InstallUIControlsAura( + features::IsUsingWindowService() + ? aura::test::CreateUIControlsAura( + window_->GetNativeWindow()->GetHost()) + : ash::test::CreateAshUIControls()); +#endif } void ViewEventTestBase::TearDown() {
diff --git a/chrome/test/data/extensions/api_test/file_browser/crostini_test/test.js b/chrome/test/data/extensions/api_test/file_browser/crostini_test/test.js index 9776721bc..f0898ec 100644 --- a/chrome/test/data/extensions/api_test/file_browser/crostini_test/test.js +++ b/chrome/test/data/extensions/api_test/file_browser/crostini_test/test.js
@@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + +// This api testing extension's ID. Files referenced as Entry will +// have this as part of their URL. +const TEST_EXTENSION_ID = 'pkplfbidichfdicaijlchgnapepdginl'; + /** * Get specified entry. * @param {string} volumeType volume type for entry. @@ -47,4 +52,18 @@ 'Share with Linux only allowed for directories within Downloads.')); }); }, + function testGetCrostiniSharedPaths() { + const urlPrefix = 'filesystem:chrome-extension://' + TEST_EXTENSION_ID + + '/external/Downloads-user'; + chrome.fileManagerPrivate.getCrostiniSharedPaths( + chrome.test.callbackPass((entries) => { + chrome.test.assertEq(2, entries.length); + chrome.test.assertEq(urlPrefix + '/shared1', entries[0].toURL()); + chrome.test.assertTrue(entries[0].isDirectory); + chrome.test.assertEq('/shared1', entries[0].fullPath); + chrome.test.assertEq(urlPrefix + '/shared2', entries[1].toURL()); + chrome.test.assertTrue(entries[1].isDirectory); + chrome.test.assertEq('/shared2', entries[1].fullPath); + })); + } ]);
diff --git a/chromecast/media/cma/backend/stream_mixer.cc b/chromecast/media/cma/backend/stream_mixer.cc index 6374d401..8c1aef84 100644 --- a/chromecast/media/cma/backend/stream_mixer.cc +++ b/chromecast/media/cma/backend/stream_mixer.cc
@@ -87,7 +87,7 @@ } void OnMuteChangeRequest(bool new_muted) override { - mixer_->SetVolume(AudioContentType::kMedia, new_muted); + mixer_->SetMuted(AudioContentType::kMedia, new_muted); } private:
diff --git a/chromeos/components/drivefs/fake_drivefs.cc b/chromeos/components/drivefs/fake_drivefs.cc index 7a564e71..e992ec6b 100644 --- a/chromeos/components/drivefs/fake_drivefs.cc +++ b/chromeos/components/drivefs/fake_drivefs.cc
@@ -200,4 +200,46 @@ std::move(callback).Run(base::nullopt); } +void FakeDriveFs::CopyFile(const base::FilePath& source, + const base::FilePath& target, + CopyFileCallback callback) { + base::FilePath source_absolute_path = mount_path_; + base::FilePath target_absolute_path = mount_path_; + CHECK(base::FilePath("/").AppendRelativePath(source, &source_absolute_path)); + CHECK(base::FilePath("/").AppendRelativePath(target, &target_absolute_path)); + + base::File::Info source_info; + if (!base::GetFileInfo(source_absolute_path, &source_info)) { + std::move(callback).Run(drive::FILE_ERROR_NOT_FOUND); + return; + } + if (source_info.is_directory) { + std::move(callback).Run(drive::FILE_ERROR_NOT_A_FILE); + return; + } + + base::File::Info target_directory_info; + if (!base::GetFileInfo(target_absolute_path.DirName(), + &target_directory_info)) { + std::move(callback).Run(drive::FILE_ERROR_NOT_FOUND); + return; + } + if (!target_directory_info.is_directory) { + std::move(callback).Run(drive::FILE_ERROR_INVALID_OPERATION); + return; + } + + if (base::PathExists(target_absolute_path)) { + std::move(callback).Run(drive::FILE_ERROR_INVALID_OPERATION); + return; + } + + if (!base::CopyFile(source_absolute_path, target_absolute_path)) { + std::move(callback).Run(drive::FILE_ERROR_FAILED); + return; + } + metadata_[target_absolute_path] = metadata_[source_absolute_path]; + std::move(callback).Run(drive::FILE_ERROR_OK); +} + } // namespace drivefs
diff --git a/chromeos/components/drivefs/fake_drivefs.h b/chromeos/components/drivefs/fake_drivefs.h index a1bce9d..1ccbe9b 100644 --- a/chromeos/components/drivefs/fake_drivefs.h +++ b/chromeos/components/drivefs/fake_drivefs.h
@@ -62,6 +62,10 @@ bool crop_to_square, GetThumbnailCallback callback) override; + void CopyFile(const base::FilePath& source, + const base::FilePath& target, + CopyFileCallback callback) override; + const base::FilePath mount_path_; std::map<base::FilePath, FileMetadata> metadata_;
diff --git a/chromeos/components/drivefs/mojom/drivefs.mojom b/chromeos/components/drivefs/mojom/drivefs.mojom index 2a617e8..7faa30ed2 100644 --- a/chromeos/components/drivefs/mojom/drivefs.mojom +++ b/chromeos/components/drivefs/mojom/drivefs.mojom
@@ -43,6 +43,12 @@ // does not exist or does not have a thumbnail, |thumbnail| will be null. GetThumbnail(mojo_base.mojom.FilePath path, bool crop_to_square) => ( array<uint8>? thumbnail); + + // Copy a file at |source| to |target|. If |source| refers to a directory, + // kNotAFile is returned. |target| is the path to the desired output of the + // copy; its parent must be an existing directory. + CopyFile(mojo_base.mojom.FilePath source, mojo_base.mojom.FilePath target) => + (FileError error); }; // Implemented by Chrome, used from DriveFS.
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb index a7918296..4e0145a 100644 --- a/chromeos/strings/chromeos_strings_bn.xtb +++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -15,7 +15,9 @@ <translation id="54609108002486618">পরিচালিত</translation> <translation id="5832805196449965646">একজন ব্যক্তিকে যোগ করুন</translation> <translation id="5895138241574237353">পুনর্সূচনা</translation> +<translation id="7222902781030499995">টাইমার বন্ধ করুন</translation> <translation id="7658239707568436148">বাতিল</translation> +<translation id="7837740436429729974">সময় শেষ</translation> <translation id="8898978413391960553">০০:০০ সেকেন্ড</translation> <translation id="9111102763498581341">আনলক</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb index ba8c9ae3..eb97343 100644 --- a/chromeos/strings/chromeos_strings_el.xtb +++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">Διαχειριζόμενη</translation> <translation id="5832805196449965646">Προσθήκη ατόμου</translation> <translation id="5895138241574237353">Επανεκκίνηση</translation> +<translation id="7222902781030499995">Διακοπή χρονομέτρου</translation> <translation id="7658239707568436148">Ακύρωση</translation> +<translation id="7837740436429729974">Ο χρόνος τελείωσε</translation> <translation id="8898978413391960553">00:00 δευτ.</translation> <translation id="9111102763498581341">Ξεκλείδωμα</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb index 489cb86..d6fef9f5 100644 --- a/chromeos/strings/chromeos_strings_es-419.xtb +++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">Gestionado</translation> <translation id="5832805196449965646">Agregar un usuario</translation> <translation id="5895138241574237353">Reiniciar</translation> +<translation id="7222902781030499995">Detener temporizador</translation> <translation id="7658239707568436148">Cancelar</translation> +<translation id="7837740436429729974">Tiempo agotado</translation> <translation id="8898978413391960553">00:00 s</translation> <translation id="9111102763498581341">Desbloquear</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb index 0402b70..c910b31 100644 --- a/chromeos/strings/chromeos_strings_es.xtb +++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -15,7 +15,9 @@ <translation id="54609108002486618">Administrado</translation> <translation id="5832805196449965646">Añadir perfil</translation> <translation id="5895138241574237353">Reiniciar</translation> +<translation id="7222902781030499995">Detener temporizador</translation> <translation id="7658239707568436148">Cancelar</translation> +<translation id="7837740436429729974">Tiempo agotado</translation> <translation id="8898978413391960553">00:00 s</translation> <translation id="9111102763498581341">Desbloquear</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb index 964f2bd4..9ee95a2 100644 --- a/chromeos/strings/chromeos_strings_gu.xtb +++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -15,7 +15,9 @@ <translation id="54609108002486618">મેનેજ કરેલું</translation> <translation id="5832805196449965646">વ્યક્તિ ઉમેરો</translation> <translation id="5895138241574237353">પુનઃપ્રારંભ કરો</translation> +<translation id="7222902781030499995">ટાઇમર રોકો</translation> <translation id="7658239707568436148">રદ કરો</translation> +<translation id="7837740436429729974">સમય સમાપ્ત</translation> <translation id="8898978413391960553">00:00 સેકન્ડ</translation> <translation id="9111102763498581341">અનલોક કરો</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb index 0e4b57ec..af84d69 100644 --- a/chromeos/strings/chromeos_strings_ja.xtb +++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">管理</translation> <translation id="5832805196449965646">ユーザーを追加</translation> <translation id="5895138241574237353">再起動</translation> +<translation id="7222902781030499995">タイマーを停止します</translation> <translation id="7658239707568436148">キャンセル</translation> +<translation id="7837740436429729974">タイムアップ</translation> <translation id="8898978413391960553">00:00 秒</translation> <translation id="9111102763498581341">ロック解除</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb index 1834976f..5635848a 100644 --- a/chromeos/strings/chromeos_strings_ko.xtb +++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">관리</translation> <translation id="5832805196449965646">사용자 추가</translation> <translation id="5895138241574237353">다시 시작</translation> +<translation id="7222902781030499995">타이머 중지</translation> <translation id="7658239707568436148">취소</translation> +<translation id="7837740436429729974">타이머가 만료됨</translation> <translation id="8898978413391960553">00:00초</translation> <translation id="9111102763498581341">잠금 해제</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb index 64863cb..3b56ba3df 100644 --- a/chromeos/strings/chromeos_strings_lv.xtb +++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">Pārvaldītais</translation> <translation id="5832805196449965646">Pievienot personu</translation> <translation id="5895138241574237353">Restartēt</translation> +<translation id="7222902781030499995">Apturēt taimera darbību</translation> <translation id="7658239707568436148">Atcelt</translation> +<translation id="7837740436429729974">Laiks ir beidzies!</translation> <translation id="8898978413391960553">00.00 s</translation> <translation id="9111102763498581341">Atbloķēt</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb index 24960f1..dd870d0 100644 --- a/chromeos/strings/chromeos_strings_ml.xtb +++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -15,7 +15,9 @@ <translation id="54609108002486618">നിയന്ത്രിതം</translation> <translation id="5832805196449965646">വ്യക്തിയെ ചേർക്കുക</translation> <translation id="5895138241574237353">പുനരാരംഭിക്കുക</translation> +<translation id="7222902781030499995">ടൈമര് നിര്ത്തുക</translation> <translation id="7658239707568436148">റദ്ദാക്കൂ</translation> +<translation id="7837740436429729974">സമയം കഴിഞ്ഞു</translation> <translation id="8898978413391960553">00:00സെക്കൻഡ്</translation> <translation id="9111102763498581341">അണ്ലോക്ക് ചെയ്യുക</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb index 01ea2ef9..4bbc8f3 100644 --- a/chromeos/strings/chromeos_strings_mr.xtb +++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">व्यवस्थापित</translation> <translation id="5832805196449965646">व्यक्ती जोडा</translation> <translation id="5895138241574237353">रीस्टार्ट करा</translation> +<translation id="7222902781030499995">टायमर थांबवा</translation> <translation id="7658239707568436148">रद्द करा</translation> +<translation id="7837740436429729974">वेळ संपली</translation> <translation id="8898978413391960553">००:०० सेकंद</translation> <translation id="9111102763498581341">अनलॉक करा</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb index 052eac27..a7fd21d 100644 --- a/chromeos/strings/chromeos_strings_no.xtb +++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">Administrert</translation> <translation id="5832805196449965646">Legg til person</translation> <translation id="5895138241574237353">Start på nytt</translation> +<translation id="7222902781030499995">Stopp nedtellingen</translation> <translation id="7658239707568436148">Avbryt</translation> +<translation id="7837740436429729974">Tiden er ute</translation> <translation id="8898978413391960553">00:00 s</translation> <translation id="9111102763498581341">Lås opp</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb index dd7793c..35cb751 100644 --- a/chromeos/strings/chromeos_strings_pt-PT.xtb +++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">Geridos</translation> <translation id="5832805196449965646">Adicionar pessoa</translation> <translation id="5895138241574237353">Reiniciar</translation> +<translation id="7222902781030499995">Parar temporizador</translation> <translation id="7658239707568436148">Cancelar</translation> +<translation id="7837740436429729974">Acabou o tempo</translation> <translation id="8898978413391960553">00:00 seg.</translation> <translation id="9111102763498581341">Desbloquear</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb index 0e782fe2..425d0eb7 100644 --- a/chromeos/strings/chromeos_strings_ro.xtb +++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">Gestionat</translation> <translation id="5832805196449965646">Adăugați un utilizator</translation> <translation id="5895138241574237353">Reîncepe</translation> +<translation id="7222902781030499995">Oprește cronometrul</translation> <translation id="7658239707568436148">Anulează</translation> +<translation id="7837740436429729974">Timpul a expirat!</translation> <translation id="8898978413391960553">00:00 s</translation> <translation id="9111102763498581341">Deblochează</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb index 7dce143..12a0c609 100644 --- a/chromeos/strings/chromeos_strings_te.xtb +++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -9,13 +9,15 @@ <translation id="2805756323405976993">యాప్స్</translation> <translation id="2872961005593481000">షట్ డౌన్ చెయ్యండి</translation> <translation id="3147142846278915599">లాంచర్ (అనువర్తనాలను సమకాలీకరిస్తోంది...)</translation> -<translation id="5212543919916444558">నేను సహాయం అందించగలిగేలా మీ స్క్రీన్పై నాకు ఏదీ కనిపించలేదు. నన్ను ఏదైనా అడగడానికి మైక్ను నొక్కి, ప్రయత్నించండి.</translation> +<translation id="5212543919916444558">నేను సహాయం అందించగలిగేలా మీ స్క్రీన్పై నాకు ఏదీ కనిపించలేదు. మైక్ను నొక్కి, నన్ను ఏదైనా అడగడానికి ప్రయత్నించండి.</translation> <translation id="5222676887888702881">సైన్ ఔట్</translation> <translation id="5457599981699367932">అతిథి వలె బ్రౌజ్ చెయ్యండి</translation> <translation id="54609108002486618">నిర్వహించబడింది</translation> <translation id="5832805196449965646">వ్యక్తిని జోడించు</translation> <translation id="5895138241574237353">మళ్ళీ ప్రారంభించు</translation> +<translation id="7222902781030499995">టైమర్ను ఆపివేయి</translation> <translation id="7658239707568436148">రద్దు చెయ్యి</translation> -<translation id="8898978413391960553">00:00s</translation> +<translation id="7837740436429729974">సమయం ముగిసింది</translation> +<translation id="8898978413391960553">00:00సె</translation> <translation id="9111102763498581341">అన్లాక్ చెయ్యి</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb index 65b0ff5..3654cdfb 100644 --- a/chromeos/strings/chromeos_strings_zh-CN.xtb +++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">托管</translation> <translation id="5832805196449965646">添加用户</translation> <translation id="5895138241574237353">重新启动</translation> +<translation id="7222902781030499995">停止计时器</translation> <translation id="7658239707568436148">取消</translation> +<translation id="7837740436429729974">时间到</translation> <translation id="8898978413391960553">00:00 秒</translation> <translation id="9111102763498581341">解锁</translation> </translationbundle> \ No newline at end of file
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb index 9c5a850..e3b17608 100644 --- a/chromeos/strings/chromeos_strings_zh-TW.xtb +++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -16,7 +16,9 @@ <translation id="54609108002486618">管理</translation> <translation id="5832805196449965646">新增使用者</translation> <translation id="5895138241574237353">重新啟動</translation> +<translation id="7222902781030499995">停止計時器</translation> <translation id="7658239707568436148">取消</translation> +<translation id="7837740436429729974">時間到</translation> <translation id="8898978413391960553">00:00 秒</translation> <translation id="9111102763498581341">解除鎖定</translation> </translationbundle> \ No newline at end of file
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc index a74a640..35e5322 100644 --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc
@@ -169,8 +169,8 @@ std::tie(rhs.name, rhs.origin, rhs.action, rhs.is_form_tag); } -void AutofillAgent::DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) { +void AutofillAgent::DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) { blink::WebFrame* frame = render_frame()->GetWebFrame(); // TODO(dvadym): check if we need to check if it is main frame navigation // http://crbug.com/443155
diff --git a/components/autofill/content/renderer/autofill_agent.h b/components/autofill/content/renderer/autofill_agent.h index d58b328..e825c39a 100644 --- a/components/autofill/content/renderer/autofill_agent.h +++ b/components/autofill/content/renderer/autofill_agent.h
@@ -159,8 +159,8 @@ }; // content::RenderFrameObserver: - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void DidFinishDocumentLoad() override; void DidChangeScrollOffset() override; void FocusedNodeChanged(const blink::WebNode& node) override;
diff --git a/components/autofill/content/renderer/form_tracker.cc b/components/autofill/content/renderer/form_tracker.cc index f5d12ffb..458362b1f 100644 --- a/components/autofill/content/renderer/form_tracker.cc +++ b/components/autofill/content/renderer/form_tracker.cc
@@ -145,8 +145,8 @@ } } -void FormTracker::DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) { +void FormTracker::DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) { DCHECK_CALLED_ON_VALID_SEQUENCE(form_tracker_sequence_checker_); if (!is_same_document_navigation) { ResetLastInteractedElements(); @@ -156,7 +156,8 @@ FireSubmissionIfFormDisappear(SubmissionSource::SAME_DOCUMENT_NAVIGATION); } -void FormTracker::DidStartProvisionalLoad(WebDocumentLoader* document_loader) { +void FormTracker::DidStartProvisionalLoad(WebDocumentLoader* document_loader, + bool is_content_initiated) { DCHECK_CALLED_ON_VALID_SEQUENCE(form_tracker_sequence_checker_); blink::WebLocalFrame* navigated_frame = render_frame()->GetWebFrame(); // Ony handle main frame. @@ -166,18 +167,6 @@ // Bug fix for crbug.com/368690. isProcessingUserGesture() is false when // the user is performing actions outside the page (e.g. typed url, // history navigation). We don't want to trigger saving in these cases. - content::DocumentState* document_state = - content::DocumentState::FromDocumentLoader(document_loader); - DCHECK(document_state); - if (!document_state) - return; - - content::NavigationState* navigation_state = - document_state->navigation_state(); - - DCHECK(navigation_state); - if (!navigation_state) - return; // We are interested only in content initiated navigations. Explicit browser // initiated navigations (e.g. via omnibox) are discarded here. Similarly @@ -186,9 +175,8 @@ // (i.e. DidStartProvisionalLoad is called twice in this case). The check for // kWebNavigationTypeLinkClicked is reliable only for content initiated // navigations. - if (navigation_state->IsContentInitiated() && - document_loader->GetNavigationType() != - blink::kWebNavigationTypeLinkClicked) { + if (is_content_initiated && document_loader->GetNavigationType() != + blink::kWebNavigationTypeLinkClicked) { FireProbablyFormSubmitted(); } }
diff --git a/components/autofill/content/renderer/form_tracker.h b/components/autofill/content/renderer/form_tracker.h index 19a0a41..b7e7bcd4 100644 --- a/components/autofill/content/renderer/form_tracker.h +++ b/components/autofill/content/renderer/form_tracker.h
@@ -89,10 +89,10 @@ class FormElementObserverCallback; // content::RenderFrameObserver: - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void FrameDetached() override; void WillSendSubmitEvent(const blink::WebFormElement& form) override; void WillSubmitForm(const blink::WebFormElement& form) override;
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index 7f5e072..91a5edc 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1279,8 +1279,8 @@ } void PasswordAutofillAgent::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { if (!is_same_document_navigation) { checked_safe_browsing_reputation_ = false; } @@ -1392,7 +1392,8 @@ } void PasswordAutofillAgent::DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) { + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) { std::unique_ptr<RendererSavePasswordProgressLogger> logger; if (logging_state_active_) { logger.reset(new RendererSavePasswordProgressLogger(
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h index ba598e8..c0655fb 100644 --- a/components/autofill/content/renderer/password_autofill_agent.h +++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -256,11 +256,11 @@ // RenderFrameObserver: void DidFinishDocumentLoad() override; void DidFinishLoad() override; - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void WillCommitProvisionalLoad() override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void FocusedNodeChanged(const blink::WebNode& node) override; void OnDestruct() override;
diff --git a/components/autofill/content/renderer/password_generation_agent.cc b/components/autofill/content/renderer/password_generation_agent.cc index cfa4e23..ece9fc2 100644 --- a/components/autofill/content/renderer/password_generation_agent.cc +++ b/components/autofill/content/renderer/password_generation_agent.cc
@@ -209,7 +209,8 @@ } void PasswordGenerationAgent::DidCommitProvisionalLoad( - bool /*is_new_navigation*/, bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { if (is_same_document_navigation) return; password_is_generated_ = false;
diff --git a/components/autofill/content/renderer/password_generation_agent.h b/components/autofill/content/renderer/password_generation_agent.h index a5f0a8b2..66ff3e4db 100644 --- a/components/autofill/content/renderer/password_generation_agent.h +++ b/components/autofill/content/renderer/password_generation_agent.h
@@ -102,8 +102,8 @@ typedef std::vector<AccountCreationFormData> AccountCreationFormDataList; // RenderFrameObserver: - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void DidFinishDocumentLoad() override; void DidFinishLoad() override; void OnDestruct() override;
diff --git a/components/autofill/core/browser/autofill_field.cc b/components/autofill/core/browser/autofill_field.cc index 940a7c8d..e0eb40c 100644 --- a/components/autofill/core/browser/autofill_field.cc +++ b/components/autofill/core/browser/autofill_field.cc
@@ -72,6 +72,22 @@ overall_type_ = AutofillType(NO_SERVER_DATA); } +void AutofillField::add_possible_types_validities( + const std::map<ServerFieldType, AutofillProfile::ValidityState>& + possible_types_validities) { + for (const auto& possible_type_validity : possible_types_validities) { + possible_types_validities_[possible_type_validity.first].push_back( + possible_type_validity.second); + } +} + +std::vector<AutofillProfile::ValidityState> +AutofillField::get_validities_for_possible_type(ServerFieldType type) { + if (possible_types_validities_.find(type) == possible_types_validities_.end()) + return {AutofillProfile::UNVALIDATED}; + return possible_types_validities_[type]; +} + void AutofillField::SetHtmlType(HtmlFieldType type, HtmlFieldMode mode) { html_type_ = type; html_mode_ = mode;
diff --git a/components/autofill/core/browser/autofill_field.h b/components/autofill/core/browser/autofill_field.h index c12f79f..8b565fb 100644 --- a/components/autofill/core/browser/autofill_field.h +++ b/components/autofill/core/browser/autofill_field.h
@@ -59,6 +59,9 @@ // Setters for the detected types. void set_heuristic_type(ServerFieldType type); void set_server_type(ServerFieldType type); + void add_possible_types_validities( + const std::map<ServerFieldType, AutofillProfile::ValidityState>& + possible_types_validities); void set_server_predictions( const std::vector<AutofillQueryResponseContents::Field::FieldPrediction> predictions) { @@ -71,6 +74,8 @@ const ServerFieldTypeValidityStatesMap& possible_types_validities) { possible_types_validities_ = possible_types_validities; } + std::vector<AutofillProfile::ValidityState> get_validities_for_possible_type( + ServerFieldType); void SetHtmlType(HtmlFieldType type, HtmlFieldMode mode); void set_previously_autofilled(bool previously_autofilled) {
diff --git a/components/autofill/core/browser/autofill_manager.cc b/components/autofill/core/browser/autofill_manager.cc index 8a09dd1..f767e5eb 100644 --- a/components/autofill/core/browser/autofill_manager.cc +++ b/components/autofill/core/browser/autofill_manager.cc
@@ -121,34 +121,36 @@ } // Selects the right name type from the |old_types| to insert into the -// |new_types| based on |is_credit_card|. -void SelectRightNameType(const ServerFieldTypeSet& old_types, - ServerFieldTypeSet* new_types, - bool is_credit_card) { - ServerFieldTypeSet upload_types; +// |new_types| based on |is_credit_card|. This is called when we have exactly +// two possible types. +void SelectRightNameType(AutofillField* field, bool is_credit_card) { + DCHECK(field); + DCHECK_EQ(2U, field->possible_types().size()); + + ServerFieldType type_to_keep; + const auto& old_types = field->possible_types(); if (old_types.count(NAME_FIRST) && old_types.count(CREDIT_CARD_NAME_FIRST)) { - if (is_credit_card) { - new_types->insert(CREDIT_CARD_NAME_FIRST); - } else { - new_types->insert(NAME_FIRST); - } + type_to_keep = is_credit_card ? CREDIT_CARD_NAME_FIRST : NAME_FIRST; } else if (old_types.count(NAME_LAST) && old_types.count(CREDIT_CARD_NAME_LAST)) { - if (is_credit_card) { - new_types->insert(CREDIT_CARD_NAME_LAST); - } else { - new_types->insert(NAME_LAST); - } + type_to_keep = is_credit_card ? CREDIT_CARD_NAME_LAST : NAME_LAST; } else if (old_types.count(NAME_FULL) && old_types.count(CREDIT_CARD_NAME_FULL)) { - if (is_credit_card) { - new_types->insert(CREDIT_CARD_NAME_FULL); - } else { - new_types->insert(NAME_FULL); - } + type_to_keep = is_credit_card ? CREDIT_CARD_NAME_FULL : NAME_FULL; } else { - *new_types = old_types; + return; } + + ServerFieldTypeSet new_types; + ServerFieldTypeValidityStatesMap new_types_validities; + // Since the disambiguation takes place when we have only two possible types, + // here we can only add one type (as we are removing the other,) and don't + // need to keep track of other types. + new_types.insert(type_to_keep); + new_types_validities[type_to_keep] = + field->get_validities_for_possible_type(type_to_keep); + field->set_possible_types(new_types); + field->set_possible_types_validities(new_types_validities); } void LogDeveloperEngagementUkm(ukm::UkmRecorder* ukm_recorder, @@ -370,11 +372,13 @@ // Only upload server statistics and UMA metrics if at least some local data // is available to use as a baseline. - const std::vector<AutofillProfile*>& profiles = personal_data_->GetProfiles(); + std::vector<AutofillProfile*> profiles = personal_data_->GetProfiles(); + personal_data_->UpdateProfilesValidityMapsIfNeeded(profiles); if (observed_submission && form_structure->IsAutofillable()) { AutofillMetrics::LogNumberOfProfilesAtAutofillableFormSubmission( personal_data_->GetProfiles().size()); } + const std::vector<CreditCard*>& credit_cards = personal_data_->GetCreditCards(); if (profiles.empty() && credit_cards.empty()) @@ -1657,10 +1661,18 @@ base::string16 value; base::TrimWhitespace(field->value, base::TRIM_ALL, &value); - for (const AutofillProfile& profile : profiles) - profile.GetMatchingTypes(value, app_locale, &matching_types); - for (const CreditCard& card : credit_cards) + for (const AutofillProfile& profile : profiles) { + std::map<ServerFieldType, AutofillProfile::ValidityState> + matching_types_validities; + profile.GetMatchingTypesAndValidities(value, app_locale, &matching_types, + &matching_types_validities); + field->add_possible_types_validities(matching_types_validities); + } + + // TODO(crbug/880531) set possible_types_validities for credit card too. + for (const CreditCard& card : credit_cards) { card.GetMatchingTypes(value, app_locale, &matching_types); + } if (matching_types.empty()) matching_types.insert(UNKNOWN_TYPE); @@ -1676,7 +1688,7 @@ for (size_t i = 0; i < form->field_count(); ++i) { AutofillField* field = form->field(i); const ServerFieldTypeSet& upload_types = field->possible_types(); - + // The disambiguation happens when we have exactly two possible types. if (upload_types.size() == 2) { if (upload_types.count(ADDRESS_HOME_LINE1) && upload_types.count(ADDRESS_HOME_STREET_ADDRESS)) { @@ -1699,41 +1711,56 @@ // static void AutofillManager::DisambiguateAddressUploadTypes(FormStructure* form, size_t current_index) { - // This case happens when the profile has only one address line. - // Therefore the address line one and the street address (the whole - // address) have the same value and match. + // Theis happens when we have exactly two possible types, and the profile has + // only one address line. Therefore the address line one and the street + // address (the whole address) have the same value and match. // If the field is followed by a field that is predicted to be an // address line two and is empty, we can safely assume that this field // is an address line one field. Otherwise it's a whole address field. + ServerFieldTypeSet matching_types; + ServerFieldTypeValidityStatesMap matching_types_validities; + AutofillField* field = form->field(current_index); + size_t next_index = current_index + 1; if (next_index < form->field_count() && form->field(next_index)->Type().GetStorableType() == ADDRESS_HOME_LINE2 && form->field(next_index)->possible_types().count(EMPTY_TYPE)) { matching_types.insert(ADDRESS_HOME_LINE1); + matching_types_validities[ADDRESS_HOME_LINE1] = + field->get_validities_for_possible_type(ADDRESS_HOME_LINE1); } else { matching_types.insert(ADDRESS_HOME_STREET_ADDRESS); + matching_types_validities[ADDRESS_HOME_STREET_ADDRESS] = + field->get_validities_for_possible_type(ADDRESS_HOME_STREET_ADDRESS); } - AutofillField* field = form->field(current_index); field->set_possible_types(matching_types); + field->set_possible_types_validities(matching_types_validities); } // static void AutofillManager::DisambiguatePhoneUploadTypes(FormStructure* form, size_t current_index) { - // This case happens for profiles that have no country code saved. - // Therefore, both the whole number and the city code and number have - // the same value and match. + // This case happens when we have exactly two possible types, and only for + // profiles that have no country code saved. Therefore, both the whole number + // and the city code and number have the same value and match. // Since the form was submitted, it is safe to assume that the form // didn't require a country code. Thus, only PHONE_HOME_CITY_AND_NUMBER // needs to be uploaded. + ServerFieldTypeSet matching_types; - matching_types.insert(PHONE_HOME_CITY_AND_NUMBER); + ServerFieldTypeValidityStatesMap matching_types_validities; AutofillField* field = form->field(current_index); + + matching_types.insert(PHONE_HOME_CITY_AND_NUMBER); + matching_types_validities[PHONE_HOME_CITY_AND_NUMBER] = + field->get_validities_for_possible_type(PHONE_HOME_CITY_AND_NUMBER); + field->set_possible_types(matching_types); + field->set_possible_types_validities(matching_types_validities); } // static @@ -1742,7 +1769,7 @@ size_t current_index, const ServerFieldTypeSet& upload_types) { // This case happens when both a profile and a credit card have the same - // name. + // name, and when we have exactly two possible types. // If the ambiguous field has either a previous or next field that is // not name related, use that information to determine whether the field @@ -1789,16 +1816,11 @@ // Otherwise, use the previous (if it was found) or next field group to // decide whether the field is a name or a credit card name. - ServerFieldTypeSet matching_types; if (has_found_previous_type) { - SelectRightNameType(upload_types, &matching_types, - is_previous_credit_card); + SelectRightNameType(form->field(current_index), is_previous_credit_card); } else { - SelectRightNameType(upload_types, &matching_types, is_next_credit_card); + SelectRightNameType(form->field(current_index), is_next_credit_card); } - - AutofillField* field = form->field(current_index); - field->set_possible_types(matching_types); } }
diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h index 2b7feeb4..0235da4 100644 --- a/components/autofill/core/browser/autofill_manager.h +++ b/components/autofill/core/browser/autofill_manager.h
@@ -620,6 +620,8 @@ DisabledAutofillDispatchesError); FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, DetermineHeuristicsWithOverallPrediction); + FRIEND_TEST_ALL_PREFIXES(AutofillManagerTest, + DeterminePossibleFieldTypesWithMultipleValidities); FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, AddressFilledFormEvents); FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, AddressSubmittedFormEvents); FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, AddressWillSubmitFormEvents);
diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc index 2c872912..88d46f5f 100644 --- a/components/autofill/core/browser/autofill_manager_unittest.cc +++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -4561,7 +4561,8 @@ {"901", UNKNOWN_TYPE}, }; -// Tests that DeterminePossibleFieldTypesForUpload makes accurate matches. +// Tests that DeterminePossibleFieldTypesForUpload finds accurate possible types +// and validities. TEST_P(ProfileMatchingTypesTest, DeterminePossibleFieldTypesForUpload) { // Unpack the test paramters const auto& test_case = std::get<0>(GetParam()); @@ -4675,6 +4676,23 @@ EXPECT_EQ(*possible_types.begin(), vote_using_invalid_profile_data ? test_case.field_type : UNKNOWN_TYPE); + + ServerFieldTypeValidityStatesMap possible_types_validities = + form_structure.field(0)->possible_types_validities(); + bool has_possible_types_validities = + field_type_group != CREDIT_CARD && + (vote_using_invalid_profile_data || + validity_state != AutofillProfile::INVALID); + EXPECT_EQ(has_possible_types_validities ? 1U : 0U, + possible_types_validities.size()); + if (has_possible_types_validities) { + EXPECT_NE(possible_types_validities.end(), + possible_types_validities.find(test_case.field_type)); + EXPECT_EQ(possible_types_validities[test_case.field_type][0], + (validation_source == AutofillProfile::SERVER) + ? validity_state + : AutofillProfile::UNVALIDATED); + } } else { EXPECT_EQ(*possible_types.begin(), test_case.field_type); } @@ -4741,6 +4759,106 @@ FormSubmitted(form); } +// Test that the possible field types with multiple validities are determined +// correctly. +TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesWithMultipleValidities) { + // Set up the user's profiles. + std::vector<AutofillProfile> profiles; + { + AutofillProfile profile; + test::SetProfileInfo(&profile, "Elvis", "Aaron", "Presley", + "theking@gmail.com", "RCA", "3734 Elvis Presley Blvd.", + "", "Memphis", "Tennessee", "38116", "US", + "(234) 567-8901"); + profile.set_guid("00000000-0000-0000-0000-000000000001"); + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::VALID, + AutofillProfile::SERVER); + profiles.push_back(profile); + } + { + AutofillProfile profile; + test::SetProfileInfo(&profile, "Alice", "", "Munro", "munro@gmail.com", "", + "1331 W Georgia", "", "Vancouver", "Tennessee", + "V4D 4S4", "CA", "(778) 567-8901"); + profile.set_guid("00000000-0000-0000-0000-000000000002"); + profile.SetValidityState(ADDRESS_HOME_STATE, AutofillProfile::INVALID, + AutofillProfile::SERVER); + profiles.push_back(profile); + } + + // Set up the test cases: + typedef struct { + std::string input_value; + ServerFieldType field_type; + std::vector<AutofillProfile::ValidityState> expected_validity_states; + } TestFieldData; + + std::vector<TestFieldData> test_cases[2]; + // Tennessee appears in both of the user's profile as ADDRESS_HOME_STATE. In + // the first one, it's VALID, and for the other, it's INVALID. Therefore, the + // possible_field_types would only include the type ADDRESS_HOME_STATE, and + // the corresponding validity of that type would include both VALID and + // INVALID. + test_cases[0].push_back({"Tennessee", + ADDRESS_HOME_STATE, + {AutofillProfile::VALID, AutofillProfile::INVALID}}); + // Alice appears only in the second profile as a NAME_FIRST, and it's + // UNVALIDATED. + test_cases[1].push_back( + {"Alice", NAME_FIRST, {AutofillProfile::UNVALIDATED}}); + + for (const std::vector<TestFieldData>& test_fields : test_cases) { + FormData form; + form.name = ASCIIToUTF16("MyForm"); + form.origin = GURL("http://myform.com/form.html"); + form.action = GURL("http://myform.com/submit.html"); + + // Create the form fields specified in the test case. + FormFieldData field; + ServerFieldTypeSet possible_types; + ServerFieldTypeValidityStatesMap possible_types_validities; + for (const TestFieldData& test_field : test_fields) { + test::CreateTestFormField("", "1", "", "text", &field); + field.value = ASCIIToUTF16(test_field.input_value); + form.fields.push_back(field); + } + + // Assign the specified predicted type for each field in the test case. + FormStructure form_structure(form); + for (size_t i = 0; i < test_fields.size(); ++i) { + form_structure.field(i)->set_server_type(test_fields[i].field_type); + } + + AutofillManager::DeterminePossibleFieldTypesForUpload(profiles, {}, "en-us", + &form_structure); + + ASSERT_EQ(test_fields.size(), form_structure.field_count()); + + for (size_t i = 0; i < test_fields.size(); ++i) { + possible_types = form_structure.field(i)->possible_types(); + // For both cases we only expect one possible type. + EXPECT_EQ(1U, possible_types.size()); + // Expect to see the field_type as the possible type. + EXPECT_NE(possible_types.end(), + possible_types.find(test_fields[i].field_type)); + + // Expect the same for possible_types_validities. + possible_types_validities = + form_structure.field(i)->possible_types_validities(); + EXPECT_EQ(1U, possible_types_validities.size()); + EXPECT_NE(possible_types_validities.end(), + possible_types_validities.find(test_fields[i].field_type)); + // Check for the expected validity states for the possible type. + EXPECT_EQ(test_fields[i].expected_validity_states.size(), + possible_types_validities[test_fields[i].field_type].size()); + for (size_t j = 0; j < test_fields[i].expected_validity_states.size(); + ++j) + EXPECT_EQ(possible_types_validities[test_fields[i].field_type][j], + test_fields[i].expected_validity_states[j]); + } + } +} + // Tests that DisambiguateUploadTypes makes the correct choices. TEST_F(AutofillManagerTest, DisambiguateUploadTypes) { // Set up the test profile.
diff --git a/components/autofill/core/browser/autofill_profile.cc b/components/autofill/core/browser/autofill_profile.cc index 2bfd937..da32d58a 100644 --- a/components/autofill/core/browser/autofill_profile.cc +++ b/components/autofill/core/browser/autofill_profile.cc
@@ -280,6 +280,7 @@ server_id_ = profile.server_id(); has_converted_ = profile.has_converted(); SetClientValidityFromBitfieldValue(profile.GetClientValidityBitfieldValue()); + server_validity_states_ = profile.GetServerValidityMap(); return *this; } @@ -311,6 +312,43 @@ } } +void AutofillProfile::GetMatchingTypesAndValidities( + const base::string16& text, + const std::string& app_locale, + ServerFieldTypeSet* matching_types, + std::map<ServerFieldType, AutofillProfile::ValidityState>* + matching_types_validities) const { + if (!matching_types && !matching_types_validities) + return; + + ServerFieldTypeSet matching_types_in_this_profile; + FormGroupList info = FormGroups(); + for (const auto* form_group : info) { + form_group->GetMatchingTypes(text, app_locale, + &matching_types_in_this_profile); + } + + for (auto type : matching_types_in_this_profile) { + if (GetValidityState(type, CLIENT) == INVALID || + GetValidityState(type, SERVER) == INVALID || + IsAnInvalidPhoneNumber(type)) { + bool vote_using_invalid_data = base::FeatureList::IsEnabled( + features::kAutofillVoteUsingInvalidProfileData); + UMA_HISTOGRAM_BOOLEAN("Autofill.InvalidProfileData.UsedForMetrics", + vote_using_invalid_data); + if (!vote_using_invalid_data) + continue; + } + if (matching_types_validities) { + // TODO(crbug.com/879655): Set the client validities and look them up when + // the server validities are not available. + (*matching_types_validities)[type] = GetValidityState(type, SERVER); + } + if (matching_types) + matching_types->insert(type); + } +} + base::string16 AutofillProfile::GetRawInfo(ServerFieldType type) const { const FormGroup* form_group = FormGroupForType(AutofillType(type)); if (!form_group) @@ -827,6 +865,20 @@ server_validity_states_[type] = validity; } +void AutofillProfile::UpdateServerValidityMap( + const ProfileValidityMap& validity_map) { + server_validity_states_.clear(); + + const auto& field_validity_states = validity_map.field_validity_states(); + for (auto current_pair = field_validity_states.begin(); + current_pair != field_validity_states.end(); ++current_pair) { + const auto& field_type = static_cast<ServerFieldType>(current_pair->first); + const auto& field_validity = + static_cast<ValidityState>(current_pair->second); + server_validity_states_[field_type] = field_validity; + } +} + // static bool AutofillProfile::IsClientValidationSupportedForType(ServerFieldType type) { for (auto supported_type : kSupportedTypesByClientForValidation) {
diff --git a/components/autofill/core/browser/autofill_profile.h b/components/autofill/core/browser/autofill_profile.h index 5268fbd..d928d7f 100644 --- a/components/autofill/core/browser/autofill_profile.h +++ b/components/autofill/core/browser/autofill_profile.h
@@ -21,6 +21,7 @@ #include "components/autofill/core/browser/autofill_type.h" #include "components/autofill/core/browser/contact_info.h" #include "components/autofill/core/browser/phone_number.h" +#include "components/autofill/core/browser/proto/server.pb.h" namespace autofill { @@ -76,6 +77,14 @@ void GetMatchingTypes(const base::string16& text, const std::string& app_locale, ServerFieldTypeSet* matching_types) const override; + + void GetMatchingTypesAndValidities( + const base::string16& text, + const std::string& app_locale, + ServerFieldTypeSet* matching_types, + std::map<ServerFieldType, AutofillProfile::ValidityState>* + matching_types_validities) const; + base::string16 GetRawInfo(ServerFieldType type) const override; void SetRawInfo(ServerFieldType type, const base::string16& value) override; @@ -215,12 +224,15 @@ ValidityState GetValidityState(ServerFieldType type, ValidationSource source) const; - // Sets the validity state of the specified autofill type based on - // |validation_source|. + // Sets the validity state of the specified autofill type. void SetValidityState(ServerFieldType type, ValidityState validity, ValidationSource validation_source); + // Update the validity map based on the server side validity maps from the + // prefs. + void UpdateServerValidityMap(const ProfileValidityMap& validity_states); + // Returns whether autofill does the validation of the specified |type|. static bool IsClientValidationSupportedForType(ServerFieldType type); @@ -236,6 +248,10 @@ // or by looking at its components. bool IsAnInvalidPhoneNumber(ServerFieldType type) const; + const std::map<ServerFieldType, ValidityState>& GetServerValidityMap() const { + return server_validity_states_; + }; + private: typedef std::vector<const FormGroup*> FormGroupList;
diff --git a/components/autofill/core/browser/personal_data_manager.cc b/components/autofill/core/browser/personal_data_manager.cc index f5ffeb1..761efc1 100644 --- a/components/autofill/core/browser/personal_data_manager.cc +++ b/components/autofill/core/browser/personal_data_manager.cc
@@ -1027,10 +1027,14 @@ // database on startup, and it could get called when the wallet pref is // off (meaning this class won't even query for the server data) so don't // check the server_credit_cards_/profiles_ before posting to the DB. - DCHECK(database_helper_->GetServerDatabase()) - << "Updating server card metadata without server storage."; - database_helper_->GetServerDatabase()->ClearAllServerData(); + // TODO(crbug.com/864519): Move this nullcheck logic to the database helper. + // The server database can be null for a limited amount of time before the + // sync service gets initialize. Not clearing it does not matter in that case + // since it will either point to the local database (cleared next), or not + // have been created yet (nothing to clear). + if (database_helper_->GetServerDatabase()) + database_helper_->GetServerDatabase()->ClearAllServerData(); // TODO(crbug.com/864519): Remove this call once addresses support account // storage, and also use the database_helper_->GetServerDatabase() @@ -1152,6 +1156,16 @@ return result; } +void PersonalDataManager::UpdateProfilesValidityMapsIfNeeded( + std::vector<AutofillProfile*>& profiles) { + if (!profile_validities_need_update) + return; + profile_validities_need_update = false; + for (auto* profile : profiles) { + profile->UpdateServerValidityMap(GetProfileValidityByGUID(profile->guid())); + } +} + std::vector<AutofillProfile*> PersonalDataManager::GetServerProfiles() const { std::vector<AutofillProfile*> result; if (!IsAutofillProfileEnabled()) @@ -1295,6 +1309,8 @@ AutofillClock::Now() - kDisusedProfileTimeDelta; RemoveProfilesNotUsedSinceTimestamp(min_last_used, &profiles); } + // We need the updated information on the validity states of the profiles. + UpdateProfilesValidityMapsIfNeeded(profiles); MaybeRemoveInvalidSuggestions(type, &profiles); } @@ -1596,18 +1612,22 @@ } const ProfileValidityMap& PersonalDataManager::GetProfileValidityByGUID( - std::string& guid) { + const std::string& guid) { static const ProfileValidityMap& empty_validity_map = ProfileValidityMap(); if (!synced_profile_validity_) { + profile_validities_need_update = true; synced_profile_validity_ = std::make_unique<UserProfileValidityMap>(); if (!synced_profile_validity_->ParseFromString( ::autofill::prefs::GetAllProfilesValidityMapsEncodedString( pref_service_))) return empty_validity_map; } + auto it = synced_profile_validity_->profile_validity().find(guid); - if (it != synced_profile_validity_->profile_validity().end()) + if (it != synced_profile_validity_->profile_validity().end()) { return it->second; + } + return empty_validity_map; }
diff --git a/components/autofill/core/browser/personal_data_manager.h b/components/autofill/core/browser/personal_data_manager.h index 59718eb..223c028e 100644 --- a/components/autofill/core/browser/personal_data_manager.h +++ b/components/autofill/core/browser/personal_data_manager.h
@@ -232,6 +232,9 @@ // Returns the Payments customer data. Returns nullptr if no data is present. virtual PaymentsCustomerData* GetPaymentsCustomerData() const; + void UpdateProfilesValidityMapsIfNeeded( + std::vector<AutofillProfile*>& profiles); + // Returns the profiles to suggest to the user, ordered by frecency. std::vector<AutofillProfile*> GetProfilesToSuggest() const; @@ -426,6 +429,8 @@ FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, MoveJapanCityToStreetAddress); FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, RequestProfileValidity); + FRIEND_TEST_ALL_PREFIXES(PersonalDataManagerTest, + GetProfileSuggestions_InvalidDataBasedOnServer); friend class autofill::AutofillInteractiveTest; friend class autofill::PersonalDataManagerFactory; @@ -524,7 +529,7 @@ void MoveJapanCityToStreetAddress(); // Get the profiles fields validity map by |guid|. - const ProfileValidityMap& GetProfileValidityByGUID(std::string& guid); + const ProfileValidityMap& GetProfileValidityByGUID(const std::string& guid); // Decides which database type to use for server and local cards. std::unique_ptr<PersonalDatabaseHelper> database_helper_; @@ -563,6 +568,9 @@ // The observers. base::ObserverList<PersonalDataManagerObserver>::Unchecked observers_; + // |profile_valditiies_need_update| whenever the profile validities are out of + bool profile_validities_need_update = true; + private: // Saves |imported_credit_card| to the WebDB if it exists. Returns the guid of // the new or updated card, or the empty string if no card was saved. @@ -687,7 +695,10 @@ void ApplyCardFixesAndCleanups(); // Resets |synced_profile_validity_|. - void ResetProfileValidity() { synced_profile_validity_.reset(); }; + void ResetProfileValidity() { + synced_profile_validity_.reset(); + profile_validities_need_update = true; + }; const std::string app_locale_; @@ -701,7 +712,8 @@ PrefChangeRegistrar pref_registrar_; // Profiles validity read from the prefs. They are kept updated by - // observing changes in pref_services. + // observing changes in pref_services. We need to set the + // |profile_validities_need_update| whenever this is changed. std::unique_ptr<UserProfileValidityMap> synced_profile_validity_; // The identity manager that this instance uses. Must outlive this instance.
diff --git a/components/autofill/core/browser/personal_data_manager_unittest.cc b/components/autofill/core/browser/personal_data_manager_unittest.cc index 9d9ef9c..9a0ab43 100644 --- a/components/autofill/core/browser/personal_data_manager_unittest.cc +++ b/components/autofill/core/browser/personal_data_manager_unittest.cc
@@ -1990,6 +1990,72 @@ } } +// Tests that suggestions based on invalid data are handled correctly. +TEST_F(PersonalDataManagerTest, + GetProfileSuggestions_InvalidDataBasedOnServer) { + // Set up 2 different profiles. + AutofillProfile profile1(base::GenerateGUID(), test::kEmptyOrigin); + test::SetProfileInfo(&profile1, "Marion1", "Mitchell", "Morrison", + "johnwayne@me.xyz", "Fox", + "123 Zoo St.\nSecond Line\nThird line", "unit 5", + "Hollywood", "CA", "91601", "US", "9876543210"); + // Set the validity state of ADDRESS_HOME_STATE to INVALID on the prefs. + { + ProfileValidityMap profile_validity_map; + UserProfileValidityMap user_profile_validity_map; + std::string autofill_profile_validity; + personal_data_->pref_service_->SetString(prefs::kAutofillProfileValidity, + autofill_profile_validity); + (*profile_validity_map.mutable_field_validity_states())[static_cast<int>( + ADDRESS_HOME_STATE)] = static_cast<int>(AutofillProfile::INVALID); + (*user_profile_validity_map.mutable_profile_validity())[profile1.guid()] = + profile_validity_map; + ASSERT_TRUE(user_profile_validity_map.SerializeToString( + &autofill_profile_validity)); + personal_data_->pref_service_->SetString(prefs::kAutofillProfileValidity, + autofill_profile_validity); + } + profile1.set_use_date(AutofillClock::Now() - base::TimeDelta::FromDays(20)); + personal_data_->AddProfile(profile1); + + AutofillProfile profile2(base::GenerateGUID(), test::kEmptyOrigin); + test::SetProfileInfo(&profile2, "Marion2", "Mitchell", "Morrison", + "johnwayne@me.xyz", "Fox", + "456 Zoo St.\nSecond Line\nThird line", "unit 5", + "Hollywood", "NY", "91601", "US", "1234567890"); + personal_data_->AddProfile(profile2); + + ResetPersonalDataManager(USER_MODE_NORMAL); + { + base::HistogramTester histogram_tester; + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndDisableFeature( + features::kAutofillSuggestInvalidProfileData); + std::vector<Suggestion> suggestions = personal_data_->GetProfileSuggestions( + AutofillType(ADDRESS_HOME_STATE), base::string16(), false, + std::vector<ServerFieldType>()); + ASSERT_EQ(1U, suggestions.size()); + EXPECT_EQ(base::ASCIIToUTF16("NY"), suggestions[0].value); + histogram_tester.ExpectUniqueSample( + "Autofill.InvalidProfileData.UsedForSuggestion", false, 1); + } + + { + base::HistogramTester histogram_tester; + base::test::ScopedFeatureList scoped_features; + scoped_features.InitAndEnableFeature( + features::kAutofillSuggestInvalidProfileData); + std::vector<Suggestion> suggestions = personal_data_->GetProfileSuggestions( + AutofillType(ADDRESS_HOME_STATE), base::string16(), false, + std::vector<ServerFieldType>()); + ASSERT_EQ(2U, suggestions.size()); + EXPECT_EQ(base::ASCIIToUTF16("CA"), suggestions[1].value); + EXPECT_EQ(base::ASCIIToUTF16("NY"), suggestions[0].value); + histogram_tester.ExpectUniqueSample( + "Autofill.InvalidProfileData.UsedForSuggestion", true, 1); + } +} + // Test that local and server profiles are not shown if // |kAutofillProfileEnabled| is set to |false|. TEST_F(PersonalDataManagerTest, GetProfileSuggestions_ProfileAutofillDisabled) {
diff --git a/components/autofill/core/browser/proto/server.proto b/components/autofill/core/browser/proto/server.proto index 741932a..39cb0de 100644 --- a/components/autofill/core/browser/proto/server.proto +++ b/components/autofill/core/browser/proto/server.proto
@@ -279,8 +279,8 @@ optional VoteType vote_type = 23; message AutofillTypeValiditiesPair { - required fixed32 type = 1; - repeated fixed32 validity = 2; + required int32 type = 1; + repeated int32 validity = 2; } repeated AutofillTypeValiditiesPair autofill_type_validities = 24; } @@ -362,7 +362,7 @@ // from the AutofillProfile::ValidityState. Plain integers are used // instead of enums because proto2 treats unknown enum values as unknown // fields, which is confusing when the enums are in maps. - map<fixed32, fixed32> field_validity_states = 1; + map<int32, int32> field_validity_states = 1; } // Map from profile GUIDs to profile validity maps for that profile. Each
diff --git a/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.cc b/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.cc index d3ba8ab..dffaed197 100644 --- a/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.cc +++ b/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.cc
@@ -84,8 +84,8 @@ } void ContentPreviewsRenderFrameObserver::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { if (is_same_document_navigation) return;
diff --git a/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.h b/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.h index 99b1c01..43e781b 100644 --- a/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.h +++ b/components/data_reduction_proxy/content/renderer/content_previews_render_frame_observer.h
@@ -25,8 +25,8 @@ // content::RenderFrameObserver: void OnDestruct() override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; // Returns whether |previews_state| is consistent with data reduction // proxy headers found in |web_url_response| with respect to server previews.
diff --git a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc index a855560d..e249ce90 100644 --- a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc +++ b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.cc
@@ -33,7 +33,8 @@ DistillerJsRenderFrameObserver::~DistillerJsRenderFrameObserver() {} void DistillerJsRenderFrameObserver::DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) { + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) { load_active_ = true; }
diff --git a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h index 6a67caec..f32e4e451 100644 --- a/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h +++ b/components/dom_distiller/content/renderer/distiller_js_render_frame_observer.h
@@ -28,8 +28,8 @@ ~DistillerJsRenderFrameObserver() override; // RenderFrameObserver implementation. - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void DidFinishLoad() override; void DidCreateScriptContext(v8::Local<v8::Context> context, int world_id) override;
diff --git a/components/feed/core/feed_journal_database.cc b/components/feed/core/feed_journal_database.cc index 6b6593e5..3e04d28 100644 --- a/components/feed/core/feed_journal_database.cc +++ b/components/feed/core/feed_journal_database.cc
@@ -80,7 +80,7 @@ } void FeedJournalDatabase::DoesJournalExist(const std::string& key, - ConfirmationCallback callback) { + CheckExistingCallback callback) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); storage_database_->GetEntry( @@ -213,28 +213,25 @@ JournalLoadCallback callback, bool success, std::unique_ptr<JournalStorageProto> journal) { + DVLOG_IF(1, !success) << "FeedJournalDatabase load journal failed."; + std::vector<std::string> results; - - if (!success || !journal) { - DVLOG_IF(1, !success) << "FeedJournalDatabase load journal failed."; - std::move(callback).Run(std::move(results)); - return; + if (journal) { + for (int i = 0; i < journal->journal_data_size(); ++i) { + results.emplace_back(journal->journal_data(i)); + } } - for (int i = 0; i < journal->journal_data_size(); ++i) { - results.emplace_back(journal->journal_data(i)); - } - - std::move(callback).Run(std::move(results)); + std::move(callback).Run(success, std::move(results)); } void FeedJournalDatabase::OnGetEntryForDoesJournalExist( - ConfirmationCallback callback, + CheckExistingCallback callback, bool success, std::unique_ptr<JournalStorageProto> journal) { DVLOG_IF(1, !success) << "FeedJournalDatabase load journal failed."; - std::move(callback).Run(journal ? true : false); + std::move(callback).Run(success, journal ? true : false); } void FeedJournalDatabase::OnLoadKeysForLoadAllJournalKeys( @@ -247,7 +244,7 @@ if (keys) { results = std::move(*keys); } - std::move(callback).Run(std::move(results)); + std::move(callback).Run(success, std::move(results)); } void FeedJournalDatabase::OnGetEntryForCommitJournalMutation(
diff --git a/components/feed/core/feed_journal_database.h b/components/feed/core/feed_journal_database.h index bd3e9924..ad1eb87 100644 --- a/components/feed/core/feed_journal_database.h +++ b/components/feed/core/feed_journal_database.h
@@ -35,11 +35,14 @@ // Returns the journal data as a vector of strings when calling loading data // or keys. using JournalLoadCallback = - base::OnceCallback<void(std::vector<std::string>)>; + base::OnceCallback<void(bool, std::vector<std::string>)>; + + // Return whether the entry exists when calling for checking + // the entry's existence. + using CheckExistingCallback = base::OnceCallback<void(bool, bool)>; // Returns whether the commit operation succeeded when calling for database - // operations, or return whether the entry exists when calling for checking - // the entry's existence. + // operations. using ConfirmationCallback = base::OnceCallback<void(bool)>; using JournalMap = base::flat_map<std::string, JournalStorageProto>; @@ -66,7 +69,7 @@ // Checks if the journal for the |key| exists, and return the result to // |callback|. - void DoesJournalExist(const std::string& key, ConfirmationCallback callback); + void DoesJournalExist(const std::string& key, CheckExistingCallback callback); // Commits the operations in the |journal_mutation|. |callback| will be called // when all the operations are committed. Or if any operation failed, database @@ -99,7 +102,7 @@ bool success, std::unique_ptr<JournalStorageProto> journal); void OnGetEntryForDoesJournalExist( - ConfirmationCallback callback, + CheckExistingCallback callback, bool success, std::unique_ptr<JournalStorageProto> journal); void OnGetEntryForCommitJournalMutation(
diff --git a/components/feed/core/feed_journal_database_unittest.cc b/components/feed/core/feed_journal_database_unittest.cc index 832f738..68fcec5 100644 --- a/components/feed/core/feed_journal_database_unittest.cc +++ b/components/feed/core/feed_journal_database_unittest.cc
@@ -74,9 +74,9 @@ FeedJournalDatabase* db() { return feed_db_.get(); } - MOCK_METHOD1(OnJournalEntryReceived, void(std::vector<std::string>)); + MOCK_METHOD2(OnJournalEntryReceived, void(bool, std::vector<std::string>)); MOCK_METHOD1(OnStorageCommitted, void(bool)); - MOCK_METHOD1(OnCheckJournalExistReceived, void(bool)); + MOCK_METHOD2(OnCheckJournalExistReceived, void(bool, bool)); private: base::test::ScopedTaskEnvironment scoped_task_environment_; @@ -111,8 +111,9 @@ InjectJournalStorageProto(kJournalKey2, {kJournalData4}); // Try to Load |kJournalKey1|. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 3U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -130,8 +131,9 @@ EXPECT_TRUE(db()->IsInitialized()); // Try to Load |kJournalKey1|. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 0U); }); db()->LoadJournal( @@ -157,8 +159,9 @@ storage_db()->UpdateCallback(true); // Make sure they're there. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 2U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -185,8 +188,9 @@ storage_db()->UpdateCallback(true); // Check new instances are there. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 5U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -222,8 +226,9 @@ storage_db()->UpdateCallback(true); // Check new journal is there. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 2U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -237,8 +242,9 @@ Mock::VerifyAndClearExpectations(this); // Check new journal is there. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 4U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -254,8 +260,9 @@ Mock::VerifyAndClearExpectations(this); // Check first journal is still there. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 4U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -289,8 +296,9 @@ storage_db()->UpdateCallback(true); // Make sure |kJournalKey2| got deleted. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 0U); }); db()->LoadJournal( @@ -302,8 +310,9 @@ Mock::VerifyAndClearExpectations(this); // Make sure |kJournalKey1| is still there. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 3U); EXPECT_EQ(results[0], kJournalData1); EXPECT_EQ(results[1], kJournalData2); @@ -326,7 +335,7 @@ InjectJournalStorageProto(kJournalKey2, {kJournalData4}); // Check |kJournalKey1|. - EXPECT_CALL(*this, OnCheckJournalExistReceived(true)); + EXPECT_CALL(*this, OnCheckJournalExistReceived(true, true)); db()->DoesJournalExist( kJournalKey1, @@ -340,7 +349,7 @@ EXPECT_TRUE(db()->IsInitialized()); // Check |kJournalKey1|. - EXPECT_CALL(*this, OnCheckJournalExistReceived(false)); + EXPECT_CALL(*this, OnCheckJournalExistReceived(true, false)); db()->DoesJournalExist( kJournalKey1, base::BindOnce(&FeedJournalDatabaseTest::OnCheckJournalExistReceived, @@ -357,8 +366,9 @@ InjectJournalStorageProto(kJournalKey2, {kJournalData4, kJournalData5}); InjectJournalStorageProto(kJournalKey3, {kJournalData6}); - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 3U); EXPECT_EQ(results[0], kJournalKey1); EXPECT_EQ(results[1], kJournalKey2); @@ -387,8 +397,9 @@ storage_db()->UpdateCallback(true); // Make sure all journals got deleted. - EXPECT_CALL(*this, OnJournalEntryReceived(_)) - .WillOnce([](std::vector<std::string> results) { + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_TRUE(success); ASSERT_EQ(results.size(), 0U); }); db()->LoadAllJournalKeys( @@ -397,4 +408,92 @@ storage_db()->LoadKeysCallback(true); } +TEST_F(FeedJournalDatabaseTest, LoadJournalEntryFail) { + CreateDatabase(/*init_database=*/true); + EXPECT_TRUE(db()->IsInitialized()); + + // Store |kJournalKey1| and |kJournalKey2|. + InjectJournalStorageProto(kJournalKey1, + {kJournalData1, kJournalData2, kJournalData3}); + InjectJournalStorageProto(kJournalKey2, {kJournalData4}); + + // Try to Load |kJournalKey1|. + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_FALSE(success); + }); + db()->LoadJournal( + kJournalKey1, + base::BindOnce(&FeedJournalDatabaseTest::OnJournalEntryReceived, + base::Unretained(this))); + storage_db()->GetCallback(false); +} + +TEST_F(FeedJournalDatabaseTest, LoadNonExistingJournalEntryFail) { + CreateDatabase(/*init_database=*/true); + EXPECT_TRUE(db()->IsInitialized()); + + // Try to Load |kJournalKey1|. + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_FALSE(success); + }); + db()->LoadJournal( + kJournalKey1, + base::BindOnce(&FeedJournalDatabaseTest::OnJournalEntryReceived, + base::Unretained(this))); + storage_db()->GetCallback(false); +} + +TEST_F(FeedJournalDatabaseTest, LoadAllJournalKeysFail) { + CreateDatabase(/*init_database=*/true); + + // Store |kJournalKey1|, |kJournalKey2| and |kJournalKey3|. + InjectJournalStorageProto(kJournalKey1, + {kJournalData1, kJournalData2, kJournalData3}); + InjectJournalStorageProto(kJournalKey2, {kJournalData4, kJournalData5}); + InjectJournalStorageProto(kJournalKey3, {kJournalData6}); + + EXPECT_CALL(*this, OnJournalEntryReceived(_, _)) + .WillOnce([](bool success, std::vector<std::string> results) { + EXPECT_FALSE(success); + }); + db()->LoadAllJournalKeys( + base::BindOnce(&FeedJournalDatabaseTest::OnJournalEntryReceived, + base::Unretained(this))); + storage_db()->LoadKeysCallback(false); +} + +TEST_F(FeedJournalDatabaseTest, ChecExistingJournalFail) { + CreateDatabase(/*init_database=*/true); + EXPECT_TRUE(db()->IsInitialized()); + + // Store |kJournalKey1| and |kJournalKey2|. + InjectJournalStorageProto(kJournalKey1, + {kJournalData1, kJournalData2, kJournalData3}); + InjectJournalStorageProto(kJournalKey2, {kJournalData4}); + + // Check |kJournalKey1|. + EXPECT_CALL(*this, OnCheckJournalExistReceived(false, true)); + + db()->DoesJournalExist( + kJournalKey1, + base::BindOnce(&FeedJournalDatabaseTest::OnCheckJournalExistReceived, + base::Unretained(this))); + storage_db()->GetCallback(false); +} + +TEST_F(FeedJournalDatabaseTest, CheckNonExistingJournalFail) { + CreateDatabase(/*init_database=*/true); + EXPECT_TRUE(db()->IsInitialized()); + + // Check |kJournalKey1|. + EXPECT_CALL(*this, OnCheckJournalExistReceived(false, false)); + db()->DoesJournalExist( + kJournalKey1, + base::BindOnce(&FeedJournalDatabaseTest::OnCheckJournalExistReceived, + base::Unretained(this))); + storage_db()->GetCallback(false); +} + } // namespace feed
diff --git a/components/omnibox/bug-triage.md b/components/omnibox/bug-triage.md index 04e89c8b..a139934 100644 --- a/components/omnibox/bug-triage.md +++ b/components/omnibox/bug-triage.md
@@ -1,6 +1,6 @@ # Omnibox Bug Triage Process -*last update: 2017/07/11* +*last update: 2018/06/11* *The current triage process owner is `mpearson@`.* @@ -24,9 +24,6 @@ * Ensure high priority bugs or regressions are making progress / ping bug owners for progress updates on other important bugs. (Trust your teammates to work on assigned bugs.) -* Monitor for changes outside of the bugs database (e.g., UMA regressions, crash - database). (The Speed team monitors UMA for performance regressions and the - Stability team monitors the crash database. Both file bugs as appropriate.) ## Process @@ -39,6 +36,12 @@ to see if any should be moved to the omnibox component and triaged. (This scan can be limited to those filed in the last week, i.e., since the last check.) +* Every week on Thursday, the triage engineer looks over all alerts sent to + [chrome-omnibox-team-alerts@](https://groups.google.com/a/google.com/forum/#!forum/chrome-omnibox-team-alerts) + and, for each, either files a bug or replies to the message indicating why + filing a bug is not appropriate. These bugs **must have an owner** for + follow-up; they cannot be left "Available*. More details available + [below](#How-to-triage-alerts). * Every month (the first Thursday of the month), the triage engineer should look over [all bugs with *Needs=Feedback*](https://bugs.chromium.org/p/chromium/issues/list?can=2&q=component%3AUI%3EBrowser%3EOmnibox+Needs%3DFeedback+&colspec=ID+Pri+M+Stars+ReleaseBlock+Component+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=ids) and should take action on those that have been sitting for too long (ping the @@ -48,7 +51,7 @@ triage engineer. The triager owner will cycle among team members by arrangement. -## How to triage +## How to triage chromium bugs ### Purpose @@ -108,7 +111,7 @@ ### Priority -Follow [standard Chromium +Follow [standard Chromium policies](https://www.chromium.org/for-testers/bug-reporting-guidelines/triage-best-practices). *Priority-2* represents wanted for this release but can be punted for a release. *Priority-3* are bugs not time sensitive. There is an even-lower-priority @@ -173,6 +176,84 @@ agree with you. When searching the bugs database for things to do, I suggest excluding bugs on this hotlist.) +## How to triage alerts + +Every message sent to +[chrome-omnibox-team-alerts@](https://groups.google.com/a/google.com/forum/#!forum/chrome-omnibox-team-alerts) +should be evaluated by a triage engineer. The triage engineer should either + +* file a Chromium bug to investigate the issue further and reply to the alert + with a link to the Chromium bug, or +* reply to the alert explaining that the alert is already being tracked, and + link to the appropriate Chromium bug, or +* reply to the alert explaining why ignoring the alert is appropriate. This + is only appropriate if the engineer believes the alert is incorrect or + spurious. + +> **Tip**: Alerts on Beta and Stable that happen at the time of a new version +> release will often have triggered an alert on Dev. Look for those Dev alerts. +> Most likely they already have associated bugs. If the Beta/Stable change is +> the same scale at the Dev change, it's likely the same issue--you should +> simply point the Beta/Stable alert thread to the existing bug thread. + +With this process, when the next triage engineer begins their triage rotation, +they'll be able to see which alerts have been handled and which have not. All +alerts that have been handled will have a reply from a triage engineer. All +alerts that have not been looked at will not. + +Sometimes multiple alerts will be fired at around the same time, on the same +channel, on related histograms. All of these alerts can be filed as part of the +same bug if the triage engineer thinks they're likely all related (as they +likely are). All these alerts should be mentioned in the bug and all the +separate alert threads should be replied to pointing to that bug. + +When filing the bug about an alert: + +* Leave it *Untriaged*. You should investigate it during your triage shift; + if you don't identify a root cause, the next triager will see the bug and try. + Only assign an owner if the likely root cause has been determined! +* Add the Restrict-View-Google label so metrics can be discussed without fear + of leaking sensitive information. +* Link to the alert message. +* Set a priority. Generally these bugs should be *Priority-1* or *Priority-2*. +* Tag it with a milestone (if appropriate). +* Likely, label it with either Performance-Browser or Hotlist-OmniboxRanking. + (Probably one of those is appropriate.) + +### Investigating an Alert + +The [timeline dashboard](http://go/uma-timeline) is your friend, +especially the split by channel, split by platform, split by milestone, and +split by version features. Some tips on how to investigate using the timeline +dashboard: + +* If the regression is on Dev, see if you can spot it on Canary. That can + usually indicate a narrow regression range. This can usually be done unless + the histogram is too noisy. +* What platforms did the regression happen on? That might narrow down the area + of relevant code. +* Did the regression happen on multiple channels at the same time? If so, then + it's either caused by a change that was submitted and quickly merged to + multiple channels or it may be caused by something external to Chrome (such as + a major holiday or significant weather events, which can change omnibox + behavior). + +**Action**: The best way to verify that a particular changelist caused a +regression is to **revert the changelist** and see if the metrics improve. This +is a better strategy than landing a fix directly. If the "fix" doesn't make the +metric recover to the exact same degree as the regression, it's unclear whether +the fix was related to the regression, only a partial solution, and whether +there's still another issue. + +FYI: the alerting system does not alert on ChromeOS changes because the vast +majority of alerts that trigger on ChromeOS are due to school schedules (e.g., +summer and winter vacation). For the year prior to disabling ChromeOS alerts, +we did not see a real ChromeOS alert that wasn't also fired on Windows. (I.e., +all real regressions on ChromeOS were also regressions on Windows; Views +platforms tend to regress simultaneously.) Thus, we seemingly don't get any +additional value from ChromeOS alerts. + + # Appendix ## Example request for chrome://omnibox data
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb index e982aa4..8fc3918 100644 --- a/components/policy/resources/policy_templates_bn.xtb +++ b/components/policy/resources/policy_templates_bn.xtb
@@ -154,6 +154,7 @@ <translation id="1387596372902085462">Symantec Corporation's Legacy PKI Infrastructure এর বিশ্বস্ত বিকল্পটি চালু করবেন কিনা</translation> <translation id="1393485621820363363">সক্ষম করা এন্টারপ্রাইজ ডিভাইস প্রিন্টার</translation> <translation id="1397855852561539316">ডিফল্ট সার্চ সরবরাহকারী প্রস্তাবিত URL</translation> +<translation id="142346659686073702">অননুমোদিত ব্যবহারকারীদের Crostini ব্যবহার করার অনুমতি দিন</translation> <translation id="1426410128494586442">হ্যাঁ</translation> <translation id="1427655258943162134">প্রক্সি সার্ভারের ঠিকানা বা URL</translation> <translation id="1432194160771348078"> @@ -438,6 +439,12 @@ এই নীতিটি সেট না করা হলে তা 'চালু করার' সমান হবে, উপরের বিবরণটি দেখুন।</translation> <translation id="2113068765175018713">স্বয়ংক্রিয়ভাবে আবার চালু করার দ্বারা ডিভাইসের আপটাইম সীমাবদ্ধ করুন</translation> +<translation id="2116790137063002724">OS লগ-ইন, <ph name="PRODUCT_NAME" /> প্রোফাইল লগ-ইন, <ph name="PRODUCT_NAME" /> প্রোফাইল নাম, <ph name="PRODUCT_NAME" /> প্রোফাইল পাথ এবং <ph name="PRODUCT_NAME" /> এক্সিকিউট করা যায় এমন পাথের মতো ব্যবহারকারীদের শনাক্ত করার জন্য ব্যবহার করা যায় এমন তথ্য রিপোর্ট করা হবে কিনা তা এই নীতি নিয়ন্ত্রণ করে। + + এই নীতি সেট করা না থাকলে অথবা ট্রু হিসেবে সেট করা থাকলে, ব্যবহারকারীদের শনাক্ত করার জন্য ব্যবহার করা যায় এমন তথ্য সংগ্রহ করা হয়। + এই নীতি ফলস হিসেবে সেট করা থাকলে, ব্যবহারকারীদের শনাক্ত করার জন্য ব্যবহার করা যায় এমন তথ্য সংগ্রহ করা হয় না। + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> চালু করা থাকলে এবং <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />-এর সাথে মেশিনটি নথিভুক্ত করা থাকলে এই নীতিটি কার্যকর হয়।</translation> <translation id="2127599828444728326">এই সাইটগুলিতে বিজ্ঞপ্তি মঞ্জুর করুন</translation> <translation id="2131902621292742709">ব্যাটারি পাওয়ার চলাকালীন স্ক্রীনের উজ্জ্বলতা হ্রাসে বিলম্ব</translation> <translation id="2132732175597591362">যে ইউআরএল প্যাটার্নগুলির জন্য নিজে থেকে ভিডিও চলার বৈশিষ্ট্যটি সব সময় চালু থাকবে, সেগুলির সাদাতালিকা নিয়ন্ত্রণ করে। @@ -472,7 +479,7 @@ এই তালিকার প্রতিটি আইটেম হল একটি এক্সটেনশন-শৈলী মিল ধরণ (https://developer.chrome.com/extensions/match_patterns দেখুন)। ব্যবহারকারীরা সেগুলিকে এমন যেকোনও ইউআরএল থেকে সহজেই ইনস্টল করতে পারবে যা এই তালিকাতে থাকা কোনও আইটেমের সাথে মেলে। *.crx ফাইল ও যেখান থেকে ডাউনলোড শুরু হয় সেই পৃষ্ঠা (অর্থাত উল্লেখকারী) উভয়কেই এই ধরণগুলির দ্বারা অবশ্যই মঞ্জুরিপ্রাপ্ত হতে হবে। <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> এই নীতিতে অগ্রগণ্যতা নেয়। এটি হল, কালোতালিকাতে একটি এক্সটেনশন যা এই তালিকাতে থাকা কোনও সাইট থেকে হলেও ইনস্টল হবে না।</translation> -<translation id="214901426630414675">ডুপ্লে মোডে প্রিন্টিং সীমাবদ্ধ করা</translation> +<translation id="214901426630414675">ডুপ্লেক্স মোডে প্রিন্টিং সীমাবদ্ধ করুন</translation> <translation id="2149330464730004005">রঙিন প্রিন্টিং চালু করুন</translation> <translation id="2156132677421487971"><ph name="PRODUCT_NAME" /> এর জন্য নীতি কনফিগার করে, যা ব্রাউজার থেকে ট্যাব, সাইট বা ডেস্কটপকে দূরবর্তী দেখায় বা সাউন্ড সিস্টেমে পাঠায় এমন এক বৈশিষ্ট্য।</translation> <translation id="2166472654199325139">প্রাপ্তবয়স্কদের কন্টেন্টের সাইটগুলি ফিল্টার করবেন না</translation> @@ -808,7 +815,7 @@ <translation id="2873651257716068683">প্রিন্টের পৃষ্ঠার ডিফল্ট সাইজ ওভাররাইড করে। পৃষ্ঠার সাইজ উপলভ্য না থাকলে এই নীতি উপেক্ষা করা হয়।</translation> <translation id="2874209944580848064">Android অ্যাপ্লিকেশান সমর্থন করে এমন <ph name="PRODUCT_OS_NAME" /> ডিভাইসগুলির জন্য দ্রষ্টব্য:</translation> <translation id="2877225735001246144">কার্বেরস প্রমাণীকরণের সাথে সমঝোতা করার সময় CNAME লুকআপ অক্ষম করুন</translation> -<translation id="2892414556511568464">ডুপ্লে মোডে প্রিন্টিং সীমাবদ্ধ করে। সেট করা নেই অথবা খালি আছে এমন নীতিগুলি সীমাবদ্ধ হিসেবে ধরা হয় না।</translation> +<translation id="2892414556511568464">ডুপ্লেক্স মোডে প্রিন্টিং সীমাবদ্ধ করে। সেট করা নেই অথবা খালি আছে এমন নীতিগুলি সীমাবদ্ধ হিসেবে ধরা হয় না।</translation> <translation id="2893546967669465276">পরিচালনা সার্ভারে সিস্টেম লগ পাঠায়</translation> <translation id="2899002520262095963">এই নীতির মারফত Android অ্যাপ্লিকেশানগুলি নেটওয়ার্ক কনফিগারেশনগুলি ব্যবহার করতে পারে, কিন্তু কিছু কনফিগারেশন বিকল্পতে অ্যাক্সেস থাকে না।</translation> <translation id="290002216614278247">ক্লায়েন্টের সময় অথবা ব্যবহারের প্রাত্যহিক সীমার উপর নির্ভর করে আপনাকে ব্যবহারকারীর সেশন লক করতে দেয়। @@ -986,6 +993,23 @@ এই নীতিটি যদি এখন সেট করা না হয় এবং 'DefaultCookiesSetting' নীতিটি যদি সেট করা থাকে, তাহলে সেই অনুযায়ী সমস্ত সাইটের জন্য এই নীতির গ্লোবাল ডিফল্ট সেটিং নির্ধারণ করা হবে। তা না হলে, ব্যবহারকারীর ব্যক্তিগত কনফিগারেশন অনুযায়ী এটি সেট করা হবে। 'CookiesBlockedForUrls' এবং 'CookiesSessionOnlyForUrls' নীতিগুলিও দেখুন। এটি মনে রাখবেন যে এই তিনটি নীতির মধ্যে কোনও পরস্পর বিরোধী ইউআরএল প্যাটার্ন যেন না থাকে - কোন নীতিটি অগ্রাধিকার পাবে সেটি উল্লিখিত নয়।</translation> +<translation id="3373364525435227558">একটি ম্যানেজ করা সেশনের জন্য এক বা একাধিক লোকেল সেট করে যাতে ব্যবহারকারীরা সহজেই একটি বেছে নিতে পারেন। + + একটি ম্যানেজ করা সেশন শুরু করার আগে ব্যবহারকারী একটি লোকেল এবং একটি কীবোর্ড লেআউট বেছে নিতে পারেন। সাধারণত, <ph name="PRODUCT_OS_NAME" /> দ্বারা সমর্থিত সমস্ত লোকেল +বর্ণানুসারে তালিকাভুক্ত করা থাকে। আপনি প্রস্তাবিত লোকেলের একটি সেটকে তালিকার শীর্ষে সরানোর জন্য এই নীতি ব্যবহার করতে পারবেন। + + এই নীতিটি সেট না করা থাকলে, বর্তমান UI লোকেলটি আগাম-নির্বাচিত করা হবে। + + এই নীতি সেট করা হলে, প্রস্তাবিত লোকেলগুলিকে তালিকার শীর্ষে সরানো হবে এবং অন্যান্য লোকেলগুলি থেকে ভিন্ন দেখাবে। প্রস্তাবিত লোকেলগুলি নীতিতে যেভাবে প্রদর্শিত হয় সেই ক্রমানুসারে তালিকাবদ্ধ করা হবে। প্রথম প্রস্তাবিত লোকেলটি আগাম-নির্বাচিত করা হবে। + + একটির বেশি প্রস্তাবিত লোকেল থাকলে, এটি ধরে নেওয়া হয় যে ব্যবহারকারীরা সেগুলোর মধ্যে থেকে বেছে নিতে চাইবেন। কোনও ম্যানেজ করা সেশন শুরুর সময় লোকেল ও কীবোর্ড লেআউট নির্বাচন গুরুত্বপূর্ণভাবে অফার করা হবে। অন্যথায়, এটি ধরে নেওয়া হবে যে, বেশিরভাগ ব্যবহারকারী আগাম-নির্বাচিত লোকেল ব্যবহার করতে চাইবেন। কোনও ম্যানেজ করা সেশন শুরুর সময় লোকেল ও কীবোর্ড লেআউট নির্বাচন কম গুরুত্বপূর্ণভাবে অফার করা হবে। + + যখন এই নীতি সেট করা হয় এবং নিজে থেকে লগ-ইন প্রক্রিয়া চালু করা হয়, ( |DeviceLocalAccountAutoLoginId| এবং |DeviceLocalAccountAutoLoginDelay| নীতিগুলি দেখুন), নিজে থেকে শুরু হওয়া ম্যানেজ করা সেশন প্রথম প্রস্তাবিত লোকেল এবং সেই লোকেলের সাথে মিলিয়ে সবচেয়ে জনপ্রিয় কীবোর্ড লেআউট ব্যবহার করবে। + + আগাম-নির্বাচিত কীবোর্ড লেআউটটি সবসময় আগাম-নির্বাচিত লোকেলের সাথে মিল রেখে সবচেয়ে জনপ্রিয় লেআউট হবে। + + এই নীতিটি শুধুমাত্র প্রস্তাবিত হিসেবে সেট করা যাবে। আপনি কিছু প্রস্তাবিত লোকেলের একটি সেট তালিকার উপরের দিকে রাখতে এই নীতি ব্যবহার করতে পারবেন কিনতু ব্যবহারকারীরা তাদের সেশনের জন্য সবসময় <ph name="PRODUCT_OS_NAME" /> দ্বারা সমর্থিত যেকোনও লোকেল বেছে নেওয়ার জন্য অনুমতিপ্রাপ্ত। + </translation> <translation id="3381968327636295719">ডিফল্ট অনুসারে হোস্ট ব্রাউজারটি ব্যবহার করুন</translation> <translation id="3414260318408232239">এই নীতিটি কনফিগার না করা হলে <ph name="PRODUCT_NAME" /> একটি ডিফল্ট নূন্যতম নীতি ব্যবহার করবে যেটি হল TLS 1.0। @@ -1036,7 +1060,7 @@ এই নীতি সক্ষম বা অক্ষম করা হলে, ব্যবহারকারীরা এটিকে <ph name="PRODUCT_NAME" /> এ পরিবর্তন বা ওভাররাইড করতে পারবেন না। এই নীতি যদি সেট না করে রাখা হয় তাহলে পাসওয়ার্ড সংরক্ষণ করা যেতে পারবে (তবে ব্যবহারকারী সেটি বন্ধ করতে পারবেন)।</translation> <translation id="3496296378755072552">পাসওয়ার্ড ম্যানেজার</translation> -<translation id="3502555714327823858">সবগুলি ডুপ্লে মোডে অনুমতি দিন</translation> +<translation id="3502555714327823858">সব ডুপ্লেক্স মোডে অনুমতি দিন</translation> <translation id="350443680860256679">ARC কনফিগার করুন</translation> <translation id="3504791027627803580">ছবি সার্চ প্রদান করার জন্য ব্যবহৃত সার্চ ইঞ্জিনের URLটি নির্দিষ্ট করে৷ GET পদ্ধতি ব্যবহার করে সার্চ অনুরোধগুলি পাঠানো হবে৷ যদি DefaultSearchProviderImageURLPostParams policy সেট করা থাকে তখন ছবি সার্চ অনুরোধগুলি এর পরিবর্তে POST পদ্ধতি ব্যবহার করবে৷ @@ -1183,7 +1207,7 @@ নীতিটি মিথ্যাতে সেট করা থাকলে, সেশনের তথ্য প্রতিবেদন করা হবে না। সত্যতে সেট থাকলে বা সেট না করে রাখা হলে, কিয়স্ক সেশনের তথ্য প্রতিবেদন করা হবে।</translation> -<translation id="3858658082795336534">ডিফল্ট ডুপ্লে মোডে প্রিন্টিং</translation> +<translation id="3858658082795336534">ডিফল্ট ডুপ্লেক্স মোডে প্রিন্টিং</translation> <translation id="3859780406608282662"><ph name="PRODUCT_OS_NAME" /> এ বৈচিত্র্য সীড আনার সময়ে একটি মাপদন্ড যোগ করুন৷ যদি নির্দিষ্ট করা থাকে, তাহলে বৈচিত্র্য সীড আনতে ব্যবহৃত URLটিতে 'সীমিত' নামের একটি ক্যোয়ারী মাপদন্ড যোগ করা হবে৷ এই নীতিতে নির্দিষ্ট করা মানই মাপদন্ডের মান হবে৷ @@ -1259,6 +1283,11 @@ যদি এই নীতি সত্য হিসাবে সেট করা থাকে বা সেট না করে ছেড়ে রাখা হয়, তবে Chrome OS নথিভুক্তকরণের মাধ্যমে ব্যবহারকারীরা অফারগুলি ভাঙ্গাতে পারবে৷ যদি এই নীতি অসত্য হিসাবে সেট করা থাকে, তাহলে ব্যবহারকারীরা অফারগুলি ভাঙ্গাতে পারবে না৷</translation> +<translation id="4008507541867797979">যদি এই নীতি সত্যতে সেট করা হয় বা কনফিগার না করা হয় তাহলে লগ-ইনের স্ক্রিনে আগে থেকে থাকা ব্যবহারকারীদের নাম <ph name="PRODUCT_OS_NAME" /> দেখাবে যাতে ওখান থেকে কাউকে বেছে নেওয়া যেতে পারে। + + যদি এই নীতি ফলসে সেট করা হয় তাহলে লগ-ইনের স্ক্রিনে আগে থেকে থাকা ব্যবহারকারীদের নাম <ph name="PRODUCT_OS_NAME" /> দেখাবে না। কোনও ম্যানেজ করা সেশন কনফিগার না করা থাকলে সাধারণ সাইন-ইন স্ক্রিন (যেখানে ব্যবহারকারীকে ইমেল আইডি এবং পাসওয়ার্ড বা ফোন নম্বর দিতে বলা হয়) অথবা SAML ইন্টারস্টিশিয়্যাল স্ক্রিন (যদি- <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />-এর মাধ্যমে চালু করা থাকে) দেখানো হবে। যদি কোনও ম্যানেজ করা সেশন কনফিগার করা থাকে তাহলে কোনও একটি বেছে নেওয়ার জন্য শুধুমাত্র ম্যানেজ করা সেশন অ্যাকাউন্টগুলি দেখানো হবে। + + মনে রাখবেন, ডিভাইসে স্থানীয় ব্যবহারকারীর ডেটা রাখা হয় বা খারিজ করা হয় তার উপর এই নীতি কোনও প্রভাব ফেলে না।</translation> <translation id="4010738624545340900">ফাইল নির্বাচন কথোপকথনের নামোচ্চারণের অনুমতি দিন</translation> <translation id="4012737788880122133">সত্যতে সেট থাকলে স্বয়ংক্রিয় আপডেটগুলিকে অক্ষম করে৷ @@ -1778,6 +1807,15 @@ যদি এই নীতিটি বামে সেট না করে ছেড়ে যাওয়া হয়, তাহলে গ্লোবাল ডিফল্ট মান সব সাইটগুলির জন্য ব্যবহার করা হবে যদি 'ডিফল্ট বিজ্ঞপ্তি সেটিং' নীতি সেট করা হয় তা থেকে, নয়তো ব্যবহারকারীদের ব্যক্তিগত কনফিগারেশান থেকে৷</translation> <translation id="5219844027738217407">Android অ্যাপ্লিকেশানগুলির জন্য, এই নীতিটি কেবলমাত্র মাইক্রোফোনকে প্রভাবিত করে। এই নীতিটি সত্যতে সেট করা থাকলে, কোনো ব্যতিক্রম ছাড়াই সব Android অ্যাপ্লিকেশানগুলির জন্য মাইক্রোফোন মিউট করা থাকে।</translation> +<translation id="5228316810085661003">ডিভাইস-স্থানীয় অ্যাকাউন্টে নিজে থেকে লগ-ইনে বিলম্ব। + + যদি |DeviceLocalAccountAutoLoginId| নীতিটি সেট না করা থাকে, তাহলে এই নীতি কোনও প্রভাব ফেলবে না। অন্যথায়: + + এই নীতিটি যদি সেট করা হয়, তাহলে ব্যবহারকারী কতক্ষণ কোনও অ্যাকশন না নিলে |DeviceLocalAccountAutoLoginId| নীতিতে নির্দিষ্ট করে দেওয়া ডিভাইস-স্থানীয় অ্যাকাউন্টে অটোমেটিক লগ-ইন করা হবে, তা সেট করা যায়। + + যদি এই নীতিটি সেট না করা থাকে, তবে সময়সীমা হিসেবে 0 মিলিসেকেন্ড ব্যবহার করা হবে। + + এই নীতিটি মিলিসেকেন্ডে নির্দিষ্ট করা হয়েছে।</translation> <translation id="523505283826916779">অ্যাক্সেসযোগ্যতার সেটিংস</translation> <translation id="5235958368503433463"><ph name="PRODUCT_NAME" />-এ ডিফল্ট হোম পেজের ধরণ কনফিগার করতে দেয় এবং ব্যবহারকারীদের হোম পেজের পছন্দগুলি পরিবর্তনে বাধা দেয়। হোম পেজটি আপনার নির্ধারিত একটি ইউআরএল অথবা নতুন ট্যাব পৃষ্ঠায় সেট করা যায়। @@ -1823,6 +1861,12 @@ <translation id="5272684451155669299">যদি সত্য হয়, তাহলে Chrome ডিভাইসগুলিতে <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ব্যবহার করে এন্টারপ্রাইজ প্ল্যাটফর্ম কীগুলির <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> মারফত গোপনীয় CA তে এটির পরিচয় দূরবর্তী প্রত্যয়ন করতে ব্যবহারকারী হার্ডওয়্যারটি ব্যবহার করতে পারে। যদি এটি মিথ্যাতে সেট করা থাকে, বা সেট না করা থাকে, তাহলে একটি ত্রুটি কোডের মাধ্যমে API এ কলগুলি ব্যর্থ হয়ে যাবে।</translation> +<translation id="5277806246014825877">এই ব্যবহারকারীকে Crostini চালু করার অনুমতি দিন। + + এই নীতিটি ফলস হিসেবে সেট করা হলে ব্যবহারকারী Crostini ব্যবহার করতে পারবেন না। + এটি সেট করা না হলে অথবা ট্রুতে সেট করা হলে সকল ব্যবহারকারী Crostini ব্যবহার করতে পারবেন যতক্ষণ পর্যন্ত অন্যান্য সেটিংসগুলিও তার অনুমতি দেয়। + VirtualMachinesAllowed, CrostiniAllowed, এবং DeviceUnaffiliatedCrostiniAllowed এই তিনটি নীতিকেই ট্রু হতে হবে যদি তাদের Crostini ব্যবহার করার অনুমোদন দিতে হয়। + যখন এই নীতি ফলসে পরিবর্তিত হয় তখন এটি নতুন Crostini কন্টেনার ব্যবহার করা শুরু করে কিনতু যে কন্টেনার আগে থেকেই চালু রয়েছে তা এটি বন্ধ করেনা।</translation> <translation id="5283457834853986457">প্লাগ-ইন ফাইন্ডার অক্ষম করুন (বন্ধ করে দেওয়া হয়েছে)</translation> <translation id="5288772341821359899">নীতিটি সেট করা থাকলে, WebRTC দ্বারা ব্যবহৃত স্থানীয় UDP পোর্টের ব্যাপ্তি নির্দিষ্ট পোর্টের বিরতিতে (শেষ সীমাগুলি অন্তর্ভুক্ত) সীমাবদ্ধ করে। @@ -1860,6 +1904,7 @@ যদি এই নীতিটি সেট নয়-এ ছেড়ে দেওয়া হয় তাহলে, 'বিজ্ঞপ্তি চান' ব্যবহার করা হবে এবং ব্যবহারকারী এটিকে পরিবর্তন করতে পারবে৷</translation> <translation id="538108065117008131">নিম্নোক্ত সামগ্রী প্রকার পরিচালনা করতে <ph name="PRODUCT_FRAME_NAME" /> মঞ্জুর করুন৷</translation> +<translation id="5391388690191341203">নিজে থেকে লগ-ইনের জন্য ডিভাইস-স্থানীয় অ্যাকাউন্ট</translation> <translation id="5392172595902933844">Android এর স্থিতি সম্পর্কে তথ্যের প্রতিবেদন সার্ভারে ফেরত পাঠানো হয়। @@ -1903,6 +1948,7 @@ যখন এই নীতিকে সেট করা ছাড়া ছেড়ে দেওয়া হয়েছে সেক্ষেত্রে ব্রাউজারকে রেন্ডেরিং এর অনুমতি দেওয়ার জন্য ডিফল্ট সেটিং ব্যবহার করা হয়, কিন্তু আপনি বিকল্প হিসেবে এটিকে ওভাররাইড করতে পারেন এবং ডিফল্ট রুপে <ph name="PRODUCT_FRAME_NAME" /> রেন্ডার HTML পৃষ্ঠা রাখতে পারেন৷</translation> <translation id="5464816904705580310">পরিচালিত ব্যবহারকারীদের জন্য সেটিংস কনফিগার করুন৷</translation> <translation id="546726650689747237">AC পাওয়ারে চলাকালীন স্ক্রীনের উজ্জ্বলতা হ্রাসে বিলম্ব</translation> +<translation id="5469143988693423708">ব্যবহারকারী Crostini চালাতে পারবেন</translation> <translation id="5469825884154817306">এই সাইটগুলিতে ছবিগুলি অবরোধ করুন</translation> <translation id="5475361623548884387">প্রিন্ট সক্ষম করুন</translation> <translation id="547601067149622666">যে সাইটে ব্যাঘাতকারী বিজ্ঞাপন দেখানো হয় সেই সাইটে বিজ্ঞাপন দেখানোর অনুমতি দেবেন না</translation> @@ -1974,6 +2020,9 @@ মনে রাখবেন যে, এটি প্রস্তাবিত নয় কারণ এটি কোনো প্রদত্ত শংসাপত্র যাতে অনুমোদিত হতে পারে সেজন্য হোস্টনাম সীমিত করে এমন nameConstraints এক্সটেনশান এড়িয়ে যেতে অনুমোদন দিতে পারে। এই নীতিটি সেট না করা হলে, বা মিথ্যায় সেট করা থাকলে, DNS নাম বা IP ঠিকানাযুক্ত subjectAlternativeName এক্সটেনশান বিহীন সার্ভার শংসাপত্রগুলিকে বিশ্বাস করা হবে না।</translation> +<translation id="5581292529942108810">Chrome রিপোর্টিং এক্সটেনশন সম্পর্কিত নীতি কনফিগার করুন। + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> চালু করা থাকলে এবং <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />-এর সাথে মেশিনটি নথিভুক্ত থাকলেই এই নীতিটি কার্যকর হয়।</translation> <translation id="5583806683960333345">যদি এই সেটিংটি সক্ষম থাকে তবে ব্যবহারকারীরা ঝটপট টিথারিং ব্যবহার করতে পারবেন, যার ফলে তাদের Google ফোন থেকে তারা মোবাইল ডেটা অন্যান্য ডিভাইসে শেয়ার করতে পারবেন। যদি এই সেটিংটি সক্ষম থাকে তবে ব্যবহারকারীরা ঝটপট টিথারিং ব্যবহার করতে পারবেন না। @@ -2049,7 +2098,7 @@ যদি 'অক্ষম' নির্বাচন করা হয়, পৃষ্ঠাগুলি ছদ্মবেশী মোডে খোলা যাবে না৷ যদি 'জোর করে' নির্বাচন করা হয়, পৃষ্ঠাগুলি কেবলমাত্র ছদ্মবেশী মোডে খোলা যেতে পারে৷</translation> -<translation id="582857022372205358">শর্ট-এজ ডুপ্লে প্রিন্টিং চালু করুন</translation> +<translation id="582857022372205358">শর্ট-এজ ডুপ্লেক্স প্রিন্টিং চালু করুন</translation> <translation id="583091600226586337"> এই নীতিটি সক্ষম করা হলে প্রতিটি ফাইল ডাউনলোড করার আগে ব্যবহারকারীকে জিজ্ঞেস করা হবে তিনি সেটি কোথায় সেভ করতে চান। এটি অক্ষম করা হলে ডাউনলোড সঙ্গে সঙ্গে শুরু হবে এবং ফাইল কোথায় সেভ করা হবে তা ব্যবহারকারীকে জিজ্ঞেস করা হবে না। @@ -2085,7 +2134,7 @@ যদি এই সেটিং অক্ষম করা থাকে অথবা কনফিগার করা না থাকে, তাহলে gnubby প্রমাণীকরণের অনুরোধগুলির প্রক্সি করা হবে না৷</translation> <translation id="5898486742390981550">যখন একাধিক ব্যবহারকারী লগ ইন করে থাকেন, তখন শুধুমাত্র প্রাথমিক ব্যবহারকারী Android অ্যাপ্লিকেশানগুলি ব্যবহার করতে পারেন।</translation> -<translation id="5901427587865226597">শুধুমাত্র ডুপ্লে প্রিন্টিং</translation> +<translation id="5901427587865226597">শুধুমাত্র ডুপ্লেক্স প্রিন্টিং</translation> <translation id="5906199912611534122">নেটওয়ার্ক থ্রটলিং চালু বা বন্ধ করতে মঞ্জুরি দেয়। এটি সকল ব্যবহারকারী এবং ডিভাইসে সব ইন্টারফেসের ক্ষেত্রে প্রযোজ্য। এটি একবার সেট করা হলে, নীতিটি পরিবর্তন করে এটি বন্ধ না করা পর্যন্ত থ্রটলিং চলতে থাকে। @@ -2253,6 +2302,11 @@ <translation id="6310223829319187614">ব্যবহারকারীর সাইন ইনের সময় ডোমেন নাম স্বয়ংপূর্ণ করা সক্ষম করে</translation> <translation id="6315673513957120120">ব্যবহারকারীরা যখন SSL ত্রুটি আছে এমন সাইটে নেভিগেট করে যায় তখন Chrome একটি সতর্কীকরণ পৃষ্ঠা দেখায়। ডিফল্ট ভাবে বা এই নীতিটি সত্যতে সেট করা হলে, ব্যবহারকারীরা এই সতর্কীকরণ পৃষ্ঠাগুলি ক্লিক করে এগিয়ে যাওয়ার মঞ্জুরি পায়। এই নীতি মিথ্যাতে সেট করা হলে, ব্যবহারকারীরা কোনো সতর্কীকরণ পৃষ্ঠা ক্লিক করে এগিয়ে যেতে পারে না।</translation> +<translation id="6352543686437322588">বিলম্বের পর নিজে থেকে লগ-ইনের জন্য একটি ডিভাইস-স্থানীয় অ্যাকাউন্ট। + + যদি এই নীতি সেট করা থাকে, ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই লগ-ইন স্ক্রিনে সময় অতিবাহিত হওয়ার পরে নির্দিষ্ট সেশনটি নিজে থেকেই লগ-ইন হবে। ডিভাইস-স্থানীয় অ্যাকাউন্ট আগে থেকেই কনফিগার করে রাখতে হবে (|DeviceLocalAccounts| দেখুন)। + + যদি এই নীতি সেট করা না থাকে, তখন নিজে থেকে লগ-ইন হবে না।</translation> <translation id="6353901068939575220">POST এর মাধ্যমে একটি URL সার্চ করার সময় ব্যবহৃত প্যারামিটারগুলি নির্দিষ্ট করে৷ কমা দ্বারা বিভাজিত নাম/মান জোড়াগুলি নিয়ে এটি গঠিত৷ মানটি যদি টেমপ্লেট প্যারামিটার হয়, যেমন উপরোক্ত উদাহরণের {সার্চের পদগুলি}, তাহলে এটা আসল সার্চ পদগুলির ডেটা দ্বারা প্রতিস্থাপন করা হবে৷ এই নীতিটি ঐচ্ছিক৷ যদি সেট না করা থাকে, তাহলে GET পদ্ধতি ব্যবহার করে সার্চ অনুরোধ পাঠানো হবে৷ @@ -2503,7 +2557,7 @@ <translation id="6923366716660828830">ডিফল্ট সার্চ প্রদানকারী নাম নির্দিষ্ট করে৷ যদি খালি অথবা সেট বিনা ছেড়ে দেওয়া হয়, তাহলে সার্চ URL দ্বারা নির্দিষ্ট করা হোস্টের নাম ব্যবহার করা হবে৷ যখন 'ডিফল্ট সার্চ প্রদানকারী সক্ষমিত' নীতি সক্ষম হয় এই নীতি কেবল তখনই বিচার করা হয়৷</translation> -<translation id="6926703471186170050">লং-এজ ডুপ্লে প্রিন্টিং চালু করুন</translation> +<translation id="6926703471186170050">লং-এজ ডুপ্লেক্স প্রিন্টিং চালু করুন</translation> <translation id="6931242315485576290">Google এর সাথে ডেটা সিঙ্ক্রোনাইজেশন অক্ষম করুন</translation> <translation id="6936894225179401731">প্রক্সি সার্ভারে নিরন্তর সংযোগের সর্বোচ্চ সংখ্যা নির্দিষ্ট করে৷ @@ -2640,6 +2694,11 @@ যদি এই নীতি সেট না করা হয় তাহলে ব্যবহারকারী এই সেটিংটি ম্যানুয়ালি পরিবর্তন করতে পারবেন।</translation> <translation id="723103540848640830">লক স্ক্রিন পিনের ন্যূনতম দৈর্ঘ্য সেট করুন</translation> +<translation id="7232816984286843471">এই নীতিটি ফলস হিসেবে সেট করা হলে অননুমোদিত ব্যবহারকারীরা Crostini ব্যবহার করতে পারবেন না। + + এটি সেট করা না হলে অথবা ট্রু-তে সেট করা হলে সকল ব্যবহারকারী Crostini ব্যবহার করতে পারবেন যতক্ষণ পর্যন্ত অন্যান্য সেটিংসগুলিও তার অনুমতি দেয়। + VirtualMachinesAllowed, CrostiniAllowed, এবং DeviceUnaffiliatedCrostiniAllowed এই তিনটি নীতিকেই ট্রু হতে হবে যদি তাদের Crostini ব্যবহার করার অনুমোদন দিতে হয়। + যখন এই নীতি ফলসে পরিবর্তিত হয় তখন এটি নতুন Crostini কন্টেনার ব্যবহার করা শুরু করে কিনতু যে কন্টেনার আগে থেকেই চালু রয়েছে তা এটি বন্ধ করেনা।</translation> <translation id="7234280155140786597">নিষিদ্ধ নেটিভ বার্তাপ্রেরণ হোস্টগুলির নাম (বা সবগুলির জন্য *)</translation> <translation id="7236775576470542603">লগইন স্ক্রিনে সক্ষমিত রয়েছে এমন স্ক্রিন ম্যাগনিফায়ারের ডিফল্ট প্রকার সেট করে৷ @@ -2692,6 +2751,12 @@ <translation id="7311458740754205918">এটি মিথ্যাতে সেট করা হলে বা সেট না করা হলে, ব্যবহারকারীর ব্রাউজিং ইতিহাস, আগ্রহ বা অবস্থানের ভিত্তিতে নতুন ট্যাব পৃষ্ঠাটি সামগ্রী প্রস্তাবনা দেখাতে পারে। এটি মিথ্যাতে সেট করা হলে, নতুন ট্যাব পৃষ্ঠায় স্বয়ংক্রিয়ভাবে তৈরি হওয়া সামগ্রী প্রস্তাবনা দেখানো হয় না।</translation> +<translation id="7313793931637495417">ভার্সন তথ্য, যেমন OS ভার্সন, OS প্ল্যাটফর্ম, OS আর্কিটেকচার, <ph name="PRODUCT_NAME" /> ভার্সন এবং <ph name="PRODUCT_NAME" /> চ্যানেল রিপোর্ট করা হবে কিনা তা এই নীতি নিয়ন্ত্রন করে। + + যখন এই নীতি সেট না করা থাকে বা ট্রু হিসেবে সেট করা থাকে, তখন ভার্সন তথ্য সংগ্রহ করা হয়। + যখন এই নীতি ফলস হিসেবে সেট করা থাকে, তখন ভার্সন তথ্য সংগ্রহ করা হয় না। + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> চালু করা থাকলে এবং <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />-এর সাথে মেশিনটি নথিভুক্ত করা থাকলে এই নীতিটি কার্যকর হয়।</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" />এর জন্য অতিরিক্ত কম্যান্ড লাইন প্যারামিটার</translation> <translation id="7326394567531622570">ওয়াইপের (মান ২) মত, তবে লগ-ইন টোকেন সংরক্ষণের চেষ্টা করে যাতে ব্যবহারকারীকে আবার সাইন-ইন করতে না হয়।</translation> <translation id="7329842439428490522">ব্যবহারকারীর ইনপুট ছাড়াই সময়কাল নির্দিষ্ট করে, তারপর ব্যাটারি শক্তি চলতে থাকলেও স্ক্রিনটি বন্ধ হয়ে যায়৷ @@ -2724,6 +2789,12 @@ <translation id="7349338075015720646">এটি নীরবে, ব্যবহারকারীর সঙ্গে যোগাযোগ না করে ইনস্টল হওয়া ওয়েবসাইটগুলির একটি তালিকা এবং এগুলি ব্যবহারকারীর পক্ষে আন-ইনস্টল বা বন্ধ করা সম্ভব নয়। এই নীতির প্রতিটি তালিকাভূক্ত আইটেম দুটি সদস্যযুক্ত একেকটি অবজেক্টঃ "ইউআরএল" এবং "লঞ্চ কন্টেনার"। "ইউআরএল"টি অবশ্যই ইনস্টল করা হবে এমন ওয়েব অ্যাপের ইউআরএল এবং "লঞ্চ_কন্টেনার" অবশ্যই হয় "উইন্ডো" অথবা "ট্যাব" যা ওয়েব অ্যাপটি ইনস্টল হবার পরে কীভাবে খুলবে তা সূচিত করবে। "লঞ্চ_কন্টেনার" বাদ দেওয়া হলে, Chrome যদি অ্যাপটিকে প্রোগ্রেসিভ ওয়েব অ্যাপ মনে করে তবে সেটি একটি উইন্ডোতে খুলবে অন্যথা একটি ট্যাবে।</translation> +<translation id="735902178936442460">মেশিনের নাম এবং নেটওয়ার্ক ঠিকানার মতো মেশিন শনাক্ত করার জন্য ব্যবহার করা যায় এমন তথ্য রিপোর্ট করা হবে কিনা তা এই নীতি নিয়ন্ত্রণ করে। + + এই নীতি সেট করা না থাকলে অথবা ট্রু হিসেবে সেট করা থাকলে, মেশিন শনাক্ত করার জন্য ব্যবহার করা যায় এমন তথ্য সংগ্রহ করা হয়। + এই নীতি ফলস হিসেবে সেট করা থাকলে, মেশিন শনাক্ত করার জন্য ব্যবহার করা যায় এমন তথ্য সংগ্রহ করা হয় না। + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> চালু করা থাকলে এবং <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />-এর সাথে মেশিনটি নথিভুক্ত করা থাকলে এই নীতিটি কার্যকর হয়।</translation> <translation id="7367028210010532881">যে সমস্ত সাইট ক্ষতিকারক হতে পারে বলে চিহ্নিত, ব্যবহারকারীরা সেগুলিতে গেলে নিরাপদ ব্রাউজিং পরিষেবা একটি সতর্কতা পৃষ্ঠা দেখায়। এই সেটিংটি চালু করলে তারা কোনওভাবেই সতর্কতা পৃষ্ঠা থেকে ক্ষতিকারক সাইটে যেতে পারবেন না। এই সেটিংটি বন্ধ করলে বা কনফিগার না করলে ব্যবহারকারীরা চাইলে সতর্কবার্তা দেখার পরেও চিহ্নিত সাইটে যেতে পারবেন। @@ -3016,6 +3087,13 @@ <translation id="798856998567564266">আপনি যদি এই সেটিং সক্ষম করেন তাহলে, বুকমার্ক যুক্ত করা, সরানো বা সংশোধন করা যেতে পারে। এই নীতি সেট না থাকার সময়েও এটি ডিফল্ট। আপনি যদি এই সেটিং অক্ষম করেন তাহলে, বুকমার্ক যুক্ত করা, সরানো বা সংশোধন করা যাবে না। তবে আগে থেকে থাকা বুকমার্কগুলি উপলব্ধ থাকবে।</translation> +<translation id="7992136759457836904">ভার্চুয়াল মেশিন Chrome OS-এ চালানোর অনুমতি দেওয়া হয়েছে কিনা তা নিয়ন্ত্রণ করতে আপনাকে অনুমতি দেয়। + + যদি নীতিটি ট্রু’তে সেট করা হয়, তাহলে ডিভাইসটি ভার্চুয়াল মেশিন চালানোর জন্য অনুমতি দেয়। + যদি নীতিটি ফলসে সেট করা হয়, তাহলে ডিভাইসটি ভার্চুয়াল মেশিন চালানোর জন্য অনুমতি দেয় না। + VirtualMachinesAllowed, CrostiniAllowed, এবং DeviceUnaffiliatedCrostiniAllowed এই তিনটি নীতিকেই ট্রু হতে হবে যদি তাদের Crostini ব্যবহার করার অনুমোদন দিতে হয়। + যখন এই নীতি ফলসে পরিবর্তিত হয় তখন এটি নতুন ভার্চুয়াল মেশিন ব্যবহার করা শুরু করে কিনতু যে ভার্চুয়াল মেশিন আগে থেকেই চালু রয়েছে তা এটি বন্ধ করেনা। + অপরিচালিত ডিভাইসগুলি ভার্চুয়াল মেশিন চালানোর অনুমতি দেয় না।</translation> <translation id="802147957407376460">স্ক্রিন ০ ডিগ্রী ঘোরান</translation> <translation id="8033913082323846868">এই নীতিটি M70-এ বন্ধ করে দেওয়া হয়েছে, অনুগ্রহ করে এর পরিবর্তে AutofillAddressEnabled এবং AutofillCreditCardEnabled ব্যবহার করুন। @@ -3074,10 +3152,17 @@ যখন এই নীতিটিকে সেট করা হয় না, তখন একটি ডিফল্ট সময়কাল ব্যবহৃত হয়৷ নীতির মানটি মিলিসেকেন্ডে নির্ধারণ করা উচিত৷ মানগুলি নিষ্ক্রিয়তা বিলম্বের থেকে কম বা সমান হিসাবে ধার্য করা হয়ে থাকে৷</translation> +<translation id="8138009212169037227">নীতির ডেটা এবং নীতি ফেচ করার সময় রিপোর্ট করা হবে কিনা তা এই নীতি নিয়ন্ত্রণ করে। + + এই নীতি সেট করা না থাকলে অথবা ট্রু হিসেবে সেট করা থাকলে, নীতির ডেটা এবং নীতি ফেচ করার সময় সংগ্রহ করা হয়। + এই নীতি ফলস হিসেবে সেট করা থাকলে, নীতির ডেটা এবং নীতি ফেচ করার সময় সংগ্রহ করা হয় না। + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> চালু করা থাকলে এবং <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />-এর সাথে মেশিনটি নথিভুক্ত করা থাকলে এই নীতিটি কার্যকর হয়।</translation> <translation id="8140204717286305802">সার্ভারে নেটওয়ার্ক ইন্টারফেসগুলির ধরণ ও হার্ডওয়ার ঠিকানাগুলি সহ একটি তালিকা প্রতিবেদন করে৷ যদি নীতিটি সেট না করা থাকে, বা মিথ্যাতে সেট করা থাকে, তাহলে ইন্টারফেস তালিকাটির প্রতিবেদন করা হবে না৷</translation> <translation id="8141795997560411818">এই নীতিটি ব্যবহারকারীকে Android Google ড্রাইভ অ্যাপ্লিকেশান ব্যবহার করতে বাধা দেয় না। আপনি যদি Google ড্রাইভে অ্যাক্সেস করা আটকাতে চান, তাহলে আপনাকে Android Google ড্রাইভ অ্যাপ্লিকেশান ইনস্টলেশন করাও অননুমোদিত করতে হবে।</translation> +<translation id="8142894094385450823">একটি ম্যানেজ করা সেশনের জন্য প্রস্তাবিত লোকেল সেট করুন</translation> <translation id="8146727383888924340">Chrome OS নথিভুক্তকরণের মাধ্যমে ব্যবহারকারীদের অফারগুলি ভাঙ্গাতে অনুমতি দিন</translation> <translation id="8148785525797916822"><ph name="PRODUCT_NAME" /> যখন আর সমর্থিত নয় এমন কোনো কম্পিউটার বা অপারেটিং সিসটেমে চলে তখন যে সতর্কবার্তা দেখা দেয় সেটি গোপন করে।</translation> <translation id="8148901634826284024">উচ্চ বৈসাদৃশ্য মোড অ্যাক্সেসযোগ্যতার বৈশিষ্ট্য সক্রিয় করে৷ @@ -3141,6 +3226,29 @@ <translation id="8259592978873597235">যদি এই নীতি সত্যতে সেট থাকে বা সেট না করা অবস্থায় থাকে, তাহলে ভিডিও চালাকালীন ব্যবহারকারী নিষ্ক্রিয় বলে বিবেচিত হবে না। এটি নিষ্ক্রিয়তা বিলম্ব, স্ক্রিনের উজ্জ্বলতা হ্রাসে বিলম্ব, স্ক্রিন বন্ধে বিলম্ব এবং স্ক্রিন লকের বিলম্বতে পৌঁছাতে এবং এর সাথে সংশ্লিষ্ট ক্রিয়াগুলি করতে বাধা দেয়। যদি এই নীতি মিথ্যাতে সেট থাকে, তাহলে ভিডিও অ্যাক্টিভিটি ব্যবহারকারীকে নিষ্ক্রিয় বলে বিবেচিত হতে বাধা দেয় না।</translation> +<translation id="8264653492961233132">অ্যাপ এবং এক্সটেনশনের একটি তালিকা নির্দিষ্ট করা হয় যেগুলি + ব্যবহারকারীর কোনও ভূমিকা ছাড়াই নীরবে ইনস্টল হয়, এবং ব্যবহারকারী সেগুলি + আন-ইনস্টল বা বন্ধ করতে পারবেন না। অ্যাপ/এক্সটেনশন দ্বারা + করা সমস্ত অনুমতি ব্যবহারকারীর অনুমতি ছাড়াই + নিখুঁতভাবে জারি করা হয়। + এতে অতিরিক্ত অনুমতি রয়েছে যা + অ্যাপ/এক্সটেনশনের ভবিষ্যতের ভার্সন দ্বারা অনুরোধ করা যেতে পারে। + উপরন্তু, অনুমতিগুলি enterprise.deviceAttributes এবং enterprise.platformKeys এক্সটেনশন + এপিআইগুলিতে প্রদান করা হয়। (এই দুটি এপিআই অ্যাপ/এক্সটেনশনের জন্য উপলভ্য নয় যা স্পষ্টভাবে ইনস্টল করা হয় না।) + + এই <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> নীতি পরম্পরবিরোধী হতে পারে এমন কোনও নীতির তুলনায় অগ্রাধিকার পায়। যদি পূর্বে জোর করে ইনস্টল করা কোনও অ্যাপ বা এক্সটেনশন এই তালিকা থেকে সরানো হয়, সেটিকে <ph name="PRODUCT_NAME" /> দ্বারা আন-ইনস্টল করে দেয়। + + Windows এর যে ইনস্ট্যান্সগুলি কোনও <ph name="MS_AD_NAME" /> ডোমেনের সাথে যুক্ত নয় সেগুলিতে জোর করে করা ইনস্টলেশন শুধুমাত্র Chrome ওয়েব স্টোরে তালিকাভুক্ত অ্যাপ এবং এক্সটেনশনের মধ্যেই সীমিত থাকে। + + মনে রাখবেন যে, বিকাশকারীর সাধনের মাধ্যমে ব্যবহারকারীরা কোনও এক্সটেনশনের সোর্স কোড পরিবর্তন করতে পারেন (যার ফলে এক্সটেনশনটি অকেজো হয়ে যেতে পারে)। যদি এটি উদ্বেগের কারণ হয় তাহলে <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> নীতি সেট করতে হবে। + + এই নীতির প্রতিটি তালিকাভুক্ত আইটেম হল একটি স্ট্রিং যাতে সেমিকোলন (<ph name="SEMICOLON" />) দ্বারা পৃথক করা একটি এক্সটেনশন আইডি এবং একটি “আপডেট” ইউআরএল থাকে। এক্সটেনশন আইডি হল একটি ৩২ অক্ষরের স্ট্রিং যেটি সাধারণত ডেভেলপার মোডে থাকার সময় <ph name="CHROME_EXTENSIONS_LINK" /> দেখা যায়। <ph name="LINK_TO_EXTENSION_DOC1" />-এ দেওয়া বর্ণনা অনুযায়ী, “আপডেট” ইউআরএলটি একটি আপডেট ম্যানিফেস্ট XML ডকুমেন্টের দিকে নির্দেশ করবে। স্বভাবত Chrome ওয়েব স্টোরের আপডেট করা ইউআরএল ব্যবহার করা হচ্ছে (বর্তমানে যেটি হল "https://clients2.google.com/service/update2/crx")। মনে রাখবেন যে এই নীতিতে সেট করা "আপডেট" ইউআরএলটি শুধুমাত্র প্রারম্ভিক ইনস্টলেশনের সময় ব্যবহার করা হয়; এক্সটেনশনের পরবর্তী আপডেটগুলিতে এক্সটেনশনের ম্যানিফেস্টে নির্দেশ করা আপডেট ইউআরএলটি ব্যবহার করা হয়। এছাড়াও উল্লেখ্য যে "আপডেট" ইউআরএল উল্লেখ করা স্পষ্টভাবে <ph name="PRODUCT_NAME" /> ভার্সন পর্যন্ত এবং 67 সহ বাধ্যতামূলক ছিল। + + যেমন, স্ট্যান্ডার্ড Chrome ওয়েব ষ্টোর "আপডেট" ইউআরএল থেকে <ph name="EXTENSION_POLICY_EXAMPLE" /> <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> অ্যাপটি ইনস্টল করে। হোস্টিং এক্সটেনশন সম্পর্কে আরও তথ্যের জন্য, দেখুন: <ph name="LINK_TO_EXTENSION_DOC2" />. + + যদি এই নীতি সেট না করে ছেড়ে দেওয়া হয় তাহলে কোনও অ্যাপ বা এক্সটেনশন স্বয়ংক্রিয়ভাবে ইনস্টল হবে না এবং ব্যবহারকারী <ph name="PRODUCT_NAME" />-এ যেকোনও অ্যাপ বা এক্সটেনশন আন-ইনস্টল করতে পারবেন। + + মনে রাখবেন এই নীতিটি ছদ্মবেশী মোডে ব্যবহার করা যাবে না।</translation> <translation id="8274603902181597201">ব্যবহারকারীর ecryptfs হোম ডিরেক্টরি মুছে দিয়ে নতুন ext4-এনক্রিপ্টেড হোম ডিরেক্টরি ব্যবহার করুন।</translation> <translation id="8285435910062771358">পূর্ণ-স্ক্রিন ম্যাগনিফায়ার সক্ষম রয়েছে</translation> <translation id="8288199156259560552">Android Google লোকেশন পরিষেবা সক্ষম করে</translation> @@ -3348,7 +3456,7 @@ যদি এই সেটিংটি সেট না থাকা হিসেবে ছেড়ে যাওয়া হয় তাহলে ব্যবহারকারী এই ক্রিয়াটি ব্যবহার করবেন কিনা তার সিদ্ধান্ত তিনি নিজেই নিতে পারেন।</translation> <translation id="8870318296973696995">হোম পৃষ্ঠা</translation> -<translation id="8876188741456358123">ডিফল্ট প্রিন্টিং ডুপ্লে মোডকে ওভাররাইড করে। মোডটি উপলভ্য না থাকলে এই নীতি অগ্রাহ্য করা হয়।</translation> +<translation id="8876188741456358123">ডিফল্ট প্রিন্টিং ডুপ্লেক্স মোডকে ওভাররাইড করে। মোডটি উপলভ্য না থাকলে এই নীতি অগ্রাহ্য করা হয়।</translation> <translation id="8882006618241293596">এই সাইটগুলিতে <ph name="FLASH_PLUGIN_NAME" /> প্লাগ ইন ব্লক করুন</translation> <translation id="890403179930035128">বানান পরীক্ষা বাধ্যতামূলকভাবে সক্ষম করে। তালিকার যে ভাষাগুলি শনাক্ত করা যাবে না সেগুলিতে বানান পরীক্ষা করা হবে না। @@ -3486,6 +3594,7 @@ RemoteAccessHostDomain থাকলে এই সেটিংয়ের মাধ্যমে সেটি ওভাররাইড করা যাবে। এছাড়া RemoteAccessHostClientDomainList দেখুন।</translation> +<translation id="9077227880520270584">ডিভাইস-স্থানীয় অ্যাকাউন্টের নিজে থেকে লগ-ইন করার টাইমার</translation> <translation id="9084985621503260744">ভিডিও অ্যাক্টিভিটি পাওয়ার পরিচালনাকে প্রভাবিত করবে কিনা তা নির্দিষ্ট করুন</translation> <translation id="9088433379343318874">তত্ত্বাবধানে থাকা ব্যবহারকারী সামগ্রী প্রদানকারী সক্ষম করুন</translation> <translation id="9088444059179765143">স্বয়ংক্রিয় সময়াঞ্চল শনাক্তকরণ পদ্ধতি কনফিগার করুন</translation>
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index d098ac53..9602f69 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -2299,7 +2299,8 @@ Wenn für diese Richtlinie "false" festgelegt wird, werden auf der "Neuer Tab"-Seite keine automatisch generierten Inhaltsvorschläge angezeigt.</translation> <translation id="7313793931637495417">Mit dieser Richtlinie wird festgelegt, ob Versionsinformationen wie die Betriebssystemversion, das Betriebssystem, die Architektur des Betriebssystems, die <ph name="PRODUCT_NAME" />-Version und der <ph name="PRODUCT_NAME" />-Kanal erfasst werden. -Wenn die Richtlinie auf "true" gesetzt oder gar nicht festgelegt ist, werden Versionsinformationen erfasst. Wenn die Richtlinie auf "false" gesetzt ist, werden keine Versionsinformationen erfasst. +Wenn die Richtlinie auf "true" gesetzt oder gar nicht festgelegt ist, werden Versionsinformationen erfasst. +Wenn die Richtlinie auf "false" gesetzt ist, werden keine Versionsinformationen erfasst. Die Richtlinie wird nur angewendet, wenn die <ph name="CHROME_REPORTING_EXTENSION_NAME" /> aktiviert und das Gerät mit <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> registriert ist.</translation> <translation id="7323896582714668701">Zusätzliche Befehlszeilenparameter für <ph name="PRODUCT_NAME" /></translation> @@ -2692,13 +2693,13 @@ Unter Windows ist es empfehlenswert, Richtlinien über Gruppenrichtlinienobjekte zu konfigurieren, die Bereitstellung von Richtlinien über die Registrierung wird jedoch auch weiterhin von Windows-Instanzen unterstützt, die Teil einer <ph name="MS_AD_NAME" />-Domain sind.</translation> <translation id="8264653492961233132">Gibt eine Liste von Apps und Erweiterungen an, die automatisch, ohne Zutun des Nutzers, installiert werden und die nicht von ihm deinstalliert oder deaktiviert werden können. Alle von den Apps und Erweiterungen angeforderten Berechtigungen werden implizit, ohne Eingriff durch den Nutzer, gewährt. Dazu gehören auch alle weiteren Berechtigungen, die von künftigen Versionen der App oder Erweiterung angefordert werden. Außerdem werden den Erweiterungs-APIs "enterprise.deviceAttributes" und "enterprise.platformKeys" Berechtigungen erteilt. Diese beiden APIs stehen bei Apps oder Erweiterungen ohne erzwungene Installation nicht zur Verfügung. -Diese Richtlinie hat Vorrang gegenüber einer möglicherweise damit in Konflikt stehenden " <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> Richtlinie. Wenn eine App oder Erweiterung mit erzwungener Installation aus dieser Liste entfernt wird, wird sie automatisch von <ph name="PRODUCT_NAME" /> deinstalliert. +Diese Richtlinie hat Vorrang gegenüber einer möglicherweise damit in Konflikt stehenden Richtlinie "<ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />". Wenn eine App oder Erweiterung mit erzwungener Installation aus dieser Liste entfernt wird, wird sie automatisch von <ph name="PRODUCT_NAME" /> deinstalliert. Bei Windows-Instanzen, die nicht Teil einer <ph name="MS_AD_NAME" />-Domain sind, bleibt die erzwungene Installation auf die im Chrome Web Store aufgeführten Apps und Erweiterungen beschränkt. Der Quellcode jeder Erweiterung kann mithilfe der Entwicklertools von Nutzern geändert werden. Danach funktioniert die entsprechende Erweiterung eventuell nicht mehr. Wenn Sie dies verhindern möchten, können Sie die Richtlinie "<ph name="DEVELOPER_TOOLS_POLICY_NAME" />" festlegen. -Jedes Listenelement der Richtlinie ist ein String mit einer Erweiterungs-ID und einer optionalen Update-URL, die durch ein Semikolon (<ph name="SEMICOLON" />) getrennt wird. Die Erweiterungs-ID ist der String mit 32 Buchstaben, den Sie beispielsweise im Entwicklermodus in <ph name="CHROME_EXTENSIONS_LINK" /> sehen. Die Update-URL sollte, sofern festgelegt, auf ein Update-Manifest-XML-Dokument verweisen, wie in <ph name="LINK_TO_EXTENSION_DOC1" /> beschrieben. Standardmäßig kommt die Update-URL des Chrome Web Store zum Einsatz, die derzeit "https://clients2.google.com/service/update2/crx"). lautet. Die in dieser Richtlinie festgelegte Update-URL wird nur für die erste Installation verwendet. In nachfolgenden Updates der Erweiterung kommt die Update-URL zum Einsatz, die im Manifest der Erweiterung angegeben wurde. Außerdem war die explizite Festlegung der Update-URL in <ph name="PRODUCT_NAME" />-Versionen bis einschließlich Version 67 obligatorisch. +Jedes Listenelement der Richtlinie ist ein String mit einer Erweiterungs-ID und einer optionalen Update-URL, die durch ein Semikolon (<ph name="SEMICOLON" />) getrennt wird. Die Erweiterungs-ID ist der String mit 32 Buchstaben, den Sie beispielsweise im Entwicklermodus in <ph name="CHROME_EXTENSIONS_LINK" /> sehen. Die Update-URL sollte, sofern festgelegt, auf ein Update-Manifest-XML-Dokument verweisen, wie in <ph name="LINK_TO_EXTENSION_DOC1" /> beschrieben. Standardmäßig kommt die Update-URL des Chrome Web Store zum Einsatz, die derzeit "https://clients2.google.com/service/update2/crx" lautet. Die in dieser Richtlinie festgelegte Update-URL wird nur für die erste Installation verwendet. In nachfolgenden Updates der Erweiterung kommt die Update-URL zum Einsatz, die im Manifest der Erweiterung angegeben wurde. Außerdem war die explizite Festlegung der Update-URL in <ph name="PRODUCT_NAME" />-Versionen bis einschließlich Version 67 obligatorisch. Beispiel: <ph name="EXTENSION_POLICY_EXAMPLE" /> installiert die App <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> über die standardmäßige Update-URL aus dem Chrome Web Store. Weitere Informationen zum Hosting von Erweiterungen finden Sie unter <ph name="LINK_TO_EXTENSION_DOC2" />.
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb index faa7b5d..a70e8c80 100644 --- a/components/policy/resources/policy_templates_el.xtb +++ b/components/policy/resources/policy_templates_el.xtb
@@ -144,6 +144,7 @@ <translation id="1387596372902085462">Αν θα θεωρείται αξιόπιστη ή όχι η τεχνολογία Legacy PKI Infrastructure της Symantec Corporation</translation> <translation id="1393485621820363363">Ενεργοποιημένοι εκτυπωτές εταιρικών συσκευών</translation> <translation id="1397855852561539316">Προεπιλεγμένη διεύθυνση URL προτάσεων πάροχο αναζήτησης</translation> +<translation id="142346659686073702">Να επιτρέπεται στους μη συνεργαζόμενους χρήστες να χρησιμοποιούν το Crostini</translation> <translation id="1426410128494586442">Ναι</translation> <translation id="1427655258943162134">Διεύθυνση ή διεύθυνση URL του διακομιστή μεσολάβησης</translation> <translation id="1435659902881071157">Διαμόρφωση δικτύου σε επίπεδο συσκευής</translation> @@ -389,6 +390,12 @@ Εάν αυτή η πολιτική δεν έχει οριστεί, είναι σαν να μην έχει ενεργοποιηθεί. Δείτε την παραπάνω περιγραφή.</translation> <translation id="2113068765175018713">Περιορισμός χρόνου λειτουργίας συσκευής με αυτόματη επανεκκίνηση</translation> +<translation id="2116790137063002724">Αυτή η πολιτική ελέγχει εάν θα αναφέρονται πληροφορίες που μπορούν να χρησιμοποιηθούν για την ταυτοποίηση χρηστών, όπως στοιχεία σύνδεσης λειτουργικού συστήματος, στοιχεία σύνδεσης προφίλ <ph name="PRODUCT_NAME" />, όνομα προφίλ <ph name="PRODUCT_NAME" />, διαδρομή προφίλ <ph name="PRODUCT_NAME" /> και εκτελέσιμη διαδρομή <ph name="PRODUCT_NAME" />. + + Εάν αυτή η πολιτική δεν οριστεί ή οριστεί ως αληθής ("true"), συλλέγονται πληροφορίες που μπορούν να χρησιμοποιηθούν για την ταυτοποίηση χρηστών. + Εάν αυτή η πολιτική οριστεί ως ψευδής ("false"), δεν συλλέγονται πληροφορίες που μπορούν να χρησιμοποιηθούν για την ταυτοποίηση χρηστών. + + Αυτή η πολιτική ισχύει μόνο εάν έχει ενεργοποιηθεί η επέκταση <ph name="CHROME_REPORTING_EXTENSION_NAME" /> και η συσκευή έχει εγγραφεί στην πολιτική <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Να επιτρέπονται οι ειδοποιήσεις σε αυτούς τους ιστότοπους</translation> <translation id="2131902621292742709">Καθυστέρηση θαμπώματος οθόνης κατά τη λειτουργία με μπαταρία</translation> <translation id="2132732175597591362">Ελέγχει τη λίστα επιτρεπόμενων των τύπων URL για τα οποία η αυτόματη αναπαραγωγή θα είναι πάντα ενεργοποιημένη. @@ -889,6 +896,22 @@ Εάν αυτή η πολιτική δεν οριστεί, θα χρησιμοποιηθεί η καθολική προεπιλεγμένη τιμή για όλους τους ιστοτόπους είτε από την πολιτική ''DefaultCookiesSetting'' εφόσον έχει οριστεί, είτε από την προσωπική διαμόρφωση του χρήστη. Ανατρέξτε επίσης στις πολιτικές "CookiesBlockedForUrls" και "CookiesSessionOnlyForUrls". Λάβετε υπόψη ότι δεν θα πρέπει να υπάρχουν μοτίβα URL σε διένεξη μεταξύ αυτών των τριών πολιτικών. Δεν καθορίζεται ποια από τις πολιτικές έχει προτεραιότητα.</translation> +<translation id="3373364525435227558">Ορίζει ένα ή περισσότερα σύνολα τοπικών ρυθμίσεων για μια διαχειριζόμενη περίοδο σύνδεσης, επιτρέποντας στους χρήστες να διαλέξουν εύκολα ένα από αυτά τα σύνολα τοπικών ρυθμίσεων. + + Ο χρήστης μπορεί να διαλέξει ένα σύνολο τοπικών ρυθμίσεων και μια διάταξη πληκτρολογίου πριν από την έναρξη μιας διαχειριζόμενης περιόδου σύνδεσης. Από προεπιλογή, όλα τα σύνολα τοπικών ρυθμίσεων που υποστηρίζει το <ph name="PRODUCT_OS_NAME" /> αναφέρονται με αλφαβητική σειρά. Μπορείτε να χρησιμοποιήσετε αυτήν την πολιτική, για να μετακινήσετε σύνολα τοπικών ρυθμίσεων στην κορυφή της λίστας. + + Εάν αυτή η πολιτική δεν οριστεί, οι τρέχουσες τοπικές ρυθμίσεις της διεπαφής χρήστη θα να είναι προεπιλεγμένες. + + Εάν οριστεί αυτή η πολιτική, οι προτεινόμενες τοπικές ρυθμίσεις θα μετακινηθούν στην κορυφή της λίστας και θα χωρίζονται με εμφανή τρόπο από τα υπόλοιπα. Οι προτεινόμενες τοπικές ρυθμίσεις θα εμφανίζονται με τη σειρά που εμφανίζονται στην πολιτική. Το πρώτο προτεινόμενο σύνολο τοπικών ρυθμίσεων θα είναι προεπιλεγμένο. + + Εάν υπάρχουν περισσότερα από ένα προτεινόμενα σύνολα τοπικών ρυθμίσεων, θεωρείται ότι οι χρήστες θα θέλουν να επιλέξουν μεταξύ αυτών. Η επιλογή τοπικών ρυθμίσεων και διάταξης πληκτρολογίου θα προσφέρεται με εμφανή τρόπο κατά την έναρξη μιας διαχειριζόμενης περιόδου σύνδεσης. Διαφορετικά, θεωρείται ότι οι περισσότεροι χρήστες θα χρησιμοποιήσουν τις προεπιλεγμένες τοπικές ρυθμίσεις. Η επιλογή τοπικών ρυθμίσεων και διάταξης πληκτρολογίου θα είναι λιγότερο εμφανής κατά την έναρξη μιας διαχειριζόμενης περιόδου σύνδεσης. + + Εάν αυτή η πολιτική οριστεί και ενεργοποιηθεί η αυτόματη σύνδεση (ανατρέξτε στις πολιτικές |DeviceLocalAccountAutoLoginId| and |DeviceLocalAccountAutoLoginDelay|), η διαχειριζόμενη περίοδος σύνδεσης που ξεκινά αυτόματα θα χρησιμοποιεί το πρώτο προτεινόμενο σύνολο τοπικών ρυθμίσεων και την πιο δημοφιλή αντιστοίχιση διάταξης πληκτρολογίου για αυτές τις τοπικές ρυθμίσεις. + + Η προεπιλεγμένη διάταξη πληκτρολογίου θα είναι πάντα η πιο δημοφιλής διάταξη που αντιστοιχεί στο προεπιλεγμένο σύνολο τοπικών ρυθμίσεων. + + Αυτή η πολιτική μπορεί να οριστεί μόνο ως συνιστώμενη. Μπορείτε να την χρησιμοποιήσετε για τη μετακίνηση ενός συνόλου συνιστώμενων τοπικών ρυθμίσεων στην κορυφή, αλλά επιτρέπεται πάντα στους χρήστες να επιλέγουν οποιοεσδήποτε τοπικές ρυθμίσεις που υποστηρίζονται από το <ph name="PRODUCT_OS_NAME" /> για την περίοδο σύνδεσής του. + </translation> <translation id="3381968327636295719">Χρήση του προγράμματος περιήγησης του κεντρικού υπολογιστή από προεπιλογή</translation> <translation id="3414260318408232239">Εάν αυτή η πολιτική δεν έχει ρυθμιστεί, το <ph name="PRODUCT_NAME" /> χρησιμοποιεί μια προεπιλεγμένη ελάχιστη έκδοση, την TLS 1.0. @@ -1124,6 +1147,11 @@ Εάν η τιμή αυτής της πολιτικής οριστεί ως αληθής ή δεν οριστεί, οι χρήστες θα μπορούν να εξαργυρώσουν προσφορές μέσω της εγγραφής στο Chrome OS. Εάν η τιμή αυτής της πολιτικής οριστεί ως ψευδής, οι χρήστες δεν θα μπορούν να εξαργυρώσουν προσφορές.</translation> +<translation id="4008507541867797979">Εάν αυτή η πολιτική οριστεί ως αληθής ("true") ή δεν διαμορφωθεί, το <ph name="PRODUCT_OS_NAME" /> θα εμφανίζει τους υπάρχοντες χρήστες στην οθόνη σύνδεσης και θα επιτρέπει την επιλογή κάποιου από αυτούς. + + Εάν αυτή η πολιτική οριστεί ως ψευδής ("false"), το <ph name="PRODUCT_OS_NAME" /> δεν θα εμφανίζει υπάρχοντες χρήστες στην οθόνη σύνδεσης. Θα εμφανίζεται η κανονική οθόνη σύνδεσης (η οποία εμφανίζει ένα μήνυμα προτροπής για την εισαγωγή της διεύθυνσης ηλεκτρονικού ταχυδρομείου και του κωδικού πρόσβασης ή του τηλεφώνου του χρήστη) ή η παρενθετική οθόνη SAML (εάν έχει ενεργοποιηθεί μέσω της πολιτικής <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />), εκτός εάν έχει διαμορφωθεί κάποια Διαχειριζόμενη περίοδος σύνδεσης. Όταν διαμορφωθεί μια Διαχειριζόμενη περίοδος σύνδεσης, θα εμφανίζονται μόνο οι λογαριασμοί Διαχειριζόμενης περιόδου σύνδεσης, επιτρέποντας την επιλογή ενός από αυτούς. + + Λάβετε υπόψη ότι αυτή η πολιτική δεν επηρεάζει τη διατήρηση ή την απόρριψη των τοπικών δεδομένων χρήστη από τη συσκευή.</translation> <translation id="4010738624545340900">Να επιτρέπεται η επίκληση των παραθύρων διαλόγου επιλογής αρχείων</translation> <translation id="4012737788880122133">Απενεργοποιεί τις αυτόματες ενημερώσεις όταν έχει οριστεί ως αληθής. @@ -1540,6 +1568,15 @@ Αν αυτή η πολιτική δεν οριστεί θα χρησιμοποιηθεί η καθολική προεπιλεγμένη τιμή για όλους τους ιστότοπους είτε από την πολιτική ''DefaultNotificationsSetting'' εφόσον οριστεί, είτε από την προσωπική διαμόρφωση του χρήστη.</translation> <translation id="5219844027738217407">Για τις εφαρμογές Android, αυτή η πολιτική επηρεάζει μόνο το μικρόφωνο. Όταν αυτή η πολιτική ορίζεται αληθής, το μικρόφωνο τίθεται σε σίγαση για όλες τις εφαρμογές Android, χωρίς εξαίρεση.</translation> +<translation id="5228316810085661003">Η καθυστέρηση αυτόματης σύνδεσης τοπικού λογαριασμού συσκευής. + + Εάν η πολιτική |DeviceLocalAccountAutoLoginId| δεν οριστεί, αυτή η πολιτική δεν έχει κάποια επίπτωση. Διαφορετικά: + + Εάν οριστεί η πολιτική, καθορίζει το χρονικό διάστημα χωρίς δραστηριότητα χρήστη που θα πρέπει να παρέλθει πριν από την αυτόματη σύνδεση στον τοπικό λογαριασμό συσκευής που προσδιορίζεται από την πολιτική |DeviceLocalAccountAutoLoginId|. + + Εάν δεν οριστεί αυτή η πολιτική, θα χρησιμοποιηθούν 0 χιλιοστά του δευτερολέπτου ως χρονικό όριο λήξης. + + Αυτή η πολιτική ορίζεται σε χιλιοστά του δευτερολέπτου.</translation> <translation id="523505283826916779">Ρυθμίσεις προσβασιμότητας</translation> <translation id="5247006254130721952">Αποκλεισμός επικίνδυνων λήψεων</translation> <translation id="5248863213023520115">Ορίζει τους τύπους κρυπτογράφησης που επιτρέπονται όταν ζητούνται εισιτήρια Kerberos από έναν διακομιστή <ph name="MS_AD_NAME" />. @@ -1560,6 +1597,12 @@ <translation id="5272684451155669299">Εάν οριστεί αληθής, ο χρήστης μπορεί να χρησιμοποιήσει το υλικό σε συσκευές Chrome για απομακρυσμένη επιβεβαίωση της ταυτότητάς του στην Αρχή Πιστοποιητικού απορρήτου μέσω του <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> με χρήση του <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Εάν οριστεί μη αληθής ή εάν δεν οριστεί, οι κλήσεις προς το API θα αποτυγχάνουν εμφανίζοντας έναν κωδικό σφάλματος.</translation> +<translation id="5277806246014825877">Ενεργοποίηση αυτού του χρήστη για την εκτέλεση του Crostini. + + Εάν η πολιτική οριστεί ως ψευδής ("false"), το Crostini δεν ενεργοποιείται για τον χρήστη. + Εάν οριστεί ως αληθής ("true") ή δεν οριστεί, το Crostini ενεργοποιείται για τον χρήστη, δεδομένου ότι αυτό επιτρέπεται επίσης από τις άλλες ρυθμίσεις. + Και οι τρεις πολιτικές, VirtualMachinesAllowed, CrostiniAllowed και DeviceUnaffiliatedCrostiniAllowed πρέπει να είναι αληθείς όταν εφαρμόζονται για το Crostini, προκειμένου να επιτρέπεται η εκτέλεσή τους. + Όταν αυτή η πολιτική αλλάξει σε ψευδή ("false"), εφαρμόζεται στην έναρξη νέων κοντέινερ Crostini, αλλά δεν απενεργοποιεί τα κοντέινερ που εκτελούνται ήδη.</translation> <translation id="5283457834853986457">Απενεργοποίηση εργαλείου εύρεσης προσθηκών (καταργήθηκε)</translation> <translation id="5288772341821359899">Εάν οριστεί αυτή η πολιτική, το εύρος της θύρας UDP που χρησιμοποιείται από το WebRTC περιορίζεται στο καθορισμένο διάστημα θύρας (περιλαμβάνονται τα τελικά σημεία). @@ -1598,6 +1641,7 @@ Αν αυτή η πολιτική δεν καθοριστεί, θα χρησιμοποιηθεί η πολιτική ''AskNotifications'' και ο χρήστης θα μπορεί να την αλλάξει.</translation> <translation id="538108065117008131">Να επιτρέπεται στο <ph name="PRODUCT_FRAME_NAME" /> η διαχείριση των παρακάτω τύπων περιεχομένου.</translation> +<translation id="5391388690191341203">Τοπικός λογαριασμός συσκευής για αυτόματη σύνδεση</translation> <translation id="5392172595902933844">Οι πληροφορίες σχετικά με την κατάσταση του Android επιστρέφουν στον διακομιστή. @@ -1628,6 +1672,7 @@ Η προεπιλεγμένη ρύθμιση που χρησιμοποιείται όταν αυτή η πολιτική δεν ορίζεται είναι να επιτρέπεται στο πρόγραμμα περιήγησης του κεντρικού υπολογιστή να κάνει την απόδοση, αλλά μπορείτε προαιρετικά να την παρακάμψετε και το <ph name="PRODUCT_FRAME_NAME" /> να αποδίδει σελίδες HTML από προεπιλογή.</translation> <translation id="5464816904705580310">Διαμόρφωση ρυθμίσεων για χρήστες διαχείρισης.</translation> <translation id="546726650689747237">Καθυστέρηση θαμπώματος οθόνης κατά τη λειτουργία με εναλλασσόμενο ρεύμα</translation> +<translation id="5469143988693423708">Επιτρέπεται στον χρήστη η εκτέλεση του Crostini</translation> <translation id="5469825884154817306">Αποκλεισμός εικόνων σε αυτούς τους ιστότοπους</translation> <translation id="5475361623548884387">Ενεργοποίηση εκτύπωσης</translation> <translation id="547601067149622666">Να μην επιτρέπονται οι διαφημίσεις σε ιστοτόπους με παρεμβατικές διαφημίσεις</translation> @@ -1679,6 +1724,9 @@ Λάβετε υπόψη ότι κάτι τέτοιο δεν συνιστάται, καθώς ενδέχεται να επιτρέψει την παράκαμψη της επέκτασης nameConstraints που περιορίζει τα ονόματα κεντρικού υπολογιστή για τα οποία μπορεί να εξουσιοδοτηθεί ένα δεδομένο πιστοποιητικό. Εάν αυτή η πολιτική δεν έχει οριστεί ή έχει οριστεί ως μη αληθής, τα πιστοποιητικά διακομιστή που δεν διαθέτουν την επέκταση subjectAlternativeName και περιέχουν όνομα DNS ή διεύθυνση IP δεν θα θεωρούνται αξιόπιστα.</translation> +<translation id="5581292529942108810">Διαμορφώστε πολιτικές που σχετίζονται με το Chrome Reporting Extension. + + Αυτή η πολιτική ισχύει μόνο όταν έχει ενεργοποιηθεί η επέκταση <ph name="CHROME_REPORTING_EXTENSION_NAME" /> και η συσκευή έχει εγγραφεί στην πολιτική <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Έλεγχος των υπηρεσιών τοποθεσίας Google σε συσκευές Android</translation> <translation id="5586942249556966598">Kαμία ενέργεια</translation> <translation id="5630352020869108293">Επαναφορά τελευταίας περιόδου σύνδεσης</translation> @@ -1922,6 +1970,11 @@ <translation id="6310223829319187614">Ενεργοποίηση αυτόματης συμπλήρωσης ονόματος τομέα κατά τη σύνδεση χρήστη</translation> <translation id="6315673513957120120">Το Chrome εμφανίζει μια σελίδα προειδοποίησης, όταν οι χρήστες μεταβαίνουν σε ιστότοπους που έχουν σφάλματα SSL. Από προεπιλογή ή όταν αυτή η πολιτική έχει οριστεί ως αληθής, οι χρήστες έχουν τη δυνατότητα να φτάνουν με κλικ σε αυτές τις σελίδες προειδοποίησης. Αν ορίσετε αυτήν την πολιτική ως ψευδή, δεν θα επιτρέπεται στους χρήστες να φτάνουν με κλικ σε σελίδες προειδοποίησης.</translation> +<translation id="6352543686437322588">Ένας τοπικός λογαριασμός συσκευής για αυτόματη σύνδεση μετά από κάποια καθυστέρηση. + + Εάν οριστεί αυτή η πολιτική, η καθορισμένη περίοδος σύνδεσης θα συνδέεται αυτόματα μετά την παρέλευση ενός χρονικού διαστήματος στην οθόνη σύνδεσης χωρίς κάποια αλληλεπίδραση από τον χρήστη. Ο τοπικός λογαριασμός συσκευής θα πρέπει να έχει διαμορφωθεί ήδη (ανατρέξτε στην ενότητα |DeviceLocalAccounts|). + + Εάν δεν οριστεί αυτή η πολιτική, δεν θα πραγματοποιείται αυτόματη σύνδεση.</translation> <translation id="6353901068939575220">Προσδιορίζει τις παραμέτρους που χρησιμοποιούνται κατά την αναζήτηση με μια διεύθυνση URL με POST. Αποτελείται από ζεύγη ονομάτων διαχωρισμένων με κόμμα/τιμών. Εάν η τιμή αποτελεί μια παράμετρο προτύπου, όπως {searchTerms} στο παραπάνω παράδειγμα, θα αντικατασταθεί με πραγματικά δεδομένα όρων αναζήτησης. Αυτή η πολιτική είναι προαιρετική. Εάν δεν οριστεί, το αίτημα αναζήτησης θα αποσταλεί χρησιμοποιώντας τη μέθοδο GET. @@ -2287,6 +2340,11 @@ Εάν αυτή η πολιτική δεν οριστεί, ο χρήστης θα μπορεί να αλλάζει αυτήν τη ρύθμιση με μη αυτόματο τρόπο.</translation> <translation id="723103540848640830">Ορίζει την ελάχιστη έκταση του αριθμού PIN κλειδώματος οθόνης.</translation> +<translation id="7232816984286843471">Εάν η πολιτική οριστεί ως ψευδής ("false"), δεν θα επιτρέπεται σε μη συνεργαζόμενους χρήστες να χρησιμοποιούν το Crostini. + + Εάν η πολιτική δεν οριστεί ή οριστεί ως αληθής ("true"), επιτρέπεται η χρήση του Crostini από όλους τους χρήστες, δεδομένου ότι αυτό επιτρέπεται επίσης από τις άλλες ρυθμίσεις. + Και οι τρεις πολιτικές, VirtualMachinesAllowed, CrostiniAllowed και DeviceUnaffiliatedCrostiniAllowed πρέπει να είναι αληθείς όταν εφαρμόζονται για το Crostini, προκειμένου να επιτρέπεται η εκτέλεσή τους. + Όταν αυτή η πολιτική αλλάξει σε ψευδή ("false"), εφαρμόζεται στην έναρξη νέων κοντέινερ Crostini, αλλά δεν απενεργοποιεί τα κοντέινερ που εκτελούνται ήδη.</translation> <translation id="7234280155140786597">Ονόματα των απαγορευμένων εγγενών κεντρικών υπολογιστών ανταλλαγής μηνυμάτων (ή * για όλους)</translation> <translation id="7236775576470542603">Ορισμός του προεπιλεγμένου τύπου μεγέθυνσης οθόνης που θα ενεργοποιείται στην οθόνη σύνδεσης. @@ -2334,6 +2392,12 @@ <translation id="7311458740754205918">Εάν αυτή η πολιτική οριστεί αληθής ή δεν οριστεί, η Σελίδα σε νέα καρτέλα ενδέχεται να εμφανίζει προτάσεις περιεχομένου που βασίζονται στο ιστορικό περιήγησης, τα ενδιαφέροντα ή την τοποθεσία του χρήστη. Εάν αυτή η πολιτική οριστεί μη αληθής, δεν εμφανίζονται στη Σελίδα σε νέα καρτέλα προτάσεις περιεχομένου που δημιουργούνται αυτόματα.</translation> +<translation id="7313793931637495417">Αυτή η πολιτική ελέγχει εάν θα αναφέρονται οι πληροφορίες έκδοσης, όπως έκδοση λειτουργικού συστήματος, πλατφόρμα λειτουργικού συστήματος, αρχιτεκτονική λειτουργικού συστήματος, έκδοση <ph name="PRODUCT_NAME" /> και κανάλι <ph name="PRODUCT_NAME" />. + + Εάν αυτή η πολιτική δεν οριστεί ή οριστεί ως αληθής ("true"), συλλέγονται πληροφορίες έκδοσης. + Εάν αυτή η πολιτική οριστεί ως ψευδής ("false"), δεν συλλέγονται πληροφορίες έκδοσης. + + Αυτή η πολιτική ισχύει μόνο εάν έχει ενεργοποιηθεί η επέκταση <ph name="CHROME_REPORTING_EXTENSION_NAME" /> και η συσκευή έχει εγγραφεί στην πολιτική <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Πρόσθετες παράμετροι γραμμής εντολών για το <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Παρόμοιο με την επιλογή Wipe (τιμή 2), αλλά προσπαθεί να διατηρήσει τα διακριτικά σύνδεσης, έτσι ώστε ο χρήστης να μην χρειαστεί να συνδεθεί ξανά.</translation> <translation id="7329842439428490522">Καθορίζει τη χρονική διάρκεια χωρίς εισαγωγή από το χρήστη, μετά από την οποία η οθόνη απενεργοποιείται κατά τη λειτουργία με μπαταρία. @@ -2366,6 +2430,12 @@ <translation id="7349338075015720646">Καθορίζει μια λίστα ιστοτόπων οι οποίοι εγκαθίστανται αθόρυβα, χωρίς αλληλεπίδραση με τον χρήστη, και οι οποίοι δεν είναι δυνατό να απεγκατασταθούν ή να απενεργοποιηθούν από τον χρήστη. Κάθε στοιχείο της λίστας της πολιτικής είναι ένα αντικείμενο με δύο μέλη: "url" και "launch_container". Το στοιχείο "url" θα πρέπει να είναι το URL της εφαρμογής ιστού που θα εγκατασταθεί και το "launch_container" θα πρέπει να είναι είτε "window" είτε "tab", προκειμένου να υποδεικνύει τον τρόπο με τον οποίο ανοίγει η εφαρμογή ιστού μετά την εγκατάσταση. Εάν το στοιχείο "launch_container" παραβλεφθεί, η εφαρμογή θα εκκινηθεί σε κάποιο παράθυρο εάν το Chrome τη θεωρήσει προηγμένη εφαρμογή ιστού. Διαφορετικά θα εκκινηθεί σε μια καρτέλα.</translation> +<translation id="735902178936442460">Αυτή η πολιτική ελέγχει εάν θα αναφέρονται πληροφορίες που μπορούν να χρησιμοποιηθούν για την ταυτοποίηση συσκευών, όπως όνομα συσκευής και διευθύνσεις δικτύου. + + Εάν αυτή η πολιτική δεν οριστεί ή οριστεί ως αληθής ("true"), συλλέγονται πληροφορίες που μπορούν να χρησιμοποιηθούν για την ταυτοποίηση συσκευών. + Εάν αυτή η πολιτική οριστεί ως ψευδής ("false"), δεν συλλέγονται πληροφορίες που μπορούν να χρησιμοποιηθούν για την ταυτοποίηση συσκευών. + + Αυτή η πολιτική ισχύει μόνο εάν έχει ενεργοποιηθεί η επέκταση <ph name="CHROME_REPORTING_EXTENSION_NAME" /> και η συσκευή έχει εγγραφεί στην πολιτική <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">Η υπηρεσία Ασφαλούς περιήγησης εμφανίζει μια προειδοποιητική σελίδα όταν οι χρήστες πλοηγούνται σε ιστοτόπους που έχουν επισημανθεί ως δυνητικά επιβλαβείς. Η ενεργοποίηση αυτής της ρύθμισης αποτρέπει τη μετάβαση των χρηστών στον επιβλαβή ιστότοπο από την προειδοποιητική σελίδα. Εάν αυτή η ρύθμιση έχει απενεργοποιηθεί ή δεν έχει διαμορφωθεί, τότε οι χρήστες θα μπορούν να επιλέξουν να μεταβούν στον ιστότοπο που έχει επισημανθεί μετά την εμφάνιση της προειδοποίησης. @@ -2626,6 +2696,14 @@ <translation id="7976157349247117979">Το όνομα του προορισμού του <ph name="PRODUCT_NAME" /></translation> <translation id="7980227303582973781">Δεν υπάρχουν ειδικοί περιορισμοί</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Σας επιτρέπει να ελέγχετε εάν θα επιτρέπεται η εκτέλεση εικονικών συσκευών στο Chrome OS. + + Εάν η πολιτική οριστεί ως αληθής ("true"), επιτρέπεται στη συσκευή να εκτελεί εικονικές συσκευές. + Εάν η πολιτική οριστεί ως ψευδής ("false"), δεν θα επιτρέπεται στη συσκευή να εκτελεί εικονικές συσκευές. + Και οι τρεις πολιτικές, VirtualMachinesAllowed, CrostiniAllowed και DeviceUnaffiliatedCrostiniAllowed πρέπει να είναι αληθείς όταν εφαρμόζονται για το Crostini, προκειμένου να επιτρέπεται η εκτέλεσή τους. + Όταν η πολιτική αλλάξει σε ψευδή ("false"), εφαρμόζεται στην έναρξη νέων εικονικών συσκευών, αλλά δεν τερματίζει τη λειτουργία εικονικών συσκευών που εκτελούνται ήδη. + Εάν αυτή η πολιτική δεν οριστεί σε μια διαχειριζόμενη συσκευή, δεν επιτρέπεται στη συσκευή να εκτελεί εικονικές συσκευές. + Επιτρέπεται στις μη διαχειριζόμενες συσκευές να εκτελούν εικονικές συσκευές.</translation> <translation id="802147957407376460">Περιστροφή οθόνης κατά 0 μοίρες</translation> <translation id="8033913082323846868">Αυτή η πολιτική καταργήθηκε στην έκδοση M70. Χρησιμοποιήστε τα AutofillAddressEnabled και AutofillCreditCardEnabled . @@ -2670,10 +2748,17 @@ Όταν καταργείται η ρύθμιση αυτής της πολιτικής, χρησιμοποιείται μια προεπιλεγμένη χρονική διάρκεια. Η τιμή πολιτικής πρέπει να προσδιορίζεται σε χιλιοστά δευτερολέπτου. Οι τιμές καθορίζονται έτσι ώστε να είναι μικρότερες από την καθυστέρηση αδράνειας ή ίσες με αυτήν.</translation> +<translation id="8138009212169037227">Αυτή η πολιτική ελέγχει εάν θα αναφέρονται τα δεδομένα πολιτικής και η ώρα της ανάκτησης πολιτικής. + + Εάν αυτή η πολιτική δεν οριστεί ή οριστεί ως αληθής ("true"), συλλέγονται τα δεδομένα πολιτικής και η ώρα της ανάκτησης πολιτικής. + Εάν αυτή η πολιτική οριστεί ως ψευδής ("false"), δεν συλλέγονται τα δεδομένα πολιτικής και η ώρα της ανάκτησης πολιτικής. + + Αυτή η πολιτική ισχύει μόνο εάν έχει ενεργοποιηθεί η επέκταση <ph name="CHROME_REPORTING_EXTENSION_NAME" /> και η συσκευή έχει εγγραφεί στην πολιτική <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Αναφορά λίστας των διεπαφών δικτύου με τον τύπο τους και τις διευθύνσεις υλικού στο διακομιστή. Εάν αυτή η πολιτική οριστεί αναληθής, η λίστα των διεπαφών δεν θα αναφερθεί.</translation> <translation id="8141795997560411818">Αυτή η πολιτική δεν παρεμποδίζει τον χρήστη να χρησιμοποιήσει την εφαρμογή Android Google Drive. Εάν θέλετε να αποκλείσετε την πρόσβαση στο Google Drive, θα πρέπει να μην επιτρέψετε την εγκατάσταση της εφαρμογής Google Drive επίσης.</translation> +<translation id="8142894094385450823">Ορισμός των προτεινόμενων τοπικών ρυθμίσεων για μια διαχειριζόμενη περίοδο σύνδεσης</translation> <translation id="8146727383888924340">Να επιτρέπεται στους χρήστες η εξαργύρωση προσφορών μέσω της εγγραφής του Chrome OS</translation> <translation id="8148785525797916822">Καταστέλλει την προειδοποίηση που εμφανίζεται όταν το <ph name="PRODUCT_NAME" /> εκτελείται σε κάποιον υπολογιστή ή σε κάποιο λειτουργικό σύστημα που δεν υποστηρίζεται πια.</translation> <translation id="8148901634826284024">Ενεργοποίηση της λειτουργίας προσβασιμότητας υψηλής αντίθεσης. @@ -2721,6 +2806,29 @@ Αυτές οι ρυθμίσεις δεν απαιτούν μη αυτόματη διαμόρφωση! Διατίθενται εύχρηστα πρότυπα για Windows, Mac και Linux για λήψη από τη διεύθυνση <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />. Ο προτεινόμενος τρόπος διαμόρφωσης πολιτικής στα Windows είναι μέσω του GPO, παρόλο που η πολιτική παροχής μέσω μητρώου εξακολουθεί να υποστηρίζεται για παρουσίες των Windows που συμμετέχουν σε τομέα του <ph name="MS_AD_NAME" />.</translation> +<translation id="8264653492961233132">Καθορίζει μια λίστα εφαρμογών και επεκτάσεων που εγκαθίστανται στο παρασκήνιο, + χωρίς αλληλεπίδραση με τον χρήστη και οι οποίες δεν είναι δυνατό να απεγκατασταθούν ή + να απενεργοποιηθούν από τον χρήστη. Όλες οι άδειες που ζητούν οι + εφαρμογές/επεκτάσεις εκχωρούνται ρητά, χωρίς αλληλεπίδραση με τον χρήστη, + συμπεριλαμβανομένων τυχόν πρόσθετων αδειών που ζητούνται από μελλοντικές εκδόσεις της + εφαρμογής/επέκτασης. Επιπλέον, εκχωρούνται άδειες για τα API. + επέκτασης enterprise.deviceAttributes και enterprise.platformKeys + (Αυτά τα δύο API δεν είναι διαθέσιμα στις εφαρμογές/επεκτάσεις των οποίων η εγκατάσταση + δεν ήταν αναγκαστική.) + + Αυτή η πολιτική έχει προτεραιότητα σε σχέση με μια πολιτική <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> με την οποία πιθανόν έρχεται σε διένεξη. Εάν κάποια εφαρμογή ή επέκταση, η εγκατάσταση της οποίας ήταν αναγκαστική στο παρελθόν, καταργηθεί από αυτήν τη λίστα, θα απεγκατασταθεί αυτόματα από το <ph name="PRODUCT_NAME" />. + + Για παρουσίες Windows που δεν συμμετέχουν σε κάποιον τομέα <ph name="MS_AD_NAME" />, η αναγκαστική εγκατάσταση περιορίζεται στις εφαρμογές και στις επεκτάσεις που περιλαμβάνονται στο Chrome Web Store. + + Λάβετε υπόψη ότι ο πηγαίος κώδικας οποιασδήποτε επέκτασης μπορεί να τροποποιηθεί από τους χρήστες μέσω των Εργαλείων για προγραμματιστές (με κίνδυνο η επέκταση να καταστεί δυσλειτουργική). Εάν αυτό σας ανησυχεί, τότε θα πρέπει να οριστεί η πολιτική <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Κάθε στοιχείο λίστας της πολιτικής είναι μια συμβολοσειρά που περιέχει ένα αναγνωριστικό επέκτασης και, προαιρετικά, ένα URL "ενημέρωσης" που διαχωρίζεται με ελληνικό ερωτηματικό (<ph name="SEMICOLON" />). Το αναγνωριστικό επέκτασης είναι μια συμβολοσειρά 32 γραμμάτων που βρίσκεται, για παράδειγμα, στο <ph name="CHROME_EXTENSIONS_LINK" />, όταν εκτελείται η λειτουργία προγραμματιστή. Εάν έχει καθοριστεί, το URL "ενημέρωσης" θα πρέπει να οδηγεί σε ένα έγγραφο XML Μανιφέστου ενημέρωσης, όπως περιγράφεται στο <ph name="LINK_TO_EXTENSION_DOC1" />. Από προεπιλογή, χρησιμοποιείται το URL ενημέρωσης του Chrome Web Store (το οποίο αυτήν τη στιγμή είναι το "https://clients2.google.com/service/update2/crx"). Λάβετε υπόψη ότι το URL "ενημέρωσης" που έχει οριστεί σε αυτήν την πολιτική χρησιμοποιείται μόνο για την αρχική εγκατάσταση. Οι επόμενες ενημερώσεις της επέκτασης περιλαμβάνουν το URL ενημέρωσης που υποδεικνύεται στο μανιφέστο της επέκτασης. Επίσης, λάβετε υπόψη ότι ο ρητός καθορισμός του URL "ενημέρωσης" ήταν υποχρεωτικός σε εκδόσεις <ph name="PRODUCT_NAME" /> έως και την έκδοση 67. + + Για παράδειγμα, το <ph name="EXTENSION_POLICY_EXAMPLE" /> εγκαθιστά την εφαρμογή <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> από το τυπικό URL "ενημέρωσης" του Chrome Web Store. Για περισσότερες πληροφορίες σχετικά με τη φιλοξενία επεκτάσεων, ανατρέξτε στο: <ph name="LINK_TO_EXTENSION_DOC2" />. + + Εάν αυτή η πολιτική δεν οριστεί, δεν θα εγκαθίστανται αυτόματα εφαρμογές ή επεκτάσεις και ο χρήστης μπορεί να απεγκαταστήσει οποιαδήποτε εφαρμογή ή επέκταση στο <ph name="PRODUCT_NAME" />. + + Λάβετε υπόψη ότι αυτή η πολιτική δεν εφαρμόζεται σε κατάσταση ανώνυμης περιήγησης.</translation> <translation id="8274603902181597201">Κάντε εκκαθάριση του αρχικού καταλόγου ecryptfs του χρήστη και αρχίστε να χρησιμοποιείτε έναν νέο αρχικό κατάλογο με κρυπτογράφηση ext4.</translation> <translation id="8285435910062771358">Μεγέθυνση πλήρους οθόνης ενεργοποιημένη</translation> <translation id="8288199156259560552">Ενεργοποίηση της Υπηρεσίας τοποθεσίας Android της Google</translation> @@ -3007,6 +3115,7 @@ Αυτή η πολιτική δεν είναι διαθέσιμη σε παρουσίες Windows που δεν συμμετέχουν σε έναν τομέα <ph name="MS_AD_NAME" />.</translation> <translation id="9035964157729712237">Αναγνωριστικά επέκτασης για εξαίρεση από τη λίστα αποκλεισμένων</translation> <translation id="9042911395677044526">Επιτρέπει την προώθηση της διαμόρφωσης δικτύου για την εφαρμογή ανά χρήστη σε μια συσκευή <ph name="PRODUCT_OS_NAME" />. Η διαμόρφωση δικτύου είναι μια συμβολοσειρά με μορφοποίηση JSON, όπως καθορίζεται από την Ανοιχτή μορφή διαμόρφωσης δικτύου που περιγράφεται στο <ph name="ONC_SPEC_URL" /></translation> +<translation id="9077227880520270584">Χρονόμετρο αυτόματης σύνδεσης τοπικού λογαριασμού συσκευής</translation> <translation id="9084985621503260744">Καθορίζει εάν η δραστηριότητα βίντεο επηρεάζει τη διαχείριση ηλεκτρικής ενέργειας</translation> <translation id="9088433379343318874">Ενεργοποίηση του εποπτευόμενου παρόχου περιεχομένου χρήστη</translation> <translation id="9088444059179765143">Διαμόρφωση της μεθόδου αυτόματου εντοπισμού ζώνης ώρας</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index d53cc50..8178e69 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -140,6 +140,7 @@ <translation id="1387596372902085462">Habilitar o inhabilitar la confianza en la infraestructura del PKI heredado de Symantec Corporation</translation> <translation id="1393485621820363363">Impresoras empresariales habilitadas asociadas a dispositivos</translation> <translation id="1397855852561539316">Dirección URL sugerida para el proveedor de búsqueda predeterminado</translation> +<translation id="142346659686073702">Permitir que los usuarios no afiliados usen Crostini</translation> <translation id="1426410128494586442">Sí</translation> <translation id="1427655258943162134">Dirección o dirección URL del servidor proxy</translation> <translation id="1435659902881071157">Configuración de red de dispositivo</translation> @@ -383,6 +384,12 @@ Si no se establece esta política, es equivalente a que esté habilitada; para obtener más información, consulta la descripción que se encuentra más arriba.</translation> <translation id="2113068765175018713">Limita el tiempo de actividad del dispositivo mediante un reinicio automático.</translation> +<translation id="2116790137063002724">Esta política controla el envío de los datos que permiten identificar a los usuarios, como el acceso al SO, el acceso al perfil de <ph name="PRODUCT_NAME" />, el nombre de perfil de <ph name="PRODUCT_NAME" />, la ruta de acceso al perfil de <ph name="PRODUCT_NAME" /> y la ruta ejecutable de <ph name="PRODUCT_NAME" />. + + Si se establece esta política como verdadera, o no se establece, se recopilará la información que permite identificar a los usuarios. + Si se configura como falsa, no se recopilará esta información. + + Esta política solo es válida si se habilita <ph name="CHROME_REPORTING_EXTENSION_NAME" />, y la máquina está inscrita en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Permitir notificaciones en estos sitios</translation> <translation id="2131902621292742709">Demora de atenuación de pantalla con batería</translation> <translation id="2132732175597591362">Controla la lista blanca de los patrones de URL en los que la reproducción automática está siempre habilitada. @@ -853,6 +860,22 @@ Si no se configura esta política, se usará el valor global predeterminado para todos los sitios ya sea de la política "DefaultCookiesSetting" (si está configurada) o de otro tipo de configuración personal del usuario. Consulta también las políticas "CookiesBlockedForUrls" y "CookiesSessionOnlyForUrls". Ten en cuenta que no debe haber patrones de URL en conflicto entre estas tres políticas. No se especifica qué política tiene prioridad.</translation> +<translation id="3373364525435227558">Establece una o más configuraciones regionales para una sesión administrada y permite que los usuarios elijan fácilmente una de estas configuraciones regionales. + + El usuario puede elegir una configuración regional y un diseño de teclado antes de empezar una sesión administrada. De forma predeterminada, todas las configuraciones regionales admitidas por <ph name="PRODUCT_OS_NAME" /> se incluyen en una lista ordenada alfabéticamente. Puedes utilizar esta política para colocar un conjunto de configuraciones regionales recomendadas en la parte superior de la lista. + + Si no se establece esta política, se seleccionará automáticamente la configuración regional actual de la interfaz del usuario. + + Si se establece esta política, las configuraciones regionales recomendadas se ubicarán en la parte superior de la lista y se separarán visualmente de las demás. Las configuraciones regionales recomendadas se ubicarán en la lista en el orden en el que aparecen en la política. Se seleccionará automáticamente la primera configuración regional recomendada. + + Si hay más de una configuración regional recomendada, se supone que los usuarios querrán seleccionar una de estas configuraciones regionales. La selección de diseño de teclado y de configuración regional se ofrecerá de forma visible cuando se inicie una sesión administrada. De lo contrario, se supone que la mayoría de los usuarios querrán utilizar la configuración regional preseleccionada. La selección de diseño de teclado y de configuración regional se ofrecerá de forma menos visible cuando se inicie una sesión administrada. + + Cuando esta política se establece y el acceso automático está habilitado (consulta las políticas |DeviceLocalAccountAutoLoginId| y |DeviceLocalAccountAutoLoginDelay|), la sesión administrada que comenzó automáticamente utilizará la primera configuración regional recomendada y el diseño de teclado más popular que coincida con ella. + + El diseño de teclado preseleccionado siempre será el más popular que coincida con la configuración regional preseleccionada. + + Esta política solo se puede establecer como recomendada. Puedes utilizar esta política para colocar un conjunto de configuraciones regionales recomendadas en la parte superior, pero los usuarios pueden elegir cualquier configuración regional entre las que admite <ph name="PRODUCT_OS_NAME" /> para su sesión. + </translation> <translation id="3381968327636295719">Utilizar el navegador del host de manera predeterminada</translation> <translation id="3414260318408232239">Si no se configura esta política, <ph name="PRODUCT_NAME" /> usará la versión mínima predeterminada, que es TLS 1.0. @@ -1085,6 +1108,11 @@ Si esta política se establece en True o no se establece, los usuarios podrán canjear ofertas a través del registro del Sistema operativo de Chrome. Si esta política se establece en False, el usuario no podrá canjear ofertas.</translation> +<translation id="4008507541867797979">Si se establece esta política como verdadera, o no se establece, <ph name="PRODUCT_OS_NAME" /> mostrará a los usuarios existentes en la pantalla de acceso y permitirá elegir uno. + + Si se establece como falsa, <ph name="PRODUCT_OS_NAME" /> no mostrará a los usuarios existentes en la pantalla de acceso. Se mostrará la pantalla de acceso normal (en la que se solicita el correo electrónico y la contraseña o el teléfono del usuario) o la pantalla intersticial SAML (si se habilita a través de la política <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />), a menos que se configure una sesión administrada. Si ese es el caso, solo se mostrarán las cuentas de la sesión administrada, donde se podrá elegir una. + + Hay que tener en cuenta que esta política no afecta si el dispositivo conserva o descarga los datos de usuario locales.</translation> <translation id="4010738624545340900">Permitir la invocación de los diálogos de selección de archivos</translation> <translation id="4012737788880122133">Cuando esta política se establece como verdadera, desactiva las actualizaciones automáticas. @@ -1475,6 +1503,15 @@ Si se establece la política como verdadera o no se especifica, se inhabilitarán los ciclos de vida de las pestañas.</translation> <translation id="5208240613060747912">Te permite configurar una lista de patrones de URL que especifican los sitios que no están autorizados a mostrar notificaciones. Si esta política no se configura, se usará el valor global predeterminado para todos los sitios ya sea de la política "DefaultNotificationsSetting", si está configurada, o de otro tipo de configuración personal del usuario.</translation> <translation id="5219844027738217407">Para las apps de Android, esta política solo afecta al micrófono. Cuando esta política se establece como falsa, se silencia el micrófono para todas las apps de Android, sin excepciones.</translation> +<translation id="5228316810085661003">Se establece el retraso para el acceso automático de la cuenta local del dispositivo. + + Si no se establece la política |DeviceLocalAccountAutoLoginId|, esta política no tiene efecto. De lo contrario: + + Si se establece, determina el tiempo sin actividad del usuario que debe transcurrir antes de acceder automáticamente a la cuenta local del dispositivo especificada en la política |DeviceLocalAccountAutoLoginId|. + + Si no se establece, el tiempo de espera será de 0 milisegundos. + + Esta política se especifica en milisegundos.</translation> <translation id="523505283826916779">Configuración de accesibilidad</translation> <translation id="5247006254130721952">Bloquear las descargas peligrosas</translation> <translation id="5248863213023520115">Establece los tipos de encriptación que se permiten cuando se solicitan tickets de Kerberos desde un servidor de <ph name="MS_AD_NAME" />. @@ -1495,6 +1532,12 @@ <translation id="5272684451155669299">Si la política se establece como verdadera, el usuario podrá usar el hardware en los dispositivos de Chrome para verificar su identidad de forma remota ante la CA de privacidad mediante la API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> con la función <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Si se establece como falsa o no se establece, las llamadas a la API fallarán y se mostrará un código de error.</translation> +<translation id="5277806246014825877">Permite que este usuario ejecute Crostini. + + Si se establece la política como falsa, el usuario no podrá utilizar Crostini. + Si se establece como verdadera, o no se establece, el usuario podrá utilizar Crostini, siempre que otras opciones de configuración también lo permitan. + Para que pueda ejecutarse Crostini, deben establecerse las tres políticas (VirtualMachinesAllowed, CrostiniAllowed y DeviceUnaffiliatedCrostiniAllowed) como verdaderas cuando se aplican. + Si se cambia esta política a falsa, se aplicará a contenedores nuevos de Crostini, pero no se apagarán los que ya estén en ejecución.</translation> <translation id="5283457834853986457">Inhabilitar el buscador de complementos (obsoleto)</translation> <translation id="5288772341821359899">Si se establece la política, el intervalo de puertos UDP que usa WebRTC está restringido al intervalo de puertos especificado (extremos incluidos). @@ -1531,6 +1574,7 @@ <translation id="5370279767682621504">Habilitar la compatibilidad con HTTP/0.9 en puertos no predeterminados</translation> <translation id="5378985487213287085">Te permite configurar si los sitios web pueden mostrar notificaciones de escritorio. Esto se puede permitir de manera predeterminada, se puede denegar de manera predeterminada o se le puede preguntar al usuario cada vez que un sitio web quiera mostrar notificaciones de escritorio. Si esta política no se configura, se usará "AskNotifications" y el usuario podrá cambiarlo.</translation> <translation id="538108065117008131">Permitir que <ph name="PRODUCT_FRAME_NAME" /> maneje los siguientes tipos de contenido.</translation> +<translation id="5391388690191341203">Cuenta local del dispositivo con acceso automático</translation> <translation id="5392172595902933844">La información sobre el estado de Android se envía nuevamente al servidor. @@ -1551,6 +1595,7 @@ <translation id="5457924070961220141">Te permite configurar el procesador HTML predeterminado cuando se instala <ph name="PRODUCT_FRAME_NAME" />. La configuración predeterminada que se usa cuando esta política no se configura es permitir que el navegador del host realice la representación, pero puedes anular esta opción y hacer que <ph name="PRODUCT_FRAME_NAME" /> muestre páginas HTML de forma predeterminada.</translation> <translation id="5464816904705580310">Permite establecer parámetros de configuración para los usuarios administrados.</translation> <translation id="546726650689747237">Demora de atenuación de pantalla con alimentación de CA</translation> +<translation id="5469143988693423708">Permitir que el usuario ejecute Crostini</translation> <translation id="5469825884154817306">Bloquear imágenes en estos sitios</translation> <translation id="5475361623548884387">Habilitar la impresión</translation> <translation id="547601067149622666">No permitir anuncios en sitios con anuncios intrusivos</translation> @@ -1601,6 +1646,9 @@ Ten en cuenta que no se recomienda esta acción, ya que puede permitir la omisión de la extensión nameConstraints, que restringe los nombres de host para los que se puede autorizar un certificado determinado. Si esta política no se establece, o se establece como falsa, los certificados de servidores que no tengan la extensión subjectAlternativeName con un nombre de DNS o una dirección IP no serán confiables.</translation> +<translation id="5581292529942108810">Configura las políticas relacionadas con Chrome Reporting Extension. + + Esta política solo es válida si se habilita <ph name="CHROME_REPORTING_EXTENSION_NAME" />, y la máquina está inscrita en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Controla los servicios de ubicación de Google para Android</translation> <translation id="5586942249556966598">No hacer nada</translation> <translation id="5630352020869108293">Restaurar la última sesión</translation> @@ -1837,6 +1885,11 @@ <translation id="6310223829319187614">Habilitar la opción de autocompletar el nombre de dominio durante el accceso del usuario</translation> <translation id="6315673513957120120">Chrome muestra una página de advertencia cuando los usuarios visitan sitios que tienen errores de SSL. De forma predeterminada o cuando esta política se establece en true, los usuarios pueden hacer clic en estas páginas de advertencia. Al establecer esta política en false, los usuarios no pueden hacer clic en ninguna página de advertencia.</translation> +<translation id="6352543686437322588">Se establece una cuenta local del dispositivo con acceso automático después de un retraso. + + Si se establece esta política, se accederá automáticamente a la sesión especificada después de un período determinado en la pantalla de acceso sin necesidad de que el usuario interactúe. La cuenta local del dispositivo ya debe estar configurada (consulta |DeviceLocalAccounts|). + + Si no se establece esta política, no se producirá el acceso automático.</translation> <translation id="6353901068939575220">Especifica los parámetros utilizados al buscar una URL con POST. Se compone de pares de nombre/valor separados por comas. Si un valor es un parámetro de plantilla, como {searchTerms} en el ejemplo anterior, se reemplazará por datos de términos de búsqueda reales. Esta política es opcional. Si no se establece, la solicitud de búsqueda se enviará mediante el método GET. @@ -2191,6 +2244,11 @@ Si no estableces esta política, el usuario podrá cambiar la configuración de forma manual.</translation> <translation id="723103540848640830">Establecer la longitud mínima del PIN de la pantalla bloqueada</translation> +<translation id="7232816984286843471">Si se establece la política como falsa, los usuarios no afiliados no podrán usar Crostini. + + Si se establece como verdadera, o no se establece, todos los usuarios podrán usar Crostini, siempre que otras opciones de configuración también lo permitan. + Para que pueda ejecutarse Crostini, deben establecerse las tres políticas (VirtualMachinesAllowed, CrostiniAllowed y DeviceUnaffiliatedCrostiniAllowed) como verdaderas cuando se aplican. + Si se cambia esta política a falsa, se aplicará a contenedores nuevos de Crostini, pero no se apagarán los que ya estén en ejecución.</translation> <translation id="7234280155140786597">Nombres de los hosts de mensajería nativa prohibidos (o * para todos)</translation> <translation id="7236775576470542603">Establece el tipo de lupa predeterminado habilitado en la pantalla de acceso. @@ -2238,6 +2296,12 @@ <translation id="7311458740754205918">Si esta política se establece como verdadera o no se establece, la página Nueva pestaña mostrará sugerencias de contenido basadas en la ubicación, los intereses o el historial de navegación del usuario. Si se establece como falsa, la página Nueva pestaña no mostrará sugerencias de contenido generadas de forma automática.</translation> +<translation id="7313793931637495417">Esta política controla el envío de los datos de la versión, como la arquitectura, la plataforma y la versión del SO, y la versión de <ph name="PRODUCT_NAME" /> y el canal de <ph name="PRODUCT_NAME" />. + + Si se establece esta política como verdadera, o no se establece, se recopilarán los datos de la versión. + Si se configura como falsa, no se recopilarán estos datos. + + Esta política solo es válida si se habilita <ph name="CHROME_REPORTING_EXTENSION_NAME" />, y la máquina está inscrita en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Parámetros de línea de comandos adicionales para <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Similar a Wipe (valor 2), pero intenta preservar los tokens de acceso para que el usuario no tenga que volver a acceder.</translation> <translation id="7329842439428490522">Especifica el período de tiempo sin intervención del usuario luego del cual se apaga la pantalla si se usa alimentación de la batería. @@ -2268,6 +2332,12 @@ <translation id="7349338075015720646">Especifica una lista de sitios web instalados de manera silenciosa, sin interacción del usuario y que este no puede desinstalar ni inhabilitar. Cada elemento de la lista de la política es un objeto con dos miembros: "url" y "launch_container". "url" debe ser la URL de la aplicación web que se va a instalar y "launch_container" debe ser "window" o "tab" para indicar cómo se abrirá la app una vez que se instale. Si se omite "launch_container", se abrirá en una ventana en caso de que Chrome considere que es una app web progresiva; de lo contrario, usará una pestaña.</translation> +<translation id="735902178936442460">Esta política controla el envío de datos que se pueden usar para identificar las máquinas, como su nombre y las direcciones de red. + + Si se establece esta política como verdadera, o no se establece, se recopilará la información que permite identificar las máquinas. + Si se establece como falsa, no se recopilará esta información. + + Esta política solo es válida si se habilita <ph name="CHROME_REPORTING_EXTENSION_NAME" />, y la máquina está inscrita en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">El servicio de Navegación segura muestra una página de advertencia cuando los usuarios visitan sitios marcados como potencialmente maliciosos. Habilitar esta configuración evita que los usuarios procedan desde la página de advertencia al sitio malicioso. Si se inhabilita esta opción o no se configura, los usuarios podrán elegir continuar hacia el sitio marcado después de que se les haya mostrado la advertencia. @@ -2511,6 +2581,14 @@ <translation id="7976157349247117979">Nombre del destino de <ph name="PRODUCT_NAME" /></translation> <translation id="7980227303582973781">Sin restricciones especiales</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Te permite controlar si pueden ejecutarse las máquinas virtuales en el Sistema operativo Chrome. + + Si la política se establece como verdadera, el dispositivo podrá ejecutar máquinas virtuales. + Si se establece como falsa, el dispositivo no podrá hacerlo. + Para que pueda ejecutarse Crostini, deben establecerse las tres políticas (VirtualMachinesAllowed, CrostiniAllowed y DeviceUnaffiliatedCrostiniAllowed) como verdaderas cuando se aplican. + Si se cambia esta política a falsa, se aplicará a contenedores nuevos de Crostini, pero no se apagarán los que ya estén en ejecución. + Si no se establece esta política en un dispositivo administrado, el dispositivo no podrá ejecutar máquinas virtuales. + Los dispositivos no administrados pueden ejecutar máquinas virtuales.</translation> <translation id="802147957407376460">Rotar la pantalla 0 grados</translation> <translation id="8033913082323846868">Esta política deja de estar disponible en M70. En su lugar, utiliza AutofillAddressEnabled y AutofillCreditCardEnabled. @@ -2555,10 +2633,17 @@ Si no se establece esta política, se utiliza un período de tiempo predeterminado. El valor de la política debe especificarse en milisegundos. Los valores se establecerán para que sean inferiores o iguales a la demora de inactividad.</translation> +<translation id="8138009212169037227">Esta política controla el informe de los datos y la hora de obtención de la política. + + Si esta política se establece como verdadera, o no se establece, se recopilarán los datos y la hora de obtención de la política. + Si se configura como falsa, no se recopilarán estos datos. + + Esta política solo es válida si se habilita <ph name="CHROME_REPORTING_EXTENSION_NAME" />, y la máquina está inscrita en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Informa sobre la lista de interfaces de red con sus tipos y direcciones de hardware al servidor. Si esta política se establece en "False", no se informará sobre la lista de interfaces.</translation> <translation id="8141795997560411818">Esta política no impide que el usuario use la app de Google Drive de Android. Si deseas evitar el acceso a Google Drive, también debes inhabilitar la instalación de su app.</translation> +<translation id="8142894094385450823">Establecer la configuración regional recomendada para una sesión administrada</translation> <translation id="8146727383888924340">Permite a los usuarios canjear ofertas a través del Registro del Sistema operativo Chrome.</translation> <translation id="8148785525797916822">Elimina la advertencia que aparece cuando se ejecuta <ph name="PRODUCT_NAME" /> en una computadora o sistema operativo que ya no son compatibles.</translation> <translation id="8148901634826284024">Habilita la función de accesibilidad del modo de contraste alto. @@ -2616,6 +2701,29 @@ No es necesario ajustar manualmente estas opciones de configuración. Hay plantillas para Windows, Mac y Linux disponibles para descargar en <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />. Se recomienda configurar la política en Windows a través de GPO, aunque, para las instancias de Windows que son parte de un dominio de <ph name="MS_AD_NAME" />, todavía es posible hacer la disposición de políticas a través del registro.</translation> +<translation id="8264653492961233132">Especifica una lista de apps y extensiones que se instalan de forma silenciosa, + sin interacción del usuario, y que este no puede desinstalar + ni inhabilitar. Todos los permisos que solicitan las apps y extensiones + se conceden de forma implícita, sin interacción del usuario, incluso los + permisos adicionales que soliciten las apps o extensiones en próximas + versiones. Además, los permisos se conceden para las API de las + extensiones enterprise.deviceAttributes y enterprise.platformKeys (estas + no están disponibles para las apps o extensiones instaladas de manera + automática). + + Esta política tiene prioridad por sobre una política de <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> posiblemente conflictiva. Si una app o extensión, instalada de manera automática, se quita de esta lista, <ph name="PRODUCT_NAME" /> la desinstala de forma automática. + + Para las instancias de Windows que no están unidas a un dominio de <ph name="MS_AD_NAME" />, solo se pueden instalar de manera automática las apps y extensiones que aparecen en Chrome Web Store. + + Ten en cuenta que es posible que los usuarios modifiquen el código fuente de cualquier extensión a través de las Herramientas para desarrolladores (y muy probablemente deje de funcionar). Si esta situación te inquieta, establece la política <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Cada elemento de la lista de la política es un string que contiene un ID de extensión y una URL de actualización separada por un punto y coma (<ph name="SEMICOLON" />). El ID de extensión es el string de 32 letras que se encuentra, p. ej., en <ph name="CHROME_EXTENSIONS_LINK" /> en el modo de desarrollador. Si se especifica, la URL de actualización debe direccionarte a un documento XML del manifiesto de actualización, como se describe en <ph name="LINK_TO_EXTENSION_DOC1" />. De forma predeterminada, se usa la URL de actualización de Chrome Web Store (actualmente es "https://clients2.google.com/service/update2/crx"). Ten en cuenta que la URL de actualización que se establece en esta política solo se usa para la instalación inicial; las actualizaciones posteriores de la extensión utilizan la URL de actualización que se indica en el manifiesto de la extensión. Ten en cuenta también que el uso de la URL de actualización era explícitamente obligatorio en las versiones de <ph name="PRODUCT_NAME" /> hasta la 67 inclusive. + + Por ejemplo, <ph name="EXTENSION_POLICY_EXAMPLE" /> instala la app de <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> desde la URL de actualización convencional de Chrome Web Store. Para obtener más información sobre las extensiones de host, consulta: <ph name="LINK_TO_EXTENSION_DOC2" />. + + Si no se establece esta política, no se instalan apps ni extensiones de forma automática, y el usuario puede desinstalar cualquier app o extensión en <ph name="PRODUCT_NAME" />. + + Hay que tener en cuenta que esta política no se aplica al modo de navegación incógnito.</translation> <translation id="8274603902181597201">Borra el directorio principal de eCryptfs del usuario y crea un nuevo directorio principal ext4 encriptado.</translation> <translation id="8285435910062771358">La lupa de pantalla completa está habilitada.</translation> <translation id="8288199156259560552">Habilita el servicio de ubicación de Google para Android</translation> @@ -2892,6 +3000,7 @@ Esta política no está disponible en instancias de Windows que no se hayan unido a un dominio de <ph name="MS_AD_NAME" />.</translation> <translation id="9035964157729712237">Identificaciones de extensión para excluir de la lista negra</translation> <translation id="9042911395677044526">Permite aplicar la configuración de red al dispositivo <ph name="PRODUCT_OS_NAME" /> por usuario. La configuración de red es una cadena escrita en formato JSON, como la define el formato Open Network Configuration que se describe en <ph name="ONC_SPEC_URL" />.</translation> +<translation id="9077227880520270584">Temporizador para el acceso automático de la cuenta local del dispositivo</translation> <translation id="9084985621503260744">Especificar si la actividad de video afecta a la administración de energía</translation> <translation id="9088433379343318874">Habilitar el proveedor de contenido de un usuario supervisado</translation> <translation id="9088444059179765143">Configurar el método de detección automática de la zona horaria</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 865c0351..65aaeba 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -141,6 +141,7 @@ <translation id="1387596372902085462">Confiar o no en la infraestructura de clave pública antigua de Symantec Corporation</translation> <translation id="1393485621820363363">Impresoras de dispositivos de empresa habilitadas</translation> <translation id="1397855852561539316">URL de sugerencia del proveedor de búsquedas predeterminadas</translation> +<translation id="142346659686073702">Permitir que los usuarios no afiliados utilicen Crostini</translation> <translation id="1426410128494586442">Sí</translation> <translation id="1427655258943162134">Dirección o URL de servidor proxy</translation> <translation id="1435659902881071157">Configuración de red de dispositivos</translation> @@ -388,6 +389,12 @@ Si no se asigna ningún valor a esta política, se considerará que está habilitada (consulta la descripción anterior).</translation> <translation id="2113068765175018713">Limitar tiempo de actividad de dispositivo mediante reinicio automático</translation> +<translation id="2116790137063002724">Esta política determina si se recoge información que sirva para identificar a los usuarios, como el inicio de sesión en el SO o en el perfil de <ph name="PRODUCT_NAME" />, el nombre del perfil de <ph name="PRODUCT_NAME" />, la ruta del perfil de <ph name="PRODUCT_NAME" /> y la ruta del archivo ejecutable de <ph name="PRODUCT_NAME" />. + + Si se le asigna el valor "True" o no se le asigna ninguno, se recogerá información que sirva para identificar a los usuarios. + Si se le asigna el valor "False", no se recogerá dicha información. + + Esta política solo es efectiva si la extensión <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está habilitada y el equipo está registrado en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Permitir notificaciones en estos sitios</translation> <translation id="2131902621292742709">Retraso de atenuado de pantalla cuando el dispositivo funciona con la batería</translation> <translation id="2132732175597591362">Controla la lista blanca de patrones de URL con los que la reproducción automática siempre estará habilitada. @@ -891,6 +898,22 @@ Si no se le asigna ningún valor a esta política, se usará para todos los sitios web el valor general predeterminado de la política "DefaultCookiesSetting" (si se ha establecido) o el valor personalizado que haya definido el usuario (en caso contrario). Consulta también las políticas "CookiesBlockedForUrls" y "CookiesSessionOnlyForUrls". Ten en cuenta que no puede haber patrones de URL en conflicto entre estas políticas, ya que no se especifica qué política prevalece.</translation> +<translation id="3373364525435227558">Establece una o varias configuraciones regionales recomendadas para sesiones administradas, lo que permite a los usuarios seleccionar fácilmente una de estas configuraciones. + + El usuario puede elegir una configuración regional y un diseño de teclado antes de iniciar una sesión administrada. Todas las configuraciones regionales admitidas por <ph name="PRODUCT_OS_NAME" /> se muestran en orden alfabético de forma predeterminada. Puedes utilizar esta política para mover un conjunto de configuraciones regionales recomendadas al principio de la lista. + + Si no se establece esta política, se seleccionará previamente la configuración regional actual de la UI. + + Si se establece, las configuraciones regionales recomendadas se mostrarán al principio de la lista y separadas visualmente de las demás, en el orden en el que aparezcan en la política. La primera configuración regional recomendada se seleccionará previamente. + + Si hay más de una configuración regional recomendada, se asume que los usuarios querrán elegir una. Cuando inicies una sesión administrada, se te ofrecerá de forma clara la posibilidad de seleccionar una configuración regional y un diseño de teclado. De lo contrario, se asumirá que la mayoría de los usuarios quieren utilizar la configuración regional seleccionada previamente. En tal caso, cuando inicies una sesión administrada, la posibilidad de seleccionar estos parámetros se ofrecerá de una forma menos visible. + + Cuando se establece esta política y se habilita el inicio de sesión automático (consulta las políticas |DeviceLocalAccountAutoLoginId| y |DeviceLocalAccountAutoLoginDelay|), la sesión administrada iniciada automáticamente utilizará la primera configuración regional recomendada y el diseño de teclado más popular que se ajuste a esta configuración regional. + + El diseño de teclado seleccionado previamente siempre será el diseño más popular que se ajuste a la configuración regional seleccionada previamente. + + Esta política solo se puede establecer según los ajustes recomendados. Puedes utilizarla para mover un conjunto de configuraciones regionales recomendadas al principio de la lista, pero los usuarios siempre pueden elegir cualquier configuración regional admitida por <ph name="PRODUCT_OS_NAME" /> para su sesión. + </translation> <translation id="3381968327636295719">Utilizar el navegador del host de forma predeterminada</translation> <translation id="3414260318408232239">Si esta política no se configura, <ph name="PRODUCT_NAME" /> usa una versión mínima predeterminada (TLS 1.0). @@ -1129,6 +1152,11 @@ Si esta política se establece en True o no se establece, los usuarios podrán canjear ofertas a través del servicio de registro de Chrome OS. Si esta política se establece en False, el usuario no podrá canjear ofertas.</translation> +<translation id="4008507541867797979">Si esta política no se establece o el valor correspondiente se establece en "True", <ph name="PRODUCT_OS_NAME" /> mostrará los usuarios existentes en la pantalla de inicio de sesión y permitirá seleccionar uno de ellos. + + Si el valor correspondiente a esta política se establece en "False", <ph name="PRODUCT_OS_NAME" /> no mostrará a los usuarios existentes en la pantalla de inicio de sesión. Se mostrará la pantalla de inicio de sesión normal, en la que solicita la dirección de correo electrónico del usuario y su contraseña o teléfono, o la pantalla intersticial SAML (si se ha activado mediante la política <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />), a menos que se configure una sesión administrada. Si se ha configurado una sesión administrada, solo se mostrarán las cuentas de dicha sesión, lo que permite seleccionar una de ellas. + + Ten en cuenta que esta política no determina si el dispositivo conserva o descarta los datos de usuario locales.</translation> <translation id="4010738624545340900">Permitir solicitud de cuadros de diálogo de selección de archivos</translation> <translation id="4012737788880122133">Si se asigna el valor True a esta política, se inhabilitarán las actualizaciones automáticas. @@ -1549,6 +1577,15 @@ Si no se establece esta política, se usará para todos los sitios el valor general predeterminado que se indique en la política DefaultNotificationsSetting (si se ha establecido) o el valor personalizado que haya definido el usuario (en caso contrario).</translation> <translation id="5219844027738217407">En el caso de las aplicaciones para Android, esta política afecta solo al micrófono. Si se asigna el valor true a esta política, el micrófono se silenciará en todas las aplicaciones para Android, sin excepciones.</translation> +<translation id="5228316810085661003">Permite indicar el tiempo de espera para el inicio de sesión automático en la cuenta local del dispositivo. + + Si no se configura la política |DeviceLocalAccountAutoLoginId|, esta política no tendrá ningún efecto. En caso contrario: + + Si se configura esta política, esta determina el tiempo que debe transcurrir sin que el usuario realice ninguna acción antes de que se inicie automáticamente la cuenta local del dispositivo especificada en la política |DeviceLocalAccountAutoLoginId|. + + Si no se configura esta política, el tiempo de espera será de 0 milisegundos. + + El valor de esta política se debe especificar en milisegundos.</translation> <translation id="523505283826916779">Configuración de accesibilidad</translation> <translation id="5247006254130721952">Bloquear descargas peligrosas</translation> <translation id="5248863213023520115">Define los tipos de cifrado que se admiten al solicitar tickets de Kerberos desde un servidor de <ph name="MS_AD_NAME" />. @@ -1569,6 +1606,12 @@ <translation id="5272684451155669299">Si se asigna el valor true, los usuarios podrán usar el hardware en dispositivos Chrome para confirmar su identidad de forma remota ante la entidad emisora de certificados de privacidad a través de la API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> mediante <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Si se le asigna el valor false o no se configura, aparecerá un código de error en las llamadas a la API.</translation> +<translation id="5277806246014825877">Permitir que este usuario ejecute Crostini. + + Si se asigna el valor "False" a esta política, el usuario no podrá ejecutar Crostini. + Si se le asigna el valor "True" o no se le asigna ninguno, el usuario podrá ejecutar Crostini si los demás ajustes también lo permiten. + Estas tres políticas (VirtualMachinesAllowed, CrostiniAllowed y DeviceUnaffiliatedCrostiniAllowed) deben tener asignado el valor "True" cuando soliciten permiso para ejecutar Crostini. + Si se cambia el valor de esta política a "False", esta acción afectará a los nuevos contenedores de Crostini, pero no se cerrarán los contenedores que ya se estén ejecutando.</translation> <translation id="5283457834853986457">Inhabilitar el buscador de complementos (obsoleta)</translation> <translation id="5288772341821359899">Si esta política se configura, el intervalo de puertos UDP utilizado por WebRTC estará restringido al intervalo de puertos especificado (incluidos los extremos). @@ -1607,6 +1650,7 @@ Si no se establece esta política, se usará la política AskNotifications y el usuario podrá modificarla.</translation> <translation id="538108065117008131">Permitir que <ph name="PRODUCT_FRAME_NAME" /> gestione los tipos de contenido que se indican a continuación.</translation> +<translation id="5391388690191341203">Cuenta local del dispositivo para el inicio de sesión automático</translation> <translation id="5392172595902933844">La información sobre el estado de Android se envía al servidor. Si se asigna el valor false a la política o no se le asigna ningún valor, no se proporciona información sobre el estado. @@ -1635,6 +1679,7 @@ Si no se establece esta política, se permitirá que el navegador del host muestre las páginas HTML de forma predeterminada, pero puedes anular esta opción para que <ph name="PRODUCT_FRAME_NAME" /> muestre las páginas HTML de forma predeterminada.</translation> <translation id="5464816904705580310">Permite establecer opciones de configuración de usuarios administrados.</translation> <translation id="546726650689747237">Retraso de atenuación de pantalla cuando el dispositivo está conectado a la red</translation> +<translation id="5469143988693423708">El usuario tiene permiso para ejecutar Crostini</translation> <translation id="5469825884154817306">Bloquear imágenes de estos sitios</translation> <translation id="5475361623548884387">Habilitar impresión</translation> <translation id="547601067149622666">No permitir anuncios en sitios web con anuncios invasivos</translation> @@ -1686,6 +1731,9 @@ Recuerda que no se recomienda esta opción, ya que puede permitir que se omita la extensión nameConstraints que restringe los nombres de host para los que puede estar autorizado un certificado concreto. Si esta política no se configura o se le asigna el valor valse, los certificados de servidor que no tengan ninguna extensión subjectAlternativeName que incluya un nombre de DNS o una dirección IP no serán de confianza.</translation> +<translation id="5581292529942108810">Configurar las políticas asociadas a Chrome Reporting Extension. + + Esta política solo es efectiva si la extensión <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está habilitada y el equipo está registrado en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Controlar los servicios de ubicación de Google de Android</translation> <translation id="5586942249556966598">No hacer nada</translation> <translation id="5630352020869108293">Restaurar la última sesión</translation> @@ -1933,6 +1981,11 @@ <translation id="6310223829319187614">Habilitar la opción de autocompletar nombre de dominio durante el inicio de sesión del usuario</translation> <translation id="6315673513957120120">Chrome muestra una página de advertencia cuando los usuarios intentan acceder a sitios web con errores SSL. De forma predeterminada o cuando se establezca el valor true en esta política, los usuarios podrán hacer clic para ignorar estas páginas de advertencia. Si se asigna el valor false, los usuarios no tendrán permiso para ignorar ninguna página de advertencia.</translation> +<translation id="6352543686437322588">Permite indicar una cuenta local del dispositivo para el inicio de sesión automático después de un tiempo de espera. + + Si se configura esta política, la sesión especificada se iniciará automáticamente una vez que haya transcurrido un tiempo sin que el usuario haya realizado ninguna acción en la pantalla de inicio de sesión. La cuenta local del dispositivo deberá haberse configurado previamente (consulta |DeviceLocalAccounts|). + + Si no se configura esta política, no se realiza el inicio de sesión automático.</translation> <translation id="6353901068939575220">Especifica los parámetros utilizados al buscar una URL con POST. Se compone de pares de valor/nombre separados por comas. Si un valor es un parámetro de plantilla, como {searchTerms} en el ejemplo anterior, se sustituirá por datos de términos de búsqueda reales. Esta política es opcional. Si no se establece, la solicitud de búsqueda se enviará mediante el método GET. @@ -2299,6 +2352,11 @@ Si no se asigna ningún valor a esta política, el usuario puede cambiar esta configuración manualmente.</translation> <translation id="723103540848640830">Configurar la longitud mínima del PIN para la pantalla de bloqueo</translation> +<translation id="7232816984286843471">Si se asigna el valor "False" a esta política, los usuarios no afiliados no podrán utilizar Crostini. + + Si se le asigna el valor "True" o no se le asigna ninguno, todos los usuarios podrán utilizar Crostini si los demás ajustes también lo permiten. + Estas tres políticas (VirtualMachinesAllowed, CrostiniAllowed y DeviceUnaffiliatedCrostiniAllowed) deben tener asignado el valor "True" cuando soliciten permiso para ejecutar Crostini. + Si se cambia el valor de esta política a "False", esta acción afectará a los nuevos contenedores de Crostini, pero no se cerrarán los contenedores que ya se estén ejecutando.</translation> <translation id="7234280155140786597">Nombres de hosts de mensajes nativos no permitidos (o * para todos)</translation> <translation id="7236775576470542603">Establece el tipo predeterminado de lupa que se ha habilitado en la pantalla de inicio de sesión. @@ -2346,6 +2404,12 @@ <translation id="7311458740754205918">Si se asigna True o no se establece ningún valor, la página Nueva pestaña puede mostrar sugerencias de contenido basadas en la ubicación, los intereses o el historial de navegación del usuario. Si se asigna el valor False, no se mostrarán las sugerencias de contenido generadas automáticamente en la página Nueva pestaña.</translation> +<translation id="7313793931637495417">Esta política determina si se recoge información de versiones, como la versión, plataforma o arquitectura del SO, la versión de <ph name="PRODUCT_NAME" /> y el canal de <ph name="PRODUCT_NAME" />. + + Si se le asigna el valor "True" o no se le asigna ninguno, se recogerá información de versiones. + Si se le asigna el valor "False", no se recogerá dicha información. + + Esta política solo es efectiva si la extensión <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está habilitada y el equipo está registrado en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Parámetros de línea de comandos adicionales para <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Similar a Wipe (valor 2), pero intenta conservar los tokens de inicio de sesión para que el usuario no tenga que volver a iniciar sesión.</translation> <translation id="7329842439428490522">Permite especificar el tiempo transcurrido hasta la desconexión de la pantalla (sin que el usuario realice ninguna acción) cuando el dispositivo funciona con la batería. @@ -2378,6 +2442,12 @@ <translation id="7349338075015720646">Define una lista de sitios web que se instalan de forma silenciosa, sin intervención del usuario, y que el usuario no puede desinstalar ni inhabilitar. Cada elemento de la lista es un objeto formado por dos componentes: "url" y "launch_container". El valor de "url" es la URL de la aplicación web que se va a instalar, mientras que el valor de "launch_container" puede ser "window" o "tab", y sirve para definir cómo se abrirá la aplicación web una vez instalada. Si se omite "launch_container", la aplicación se abrirá en una ventana si Chrome considera que es una aplicación web progresiva; en caso contrario, la aplicación se abrirá en una pestaña.</translation> +<translation id="735902178936442460">Esta política determina si se recoge información que sirva para identificar equipos, como sus nombres o direcciones de red. + + Si se le asigna el valor "True" o no se le asigna ninguno, se recogerá información que sirva para identificar equipos. + Si se le asigna el valor "False", no se recogerá dicha información. + + Esta política solo es efectiva si la extensión <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está habilitada y el equipo está registrado en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">El servicio Navegación Segura muestra una página de advertencia cuando los usuarios acceden a sitios web marcados como potencialmente peligrosos. Si se habilita esta opción, los usuarios no pueden acceder al sitio web malicioso desde la página de advertencia. Si se inhabilita esta opción o no se configura, los usuarios pueden elegir si quieren acceder al sitio web marcado después de ver la advertencia. @@ -2636,6 +2706,14 @@ <translation id="7976157349247117979">Nombre del destino de <ph name="PRODUCT_NAME" /></translation> <translation id="7980227303582973781">Sin restricciones especiales</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Permite determinar si las máquinas virtuales tienen permiso para ejecutar Chrome OS o no lo tienen. + + Si se asigna el valor "True" a esta política, el dispositivo tendrá permiso para ejecutar máquinas virtuales. + Si se le asigna el valor "False", el dispositivo no tendrá permiso para hacerlo. + Estas tres políticas (VirtualMachinesAllowed, CrostiniAllowed y DeviceUnaffiliatedCrostiniAllowed) deben tener asignado el valor "True" cuando soliciten que se permita ejecutar Crostini. + Si se cambia el valor de esta política a "False", esta acción afectará a la creación de nuevas máquinas virtuales, pero no se cerrarán las máquinas virtuales que ya se estén ejecutando. + Si no se asigna ningún valor a esta política en un dispositivo administrado, este no tendrá permiso para ejecutar máquinas virtuales. + Los dispositivos no administrados tienen permiso para ejecutar máquinas virtuales.</translation> <translation id="802147957407376460">Girar la pantalla 0 grados</translation> <translation id="8033913082323846868">Esta política está obsoleta en M70. Utiliza en su lugar AutofillAddressEnabled y AutofillCreditCardEnabled. @@ -2680,10 +2758,17 @@ Cuando no se establece esta política, se utilizará un valor de tiempo predeterminado. El valor de la política se debe especificar en milisegundos. Los valores están establecidos para ser inferiores o iguales al retraso de inactividad.</translation> +<translation id="8138009212169037227">Esta política determina si se recogen datos de políticas y la hora de su obtención. + + Si se le asigna el valor "True" o no se le asigna ninguno, se recogen datos de políticas y la hora de su obtención. + Si se le asigna el valor "False", no se recogen datos de políticas ni la hora de su obtención. + + Esta política solo es efectiva cuando la extensión <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está habilitada y el equipo está registrado en <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Permite informar al servidor sobre la lista de interfaces de red y direcciones de hardware. Si la política está establecida en False, no se informará sobre la lista de interfaces.</translation> <translation id="8141795997560411818">Esta política no impide que el usuario utilice la aplicación Google Drive para Android. Si quieres evitar el acceso a esta aplicación, también tendrás que inhabilitar la descarga de Google Drive para Android.</translation> +<translation id="8142894094385450823">Establecer las configuraciones regionales recomendadas para una sesión administrada</translation> <translation id="8146727383888924340">Permitir a los usuarios canjear ofertas a través del servicio de registro de Chrome OS</translation> <translation id="8148785525797916822">Suprime la advertencia que aparece cuando <ph name="PRODUCT_NAME" /> se ejecuta en un ordenador o en un sistema operativo que ya no se admite.</translation> <translation id="8148901634826284024">Habilita la función de accesibilidad del modo de contraste alto. @@ -2731,6 +2816,21 @@ No es necesario configurar estas opciones manualmente. En la página <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />, puedes encontrar plantillas fáciles de utilizar para Windows, Mac y Linux. Te recomendamos que utilices GPO para configurar la política en Windows, aunque aún se admite la asignación de la política a través del registro para instancias de Windows vinculadas a un dominio de <ph name="MS_AD_NAME" />.</translation> +<translation id="8264653492961233132">Especifica una lista de aplicaciones y extensiones que se instalan de forma automática, sin la intervención del usuario y que el usuario no puede inhabilitar ni desinstalar. Los permisos solicitados por las aplicaciones o las extensiones se aceptan de forma implícita, sin la interacción del usuario, incluidos los permisos que soliciten las próximas versiones de la aplicación o extensión. Además, se aceptan los permisos para las API de las extensiones enterprise.deviceAttributes y enterprise.platformKeys. Estas dos API no están disponibles para las aplicaciones o extensiones que no se hayan instalado de manera forzada. + + Esta política prevalece frente a una política <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> que pueda ser conflictiva. Si una aplicación o extensión que se haya instalado anteriormente de manera forzada se elimina de la lista, <ph name="PRODUCT_NAME" /> la desinstalará automáticamente. + + Para las instancias de Windows que no se hayan unido a un dominio de <ph name="MS_AD_NAME" />, la instalación forzada se limitará a las aplicaciones y extensiones disponibles en Chrome Web Store. + + Ten en cuenta que es posible que los usuarios modifiquen el código fuente de las extensiones mediante las herramientas para desarrolladores (lo que puede provocar problemas de funcionamiento). Si te preocupa, configura la política <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Cada elemento de la lista de la política es una cadena que contiene un ID de extensión y, opcionalmente, una URL de "actualización" separados por punto y coma (<ph name="SEMICOLON" />). El ID de extensión es la cadena de 32 letras que aparece, por ejemplo, en <ph name="CHROME_EXTENSIONS_LINK" /> cuando está habilitado el modo desarrollador. La URL de "actualización", si se especifica, debe dirigir a un documento XML de un archivo de manifiesto de actualización, como se describe en <ph name="LINK_TO_EXTENSION_DOC1" />. De forma predeterminada, se utiliza la URL de actualización de Chrome Web Store, que actualmente es "https://clients2.google.com/service/update2/crx". Ten en cuenta que la URL de "actualización" definida en esta política solo se usa en la instalación inicial. Las actualizaciones posteriores de la extensión usarán la URL de actualización indicada en el archivo de manifiesto de la extensión. Ten en cuenta también que especificar la URL de "actualización" era obligatorio en las versiones de <ph name="PRODUCT_NAME" /> hasta la 67. + + Por ejemplo, <ph name="EXTENSION_POLICY_EXAMPLE" /> instala la aplicación <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> desde la URL de "actualización" estándar de Chrome Web Store. Para obtener más información sobre cómo alojar extensiones, consulta <ph name="LINK_TO_EXTENSION_DOC2" />. + + Si no se configura esta política, no se instalará ninguna aplicación ni extensión automáticamente y el usuario podrá desinstalar cualquier aplicación o extensión de <ph name="PRODUCT_NAME" />. + + Ten en cuenta que esta política no se aplica al modo de incógnito.</translation> <translation id="8274603902181597201">Borrar los eCryptfs del directorio principal del usuario y empezar con un nuevo directorio principal cifrado con ext4.</translation> <translation id="8285435910062771358">Lupa de pantalla completa habilitada</translation> <translation id="8288199156259560552">Habilitar los servicios de ubicación de Google para aplicaciones Android</translation> @@ -3018,6 +3118,7 @@ Esta política no está disponible en las instancias de Windows que no están vinculadas a un dominio de <ph name="MS_AD_NAME" />.</translation> <translation id="9035964157729712237">ID de extensiones que no deben estar incluidas en la lista negra</translation> <translation id="9042911395677044526">Permite aplicar la configuración de red al dispositivo <ph name="PRODUCT_OS_NAME" /> de cada usuario. La configuración de red es una cadena escrita en formato JSON, tal como se define en la siguiente página sobre el formato Open Network Configuration: <ph name="ONC_SPEC_URL" /></translation> +<translation id="9077227880520270584">Temporizador de inicio automático de la cuenta local del dispositivo</translation> <translation id="9084985621503260744">Especificar si la actividad de vídeo afecta a la administración de energía</translation> <translation id="9088433379343318874">Habilitar el proveedor de contenido de usuarios supervisados</translation> <translation id="9088444059179765143">Configura el método de detección automática de la zona horaria</translation>
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb index 40b46495..58e9947 100644 --- a/components/policy/resources/policy_templates_gu.xtb +++ b/components/policy/resources/policy_templates_gu.xtb
@@ -159,6 +159,7 @@ <translation id="1387596372902085462">Symantec Corporationના લેગસી PKI ઇન્ફ્રાસ્ટ્રક્ચરમાં વિશ્વાસ મુકવો કે નહીં</translation> <translation id="1393485621820363363">ચાલુ કરેલ એન્ટરપ્રાઇઝ ઉપકરણ પ્રિન્ટર</translation> <translation id="1397855852561539316">ડિફૉલ્ટ શોધ પ્રદાતાURL સૂચવે છે</translation> +<translation id="142346659686073702">સંકળાયેલ ન હોય તેવા વપરાશકર્તાઓને Crostiniનો ઉપયોગ કરવાની મંજૂરી આપો</translation> <translation id="1426410128494586442">હા</translation> <translation id="1427655258943162134">પ્રોક્સી સર્વરનું સરનામું અથવા URL</translation> <translation id="1432194160771348078"> @@ -443,6 +444,11 @@ જો આ નીતિને સેટ કર્યા વિના છોડવામાં આવે, તો તે ચાલુ હોવા બરાબર છે, ઉપરનું વર્ણન જુઓ.</translation> <translation id="2113068765175018713">આપમેળે રીબૂટ કરીને ડિવાઇસ કાર્યકાલને મર્યાદિત કરો</translation> +<translation id="2116790137063002724">આ નીતિ OS લૉગ ઇન, <ph name="PRODUCT_NAME" /> પ્રોફાઇલ લૉગ ઇન, <ph name="PRODUCT_NAME" /> પ્રોફાઇલ નામ, <ph name="PRODUCT_NAME" /> પ્રોફાઇલ પથ અને <ph name="PRODUCT_NAME" /> અમલયોગ્ય પથ જેવી વપરાશકર્તાની ઓળખ આપી શકે તેવી માહિતીની જાણ કરવી કે નહીં તેનું નિયંત્રણ કરે છે. + + જ્યારે આ નીતિને સેટ કરવાની બાકી રાખી હોય અથવા True પર સેટ કરેલી હોય, ત્યારે વપરાશકર્તાની ઓળખ આપી શકે તેવી માહિતી એકત્ર કરવામાં આવશે. + જ્યારે આ નીતિ False પર સેટ હોય, ત્યારે વપરાશકર્તાની ઓળખ આપી શકે તેવી માહિતી એકત્ર કરવામાં આવતી નથી. + જ્યારે <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ચાલુ કરેલ હોય, અને મશીનની <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> સાથે નોંધણી થયેલી હોય, માત્ર ત્યારે જ આ નીતિ લાગુ થાય છે.</translation> <translation id="2127599828444728326">આ સાઇટ્સ પર સૂચનાઓને મંજૂરી આપો</translation> <translation id="2131902621292742709">જ્યારે બેટરી પાવર પર ચાલી રહ્યું હોય ત્યારે સ્ક્રીન મંદ વિલંબ</translation> <translation id="2132732175597591362">URL પૅટર્નની એ વ્હાઇટલિસ્ટનું નિયંત્રણ કરે છે, જેના માટે ઑટોપ્લે હંમેશા ચાલુ હશે. @@ -983,6 +989,19 @@ જો આ નીતિ સેટ કરેલી નહીં હોય, તો બધી સાઇટો માટે, 'DefaultCookiesSetting' નીતિ સેટ કરેલી હશે તો તેમાંથી અથવા અન્યથા વપરાશકર્તાના વ્યક્તિગત કન્ફિગરેશનમાંથી વૈશ્વિક ડિફૉલ્ટ મૂલ્યનો ઉપયોગ કરવામાં આવશે. 'CookiesBlockedForUrls' અને 'CookiesSessionOnlyForUrls' નીતિઓ પણ જુઓ. નોંધ કરો કે આ ત્રણ નીતિ વચ્ચે કોઈ વિસંવાદી URL પૅટર્ન ન હોવી જોઈએ - કઈ નીતિ વર્ચસ્વ ધરાવશે તેનો ઉલ્લેખ કરવામાં આવ્યો નથી.</translation> +<translation id="3373364525435227558">મેનેજ કરવામાં આવેલ સત્ર માટે એક કે વધુ સુઝાવ આપેલ લોકેલ સેટ કરે છે, જેથી વપરાશકર્તા આમાંના કોઈપણ એક લોકેલને સરળતાથી પસંદ કરી શકે છે. + + વપરાશકર્તા મેનેજ કરવામાં આવેલ સત્ર શરૂ કરતાં પહેલાં લોકેલ અને કીબોર્ડ લેઆઉટ પસંદ કરી શકે છે. ડિફૉલ્ટ તરીકે, <ph name="PRODUCT_OS_NAME" /> દ્વારા સમર્થિત બધા જ લોકેલ મૂળાક્ષરોના ક્રમ પ્રમાણે સૂચિબદ્ધ થયેલા હોય છે. તમે આ નીતિનો ઉપયોગ સુઝાવ આપેલ લોકેલના સેટને સૂચિની ટોચ પર ખસેડવા માટે કરી શકો છો. + જો આ નીતિ સેટ ન કરી હોય, તો વર્તમાન UI લોકેલને પહેલેથી પસંદ કરેલ હશે. + + જો આ નીતિ સેટ કરેલી હોય, તો સુઝાવ આપેલ લોકેલને સૂચિની ટોચ પર ખસેડવામાં આવશે અને તેઓને અન્ય તમામ લોકેલથી દૃશ્યક્ષમ રીતે અલગ પાડવામાં આવશે. સુઝાવ આપેલ લોકેલને નીતિમાં તેઓ જેમાં દેખાતાં હોય તે ક્રમમાં સૂચિબદ્ધ કરવામાં આવશે. સુઝાવ આપેલ પ્રથમ લોકેલ પહેલેથી પસંદ કરાયેલ હશે. + + જો એક કરતાં વધુ સુઝાવ આપેલ લોકેલ હોય, તો એવું ધારી લેવામાં આવે છે કે વપરાશકર્તાઓ આ લોકેલમાંથી પસંદ કરવા માગે છે. મેનેજ કરવામાં આવેલ સત્ર શરૂ કરતી વખતે લોકેલ અને કીબોર્ડ લેઆઉટ પસંદગીને મુખ્ય રૂપે ઑફર કરવામાં આવશે. અન્યથા, એવું ધારી લેવામાં આવે છે કે મોટાભાગનાં વપરાશકર્તાઓ પહેલેથી પસંદ કરાયેલ લોકેલનો ઉપયોગ કરવા માગે છે. મેનેજ કરવામાં આવેલ સત્ર શરૂ કરતી વખતે લોકેલ અને કીબોર્ડ લેઆઉટ પસંદગીને ઓછું મહત્વ આપીને ઑફર કરવામાં આવશે. + + જ્યારે આ નીતિ સેટ કરેલી હોય અને સ્વતઃ લૉગ ઇન ચાલુ કરેલું હોય (|DeviceLocalAccountAutoLoginId| અને |DeviceLocalAccountAutoLoginDelay| નીતિઓ જુઓ), ત્યારે ઑટોમેટિક રીતે શરૂ થયેલું સાર્વજનિક સત્ર સુઝાવ આપેલ પ્રથમ લોકેલ અને આ લોકેલ સાથે મેળ ખાતા સૌથી વધુ લોકપ્રિય કીબોર્ડ લેઆઉટનો ઉપયોગ કરશે. + પહેલેથી પસંદ કરાયેલ કીબોર્ડ લેઆઉટ એ હંમેશાં પહેલેથી પસંદ કરાયેલ લોકેલ સાથે મેળ ખાતો સૌથી વધુ લોકપ્રિય લેઆઉટ હશે. + આ નીતિ સુઝાવ આપેલ મુજબ જ સેટ કરી શકાય છે. તમે આ નીતિનો ઉપયોગ સુઝાવ આપેલ લોકેલના સેટને ટોચ પર ખસેડવા માટે કરી શકો છો પરંતુ વપરાશકર્તાઓને તેમના સત્ર માટે <ph name="PRODUCT_OS_NAME" /> દ્વારા સમર્થિત કોઈપણ લોકેલને પસંદ કરવાની મંજૂરી હંમેશાં હોય છે. + </translation> <translation id="3381968327636295719">ડિફૉલ્ટ રૂપે હોસ્ટ બ્રાઉઝરનો ઉપયોગ કરો</translation> <translation id="3414260318408232239">જ્યારે આ નીતિ ગોઠવવામાં આવી ન હોય, ત્યારે <ph name="PRODUCT_NAME" /> ડિફૉલ્ટ રીતે નીચામાં નીચું વર્ઝન, જે TLS 1.0 છે, તેનો ઉપયોગ કરે છે. @@ -1243,6 +1262,11 @@ જો આ નીતિ ટ્રુ પર સેટ કરી છે અથવા સેટ કર્યા વિના છોડી દીધી છે, તો વપરાશકર્તાઓ Chrome OS નોંધણી દ્વારા ઓફર્સને રીડિમ કરી શકશે. જો આ નીતિ ફોલ્સ પર સેટ કરી છે, તો વપરાશકર્તા ઓફર્સને રીડિમ કરી શકશે નહીં.</translation> +<translation id="4008507541867797979">જો આ નીતિ true પર સેટ કરેલી છે અથવા ગોઠવેલી નથી, તો <ph name="PRODUCT_OS_NAME" /> લૉગ ઇન સ્ક્રીન પર અસ્તિત્વમાં છે તે વપરાશકર્તાઓ બતાવશે અને કોઈ એક પસંદ કરવાની મંજૂરી આપશે. + + જો આ નીતિ false પર સેટ કરેલી છે, તો <ph name="PRODUCT_OS_NAME" /> લૉગ ઇન સ્ક્રીન પર અસ્તિત્વમાં છે તે વપરાશકર્તાઓ બતાવશે નહીં. સામાન્ય સાઇન-ઇન સ્ક્રીન (વપરાશકર્તાના ઇમેઇલ ઍડ્રેસ અને પાસવર્ડ અથવા ફોન માટે સંકેત આપતી) અથવા SAML interstital સ્ક્રીન (જો <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> નીતિ દ્વારા ચાલુ કરેલ હોય) બતાવવામાં આવશે, સિવાય કે મેનેજ કરવામાં આવેલ સત્ર ગોઠવેલ ન હોય. જ્યારે મેનેજ કરવામાં આવેલ સત્ર ગોઠવેલ હોય, ત્યારે માત્ર મેનેજ કરવામાં આવેલ સત્ર એકાઉન્ટ જ બતાવવામાં આવશે, જે તેમાંથી એક પસંદ કરવાની મંજૂરી આપે છે. + + નોંધો કે આ નીતિ ડિવાઇસ સ્થાનિક વપરાશકર્તા ડેટા રાખે કે કાઢી નાખે તેને પ્રભાવિત કરતી નથી.</translation> <translation id="4010738624545340900">ફાઇલ પસંદગી સંવાદોની વિનંતીને મંજૂરી આપો</translation> <translation id="4012737788880122133">જ્યારે True પર સેટ હોય ત્યારે સ્વયંચાલિત અપડેટ અક્ષમ કરે છે. @@ -1729,6 +1753,12 @@ જો આ નીતિ સેટ કર્યા વિના છોડી હોય તો 'DefaultNotificationsSetting' નીતિએ જો સેટ કરી હોય તો તે, અથવા વપરાશકર્તાની વ્યક્તિગત ગોઠવણીમાંથી વૈશ્વિક ડિફૉલ્ટ મૂલ્યનો ઉપયોગ તમામ સાઇટ્સ માટે કરવામાં આવશે.</translation> <translation id="5219844027738217407">Android ઍપ્લિકેશનો માટે, આ નીતિ ફક્ત માઇક્રોફોનને પ્રભાવિત કરે છે. જ્યારે આ નીતિ true પર સેટ કરેલ હોય, ત્યારે વિના કોઈ અપવાદે તમામ Android ઍપ્લિકેશનો માટે માઇક્રોફોન મ્યૂટ કરવામાં આવે છે.</translation> +<translation id="5228316810085661003">ડિવાઇસ-લોકેલ એકાઉન્ટના ઑટો-લૉગ ઇનમાં વિલંબ. + જો |DeviceLocalAccountAutoLoginId| નીતિ સેટ કરેલી નથી, તો આ નીતિ પર કોઈ અસર થતી નથી. અન્યથા: + + જો નીતિ સેટ કરેલી હોય, તો વપરાશકર્તા પ્રવૃત્તિ વિનાનો એવો સમયગાળો નિર્ધારિત કરે છે જે |DeviceLocalAccountAutoLoginId| નીતિ દ્વારા નિર્દિષ્ટ કરેલ હોય તે પ્રમાણે ઑટો-લૉગ ઇન કરતા પહેલાં પસાર થવો જોઈએ. + જો આ નીતિ સેટ કરેલી નથી, તો સમય સમાપ્તિ તરીકે 0 મિલિસેકન્ડનો ઉપયોગ કરવામાં આવશે. + આ નીતિ મિલિસેકન્ડમાં નિર્દિષ્ટ કરવામાં આવે છે.</translation> <translation id="523505283826916779">ઍક્સેસિબિલિટી સેટિંગ્સ</translation> <translation id="5236882091572996759">જો નીતિ True પર સેટ હોય અથવા અનસેટ હોય, તો ઑડિઓ ચલાવતી વખતે વપરાશકર્તાને નિષ્ક્રિય ગણવામાં આવતો નથી. આ નિષ્ક્રિય સમયસમાપ્તિ પર પહોંચવાથી અને નિષ્ક્રિય ક્રિયા લેવાથી અટકાવે છે. તેમ છતાં, ઑડિઓ પ્રવૃત્તિને ધ્યાનમાં ન લેતા, ગોઠવેલ સમય સમાપ્ત થાય પછી સ્ક્રીન મંદ, સ્ક્રીન બંધ અને સ્ક્રીન લૉક કરે છે. @@ -1762,6 +1792,12 @@ <translation id="5272684451155669299">જો true હોય, તો વપરાશકર્તા, ગોપનીયતા CA પર <ph name="CHALLENGE_USER_KEY_FUNCTION" /> નો ઉપયોગ કરીને <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> મારફતે તેની ઓળખને રિમોટ પ્રમાણિત કરવા Chrome ઉપકરણો પર હાર્ડવેરનો ઉપયોગ કરી શકે છે. જો તે false પર સેટ કરેલ હોય અથવા તો તે સેટ કરેલ ન હોય, તો API પરના કૉલ્સ એક ભૂલ કોડ સાથે નિષ્ફળ થશે.</translation> +<translation id="5277806246014825877">આ વપરાશકર્તાને Crostini ચલાવવાની સુવિધા આપો. + + જો આ નીતિ False પર સેટ હોય, તો વપરાશકર્તા માટે Crostini ચાલુ કરવામાં આવતું નથી. + જો આ નીતિને True પર સેટ કરી હોય અથવા સેટ કરવાની બાકી રાખી હોય, તો અન્ય સેટિંગ મંજૂરી આપતી હોય તો વપરાશકર્તા માટે Crostini ચાલુ કરવામાં આવે છે. + તેઓ જ્યારે Crostiniને ચલાવવાની મંજૂરી માટેની અરજી કરે, ત્યારે VirtualMachinesAllowed, CrostiniAllowed, અને DeviceUnaffiliatedCrostiniAllowed એ ત્રણેય નીતિઓને True પર સેટ કરેલી હોવી જરૂરી છે. + જ્યારે આ નીતિને બદલીને False પર સેટ કરવામાં આવે છે, ત્યારે તે Crostiniના શરૂ થતાં નવા કન્ટેનર પર લાગુ થાય છે, પરંતુ પહેલેથી જ ચાલતા હોય એવા કન્ટેનરને શટ ડાઉન કરતી નથી.</translation> <translation id="5283457834853986457">પ્લગ-ઇન શોધક બંધ કરો (ટાળેલ)</translation> <translation id="5288772341821359899">જો નીતિ સેટ કરેલ હોય, તો WebRTC દ્વારા ઉપયોગમાં લેવાતી UDP પોર્ટ શ્રેણીને ઉલ્લેખિત પોર્ટ અંતરાલ (એન્ડપૉઇન્ટ્સ સહિત) પર સીમિત કરવામાં આવે છે. @@ -1800,6 +1836,7 @@ જો આ નીતિ સેટ કર્યા વિના છોડેલી હોય, તો 'AskNotifications' નો ઉપયોગ થશે અને વપરાશકર્તા તેને બદલવા માટે સક્ષમ હશે.</translation> <translation id="538108065117008131"><ph name="PRODUCT_FRAME_NAME" /> ને નીચે આપેલા કન્ટેન્ટ પ્રકારોને વ્યવસ્થિત કરવાની મંજૂરી આપો.</translation> +<translation id="5391388690191341203">ઑટો-લૉગ ઇન માટે ડિવાઇસ-લોકેલ એકાઉન્ટ</translation> <translation id="5392172595902933844">Android ની સ્થિતિ વિશેની માહિતીને સર્વર પર પાછી મોકલવામાં આવે છે. જો નીતિ false પર સેટ કરેલ હોય અથવા સેટ કર્યા વિના છોડી દેવામાં આવી હોય, તો કોઈ સ્થિતિ માહિતીની જાણ કરવામાં નહીં આવે. @@ -1841,6 +1878,7 @@ જ્યારે આ નીતિ સેટ કર્યા વિના છોડેલી હોય ત્યારે હોસ્ટ બ્રાઉઝરને રેંડરિંગ કરવાની મંજૂરી આપવા ડિફૉલ્ટ સેટિંગનો ઉપયોગ થાય છે, પણ તમે આને વૈકલ્પિક રીતે ઓવરરાઇડ કરી શકો છો અને ડિફૉલ્ટ તરીકે <ph name="PRODUCT_FRAME_NAME" /> ને HTML પૃષ્ઠો રેંડર કરી શકો છો.</translation> <translation id="5464816904705580310">સંચાલિત વપરાશકર્તાઓ માટે સેટિંગ્સ ગોઠવો.</translation> <translation id="546726650689747237">જ્યારે AC પાવર પર ચાલી રહ્યું હોય ત્યારે સ્ક્રીન મંદ વિલંબ</translation> +<translation id="5469143988693423708">વપરાશકર્તાને Crostini ચલાવવાની સુવિધા આપી છે</translation> <translation id="5469825884154817306">આ સાઇટ્સ પર છબીઓને અવરોધિત કરો</translation> <translation id="5475361623548884387">છાપવાનું સક્ષમ કરો</translation> <translation id="547601067149622666">ખલેલ પાડતી જાહેરાતોવાળી સાઇટ પર જાહેરાતોને મંજૂરી આપશો નહીં</translation> @@ -1912,6 +1950,9 @@ નોંધો કે આ ભલામણ કરેલ નથી, કેમકે આ nameConstraints એક્સ્ટેન્શનને ટાળવાની મંજૂરી આપી શકે છે કે જે તે હોસ્ટના નામને પ્રતિબંધિત કરે છે કે જેના માટે આપેલ પ્રમાણપત્ર અધિકૃત કરવામાં આવેલ હોઈ શકે છે. જો આ નીતિ સેટ કરેલ ન હોય અથવા તો ફોલ્સ પર સેટ કરેલ હોય, તો તે સર્વર પ્રમાણપત્ર પર વિશ્વાસ કરવામાં આવશે નહીં કે જેમાં કાં તો DNS નામ અથવા IP સરનામું ધરાવતું subjectAlternativeName એક્સ્ટેન્શન ખૂટે છે.</translation> +<translation id="5581292529942108810">Chrome રિપોર્ટિંગ એક્સ્ટેંશન સંબંધિત નીતિઓ ગોઠવો. + + આ નીતિ માત્ર <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ચાલુ હોય, અને મશીનની <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> સાથે નોંધણી કરવામાં આવી હોય ત્યારે જ લાગુ થાય છે.</translation> <translation id="5583806683960333345">જો આ નીતિ સક્ષમ કરેલ હોય, તો વપરાશકર્તાઓને ઝટપટ ટિઠરિંગનો ઉપયોગ કરવાની મંજૂરી આપવામાં આવશે, જે તેમના Google ફોનને તેમના ઉપકરણ સાથે મોબાઇલ ડેટા શેર કરવાની મંજૂરી આપે છે. જો આ સેટિંગ્સ અક્ષમ કરેલ હોય, તો વપરાશકર્તાને ઝડપટ ટિથરિંગનો ઉપયોગ કરવાની મંજૂરી આપવામાં આવશે નહીં. @@ -2178,6 +2219,11 @@ <translation id="6310223829319187614">વપરાશકર્તા સાઇન ઇન દરમિયાન ડોમેન નામ સ્વતઃપૂર્ણ સક્ષમ કરવું</translation> <translation id="6315673513957120120">જ્યારે વપરાશકર્તાઓ SSL ભૂલો ધરાવતી સાઇટ્સ પર નેવિગેટ કરે છે ત્યારે Chrome એક ચેતવણી પૃષ્ઠ બતાવે છે. ડિફોલ્ટ તરીકે અથવા જ્યારે આ નીતિ true પર સેટ કરેલી હોય, ત્યારે વપરાશકર્તાઓને આ ચેતવણી પૃષ્ઠો પર ક્લિક કરવાની મંજૂરી હોય છે. આ નીતિને false પર સેટ કરવાથી વપરાશકર્તાઓ કોઈપણ ચેતવણી પૃષ્ઠ પર ક્લિક કરી શકતાં નથી.</translation> +<translation id="6352543686437322588">વિલંબ બાદ ઑટો-લૉગ ઇન માટે ડિવાઇસ-લોકેલ એકાઉન્ટ. + + જો નીતિ સેટ કરેલી હોય, તો નિર્દિષ્ટ સત્ર વપરાશકર્તાના હસ્તક્ષેપ વિના લૉગ ઇન સ્ક્રીન પર વિતાવેલ સમયગાળો પસાર થાય તે પછી ઑટોમૅટિક રીતે લૉગ ઇન થશે. ડિવાઇસ-લોકેલ એકાઉન્ટ પહેલેથી કન્ફિગર કરેલ હોવું જરૂરી છે. (|DeviceLocalAccounts| જુઓ). + + જો આ નીતિ સેટ કરેલી નથી, તો કોઈપણ ઑટો-લૉગ ઇન હશે નહીં.</translation> <translation id="6353901068939575220">POST સાથે URL શોધતી વખતે ઉપયોગમાં લેવાયેલ પેરામીટર્સનો ઉલ્લેખ કરે છે. તે અલ્પવિરામથી વિભાજિત નામ/મૂલ્યની જોડીઓ ધરાવે છે. જો કોઈ મૂલ્ય ટેમ્પલેટ પેરામીટર છે, જેમ કે ઉપરનાં ઉદાહરણમાં {searchTerms}, તો તે વાસ્તવિક શોધ શબ્દ ડેટા દ્વારા બદલાશે. આ નીતિ વૈકલ્પિક છે. જો તે સેટ નથી, તો શોધ વિનંતી GET પદ્ધતિના ઉપયોગથી મોકલવામાં આવશે. @@ -2562,6 +2608,12 @@ જો આ નીતિ સેટ નહીં કરેલી હોય, તો વપરાશકર્તા આ સેટિંગને મૅન્યુઅલી બદલી શકશે.</translation> <translation id="723103540848640830">લૉક સ્ક્રીન પિનની લઘુતમ લંબાઈ સેટ કરો</translation> +<translation id="7232816984286843471">જો આ નીતિ False પર સેટ કરેલી હોય, તો સંકળાયેલ ન હોય તેવા વપરાશકર્તાઓને Crostiniનો ઉપયોગ કરવાની મંજૂરી મળશે નહીં. + + જો આ નીતિને સેટ કરાતી નથી કે True પર સેટ રાખવામાં આવે છે, તો અન્ય સેટિંગ મંજૂરી આપતી હોય તો બધાં જ વપરાશકર્તાને Crostiniનો ઉપયોગ કરવાની મંજૂરી આપવામાં આવે છે. + તેઓ જ્યારે Crostiniને ચલાવવાની મંજૂરી માટે અરજી કરે, ત્યારે VirtualMachinesAllowed, CrostiniAllowed, અને DeviceUnaffiliatedCrostiniAllowed એ ત્રણેય નીતિઓને True પર સેટ કરેલી હોવી જરૂરી છે. + + જ્યારે આ નીતિને બદલીને False પર સેટ કરવામાં આવે છે, ત્યારે તે Crostiniના શરૂ થતાં નવા કન્ટેનર પર લાગુ થાય છે, પરંતુ પહેલેથી જ ચાલુ કન્ટેનરને શટ ડાઉન કરતી નથી.</translation> <translation id="7234280155140786597">પ્રતિબંધિત મૂળ મેસેજિંગ હોસ્ટ્સના નામ (અથવા બધા માટે *)</translation> <translation id="7236775576470542603">સ્ક્રીન બૃહદદર્શકનો તે ડિફોલ્ટ પ્રકાર સેટ કરો કે જે લોગિન સ્ક્રીન પર સક્ષમ હોય છે. @@ -2616,6 +2668,11 @@ <translation id="7311458740754205918">જો આ true પર સેટ કરેલ હોય અથવા સેટ કરેલ ન હોય, તો નવું ટૅબ પેજ વપરાશકર્તાના બાઉઝિંગ ઇતિહાસ, રુચિઓ અથવા જગ્યાના આધારે કન્ટેન્ટ સૂચનો બતાવી શકે છે. જો આ false પર સેટ કરેલ હોય, તો નવું ટૅબ પેજ પર સ્વચલિત-બનાવેલ કન્ટેન્ટ સૂચનો બતાવવામાં આવતાં નથી.</translation> +<translation id="7313793931637495417">આ નીતિ OS વર્ઝન, OS પ્લૅટફૉર્મ, OS આર્કિટેક્ચર, <ph name="PRODUCT_NAME" /> વર્ઝન અને <ph name="PRODUCT_NAME" /> ચૅનલ જેવી વર્ઝન અંગેની માહિતીની જાણ કરવી કે નહીં તે બાબતને નિયંત્રિત કરે છે. + + જ્યારે આ નીતિને સેટ કરેલી ન હોય અથવા True પર સેટ કરેલી હોય, ત્યારે વર્ઝન અંગેની માહિતીને એકત્રિત કરવામાં આવે છે. + જ્યારે આ નીતિ False પર સેટ હોય, ત્યારે વર્ઝન અંગેની માહિતીને એકત્રિત નહીં કરવામાં આવે. + આ નીતિ માત્ર <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ચાલુ હોય, અને મશીનની <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> સાથે નોંધણી કરવામાં આવી ત્યારે જ લાગુ થાય છે.</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> માટે વધારાના કમાન્ડ લાઇન પેરામીટર્સ</translation> <translation id="7326394567531622570">વાઇપ (મૂલ્ય 2)ને સમાન, પણ લૉગ ઇન ટોકન સાચવવાનો પ્રયાસ કરે છે, જેથી વપરાશકર્તાએ ફરીથી સાઇન ઇન કરવાની જરૂર રહેતી નથી.</translation> <translation id="7329842439428490522">બેટરી પાવર પર ચાલી રહ્યું હોય ત્યારે સ્ક્રીન બંધ થઈ જાય તે પછીની સમયની લંબાઈને વપરાશકર્તા ઇનપુટ વગર નિર્દિષ્ટ કરે છે. @@ -2649,6 +2706,11 @@ <translation id="7349338075015720646">એવી વેબસાઇટની સૂચિનો ઉલ્લેખ કરે છે કે જે વપરાશકર્તાની ક્રિયાપ્રતિક્રિયા વિના, સાઇલન્ટ રીતે ઇન્સ્ટૉલ થાય છે અને જેને વપરાશકર્તા અનઇન્સ્ટૉલ કે બંધ કરી શકતા નથી. આ નીતિની દરેક આઇટમ બે સભ્યો ધરાવતો એક ઑબ્જેક્ટ છે: "url" અને "launch_container". "url" એ ઇન્સ્ટૉલ કરવા માટેનું વેબ ઍપનું URL હોવું જોઈએ અને વેબ ઍપ એકવાર ઇન્સ્ટૉલ થાય પછી તે કેવી રીતે ખૂલે તે જણાવતી "વિંડો" અથવા "ટૅબ" હોવી જોઈએ. જો "launch_container"ને છોડી દેવામાં આવે, તો ઍપ વિંડોમાં લૉન્ચ થશે પણ જો Chrome તેને પ્રગતિશીલ વેબ ઍપ તરીકે ધ્યાનમાં લે અને નહીં તો પછી ટૅબમાં લૉન્ચ થશે.</translation> +<translation id="735902178936442460">મશીનનું નામ અને નેટવર્ક ઍડ્રેસ જેવી મશીનની ઓળખ મેળવવામાં ઉપયોગી હોય એવી માહિતીની જાણ કરવી કે નહીં તે બાબતને આ નીતિ નિયંત્રિત કરે છે. + + જ્યારે આ નીતિ સેટ કર્યા વિના છોડવામાં આવે અથવા તેને True પર સેટ કરવામાં આવે, ત્યારે મશીનની ઓળખ મેળવવામાં ઉપયોગી હોય એવી માહિતી એકત્રિત કરવામાં આવે છે. + જ્યારે આ નીતિ False પર સેટ હોય, ત્યારે મશીનની ઓળખ માટે વાપરી શકાય તેવી માહિતી એકત્રિત કરાતી નથી. + આ નીતિ માત્ર <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ચાલુ હોય, અને મશીનની <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> સાથે નોંધણી થયેલી હોય ત્યારે જ લાગુ થાય છે.</translation> <translation id="7367028210010532881">જ્યારે વપરાશકર્તાઓ સંભવિત રૂપે દૂષિત તરીકે ચિહ્નિત કરેલી હોય તેવી સાઇટ પર નૅવિગેટ કરે ત્યારે સુરક્ષિત બ્રાઉઝિંગ સેવા એક ચેતવણી પેજ બતાવે છે. આ સેટિંગને ચાલુ કરવું તે વપરાશકર્તાઓને કોઈપણ રીતે ચેતવણી પેજથી દૂષિત સાઇટ પર આગળ વધવાથી અટકાવે છે. જો આ સેટિંગ બંધ હોય અથવા ગોઠવેલ ન હોય, તો વપરાશકર્તાઓ ચેતવણી જોયા પછી ચિહ્નિત કરેલી સાઇટ પર આગળ વધવાનું પસંદ કરી શકશે. @@ -2925,6 +2987,14 @@ <translation id="798856998567564266">જો તમે આ સેટિંગને સક્ષમ કરો છો, તો બુકમાર્ક ઉમેરાઈ શકે છે, દૂર થઈ શકે છે અથવા સંશોધિત થઈ શકે છે. આ ડિફૉલ્ટ છે પણ જ્યારે આ નીતિ સેટ કરેલી ન હોય ત્યારે. જો તમે આ સેટિંગને અક્ષમ કરો છો, તો, બુકમાર્ક ઉમેરાઈ શકતા નથી, દૂર થઈ શકતા નથી અથવા સંશોધિત થઈ શકતા નથી, અસ્તિત્વમાં છે તે બુકમાર્ક હજી પણ ઉપલબ્ધ છે.</translation> +<translation id="7992136759457836904">Chrome OS પર વર્ચ્યુઅલ મશીનને ચાલવા દેવાની મંજૂરી આપવી કે નહીં તે તમે નિયંત્રિત કરી શકશો. + + જો આ નીતિ True પર સેટ કરવામાં આવે, તો એ ડિવાઇસને વર્ચ્યુઅલ મશીન ચલાવવાની મંજૂરી આપવામાં આવે છે. + જો આ નીતિ False પર સેટ કરેલી હોય, તો ડિવાઇસને વર્ચ્યુઅલ મશીન ચલાવવાની મંજૂરી આપવામાં આવતી નથી. + તેઓ જ્યારે Crostiniને ચલાવવાની મંજૂરી માટે અરજી કરે, ત્યારે VirtualMachinesAllowed, CrostiniAllowed, અને DeviceUnaffiliatedCrostiniAllowed એ ત્રણેય નીતિઓને True પર સેટ કરેલી હોવી જરૂરી છે. + જ્યારે આ નીતિને બદલીને False પર સેટ કરવામાં આવે છે, ત્યારે તે નવા શરૂ થતાં વર્ચ્યુઅલ મશીન પર લાગુ થાય છે પરંતુ પહેલેથી ચાલુ હોય તેવા વર્ચ્યુઅલ મશીનને શટ ડાઉન કરતી નથી. + જ્યારે એક સંચાલિત ડિવાઇસ પર આ નીતિ સેટ કરવામાં આવતી નથી, ત્યારે તે ડિવાઇસને વર્ચ્યુઅલ મશીન ચલાવવાની મંજૂરી આપવામાં આવતી નથી. + અસંચાલિત ડિવાઇસને વર્ચ્યુઅલ મશીન ચલાવવાની મંજૂરી આપવામાં આવે છે.</translation> <translation id="802147957407376460">સ્ક્રીનને 0 ડિગ્રીએ ફેરવો</translation> <translation id="8033913082323846868">આ નીતિને M70 માં સમાપ્ત કરવામાં આવી છે, કૃપા કરીને તેના બદલે AutofillAddressEnabled અને AutofillCreditCardEnabled નો ઉપયોગ કરો. @@ -2983,10 +3053,17 @@ જ્યારે આ નીતિ અનસેટ હોય, ત્યારે ડિફોલ્ટ લંબાઈનો ઉપયોગ થાય છે. નીતિ મૂલ્ય મિલિસેકન્ડ્સમાં નિર્દિષ્ટ કરવું જોઈએ. નિષ્ક્રિય વિલંબ કરતાં મૂલ્યો ઓછા હોવા જોઈએ.</translation> +<translation id="8138009212169037227">નીતિ અંગેના ડેટા અને નીતિ મેળવ્યાના સમયની જાણ કરવી કે નહીં તે બાબતને આ નીતિ નિયંત્રિત કરે છે. + + જ્યારે આ નીતિ સેટ કર્યા વિના છોડવામાં આવે અથવા તેને True પર સેટ કરવામાં આવે, ત્યારે નીતિ અંગેનો ડેટા અને નીતિ મેળવ્યાનો સમયને એકત્ર કરવામાં આવે છે. + જ્યારે આ નીતિ False પર સેટ કરવામાં આવી હોય, ત્યારે નીતિ અંગેનો ડેટા અને નીતિ મેળવ્યાનો સમય એકત્ર કરવામાં આવતો નથી. + + આ નીતિ માત્ર <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ચાલુ હોય, અને મશીનની <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> સાથે નોંધણી કરવામાં આવી હોય ત્યારે જ લાગુ થાય છે.</translation> <translation id="8140204717286305802">નેટવર્ક ઇન્ટરફેસેસની સૂચિની તેમના પ્રકાર અને હાર્ડવેર સરનામાંઓ સાથે સર્વર પર જાણ કરો. જો નીતિ false પર સેટ છે, તો ઇન્ટરફેસ સૂચિની જાણ કરવામાં આવશે નહીં.</translation> <translation id="8141795997560411818">આ નીતિ, વપરાશકર્તાને Android Google ડ્રાઇવ ઍપ્લિકેશનનો ઉપયોગ કરવાથી અટકાવતું નથી. જો તમે Google ડ્રાઇવ પરની ઍક્સેસને અટકાવવા માગો છો, તો તમારે Android Google ડ્રાઇવ ઍપ્લિકેશનના ઇન્સ્ટૉલેશનને પણ નામંજૂર કરવું જોઈએ.</translation> +<translation id="8142894094385450823">મેનેજ કરવામાં આવેલ સત્ર માટે સુઝાવ આપેલ લોકેલ સેટ કરે છે</translation> <translation id="8146727383888924340">Chrome OS નોંધણી દ્વારા વપરાશકર્તાઓને ઓફર્સને રીડિમ કરવાની મંજૂરી આપો</translation> <translation id="8148785525797916822">જ્યારે <ph name="PRODUCT_NAME" /> એવા કમ્પ્યુટર અથવા ઓપરેટિંગ સિસ્ટમ પર ચાલી રહ્યું હોય કે જે હવે સમર્થિત નથી, તો ત્યારે દેખાતી ચેતવણીને બંધ કરે છે.</translation> <translation id="8148901634826284024">ઉચ્ચ કોન્ટ્રાસ્ટ મોડ ઍક્સેસિબિલિટી સુવિધાને સક્ષમ કરો. @@ -3041,6 +3118,29 @@ <translation id="8259592978873597235">જો નીતિ True પર સેટ કરેલ હોય અથવા સેટ કરેલ ન હોય, તો વીડિઓ ચલાવતી વખતે વપરાશકર્તાને નિષ્ક્રિય ગણવામાં આવતો નથી. આ નિષ્ક્રિય વિલંબ, સ્ક્રીન મંદ વિલંબ, સ્ક્રીન બંધ વિલંબ અને સ્ક્રીન લૉક વિલંબ પર પહોંચવાથી અને સંબંધિત પગલાં લેવાથી અટકાવે છે. આ નીતિ False પર સેટ હોય, તો વીડિઓ પ્રવૃત્તિ વપરાશકર્તાને નિષ્ક્રિય ગણવાથી અટકાવતી નથી.</translation> +<translation id="8264653492961233132">એવી ઍપ તથા એક્સ્ટેંશનની સૂચિનો ઉલ્લેખ કરે છે જે વપરાશકર્તાની, + ક્રિયાપ્રતિક્રિયા વિના ચૂપચાપ ઇન્સ્ટૉલ કરવામાં આવી હોય + અને જેને વપરાશકર્તા અનઇન્સ્ટૉલ કે બંધ ન કરી શકે. ઍપ/એક્સ્ટેંશન + દ્વારા વિનંતી કરવામાં આવેલ બધી પરવાનગીઓ ગર્ભિત રૂપે, + વપરાશકર્તાની ક્રિયાપ્રતિક્રિયા વિના આપવામાં આવે છે, જેમાં ઍપ/એક્સ્ટેંશનના + ભવિષ્યના વર્ઝન દ્વારા કરવામાં આવેલ બધી વધારાની વિનંતીઓનો સમાવેશ થાય છે. + વધુમાં, enterprise.deviceAttributes અને enterprise.platformKeys એક્સ્ટેંશન API માટે + પરવાનગીઓ આપવામાં આવે છે.(ફરજિયાત-ઇન્સ્ટૉલ કરવામાં ન આવી હોય તે ઍપ/ +એક્સ્ટેંશન માટે આ બે API ઉપલબ્ધ હોતી નથી.) + + આ નીતિ સંભવિત રૂપે વિસંગત <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> નીતિ કરતાં અગ્ર સ્થાન ધરાવે છે. જો પહેલાં ફરજિયાત-ઇન્સ્ટૉલ કરેલ કોઈ ઍપ અથવા એક્સ્ટેંશન આ સૂચિમાંથી કાઢી નાખવામાં આવશે, તો તે <ph name="PRODUCT_NAME" /> દ્વારા ઑટોમેટિક રીતે અનઇન્સ્ટૉલ થઈ જશે. + + <ph name="MS_AD_NAME" /> ડોમેન સાથે ન જોડાયેલ Windows આવૃત્તિઓ માટે, ફરજિયાત ઇન્સ્ટૉલેશન Chrome વેબ સ્ટોરમાં સૂચિબદ્ધ ઍપ તથા એક્સ્ટેંશન સુધી મર્યાદિત છે. + + નોંધ કરો કે વપરાશકર્તાઓ ડેવલપરના સાધનો વડે કોઈપણ એક્સ્ટેંશનના સૉર્સ કોડમાં ફેરફાર કરી શકે છે (જેના કારણે એક્સ્ટેંશન સંભવિત રૂપે કાર્ય કરી શકતું નથી). જો આ ચિંતાનો વિષય હોય, તો <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> નીતિ સેટ કરવી જરૂરી છે. + + નીતિની દરેક સૂચિ આઇટમ એક સ્ટ્રિંગ છે, જેમાં અર્ધવિરામ (<ph name="SEMICOLON" />) દ્વારા અલગ કરેલ એક્સ્ટેંશન ID અને "અપડેટ" URL હોય છે. એક્સ્ટેંશન ID એ 32-અક્ષરોની સ્ટ્રિંગ છે, જે ડેવલપર મોડમાં હો, ત્યારે દા.ત. <ph name="CHROME_EXTENSIONS_LINK" /> પર મળી શકે છે. <ph name="LINK_TO_EXTENSION_DOC1" />માં દર્શાવ્યા મુજબ, "અપડેટ" URL, જો સ્પષ્ટ કરેલ હોય, તો અપડેટ મેનિફેસ્ટ XML દસ્તાવેજનો નિર્દેશ કરે તે જરૂરી છે. ડિફૉલ્ટ તરીકે, Chrome વેબ સ્ટોરની અપડેટ URLનો ઉપયોગ કરવામાં આવે છે (જે હાલમાં "https://clients2.google.com/service/update2/crx" છે). નોંધ કરો કે આ નીતિમાં સેટ કરેલ "અપડેટ" URL માત્ર શરૂઆતના ઇન્સ્ટૉલેશન માટે ઉપયોગમાં લેવાય છે; એક્સ્ટેંશનના ત્યાર પછીના અપડેટ માટે એક્સ્ટેંશનના મેનિફેસ્ટમાં જણાવેલ અપડેટ URLનો ઉપયોગ થાય છે. એ પણ નોંધી લો કે <ph name="PRODUCT_NAME" />ના 67મા વર્ઝન સહિતના વર્ઝન સુધી "અપડેટ URLને સ્પષ્ટ રીતે દર્શાવવી એ ફરજિયાત હતું. + + ઉદાહરણ તરીકે, <ph name="EXTENSION_POLICY_EXAMPLE" /> દ્વારા <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> માનક Chrome વેબ સ્ટોર "અપડેટ" URL પરથી ઍપ ઇન્સ્ટૉલ કરે છે. એક્સ્ટેંશનને હોસ્ટ કરવા વિશેની વધુ માહિતી માટે, જુઓ: <ph name="LINK_TO_EXTENSION_DOC2" />. + + જો આ નીતિ સેટ કરેલી ન હોય, તો કોઈપણ ઍપ કે એક્સ્ટેંશન આપમેળે ઇન્સ્ટૉલ નહીં થાય અને વપરાશકર્તા <ph name="PRODUCT_NAME" />માંની કોઈપણ ઍપ કે એક્સ્ટેંશન અનઇન્સ્ટૉલ કરી શકશે. + + નોંધ કરો કે આ નીતિ છૂપા મોડમાં લાગુ થતી નથી.</translation> <translation id="8274603902181597201">વપરાશકર્તાની ecryptfs હોમ ડિરેક્ટરીને વાઇપ કરો અને એક નવી ext4-એન્ક્રિપ્ટેડ હોમ ડિરેક્ટરી શરૂ કરો.</translation> <translation id="8285435910062771358">પૂર્ણ-સ્ક્રીન બૃહદદર્શક સક્ષમ છે</translation> <translation id="8288199156259560552">Android Google સ્થાન સેવા સક્ષમ કરો</translation> @@ -3390,6 +3490,7 @@ આ સેટિંગ RemoteAccessHostDomainને ઓવરરાઇડ કરશે, જો તે હાજર હોય. RemoteAccessHostClientDomainList પણ જુઓ.</translation> +<translation id="9077227880520270584">ડિવાઇસ-લોકેલ એકાઉન્ટનો ઑટો-લૉગ ઇન ટાઇમર</translation> <translation id="9084985621503260744">વિડિઓ પ્રવૃત્તિ પાવર વ્યવસ્થાપનને પ્રભાવિત કરે છે કે કેમ તે નિર્દિષ્ટ કરો</translation> <translation id="9088433379343318874">નિરીક્ષિત વપરાશકર્તા કન્ટેન્ટ પ્રદાતાને સક્ષમ કરો</translation> <translation id="9088444059179765143">સ્વચલિત સમયઝોન શોધ પદ્ધતિ ગોઠવવી</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 4d5dd8f..a4cb4c03 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -140,6 +140,7 @@ <translation id="1387596372902085462">Symantec Corporation の古い PKI インフラストラクチャを信頼するかどうか</translation> <translation id="1393485621820363363">有効な企業デバイス プリンタ</translation> <translation id="1397855852561539316">デフォルト検索プロバイダ サジェスト URL</translation> +<translation id="142346659686073702">外部のユーザーに Crostini の使用を許可する</translation> <translation id="1426410128494586442">はい</translation> <translation id="1427655258943162134">プロキシ サーバーのアドレスまたは URL</translation> <translation id="1435659902881071157">デバイス レベルのネットワーク設定</translation> @@ -385,6 +386,12 @@ このポリシーが未設定の場合は、有効にした場合と同じ結果になります(上の説明をご覧ください)。</translation> <translation id="2113068765175018713">自動再起動を行ってデバイスの稼働時間を制限する</translation> +<translation id="2116790137063002724">このポリシーでは、ユーザーを識別できる情報(OS のログイン、<ph name="PRODUCT_NAME" /> プロフィールのログイン、<ph name="PRODUCT_NAME" /> プロフィール名、<ph name="PRODUCT_NAME" /> プロフィールのパス、<ph name="PRODUCT_NAME" /> 実行ファイルのパスなど)について、レポートを作成するかどうかを管理します。 + + このポリシーが未設定または True に設定されている場合、ユーザーを識別できる情報が収集されます。 + このポリシーが False に設定されている場合、ユーザーを識別できる情報は収集されません。 + + このポリシーは、<ph name="CHROME_REPORTING_EXTENSION_NAME" /> が有効になっている場合にのみ有効です。また、マシンは <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> に登録されます。</translation> <translation id="2127599828444728326">これらのサイトの通知を許可する</translation> <translation id="2131902621292742709">画面が暗くなるまでの時間(バッテリー電源での実行時)</translation> <translation id="2132732175597591362">自動再生を常に有効にする URL パターンのホワイトリストを指定します。 @@ -858,6 +865,22 @@ このポリシーが未設定の場合は、すべてのサイトでグローバルなデフォルト値(「DefaultCookiesSetting」ポリシーで値が設定されている場合はその値、設定されていない場合はユーザーの個人設定の値)が使用されます。 「CookiesBlockedForUrls」ポリシーと「CookiesSessionOnlyForUrls」ポリシーも参照してください。これら 3 つのポリシーの URL パターンが競合しないようにする必要があります。競合する場合にどのポリシーが優先されるかは決まっていません。</translation> +<translation id="3373364525435227558">管理対象セッション向けに推奨する言語 / 地域を設定して、ユーザーがその中のいずれかを簡単に選択できるようにします。 + + ユーザーは管理対象セッションを開始する前に言語 / 地域とキーボード レイアウトを選択できます。デフォルトでは、<ph name="PRODUCT_OS_NAME" /> でサポートされる言語 / 地域がすべてアルファベット順にリストに表示されます。このポリシーを設定すると、推奨言語 / 地域をリストの最上位に移動することができます。 + + このポリシーが未設定の場合、現在のユーザー インターフェースで使用されている地域 / 言語があらかじめ選択されます。 + + このポリシーを設定した場合、推奨言語 / 地域はリストの最上位に移動し、他の言語 / 地域とは区別されて表示されます。推奨言語 / 地域はポリシーで設定された順序でリストに表示され、先頭の推奨言語 / 地域があらかじめ選択されます。 + + 推奨言語 / 地域が複数ある場合は、ユーザーがこれらの推奨言語 / 地域から選択することを前提としています。言語 / 地域とキーボード レイアウトの選択項目は、管理対象セッションの開始時に目立つように表示されます。それ以外の場合は、ほとんどのユーザーがあらかじめ選択された言語 / 地域を選択することを前提としています。この場合は、言語 / 地域とキーボード レイアウトの選択項目は、管理対象セッションの開始時にあまり目立たないように表示されます。 + + このポリシーを設定し、自動ログインが有効な場合(|DeviceLocalAccountAutoLoginId| ポリシーと |DeviceLocalAccountAutoLoginDelay| ポリシーを参照)、自動的に開始される管理対象セッションでは、先頭の推奨言語 / 地域と、その言語 / 地域での最も一般的なキーボード レイアウトが使用されます。 + + あらかじめ選択されるキーボード レイアウトは常に、あらかじめ選択される言語 / 地域での最も一般的なレイアウトです。 + + このポリシーについては推奨設定しかできません。このポリシーを使って推奨言語 / 地域を最上位に移動することは可能ですが、ユーザーは <ph name="PRODUCT_OS_NAME" /> でサポートされた言語 / 地域であればどれでもセッションで使用することができます。 + </translation> <translation id="3381968327636295719">ホスト ブラウザをデフォルトで使用する</translation> <translation id="3414260318408232239">このポリシーが未設定の場合、<ph name="PRODUCT_NAME" /> ではデフォルトの最小バージョン(TLS 1.0)が使用されます。 @@ -1088,6 +1111,11 @@ このポリシーを true に設定した場合または未設定の場合、ユーザーは Chrome OS の登録特典を利用できます。 このポリシーを false に設定した場合、ユーザーは特典を利用できません。</translation> +<translation id="4008507541867797979">このポリシーが true に設定されているか未設定の場合、<ph name="PRODUCT_OS_NAME" /> のログイン画面に既存ユーザーが表示され、いずれかを選択できます。 + + このポリシーが false に設定されている場合、<ph name="PRODUCT_OS_NAME" /> のログイン画面に既存ユーザーは表示されません。管理対象セッションを設定していない場合は、通常のログイン画面(ユーザーのメールアドレスとパスワードまたは電話番号の入力を求める画面)または SAML 画面(<ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> ポリシーにより有効になっている場合)が表示されます。管理対象セッションを設定している場合は、管理対象セッション アカウントのみが表示され、いずれかを選択できます。 + + なお、このポリシーが、端末でのローカル ユーザー データの保持または破棄に影響することはありません。</translation> <translation id="4010738624545340900">ファイル選択ダイアログの呼び出しを許可する</translation> <translation id="4012737788880122133">自動更新を無効にします(true に設定した場合)。 @@ -1478,6 +1506,15 @@ このポリシーを true に設定するか、値を指定しない場合、タブのライフサイクルが有効になります。</translation> <translation id="5208240613060747912">通知表示を許可しないサイトを指定する URL パターンのリストを設定できます。このポリシーが未設定の場合、グローバルのデフォルト値がすべてのサイトで使用されます。グローバルのデフォルト値は「DefaultNotificationsSetting」ポリシーの値か、この値が未設定の場合はユーザーの個人設定の値です。</translation> <translation id="5219844027738217407">Android アプリに対しては、このポリシーはマイクにのみ適用されます。このポリシーを true に設定した場合、すべての Android アプリでは例外なくマイクがミュートされます。</translation> +<translation id="5228316810085661003">デバイスのローカル アカウントに自動ログインするまでの時間です。 + + |DeviceLocalAccountAutoLoginId| ポリシーが未設定の場合、このポリシーは無効です。それ以外の場合は、以下のようになります。 + + このポリシーを設定する場合、ユーザー操作が行われなくなってから |DeviceLocalAccountAutoLoginId| ポリシーで指定されたデバイスのローカル アカウントに自動ログインするまでの時間を指定します。 + + このポリシーを未設定にすると、タイムアウトは 0 ミリ秒に設定されます。 + + このポリシーはミリ秒単位で指定します。</translation> <translation id="523505283826916779">ユーザー補助の設定</translation> <translation id="5247006254130721952">危険なダウンロードをブロックする</translation> <translation id="5248863213023520115"><ph name="MS_AD_NAME" /> サーバーに Kerberos チケットをリクエストする際に許可される暗号化タイプを設定します。 @@ -1498,6 +1535,12 @@ <translation id="5272684451155669299">このポリシーを true に設定した場合、ユーザーは Chrome デバイスのハードウェアから <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> の <ph name="CHALLENGE_USER_KEY_FUNCTION" /> を使用して、プライバシー CA に自身をリモート認証できます。 このポリシーを false に設定するか未設定のままにした場合、API 呼び出しは失敗し、エラーコードが返されます。</translation> +<translation id="5277806246014825877">このユーザーが Crostini を実行できるようにします。 + + このポリシーが false に設定されている場合、Crostini はユーザーに対して有効にはなりません。 + このポリシーが true に設定されているか未設定の場合、Crostini はユーザーに対して有効になります(ただし、他の設定でも許可されている場合)。 + Crostini の実行許可を適用するためには、VirtualMachinesAllowed、CrostiniAllowed、DeviceUnaffiliatedCrostiniAllowed の 3 つのポリシーがすべて true に設定されている必要があります。 + このポリシーが false に変更された場合、変更内容は以降の新しい Crostini コンテナの起動に対して適用されます。すでに実行中のコンテナが終了されることはありません。</translation> <translation id="5283457834853986457">プラグイン ファインダーを無効にする(サポート終了)</translation> <translation id="5288772341821359899">ポリシーが設定されている場合、WebRTC が使用する UDP ポートの範囲は指定されたポートの間隔(エンドポイントも含む)に制限されます。 @@ -1534,6 +1577,7 @@ <translation id="5370279767682621504">デフォルト以外のポートで HTTP/0.9 サポートを有効にする</translation> <translation id="5378985487213287085">ウェブサイトに対してデスクトップ通知の表示を許可するかどうかを設定できます。デスクトップ通知の表示は、デフォルトで許可または禁止することができます。また、ウェブサイトでデスクトップ通知が表示される前にユーザーが毎回確認することもできます。このポリシーが未設定の場合、「AskNotifications」が使用され、ユーザーはこの設定を変更できます。</translation> <translation id="538108065117008131"><ph name="PRODUCT_FRAME_NAME" /> に対して次のコンテンツ タイプの処理を許可する</translation> +<translation id="5391388690191341203">デバイスのローカル アカウントの自動ログイン</translation> <translation id="5392172595902933844">Android のステータスに関する情報をサーバーに 返します。 @@ -1558,6 +1602,7 @@ <translation id="5457924070961220141"><ph name="PRODUCT_FRAME_NAME" /> がインストールされている場合、デフォルトの HTML レンダラを設定できます。このポリシーが未設定の場合はデフォルトの設定が使用されホスト ブラウザがレンダリングを実行しますが、この設定をオーバーライドしてデフォルトで <ph name="PRODUCT_FRAME_NAME" /> に HTML ページのレンダリングを実行させることもできます。</translation> <translation id="5464816904705580310">管理対象ユーザーの設定を行います。</translation> <translation id="546726650689747237">画面が暗くなるまでの時間(AC 電源での実行時)</translation> +<translation id="5469143988693423708">ユーザーは Crostini を実行できます</translation> <translation id="5469825884154817306">これらのサイトの画像をブロックする</translation> <translation id="5475361623548884387">印刷を有効にする</translation> <translation id="547601067149622666">煩わしい広告を含むサイトで広告の表示を許可しない</translation> @@ -1609,6 +1654,9 @@ この場合、nameConstraints 拡張による制限(証明書を受け入れるホスト名の制限)が適用されなくなる可能性があるため、有効化はおすすめしません。 このポリシーが未設定のままか false に設定されている場合、subjectAlternativeName 拡張がなく DNS 名または IP アドレスのいずれかを含むサーバー証明書は信頼されません。</translation> +<translation id="5581292529942108810">Chrome レポート拡張機能に関するポリシーを設定します。 + + このポリシーは、<ph name="CHROME_REPORTING_EXTENSION_NAME" /> が有効になっている場合にのみ有効です。また、マシンは <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> に登録されます。</translation> <translation id="5584132346604748282">Android の Google 位置情報サービスを制御する</translation> <translation id="5586942249556966598">何もしない</translation> <translation id="5630352020869108293">最後のセッションを復元する</translation> @@ -1844,6 +1892,11 @@ <translation id="6310223829319187614">ユーザーのログイン中にドメイン名のオートコンプリートを有効にする</translation> <translation id="6315673513957120120">ユーザーが SSL エラーのあるサイトに移動しようとしたときに、Chrome では警告ページが表示されます。このポリシーを true に設定するか未設定のままにした場合、ユーザーは警告ページをクリックして次に進むことができます。 このポリシーを false に設定した場合、ユーザーは警告ページから先に進むことはできません。</translation> +<translation id="6352543686437322588">一定時間経過後に自動ログインするデバイスのローカル アカウントです。 + + このポリシーが設定されている場合、ログイン画面で一定時間ユーザー操作が行われないと、指定されたセッションに自動的にログインします。デバイスのローカル アカウントは事前に設定しておく必要があります(|DeviceLocalAccounts| をご覧ください)。 + + このポリシーが未設定の場合、自動ログインは行われません。</translation> <translation id="6353901068939575220">POST を使って URL の検索を行うときに使用するパラメータを指定します。名前と値のペアをカンマで区切って指定します。値がテンプレート パラメータ(上記の例の {searchTerms} など)の場合は、実際の検索キーワードのデータに置き換えられます。 このポリシーは省略可能です。未設定の場合、検索リクエストは GET メソッドを使用して送信されます。 @@ -2196,6 +2249,11 @@ このポリシーを設定しない場合、ユーザーはこの設定を手動で変更できます。</translation> <translation id="723103540848640830">ロック画面の PIN の最小桁数を設定する</translation> +<translation id="7232816984286843471">このポリシーが false に設定されている場合、外部のユーザーは Crostini を使用できません。 + + このポリシーが未設定または true に設定されている場合、すべてのユーザーが Crostini を使用できます(ただし、他の設定でも許可されている場合)。 + Crostini の実行許可を適用するためには、VirtualMachinesAllowed、CrostiniAllowed、DeviceUnaffiliatedCrostiniAllowed の 3 つのポリシーがすべて true に設定されている必要があります。 + このポリシーが false に変更された場合、変更内容は以降の新しい Crostini コンテナの起動に対して適用されます。すでに実行中のコンテナが終了されることはありません。</translation> <translation id="7234280155140786597">禁止するネイティブ メッセージング ホストの名前(または、「*」ですべてを禁止)</translation> <translation id="7236775576470542603">ログイン画面で有効にする画面拡大鏡機能のデフォルトのタイプを設定します。 @@ -2243,6 +2301,12 @@ <translation id="7311458740754205918">このオプションが true に設定されているか、未設定の場合、[新しいタブ] ページには、ユーザーの閲覧履歴、興味・関心、場所に応じておすすめのコンテンツが表示されます。 このオプションが false に設定されている場合、自動生成のおすすめのコンテンツは [新しいタブ] ページに表示されません。</translation> +<translation id="7313793931637495417">このポリシーでは、バージョン情報(OS バージョン、OS プラットフォーム、OS アーキテクチャ、<ph name="PRODUCT_NAME" /> のバージョン、<ph name="PRODUCT_NAME" /> のチャンネルなど)について、レポートを作成するかどうかを管理します。 + + このポリシーが未設定または True に設定されている場合、バージョン情報が収集されます。 + このポリシーが False に設定されている場合、バージョン情報は収集されません。 + + このポリシーは、<ph name="CHROME_REPORTING_EXTENSION_NAME" /> が有効になっている場合にのみ有効です。また、マシンは <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> に登録されます。</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> の追加コマンド ライン パラメータ</translation> <translation id="7326394567531622570">このオプションは Wipe(値 2)と似ていますが、ログイン トークンを保持するように動作します(この場合、ユーザーの再ログインが不要になります)。</translation> <translation id="7329842439428490522">バッテリー電源での実行時に、ユーザー入力が行われなくなってから画面がオフになるまでの時間を指定します。 @@ -2273,6 +2337,12 @@ <translation id="7349338075015720646">ユーザーに操作を求めずに自動インストールするウェブサイトのリストを指定します。ユーザーはここで指定されたウェブサイトをアンインストールすることも無効化することもできません。 このポリシーで指定するリストの個々の項目は、「url」と「launch_container」の 2 つで構成されるオブジェクトとなります。「url」には、インストールするウェブアプリの URL を指定します。「launch_container」には、インストール後にウェブアプリを開く方法として「window」または「tab」を指定します。「launch_container」を省略した場合、Chrome でプログレッシブ ウェブアプリと判定されたアプリはウィンドウで開かれ、それ以外のアプリはタブで開かれます。</translation> +<translation id="735902178936442460">このポリシーでは、マシンを識別できる情報(マシン名、ネットワーク アドレスなど)について、レポートを作成するかどうかを管理します。 + + このポリシーが未設定または True に設定されている場合、マシンを識別できる情報が収集されます。 + このポリシーが False に設定されている場合、マシンを識別できる情報は収集されません。 + + のポリシーは、<ph name="CHROME_REPORTING_EXTENSION_NAME" /> が有効になっている場合にのみ有効です。また、マシンは <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> に登録されます。</translation> <translation id="7367028210010532881">不正なサイトの可能性があると報告されているサイトにユーザーが移動しようとすると、セーフ ブラウジング サービスにより警告ページが表示されます。この設定を有効にした場合、ユーザーはその警告ページから不正なサイトに進むことができなくなります。 この設定を無効にするか未設定のままにした場合、ユーザーは警告が表示された後にそのサイトに進むかどうかを選択できます。 @@ -2517,6 +2587,14 @@ <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> のレシーバー名</translation> <translation id="7980227303582973781">特別な制限なし</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Chrome OS で仮想マシンを実行できるかどうかを制御します。 + + このポリシーが True に設定されている場合、端末では仮想マシンを実行できます。 + このポリシーが False に設定されている場合、端末では仮想マシンを実行できません。 + Crostini の実行許可を適用するためには、VirtualMachinesAllowed、CrostiniAllowed、DeviceUnaffiliatedCrostiniAllowed の 3 つのポリシーがすべて true に設定されている必要があります。 + このポリシーが False に変更された場合、変更内容は以降の新しい仮想マシンの起動に対して適用されます。すでに実行中の仮想マシンが終了されることはありません。 + このポリシーが未設定の場合、管理対象の端末では仮想マシンを実行できません。 + 管理対象外の端末では仮想マシンを実行できます。</translation> <translation id="802147957407376460">画面を 0 度回転(回転なし)</translation> <translation id="8033913082323846868">このポリシーは M70 でサポート終了となりました。代わりに AutofillAddressEnabled と AutofillCreditCardEnabled を使用してください。 @@ -2561,10 +2639,17 @@ このポリシーを設定しないと、デフォルトの時間が使用されます。 ポリシーの値はミリ秒単位で指定してください。アイドル時間より長い値は指定できません。</translation> +<translation id="8138009212169037227">このポリシーでは、ポリシーデータとポリシーの取得日時について、レポートを作成するかどうかを管理します。 + + このポリシーが未設定または True に設定されている場合、ポリシーデータとポリシーの取得日時が収集されます。 + このポリシーが False に設定されている場合、ポリシーデータとポリシーの取得日時は収集されません。 + + このポリシーは、<ph name="CHROME_REPORTING_EXTENSION_NAME" /> が有効になっている場合にのみ有効です。また、マシンは <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> に登録されます。</translation> <translation id="8140204717286305802">ネットワーク インターフェース(とそのタイプ)とハードウェア アドレスのリストをサーバーに報告します。 このポリシーが False に設定されている場合、インターフェースのリストは報告されません。</translation> <translation id="8141795997560411818">このポリシーを設定しても、ユーザーが Android Google ドライブアプリを使用するのを阻止することはできません。Google ドライブへのアクセスを禁止するには、Android Google ドライブアプリのインストールも禁止する必要があります。</translation> +<translation id="8142894094385450823">管理対象セッション向けに推奨する言語 / 地域を設定する</translation> <translation id="8146727383888924340">Chrome OS の登録特典の利用をユーザーに許可する</translation> <translation id="8148785525797916822">サポートされなくなったパソコンまたはオペレーティング システムで <ph name="PRODUCT_NAME" /> を実行する際、警告が表示されないようにします。</translation> <translation id="8148901634826284024">ユーザー補助機能の 1 つであるハイコントラスト モードを有効にします。 @@ -2612,6 +2697,29 @@ これらの設定を手動で行う必要はありません。Windows、Mac、Linux 向けの使いやすいテンプレートを <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" /> からダウンロードできます。 <ph name="MS_AD_NAME" /> ドメインに参加している Windows インスタンスではレジストリ経由でのポリシーのプロビジョニングもサポートされていますが、Windows でポリシーを設定する場合は GPO を使用することをおすすめします。</translation> +<translation id="8264653492961233132">ユーザーに操作を求めずにサイレント インストールするアプリと拡張機能のリストを + 指定します。ユーザーはここで指定されたアプリや拡張機能を + アンインストールすることも無効化することもできません。ここで + 指定されたアプリや拡張機能によってリクエストされるすべての権限は、 + ユーザーに確認を求めることなく暗黙的に許可されます。これには、 + アプリや拡張機能の将来のバージョンで新たにリクエストされる + 追加権限も含まれます。さらに、enterprise.deviceAttributes 拡張機能 API + と enterprise.platformKeys 拡張機能 API に対しても権限が許可されます + (この 2 つの API は強制的にインストールされるアプリや拡張機能でのみ利用可能です)。 + + このポリシーが <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> ポリシーと競合する場合は、このポリシーが優先されます。以前に強制的にインストールされたアプリまたは拡張機能がこのリストから削除された場合、そのアプリまたは拡張機能は <ph name="PRODUCT_NAME" /> によって自動的にアンインストールされます。 + + <ph name="MS_AD_NAME" /> ドメインに追加されていない Windows インスタンスの場合、強制インストールは Chrome ウェブストアのリストにあるアプリと拡張機能に限定されます。 + + ただしどの拡張機能についても、ユーザーはデベロッパー ツールを使用してソースコードを変更することができます(その場合、拡張機能が機能しなくなることがあります)。こうした変更を禁止したい場合は、<ph name="DEVELOPER_TOOLS_POLICY_NAME" /> ポリシーを設定してください。 + + このポリシーの各リスト項目には、拡張機能 ID と「更新」URL(省略可)をセミコロン(<ph name="SEMICOLON" />)で区切った文字列を指定します。拡張機能 ID は 32 文字の文字列で、デベロッパー モードで <ph name="CHROME_EXTENSIONS_LINK" /> を開くと確認できます。「更新」URL には、更新マニフェスト XML ドキュメントを指定する必要があります(指定する場合)(<ph name="LINK_TO_EXTENSION_DOC1" /> の説明をご覧ください)。デフォルトでは Chrome ウェブストアの更新 URL(現時点では「https://clients2.google.com/service/update2/crx」)が使用されます。なお、このポリシーで設定された「更新」URL は初回のインストールでのみ使用され、その後の拡張機能の更新には、拡張機能のマニフェストで指定されている更新 URL が使用されます。また、<ph name="PRODUCT_NAME" /> のバージョン 67 以下では「更新」URL の明示的な指定が必須となっていました。 + + たとえば、<ph name="EXTENSION_POLICY_EXAMPLE" /> では、<ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> アプリが標準の Chrome ウェブストアの「更新」URL からインストールされます。拡張機能のホスティングについて詳しくは、<ph name="LINK_TO_EXTENSION_DOC2" /> をご覧ください。 + + このポリシーが未設定の場合、どのアプリや拡張機能も自動的にインストールされることはなく、ユーザーは <ph name="PRODUCT_NAME" /> からアプリや拡張機能をアンインストールできます。 + + なお、このポリシーはシークレット モードには適用されません。</translation> <translation id="8274603902181597201">ユーザーの ecryptfs ホーム ディレクトリのデータをワイプして、ext4 で暗号化された新規のホーム ディレクトリから開始する。</translation> <translation id="8285435910062771358">全画面拡大鏡を有効にする</translation> <translation id="8288199156259560552">Android Google 位置情報サービスを有効にする</translation> @@ -2888,6 +2996,7 @@ このポリシーは、<ph name="MS_AD_NAME" /> ドメインに登録されていない Windows インスタンスでは使用できません。</translation> <translation id="9035964157729712237">ブラックリストから除外する拡張機能 ID</translation> <translation id="9042911395677044526"><ph name="PRODUCT_OS_NAME" /> 端末のユーザーごとにプッシュ型ネットワーク設定を適用できます。ネットワーク設定は、Open Network Configuration 形式(<ph name="ONC_SPEC_URL" /> を参照)で定義された JSON 形式の文字列です。</translation> +<translation id="9077227880520270584">デバイスのローカル アカウントの自動ログイン タイマー</translation> <translation id="9084985621503260744">動画操作を電源管理に関連付けるかどうかを指定する</translation> <translation id="9088433379343318874">監視対象ユーザーのコンテンツ プロバイダを有効にする</translation> <translation id="9088444059179765143">タイムゾーン自動検出の方法を設定する</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index f674839..5557ffc 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -141,6 +141,7 @@ <translation id="1387596372902085462">Symantec Corporation의 Legacy PKI Infrastructure 신뢰 사용 여부</translation> <translation id="1393485621820363363">사용 설정된 엔터프라이즈 기기 프린터</translation> <translation id="1397855852561539316">기본 검색 공급자 추천 URL</translation> +<translation id="142346659686073702">제휴되지 않은 사용자가 Crostini를 사용할 수 있게 허용</translation> <translation id="1426410128494586442">예</translation> <translation id="1427655258943162134">프록시 서버의 주소 또는 URL</translation> <translation id="1435659902881071157">기기 수준 네트워크 설정</translation> @@ -392,6 +393,12 @@ 정책을 설정하지 않으면 사용 설정한 경우와 동일하게 작동합니다. 위 설명을 참조하세요.</translation> <translation id="2113068765175018713">자동으로 재부팅하여 기기 가동 시간 제한</translation> +<translation id="2116790137063002724">이 정책은 OS 로그인 정보, <ph name="PRODUCT_NAME" /> 프로필 로그인 정보, <ph name="PRODUCT_NAME" /> 프로필 이름, <ph name="PRODUCT_NAME" /> 프로필 경로, <ph name="PRODUCT_NAME" /> 실행 가능한 경로와 같이 사용자를 식별하는 데 사용할 수 있는 정보의 보고 여부를 제어합니다. + + 이 정책이 설정되어 있지 않거나 True로 설정되어 있으면 사용자 식별에 사용될 수 있는 정보가 수집됩니다. + 이 정책이 False로 설정되어 있으면 사용자를 식별하는 데 사용할 수 있는 정보가 수집되지 않습니다. + + 이 정책은 <ph name="CHROME_REPORTING_EXTENSION_NAME" />이(가) 사용 설정되어 있고 기기가 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />에 등록되어 있는 경우에만 적용됩니다.</translation> <translation id="2127599828444728326">이 사이트에서 알림 허용</translation> <translation id="2131902621292742709">배터리 전원으로 실행할 때 화면 어둡게 하기 지연</translation> <translation id="2132732175597591362">자동재생을 항상 사용하도록 설정할 URL 패턴의 허용 목록을 제어합니다. @@ -891,6 +898,22 @@ 이 정책을 설정하지 않으면 'DefaultCookiesSetting' 정책(설정된 경우) 또는 사용자 개인 설정의 전체 기본값이 모든 사이트에 사용됩니다 'CookiesBlockedForUrls' 및 'CookiesSessionOnlyForUrls' 정책도 참조하세요. 이 세 정책 간에 충돌하는 URL 패턴이 없어야 합니다. 어떤 정책이 우선 적용되는지 지정되어 있지 않습니다.</translation> +<translation id="3373364525435227558">관리 세션에 한 개 이상의 추천 언어를 설정하여 사용자가 이 중 하나를 편리하게 선택할 수 있도록 합니다. + + 사용자는 관리 세션을 시작하기 전에 언어 및 키보드 레이아웃을 선택할 수 있습니다. 기본적으로 <ph name="PRODUCT_OS_NAME" />에서 지원하는 모든 언어가 알파벳 순서로 표시됩니다. 이 정책을 사용하여 추천 언어 모음을 목록 상단으로 이동할 수 있습니다. + + 이 정책을 설정하지 않으면 현재 UI 언어가 사전 선택됩니다. + + 이 정책을 설정하면 추천 언어가 목록 상단으로 이동하며 다른 언어와 시각적으로 구분되어 표시됩니다. 추천 언어는 정책에 표시된 순서대로 표시되며 첫 번째 추천 언어가 사전 선택됩니다. + + 추천 언어가 둘 이상인 경우 사용자가 추천 언어 중에 선택할 것이라고 가정, 관리 세션 시작 시 언어 및 키보드 레이아웃 선택 항목이 눈에 띄게 표시됩니다. 그 외의 경우 대부분의 사용자가 사전 선택된 언어를 사용할 것이라고 가정, 관리 세션 시작 시 언어 및 키보드 레이아웃 선택 항목이 눈에 덜 띄게 표시됩니다. + + 이 정책이 설정되어 있고 자동 로그인을 사용 설정한 경우(|DeviceLocalAccountAutoLoginId| 및 |DeviceLocalAccountAutoLoginDelay| 정책 참조) 자동으로 시작된 관리 세션에서는 첫 번째 추천 언어 및 이 언어와 일치하며 가장 널리 사용되는 키보드 레이아웃을 사용합니다. + + 사전 선택된 키보드 레이아웃은 사전 선택된 언어에 해당하는 가장 널리 사용되는 레이아웃으로 설정됩니다. + + 이 정책은 추천으로만 설정할 수 있습니다. 이 정책을 사용하여 추천 언어 모음을 상단으로 이동할 수 있지만, 사용자는 언제든지 자신의 세션에서 <ph name="PRODUCT_OS_NAME" />이(가) 지원하는 언어 중에 선택할 수 있습니다. + </translation> <translation id="3381968327636295719">호스트 브라우저를 기본으로 사용</translation> <translation id="3414260318408232239">이 정책을 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 기본 최소 버전인 TLS 1.0이 사용됩니다. @@ -1123,6 +1146,11 @@ 이 정책이 true로 설정되어 있거나 설정되어 있지 않으면 사용자는 Chrome OS 등록을 통해 쿠폰을 사용할 수 있습니다. 이 정책이 false로 설정되어 있으면 사용자는 쿠폰을 사용할 수 없습니다.</translation> +<translation id="4008507541867797979">이 정책을 True로 설정하거나 구성하지 않으면 <ph name="PRODUCT_OS_NAME" />은(는) 기존의 사용자 이름을 로그인 화면에 표시하여 선택할 수 있도록 합니다. + + 이 정책이 False로 설정되어 있으면 <ph name="PRODUCT_OS_NAME" />은(는) 로그인 화면에서 기존 사용자를 표시하지 않습니다. 관리 세션이 구성되어 있지 않으면 정상적인 로그인 화면(사용자 이메일 및 비밀번호/휴대전화 요청) 또는 SAML 전면 광고 화면(<ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> 정책을 통해 사용 설정된 경우)이 표시됩니다. 관리 세션이 구성되어 있으면 관리 세션 계정만 표시되어 그중 하나를 선택할 수 있습니다. + + 이 정책은 기기가 로컬 사용자 데이터를 보관/삭제할지 여부에 영향을 미치지 않습니다.</translation> <translation id="4010738624545340900">파일 선택 대화상자의 호출 허용</translation> <translation id="4012737788880122133">True로 설정하면 자동 업데이트가 사용 중지됩니다. @@ -1537,6 +1565,15 @@ 이 정책을 설정하지 않은 경우 'DefaultNotificationsSetting' 정책이 설정되면 해당 정책의, 그렇지 않으면 사용자 개인 설정의 전체 기본값이 모든 사이트에서 사용됩니다.</translation> <translation id="5219844027738217407">Android 앱의 경우 이 정책은 마이크에만 영향을 줍니다. 이 정책이 true로 설정되면 마이크는 모든 앱에서 음소거되며 예외는 없습니다.</translation> +<translation id="5228316810085661003">기기 로컬 계정 자동 로그인 지연 + + |DeviceLocalAccountAutoLoginId| 정책을 설정하지 않으면 이 정책은 적용되지 않습니다. 또는: + + 이 정책을 설정하면 |DeviceLocalAccountAutoLoginId| 정책에서 지정한 기기 로컬 계정에 자동으로 로그인하기 전에 사용자 활동 없이 시간이 얼마나 지나야 하는지 결정됩니다. + + 이 정책을 설정하지 않으면 시간 제한이 0밀리초가 됩니다. + + 정책 값은 밀리초 단위로 지정됩니다.</translation> <translation id="523505283826916779">접근성 설정</translation> <translation id="5247006254130721952">위험한 다운로드 차단</translation> <translation id="5248863213023520115"><ph name="MS_AD_NAME" /> 서버에서 Kerberos 티켓을 요청할 때 허용되는 암호화 유형을 설정합니다. @@ -1557,6 +1594,12 @@ <translation id="5272684451155669299">True일 경우, 사용자는 Chrome 기기의 하드웨어를 사용하여 <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" />을(를) 통해 개인정보 보호 설정 CA에 대한 인증서를 원격으로 증명할 수 있습니다. False로 설정되어 있거나 설정되지 않은 경우, API 호출 시 오류 메시지가 표시되며 호출에 실패합니다.</translation> +<translation id="5277806246014825877">이 사용자가 Crostini를 실행할 수 있게 합니다. + + 이 정책이 False로 설정되어 있으면 사용자가 Crostini를 사용할 수 없습니다. + 이 정책이 True로 설정되어 있거나 설정되어 있지 않으면 다른 설정에서도 허용하는 한 사용자가 Crostini를 사용할 수 있습니다. + VirtualMachinesAllowed, CrostiniAllowed, DeviceUnaffiliatedCrostiniAllowed가 Crostini에 적용되어 있을 때 실행할 수 있으려면 세 가지 정책이 모두 True로 설정되어 있어야 합니다. + 이 정책이 False로 변경되면 새 Crostini 컨테이너를 시작하도록 적용되지만 이미 실행 중인 컨테이너는 종료되지 않습니다.</translation> <translation id="5283457834853986457">플러그인 Finder 사용 중지(지원 중단됨)</translation> <translation id="5288772341821359899">정책이 설정된 경우 WebRTC가 사용하는 UDP 포트 범위는 지정한 포트 간격(엔드포인트 포함)으로 제한됩니다. @@ -1595,6 +1638,7 @@ 이 정책을 설정하지 않은 경우 'AskNotifications' 정책이 사용되며 사용자가 설정을 변경할 수 있습니다.</translation> <translation id="538108065117008131"><ph name="PRODUCT_FRAME_NAME" />이(가) 다음 콘텐츠 유형을 다루도록 허용</translation> +<translation id="5391388690191341203">자동 로그인 기기 로컬 계정</translation> <translation id="5392172595902933844">Android 상태 관련 정보가 서버로 다시 전송됩니다. @@ -1624,6 +1668,7 @@ 이 정책을 설정하지 않으면 기본 설정에 따라 호스트 브라우저가 렌더링을 수행하지만, 이 설정을 무시하고 기본적으로 <ph name="PRODUCT_FRAME_NAME" />에서 HTML 페이지를 렌더링하도록 할 수 있습니다.</translation> <translation id="5464816904705580310">관리 사용자에 대한 설정 구성</translation> <translation id="546726650689747237">AC 전원으로 실행할 때 화면 어둡게 하기 지연</translation> +<translation id="5469143988693423708">사용자가 Crostini를 실행할 수 있음</translation> <translation id="5469825884154817306">이 사이트의 이미지 차단</translation> <translation id="5475361623548884387">인쇄 사용</translation> <translation id="547601067149622666">방해가 되는 광고가 포함된 사이트에서 광고 허용 안 함</translation> @@ -1675,6 +1720,9 @@ 이는 권장되지 않습니다. 이를 통해 특정 인증서만 승인되며 호스트 이름을 제한하는 nameConstraints 확장 필드를 우회할 수 있기 때문입니다. 이 정책을 설정하지 않거나 false로 설정되면 subjectAlternativeName 확장 필드가 누락되어 있으며 DNS 이름이나 IP 주소가 포함된 서버 인증서를 신뢰하지 않습니다.</translation> +<translation id="5581292529942108810">Chrome 보고 확장 프로그램 관련 정책을 구성합니다. + + 이 정책은 <ph name="CHROME_REPORTING_EXTENSION_NAME" />이(가) 사용 설정되어 있고 기기가 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />에 등록되어 있는 경우에만 적용됩니다.</translation> <translation id="5584132346604748282">Android Google 위치 서비스 제어</translation> <translation id="5586942249556966598">취소</translation> <translation id="5630352020869108293">마지막 세션 복원</translation> @@ -1922,6 +1970,11 @@ <translation id="6310223829319187614">사용자가 로그인할 때 도메인 이름 자동완성 기능을 사용합니다.</translation> <translation id="6315673513957120120">사용자가 SSL 오류가 있는 사이트를 탐색하면 Chrome에서 경고 페이지를 표시합니다. 기본적으로 또는 이 정책이 'true'로 설정된 경우 사용자는 이 경고 페이지를 클릭하여 탐색할 수 있습니다. 이 정책을 'false'로 설정하면 사용자가 경고 페이지를 클릭하여 탐색할 수 없습니다.</translation> +<translation id="6352543686437322588">일정 시간이 지난 뒤 자동으로 로그인할 기기 로컬 계정입니다. + + 이 정책이 설정되어 있으면 로그인 화면에서 사용자 활동 없이 일정 시간이 경과한 뒤에 지정된 세션이 자동으로 로그인됩니다. 기기 로컬 계정은 이미 구성되어 있어야 합니다(|DeviceLocalAccounts| 참조). + + 이 정책이 설정되어 있지 않으면 자동 로그인할 수 없습니다.</translation> <translation id="6353901068939575220">POST로 URL을 검색할 때 사용할 매개변수를 지정합니다. 쉼표로 구분된 이름/값 쌍으로 구성되어 있습니다. 값이 위의 예에 있는 {searchTerms}와 같은 템플릿 매개변수인 경우 실제 검색어 데이터로 대체됩니다. 설정되지 않으면 검색 요청은 GET 메소드를 사용하여 전송됩니다. @@ -2287,6 +2340,11 @@ 이 정책을 설정하지 않고 넘어가면 사용자는 이후에 이 설정을 직접 변경할 수 있습니다.</translation> <translation id="723103540848640830">잠금 화면 PIN 최소 길이 설정</translation> +<translation id="7232816984286843471">이 정책이 False로 설정되어 있으면 제휴되지 않은 사용자는 Crostini를 사용할 수 없습니다. + + 이 정책이 설정되어 있지 않거나 True로 설정되어 있으면 다른 설정에서도 허용하는 한 모든 사용자가 Crostini를 사용할 수 있습니다. + VirtualMachinesAllowed, CrostiniAllowed, DeviceUnaffiliatedCrostiniAllowed가 Crostini에 적용되어 있을 때 실행할 수 있으려면 세 가지 정책이 모두 True로 설정되어 있어야 합니다. + 이 정책이 False로 변경되면 새 Crostini 컨테이너를 시작하도록 적용되지만 이미 실행 중인 컨테이너는 종료되지 않습니다.</translation> <translation id="7234280155140786597">차단된 기본 메시지 호스트의 이름(모두 차단하려면 * 값 적용)</translation> <translation id="7236775576470542603">로그인 화면에서 사용하는 화면 돋보기의 기본 유형을 설정합니다. @@ -2334,6 +2392,12 @@ <translation id="7311458740754205918">true로 설정되거나 설정되지 않으면 새 탭 페이지에서 사용자의 방문 기록, 관심분야 또는 위치를 기반으로 콘텐츠 추천을 표시할 수 있습니다. false로 설정되어 있다면 자동 생성 콘텐츠 추천이 새 탭 페이지에 표시되지 않습니다.</translation> +<translation id="7313793931637495417">이 정책은 OS 버전, OS 플랫폼, OS 아키텍처, <ph name="PRODUCT_NAME" /> 버전, <ph name="PRODUCT_NAME" /> 채널과 같은 버전 정보의 보고 여부를 제어합니다. + + 이 정책이 설정되어 있지 않거나 True로 설정되어 있으면 버전 정보가 수집됩니다. + 이 정책이 False로 설정되어 있으면 버전 정보가 수집되지 않습니다. + + 이 정책은 <ph name="CHROME_REPORTING_EXTENSION_NAME" />이(가) 사용 설정되어 있고 기기가 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />에 등록되어 있는 경우에만 적용됩니다.</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" />의 추가 명령줄 매개변수</translation> <translation id="7326394567531622570">완전 삭제(값 2)와 유사하지만, 사용자가 다시 로그인할 필요가 없도록 로그인 토큰을 저장합니다.</translation> <translation id="7329842439428490522">배터리 전원으로 실행할 때 사용자 입력이 없어서 화면이 꺼질 때까지 걸리는 시간을 지정합니다. @@ -2366,6 +2430,12 @@ <translation id="7349338075015720646">사용자가 개입하지 않아도 자동 설치되며 사용자가 제거하거나 사용 중지할 수 없는 웹사이트의 목록을 지정합니다 정책 목록의 각 항목은 'url' 및 'launch_container' 등 2개의 멤버가 포함된 객체입니다. 'url'은 설치할 웹 앱의 URL이어야 하며 'launch_container'는 웹 앱이 설치된 뒤 어떻게 열릴지 표시하는 'window' 또는 'tab'이어야 합니다. 'launch_container'가 생략된 경우, Chrome에서 앱이 프로그레시브 웹 앱이라고 간주하면 창으로 열리고 그렇지 않으면 탭으로 열립니다.</translation> +<translation id="735902178936442460">이 정책은 기기 이름, 네트워크 주소 등 기기를 식별하는 데 사용할 수 있는 정보의 보고 여부를 제어합니다. + + 이 정책이 설정되어 있지 않거나 True로 설정되어 있으면 기기 식별에 사용될 수 있는 정보가 수집됩니다. + 이 정책이 False로 설정되어 있으면 기기 식별에 사용될 수 있는 정보가 수집되지 않습니다. + + 이 정책은 <ph name="CHROME_REPORTING_EXTENSION_NAME" />이(가) 사용 설정되어 있고 기기가 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />에 등록되어 있는 경우에만 적용됩니다.</translation> <translation id="7367028210010532881">세이프 브라우징 서비스에서는 사용자가 악성 사이트로 신고된 사이트로 이동할 때 경고 페이지를 표시합니다. 이 설정을 사용하면 사용자가 경고 페이지를 무시하고 악성 사이트로 이동할 수 없게 됩니다. 이 설정을 사용 중지하거나 구성하지 않으면 사용자가 경고 페이지를 무시하고 신고된 사이트로 이동할 수 있습니다. @@ -2622,6 +2692,15 @@ <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> 전송 대상의 이름</translation> <translation id="7980227303582973781">특별한 제한 없음</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">가상 머신이 Chrome OS에서 실행되도록 허용할지 여부를 제어할 수 있도록 허용합니다. + + 이 정책이 True로 설정되어 있으면 기기에서 가상 머신을 실행할 수 있습니다. + 이 정책이 False로 설정되어 있으면 기기에서 가상 머신을 실행할 수 없습니다. + VirtualMachinesAllowed, CrostiniAllowed, DeviceUnaffiliatedCrostiniAllowed가 Crostini에 적용되어 있을 때 실행할 수 있으려면 세 가지 정책이 모두 True로 설정되어 있어야 합니다. + + 이 정책이 False로 변경되면 새 Crostini 컨테이너를 시작하도록 적용되지만 이미 실행 중인 컨테이너는 종료되지 않습니다. + 이 정책이 관리 기기에서 설정되어 있지 않으면 기기에서 가상 머신을 실행할 수 없습니다. + 관리되지 않는 기기는 가상 머신을 실행할 수 있습니다.</translation> <translation id="802147957407376460">화면을 0도 회전</translation> <translation id="8033913082323846868">이 정책은 M70에서 지원이 중단되었습니다. 대신 AutofillAddressEnabled 및 AutofillCreditCardEnabled를 사용하시기 바랍니다. @@ -2666,10 +2745,17 @@ 이 정책이 설정되어 있지 않으면 기본 설정된 시간이 적용됩니다. 정책 값은 밀리초 단위로 지정해야 하며, 유휴 지연 시간보다 작거나 같도록 값이 잘립니다.</translation> +<translation id="8138009212169037227">이 정책은 정책 데이터 및 정책 가져오기 시기의 보고 여부를 제어합니다. + + 이 정책이 설정되어 있지 않거나 True로 설정되어 있으면 정책 데이터 및 정책 가져오기 시기에 관한 정보가 수집됩니다. + 이 정책이 False로 설정되어 있으면 정책 데이터 및 정책 가져오기 시기에 관한 정보가 수집되지 않습니다. + + 이 정책은 <ph name="CHROME_REPORTING_EXTENSION_NAME" />이(가) 사용 설정되어 있고 기기가 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />에 등록되어 있는 경우에만 적용됩니다.</translation> <translation id="8140204717286305802">네트워크 유형과 하드웨어 주소를 포함한 네트워크 인터페이스 목록을 서버에 보고합니다. 정책이 false로 설정된 경우 인터페이스 목록이 보고되지 않습니다.</translation> <translation id="8141795997560411818">이 정책은 사용자가 Android Google 드라이브 앱을 사용하지 못하게 막지 않습니다. Google 드라이브에 액세스하지 못하게 하려면 Android Google 드라이브 앱 설치를 허용하지 않아야 합니다.</translation> +<translation id="8142894094385450823">관리 세션에서 사용할 추천 언어를 설정합니다.</translation> <translation id="8146727383888924340">사용자가 Chrome OS 등록을 통해 쿠폰을 사용할 수 있게 합니다.</translation> <translation id="8148785525797916822">더 이상 지원되지 않는 컴퓨터 또는 운영체제에서 <ph name="PRODUCT_NAME" />이(가) 실행 중일 때 표시되는 경고를 무시합니다.</translation> <translation id="8148901634826284024">고대비 모드 접근성 기능을 사용하도록 설정합니다. @@ -2717,6 +2803,28 @@ 이러한 설정은 수동으로 구성할 필요가 없습니다. 사용이 간편한 Windows, Mac, Linux용 템플릿을 <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />에서 다운로드하여 사용할 수 있습니다. Windows에서는 GPO를 통해 정책을 설정하는 것이 좋습니다. 하지만 <ph name="MS_AD_NAME" /> 도메인에 연결된 Windows 인스턴스의 경우 아직 레지스트리를 통한 정책 프로비저닝이 지원됩니다.</translation> +<translation id="8264653492961233132">사용자가 개입하지 않아도 자동으로 설치되고 사용자가 삭제하거나 + 사용 중지할 수 없는 앱 및 확장 프로그램의 목록을 지정합니다. + 앱/확장 프로그램의 향후 버전에서 요청하는 추가 권한을 포함하여 + 앱/확장 프로그램에서 요청하는 모든 권한은 사용자의 개입 없이 + 암묵적으로 허용됩니다. 또한 권한은 enterprise.deviceAttributes + 및 enterprise.platformKeys 확장 프로그램 API에 부여됩니다 + (이 두 API는 강제 설치되지 않은 앱/확장 프로그램에는 + 사용할 수 없음). + + 이 정책은 잠재적으로 충돌할 수 있는 <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> 정책보다 우선합니다. 이전에 강제 설치된 앱 또는 확장 프로그램이 목록에서 삭제되면 <ph name="PRODUCT_NAME" />에 의해 자동으로 제거됩니다. + + <ph name="MS_AD_NAME" /> 도메인에 가입되지 않은 Windows 인스턴스는 Chrome 웹 스토어에 포함된 앱/확장 프로그램으로만 강제 설치가 제한됩니다. + + 확장 프로그램의 소스 코드는 사용자가 개발자 도구를 통해 변경할 수 있습니다(확장 프로그램의 오작동을 야기할 수 있음). 이 부분이 걱정된다면 <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> 정책을 설정해야 합니다. + + 정책의 각 목록 항목은 확장 프로그램 ID 및 선택적으로 ‘업데이트’ URL을 세미콜론(<ph name="SEMICOLON" />)으로 구분해 놓은 문자열입니다. 확장 프로그램 ID는 개발자 모드일 때 <ph name="CHROME_EXTENSIONS_LINK" />에서 확인되는 것과 같은 32자의 문자열입니다. ‘업데이트’ URL은 지정된 경우 <ph name="LINK_TO_EXTENSION_DOC1" />에서 설명한 것처럼 업데이트 매니페스트 XML 문서로 연결되어야 합니다. 기본적으로 Chrome 웹 스토어의 업데이트 URL(현재 ‘https://clients2.google.com/service/update2/crx’)이 사용됩니다. 이 정책에서 설정된 ‘업데이트’ URL은 초기 설치용으로만 사용되며, 이후 확장 프로그램의 업데이트는 확장 프로그램의 매니페스트에 있는 업데이트 URL을 사용합니다. 또한 ‘업데이트’ URL을 명시적으로 지정하는 것은 <ph name="PRODUCT_NAME" /> 버전 67 이상에서 필수입니다. + + 예를 들어 <ph name="EXTENSION_POLICY_EXAMPLE" />표준 Chrome 웹 스토어 ‘업데이트’ URL에서 <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> 앱을 설치합니다. 확장 프로그램 호스팅에 관한 정보는 <ph name="LINK_TO_EXTENSION_DOC2" /> 페이지를 참조하세요. + + 이 정책이 설정되지 않으면 어떠한 앱 또는 확장 프로그램도 자동 설치되지 않고 사용자는 <ph name="PRODUCT_NAME" />의 모든 앱 또는 확장 프로그램을 제거할 수 있습니다. + + 이 정책은 시크릿 모드에는 적용되지 않습니다.</translation> <translation id="8274603902181597201">사용자의 ecryptfs 홈 디렉토리를 삭제하고 ext4로 암호화된 새 홈 디렉토리로 시작합니다.</translation> <translation id="8285435910062771358">전체화면 돋보기 사용</translation> <translation id="8288199156259560552">Android Google 위치 서비스 사용</translation> @@ -3003,6 +3111,7 @@ 이 정책은 <ph name="MS_AD_NAME" /> 도메인에 가입되어 있지 않은 Windows 인스턴스에는 사용할 수 없습니다.</translation> <translation id="9035964157729712237">차단목록에서 제외할 확장 프로그램 ID</translation> <translation id="9042911395677044526"><ph name="PRODUCT_OS_NAME" /> 기기에 사용자별로 적용되는 네트워크 구성을 사용하도록 허용합니다. 네트워크 구성은 <ph name="ONC_SPEC_URL" />에서 설명한 개방형 네트워크 구성에서 정의한 대로 JSON 형식의 문자열입니다. </translation> +<translation id="9077227880520270584">기기 로컬 계정 자동 로그인 타이머</translation> <translation id="9084985621503260744">동영상 활동이 전원 관리에 영향을 미치는지 여부 지정</translation> <translation id="9088433379343318874">관리 대상 사용자 콘텐츠 제공업체 사용</translation> <translation id="9088444059179765143">자동 시간대 감지 방법 설정</translation>
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb index 4336ebe..fef8d46 100644 --- a/components/policy/resources/policy_templates_lv.xtb +++ b/components/policy/resources/policy_templates_lv.xtb
@@ -129,6 +129,7 @@ <translation id="1387596372902085462">Vai norādīt, ka Symantec Corporation mantotā PKI infrastruktūra ir uzticama</translation> <translation id="1393485621820363363">Iespējoti uzņēmuma ierīču printeri</translation> <translation id="1397855852561539316">Noklusējuma meklētājprogrammas ieteikumu URL</translation> +<translation id="142346659686073702">Ļauj nesaistītiem lietotājiem izmantot Crostini</translation> <translation id="1426410128494586442">Jā</translation> <translation id="1427655258943162134">Starpniekservera adrese vai URL</translation> <translation id="1435659902881071157">Ierīces līmeņa tīkla konfigurācija</translation> @@ -379,6 +380,12 @@ Ja šai politikai nav iestatīta vērtība, ir spēkā tādi paši iestatījumi kā gadījumos, kad politika ir iespējota (skatiet iepriekš sniegto aprakstu).</translation> <translation id="2113068765175018713">Ierobežot ierīces darbspējas laiku, veicot automātisku atsāknēšanu</translation> +<translation id="2116790137063002724">Šī politika kontrolē, vai ziņot informāciju, kas var tikt izmantota lietotāju identificēšanai, piemēram, operētājsistēmas pieteikšanās datus, <ph name="PRODUCT_NAME" /> profila pieteikšanās datus, <ph name="PRODUCT_NAME" /> profila nosaukumu, <ph name="PRODUCT_NAME" /> profila ceļu un <ph name="PRODUCT_NAME" /> izpildāmo ceļu. + + Ja šī politika nav iestatīta vai tai ir iestatīta vērtība “True”, informācija, ko var izmantot, lai identificētu lietotājus, tiek apkopota. + Ja šai politikai ir iestatīta vērtība “False”, informācija, kas var tikt izmantota lietotāju identificēšanai, netiek apkopota. + + Šī politika ir spēkā tikai tad, ja ir iespējots paplašinājums <ph name="CHROME_REPORTING_EXTENSION_NAME" /> un mašīna ir reģistrēta pakalpojumā <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Paziņojumu atļaušana šajās vietnēs</translation> <translation id="2131902621292742709">Aizkave līdz ekrāna aptumšošanai, ja ierīce darbojas ar akumulatora jaudu</translation> <translation id="2132732175597591362">Pārvalda URL rakstu balto sarakstu ar vietnēm, kurās atskaņošana vienmēr būs iespējota. @@ -881,6 +888,22 @@ Ja šī politika nav iestatīta, visām vietnēm tiek izmantota vispārējā noklusējuma vērtība no “DefaultCookiesSetting” (ja tā ir iestatīta) vai no lietotāja personiskās konfigurācijas. Skatiet arī politikas “CookiesBlockedForUrls” un “CookiesSessionOnlyForUrls”. Ņemiet vērā, ka šo trīs politiku URL rakstiem ir savstarpēji jāatbilst, jo politiku prioritāte nav norādīta.</translation> +<translation id="3373364525435227558">Iestata vienu vai vairākas ieteiktās lokalizācijas pārvaldītai sesijai, ļaujot lietotājiem ērti izvēlēties vienu no šīm lokalizācijām. + + Pirms pārvaldītas sesijas palaišanas lietotājs var izvēlēties lokalizāciju un tastatūras izkārtojumu. Pēc noklusējuma visas vietnes, kuras atbalsta <ph name="PRODUCT_OS_NAME" />, ir uzskaitītas alfabētiskā secībā. Šo politiku var izmantot, lai pārvietotu ieteikto lokalizāciju kopu uz saraksta augšdaļu. + + Ja šī politika nav iestatīta, iepriekš tiks atlasīta pašreizējā lietotāja saskarnes lokalizācija. + + Ja šī politika ir iestatīta, ieteiktās lokalizācijas tiks pārvietotas uz saraksta augšpusi un tiks vizuāli nošķirtas no visām citām lokalizācijām. Ieteiktās lokalizācijas tiks uzskaitītas tādā secībā, kādā tās parādās politikā. Pirmā ieteiktā lokalizācija tiks iepriekš atlasīta. + + Ja ir vairāk nekā viena ieteiktā lokalizācija, tiek pieņemts, ka lietotāji vēlēsies atlasīt kādu no šim lokalizācijām. Sākot pārvaldīto sesiju, lokalizācijas un tastatūras izkārtojuma atlase tiks uzskatāmi piedāvāta. Pretējā gadījumā tiek pieņemts, ka lielākā daļa lietotāju vēlēsies izmantot iepriekš atlasīto lokalizāciju. Sākot pārvaldīto sesiju, lokalizācijas un tastatūras izkārtojuma atlase netiks piedāvāta tik uzskatāmi. + + Ja šī politika ir iestatīta un ir iespējota automātiska pieteikšanās (skatīt politikas |DeviceLocalAccountAutoLoginId| un |DeviceLocalAccountAutoLoginDelay|), automātiski sāktās pārvaldītās sesijas laikā tiks izmantota pirmā ieteiktā lokalizācija un populārākais tastatūras izkārtojums, kas atbilst šai lokalizācijai. + + Iepriekš atlasītais tastatūras izkārtojums vienmēr būs vispopulārākais izkārtojums, kas atbilst iepriekš atlasītajai lokalizācijai. + + Šo politiku var iestatīt tikai kā ieteikumu. Varat izmantot šo politiku, lai virzītu ieteikto lokalizāciju kopu uz augšpusi, bet lietotājiem vienmēr ir atļauts izvēlēties jebkuru lokalizāciju, ko viņu sesijai atbalsta <ph name="PRODUCT_OS_NAME" />. + </translation> <translation id="3381968327636295719">Pēc noklusējuma lieto saimniekdatora pārlūku</translation> <translation id="3414260318408232239">Ja šī politika nav konfigurēta, pārlūkā <ph name="PRODUCT_NAME" /> tiek izmantota noklusējuma minimālā versija TLS 1.0. @@ -1114,6 +1137,11 @@ Ja šai politikai ir iestatīta vērtība Patiesa vai politika nav iestatīta, lietotāji var izpirkt piedāvājumus, izmantojot operētājsistēmas Chrome OS reģistrāciju. Ja šai politikai ir iestatīta vērtība Nepatiesa, lietotāji nevar izpirkt piedāvājumus.</translation> +<translation id="4008507541867797979">Ja šai politikai ir iestatīta vērtība “True” vai tā nav konfigurēta, <ph name="PRODUCT_OS_NAME" /> pieteikšanās ekrānā būs redzami esošie lietotāji un būs atļauts vienu izvēlēties. + + Ja šai politikai ir iestatīta vērtība “False”, <ph name="PRODUCT_OS_NAME" /> pieteikšanās ekrānā esošie lietotāji būs redzami. Tiks parādīts parastais pierakstīšanās ekrāns (vaicājot lietotāja e-pasta adresi un paroli vai tālruni) vai SAML starpposma ekrāns (ja tas ir iespējots, izmantojot <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> politiku), ja vien nav konfigurēta pārvaldītā sesija. Ja pārvaldītā sesija ir konfigurēta, tiks parādīti tikai pārvaldītās sesijas konti, ļaujot izvēlēties vienu no tiem. + + Ņemiet vērā, ka šī politika neietekmē to, vai ierīce uztur vai atmet vietējos lietotāja datus.</translation> <translation id="4010738624545340900">Atļauj izsaukt failu atlases dialoglodziņus</translation> <translation id="4012737788880122133">Atspējo automātiskos atjauninājumus, ja politikai ir iestatīta vērtība “true”. @@ -1531,6 +1559,15 @@ Ja šī politika nav iestatīta, visām vietnēm tiks izmantota globālā noklusējuma vērtība no politikas DefaultNotificationsSetting (ja tā ir iestatīta) vai pretējā gadījumā no lietotāja personīgās konfigurācijas.</translation> <translation id="5219844027738217407">Android lietotnēs šī politika ietekmē tikai mikrofonu. Kad šī politika ir iestatīta kā patiesa, mikrofons tiek izslēgts visās Android lietotnēs bez izņēmuma.</translation> +<translation id="5228316810085661003">Ierīces lokālā konta automātiskās pieteikšanās aizkave. + + Ja politikas |DeviceLocalAccountAutoLoginId| vērtība nav iestatīta, šī politika nedarbojas. Pretējā gadījumā ir spēkā tālāk minētais. + + Ja šī politika ir iestatīta, tā nosaka, pēc cik ilga laika kopš lietotāja pēdējās aktivitātes notiek automātiska pieteikšanās ierīces lokālajā kontā, kas norādīts, izmantojot politiku |DeviceLocalAccountAutoLoginId|. + + Ja šī politika nav iestatīta, noildzes laiks būs norādīts “0 milisekundes”. + + Šīs politikas vērtība tiek norādīta milisekundēs.</translation> <translation id="523505283826916779">Pieejamības iestatījumi</translation> <translation id="5247006254130721952">Bloķēt bīstamas lejupielādes</translation> <translation id="5248863213023520115">Iestata šifrējuma veidus, kas ir atļauti, pieprasot Kerberos biļetes no <ph name="MS_AD_NAME" /> servera. @@ -1551,6 +1588,12 @@ <translation id="5272684451155669299">Ja ir iestatīta vērtība “true”, lietotājs var izmantot aparatūru Chrome ierīcēs, lai attālināti apstiprinātu tās identitāti konfidencialitātes sertificēšanas CA, platformā <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> izmantojot funkciju <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Ja ir iestatīta vērtība “false” vai tā nav iestatīta, API izsaukumi neizdosies un tiks rādīts kļūdas kods.</translation> +<translation id="5277806246014825877">Lietotāja iespējošana rīka Crostini palaišanai. + + Ja šai politikai ir iestatīta vērtība “False”, rīks Crostini lietotājam nav iespējots. + Ja šī politika nav iestatīta vai tai ir iestatīta vērtība “True”, rīks Crostini lietotājam ir iespējots, ja vien to atļauj arī citi iestatījumi. + Visu trīs politiku, VirtualMachinesAllowed, CrostiniAllowed un DeviceUnaffiliatedCrostiniAllowed, kad tās ir attiecināmas, vērtībām ir jābūt “True”, lai rīka Crostini darbība būtu atļauta. + Nomainot šīs politikas vērtību uz “False”, tas attiecas uz jaunu rīka Crostini konteineru sākšanu, bet neaizver jau darbībā esošos konteinerus.</translation> <translation id="5283457834853986457">Atspējo spraudņu meklētāju (novecojis)</translation> <translation id="5288772341821359899">Ja politika ir iestatīta, WebRTC izmantotais UDP portu diapazons ir ierobežots līdz portu intervālam (tostarp galapunktiem). @@ -1589,6 +1632,7 @@ Ja šī politika nav iestatīta, tiks lietota politika AskNotifications un lietotājs to varēs mainīt.</translation> <translation id="538108065117008131">Atļauj produktam <ph name="PRODUCT_FRAME_NAME" /> apstrādāt tālāk minētos satura veidus.</translation> +<translation id="5391388690191341203">Ierīces lokālais konts automātiskas pieteikšanās veikšanai</translation> <translation id="5392172595902933844">Informācija par Android statusu tiek nosūtīta atpakaļ uz serveri. @@ -1619,6 +1663,7 @@ Ja šī politika nav iestatīta, pēc noklusējuma renderēšanu ir atļauts veikt saimniekdatora pārlūkam, bet šo vērtību pēc izvēles var ignorēt un likt, lai HTML lapu renderēšanu pēc noklusējuma veiktu <ph name="PRODUCT_FRAME_NAME" /> .</translation> <translation id="5464816904705580310">Konfigurē iestatījumus pārvaldītajiem lietotājiem.</translation> <translation id="546726650689747237">Aizkave līdz ekrāna aptumšošanai, ja ierīce darbojas ar maiņstrāvu</translation> +<translation id="5469143988693423708">Lietotājam ir iespējota rīka Crostini darbība</translation> <translation id="5469825884154817306">Bloķē attēlus šajās vietnēs</translation> <translation id="5475361623548884387">Iespējo drukāšanu</translation> <translation id="547601067149622666">Neatļaut reklāmu rādīšanu vietnēs, kurās tiek rādītas traucējošas reklāmas</translation> @@ -1670,6 +1715,9 @@ Ņemiet vērā, ka tas nav ieteicams, jo var atļaut paplašinājuma nameConstraints ignorēšanu, kas ierobežo tos saimniekdatora nosaukumus, kuriem var autorizēt minēto sertifikātu. Ja šī politika nav iestatīta vai ir iestatīta vērtība “false”, servera sertifikāti, kam trūks paplašinājuma subjectAlternativeName, kurā ietverts DNS nosaukums vai IP adrese, nebūs uzticami.</translation> +<translation id="5581292529942108810">Ar pārlūkprogrammas Chrome pārskatu paplašinājumu saistītu politiku konfigurēšana. + + Šī politika ir spēkā tikai tad, ja ir iespējots paplašinājums <ph name="CHROME_REPORTING_EXTENSION_NAME" /> un mašīna ir reģistrēta pakalpojumā <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Google atrašanās vietu pakalpojumu kontrole Android operētājsistēmā</translation> <translation id="5586942249556966598">Nedarīt neko</translation> <translation id="5630352020869108293">Atjaunot pēdējo sesiju</translation> @@ -1913,6 +1961,11 @@ <translation id="6310223829319187614">Domēna nosaukuma automātiskās pabeigšanas iespējošana lietotāja pierakstīšanās laikā</translation> <translation id="6315673513957120120">Ja lietotāji atver vietnes, kurās ir SSL kļūdas, pārlūkā Chrome tiek parādīta brīdinājuma lapa. Pēc noklusējuma, kā arī tad, ja šai politikai ir iestatīta vērtība Patiesa, lietotājiem ir atļauts no brīdinājuma lapas pāriet uz vietni. Ja politikai ir iestatīta vērtība Nepatiesa, lietotājiem tiek liegts no brīdinājuma lapas pāriet uz vietni.</translation> +<translation id="6352543686437322588">Ierīces lokālais konts, lai automātiski pieteiktos pēc kavēšanās. + + Ja šī politika ir iestatīta, norādītā sesija tiks automātiski pieteikta pēc tam, kad pieteikšanās ekrānā būs pagājis laika posms bez lietotāja aktivitātes. Ierīces lokālajam kontam jau ir jābūt konfigurētam (skatīt |DeviceLocalAccounts|). + + Ja šī politika nav iestatīta, automātiskā pieteikšanās nenotiks.</translation> <translation id="6353901068939575220">Norāda parametrus, kas tiek izmantoti, meklējot URL ar metodi POST. Izmantojot šo metodi, tiek meklēti ar komatu atdalītu vārdu/vērtību pāri. Ja vērtība ir veidnes parametrs, piemēram, {searchTerms} (iepriekšējā piemērā), tas tiks aizstāts ar īstiem meklēšanas vienumu datiem. Šī politika nav obligāta. Ja tā nav iestatīta, meklēšanas pieprasījums tiks nosūtīts, izmantojot metodi GET. @@ -2279,6 +2332,11 @@ Ja šī politika nav iestatīta, lietotājs varēs mainīt šo iestatījumu manuāli.</translation> <translation id="723103540848640830">Bloķēšanas ekrāna PIN minimālā garuma iestatīšana</translation> +<translation id="7232816984286843471">Ja šai politikai ir iestatīta vērtība “False”, nesaistīti lietotāji nevarēs izmantot rīku Crostini. + + Ja šī politika nav iestatīta vai tai ir iestatīta vērtība “True”, visi lietotāji varēs izmantot rīku Crostini, ciktāl tas ir saskaņā arī ar citiem iestatījumiem. + Visu trīs politiku, VirtualMachinesAllowed, CrostiniAllowed un DeviceUnaffiliatedCrostiniAllowed, kad tās ir attiecināmas, vērtībām ir jābūt “True”, lai atļautu rīka Crostini darbību. + Nomainot šīs politikas vērtību uz “False”, tas attiecas uz jaunu rīka Crostini konteineru sākšanu, bet neaizver jau darbībā esošos konteinerus.</translation> <translation id="7234280155140786597">Aizliegto vietējās ziņojumapmaiņas saimniekdatoru nosaukumi (vai “*”, lai norādītu visus)</translation> <translation id="7236775576470542603">Iestatiet noklusējuma veidu ekrāna lupai, kas ir iespējota pieteikšanās ekrānā. @@ -2326,6 +2384,12 @@ <translation id="7311458740754205918">Ja šai politikai ir iestatīta vērtība “Patiesa” vai tā nav iestatīta, lapā “Jauna cilne” var tikt rādīti satura ieteikumi, pamatojoties uz lietotāja pārlūkošanas vēsturi, interesēm vai atrašanās vietu. Ja šai politikai ir iestatīta vērtība “Nepatiesa”, lapā “Jauna cilne” netiek rādīti automātiski veidoti satura ieteikumi.</translation> +<translation id="7313793931637495417">Šī politika nosaka, vai ziņot par versijas informāciju, piemēram, operētājsistēmas versiju, operētājsistēmas platformu, operētājsistēmas arhitektūru, <ph name="PRODUCT_NAME" /> versiju un <ph name="PRODUCT_NAME" /> kanālu. + + Ja šī politika nav iestatīta vai tai ir iestatīta vērtība “True”, tiek apkopota versijas informācija. + Ja šai politikai ir iestatīta vērtība ir “False”, versijas informācija netiek apkopota. + + Šī politika ir spēkā tikai tad, ja ir iespējots paplašinājums <ph name="CHROME_REPORTING_EXTENSION_NAME" /> un mašīna ir reģistrēta pakalpojumā <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Papildu komandrindas parametri pārlūkprogrammai <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Darbojas līdzīgi politikai Wipe (vērtība 2), taču mēģina saglabāt pieteikšanās marķierus, tādējādi lietotājam nav jāpierakstās atkārtoti.</translation> <translation id="7329842439428490522">Tiek norādīts laika periods, kurā lietotājam ir jāveic kāda darbība, pretējā gadījumā ekrāns tiek izslēgts, ja ierīce darbojas ar akumulatora jaudu. @@ -2358,6 +2422,12 @@ <translation id="7349338075015720646">Saraksts ar vietnēm, kas tika instalētas neuzraudzīti (bez lietotāja mijiedarbības) un ko lietotājs nevar atinstalēt vai atspējot. Katrs politikas saraksta vienums ir objekts ar diviem elementiem: “url” un “launch_container”. Elementam “url” jābūt instalējamās tīmekļa lietotnes vietrādim URL, savukārt elementam “launch_container” — vai nu “window”, vai “tab”, kas nosaka veidu, kādā tīmekļa vietne tiks atvērta pēc tās instalēšanas. Izlaižot elementu “launch_container”, ja pārlūks Chrome uzskatīs, ka tā ir progresīvā tīmekļa lietotne, lietotne tiks palaista loga veidā, citādi — cilnes veidā.</translation> +<translation id="735902178936442460">Šī politika nosaka, vai ziņot informāciju, kas var tikt izmantota iekārtu identificēšanai, piemēram, iekārtas nosaukumu un tīkla adreses. + + Ja šī politika nav iestatīta vai tai ir iestatīta vērtība “True”, informācija, kas var tikt izmantota iekārtu identificēšanai, tiek apkopota. + Ja šai politikai ir iestatīta vērtība “False”, informācija, kas var tikt izmantota iekārtu identificēšanai, netiek apkopota. + + Šī politika ir spēkā tikai tad, ja ir iespējots paplašinājums <ph name="CHROME_REPORTING_EXTENSION_NAME" /> un mašīna ir reģistrēta pakalpojumā <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">Kad lietotāji pāriet uz vietnēm, kas ir atzīmētas kā iespējami ļaunprātīgas, tiek rādīta funkcijas Droša pārlūkošana brīdinājuma lapa. Ja šis iestatījums ir iespējots, lietotāji nevar pāriet no brīdinājuma lapas uz ļaunprātīgo vietni. Ja šis iestatījums ir atspējots vai nav konfigurēts, lietotāji pēc brīdinājuma saņemšanas var pāriet uz vietni, kas atzīmēta kā nevēlama. @@ -2611,6 +2681,14 @@ <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> galamērķa nosaukums</translation> <translation id="7980227303582973781">Nav specifisku ierobežojumu</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Ļauj kontrolēt, vai virtuālajām ierīcēm ir atļauts darboties Chrome operētājsistēmā. + + Ja politikai ir iestatīta vērtība “True”, ierīcei ir atļauts palaist virtuālās mašīnas. + Ja politikai ir iestatīta vērtība “False”, ierīcei nebūs atļauts palaist virtuālās mašīnas. + Visu trīs politiku, VirtualMachinesAllowed, CrostiniAllowed un DeviceUnaffiliatedCrostiniAllowed, kad tās ir attiecināmas, vērtībām ir jābūt “True”, lai rīka Crostini darbība būtu atļauta. + Nomainot šīs politikas vērtību uz “False”, tas attiecas uz jaunu virtuālo mašīnu sākšanu, bet neaizver jau darbībā esošās virtuālās mašīnas. + Ja šī politika nav iestatīta pārvaldītā ierīcē, ierīcei nav atļauts palaist virtuālās mašīnas. + Nepārvaldītām ierīcēm ir atļauts palaist virtuālās mašīnas.</translation> <translation id="802147957407376460">Pagriezt ekrānu par 0 grādiem</translation> <translation id="8033913082323846868">Šī politika laidienā M70 vairs netiek izmantota, lūdzu, tās vietā izmantojiet “AutofillAddressEnabled” un “AutofillCreditCardEnabled”. @@ -2655,10 +2733,17 @@ Ja šīs politikas vērtība nav iestatīta, tiek izmantots noklusējuma laika periods. Politikas vērtību nedrīkst norādīt milisekundēs. Ir jāiestata vērtības, kas ir mazākas par aizkavi līdz dīkstāvei vai kas ir vienādas ar to.</translation> +<translation id="8138009212169037227">Šī politika nosaka, vai ziņot par politikas datiem un politikas ieneses laiku. + + Ja šī politika nav iestatīta vai tai ir iestatīta vērtība “True”, tiek apkopoti politikas dati un politikas ieneses laiks. + Ja šai politikai ir iestatīta vērtība “False”, politikas dati un politikas ieneses laiks netiek apkopoti. + + Šī politika ir spēkā tikai tad, ja ir iespējots paplašinājums <ph name="CHROME_REPORTING_EXTENSION_NAME" /> un mašīna ir reģistrēta pakalpojumā <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Nosūtiet serverim sarakstu ar tīkla saskarnēm, to veidiem un aparatūras adresēm. Ja šīs politikas iestatījums ir “False”, saskarņu saraksts netiks nosūtīts.</translation> <translation id="8141795997560411818">Šī politika neliedz lietotājam izmantot Android lietotni Google disks. Ja nevēlaties atļaut piekļuvi lietotnei Google disks, neatļaujiet arī instalēt Android lietotni Google disks.</translation> +<translation id="8142894094385450823">Ieteikto lokalizāciju iestatīšana pārvaldītai sesijai</translation> <translation id="8146727383888924340">Atļaut lietotājiem izpirkt piedāvājumus, izmantojot Chrome OS reģistrāciju</translation> <translation id="8148785525797916822">Aptur brīdinājuma rādīšanu, kad <ph name="PRODUCT_NAME" /> darbojas datorā vai operētājsistēmā, kura vairs netiek atbalstīta.</translation> <translation id="8148901634826284024">Iespējojiet augsta kontrasta pieejamības funkciju. @@ -2706,6 +2791,26 @@ Šie iestatījumi nav jākonfigurē manuāli. Ērti lietojamas veidnes operētājsistēmai Windows, Mac un Linux ir pieejamas lejupielādei vietnē <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />. Operētājsistēmā Windows politikas konfigurēšanai ieteicams izmantot GPO, taču Windows sistēmās, kas ir pievienotas <ph name="MS_AD_NAME" /> domēnam, politikas izvietošanai var izmantot arī reģistru.</translation> +<translation id="8264653492961233132">Nosaka sarakstu ar lietotnēm un paplašinājumiem, kas tiek instalēti klusajā režīmā + bez lietotāja iejaukšanās un ko lietotājs nevar atinstalēt vai atspējot. + Visas lietotņu/paplašinājumu pieprasītās atļaujas, tostarp visas konkrētās + lietotnes/paplašinājuma turpmāko versiju pieprasītās papildu atļaujas, tiek piešķirtas tieši bez lietotāja iejaukšanās. + Turklāt atļaujas tiek piešķirtas paplašinājumu saskarnēm API + enterprise.deviceAttributes un enterprise.platformKeys. (Šīs divas saskarnes API nav pieejamas lietotnēm/paplašinājumiem, kas nav instalēti piespiedu kārtā.) + + Šī politika ir svarīgāka par iespējami konfliktējošo politiku <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" />. Ja lietotne vai paplašinājums, kas iepriekš tika instalēts piespiedu kārtā, tiek noņemts no šī saraksta, to automātiski atinstalē <ph name="PRODUCT_NAME" />. + + Windows datoros, kas nav pievienoti <ph name="MS_AD_NAME" /> domēnam, piespiedu instalēšana attiecas tikai uz lietotnēm un paplašinājumiem, kas norādīti Chrome interneta veikalā. + + Ņemiet vērā, ka jebkura paplašinājuma pirmkodu lietotāji var mainīt izstrādātāja rīkos (potenciāli atveidojot paplašinājumu kā nefunkcionējošu). Ja tas rada problēmas, ir jāiestata politika <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Katrs politikas saraksta vienums ir virkne, kas ietver paplašinājuma ID un atjaunināšanas URL, kuri atdalīti ar semikolu (<ph name="SEMICOLON" />). Paplašinājuma ID ir 32 burtu virkne, kas ir redzama, piemēram, lapā <ph name="CHROME_EXTENSIONS_LINK" /> izstrādātāja režīmā. Atjaunināšanas vietrādim URL (ja tas ir norādīts) ir jānovirza uz atjauninājuma manifesta XML dokumentu, kā norādīts šeit: <ph name="LINK_TO_EXTENSION_DOC1" />. Pēc noklusējuma tiek izmantots Chrome interneta veikala atjaunināšanas URL (šobrīd: "https://clients2.google.com/service/update2/crx"). Ņemiet vērā, ka šajā politikā iestatītais atjaunināšanas URL tiek izmantots tikai sākotnējai instalācijai; nākamajiem paplašinājuma atjauninājumiem tiek izmantots paplašinājuma manifestā norādītais atjaunināšanas URL. Ņemiet vērā, ka atjaunināšanas URL tieša norādīšana bija obligāta visās <ph name="PRODUCT_NAME" /> versijās, kas ir vecākas par versiju 67 (ieskaitot). + + Piemēram, <ph name="EXTENSION_POLICY_EXAMPLE" /> instalē lietotni <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> izmantojot Chrome interneta veikala standarta atjaunināšanas URL. Plašāku informāciju par paplašinājumu mitināšanu skatiet šeit: <ph name="LINK_TO_EXTENSION_DOC2" />. + + Ja šī politika nav iestatīta, neviena lietotne un paplašinājums netiek instalēts automātiski un lietotājs var atinstalēt jebkuru <ph name="PRODUCT_NAME" /> pārlūkā esošu lietotni vai paplašinājumu. + + Ņemiet vērā, ka šī politika neattiecas uz inkognito režīmu.</translation> <translation id="8274603902181597201">Notīra lietotāja ecryptfs sākumdirektoriju un sāk ar jaunu ext4-encrypted sākumdirektoriju.</translation> <translation id="8285435910062771358">Pilnekrāna režīma lupa ir iespējota</translation> <translation id="8288199156259560552">Google atrašanās vietas pakalpojuma iespējošana operētājsistēmai Android</translation> @@ -2979,6 +3084,7 @@ <translation id="9035964157729712237">Paplašinājumu ID numuri, kas noņemami no melnā saraksta</translation> <translation id="9042911395677044526">Ļauj pārsūtīšanas tīkla konfigurāciju izmantot konkrētam lietotājam <ph name="PRODUCT_OS_NAME" /> ierīcē. Tīkla konfigurācija ir JSON formatēta virkne, kā definēts Atvērta tīkla konfigurācijas formātā, kas aprakstīts šeit: <ph name="ONC_SPEC_URL" /></translation> +<translation id="9077227880520270584">Ierīces lokālā konta automātiskas pieteikšanās taimeris</translation> <translation id="9084985621503260744">Video darbības ietekmes uz jaudas pārvaldību norādīšana</translation> <translation id="9088433379343318874">Iespējot uzraudzītā lietotāja satura nodrošinātāju</translation> <translation id="9088444059179765143">Automātiskās laika joslas noteikšanas metodes konfigurēšana</translation>
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb index fae7595..9a3be99 100644 --- a/components/policy/resources/policy_templates_ml.xtb +++ b/components/policy/resources/policy_templates_ml.xtb
@@ -141,6 +141,7 @@ <translation id="1387596372902085462">Symantec Corporation-ന്റെ Legacy PKI Infrastructure-ൽ വിശ്വാസ്യത അർപ്പിക്കണോ</translation> <translation id="1393485621820363363">പ്രവർത്തനക്ഷമമാക്കിയ എന്റർപ്രൈസ് ഉപകരണ പ്രിന്ററുകൾ</translation> <translation id="1397855852561539316">സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവ് നിര്ദേശിക്കുന്ന URL</translation> +<translation id="142346659686073702">അഫിലിയേറ്റ് ചെയ്യാത്ത ഉപയോക്താക്കളെ Crostini ഉപയോഗിക്കാന് അനുവദിക്കുക</translation> <translation id="1426410128494586442">അതെ</translation> <translation id="1427655258943162134">പ്രോക്സി സെര്വറിന്റെ വിലാസം അല്ലെങ്കില് URL</translation> <translation id="1432194160771348078"> @@ -220,7 +221,7 @@ <translation id="1522425503138261032">ഉപയോക്താക്കളുടെ ഭൌതിക ലൊക്കേഷന് ട്രാക്കുചെയ്യാന് സൈറ്റുകളെ സഹായിക്കുക</translation> <translation id="152657506688053119">സ്ഥിര തിരയൽ ദാതാവിനുള്ള ഇതര URL-കളുടെ ലിസ്റ്റ്</translation> <translation id="1530812829012954197">ഹോസ്റ്റ് ബ്രൗസറില് ഇനി പറയുന്ന URL പാറ്റേണുകള് എല്ലായ്പ്പോഴും റെന്ഡര് ചെയ്യുക</translation> -<translation id="1541170838458414064">അച്ചടിക്കാനുള്ള പേജിന്റെ വലുപ്പം നിയന്ത്രിക്കുക</translation> +<translation id="1541170838458414064">അച്ചടിക്കാനുള്ള പേജിന്റെ വലുപ്പം പരിമിതപ്പെടുത്തുക</translation> <translation id="1553684822621013552">ഈ നയത്തെ ശരി എന്ന് സജ്ജമാക്കിയിരിക്കുമ്പോൾ, ഉപയോക്താവിനായി ARC പ്രവർത്തനക്ഷമമാക്കും (അധിക നയ ക്രമീകരണ പരിശോധനകൾക്ക് വിധേയമായി - നിലവിലെ ഉപയോക്തൃ സെഷനിൽ എഫിമെറൽ മോഡോ @@ -425,6 +426,12 @@ ഈ നയം സജ്ജമാക്കാതെ വിടുന്നത് അത് പ്രവർത്തനക്ഷമമാക്കുന്നതിന് തുല്യമാണ്, മുകളിലുള്ള വിവരണം കാണുക.</translation> <translation id="2113068765175018713">സ്വയമേവ റീബൂട്ടുചെയ്ത് ഉപകരണ പ്രവർത്തനസമയം നിയന്ത്രിക്കുക</translation> +<translation id="2116790137063002724">OS ലോഗിൻ, <ph name="PRODUCT_NAME" /> പ്രൊഫൈൽ ലോഗിൻ, <ph name="PRODUCT_NAME" /> പ്രൊഫൈൽ പേര്, <ph name="PRODUCT_NAME" /> പ്രൊഫൈൽ പാത, <ph name="PRODUCT_NAME" /> നിർവഹിക്കാവുന്ന പാത എന്നിവ പോലുള്ള ഉപയോക്താവിനെ തിരിച്ചറിയുന്നതിന് ഉപയോഗിക്കാനാകുന്ന വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യണോ എന്നതിനെ ഈ നയം നിയന്ത്രിക്കുന്നു. + + ഈ നയം സജ്ജീകരിക്കാതിരിക്കുമ്പോഴും അല്ലെങ്കിൽ 'ശരി' എന്ന് സജ്ജീകരിക്കുമ്പോഴും, ഉപയോക്താക്കളെ തിരിച്ചറിയാനാകുന്ന വിവരങ്ങൾ ശേഖരിക്കും. + ഈ നയം 'തെറ്റ്' എന്ന സജ്ജീകരിക്കുമ്പോൾ, ഉപയോക്താക്കളെ തിരിച്ചറിയാനാകുന്ന വിവരങ്ങൾ ശേഖരിക്കില്ല. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> പ്രവർത്തനക്ഷമമാക്കുകയും മെഷീൻ <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> എന്നതിൽ എൻറോൾ ചെയ്തിരിക്കുമ്പോഴും മാത്രമേ ഈ നയം പ്രാബല്യത്തിൽ വരൂ.</translation> <translation id="2127599828444728326">ഈ സൈറ്റുകളില് അറിയിപ്പുകളെ അനുവദിക്കുക</translation> <translation id="2131902621292742709">ബാറ്ററി പവറിൽ പ്രവർത്തിക്കുമ്പോൾ സ്ക്രീൻ തെളിച്ചം കുറയുന്നതിന്റെ കാലതാമസം</translation> <translation id="2132732175597591362">എല്ലായ്പ്പോഴും പ്രവർത്തനക്ഷമമാക്കപ്പെടുന്ന, സ്വമേധയാ പ്ലേ ചെയ്യുന്ന URL പാറ്റേണുകളുടെ വൈറ്റ്ലിസ്റ്റിനെ നിയന്ത്രിക്കുന്നു. @@ -458,7 +465,7 @@ ഈ ലിസ്റ്റിലെ ഓരോ ഇനത്തിനും ഒരു വിപുലീകരണ-ശൈലിയുമായി പൊരുത്തപ്പെടുന്ന പാറ്റേണുണ്ട് (http://code.google.com/chrome/extensions/match_patterns.html കാണുക). ഈ ലിസ്റ്റിലെ ഒരു ഇനവുമായി പൊരുത്തപ്പെടുന്ന ഏത് URL-ൽ നിന്നും ഉപയോക്താക്കൾക്ക് ഇനങ്ങൾ എളുപ്പത്തിൽ ഇൻസ്റ്റാൾ ചെയ്യാം. ഡൗൺലോഡ് ആരംഭിക്കുന്ന (അതായത് റഫറർ) *.crx ഫയലിന്റെയും പേജിന്റെയും ലൊക്കേഷൻ ഈ പാറ്റേണുകൾ അനുവദിച്ചിരിക്കണം. <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> ഈ നയത്തെ നിയന്ത്രിക്കുന്നു. അതായത്, ബ്ലാക്ക്ലിസ്റ്റിലെ ഒരു വിപുലീകരണം ഇൻസ്റ്റാൾ ചെയ്യപ്പെടില്ല, അത് ഈ ലിസ്റ്റിലെ ഒരു സൈറ്റിൽ നിന്നാണ് സംഭവിക്കുന്നതെങ്കിൽ പോലും.</translation> -<translation id="214901426630414675">പ്രിന്റിങ് ഡുപ്ലെക്സ് മോഡ് നിയന്ത്രിക്കുക</translation> +<translation id="214901426630414675">രണ്ട് വശത്തും അച്ചടിക്കാവുന്ന മോഡ് പരിമിതപ്പെടുത്തുക</translation> <translation id="2149330464730004005">കളർ അച്ചടി പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="2156132677421487971">ബ്രൗസറിൽ നിന്ന്, വിദൂര ഡിസ്പ്ലേകൾക്കും ശബ്ദ സിസ്റ്റങ്ങൾക്കും, ടാബുകളുടെയും സൈറ്റുകളുടെയും ഡെസ്ക്ടോപ്പിന്റെയും ഉള്ളടക്കങ്ങൾ അയയ്ക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുന്ന ഒരു ഫീച്ചറായ <ph name="PRODUCT_NAME" /> എന്നതിന്റെ നയങ്ങൾ കോൺഫിഗർ ചെയ്യുക.</translation> <translation id="2166472654199325139">മുതിർന്നവർക്കുള്ള ഉള്ളടക്കത്തിനായി സൈറ്റുകൾ ഫിൽട്ടർ ചെയ്യരുത്</translation> @@ -641,7 +648,7 @@ <translation id="2529880111512635313">ഉപയോക്തൃ ശ്രദ്ധയോടെ ഇൻസ്റ്റാൾ ചെയ്ത ആപ്സിന്റെയും വിപുലീകരണങ്ങളുടെയും ലിസ്റ്റ് കോൺഫിഗർ ചെയ്യുക</translation> <translation id="253135976343875019">AC പവറിൽ പ്രവർത്തിക്കുമ്പോഴുള്ള നിഷ്ക്രിയ മുന്നറിയിപ്പ് കാലതാമസം</translation> <translation id="2536525645274582300">Google ലൊക്കേഷൻ സേവനങ്ങൾ പ്രവർത്തനക്ഷമമാക്കണോ എന്ന് ഉപയോക്താവ് തീരുമാനിക്കുന്നു</translation> -<translation id="2550593661567988768">സിംപ്ലക്സ് പ്രിന്റിങ് മാത്രം</translation> +<translation id="2550593661567988768">ഒരു വശത്തുള്ള അച്ചടി മാത്രം</translation> <translation id="2552966063069741410">സമയമേഖല</translation> <translation id="2562339630163277285">തൽക്ഷണ ഫലങ്ങൾ ലഭ്യമാക്കാൻ ഉപയോഗിക്കുന്ന തിരയൽ എഞ്ചിനിന്റെ URL വ്യക്തമാക്കുന്നു. URL-ൽ <ph name="SEARCH_TERM_MARKER" /> സ്ട്രിംഗ് അടങ്ങിയിരിക്കണം, ഇത് അന്വേഷണ സമയത്ത് ഉപയോക്താവ് ഇതുവരെ നൽകിയിട്ടുള്ള ടെക്സ്റ്റിനെ മാറ്റി പകരം വയ്ക്കും. @@ -784,12 +791,12 @@ നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുന്നുവെങ്കിലോ ഒരു മൂല്യം സജ്ജമാക്കുന്നില്ലെങ്കിലോ, ഡിഫോൾട്ട് ലക്ഷ്യസ്ഥാന തിരഞ്ഞെടുപ്പായി അച്ചടി പ്രിവ്യൂ ഉപയോഗിക്കുക ഏറ്റവും സമീപകാലത്ത് ഉപയോഗിച്ച പ്രിന്ററാണ്. നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുന്നുവെങ്കിൽ, ഡിഫോൾട്ട് ലക്ഷ്യസ്ഥാന തിരഞ്ഞെടുപ്പായി അച്ചടി പ്രിവ്യൂ ഉപയോഗിക്കുക OS സിസ്റ്റം ഡിഫോൾട്ട് പ്രിന്ററാണ്.</translation> -<translation id="2856674246949497058">OS പതിപ്പ് ടാർഗറ്റിനെക്കാൾ പുതിയതാണെങ്കിൽ ടാർഗറ്റ് പതിപ്പിലേക്ക് തിരികെ പോയി അതിൽ തുടരുക. പ്രോസസ് ചെയ്യുമ്പോൾ പവർവാഷ് ചെയ്യുക.</translation> +<translation id="2856674246949497058">OS പതിപ്പ് ടാർഗറ്റിനെക്കാൾ പുതിയതാണെങ്കിൽ ടാർഗറ്റ് പതിപ്പിലേക്ക് തിരികെ പോയി അതിൽ തുടരുക. പ്രോസസിന്റെ സമയത്ത് powerwash ചെയ്യുക.</translation> <translation id="2872961005593481000">അടയ്ക്കുക</translation> -<translation id="2873651257716068683">ഡിഫോൾട്ട് പ്രിന്റിങ് പേജ് വലുപ്പം അസാധുവാക്കുന്നു. പേജ് വലുപ്പം ലഭ്യമല്ലെങ്കിൽ ഈ നയം അവഗണിക്കപ്പെടും.</translation> +<translation id="2873651257716068683">ഡിഫോൾട്ട് പ്രിന്റിംഗ് പേജ് വലുപ്പം അസാധുവാക്കുന്നു. പേജ് വലുപ്പം ലഭ്യമല്ലെങ്കിൽ ഈ നയം അവഗണിക്കപ്പെടും.</translation> <translation id="2874209944580848064">Android ആപ്സിനെ പിന്തുണയ്ക്കുന്ന <ph name="PRODUCT_OS_NAME" /> ഉപകരണങ്ങൾക്കുള്ള കുറിപ്പ്:</translation> <translation id="2877225735001246144">Kerberos പ്രാമാണീകരണം നടന്നുകൊണ്ടിരിക്കുമ്പോള് CNAME ലുക്കപ്പ് അപ്രാപ്തമാക്കുക</translation> -<translation id="2892414556511568464">പ്രിന്റിങ് ഡുപ്ലെക്സ് മോഡ് നിയന്ത്രിക്കുന്നു. സജ്ജമാക്കാത്ത നയവും ശൂന്യമായ സജ്ജമാക്കലും നിയന്ത്രണം ഇല്ലാത്തതായി പരിഗണിക്കപ്പെടും.</translation> +<translation id="2892414556511568464">രണ്ട് വശത്തും അച്ചടിക്കാവുന്ന മോഡ് പരിമിതപ്പെടുത്തുന്നു. നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിലും സജ്ജീകരണം ശൂന്യമാണെങ്കിലും പരിമിതി ഇല്ലാത്തതായി പരിഗണിക്കപ്പെടും.</translation> <translation id="2893546967669465276">മാനേജ്മെന്റ് സെർവറിലേക്ക് സിസ്റ്റം ലോഗുകൾ അയയ്ക്കുക</translation> <translation id="2899002520262095963">Android ആപ്സുകൾക്ക്, ഈ നയം വഴി സജ്ജമാക്കിയ നെറ്റ്വർക്ക് കോൺഫിഗറേഷനുകളും CA സർട്ടിഫിക്കറ്റുകളും ഉപയോഗിക്കാനാവുമെങ്കിലും, ചില കോൺഫിഗറേഷൻ ഓപ്ഷനുകളിലേക്ക് ആക്സസ് ഉണ്ടായിരിക്കില്ല.</translation> <translation id="290002216614278247">ക്ലയന്റ് സമയം അല്ലെങ്കിൽ ഒരു ദിവസത്തെ ഉപയോഗ ക്വാട്ടയെ അടിസ്ഥാനമാക്കി ഉപയോക്താവിന്റെ സെഷൻ ലോക്ക് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു. @@ -881,7 +888,7 @@ ECDHE സൈഫർ സ്യൂട്ടുകളിലേക്ക് മൈഗ്രേറ്റുചെയ്യാൻ സെർവറുകളെ പ്രേരിപ്പിക്കുന്നു. ഇവ ലഭ്യമല്ലെങ്കിൽ, RSA കീ എക്സ്ചേഞ്ച് ഉപയോഗിക്കുന്ന സൈഫർ സ്യൂട്ട് പ്രവർത്തനക്ഷമമാണെന്ന് ഉറപ്പാക്കുക.</translation> <translation id="3152425128389603870">ഏകീകൃത ഡെസ്ക്ടോപ്പ് ലഭ്യമാക്കി അതിനെ സ്ഥിരമായി ഓണാക്കുക</translation> <translation id="316778957754360075"><ph name="PRODUCT_NAME" /> പതിപ്പ് 29 മുതൽ ഈ ക്രമീകരണം റദ്ദാക്കി. ഓർഗനൈസേഷൻ ഹോസ്റ്റുചെയ്ത വിപുലീകരണം/അപ്ലിക്കേഷൻ എന്നിവയുടെ ശേഖരങ്ങൾ സജ്ജീകരിക്കാനുള്ള ശുപാർശിത മാർഗം, ExtensionInstallSources-ൽ CRX പാക്കേജുകൾ ഹോസ്റ്റുചെയ്യുന്ന സൈറ്റ് ഉൾപ്പെടുത്തുകയും ഒരു വെബ് പേജിലെ പാക്കേജുകളിലേക്ക് ഡൗൺലോഡുചെയ്യാനുള്ള നേരിട്ടുള്ള ലിങ്കുകൾ ചേർക്കുക എന്നതുമാണ്. ExtensionInstallForcelist നയം ഉപയോഗിച്ച് ആ വെബ് പേജിനുള്ള ഒരു ലോഞ്ചർ സൃഷ്ടിക്കാനാകും.</translation> -<translation id="3171369832001535378">ഉപകരണ നെറ്റ്വർക്ക് ഹോസ്റ്റ്നെയിം ടെംപ്ലേറ്റ്</translation> +<translation id="3171369832001535378">ഉപകരണ നെറ്റ്വർക്ക് ഹോസ്റ്റ്നാമ ടെംപ്ലേറ്റ്</translation> <translation id="3172512016079904926">പ്രാദേശിക സന്ദേശമയയ്ക്കൽ ഹോസ്റ്റുകളുടെ ഉപയോക്തൃനില ഇൻസ്റ്റാളേഷൻ പ്രവർത്തനക്ഷമമാക്കുന്നു. ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ, ഉപയോക്തൃനിലയിൽ ഇൻസ്റ്റാൾ ചെയ്തിരിക്കുന്ന പ്രാദേശിക സന്ദേശമയയ്ക്കൽ ഹോസ്റ്റുകളുടെ ഉപയോഗം <ph name="PRODUCT_NAME" /> അനുവദിക്കുന്നു. @@ -965,6 +972,22 @@ ഈ നയം സജ്ജീകരിക്കാതെ വിട്ടാൽ, 'DefaultCookiesSetting' നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ അതിൽ നിന്നോ, അല്ലെങ്കിൽ ഉപയോക്താവിന്റെ വ്യക്തിപരമായ കോൺഫിഗറേഷനിൽ നിന്നോ എല്ലാ സൈറ്റുകൾക്കും ആഗോള ഡിഫോൾട്ട് മൂല്യം ഉപയോഗിക്കും. 'CookiesBlockedForUrls,' 'CookiesSessionOnlyForUrls' എന്നീ നയങ്ങളും കാണുക. ഈ നയങ്ങൾക്കിടയിൽ വൈരുദ്ധ്യമുള്ള URL പാറ്റേണുകൾ ഉണ്ടാവാൻ പാടില്ലെന്ന് ശ്രദ്ധിക്കുക - ഏത് നയത്തിനാണ് മുൻഗണന ലഭിക്കുക എന്ന് വ്യക്തമാക്കിയിട്ടില്ല.</translation> +<translation id="3373364525435227558">മാനേജ് ചെയ്യപ്പെടുന്ന സെഷനുകൾക്കായി ഒന്നോ അതിലധികമോ ശുപാർശ ചെയ്ത ഭാഷകൾ സജ്ജീകരിക്കുന്നതിലൂടെ, അവയിലൊന്ന് എളുപ്പത്തിൽ തിരഞ്ഞെടുക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുന്നു. + + ഒരു മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ ആരംഭിക്കുന്നതിന് മുമ്പ് ഉപയോക്താവിന് ഒരു ഭാഷയും കീബോർഡ് ലേഔട്ടും തിരഞ്ഞെടുക്കാനാകും. ഡിഫോൾട്ടായി, <ph name="PRODUCT_OS_NAME" /> പിന്തുണയ്ക്കുന്ന ഭാഷകൾ, അക്ഷരമാല ക്രമത്തിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്നു. ഒരു കൂട്ടം ശുപാർശ ചെയ്ത ലൊക്കേലുകളുടെ പട്ടികയിൽ മുകളിലേക്ക് പോകാൻ നിങ്ങൾക്ക് ഈ നയം ഉപയോഗിക്കാം. + + ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, നിലവിലെ UI ഭാഷ മുൻകൂറായി തിരഞ്ഞെടുക്കപ്പെടും. + + ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ശുപാർശ ചെയ്ത ഭാഷകൾ ലിസ്റ്റിൽ മുകളിലേക്ക് നീക്കുകയും മറ്റ് എല്ലാ ഭാഷകളിലും ദൃശ്യമാക്കുന്നതിൽ നിന്ന് മാറ്റുകയും ചെയ്യും. ശുപാർശ ചെയ്ത ഭാഷകൾ നയത്തിൽ അവ പ്രത്യക്ഷപ്പെടുന്ന ക്രമത്തിൽ ലിസ്റ്റ് ചെയ്യപ്പെടും. ആദ്യം ശുപാർശ ചെയ്ത ഭാഷ മുൻകൂറായി തിരഞ്ഞെടുക്കപ്പെടും. + + ശുപാർശ ചെയ്ത ഒന്നിലധികം ഭാഷകളുണ്ടെങ്കിൽ, അവയിൽ നിന്ന് തിരഞ്ഞെടുക്കാൻ ഉപയോക്താക്കൾ ആഗ്രഹിക്കുന്നു എന്ന് അനുമാനിക്കാം. ഒരു മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ ആരംഭിക്കുമ്പോൾ ഭാഷ, കീബോർഡ് ലേഔട്ട് എന്നിവയുടെ തിരഞ്ഞെടുക്കൽ പ്രാധാന്യത്തോടെ ചോദിക്കും. മറിച്ചാണെങ്കിൽ, ഭൂരിഭാഗം ഉപയോക്താക്കളും നേരത്തെ തിരഞ്ഞെടുക്കപ്പെട്ട ഭാഷ ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്നുവെന്ന് അനുമാനിക്കപ്പെടും. മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ ആരംഭിക്കുമ്പോൾ ഭാഷ, കീബോർഡ് ലേഔട്ട് എന്നിവയുടെ തിരഞ്ഞെടുക്കൽ കുറഞ്ഞ പ്രാധാന്യത്തോടെ ചോദിക്കും. + + ഈ നയം സജ്ജീകരിക്കുകയും സ്വമേധയായുള്ള ലോഗിൻ പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുകയും ചെയ്യുമ്പോൾ (|DeviceLocalAccountAutoLoginId|, |DeviceLocalAccountAutoLoginDelay| എന്നീ നയങ്ങൾ കാണുക) സ്വമേധയാ ആരംഭിച്ച മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ, ശുപാർശ ചെയ്ത ഭാഷയും ഇതുമായി പൊരുത്തപ്പെടുന്ന ഏറ്റവും പ്രചാരമുള്ള കീബോർഡ് ലേഔട്ടും ഉപയോഗിക്കും. + + നേരത്തെ തിരഞ്ഞെടുത്ത കീബോർഡ് ലേഔട്ട് തന്നെയായിരിക്കും നേരത്തേ തിരഞ്ഞെടുത്ത ഭാഷയുമായി പൊരുത്തപ്പെടുന്ന ഏറ്റവും പ്രചാരമുള്ള ലേഔട്ട്. + + ശുപാർശ ചെയ്തത് എന്ന നിലയിൽ മാത്രമേ ഈ നയം സജ്ജീകരിക്കാനാകൂ. ശുപാർശ ചെയ്ത ലൊക്കേലുകളുടെ ഒരു കൂട്ടത്തെ മുകളിലേക്ക് നീക്കാൻ നിങ്ങൾക്ക് ഈ നയം ഉപയോഗിക്കാം, എന്നാൽ <ph name="PRODUCT_OS_NAME" /> പിന്തുണയ്ക്കുന്ന ഏത് ഭാഷയും തങ്ങളുടെ സെഷനായി തിരഞ്ഞെടുക്കാൻ ഉപയോക്താക്കളെ അനുവദിച്ചിരിക്കുന്നു. + </translation> <translation id="3381968327636295719">ഡിഫോൾട്ടായി ഹോസ്റ്റ് ബ്രൗസർ ഉപയോഗിക്കുക</translation> <translation id="3414260318408232239">ഈ നയം കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിൽ <ph name="PRODUCT_NAME" /> ഏറ്റവും പഴയ ഡിഫോൾട്ട് പതിപ്പായ TLS 1.0. ഉപയോഗിക്കുന്നു. @@ -1015,7 +1038,7 @@ ഈ നയം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിലോ പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിലോ ഉപയോക്താക്കൾക്ക് അത് <ph name="PRODUCT_NAME" /> എന്നതിൽ മാറ്റാനോ അസാധുവാക്കാനോ കഴിയില്ല. ഈ നയം സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, പാസ്വേഡ് സംരക്ഷിക്കാൻ അനുവദിക്കും (എന്നാൽ ഉപയോക്താവിന് ഇത് ഓഫാക്കാനാകും).</translation> <translation id="3496296378755072552">പാസ്വേഡ് മാനേജര്</translation> -<translation id="3502555714327823858">എല്ലാ ഡുപ്ലെക്സ് മോഡുകളും അനുവദിക്കുക</translation> +<translation id="3502555714327823858">രണ്ട് വശത്തും അച്ചടിക്കാവുന്ന എല്ലാ മോഡുകളും അനുവദിക്കുക</translation> <translation id="350443680860256679">ARC കോൺഫിഗർ ചെയ്യുക</translation> <translation id="3504791027627803580">ഇമേജ് തിരയൽ ലഭ്യമാക്കാൻ ഉപയോഗിച്ച തിരയൽ എഞ്ചിന്റെ URL വ്യക്തമാക്കുന്നു. GET രീതി ഉപയോഗിച്ച് തിരയൽ അഭ്യർത്ഥനകൾ അയയ്ക്കും. DefaultSearchProviderImageURLPostParams നയം സജ്ജമാക്കിയാൽ തുടർന്ന് ഇമേജ് തിരയൽ അഭ്യർത്ഥനകൾ പകരം POST രീതി ഉപയോഗിക്കും. @@ -1030,7 +1053,7 @@ ഈ നയം 'ശരി' എന്നാണെങ്കിലോ കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിലോ, <ph name="PRODUCT_OS_NAME" /> Quirks സെർവറിനെ സ്വയം ബന്ധപ്പെടുകയും കോൺഫിഗറേഷൻ ഫയലുകൾ ലഭ്യമാണെങ്കിൽ അവ ഡൗൺലോഡുചെയ്ത്, ഉപകരണത്തിൽ സംഭരിക്കുകയും ചെയ്യും. ഉദാഹരണത്തിന് അത്തരം ഫയലുകൾ, അറ്റാച്ചുചെയ്തിരിക്കുന്ന മോണിറ്ററുകളുടെ ഡിസ്പ്ലേ നിലവാരം മെച്ചപ്പെടുത്താൻ ഉപയോഗിക്കാം.</translation> <translation id="3524204464536655762">WebUSB API വഴി, USB ഉപകരണങ്ങളിലേക്ക് ആക്സസ് അഭ്യർത്ഥിക്കാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation> -<translation id="3526752951628474302">മോണോക്രോം പ്രിന്റിങ് മാത്രം</translation> +<translation id="3526752951628474302">ഏകവർണ്ണ അച്ചടി മാത്രം</translation> <translation id="3528000905991875314">സമാന്തര പിശക് പേജുകള് പ്രാപ്തമാക്കുക</translation> <translation id="3545457887306538845">ഡെവലപ്പർ ടൂളുകൾ എവിടെ ഉപയോഗിക്കാനാവും എന്നത് നിയന്ത്രിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. @@ -1054,7 +1077,7 @@ <translation id="3577251398714997599">തടസ്സമുണ്ടാക്കുന്ന പരസ്യങ്ങളുള്ള സൈറ്റുകൾക്കുള്ള പരസ്യ ക്രമീകരണം</translation> <translation id="3591584750136265240">ലോഗിൻ പരിശോധിച്ചുറപ്പിക്കൽ പ്രവർത്തന രീതി കോൺഫിഗർ ചെയ്യുക</translation> <translation id="3627678165642179114">അക്ഷരപിശക് പരിശോധനാ സേവനം പ്രാപ്തമാക്കുക അല്ലെങ്കിൽ അപ്രാപ്തമാക്കുക</translation> -<translation id="3628480121685794414">സിംപ്ലെക്സ് പ്രിന്റിങ് പ്രവർത്തനക്ഷമമാക്കുക</translation> +<translation id="3628480121685794414">ഒരു വശത്ത് മാത്രമുള്ള അച്ചടി പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="3631099945620529777">'തെറ്റ്' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ, ടാസ്ക് മാനേജറിലെ 'പ്രോസസ്സ് അവസാനിപ്പിക്കുക' ബട്ടൺ പ്രവർത്തനരഹിതമാകും. 'ശരി' എന്ന് സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ഉപയോക്താവിന് ടാസ്ക് മാനേജറിൽ പ്രോസസ്സുകൾ അവസാനിപ്പിക്കാനാകും.</translation> @@ -1167,7 +1190,7 @@ നയം 'തെറ്റ്' എന്നാണ് സജ്ജമാക്കിയിരിക്കുന്നതെങ്കിൽ, കിയോസ്ക് വിവരങ്ങൾ റിപ്പോർട്ടുചെയ്യില്ല. 'ശരി' എന്ന് സജ്ജമാക്കുകയോ ഒന്നും സജ്ജമാക്കാതെ വിടുകയോ ആണെങ്കിൽ, കിയോസ്ക് വിവരങ്ങൾ റിപ്പോർട്ടുചെയ്യും.</translation> -<translation id="3858658082795336534">ഡിഫോൾട്ട് പ്രിന്റിങ് ഡുപ്ലെക്സ് മോഡ്</translation> +<translation id="3858658082795336534">രണ്ട് വശത്തും അച്ചടിക്കാവുന്ന ഡിഫോൾട്ട് പ്രിന്റിംഗ് മോഡ്</translation> <translation id="3859780406608282662"><ph name="PRODUCT_OS_NAME" /> എന്നതിലെ വേരിയേഷൻ സീഡ് ലഭ്യമാക്കലിന് ഒരു പാരാമീറ്റർ ചേർക്കുക. വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, വേരിയേഷൻ സീഡ് ലഭ്യമാക്കാൻ ഉപയോഗിച്ച URL-നോട് 'നിയന്ത്രിക്കുക' എന്നറിയപ്പെടുന്ന ഒരു അന്വേഷണ പാരാമീറ്റർ ചേർക്കും. പാരാമീറ്ററിന്റെ മൂല്യം ഈ നയത്തിൽ വ്യക്തമാക്കിയ മൂല്യം തന്നെ ആയിരിക്കും. @@ -1232,6 +1255,11 @@ ഈ നയം true ആയി സജ്ജീകരിക്കുകയോ സജ്ജീകരിക്കാതെ വിടുകയോ ചെയ്തിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താക്കൾക്ക് Chrome OS രജിസ്ട്രേഷനിലൂടെ ഓഫറുകൾ വീണ്ടെടുക്കാനാകും. ഈ നയം false ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താക്കൾക്ക് ഓഫറുകൾ വീണ്ടെടുക്കാനാകില്ല.</translation> +<translation id="4008507541867797979">ഈ നയം 'ശരി' എന്ന് സജ്ജീകരിക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ലോഗിൻ സ്ക്രീനിൽ നിലവിലുള്ള ഉപയോക്താക്കളെ <ph name="PRODUCT_OS_NAME" /> കാണിക്കുകയും അതിൽ നിന്ന് ഒന്ന് തിരഞ്ഞെടുക്കാൻ അനുവദിക്കുകയും ചെയ്യുന്നു. + + ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചാൽ, ലോഗിൻ സ്ക്രീനിൽ നിലവിലുള്ള ഉപയോക്താക്കളെ <ph name="PRODUCT_OS_NAME" /> കാണിക്കില്ല. മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിൽ, സാധാരണ സൈൻ ഇൻ സ്ക്രീൻ (ഉപയോക്താവിന്റെ ഇമെയിൽ, പാസ്വേഡ് അല്ലെങ്കിൽ ഫോൺ നമ്പർ ചോദിക്കുന്നത്) അല്ലെങ്കിൽ SAML ഇന്റർസ്റ്റീഷ്യൽ സ്ക്രീൻ (<ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> നയം മുഖേന പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ) കാണിക്കും. മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ കോൺഫിഗർ ചെയ്തിട്ടുണ്ടെങ്കിൽ, മാനേജ് ചെയ്യപ്പെടുന്ന സെഷൻ അക്കൗണ്ടുകൾ മാത്രം കാണിക്കുകയും അവയിൽ നിന്ന് ഒന്ന് തിരഞ്ഞെടുക്കാൻ അനുവദിക്കുകയും ചെയ്യുന്നു. + + ഉപകരണം പ്രാദേശിക ഉപയോക്തൃ ഡാറ്റ സൂക്ഷിക്കുകയോ നിരസിക്കുകയോ ചെയ്യുന്നുണ്ടോ എന്നതിന് ഈ നയം ബാധകമാകില്ല.</translation> <translation id="4010738624545340900">ഫയല് തെരഞ്ഞെടുപ്പ് ഡയലോഗുകളുടെ സംബോധന അനുവദിക്കുക.</translation> <translation id="4012737788880122133">'ശരി' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ സ്വയമേവയുള്ള അപ്ഡേറ്റുകൾ പ്രവർത്തനരഹിതമാക്കുന്നു. @@ -1708,6 +1736,17 @@ ഈ നയം ആഗോള സ്ഥിരസ്ഥിതി മൂല്യത്തെ സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, അത് സജ്ജീകരിച്ച 'DefaultNotificationsSetting' നയത്തിലെയോ ഉപയോക്താവിന്റെ സ്വകാര്യ കോൺഫിഗറേഷനിൽ നിന്നുള്ളതോ ആയ എല്ലാ സൈറ്റുകളിലും ഉപയോഗിക്കുന്നതാണ്.</translation> <translation id="5219844027738217407">Android ആപ്സുകളിൽ മൈക്രോഫോണിന് മാത്രമേ ഈ നയം ബാധകമാകൂ. ഈ നയം 'ശരി' എന്ന് സജ്ജമാക്കുമ്പോൾ, ഒഴിവാക്കലുകളൊന്നുമില്ലാതെ എല്ലാ Android ആപ്സുകൾക്കുമായി മൈക്രോഫോൺ മ്യൂട്ടുചെയ്യും.</translation> +<translation id="5228316810085661003">ഉപകരണ പ്രാദേശിക അക്കൗണ്ടുമായി ബന്ധപ്പെട്ട സ്വമേധയായുള്ള-ലോഗിൻ കാലതാമസം. + + |DeviceLocalAccountAutoLoginId| സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ ഈ നയം ഫലത്തിൽ വരില്ല. അല്ലെങ്കിൽ: + + +ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, |DeviceLocalAccountAutoLoginId| നയം വ്യക്തമാക്കുന്ന ഉപകരണ പ്രാദേശിക അക്കൗണ്ടിലേക്ക് സ്വമേധയായി ലോഗിൻ ചെയ്യുന്നതിന് മുമ്പ് ഉപയോക്താവിന്റെ ആക്റ്റിവിറ്റി ഇല്ലാതെ എത്ര സമയം നിലനിൽക്കുമെന്നത് ഈ നയം നിർണ്ണയിക്കുന്നു. + + +ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, കാലഹരണപ്പെടുന്നതിനുള്ള സമയം 0 മില്ലിസെക്കൻഡ് ആയിരിക്കും. + + ഈ നയം മില്ലിസെക്കൻഡിലാണ് വ്യക്തമാക്കിയിരിക്കുന്നത്.</translation> <translation id="523505283826916779">ഉപയോഗസഹായി ക്രമീകരണങ്ങൾ</translation> <translation id="5236882091572996759">ഈ നയം 'ശരി' എന്നതായി സജ്ജമാക്കുകയോ സജ്ജമാക്കാതിരിക്കുകയോ ചെയ്യുകയാണെങ്കിൽ, ഓഡിയോ പ്ലേ ചെയ്യുമ്പോൾ ഉപയോക്താവ് നിഷ്ക്രിയമായിരിക്കുന്നതായി പരിഗണിക്കില്ല. ഇത് നിഷ്ക്രിയ പ്രവർത്തനം നടക്കുന്നതും നിഷ്ക്രിയ കാലഹരണം എത്തിച്ചേരുന്നതും തടയുന്നു. എങ്കിലും, കോൺഫിഗർ ചെയ്ത കാലഹരണപ്പെടലുകൾക്ക് ശേഷം ഓഡിയോ പ്രവർത്തനം പരിഗണിക്കാതെ സ്ക്രീൻ തെളിച്ചം കുറയുകയും ഓഫാകുകയും ലോക്ക് ആകുകയും ചെയ്യും. @@ -1740,6 +1779,12 @@ <translation id="5272684451155669299">ശരി എന്നാണെങ്കിൽ, <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ഉപയോഗിച്ച് <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> വഴി Chrome ഉപകരണങ്ങളുടെ ഐഡന്റിറ്റി, സ്വകാര്യത CA എന്നതിലേക്ക് വിദൂര അറ്റസ്റ്റ് ചെയ്യുന്നതിന് ഉപയോക്താക്കൾക്ക് Chrome ഉപകരണങ്ങളിലെ ഹാർഡ്വെയർ ഉപയോഗിക്കാനാകും. ഇത് തെറ്റ് എന്ന് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതിരിക്കുകയോ ആണെങ്കിൽ, ഒരു പിശക് കോഡ് നൽകി API-യിലേക്കുള്ള കോളുകൾ പരാജയപ്പെടും.</translation> +<translation id="5277806246014825877">Crostini റണ് ചെയ്യാൻ ഈ ഉപയോക്താവിനെ പ്രാപ്തമാക്കുക. + + നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചാൽ, ഉപയോക്താവിനായി Crostini പ്രവർത്തനക്ഷമമാകില്ല. + 'ശരി' എന്ന് സജ്ജീകരിക്കുകയോ സജ്ജീകരിക്കാതിരിക്കുകയോ ചെയ്താൽ, മറ്റ് ക്രമീകരണവും അനുവദിക്കുന്നതുവരെയും ഉപയോക്താവിനായി Crostini പ്രവർത്തനക്ഷമമാകുന്നു. + Crostini റൺ ചെയ്യാൻ അനുവദിക്കണമെങ്കിൽ, VirtualMachinesAllowed, CrostiniAllowed, DeviceUnaffiliatedCrostiniAllowed എന്നീ മൂന്ന് നയങ്ങളും 'ശരി' എന്ന് സജ്ജീകരിച്ചിരിക്കണം. + ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിക്കുമ്പോൾ, പുതിയ Crostini കണ്ടെയ്നറുകൾ ആരംഭിക്കുന്നതിന് അത് ബാധകമാകും എന്നാൽ മുമ്പേ റൺ ചെയ്യുന്ന കണ്ടെയ്നറുകൾ പ്രവർത്തനം അവസാനിപ്പിക്കില്ല.</translation> <translation id="5283457834853986457">പ്ലഗിൻ ഫൈൻഡർ പ്രവർത്തനരഹിതമാക്കുക (ഒഴിവാക്കി)</translation> <translation id="5288772341821359899">ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, WebRTC ഉപയോഗിക്കുന്ന UDP പോർട്ട് ശ്രേണിയെ നിർദ്ദിഷ്ട പോർട്ട് ഇടവേളയിലേക്ക് (എൻഡ്പോയിന്റുകൾ ഉൾപ്പെടെ) പരിമിതപ്പെടുത്തും. @@ -1772,12 +1817,13 @@ <translation id="5366977351895725771">false എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, ഈ ഉപയോക്താവ് മുഖേന സൂപ്പർവൈസുചെയ്ത ഉപയോക്താവിനെ സൃഷ്ടിക്കൽ പ്രവർത്തനരഹിതമാകും. നിലവിലുള്ള സൂപ്പർവൈസുചെയ്ത ഉപയോക്താക്കളെല്ലാം തുടർന്നും ലഭ്യമാകും. true എന്നതായി സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ഈ ഉപയോക്താവിന് സൂപ്പർവൈസുചെയ്ത ഉപയോക്താക്കളെ സൃഷ്ടിക്കാനും നിയന്ത്രിക്കാനും കഴിയും.</translation> -<translation id="5369937289900051171">കളർ പ്രിന്റിങ് മാത്രം</translation> +<translation id="5369937289900051171">കളർ അച്ചടി മാത്രം</translation> <translation id="5370279767682621504">ഡിഫോൾട്ട് അല്ലാത്ത പോർട്ടുകളിൽ HTTP/0.9 പിന്തുണ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="5378985487213287085">ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ ദൃശ്യമാക്കുന്നതിന് വെബ്സൈറ്റുകളെ അനുവദിക്കുന്നത് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ ദൃശ്യമാക്കുന്നത് സ്ഥിരസ്ഥിതിയായി അനുവദിച്ചേക്കാം, സ്ഥിരസ്ഥിതിയായി അവഗണിച്ചേക്കാം അല്ലെങ്കിൽ ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ ദൃശ്യമാക്കുന്നതിന് എല്ലാ സമയത്തും ഉപയോക്താവിനോട് ചോദിച്ചേക്കാം. ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, 'AskNotifications' എന്നത് ഉപയോഗിക്കും കൂടാതെ ഉപയോക്താവിന് ഇത് മാറ്റാൻ കഴിയും.</translation> <translation id="538108065117008131">ഇനി പറയുന്ന ഉള്ളടക്ക തരങ്ങള് കൈകാര്യം ചെയ്യാന് <ph name="PRODUCT_FRAME_NAME" />-നെ അനുവദിക്കുന്നു.</translation> +<translation id="5391388690191341203">സ്വമേധയായ ലോഗിനായുള്ള ഉപകരണ-ലോക്കല് അക്കൗണ്ട്</translation> <translation id="5392172595902933844">Android-ന്റെ സ്റ്റാറ്റസിനെ കുറിച്ചുള്ള വിവരങ്ങൾ സെർവറിലേക്ക് തിരികെ അയയ്ക്കുന്നു. നയം 'തെറ്റ്' എന്ന് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതെ വിടുകയോ ആണെങ്കിൽ, സ്റ്റാറ്റസ് വിവരങ്ങളൊന്നും റിപ്പോർട്ട് ചെയ്യില്ല. @@ -1803,7 +1849,7 @@ സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, അത് ഇംപോർട്ട് ചെയ്യണോ എന്ന് ഉപയോക്താവിനോട് ചോദിച്ചേക്കാം. അല്ലെങ്കിൽ ഇംപോർട്ട് ചെയ്യൽ സ്വമേധയാ സംഭവിച്ചേക്കാം.</translation> <translation id="5423197884968724595">Android WebView നിയന്ത്രണത്തിന്റെ പേര്:</translation> -<translation id="5424147596523390018">എല്ലാ കളർ മോഡുകളും അനുവദിക്കുക</translation> +<translation id="5424147596523390018">എല്ലാ വർണ്ണ മോഡുകളും അനുവദിക്കുക</translation> <translation id="5437733496511628148">ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുന്നത് ഡൊമെയ്നുകളിൽ നിന്നുമുള്ളതല്ലാത്ത, ബ്രൗസറിന്റെ വിലാസ ബാറിൽ നിന്നുമുള്ള വെബ് പേജ് ഘടകങ്ങൾ ഉപയോഗിച്ച് കുക്കികളെ തടയുന്നു. ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുന്നത് ഡൊമെയ്നുകളിൽ നിന്നുള്ളതല്ലാത്ത, ബ്രൗസറിന്റെ വിലാസ ബാറിൽ നിന്നുമുള്ള വെബ് പേജ് ഘടകങ്ങൾ ഉപയോഗിച്ചുള്ള കുക്കികളെ അനുവദിക്കുന്നു കൂടാതെ ഈ ക്രമീകരണം തടയുന്നതിൽ നിന്നും ഉപയോക്താക്കളെ തടയുന്നു. @@ -1816,6 +1862,7 @@ ഈ നയം സജ്ജമാക്കാതെ വിടുമ്പോഴുള്ള ഡിഫോൾട്ട് ക്രമീകരണം ഹോസ്റ്റ് ബ്രൗസറിന് റെൻഡറിംഗ് നടത്താൻ അനുവദിക്കുന്നുവെന്നതാണ്. പക്ഷെ നിങ്ങൾക്കിത് ഓപ്ഷണലായി മറികടക്കാനാകും, കൂടാതെ ഡിഫോൾട്ടായി HTML പേജുകൾ <ph name="PRODUCT_FRAME_NAME" />-ന് റെൻഡർ ചെയ്യാനാകും.</translation> <translation id="5464816904705580310">നിയന്ത്രിത ഉപയോക്താക്കൾക്കുള്ള കോൺഫിഗർ ക്രമീകരണങ്ങൾ.</translation> <translation id="546726650689747237">AC പവറിൽ പ്രവർത്തിക്കുമ്പോൾ സ്ക്രീൻ തെളിച്ചം കുറയുന്നതിന്റെ കാലതാമസം</translation> +<translation id="5469143988693423708">Crostini റൺ ചെയ്യാൻ ഉപയോക്താവിനെ പ്രാപ്തമാക്കി</translation> <translation id="5469825884154817306">ഈ സൈറ്റുകളില് ഇമേജ് തടയുക</translation> <translation id="5475361623548884387">അച്ചടി പ്രാപ്തമാക്കുക</translation> <translation id="547601067149622666">തടസ്സമുണ്ടാക്കുന്ന പരസ്യങ്ങളുള്ള സൈറ്റുകളിൽ പരസ്യം അനുവദിക്കരുത്</translation> @@ -1883,6 +1930,9 @@ നൽകിയിരിക്കുന്ന സർട്ടിഫിക്കറ്റുകൾക്ക് അംഗീകാരമുണ്ടായേക്കാവുന്ന ഹോസ്റ്റുനാമങ്ങളെ നിയന്ത്രിക്കുന്ന nameConstraints വിപുലീകരണത്തെ ബൈപാസുചെയ്യാൻ അനുവദിക്കാനിടയുള്ളതിനാൽ, ഇത് ശുപാർശ ചെയ്യുന്നില്ല എന്നകാര്യം ശ്രദ്ധിക്കുക. ഈ നയം സജ്ജമാക്കിയിട്ടില്ലെങ്കിലോ തെറ്റ് എന്ന് സജ്ജമാക്കുകയാണെങ്കിലോ, ഒരു DNS പേരോ IP വിലാസമോ ഉൾപ്പെട്ടിരിക്കുന്ന subjectAlternativeName ലഭ്യമല്ലാത്ത സെർവർ സർട്ടിഫിക്കറ്റുകളെ വിശ്വസ്തമായി കണക്കാക്കില്ല.</translation> +<translation id="5581292529942108810">Chrome റിപ്പോർട്ട് ചെയ്യൽ വിപുലീകരണവുമായി ബന്ധപ്പെട്ട നയങ്ങൾ കോൺഫിഗർ ചെയ്യുക. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> പ്രവർത്തനക്ഷമമാക്കുകയും മെഷീൻ <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> എന്നതിൽ എൻറോൾ ചെയ്തിരിക്കുമ്പോഴും മാത്രമേ ഈ നയം പ്രാബല്യത്തിൽ വരൂ.</translation> <translation id="5583806683960333345">ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഇൻസ്റ്റന്റ് ടെതറിംഗ് ഉപയോഗിക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കും, Google ഫോണിലെ മൊബൈൽ ഡാറ്റ അവരുടെ ഉപകരണവുമായി പങ്കിടാൻ അത് അനുവദിക്കുന്നു. ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിൽ, ഉപയോക്താക്കളെ ഇൻസ്റ്റന്റ് ടെതറിംഗ് ഉപയോഗിക്കാൻ അനുവദിക്കില്ല. @@ -1898,7 +1948,7 @@ <translation id="5620392548325769024">OS അപ്ഗ്രേഡിനെ തുടർന്നുള്ള ആദ്യ ബ്രൗസർ സമാരംഭിക്കലിൽ സ്വാഗത പേജ് കാണിക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="5630352020869108293">അവസാന സെഷൻ പുനഃസ്ഥാപിക്കുക</translation> <translation id="5645779841392247734">ഈ സൈറ്റുകളില് കുക്കികള് അനുവദിക്കുക</translation> -<translation id="5689430183304951538">ഡിഫോൾട്ട് പ്രിന്റിങ് പേജ് വലുപ്പം</translation> +<translation id="5689430183304951538">ഡിഫോൾട്ട് പ്രിന്റിംഗ് പേജ് വലുപ്പം</translation> <translation id="5693469654327063861">ഡാറ്റ മൈഗ്രേഷൻ അനുവദിക്കുക</translation> <translation id="5694594914843889579">ഈ നയം ശരി എന്ന് സജ്ജമാക്കിയിരിക്കുമ്പോൾ, ഫയൽ ബ്രൗസറിൽ എക്സ്റ്റേണൽ സ്റ്റോറേജ് ലഭ്യമാകില്ല. @@ -1952,7 +2002,7 @@ 'അപ്രാപ്തമാക്കി' എന്നതാണ് തിരഞ്ഞെടുത്തിരിക്കുന്നതെങ്കിൽ, പേജുകൾ ആൾമാറാട്ട മോഡിൽ തുറക്കാൻ കഴിഞ്ഞേക്കില്ല 'നിർബന്ധിതം' എന്നതാണ് തിരഞ്ഞെടുത്തിരിക്കുന്നതെങ്കിൽ, പേജുകൾ ആൾമാറാട്ട മോഡിൽ മാത്രമേ തുറക്കാൻ കഴിയുകയുള്ളൂ.</translation> -<translation id="582857022372205358">ഹ്രസ്വ എഡ്ജ് ഡുപ്ലെക്സ് പ്രിന്റിങ് പ്രവർത്തനക്ഷമമാക്കുക</translation> +<translation id="582857022372205358">കുറഞ്ഞ വലുപ്പമുള്ള പേജിൽ രണ്ട് വശത്തും അച്ചടിക്കാനാവുന്ന മോഡ് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="583091600226586337"> നയം പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഡൗൺലോഡ് ചെയ്യുന്നതിന് മുമ്പ്, ഓരോ ഫയലും എവിടെയാണ് സംരക്ഷിക്കേണ്ടതെന്ന് ഉപയോക്താവിനോട് ചോദിക്കും. നയം പ്രവർത്തനക്ഷമമാക്കിയിട്ടില്ലെങ്കിൽ, ഡൗൺലോഡുകൾ ഉടൻ തന്നെ ആരംഭിക്കും. ഫയൽ എവിടെ സംരക്ഷിക്കണമെന്ന് ഉപയോക്താവിനോട് ചോദിക്കുന്നതല്ല. @@ -1988,7 +2038,7 @@ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിട്ടുണ്ടെങ്കിലോ കോൺഫിഗർചെയ്തിട്ടില്ലെങ്കിലോ, നുബ്ബി പ്രമാണീകരണ അഭ്യർത്ഥനകൾ അംഗീകരിക്കപ്പെടില്ല.</translation> <translation id="5898486742390981550">ഒന്നിലധികം ഉപയോക്താക്കൾ ലോഗിൻ ചെയ്തിരിക്കുമ്പോൾ, പ്രാഥമിക ഉപയോക്താവിന് മാത്രമേ Android ആപ്പുകൾ ഉപയോഗിക്കാനാവൂ.</translation> -<translation id="5901427587865226597">ഡുപ്ലെക്സ് പ്രിന്റിങ് മാത്രം</translation> +<translation id="5901427587865226597">രണ്ട് വശത്തുമുള്ള അച്ചടി മാത്രം</translation> <translation id="5906199912611534122">നെറ്റ്വർക്ക് ത്രോട്ടിലിംഗ് പ്രവർത്തനക്ഷമമാക്കാനോ പ്രവർത്തനരഹിതമാക്കാനോ അനുവദിക്കുന്നു. ഇത് എല്ലാ ഉപയോക്താക്കൾക്കും ഉപകരണത്തിലെ എല്ലാ ഇന്റർഫേസുകൾക്കും ബാധകമാണ്. സജ്ജമാക്കിയ ശേഷം, നയം ഇത് പ്രവർത്തനരഹിതമാക്കുന്നതിലേക്ക് മാറുന്നത് വരെ ത്രോട്ടിലിംഗ് നിലനിൽക്കുന്നു. @@ -2096,7 +2146,7 @@ ഈ നയത്തിന്റെ മൂല്യം മില്ലിസെക്കൻഡിലാണ് വ്യക്തമാക്കുക. മൂല്യങ്ങൾ, നിഷ്ക്രിയ കാലസമയത്തേക്കാളും കുറഞ്ഞിരിക്കുന്നതിന് ക്രമീകരിച്ചിരിക്കുന്നു.</translation> <translation id="6097601282776163274">URL കീ ഉപയോഗിച്ച് അജ്ഞാതമാക്കിയ ഡാറ്റ ശേഖരണം പ്രവർത്തനക്ഷമമാക്കുക</translation> -<translation id="6099853574908182288">ഡിഫോൾട്ട് പ്രിന്റിങ് കളർ മോഡ്</translation> +<translation id="6099853574908182288">ഡിഫോൾട്ട് പ്രിന്റിംഗ് വർണ്ണ മോഡ്</translation> <translation id="6111936128861357925">ദിനോസർ ഈസ്റ്റർ എഗ്ഗ് ഗെയിം അനുവദിക്കുക</translation> <translation id="6114416803310251055">നിരാകരിച്ചു</translation> <translation id="6133088669883929098">കീ സൃഷ്ടിക്കൽ ഉപയോഗിക്കാൻ എല്ലാ സൈറ്റുകളെയും അനുവദിക്കുക</translation> @@ -2113,7 +2163,7 @@ ഈ നയം സജ്ജമാക്കാതെ വിട്ടിരിക്കുകയാണെങ്കിൽ, എല്ലാ സൈറ്റുകൾക്കും വേണ്ടി, ആഗോള സ്ഥിര മൂല്യം ഉപയോഗിക്കപ്പെടും; 'DefaultPluginsSetting' നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ അതിൽ നിന്നോ, സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, ഉപയോക്താവിന്റെ വ്യക്തിഗത കോൺഫിഗറേഷനിൽ നിന്നോ ഉള്ള മൂല്യമാണ് ഉപയോഗിക്കപ്പെടുക.</translation> <translation id="6190022522129724693">പോപ്പപ്പുകള്ക്കായുള്ള സ്ഥിരസ്ഥിതി ക്രമീകരണം</translation> -<translation id="6190367314942602985">ഉപയോക്തൃ ഐഡന്റിഫിക്കേഷൻ വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യുക</translation> +<translation id="6190367314942602985">ഉപയോക്താവിനെക്കുറിച്ചുള്ള തിരിച്ചറിയൽ വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യുക</translation> <translation id="6197453924249895891">വിപുലീകരണങ്ങളിലേക്ക് കോർപ്പറേറ്റ് കീകൾക്ക് ആക്സസ്സ് അനുവദിക്കുന്നു. മാനേജുചെയ്ത ഒരു അക്കൗണ്ടിലെ chrome.platformKeys API ഉപയോഗിച്ചാണ് കീകൾ സൃഷ്ടിച്ചതെങ്കിൽ അവയെ കോർപ്പറേറ്റ് ഉപയോഗത്തിനായി നിയുക്തമാക്കിയിരിക്കും. മറ്റേതെങ്കിലും രീതിയിൽ ഇമ്പോർട്ടുചെയ്തതോ സൃഷ്ടിച്ചതോ ആയ കീകളെ കോർപ്പറേറ്റ് ഉപയോഗത്തിനായി നിയുക്തമാക്കില്ല. @@ -2123,7 +2173,7 @@ കോർപ്പറേറ്റ് ഉപയോഗത്തിനായി നിയുക്തമാക്കിയ ഒരു കീ സ്ഥിരരീതിയിൽ ഒരു വിപുലീകരണത്തിന് ഉപയോഗിക്കാൻ കഴിയില്ല, അത് ആ വിപുലീകരണത്തിനായി allowCorporateKeyUsage എന്നത് "false" എന്ന് സജ്ജമാക്കുന്നതിന് തുല്യമാണ്. ഒരു വിപുലീകരണത്തിനായി allowCorporateKeyUsage 'true' എന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ മാത്രം, അതിന് ആർബിട്രറി ഡാറ്റ സൈൻ ചെയ്യാൻ കോർപ്പറേറ്റ് ഉപയോഗത്തിനായി നീക്കിവച്ചിട്ടുള്ള ഏതൊരു പ്ലാറ്റ്ഫോം കീയും ഉപയോഗിക്കാം. അക്രമകാരികളിൽ നിന്ന് രക്ഷനേടാൻ, കീയിലേക്കുള്ള ആക്സസ്സ് സുരക്ഷിതമാക്കാൻ വിപുലീകരണം വിശ്വാസയോഗ്യമാണെങ്കിൽ മാത്രമേ ഈ അനുമതി അനുവദിക്കൂ.</translation> -<translation id="6208896993204286313"><ph name="PRODUCT_NAME" /> നയങ്ങളെ സംബന്ധിച്ച വിവരങ്ങൾ</translation> +<translation id="6208896993204286313"><ph name="PRODUCT_NAME" /> നയത്തെക്കുറിച്ചുള്ള വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യുക</translation> <translation id="6210259502936598222">OS, <ph name="PRODUCT_NAME" /> പതിപ്പ് വിവരങ്ങൾ എന്നിവ റിപ്പോർട്ട് ചെയ്യുക</translation> <translation id="6211428344788340116">ഉപകരണ പ്രവർത്തന സമയങ്ങൾ റിപ്പോർട്ടുചെയ്യുക. @@ -2142,13 +2192,18 @@ നിങ്ങള് ഈ ക്രമീകരണം പ്രാപ്തമാക്കിയിട്ടുണ്ടെങ്കിലും ഒരു മാനദണ്ഡമില്ലാത്ത ഒരു പോര്ട്ട് (അതായത്, 80 അല്ലെങ്കിൽ 443 ഒഴികെയുള്ള ഒരു പോർട്ട്) നൽകുന്നുവെങ്കിൽ, ജനറേറ്റുചെയ്ത Kerberos SPN-ല് ഇത് ഉള്പ്പെടുത്തുന്നതാണ്. നിങ്ങള് ഈ ക്രമീകരണം അപ്രാപ്തമാക്കിയിട്ടുണ്ടെങ്കിലോ സജ്ജീകരിച്ചിട്ടില്ലാത്ത നിലയിലാണെങ്കിലോ, ജനറേറ്റുചെയ്ത Kerberos SPN-ല് ഒരു സാഹചര്യത്തിലും ഒരു പോര്ട്ട് ഉള്പ്പെടുത്തപ്പെടില്ല.</translation> -<translation id="6261643884958898336">മെഷീൻ ഐഡന്റിഫിക്കേഷൻ വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യുക</translation> +<translation id="6261643884958898336">ഉപകരണത്തെക്കുറിച്ചുള്ള തിരിച്ചറിയൽ വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യുക</translation> <translation id="6281043242780654992">നേറ്റീവ് സന്ദേശമയയ്ക്കലിനായുള്ള നയങ്ങൾ കോൺഫിഗർ ചെയ്യുന്നു. ബ്ലാക്ക്ലിസ്റ്റുചെയ്ത നേറ്റീവ് സന്ദേശമയയ്ക്കൽ ഹോസ്റ്റുകളെ വൈറ്റ്ലിസ്റ്റ് ചെയ്തിട്ടില്ലെങ്കിൽ അവ അനുവദനീയമല്ല.</translation> <translation id="6282799760374509080">ഓഡിയോ ക്യാപ്ചർ അനുവദിക്കുകയോ നിരസിക്കുകയോ ചെയ്യുക</translation> <translation id="6284362063448764300">TLS 1.1</translation> <translation id="6310223829319187614">ഉപയോക്തൃ സൈൻ ഇൻ ചെയ്യലിന്റെ സമയത്ത് ഡൊമെയ്ൻ പേര് സ്വയമേ പൂർത്തിയാക്കുന്നത് പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="6315673513957120120">ഉപയോക്താക്കൾ SSL പിശകുകൾ ഉള്ള സൈറ്റുകളിലേക്ക് നാവിഗേറ്റുചെയ്യുമ്പോൾ Chrome ഒരു മുന്നറിയിപ്പ് പേജ് കാണിക്കുന്നു. സ്ഥിരമായോ ഈ നയം 'true' എന്ന് സജ്ജമാക്കിയിരിക്കുമ്പോഴോ, ഉപയോക്താക്കൾക്ക് ഈ മുന്നറിയിപ്പ് പേജുകളിൽ ക്ലിക്കുചെയ്യാൻ അനുവാദമുണ്ട്. ഈ നയത്തെ 'false' എന്ന് സജ്ജമാക്കുന്നത് ഒരു മുന്നറിയിപ്പ് പേജിലും ക്ലിക്കുചെയ്യുന്നതിന് ഉപയോക്താവിനെ അനുവദിക്കില്ല.</translation> +<translation id="6352543686437322588">കാലതാമസത്തിന് ശേഷമുള്ള സ്വമേധയായ ലോഗിനായുള്ള ഉപകരണ-പ്രാദേശിക അക്കൗണ്ട്. + + ഈ നയം സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ലോഗിൻ സ്ക്രീനിൽ ഉപയോക്താവിന്റെ പ്രവർത്തനമില്ലാതെ അൽപ്പ സമയം കഴിയുമ്പോൾ നിർദ്ദിഷ്ട സെഷൻ സ്വമേധയായി ലോഗിൻ ചെയ്യും. ഉപകരണ-പ്രാദേശിക അക്കൗണ്ട് മുമ്പേ കോൺഫിഗർ ചെയ്തിരിക്കണം (|DeviceLocalAccounts| കാണുക). + + ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ സ്വമേധയായുള്ള ലോഗിൻ പ്രവർത്തിക്കില്ല.</translation> <translation id="6353901068939575220">POST ഉപയോഗിച്ച് ഒരു URL തിരയുമ്പോൾ ഉപയോഗിക്കുന്ന പാരാമീറ്ററുകൾ വ്യക്തമാക്കുന്നു. ഇതിൽ കോമയാൽ വേർതിരിച്ച പേര്/മൂല്യം ജോടികൾ അടങ്ങിയിരിക്കുന്നു. മുകളിലെ ഉദാഹരണത്തിലുള്ളതുപോലെ {searchTerms} മൂല്യം ഒരു ടെംപ്ലേറ്റ് പാരാമീറ്റർ ആണെങ്കിൽ യഥാർത്ഥ തിരയൽ പദങ്ങളുടെ ഡാറ്റ അതിനെ മാറ്റിസ്ഥാപിക്കും. ഈ നയം ഓപ്ഷണലാണ്. സജ്ജമാക്കിയില്ലെങ്കിൽ GET രീതി ഉപയോഗിച്ച് തിരയൽ അഭ്യർത്ഥന അയയ്ക്കും. @@ -2229,7 +2284,7 @@ <translation id="6628646143828354685">അടുത്തുള്ള Bluetooth ഉപകരണങ്ങളിലേക്ക് വെബ്സൈറ്റുകൾക്ക് ആക്സസ്സ് അനുവദിക്കണോ എന്ന് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ആക്സസ്സ് പൂർണ്ണമായും ബ്ലോക്കുചെയ്യാം, അല്ലെങ്കിൽ വെബ്സൈറ്റിന് അടുത്തുള്ള Bluetooth ഉപകരണങ്ങളിലേക്ക് ആക്സസ്സ് ആവശ്യമുള്ളപ്പോഴെല്ലാം ഉപയോക്താവിനോട് അക്കാര്യം ചോദിക്കാം. ഈ നയം സജ്ജമാക്കാത്ത നിലയിലാണെങ്കിൽ, '3' ഉപയോഗിക്കും. അതിനാൽ ഉപയോക്താവിന് ഇത് മാറ്റാനാകും.</translation> -<translation id="663685822663765995">പ്രിന്റിങ് കളർ മോഡ് നിയന്ത്രിക്കുക</translation> +<translation id="663685822663765995">കളർ അച്ചടി മോഡ് പരിമിതപ്പെടുത്തുക</translation> <translation id="6641981670621198190">3D ഗ്രാഫിക്സ് API-കള്ക്കായുള്ള പിന്തുണ അപ്രാപ്തമാക്കുക</translation> <translation id="6647965994887675196">true എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, സൂപ്പർവൈസുചെയ്ത ഉപയോക്താക്കളെ സൃഷ്ടിക്കാനും ഉപയോഗിക്കാനുമാകും. @@ -2257,7 +2312,7 @@ ഈ നയത്തിലെ URL പാറ്റേണുകളും WebUsbAskForUrls വഴി കോൺഫിഗർ ചെയ്യപ്പെട്ടിട്ടുള്ളവയും തമ്മിൽ പൊരുത്തക്കേട് ഉണ്ടാകരുത്. രണ്ട് നയങ്ങളുമായും ഒരു URL പൊരുത്തപ്പെടുന്നുണ്ടെങ്കിൽ, രണ്ടിൽ ഏതിന് പ്രാമുഖ്യം നൽകണമെന്ന വ്യക്തമാക്കപ്പെടുന്നില്ല.</translation> <translation id="6689792153960219308">ഹാർഡ്വെയർ നില റിപ്പോർട്ട് ചെയ്യുക</translation> -<translation id="6698632841807204978">മോണോക്രോം പ്രിന്റിങ് പ്രവർത്തനക്ഷമമാക്കുക</translation> +<translation id="6698632841807204978">ഏകവർണ്ണ അച്ചടി പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="6699880231565102694">വിദൂര ആക്സസ്സ് ഹോസ്റ്റുകൾക്കായി ഇരട്ട-വസ്തുതാ പ്രാമാണീകരണം പ്രാപ്തമാക്കുക</translation> <translation id="6724842112053619797">റോമിംഗ് ഉപയോക്തൃ പ്രൊഫൈൽ ഫോൾഡറിലോ <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" /> നയം വഴി അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ ലൊക്കേഷനിലോ സൂക്ഷിച്ചിട്ടുള്ള ഒരു ഫയലിൽ, ബുക്ക്മാർക്കുകൾ, സ്വയമേവ പൂരിപ്പിക്കുന്ന വിവരങ്ങൾ, പാസ്വേഡുകൾ എന്നിവ പോലെ <ph name="PRODUCT_NAME" /> പ്രൊഫൈലുകളിൽ സൂക്ഷിച്ചിരിക്കുന്ന ക്രമീകരണവും റൈറ്റുചെയ്യും. ഈ നയം പ്രവർത്തനസജ്ജമാക്കുമ്പോൾ ക്ലൗഡ് സമന്വയിപ്പിക്കൽ പ്രവർത്തനരഹിതമാക്കുന്നു. @@ -2401,7 +2456,7 @@ <translation id="6923366716660828830">സ്ഥിരസ്ഥിതി തിരയൽ ദാതാവിനുള്ള പേര് നിർദ്ദേശിക്കുന്നു. ഇത് ശൂന്യമായി അല്ലെങ്കിൽ സജ്ജമാക്കാതെ ഇടുകയാണെങ്കിൽ, തിരയൽ URL വ്യക്തമാക്കുന്ന ഹോസ്റ്റ് നാമം ഉപയോഗിക്കും. 'DefaultSearchProviderEnabled' നയം പ്രാപ്തമാക്കിയാൽ മാത്രമേ ഈ നയം പരിഗണിക്കുകയുള്ളൂ.</translation> -<translation id="6926703471186170050">ദീർഘ എഡ്ജ് ഡുപ്ലെക്സ് പ്രിന്റിങ് പ്രവർത്തനക്ഷമാക്കുക</translation> +<translation id="6926703471186170050">കൂടുതൽ വലുപ്പമുള്ള പേജിൽ രണ്ട് വശത്തും അച്ചടിക്കാവുന്ന മോഡ് പ്രവർത്തനക്ഷമാക്കുക</translation> <translation id="6931242315485576290">Google-മായുള്ള ഡാറ്റ സമന്വയം അപ്രാപ്തമാക്കുക</translation> <translation id="6936894225179401731">പ്രോക്സി സെർവറിലേക്കുള്ള സമകാലിക കണക്ഷനുകളുടെ പരമാവധി എണ്ണം വ്യക്തമാക്കുന്നു. @@ -2536,6 +2591,11 @@ ഈ നയം സജ്ജമാക്കാതെ വിട്ടാൽ, ഉപയോക്താവിന് ഈ ക്രമീകരണം നേരിട്ട് മാറ്റാനാകും.</translation> <translation id="723103540848640830">ലോക്ക് സ്ക്രീൻ പിന്നിന്റെ ഏറ്റവും കുറഞ്ഞ ദൈർഘ്യം സജ്ജീകരിക്കുക</translation> +<translation id="7232816984286843471">നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചാൽ, അഫിലിയേറ്റ് ചെയ്യാത്ത ഉപയോക്താക്കൾക്ക് Crostini ഉപയോഗിക്കാൻ അനുമതി ലഭിക്കില്ല. + + ഈ നയം സജ്ജീകരിക്കാതിരുന്നാലോ 'ശരി' എന്ന് സജ്ജീകരിച്ചാലോ, മറ്റ് ക്രമീകരണം അനുവദിക്കുന്നത് വരെയും എല്ലാ ഉപയോക്താക്കൾക്കും Crostini ഉപയോഗിക്കാൻ അനുമതിയുണ്ടാകും. + Crostini റൺ ചെയ്യാൻ അനുവദിക്കണമെങ്കിൽ, VirtualMachinesAllowed, CrostiniAllowed, DeviceUnaffiliatedCrostiniAllowed എന്നീ മൂന്ന് നയങ്ങളും അവ ബാധകമാകുന്ന സാഹചര്യങ്ങളിൽ 'ശരി' എന്ന് സജ്ജീകരിച്ചിരിക്കണം. + ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിക്കുമ്പോൾ, പുതിയ Crostini കണ്ടെയ്നറുകൾ ആരംഭിക്കുന്നതിന് അത് ബാധകമാകും എന്നാൽ മുമ്പേ റൺ ചെയ്യുന്ന കണ്ടെയ്നറുകൾ പ്രവർത്തനം അവസാനിപ്പിക്കില്ല.</translation> <translation id="7234280155140786597">നിരോധിക്കപ്പെട്ട നേറ്റീവ് സന്ദേശമയയ്ക്കൽ ഹോസ്റ്റുകളുടെ പേരുകൾ (അല്ലെങ്കിൽ എല്ലാത്തിനുമായി *)</translation> <translation id="7236775576470542603">ലോഗിൻ സ്ക്രീനിൽ പ്രവർത്തനക്ഷമമായ സ്ക്രീൻ മാഗ്നിഫയറിന്റെ സ്ഥിര തരം സജ്ജമാക്കുക. @@ -2587,6 +2647,12 @@ <translation id="7311458740754205918">ഇത് ശരിയാണെന്ന് സജ്ജമാക്കുകയോ സജ്ജമാക്കാതിരിക്കുകയോ ആണെങ്കിൽ, ഉപയോക്താവിന്റെ ബ്രൗസിംഗ് ചരിത്രമോ താൽപ്പര്യങ്ങളോ ലൊക്കേഷനോ അടിസ്ഥാനമാക്കി പുതിയ ടാബ് പേജിൽ ഉള്ളടക്ക നിർദ്ദേശങ്ങൾ കാണിച്ചേക്കും. ഇത് തെറ്റാണെന്ന് സജ്ജമാക്കുകയാണെങ്കിൽ, പുതിയ ടാബ് പേജിൽ സ്വയം സൃഷ്ടിക്കപ്പെട്ട ഉള്ളടക്ക നിർദ്ദേശങ്ങളെ കാണിക്കില്ല.</translation> +<translation id="7313793931637495417">OS പതിപ്പ്, OS പ്ലാറ്റ്ഫോം, OS ആർക്കിടെക്ചർ, <ph name="PRODUCT_NAME" /> പതിപ്പ് <ph name="PRODUCT_NAME" /> ചാനൽ എന്നിവ പോലുള്ള പതിപ്പ് സംബന്ധിച്ച വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യണോ എന്നതിനെ ഈ നയം നിയന്ത്രിക്കുന്നു. + + ഈ നയം സജ്ജീകരിക്കാതിരിക്കുമ്പോഴും അല്ലെങ്കിൽ 'ശരി' എന്ന് സജ്ജീകരിക്കുമ്പോഴും, പതിപ്പ് വിവരങ്ങൾ ശേഖരിക്കും. + ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിക്കുമ്പോൾ, പതിപ്പ് വിവരം ശേഖരിക്കില്ല. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> പ്രവർത്തനക്ഷമമാക്കുകയും മെഷീൻ <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> എന്നതിൽ എൻറോൾ ചെയ്തിരിക്കുമ്പോഴും മാത്രമേ ഈ നയം പ്രാബല്യത്തിൽ വരൂ.</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> എന്നതിനായുള്ള കൂടുതൽ കമാന്റ് ലൈൻ പാരാമീറ്ററുകൾ</translation> <translation id="7326394567531622570">Wipe-ന് (മൂല്യം 2) സമാനമാണ്, എങ്കിലും ലോഗിൻ ടോക്കണുകൾ സംരക്ഷിക്കാൻ ശ്രമിക്കുന്നതിനാൽ ഉപയോക്താവിന് വീണ്ടും സൈൻ ഇൻ ചെയ്യേണ്ടിവരില്ല.</translation> <translation id="7329842439428490522">ബാറ്ററി പവറിൽ പ്രവർത്തിക്കുമ്പോൽ സ്ക്രീൻ ഓഫാക്കിയതിനുശേഷം, ഉപയോക്തൃ ഇൻപുട്ടില്ലാതെ സമയദൈർഘ്യം വ്യക്തമാക്കുന്നു. @@ -2619,12 +2685,18 @@ <translation id="7349338075015720646">ഉപയോക്തൃ ഇടപെടൽ ഇല്ലാതെ നിശബ്ദമായി ഇൻസ്റ്റാൾ ചെയ്തതും ഉപയോക്താവിന് അൺ ഇൻസ്റ്റാൾ ചെയ്യാനോ പ്രവർത്തനരഹിതമാക്കാനോ കഴിയാത്തതുമായ വെബ്സൈറ്റുകളുടെ ഒരു ലിസ്റ്റ് വ്യക്തമാക്കുന്നു. ഈ നയത്തിലെ ഓരോ ലിസ്റ്റ് ഇനവും രണ്ട് അംഗങ്ങൾ ഉള്ള ഒരു ഒബ്ജക്റ്റ് ആണ്: "url," "launch_container" എന്നിവ. "url" എന്നത് ഇൻസ്റ്റാൾ ചെയ്യേണ്ട വെബ് ആപ്പിന്റെ URL-ഉം "launch_container" എന്നത്, ഒരിക്കൽ ഇൻസ്റ്റാൾ ചെയ്തുകഴിഞ്ഞാൽ വെബ് ആപ്പ് എങ്ങനെയാണ് തുറക്കുക എന്ന് സൂചിപ്പിക്കാനുള്ള "വിൻഡോ" അല്ലെങ്കിൽ "ടാബ്" ആയിരിക്കണം. "launch_container" ഒഴിവാക്കിയാൽ, അത് ഒരു പ്രോഗ്രസീവ് വെബ് ആപ്പ് ആയി Chrome പരിഗണിച്ചാൽ വിൻഡോയിലും അല്ലെങ്കിൽ ടാബിലും ആപ്പ് സമാരംഭിക്കും.</translation> +<translation id="735902178936442460">മെഷീനുകളെ തിരിച്ചറിയാൻ ഉപയോഗിക്കാനാകുന്ന മെഷീൻ പേര്, നെറ്റ്വർക്ക് വിലസങ്ങൾ തുടങ്ങിയ വിവരങ്ങൾ റിപ്പോർട്ട് ചെയ്യണോ എന്നത് ഈ നയം നിയന്ത്രിക്കുന്നു. + + ഈ നയം സജ്ജീകരിക്കാതിരിക്കുമ്പോഴും ശരി എന്ന് സജ്ജീകരിക്കുമ്പോഴും മെഷീനുകളെ തിരിച്ചറിയാൻ ഉപയോഗിക്കാനാകുന്ന വിവരങ്ങൾ ശേഖരിക്കും. + ഈ നയം തെറ്റ് എന്ന് സജ്ജീകരിക്കുമ്പോൾ മെഷീനുകളെ തിരിച്ചറിയാൻ ഉപയോഗിക്കാനാകുന്ന വിവരങ്ങൾ ശേഖരിക്കില്ല. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> പ്രവർത്തനക്ഷമമാക്കുകയും മെഷീൻ <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> എന്നതിൽ എൻറോൾ ചെയ്തിരിക്കുമ്പോഴും മാത്രമേ ഈ നയം പ്രാബല്യത്തിൽ വരൂ.</translation> <translation id="7367028210010532881">ക്ഷുദ്രകരമായിരിക്കാൻ സാധ്യതയുള്ളതെന്ന് ഫ്ലാഗ് ചെയ്തിട്ടുള്ള സൈറ്റുകളിലേക്ക് ഉപയോക്താക്കൾ നാവിഗേറ്റ് ചെയ്യുമ്പോൾ സുരക്ഷിത ബ്രൗസിംഗ് സേവനം ഒരു മുന്നറിയിപ്പ് പേജ് ദൃശ്യമാക്കുന്നു. ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുന്നതിലൂടെ, മുന്നറിയിപ്പ് പേജിൽ നിന്ന് ഏതെങ്കിലും തരത്തിൽ ക്ഷുദ്രകരമായ സൈറ്റുകളിലേക്ക് ഉപയോക്താക്കൾ പോകുന്നത് തടയുന്നു. ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിട്ടുണ്ടെങ്കിലോ കോൺഫിഗർ ചെയ്തിട്ടില്ലെങ്കിലോ, മുന്നറിയിപ്പ് ദൃശ്യമായതിനുശേഷവും ഉപയോക്താക്കൾക്ക് ഫ്ലാഗ് ചെയ്ത സൈറ്റുകളിലേക്ക് പോകാൻ കഴിയും. സുരക്ഷിത ബ്രൗസിംഗിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക് https://developers.google.com/safe-browsing കാണുക.</translation> -<translation id="737655323154569539">അച്ചടി പേജ് വലുപ്പം നിയന്ത്രിക്കുന്നു. സജ്ജമാക്കാത്ത നയവും ശൂന്യമായ സജ്ജമാക്കലും നിയന്ത്രണം ഇല്ലാത്തതായി പരിഗണിക്കപ്പെടും.</translation> +<translation id="737655323154569539">അച്ചടിക്കുന്ന പേജിന്റെ വലുപ്പം പരിമിതപ്പെടുത്തുന്നു. നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിലും സജ്ജീകരണം ശൂന്യമാണെങ്കിലും പരിമിതി ഇല്ലാത്തതായി പരിഗണിക്കപ്പെടും.</translation> <translation id="7389872682701720082">ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ, കാലഹരണപ്പെട്ടത് അല്ലാത്ത പ്ലഗിനുകൾ എല്ലായ്പ്പോഴും പ്രവര്ത്തിക്കും. ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയിട്ടുണ്ടെങ്കിലോ സജ്ജമാക്കിയിട്ടില്ലെങ്കിലോ, അംഗീകാരം ആവശ്യമായ പ്ലഗിനുകൾ പ്രവര്ത്തിപ്പിക്കാൻ ഉപയോക്താക്കളോട് അനുവാദം ചോദിക്കും. സുരക്ഷയ്ക്ക് ഭീഷണിയാണ് ഈ പ്ലഗിനുകൾ.</translation> @@ -2702,8 +2774,8 @@ <translation id="7617319494457709698">ഈ നയം വിദൂര അറ്റസ്റ്റേഷന് വേണ്ടി, <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ഫംഗ്ഷൻ <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ഉപയോഗിക്കാൻ അനുവദനീയമായ വിപുലീകരണങ്ങൾ വ്യക്തമാക്കുന്നു. API ഉപയോഗിക്കുന്നതിന് ഈ ലിസ്റ്റിൽ വിപുലീകരണങ്ങൾ ചേർക്കേണ്ടതുണ്ട്. വിപുലീകരണം ലിസ്റ്റിൽ ഇല്ലെങ്കിലോ ലിസ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലെങ്കിലോ ഒരു പിശക് കോഡ് നൽകി, API-യിലേക്കുള്ള കോൾ പരാജയപ്പെടുന്നതാണ്.</translation> -<translation id="7618907117929117943">OS പതിപ്പ് ടാർഗറ്റ് പതിപ്പിനേക്കാൾ പുതിയതാണെങ്കിൽ ടാർഗറ്റ് പതിപ്പിലേക്ക് തിരികെ പോയി അതിൽ തുടരുക, തിരികെ പോകുന്നതിലൂടെ ഉപകരണതല കോൺഫിഗറേഷൻ തുടരാൻ സാധിക്കും (നെറ്റ്വർക്ക് ക്രെഡൻഷലുകൾ ഉൾപ്പെടെ) തിരികെ പോയതിന് ശേഷം OOBE ഒഴിവാക്കാനും സാധിക്കും. സാധ്യമല്ലെങ്കിൽ അത് ചെയ്യാതിരിക്കുക അല്ലെങ്കിൽ പിന്നിലേക്ക് പോകുന്നത് നിരസിക്കുക (ടാർഗറ്റ് പതിപ്പ് ഡാറ്റ പുനഃസ്ഥാപിക്കുന്നത് പിന്തുണയ്ക്കുന്നില്ല അല്ലെങ്കിൽ പിന്നിലേക്ക് പോകുന്നതിന് അനുയോജ്യമല്ലാത്ത മാറ്റം എന്നീ കാരണങ്ങളാൽ). - <ph name="PRODUCT_OS_NAME" /> പതിപ്പ് 70-ലും അതിനേക്കാൾ ഉയർന്ന പതിപ്പുകളിലും പിന്തുണയ്ക്കുന്നു. പഴയ ക്ലൈന്റുകൾക്ക് ഈ മൂല്യം റോൾബാക്ക് പ്രവർത്തനരഹിതമാക്കി എന്നാണ്.</translation> +<translation id="7618907117929117943">OS പതിപ്പ് ടാർഗറ്റ് പതിപ്പിനേക്കാൾ പുതിയതാണെങ്കിൽ ടാർഗറ്റ് പതിപ്പിലേക്ക് തിരികെ പോയി അതിൽ തുടരുക, തിരികെ പോകുന്നതിലൂടെ, ഉപകരണ-തല കോൺഫിഗറേഷൻ (നെറ്റ്വർക്ക് ക്രെഡൻഷലുകൾ ഉൾപ്പെടെ) തുടരാൻ സാധിക്കും, തിരികെ പോയതിന് ശേഷം OOBE ഒഴിവാക്കാനും സാധിക്കും. ഇത് സാധ്യമല്ലെങ്കിൽ (ഡാറ്റ പുനഃസ്ഥാപിക്കുന്നത് ടാർഗറ്റ് പതിപ്പ് പിന്തുണയ്ക്കുന്നില്ല അല്ലെങ്കിൽ പിന്നിലേക്ക് പോകുന്നതിന് അനുയോജ്യമല്ലാത്ത മാറ്റം എന്നീ കാരണങ്ങളാൽ), തിരികെ പോകാതിരിക്കുക അല്ലെങ്കിൽ തിരികെ പോകുന്നത് നിരസിക്കുക. + <ph name="PRODUCT_OS_NAME" /> പതിപ്പ് 70-ലും അതിന് ശേഷമുള്ളവയിലും പിന്തുണയ്ക്കുന്നു. പഴയ ക്ലയന്റുകൾക്ക്, ഈ മൂല്യം അർത്ഥമാക്കുന്നത്, തിരികെ പോകുന്നത് പ്രവർത്തനരഹിതമാക്കി എന്നാണ്.</translation> <translation id="7625444193696794922">ഈ ഉപകരണം ലോക്കുചെയ്യുന്ന റിലീസ് ചാനൽ നിർദ്ദേശിക്കുന്നു.</translation> <translation id="7632724434767231364">GSSAPI ലൈബ്രറി പേര്</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" /> എന്നതില് അപ്ലിക്കേഷന് ലോക്കെൽ കോണ്ഫിഗര് ചെയ്യുന്നു, ഒപ്പം ലോക്കെൽ മാറ്റുന്നതില് നിന്ന് ഉപയോക്താക്കളെ തടയുന്നു. @@ -2899,6 +2971,14 @@ <translation id="798856998567564266">നിങ്ങള് ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയാണെങ്കിൽ, ബുക്ക്മാർക്കുകൾ ചേർക്കുകയും നീക്കംചെയ്യുകയും പരിഷ്ക്കരിക്കുകയും ചെയ്യാം. ഇതാണ് ഡിഫോൾട്ട്. നിങ്ങള് ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിൽ, ബുക്ക്മാര്ക്കുകൾ ചേർക്കുകയും നീക്കംചെയ്യുകയും പരിഷ്കരിക്കുകയും ചെയ്യാൻ കഴിയില്ല. നിലവിലെ ബുക്ക്മാര്ക്കുകൾ ഇപ്പോഴും ലഭ്യമാണ്.</translation> +<translation id="7992136759457836904">വെർച്വൽ മെഷീനുകളെ Chrome OS-ൽ പ്രവർത്തിക്കാൻ അനുവദിക്കണോ എന്നത് നിയന്ത്രിക്കാൻ ഈ നയം നിങ്ങളെ അനുവദിക്കുന്നു. + + നയം 'ശരി' എന്ന് സജ്ജീകരിച്ചാൽ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തെ അനുവദിക്കുന്നു. + നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചാൽ, വെർച്വൽ മെഷീനുകൾ പ്രവർത്തിപ്പിക്കാൻ ഉപകരണത്തെ അനുവദിക്കില്ല. + Crostini റൺ ചെയ്യാൻ അനുവദിക്കണമെങ്കിൽ, VirtualMachinesAllowed, CrostiniAllowed, DeviceUnaffiliatedCrostiniAllowed എന്നീ മൂന്ന് നയങ്ങളും അവ ബാധകമായ സാഹചര്യങ്ങളിൽ 'ശരി' എന്ന് സജ്ജീകരിച്ചിരിക്കണം. + ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിക്കുമ്പോൾ, പുതിയ വെർച്വൽ മെഷീനുകൾ ആരംഭിക്കുന്നതിന് അത് ബാധകമാകും, എന്നാൽ മുമ്പേ റൺ ചെയ്യുന്ന വെർച്വൽ മെഷീനുകൾ പ്രവർത്തനം അവസാനിപ്പിക്കില്ല. + ഈ നയം മാനേജ് ചെയ്യപ്പെടുന്ന ഉപകരണത്തിൽ സജ്ജീകരിക്കാതിരിക്കുമ്പോൾ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തെ അനുവദിക്കില്ല. + മാനേജ് ചെയ്യപ്പെടുന്ന ഉപകരണങ്ങളെ വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ അനുവദിക്കുന്നു.</translation> <translation id="802147957407376460">സ്ക്രീൻ 0 ഡിഗ്രി തിരിക്കുക</translation> <translation id="8033913082323846868">ഈ നയം M70 ൽ അവസാനിപ്പിച്ചിരിക്കുന്നു, പകരം AutofillAddressEnabled, AutofillCreditCardEnabled എന്നിവ ഉപയോഗിക്കുക. @@ -2909,7 +2989,7 @@ നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കുകയോ ഒരു മൂല്യം സജ്ജമാക്കാതിരിക്കുകയോ ചെയ്താൽ, സ്വമേധയാ പൂരിപ്പിക്കൽ തുടർന്നും ഉപയോക്താവിൻറെ നിയന്ത്രണത്തിലായിരിക്കും. ഇത്, സ്വമേധയാ പൂരിപ്പിക്കൽ പ്രൊഫൈലുകൾ കോൺഫിഗർ ചെയ്യാനും അവരുടെ സ്വന്തം വിവേചനാധികാരം ഉപയോഗിച്ച്, സ്വമേധയാ പൂരിപ്പിക്കൽ ഓണാക്കാനോ ഓഫാക്കാനോ ഉപയോക്താക്കളെ അനുവദിക്കുകയും ചെയ്യും.</translation> <translation id="8044493735196713914">ഉപകരണ ബൂട്ട് മോഡ് റിപ്പോർട്ട് ചെയ്യുക</translation> <translation id="8050080920415773384">നേറ്റീവ് പ്രിന്റിംഗ്</translation> -<translation id="8053580360728293758">ഡിഫോൾട്ട് പ്രിന്റിങ് കളർ മോഡ് അസാധുവാക്കുന്നു. മോഡ് ലഭ്യമല്ലെങ്കിൽ ഈ നയം അവഗണിക്കപ്പെടും.</translation> +<translation id="8053580360728293758">ഡിഫോൾട്ട് പ്രിന്റിങ് വർണ്ണ മോഡ് അസാധുവാക്കുന്നു. മോഡ് ലഭ്യമല്ലെങ്കിൽ ഈ നയം അവഗണിക്കപ്പെടും.</translation> <translation id="8059164285174960932">റിമോട്ട് ആക്സസ്സ് ക്ലയന്റുകൾക്കുകൾ അവരുടെ പ്രാമാണീകരണ ടോക്കൺ നേടേണ്ട URL</translation> <translation id="806280865577636339">ഈ നയം 'ശരി' ആയി സജ്ജമാക്കിയാൽ, ഉപയോഗസഹായി ഓപ്ഷനുകൾ എല്ലായ്പ്പോഴും സിസ്റ്റം ട്രേ മെനുവിൽ ദൃശ്യമാകും. @@ -2957,10 +3037,17 @@ ഈ നയം സജ്ജമാക്കാതെയിരുന്നാൽ, ഒരു സ്ഥിര സമയദൈർഘ്യം ഉപയോഗിക്കും. നയ മൂല്യം മില്ലിസെക്കൻഡിലായിരിക്കണം. മൂല്യങ്ങൾ നിഷ്ക്രിയ കാലതാമസത്തേക്കാൾ കുറവോ തുല്യമോ ആയി നിശ്ചയിക്കണം.</translation> +<translation id="8138009212169037227">നയ ഡാറ്റയും നയം പ്രാബല്യത്തിൽ വരുന്ന സമയവും റിപ്പോർട്ട് ചെയ്യണോ എന്നത് ഈ നയം നിയന്ത്രിക്കുന്നു. + + ഈ നയം സജ്ജീകരിക്കാതിരിക്കുമ്പോഴും അല്ലെങ്കിൽ 'ശരി' എന്ന് സജ്ജീകരിക്കുമ്പോഴും നയ ഡാറ്റയും നയം പ്രാബല്യത്തിൽ വരുന്ന സമയവും ശേഖരിക്കും. + ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിക്കുമ്പോൾ നയ ഡാറ്റയും നയം പ്രാബല്യത്തിൽ വരുന്ന സമയവും ശേഖരിക്കില്ല. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുമ്പോഴും മെഷീൻ <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> എന്നതിൽ എൻറോൾ ചെയ്തിരിക്കുമ്പോഴും മാത്രമേ ഈ നയം പ്രാബല്യത്തിൽ വരൂ.</translation> <translation id="8140204717286305802">നെറ്റ്വർക്ക് ഇന്റർഫേസുകളുടെ ലിസ്റ്റും അതിന്റെ തരങ്ങളും ഹാർഡ്വെയർ വിലാസങ്ങളും ഉൾപ്പെടെ സെർവറിൽ റിപ്പോർട്ടുചെയ്യുക. നയം തെറ്റ് എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, ഇന്റർഫേസ് ലിസ്റ്റ് റിപ്പോർട്ടുചെയ്യില്ല.</translation> <translation id="8141795997560411818">ഈ നയം Android Google ഡ്രൈവ് ആപ്പ് ഉപയോഗിക്കുന്നതിൽ നിന്ന് ഉപയോക്താവിനെ തടയുന്നില്ല. Google ഡ്രൈവിലുള്ള ആക്സസ് തടയണമെങ്കിൽ, നിങ്ങൾ Android Google ഡ്രൈവ് ആപ്പിന്റെ ഇൻസ്റ്റലേഷൻ അനുവദിക്കരുത്.</translation> +<translation id="8142894094385450823">മാനേജ് ചെയ്യപ്പെട്ട സെഷനായി നിർദ്ദേശിക്കുന്ന ഭാഷകൾ സജ്ജീകരിക്കുക</translation> <translation id="8146727383888924340">Chrome OS രജിസ്ട്രേഷനിലൂടെ ഓഫറുകൾ വീണ്ടെടുക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുക</translation> <translation id="8148785525797916822">തുടർന്ന്, ഒരു കമ്പ്യൂട്ടറിലോ പിന്തുണയ്ക്കാത്ത ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിലോ <ph name="PRODUCT_NAME" /> റൺ ചെയ്യുമ്പോൾ കാണിക്കുന്ന മുന്നറിയിപ്പിനെ നിയന്ത്രിക്കുന്നു.</translation> <translation id="8148901634826284024">ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് ഉപയോഗസഹായി സവിശേഷത പ്രവർത്തനക്ഷമമാക്കുക. @@ -3015,6 +3102,21 @@ <translation id="8259592978873597235">ഈ നയം 'ശരി' എന്നതായി സജ്ജമാക്കുകയോ സജ്ജമാക്കാതിരിക്കുകയോ ചെയ്യുകയാണെങ്കിൽ, വീഡിയോ പ്ലേ ചെയ്യുമ്പോൾ ഉപയോക്താവ് നിഷ്ക്രിയമായിരിക്കുന്നതായി പരിഗണിക്കില്ല. ഇത് നിഷ്ക്രിയ കാലതാമസം, സ്ക്രീൻ തെളിച്ചം കുറയുന്നതിന്റെ കാലതാമസം, സ്ക്രീൻ ഓഫാകുന്നതിന്റെ കാലതാമസം, സ്ക്രീൻ ലോക്ക് ആകുന്നതിന്റെ കാലതാമസം എന്നിവയിലേക്കെത്തുന്നതും തത്തുല്യ പ്രവർത്തനങ്ങൾ നടക്കുന്നതും തടയുന്നു. ഈ നയം 'തെറ്റ്' എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, ഉപയോക്താവിനെ നിഷ്ക്രിയമായി പരിഗണിക്കുന്നത് വീഡിയോ പ്രവർത്തനം തടയില്ല.</translation> +<translation id="8264653492961233132">ഉപയോക്താവിന്റെ ഇടപെടൽ ഇല്ലാതെ നിശബ്ദമായി ഇൻസ്റ്റാൾ ചെയ്ത ആപ്പുകളുടെയും വിപുലീകരണങ്ങളുടെയും ഒരു ലിസ്റ്റ് വ്യക്തമാക്കുന്നു, അവ ഉപയോക്താവിന് അൺഇൻസ്റ്റാൾ ചെയ്യാനോ പ്രവർത്തനരഹിതമാക്കാനോ കഴിയില്ല. ആപ്പുകളുടെ/വിപുലീകരണങ്ങളും ഭാവി പതിപ്പുകൾ അഭ്യർത്ഥിക്കുന്ന ഏതൊരു അധിക അനുമതികളും ഉൾപ്പെടെ, അവ അഭ്യർത്ഥിക്കുന്ന എല്ലാ അനുമതികളും ഉപയോക്താവുമായി ബന്ധപ്പെടാതെ തന്നെ വ്യന്ഗ്യമായി അനുവദിക്കുന്നു. കൂടാതെ, enterprise.deviceAttributes, enterprise.platformKeys വിപുലീകരണ API-കൾക്കും അനുമതികൾ നൽകിയിരിക്കുന്നു. (നിർബന്ധിതമായി അല്ലാതെ ഇൻസ്റ്റാൾ ചെയ്ത ആപ്പുകൾ/വിപുലീകരണങ്ങൾ എന്നിവയിൽ ഈ രണ്ട് API-കളും ലഭ്യമല്ല.) + +ഈ നയത്തിന്, വൈരുദ്ധ്യമുണ്ടാകാൻ സാധ്യതയുള്ള <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> നയത്തേക്കാൾ പ്രാധാന്യമുണ്ട്. നേരത്തെ നിർബന്ധിതമായി ഇൻസ്റ്റാൾ ചെയ്ത ഒരു ആപ്പോ വിപുലീകരണമോ ഈ ലിസ്റ്റിൽ നിന്ന് നീക്കം ചെയ്താൽ, അതിനെ <ph name="PRODUCT_NAME" /> സ്വമേധയാ അൺഇൻസ്റ്റാൾ ചെയ്യും. + + <ph name="MS_AD_NAME" /> ഡൊമൈനിൽ ചേർന്ന Windows ഇൻസ്റ്റൻസുകൾക്ക്, Chrome വെബ് സ്റ്റോറിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന ആപ്പുകൾക്കും വിപുലീകരണങ്ങൾക്കും മാത്രമായി നിർബന്ധിത ഇൻസ്റ്റലേഷൻ പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. + + ഡവലപ്പർ ടൂളുകൾ മുഖേന ഏതൊരു വിപുലീകരണത്തിന്റെയും സോഴ്സ് കോഡ് ഉപയോക്താക്കൾക്ക് വ്യത്യാസപ്പെടുത്താമെന്ന കാര്യം ശ്രദ്ധിക്കുക (പ്രവർത്തനക്ഷമമല്ലാത്ത വിപുലീകരണം റെൻഡർ ചെയ്യുന്നതിലൂടെ). ഇത് ആശങ്കപ്പെടുത്തുന്നുവെങ്കിൽ, <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> നയം സജ്ജീകരിച്ചിരിക്കണം. + + നയത്തിലെ ഓരോ ലിസ്റ്റ് ഇനവും ഒരു വിപുലീകരണ വിലാസവും, ചിലപ്പോൾ ഒരു അർദ്ധ വിരാമത്താൽ (<ph name="SEMICOLON" />) വേർതിരിച്ച ''അപ്ഡേറ്റ് ചെയ്യുക'' URL കൂടി അടങ്ങുന്നതായിരിക്കും. ഡവലപ്പർ മോഡിൽ ആയിരിക്കുമ്പോൾ വിപുലീകരണ ഐഡി, 32-അക്ഷരങ്ങളുള്ള സ്ട്രിംഗ് ആയിരിക്കും, ഉദാഹരണം <ph name="CHROME_EXTENSIONS_LINK" /> എന്നതിൽ കണ്ടെത്തുക. ''അപ്ഡേറ്റ് ചെയ്യുക'' URL വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, അത് <ph name="LINK_TO_EXTENSION_DOC1" />-ൽ വിശദീകരിച്ചിരിക്കുന്നത് പോലെ അപ്ഡേറ്റ് മാനിഫെസ്റ്റ് XML പ്രമാണത്തിലേക്ക് നയിക്കണം. ഡിഫോൾട്ടായി Chrome വെബ് സ്റ്റോറിന്റെ അപ്ഡേറ്റ് ചെയ്യുക URL ഉപയോഗിക്കുന്നു (അത് നിലവിൽ "https://clients2.google.com/service/update2/crx" എന്നതാണ്). ഈ നയത്തിൽ സജ്ജീകരിച്ചിരിക്കുന്ന "അപ്ഡേറ്റ് ചെയ്യുക" URL പ്രാഥമിക ഇൻസ്റ്റലേഷനുകൾക്ക് മാത്രമേ ഉപയോഗിക്കൂ എന്ന കാര്യം ശ്രദ്ധിക്കുക, തുടർന്നുള്ള അപ്ഡേറ്റുകൾ വിപുലീകരണത്തിന്റെ മാനിഫെസ്റ്റിൽ സൂചിപ്പിച്ചിരിക്കുന്ന അപ്ഡേറ്റ് ചെയ്യുക URL നിർവഹിക്കുന്നു. <ph name="PRODUCT_NAME" /> എന്നതിന്റെ 67 വരെയും അത് ഉൾപ്പെടെയുമുള്ള പതിപ്പുകളിൽ ''അപ്ഡേറ്റ് ചെയ്യുക'' URL സ്പഷ്ടമായി വ്യക്തമാക്കേണ്ടത് നിർബന്ധമാണ്. + + ഉദാഹരണത്തിന്, <ph name="EXTENSION_POLICY_EXAMPLE" /> Chrome വെബ് സ്റ്റോർ "അപ്ഡേറ്റ് ചെയ്യുക" URL-ൽ നിന്ന് <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> ഇൻസ്റ്റാൾ ചെയ്യുന്നു. വിപുലീകരണങ്ങൾ ഹോസ്റ്റ് ചെയ്യുന്നതിനെക്കുറിച്ച് കൂടുതൽ വിവരങ്ങൾക്ക്: <ph name="LINK_TO_EXTENSION_DOC2" /> കാണുക. + + ഈ നയം സജ്ജീകരിക്കാതിരുന്നാൽ, ആപ്പുകളോ വിപുലീകരണങ്ങളോ സ്വമേധയാ ഇൻസ്റ്റാൾ ചെയ്യപ്പെടില്ല, കൂടാതെ <ph name="PRODUCT_NAME" />-ൽ ഏതൊരു ആപ്പുകളും വിപുലീകരണങ്ങളും ഉപയോക്താവിന് അൺഇൻസ്റ്റാൾ ചെയ്യാനാകും. + + അദൃശ്യ മോഡിന് ഈ നയം ബാധകമാകില്ല.</translation> <translation id="8274603902181597201">ഉപയോക്താവിന്റെ ecryptfs ഹോം ഡയറക്ടറി മായ്ച്ച ശേഷം, പുതിയൊരു ext4-encrypted ഹോം ഡയറക്ടറിയിൽ നിന്ന് ആരംഭിക്കുക.</translation> <translation id="8285435910062771358">പൂർണ്ണ-സ്ക്രീൻ മാഗ്നിഫയർ പ്രവർത്തനക്ഷമമാക്കി</translation> <translation id="8288199156259560552">Android Google ലൊക്കേഷൻ സേവനം പ്രവർത്തനക്ഷമമാക്കുക</translation> @@ -3106,7 +3208,7 @@ ഇവിടെ "പതിപ്പ്" എന്നത് '61.0.3163.120' പോലുള്ള ഒരു കൃത്യമായ പതിപ്പോ അല്ലെങ്കിൽ '61.0' പോലുള്ള ഒരു പതിപ്പ് പ്രിഫിക്സോ ആകാം </translation> <translation id="8544375438507658205"><ph name="PRODUCT_FRAME_NAME" />-നായുള്ള സ്ഥിരസ്ഥിതി HTML റെന്ഡറര്</translation> <translation id="8544465954173828789">എസ്എംഎസ് സന്ദേശങ്ങൾ ഫോണിൽ നിന്ന് Chromebook-ലേക്ക് സമന്വയിപ്പിക്കാൻ അനുവദിക്കുക.</translation> -<translation id="8548832052135586762">അച്ചടി കളർ മാത്രം, മോണോക്രോം മാത്രം അല്ലെങ്കിൽ കളർ മോഡ് നിയന്ത്രണമില്ല എന്നിവയിലേക്ക് സജ്ജമാക്കുന്നു. നയം സജ്ജമാക്കാതെയിരുന്നാൽ നിയന്ത്രണമില്ലാത്തതായി പരിഗണിക്കപ്പെടും.</translation> +<translation id="8548832052135586762">വർണ്ണം മാത്രം, ഏകവർണ്ണം മാത്രം അല്ലെങ്കിൽ വർണ്ണ മോഡ് പരിമിതിയില്ല എന്നതിലേക്ക് അച്ചടി സജ്ജീകരിക്കുന്നു. നയം സജ്ജീകരിക്കാതിരുന്നാൽ, പരിമിതി ഇല്ലാത്തതായി പരിഗണിക്കപ്പെടും.</translation> <translation id="8549772397068118889">ഉള്ളടക്ക പാക്കുകളുടെ പുറത്തുള്ള സൈറ്റുകൾ സന്ദർശിക്കുമ്പോൾ മുന്നറിയിപ്പ് നൽകുക</translation> <translation id="8566842294717252664">പുതിയ ടാബ് പേജിൽ നിന്നും ആപ്പ് ലോഞ്ചറിൽ നിന്നും വെബ് സ്റ്റോർ മറയ്ക്കുക</translation> <translation id="8586528890725660268">ഒരു ഉപയോക്താവിന് ഉപയോഗിക്കാൻ കഴിയാത്ത പ്രിന്ററുകളെ ഇത് വ്യക്തമാക്കുന്നു. @@ -3220,7 +3322,7 @@ ഈ ക്രമീകരണം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ ഉപയോക്താവിന് ഈ സംവിധാനം ഉപയോഗിക്കണോ വേണ്ടയോ എന്ന് തീരുമാനിക്കാൻ കഴിയും.</translation> <translation id="8870318296973696995">ഹോം പേജ്</translation> -<translation id="8876188741456358123">ഡിഫോൾട്ട് പ്രിന്റിങ് ഡുപ്ലെക്സ് മോഡ് അസാധുവാക്കുന്നു. മോഡ് ലഭ്യമല്ലെങ്കിൽ ഈ നയം അവഗണിക്കപ്പെടും.</translation> +<translation id="8876188741456358123">രണ്ട് വശത്തും അച്ചടിക്കാവുന്ന ഡിഫോൾട്ട് പ്രിന്റിങ് മോഡ് അസാധുവാക്കുന്നു. മോഡ് ലഭ്യമല്ലെങ്കിൽ, ഈ നയം അവഗണിക്കപ്പെടും.</translation> <translation id="8882006618241293596">ഈ സൈറ്റുകളിൽ <ph name="FLASH_PLUGIN_NAME" /> പ്ലഗിൻ ബ്ലോക്കുചെയ്യുക</translation> <translation id="890403179930035128">ഭാഷകളുടെ അക്ഷരപ്പിശക് പരിശോധന നിർവന്ധിച്ച് പ്രവർത്തനക്ഷമമാക്കുന്നു. ലിസ്റ്റിലെ തിരിച്ചറിയാനാകാത്ത ഭാഷകൾ അവഗണിക്കപ്പെടും. @@ -3346,11 +3448,12 @@ ഈ ക്രമീകരണം, RemoteAccessHostDomain നിലവിലുണ്ടെങ്കിൽ അത് അസാധുവാക്കും. RemoteAccessHostClientDomainList എന്നതും കാണുക.</translation> +<translation id="9077227880520270584">ഉപകരണ-പ്രാദേശിക അക്കൗണ്ടിന്റെ സ്വമേധയായുള്ള-ലോഗിൻ ടൈമർ</translation> <translation id="9084985621503260744">പവർ മാനേജ്മെന്റിനെ വീഡിയോ പ്രവർത്തനം ബാധിക്കുന്നുണ്ടോ എന്ന് വ്യക്തമാക്കുക</translation> <translation id="9088433379343318874">സൂപ്പർവൈസുചെയ്ത ഉപയോക്താക്കൾക്കുള്ള ഉള്ളടക്ക ദാതാവിനെ പ്രവർത്തനക്ഷമമാക്കുക</translation> <translation id="9088444059179765143">സ്വയം സമയമേഖല കണ്ടെത്തുന്ന രീതി കോൺഫിഗർ ചെയ്യുക</translation> -<translation id="9094064873808699479">OS പതിപ്പ് ടാർഗറ്റ് പതിപ്പിനേക്കാൾ പുതിയതാണെങ്കിൽ പിന്നിലേക്ക് പോയി ടാർഗറ്റ് പതിപ്പിൽ തുടരുക. സാധിക്കുമെങ്കിൽ റോൾബാക്ക് പ്രോസസിലും ഉപകരണ-തല കോൺഫിഗറേഷൻ തുടരാൻ ശ്രമിക്കുക (നെറ്റ്വർക്ക് ക്രെഡൻഷലുകൾ ഉൾപ്പെടെ), ഡാറ്റ പുനഃസ്ഥാപിക്കുന്നത് സാധിക്കുകയില്ലെങ്കിലും പരിപൂർണ പവർവാഷോടെ റോൾബാക്ക് ചെയ്യുക (ടാർഗറ്റ് പതിപ്പ് ഡാറ്റ പുനഃസ്ഥാപിക്കുന്നത് പിന്തുണയ്ക്കുന്നില്ല അല്ലെങ്കിൽ പിന്നിലേക്ക് പോകുന്നതിന് അനുയോജ്യമല്ലാത്ത മാറ്റം എന്നീ കാരണങ്ങളാൽ). - <ph name="PRODUCT_OS_NAME" /> പതിപ്പ് 70-ലും അതിനേക്കാൾ ഉയർന്ന പതിപ്പുകളിലും പിന്തുണയ്ക്കുന്നു. പഴയ ക്ലൈന്റുകൾക്ക് ഈ മൂല്യം റോൾബാക്ക് പ്രവർത്തനരഹിതമാക്കി എന്നാണ്.</translation> +<translation id="9094064873808699479">OS പതിപ്പ് ടാർഗറ്റ് പതിപ്പിനേക്കാൾ പുതിയതാണെങ്കിൽ പിന്നിലേക്ക് പോയി ടാർഗറ്റ് പതിപ്പിൽ തുടരുക. സാധ്യമെങ്കിൽ, തിരികെ പോകുന്ന പ്രോസസിലൂടെ ഉപകരണ-തല കോൺഫിഗറേഷൻ (നെറ്റ്വർക്ക് ക്രെഡൻഷലുകൾ ഉൾപ്പെടെ) തുടരാൻ ശ്രമിക്കുക, എന്നാൽ ഡാറ്റ പുനഃസ്ഥാപിക്കുന്നത് സാധ്യമല്ലെങ്കിൽ പോലും (ഡാറ്റ പുനഃസ്ഥാപിക്കുന്നത് ടാർഗറ്റ് പതിപ്പ് പിന്തുണയ്ക്കുന്നില്ല അല്ലെങ്കിൽ പിന്നിലേക്ക് പോകുന്നതിന് അനുയോജ്യമല്ലാത്ത മാറ്റം എന്നീ കാരണങ്ങളാൽ) പൂർണ്ണ powerwash ഉപയോഗിച്ച് തിരികെ പോവുക. + <ph name="PRODUCT_OS_NAME" /> പതിപ്പ് 70-ലും അതിന് ശേഷമുള്ളവയിലും പിന്തുണയ്ക്കുന്നു. പഴയ ക്ലയന്റുകൾക്ക്, ഈ മൂല്യം അർത്ഥമാക്കുന്നത്, തിരികെ പോകുന്നത് പ്രവർത്തനരഹിതമാക്കി എന്നാണ്.</translation> <translation id="9096086085182305205">പ്രാമാണീകരണ സെര്വറിന്റെ അനുമതിലിസ്റ്റ്</translation> <translation id="9098553063150791878">HTTP പ്രാമാണീകരണത്തിനുള്ള നയങ്ങൾ</translation> <translation id="9103061223348895346">ഉപയോക്താവ് നിഷ്ക്രിയമായിരിക്കുമ്പോൾ പവർ മാനേജുമെന്റ് തന്ത്രത്തിനായി ഈ നയം ഒന്നിലേറെ ക്രമീകരണങ്ങൾ നിയന്ത്രിക്കുന്നു. @@ -3433,13 +3536,13 @@ <translation id="9187743794267626640">ബാഹ്യ സംഭരണം മൗണ്ടുചെയ്യുന്നത് അപ്രാപ്തമാക്കുക</translation> <translation id="9197740283131855199">മങ്ങിയശേഷം ഉപയോക്താവ് സജീവമാണെങ്കിൽ സ്ക്രീൻ മങ്ങുന്നതിന്റെ കാലതാമസം സ്കെയിൽ ചെയ്യുന്നതനുസരിച്ചുള്ള ശതമാനം</translation> <translation id="9200828125069750521">POST ഉപയോഗിക്കുന്ന ഇമേജ് URL-നായുള്ള പാരാമീറ്ററുകൾ</translation> -<translation id="920209539000507585">'തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും' അച്ചടി ഡയലോഗിൽ ഓണാക്കുകയോ ഓഫാക്കുകയോ ചെയ്യുക. +<translation id="920209539000507585">'തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും' അച്ചടി ഡയലോഗിൽ നിർബന്ധിതമായി ഓണാക്കുക അല്ലെങ്കിൽ ഓഫാക്കുക. - നയം സജ്ജമാക്കിയിട്ടില്ലെങ്കിൽ, തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും അച്ചടിക്കണോ എന്നത് ഉപയോക്താവിന് തീരുമാനിക്കാം. + നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും അച്ചടിക്കണോ എന്നത് ഉപയോക്താവിന് തീരുമാനിക്കാം. - നയം തെറ്റ് എന്ന് സജ്ജമാക്കിയാൽ, 'തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും' അച്ചടി പ്രിവ്യൂ ഡയലോഗിൽ തിരഞ്ഞെടുക്കപ്പെടില്ല, ഉപയോക്താവിന് അത് മാറ്റാനുമാകില്ല. + നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, 'തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും' അച്ചടി പ്രിവ്യൂ ഡയലോഗിൽ തിരഞ്ഞെടുക്കപ്പെടില്ല, ഉപയോക്താവിന് അത് മാറ്റാനുമാവില്ല. - നയം ശരി എന്ന് സജ്ജമാക്കിയാൽ, 'തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും' അച്ചടി പ്രിവ്യൂ ഡയലോഗിൽ തിരഞ്ഞെടുക്കപ്പെടും, ഉപയോക്താവിന് അത് മാറ്റാനാകില്ല.</translation> + നയം 'ശരി' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, 'തലക്കെട്ടുകളും അടിക്കുറിപ്പുകളും' അച്ചടി പ്രിവ്യൂ ഡയലോഗിൽ തിരഞ്ഞെടുക്കപ്പെടും, ഉപയോക്താവിന് അത് മാറ്റാനുമാവില്ല.</translation> <translation id="9210953373038593554">SAML ലോഗിന്നുകൾക്ക് വേണ്ടിയുള്ള പരിശോധിച്ചുറപ്പിക്കൽ തരം കോൺഫിഗർ ചെയ്യുന്നു. ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിലോ അല്ലെങ്കിൽ ഡിഫോൾട്ടായി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ (മൂല്യം 0), മറ്റ് ഘടകങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള ബ്രൗസറുകളാണ് SAML ലോഗിന്നുകളുടെ പ്രവർത്തനരീതി നിർണ്ണയിക്കുന്നത്. ഉപയോക്തൃ പരിശോധിച്ചുറപ്പിക്കലും കാഷെ ചെയ്ത ഉപയോക്തൃ ഡാറ്റയുടെ പരിരക്ഷയും, ഉപയോക്താക്കൾ നേരിട്ട് നൽകുന്ന പാസ്വേഡുകളെ ആശ്രയിച്ചായിരിക്കും എന്നതാണ് ഏറ്റവും അടിസ്ഥാനപരമായ കാര്യം.
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb index a79aa40..52d08ef 100644 --- a/components/policy/resources/policy_templates_mr.xtb +++ b/components/policy/resources/policy_templates_mr.xtb
@@ -29,9 +29,9 @@ <translation id="1062407476771304334">पुनर्स्थित करा</translation> <translation id="1079801999187584280">डेव्हलपर टूलच्या वापराला मनाई करा</translation> <translation id="1087437665304381368">हे धोरण केवळ <ph name="PRODUCT_OS_NAME" /> विकासक मोड नियंत्रित करते. आपण Android विकासक पर्यायांमधील प्रवेश प्रतिबंधित करू इच्छित असल्यास, आपल्याला <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> धोरण सेट करावे लागेल.</translation> -<translation id="1093082332347834239">ही सेटिंग सक्षम केली असल्यास, दूरस्थ सहाय्य होस्ट <ph name="UIACCESS_PERMISSION_NAME" /> परवानग्या असलेल्या प्रक्रियेेमध्ये चालेल. हे दूरस्थ वापरकर्त्यांना स्थानिक वापरकर्त्याच्या डेस्कटॉपवर प्रगत विंडोशी परस्परसंवाद साधू देईल. +<translation id="1093082332347834239">हे सेटिंग सक्षम केली असल्यास, रिमोट साहाय्य होस्ट <ph name="UIACCESS_PERMISSION_NAME" /> परवानग्या असलेल्या प्रक्रियेमध्ये चालेल. हे रिमोट वापरकर्त्यांना स्थानिक वापरकर्त्याच्या डेस्कटॉपवर एलेव्हेटेड विंडोंशी परस्परसंवाद साधू देईल. - ही सेटिंग अक्षम केली असल्यास किंवा कॉन्फिगर केलेली नसल्यास, दूरस्थ सहाय्य होस्ट वापरकर्त्याच्या संदर्भामध्ये चालेल आणि दूरस्थ वापरकर्ते डेस्कटॉपवर प्रगत विंडोशी परस्परसंवाद साधू शकणार नाहीत.</translation> + ही सेटिंग अक्षम केली असल्यास किंवा कॉन्फिगर केलेली नसल्यास, रिमोट साहाय्य होस्ट वापरकर्त्याच्या संदर्भामध्ये चालेल आणि रिमोट वापरकर्ते डेस्कटॉपवर एलेव्हेटेड विंडोंशी परस्परसंवाद साधू शकणार नाहीत.</translation> <translation id="1096105751829466145">डीफॉल्ट शोध प्रदाता</translation> <translation id="1099282607296956954">प्रत्येक साइटसाठी साइट आयसोलेशन सुरू करा</translation> <translation id="1100570158310952027"> @@ -49,11 +49,11 @@ <translation id="1118093128235245168">कनेक्ट केलेल्या USB डिव्हाइसला अॅक्सेसची मंजूरी देण्यासाठी वापरकर्त्यास विचारण्याची साइटना अनुमती देते</translation> <translation id="1128903365609589950">डिस्कवर कॅशे केलेल्या फायली स्टोअर करण्यासाठी <ph name="PRODUCT_NAME" /> वापरेल ती डिरेक्टरी कॉन्फिगर करते. - तुम्ही हे धोरण सेट केल्यास, वापरकर्त्याने '--डिस्क-कॅशे-डिरेक्टरी' फ्लॅग केली असली किंवा नसली तरीही <ph name="PRODUCT_NAME" /> प्रदान केलेली डिरेक्टरी वापरेल. डेटा गहाळ होणे किंवा अन्य अनपेक्षित कोणत्याही एरर टाळण्यासाठी हे धोरण व्हॉल्यूमच्या मूळ निर्देशिकेवर किंवा अन्य हेतूंसाठी वापरल्या जाणार्या निर्देशिकेवर सेट केले जाऊ नये, कारण <ph name="PRODUCT_NAME" /> तिची आशय व्यवइंस्टॉल करते. + तुम्ही हे धोरण सेट केल्यास, वापरकर्त्याने '--डिस्क-कॅशे-डिरेक्टरी' फ्लॅग निर्दिष्ट केले असले किंवा नसले तरीही <ph name="PRODUCT_NAME" /> दिलेली डिरेक्टरी वापरेल. डेटा गहाळ होणे किंवा अन्य अनपेक्षित कोणत्याही एरर टाळण्यासाठी हे धोरण व्हॉल्यूमच्या मूळ निर्देशिकेवर किंवा अन्य हेतूंसाठी वापरल्या जाणार्या निर्देशिकेवर सेट केले जाऊ नये, कारण <ph name="PRODUCT_NAME" /> तिचा आशय व्यवस्थापित करते. - वापरल्या जाऊ शकणार्या व्हेरिएबलांच्या सूचीसाठी https://www.chromium.org/administrators/policy-list-३/user-data-directory-variables पहा. + वापरल्या जाऊ शकणार्या व्हेरिएबलच्या सूचीसाठी https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables पहा. - हे धोरण सेट न केलेले ठेवल्यास डीफॉल्ट कॅशे डिरेक्टरी वापरली जाईल आणि वापरकर्ता '--डिस्क-कॅशे-डिरेक्टरी' कमांड ओळ फ्लॅग करून ओव्हराइड करु शकते.</translation> + हे धोरण सेट न केलेले ठेवल्यास डीफॉल्ट कॅशे डिरेक्टरी वापरली जाईल आणि वापरकर्ता '--डिस्क-कॅशे-डिरेक्टरी' कमांड ओळ फ्लॅगसह त्यास ओव्हरराइड करण्यात सक्षम असेल.</translation> <translation id="1135264353752122851"><ph name="PRODUCT_OS_NAME" /> वापरकर्ता सेशनसाठी कोणत्या कीबोर्ड लेआउटना अनुमती आहे ते कॉन्फिगर करते. हे धोरण सेट केलेले असल्यास, वापरकर्त्याला या धोरणाने निर्दिष्ट केलेल्या इनपुट पद्धतींपैकी फक्त एक पद्धत निवडता येईल. हे धोरण सेट केलेले नसल्यास किंवा रिकाम्या सूचीवर सेट केलेले असल्यास, वापरकर्त्याला सर्व सपोर्ट असलेल्या इनपुट पद्धती निवडता येतील. सद्य इनपुट पद्धतीला या धोरणाने अनुमती दिलेली नसल्यास, इनपुट पद्धत हार्डवेअर कीबोर्ड लेआउटवर (अनुमती असल्यास) किंवा या सूचीमधील पहिल्या वैध एंट्रीवर स्विच केली जाईल. या सूचीमधील सर्व अवैध किंवा सपोर्ट नसलेल्या इनपुट पद्धतींकडे दुर्लक्ष केले जाईल.</translation> @@ -132,7 +132,7 @@ जर धोरण सुरू केले असेल, तर स्वल्पविराम-विभक्त सूचीत असलेली, नाव दिलेली प्रत्येक ओरिजिन त्याच्या स्वतःच्या प्रक्रियेत रन होईल. हे सबडोमेननी नाव दिलेल्या ओरिजिनना देखील वेगळे करेल; उदा. https://example.com/ निर्दिष्ट करण्याने https://foo.example.com/ ही देखील https://example.com/site चा एक भाग म्हणून वेगळी करण्यास कारणीभूत ठरेल. जर हे धोरण बंद केले असेल, तर कोणतेही सुस्पष्ट साइट विलगीकरण आणि IsolateOrigins आणि SitePerProcess क्षेत्र चाचण्या बंद होतील. वापरकर्ते तरीही IsolateOrigins मॅन्युअली करू शकतात. जर धोरण कॉन्फिगर केले नसेल तर, वापरकर्ता हे सेटिंग बदलू शकतात. -<ph name="PRODUCT_OS_NAME" /> वर, <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> डिव्हाइस धोरणही समान मूल्याला सेट करण्याची शिफारस केली आहे. जर दोन्ही धोरणांद्वारे स्पष्ट करण्यात आलेली मूल्ये जुळली नाहीत, तर वापरकर्ता धोरणाद्वारे स्पष्ट करण्यात आलेले मूल्य लागू केले जात असताना वापरकर्ता सेशनमध्ये प्रवेश करण्यास विलंब होऊ शकतो. +<ph name="PRODUCT_OS_NAME" /> वर, <ph name="DEVICE_LOGIN_SCREEN_ISOLATE_ORIGINS_POLICY_NAME" /> डिव्हाइस धोरणही समान मूल्याला सेट करण्याची शिफारस केली आहे. जर दोन्ही धोरणांद्वारे स्पष्ट करण्यात आलेली मूल्ये जुळली नाहीत, तर वापरकर्ता धोरणाद्वारे स्पष्ट करण्यात आलेले मूल्य लागू केले जात असताना वापरकर्ता सेशनमध्ये अॅक्सेस करण्यास विलंब होऊ शकतो. टीप: हे धोरण Android ला लागू नाही. Android ला IsolateOrigins सुरू करण्यासाठी, IsolateOriginsAndroid धोरण सेटिंगचा वापर करा. </translation> @@ -140,6 +140,7 @@ <translation id="1387596372902085462">Symantec Corporation च्या Legacy PKI Infrastructure वर विश्वास ठेवणे चालू करायचे की, नाही</translation> <translation id="1393485621820363363">एंटरप्राइझ डीव्हाइस प्रिंटर सुरू केले</translation> <translation id="1397855852561539316">डीफॉल्ट शोध प्रदाता सूचना URL</translation> +<translation id="142346659686073702">संलग्न नसलेल्या वापरकर्त्यांनाही Crostini वापरण्याची अनुमती द्या</translation> <translation id="1426410128494586442">होय</translation> <translation id="1427655258943162134">प्रॉक्सी सर्व्हरचा पत्ता किंवा URL</translation> <translation id="1432194160771348078"> @@ -155,7 +156,7 @@ उदाहरणार्थ, <ph name="EXTENSION_POLICY_EXAMPLE" /> मानक Chrome वेब स्टोअरच्या "अपडेट" URL वरून <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> अॅप इंस्टॉल करते. होस्टिंग एक्सटेंशन्सबद्दल आणखी माहितीसाठी पहा: <ph name="LINK_TO_EXTENSION_DOC2" />.</translation> <translation id="1435659902881071157">डिव्हाइस-स्तरीय नेटवर्क कॉन्फिगरेशन</translation> <translation id="1438739959477268107">डीफॉल्ट की निर्मिती सेटिंग</translation> -<translation id="1454846751303307294">JavaScript चालवण्यासाठी अनुमती नसलेल्या साइट निर्दिष्ट करणार्या url नमुन्यांची सूची सेट करण्याची आपल्याला अनुमती देते. +<translation id="1454846751303307294">JavaScript चालवण्यासाठी अनुमती नसलेल्या साइट निर्दिष्ट करणार्या url नमुन्यांची सूची सेट करण्याची तुम्हाला अनुमती देते. हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट JavaScript सेटिंग' धोरण, किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation> <translation id="1456822151187621582">Windows (<ph name="PRODUCT_OS_NAME" /> क्लायंट):</translation> <translation id="1458547592473993238">हे धोरण बहिष्कृत केले आहे. कृपया Flash प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि पीडीएफ फायली उघडण्यासाठी पीडीएफ व्ह्यूअरचा वापर करावा की नाही हे नियंत्रित करण्यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा. @@ -245,7 +246,7 @@ तुम्ही हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा अधिलिखित करू शकत नाहीत. हे धोरण सेट न करता सोडल्यास, स्क्रीन विशालक सुरुवातीस बंद असतो, परंतु कोणत्याही वेळी वापरकर्त्याद्वारे चालू केला जाऊ शकतो.</translation> -<translation id="1655229863189977773">डिस्क कॅश आकार बाइटमध्ये सेट करा</translation> +<translation id="1655229863189977773">डिस्क कॅशे आकार बाइटमध्ये सेट करा</translation> <translation id="166427968280387991">प्रॉक्सी सर्व्हर</translation> <translation id="1668836044817793277">विलंब न होणाऱ्या कियोस्क अॅपसह ऑटो लाँच केलेली <ph name="PRODUCT_OS_NAME" /> आवृत्ती नियंत्रित करण्याची अनुमती द्यायची किंवा नाही. @@ -301,8 +302,8 @@ हे धोरण सेट न करता सोडून दिल्यास, नेटवर्क पूर्वानुमान सुरू केले जाईल पण वापरकर्ता ते बदलू शकेल.</translation> <translation id="1865417998205858223">की परवानग्या</translation> -<translation id="186719019195685253">AC ऊर्जेवर चालताना निष्क्रिय विलंब झाल्यानंतर करण्याची कारवाई</translation> -<translation id="187819629719252111"><ph name="PRODUCT_NAME" /> ला फाइल निवड संवाद डिस्प्ले करण्याची परवानगी देऊन मशीनवरील स्थानिक फायलींना अॅक्सेस करण्याची परवानगी देते. तुम्ही हे सेटिंग सक्षम केल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात. तुम्ही हे सेटिंग अक्षम केल्यास, जेव्हा वापरकर्ता फाइल निवड संवाद ( जसे बुकमार्क आयात करणे, फायली अपलोड करणे, दुवे सेव्ह करणे इ.) उत्पन्न करण्याची क्रिया करेल तसा त्याऐवजी संदेश डिस्प्ले केला जातो आणि वापरकर्ता फाइल निवड संवादावर रद्द करा क्लिक केले असल्याचे मानतो. हे सेटिंग सेट नसल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात.</translation> +<translation id="186719019195685253">AC ऊर्जेवर रन होताना निष्क्रिय विलंब झाल्यानंतर करण्याची कारवाई</translation> +<translation id="187819629719252111"><ph name="PRODUCT_NAME" /> ला फाइल निवड संवाद प्रदर्शित करण्याची परवानगी देऊन मशीनवरील स्थानिक फायलींना अॅक्सेस करण्याची परवानगी देते. तुम्ही हे सेटिंग सक्षम केल्यास, वापरकर्ते फाइल निवड संवाद सर्वसाधारण पद्धतीने उघडू शकतात. तुम्ही हे सेटिंग अक्षम केल्यास, जेव्हा वापरकर्ता फाइल निवड संवाद ( जसे बुकमार्क आयात करणे, फायली अपलोड करणे, लिंक सेव्ह करणे इ.) उत्पन्न करण्याची क्रिया करेल तसा त्याऐवजी संदेश प्रदर्शित केला जातो आणि वापरकर्ता फाइल निवड संवादावर रद्द करा क्लिक केले असल्याचे मानतो. हे सेटिंग सेट नसल्यास, वापरकर्ते फाइल निवड संवाद सर्वसाधारण पद्धतीने उघडू शकतात.</translation> <translation id="1879485426724769439">डिव्हाइससाठी वापरला जाणारा टाइमझोन नमूद करते. वापरकर्ते वर्तमान सेशनासाठी नमूद केलेला टाइमझोन ओव्हरराइड करू शकतात. तथापि, लॉगआउट केल्यावर ते मागे नमूद केलेल्या टाइमझोनवर सेट केले जाते. चुकीचे मूल्य प्रदान केल्यास, त्याऐवजी "GMT" वापरून धोरण अद्यापही सक्रिय केले जाते. रिक्त स्ट्रिंग प्रदान केल्यास, धोरण दुर्लक्षित केले जाते. हे धोरण वापरले नसल्यास, सध्या सक्रिय असलेला टाइमझोन वापरामध्ये असेल तरीही वापरकर्ते टाइमझोन बदलू शकतात आणि बदल कायमचा असेल. म्हणून एका वापरकर्त्याने केलेला बदल लॉगिन-स्क्रीनला आणि अन्य वापरकर्त्यांना प्रभावित करतो. @@ -314,16 +315,16 @@ हे धोरण सेट केल्यामुळे डिव्हाइस स्थानाने निराकरण केलेला टाइमझोन पूर्णपणे बंद होतो. ते SystemTimezoneAutomaticDetection धोरण ओव्हरराइड देखील करते.</translation> <translation id="1885782360784839335">पूर्ण-टॅब जाहिरात आशय दाखवणे सुरू करा</translation> <translation id="1888871729456797026">डेस्कटॉपवरील क्लाउड धोरणाच्या नोंदणीचे टोकन</translation> -<translation id="1897365952389968758">सर्व साइटना JavaScript चालविण्याची परवानगी द्या</translation> -<translation id="1906888171268104594">क्रॅश होणे अहवालांसह वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल, Google कडे पाठवला जातो का हे नियंत्रित करते. +<translation id="1897365952389968758">सर्व साइटना JavaScript रन करण्याची परवानगी द्या</translation> +<translation id="1906888171268104594">क्रॅश अहवालांसह वापर मेट्रिक आणि निदान केलेल्या डेटाचा अहवाल, Google कडे पाठवला जातो का हे नियंत्रित करते. -सत्य म्हणून सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल देईल. +सत्य म्हणून सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> वापर मेट्रिक आणि निदान केलेल्या डेटाचा अहवाल देईल. -असत्य म्हणून सेट केल्यास, वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल. +असत्य म्हणून सेट केल्यास, वापर मेट्रिक आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल. -कॉन्फिगर न केल्यास व्यवस्थापित नसलेल्या डिव्हाइसवर वापर मेट्रिक्स आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल आणि व्यस्थापित असलेल्या डिव्हाइसवर अहवाल देणे सुरू केले जाईल.</translation> -<translation id="1914840757300882918">हे धोरण सेट केले असल्यास, होस्ट RemoteAccessHostTokenValidationUrl प्रमाणित करण्यासाठी दिलेला जारीकर्ता CNसह एक क्लायंट सर्टिफिकेट वापरतो. कोणतेही उपलब्ध क्लायंट सर्टिफिकेट वापरण्यासाठी यास "*" वर सेट करा. - हे वैशिष्ट्य सध्या सर्व्हरकडून बंद केले आहे.</translation> +कॉन्फिगर न केल्यास अव्यवस्थापित डिव्हाइसवर वापर मेट्रिक आणि निदान केलेल्या डेटाचा अहवाल देणे बंद केले जाईल आणि व्यवस्थापित डिव्हाइसवर अहवाल देणे चालू केले जाईल.</translation> +<translation id="1914840757300882918">हे धोरण सेट केले असल्यास, होस्ट RemoteAccessHostTokenValidationUrl प्रमाणित करण्यासाठी दिलेला जारीकर्ता CNसह एक क्लायंट प्रमाणपत्र वापरतो. कोणतेही उपलब्ध क्लायंट प्रमाणपत्र वापरण्यासाठी यास "*" वर सेट करा. + हे वैशिष्ट्य सध्या सर्व्हरने बंद केले आहे.</translation> <translation id="1920046221095339924">डिव्हाइसवरील व्यवस्थापित केलेल्या सत्राला अनुमती द्या</translation> <translation id="1929709556673267855">एंटरप्राइझ प्रिंटरसाठी कॉन्फिगरेशन पुरवते. @@ -345,13 +346,13 @@ <translation id="1933378685401357864">वॉलपेपर इमेज</translation> <translation id="1956493342242507974"><ph name="PRODUCT_OS_NAME" /> मधील लॉगिन स्क्रीनवरील उर्जा व्यवस्थापन कॉन्फिगर करा. - लॉग इन स्क्रीन दर्शविली जात असताना काही वेळेसाठी कोणताही वापरकर्ता क्रियाकलाप नसतो तेव्हा <ph name="PRODUCT_OS_NAME" /> कसे वर्तन करते हे धोरण आपल्याला हे कॉन्फिगर करू देते. धोरण एकाधिक सेटिंग्ज नियंत्रित करते. त्यांच्या वैयक्तिक अर्थव्यवस्था आणि मूल्य श्रेण्यांसाठी, एका सत्रामधील उर्जा व्यवस्थापन नियंत्रित करणारी संबंधित धोरणे पहा. केवळ या धोरणांमधील विचलने अशी आहेत: - * निष्क्रिय केल्याने किंवा लिड बंद केल्याने सत्र समाप्त होऊ शकत नाही. - * AC उर्जेवर चालताना निष्क्रिय असताना डीफॉल्ट कारवाई बंद करणे आहे. + लॉग इन स्क्रीन दर्शवली जात असताना काही वेळेसाठी कोणताही वापरकर्ता अॅक्टिव्हिटी नसतो तेव्हा <ph name="PRODUCT_OS_NAME" /> कसे वर्तन करते हे धोरण तुम्हाला हे कॉन्फिगर करू देते. धोरण एकाहून अधिक सेटिंग्ज नियंत्रित करते. त्यांच्या वैयक्तिक अर्थव्यवस्था आणि मूल्य श्रेण्यांसाठी, एका सेशनामधील उर्जा व्यवस्थापन नियंत्रित करणारी संबंधित धोरणे पहा. या धोरणांमध्ये अशी फारकत होऊ शकते: + * निष्क्रिय केल्याने किंवा लिड बंद केल्याने सेशन संपू शकत नाही. + * AC उर्जेवर रन होताना निष्क्रिय असताना डीफॉल्ट कारवाई बंद करणे आहे. - सेटिंग अनिर्दिष्ट करता सोडल्यास, डीफॉल्ट मूल्य वापरले जाते. +सेटिंग अनिर्दिष्ट करता सोडल्यास, डीफॉल्ट मूल्य वापरले जाते. - हे धोरण सेट न करता सोडल्यास, सर्व सेटिंग्जसाठी डीफॉल्ट वापरले जातात.</translation> +हे धोरण सेट न करता सोडल्यास, सर्व सेटिंग्जसाठी डीफॉल्ट वापरले जातात.</translation> <translation id="1958138414749279167"><ph name="PRODUCT_NAME" /> चे ऑटोफिल वैशिष्ट्य सुरू करते आणि यापूर्वी स्टोअर केलेली माहिती वापरून वापरकर्त्यांना वेब फॉर्म आणि पत्ता माहिती आपोआप पूर्ण करण्याची अनुमती देते. हे सेटिंग बंद केल्यास, ऑटोफिल कधीही पत्ता माहिती सुचवणार किंवा भरणार नाही तसेच ब्राउझ करत असताना वापरकर्त्याने कदाचित सबमिट केलेली अतिरिक्त पत्त्याची माहिती ते सेव्ह करणार नाही. @@ -412,6 +413,13 @@ हे धोरण सेट न केलेले ठेवल्यास, ते सुरू ठेवले जाण्यासारखेच असते, वरील वर्णन पहा.</translation> <translation id="2113068765175018713">स्वयंचलितपणे रीबूट करून डिव्हाइस चालू असण्याच्या वेळेवर मर्यादा घाला</translation> +<translation id="2116790137063002724">हे धोरण OS लॉग इन, <ph name="PRODUCT_NAME" /> प्रोफाइल लॉग इन, <ph name="PRODUCT_NAME" /> प्रोफाइल नाव, प्रोफाइल पथ आणि <ph name="PRODUCT_NAME" /> कार्यवाही करण्यायोग्य पथ यासारखी वापरकर्त्यांना ओळखण्यासाठी वापरली जाऊ शकणारी माहिती द्यायची की नाही हे नियंत्रित करते. + + <ph name="PRODUCT_NAME" /> हे धोरण सेट न करता सोडून दिल्यास किंवा सत्यवर सेट केल्यास, वापरकर्त्यांना ओळखण्यासाठी वापरली जाऊ शकते, अशी माहिती गोळा केली जाते. + + हे धोरण असत्यवर सेट केल्यास, वापरकर्त्यांना ओळखण्यासाठी वापरली जाऊ शकते,अशी माहिती गोळा केली जात नाही. + + हे धोरण फक्त <ph name="CHROME_REPORTING_EXTENSION_NAME" /> सुरू केलेले असताना आणि <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> सह मशीनची नोंदणी केलेली असताना प्रभावी असते.</translation> <translation id="2127599828444728326">या साइटवरील अधिसूचनांना परवानगी द्या</translation> <translation id="2131902621292742709">बॅटरी उर्जेवर चालताना स्क्रीन अंधुक विलंब</translation> <translation id="2132732175597591362">ऑटोप्ले नेहमी सुरू असलेल्या URL पॅटर्नची व्हाइटलिस्ट नियंत्रित करते. @@ -485,9 +493,9 @@ तुम्ही धोरण 'DisallowArc' वर सेट केल्यास, डिव्हाइसवरील सर्व वापरकर्त्यांसाठी Android अॅप्स बंद केली जातील (आधीपासून ext4 एंक्रिप्शन असलेल्यांसह) आणि कोणत्याही वापरकर्त्यांना ecryptfs पासून ext4 एंक्रिप्शनपर्यंत कोणतेही स्थलांतर करू दिले जाणार नाही. - तुम्ही धोरण 'AllowMigration' वर सेट केल्यास, ज्यांच्याकडे ecryptfs होम डिरेक्टरी आहेत अशा वापरकर्त्यांना त्या ext4 एंक्रिप्शनवर गरजेनुसार स्थलांतरित करू दिल्या जातील (सध्या डिव्हाइसवर Android N उपलब्ध झाल्यावर). + तुम्ही धोरण 'AllowMigration' वर सेट केल्यास, ज्यांच्याकडे ecryptfs होम डिरेक्टरी आहेत अशा वापरकर्त्यांना त्या ext4 एंक्रिप्शनवर गरजेनुसार मायग्रेट करू दिल्या जातील (सध्या डिव्हाइसवर Android N उपलब्ध झाल्यावर). - हे धोरण kiosk अॅप्सना लागू होत नाही - ती आपोआप संक्रमित होतात. धोरण सेट न करता राहू दिल्यास, डिव्हाइस 'DisallowArc' निवडले आहे असे समजून काम करेल.</translation> + हे धोरण kiosk अॅप्सना लागू होत नाही - ती आपोआप मायग्रेट होतात. धोरण सेट न करता राहू दिल्यास, डिव्हाइस 'DisallowArc' निवडले आहे असे समजून काम करेल.</translation> <translation id="2195032660890227692"><ph name="PRODUCT_NAME" /> ६८ मध्ये हे धोरण काढले गेले आणि <ph name="ARC_BR_POLICY_NAME" /> ने बदलले गेले.</translation> <translation id="219720814106081560">चालू असल्यास किंवा कॉन्फिगर नसल्यास (डीफॉल्ट), सूचित न करता प्रवेश मंजूर केल्या जाणार्या VideoCaptureAllowedUrls सूचीमध्ये कॉन्फिगर केलेल्या URL शिवाय व्हिडिओ कॅप्चर अॅक्सेससाठी वापरकर्त्यास सूचित केले जाईल. @@ -498,7 +506,7 @@ <translation id="2204753382813641270">शेल्फ स्वयं-लपविणे नियंत्रित करा</translation> <translation id="2208976000652006649">POST वापरणार्या शोध URL साठी प्राचल</translation> <translation id="2223598546285729819">डीफॉल्ट सूचना सेटिंग</translation> -<translation id="2231817271680715693">प्रथमच चालताना डीफॉल्ट ब्राउझरमधून ब्राउझिंग इतिहास आयात करा</translation> +<translation id="2231817271680715693">प्रथमच रन होत असल्यास डीफॉल्ट ब्राउझरमधून ब्राउझिंग इतिहास आयात करा</translation> <translation id="2236488539271255289">स्थानिक डेटा सेट करण्यासाठी कोणत्याही साइटला परवानगी देऊ नका</translation> <translation id="2240879329269430151">वेबसाइटना पॉप-अप दर्शविण्याची अनुमती आहे की नाही ते सेट करण्याची आपल्याला अनुमती देते. पॉपअप दर्शविण्यास सर्व वेबसाइटनां अनुमती दिली जाऊ शकते किंवा सर्व वेबसाइटनां नकार दिला जाऊ शकतो. हे धोरण सेट न करता सोडल्यास, 'पॉपअप अवरोधित करा' वापरले जाईल आणि वापरकर्ता ते बदलण्यास सक्षम असेल.</translation> @@ -517,11 +525,11 @@ तुम्ही हे धोरण सेट केल्यास, वापरकर्ते तो बदलू किंवा अधिशून्य करू शकणार नाहीत. तथापि, वापरकर्ते तरीही ऑन-स्क्रीन कीबोर्डवरील अॅक्सेसयोग्यता सक्षम/अक्षम करण्यात सक्षम होतील जे या धोरणाद्वारे नियंत्रित व्हर्च्युअल कीबोर्डवर प्राथमिकता घेते. अॅक्सेसयोग्यता ऑन-स्क्रीन कीबोर्ड नियंत्रित करण्यासाठी |VirtualKeyboardEnabled| धोरण पहा. हे धोरण सेट न करता सोडल्यास, ऑन-स्क्रीन कीबोर्ड सुरुवातीस अक्षम केला जातो परंतु कधीही वापरकर्त्याद्वारे सक्षम केला जाऊ शकतो. कीबोर्ड केव्हा डिस्प्ले करावा हे ठरविण्यासाठी अन्वेषणोपयोगी नियम देखील वापरले जाऊ शकतात.</translation> -<translation id="228659285074633994">वापरकर्ता इनपुटशिवाय कालावधी निर्दिष्ट करते ज्यानंतर जेव्हा AC उर्जेवर चालते तेव्हा एक चेतावणी संवाद दर्शविला जातो. +<translation id="228659285074633994">वापरकर्ता इनपुटशिवाय कालावधी निर्दिष्ट करते ज्यानंतर जेव्हा AC उर्जेवर चालते तेव्हा एक चेतावणी संवाद दाखवला जातो. जेव्हा हे धोरण सेट केले जाते, तेव्हा निष्क्रिय कारवाई केली जाणार आहे असे वापरकर्त्यास सांगणारा एक चेतावणी संवाद <ph name="PRODUCT_OS_NAME" /> ने दर्शविण्यापूर्वी वापरकर्त्याने निष्क्रिय रहाणे आवश्यक असलेला कालावधी हे निर्दिष्ट करते. - हे धोरण सेट केलेले नसते, तेव्हा कोणताही चेतावणी संवाद दर्शविला जात नाही. + हे धोरण सेट केलेले नसते, तेव्हा कोणताही चेतावणी संवाद दाखवला जात नाही. धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्ट केले जावे. निष्क्रिय विलंबापेक्षा कमी किंवा समान असण्यासाठी मूल्ये नियंत्रित केली जातात.</translation> <translation id="2292084646366244343"><ph name="PRODUCT_NAME" /> स्पेलिंगविषयक एररचे निराकरण करण्यात मदत करण्यासाठी Google वेब सेवा वापरू शकते. हे सेटिंग सक्षम असल्यास, सेवा नेहमी वापरली जाते. हे सेटिंग अक्षम असल्यास, सेवा कधीही वापरली जात नाही. @@ -533,24 +541,24 @@ हे धोरण प्रशासकाला त्यांच्या वापरकर्त्यांसाठी प्रिंटर कॉन्फिगरेशन पुरवण्याची अनुमती देते. -<ph name="PRINTER_DISPLAY_NAME" /> आणि <ph name="PRINTER_DESCRIPTION" /> या मुक्त स्वरूपाच्या स्ट्रिंग आहेत ज्या प्रिंटर निवडीच्या सोयीसाठी कस्टमाइझ केले जाऊ शकते. <ph name="PRINTER_MANUFACTURER" /> आणि <ph name="PRINTER_MODEL" /> अंतिम वापरकर्त्याद्वारे सहज प्रिंटर ओळख करू देते. ते निर्माता आणि प्रिंटरचा मॉडेल दाखवते. <ph name="PRINTER_URI" /> ने <ph name="URI_SCHEME" /> <ph name="URI_PORT" /> आणि <ph name="URI_QUEUE" /> सह क्लायंट कॉंप्युटरकडून पोहोचण्यायोग्य पत्ता असणे आवश्यक आहे. <ph name="PRINTER_UUID" /> पर्यायी आहे. जर पुरवले असल्यास, ते डुप्लिकेट <ph name="ZEROCONF_DISCOVERY" /> प्रिंटरला मदत करण्यासाठी वापरले जाते. +<ph name="PRINTER_DISPLAY_NAME" /> आणि <ph name="PRINTER_DESCRIPTION" /> या मुक्त स्वफॉरमॅटच्या स्ट्रिंग आहेत ज्या प्रिंटर निवडीच्या सोयीसाठी कस्टमाइझ केले जाऊ शकते. <ph name="PRINTER_MANUFACTURER" /> आणि <ph name="PRINTER_MODEL" /> अंतिम वापरकर्त्याद्वारे सहज प्रिंटर ओळख करू देते. ते निर्माता आणि प्रिंटरचा मॉडेल दाखवते. <ph name="PRINTER_URI" /> ने <ph name="URI_SCHEME" /> <ph name="URI_PORT" /> आणि <ph name="URI_QUEUE" /> सह क्लायंट कॉंप्युटरकडून पोहोचण्यायोग्य पत्ता असणे आवश्यक आहे. <ph name="PRINTER_UUID" /> पर्यायी आहे. जर पुरवले असल्यास, ते डुप्लिकेट <ph name="ZEROCONF_DISCOVERY" /> प्रिंटरला मदत करण्यासाठी वापरले जाते. -<ph name="PRINTER_EFFECTIVE_MODEL" /> हे <ph name="PRODUCT_NAME" /> सपोर्ट असलेल्या प्रिंटर सादर करणार्या स्ट्रिंगपैकी एकशी जुळणे आवश्यक आहे. प्रिंटरसाठी योग्य PPD ओळखण्यासाठी आणि इंस्टॉल करण्यासाठी स्ट्रिंग वापरली जाईल. अधिक माहिती https://support.google.com/chrome?p=noncloudprint येेेे थथथमिळू शकते. +<ph name="PRINTER_EFFECTIVE_MODEL" /> हे <ph name="PRODUCT_NAME" /> सपोर्ट असलेल्या प्रिंटर सादर करणार्या स्ट्रिंगपैकी एकाशी जुळणे आवश्यक आहे. प्रिंटरसाठी योग्य PPD ओळखण्यासाठी आणि इंस्टॉल करण्यासाठी स्ट्रिंग वापरली जाईल. अधिक माहिती https://support.google.com/chrome?p=noncloudprint येथे मिळू शकते. -प्रिंटर सेटअप प्रिंटरच्या पहिल्या वापराच्या वेळी पूर्ण केले आहे. प्रिंटर वापरेपर्यंत PPD डाउनलोड केलेल्या नाहीत. त्यानंतर नेहमी वापरल्या जाणाऱ्या PPD कॅश केल्या आहेत. +प्रिंटर सेटअप प्रिंटरच्या पहिल्या वापराच्या वेळी पूर्ण केले आहे. प्रिंटर वापरेपर्यंत PPD डाउनलोड केलेल्या नाहीत. त्यानंतर नेहमी वापरल्या जाणाऱ्या PPD कॅशे केल्या आहेत. वापरकर्ते वैयक्तिक डिव्हाइसवर प्रिंटर कॉन्फिगर करू शकतात किंवा नाही यावर या धोरणाचा परिणाम होत नाही. वैयक्तिक वापरकर्त्यांद्वारे प्रिंटरच्या कॉन्फिगरेशनला पूरक म्हणून ते उद्देशित आहे. -Active Directory द्वारे व्यवस्थापित डिव्हाइससाठी हे धोरण <ph name="MACHINE_NAME_VARIABLE" /> च्या Active Directory मशीन नावावरील विस्ताराला किंवा ते कमी करण्यास सपोर्ट करते. उदाहरणार्थ, जर मशीनचे नाव <ph name="MACHINE_NAME_EXAMPLE" /> असेल, तर <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> हे सहाव्या स्थानानंतर चार अक्षरांनी बदलले जाईल, म्हणजे <ph name="MACHINE_NAME_PART_EXAMPLE" /> होईल. लक्षात ठेवा की हे स्थान शून्य-आधारित आहे. +Active Directory द्वारे व्यवस्थापित डिव्हाइससाठी हे धोरण <ph name="MACHINE_NAME_VARIABLE" /> च्या Active Directory मशीन नावावरील एक्स्टेंशनला किंवा ते कमी करण्यास सपोर्ट करते. उदाहरणार्थ, जर मशीनचे नाव <ph name="MACHINE_NAME_EXAMPLE" /> असेल, तर <ph name="MACHINE_NAME_VARIABLE_EXAMPLE" /> हे सहाव्या स्थानानंतर चार अक्षरांनी बदलले जाईल, म्हणजे <ph name="MACHINE_NAME_PART_EXAMPLE" /> होईल. लक्षात ठेवा, की हे स्थान शून्य-आधारित आहे. </translation> <translation id="2294382669900758280">हे धोरण <ph name="TRUE" /> वर सेट केले असले तरी देखील, Android अॅप्समध्ये व्हिडिओ प्ले करणे विचारात घेतले जात नाही.</translation> <translation id="2298647742290373702"><ph name="PRODUCT_NAME" /> मध्ये डीफॉल्ट नवीन टॅब पृष्ठ कॉन्फिगर करा.</translation> <translation id="2299220924812062390">सक्षम केलेल्या प्लगइनची सूची निर्दिष्ट करा</translation> <translation id="2303795211377219696">क्रेडिट कार्डांसाठी AutoFill सुरू करा</translation> <translation id="2309390639296060546">डीफॉल्ट भौगोलिक स्थान सेटिंग</translation> -<translation id="2312134445771258233">स्टार्टअपवर लोड केलेली पेज कॉन्फिगर करण्यास आपल्याला परवानगी देते. +<translation id="2312134445771258233">स्टार्टअपवर लोड केलेली पेज कॉन्फिगर करण्यास तुम्हाला परवानगी देते. - जोपर्यंत आपण ‘स्टार्टअप वर क्रिया करा’ मध्ये ‘URL ची सूची उघडा’ निवडत नाही तोपर्यंत ‘स्टार्टअपवर उघडण्यासाठी URL’ च्या सूचीची सामग्री दुर्लक्षित केली जाते.</translation> + जोपर्यंत तुम्ही ‘स्टार्टअप वर क्रिया करा’ मध्ये ‘URL ची सूची उघडा’ निवडत नाही तोपर्यंत ‘स्टार्टअपवर उघडण्यासाठी URL’ च्या सूचीतील आशयाकडे दुर्लक्ष केले जाते.</translation> <translation id="2327252517317514801">G Suite अॅक्सेस करण्यासाठी अनुमत डोमेन निर्धारित करा</translation> <translation id="237494535617297575">सूचना डिस्प्ले करण्याची अनुमती असलेल्या साइट निर्दिष्ट करणारी url नमुन्यांची सूची सेट करण्याची तुम्हाला अनुमती देते. @@ -615,11 +623,11 @@ हे धोरण असत्य वर सेट केल्यास, नेटवर्क कॉन्फिगर सूचनेऐवजी एक एरर मेसेज डिस्प्ले केला जाईल.</translation> <translation id="2498238926436517902">शेल्फ नेहमी स्वयं-लपवा</translation> -<translation id="2514328368635166290">डीफॉल्ट शोध प्रदात्याच्या पसंतीचे चिन्ह URL निर्दिष्ट करते. +<translation id="2514328368635166290">डीफॉल्ट शोध पुरवठादाराच्या पसंतीचे आयकन URL निर्दिष्ट करते. - हे धोरण पर्यायी आहे. सेट न केल्यास, शोध प्रदात्यासाठी कोणतेही चिन्ह उपस्थित असणार नाही. +हे धोरण पर्यायी आहे. सेट न केल्यास, शोध पुरवठादारासाठी कोणतेही आयकन उपलब्ध असणार नाही. - 'डीफॉल्ट शोध प्रदाता धोरण सक्षम' धोरण समक्ष केले असल्यासच या धोरणाचे पालन केले जाते.</translation> +डीफॉल्ट शोध पुरवठादार धोरण सक्षम' धोरण समक्ष केले असल्यासच या धोरणाचे पालन केले जाते.</translation> <translation id="2516600974234263142"><ph name="PRODUCT_NAME" /> मध्ये प्रिंट सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते. हे सेटिंग सक्षम केलेले असल्यास किंवा कॉन्फिगर केलेले नसल्यास, वापरकर्ते प्रिंट करू शकतात. @@ -688,7 +696,7 @@ हे धोरण सेट न केल्यास, 'भौगोलिक स्थान विचारा' वापरले जाईल आणि वापरकर्ता ते बदलण्यास सक्षम असेल.</translation> <translation id="2647069081229792812">बुकमार्क संपादन सुरू किंवा बंद करा</translation> <translation id="2649896281375932517">वापरकर्त्यांना ठरवू द्या</translation> -<translation id="2650049181907741121">वापरकर्ता लिड बंद करतो तेव्हा करावयाची कारवाई</translation> +<translation id="2650049181907741121">वापरकर्ता लिड बंद करतो तेव्हा करायची कारवाई</translation> <translation id="2655233147335439767">डीफॉल्ट शोध करताना वापरण्यात येणार्या शोध इंजिनची URL निर्दिष्ट करते. URL मध्ये '<ph name="SEARCH_TERM_MARKER" />' स्ट्रिंग असणे आवश्यक आहे, जी क्वेरीच्या वेळी वापरकर्ता शोधत असलेल्या अटींनी पुनर्स्थित केली जाईल. Google ची URL हे म्हणून निर्दिष्ट केली जाऊ शकते: <ph name="GOOGLE_SEARCH_URL" />. @@ -704,6 +712,11 @@ <translation id="267596348720209223">शोध प्रदात्याकडून समर्थित वर्ण एन्कोडिंग निर्दिष्ट करते. एन्कोडिंग या UTF-8, GB2312, आणि ISO-8859-1 सारखी कोड पृष्ठ नावे आहेत. ती दिलेल्या क्रमाने वापरुन पाहिली जातात. हे धोरण पर्यायी आहे. सेट न केल्यास, डीफॉल्ट वापरले जाईल, जे UTF-8 आहे. 'डीफॉल्ट शोध प्रदाता सक्षम' हे धोरण सक्षम केले तरच केवळ हे धोरण विचारात घेतले जाते.</translation> +<translation id="2682697254900811431"><ph name="PRODUCT_NAME" /> चा वापर आणि क्रॅशशी संबंधित डेटाचा अहवाल अज्ञातपणे पाठवणे सक्षम करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यास प्रतिबंध करते. + +हे सेटिंग सक्षम केलेले असेल, तर वापर आणि क्रॅशशी संबंधित डेटाचा अहवाल Googleला अज्ञातपणे पाठवला जाईल. हे सेटिंग अक्षम केलेले असेल, तर ही माहिती Googleला पाठवली जाणार नाही. सेटिंगच्या या दोन्ही स्थितींमध्ये वापरकर्त्याला हे सेटिंग ओव्हरराइड करता येणार नाही किंवा बदलता येणार नाही. हे धोरण सेट केलेले नसल्यास, वापरकर्त्याने इंस्टॉलेशनच्या वेळी / पहिल्या रनमध्ये निवडले होते ते सेटिंग वापरण्यात येईल. + +हे धोरण <ph name="MS_AD_NAME" /> डोमेनला न जोडलेल्या Windows इंस्टंसमध्ये उपलब्ध नाही. (Chrome OS साठी DeviceMetricsReportingEnabled पाहा)</translation> <translation id="268577405881275241">डेटा संक्षेप प्रॉक्सी वैशिष्ट्य सक्षम करा</translation> <translation id="2693108589792503178">पासवर्ड बदलण्याची URL कॉन्फिगर करा.</translation> <translation id="2710534340210290498">ही सेटिंग असत्य वर सेट केली असल्यास, वापरकर्ते स्क्रीन लॉक करू शकणार नाहीत (केवळ वापरकर्ता सत्रातून साइनिंग आउट केल्यावर शक्य होईल). ही सेटिंग सत्य वर सेट केली असल्यास, जे वापरकर्ते पासवर्डद्वारे प्रमाणित आहेत ते स्क्रीन लॉक करू शकतील.</translation> @@ -746,9 +759,9 @@ धोरण असत्यवर सेट केल्यास, वापरकर्ते त्यांच्या स्वतःचे प्रिंंटर जोडू आणि कॉन्फिगर करू शकणार नाहीत. ते आधी कॉन्फिगर केलेले मूळ प्रिंटर वापरूनही प्रिंट करू शकणार नाहीत. </translation> <translation id="2805707493867224476">पॉप-अप दर्शविण्यासाठी सर्व साइटना परवानगी द्या</translation> -<translation id="2808013382476173118">जेव्हा दूरस्थ क्लायंट या मशीनवर एक कनेक्शन इंस्टॉल करण्याचा प्रयत्न करत असतात तेव्हा STUN सर्व्हरचा वापर सक्षम करते. +<translation id="2808013382476173118">जेव्हा रिमोट क्लायंट या मशीनवर एक कनेक्शन इंस्टॉल करण्याचा प्रयत्न करत असतात तेव्हा STUN सर्व्हरचा वापर सक्षम करते. - हे सेटिंग सक्षम असल्यास, जरी फायरवॉलद्वारे ते विभक्त केले असले, तरीही दूरस्थ क्लायंट या मशीनवर शोधू आणि कनेक्ट करू शकतात. + हे सेटिंग सक्षम असल्यास, जरी फायरवॉलद्वारे ते विभक्त केले असले, तरीही रिमोट क्लायंट या मशीनवर शोधू आणि कनेक्ट करू शकतात. हे सेटिंग अक्षम केले असल्यास आणि फायरवॉलद्वारे चालू असलेली UDP कनेक्शन फिल्टर केलेली असल्यास, हे मशीन क्लायंट मशीनवरील कनेक्शनला फक्त स्थानिक नेटवर्कमध्ये अनुमती देईल. @@ -831,7 +844,7 @@ <translation id="3016255526521614822">Whitelist हे टिपा लिहिण्याचे अॅप्स <ph name="PRODUCT_OS_NAME" /> च्या लॉक स्क्रीनवर चालते</translation> <translation id="3021562480854470924">अनुमत असलेल्या माइलस्टोन रोलबॅकची संख्या</translation> <translation id="3030000825273123558">मेट्रिक्स अहवाल सक्षम करा</translation> -<translation id="3034580675120919256">वेबसाइटना JavaScript चालवण्याची अनुमती आहे की नाही ते सेट करण्याची आपल्याला अनुमती देते. JavaScript चालवण्याची सर्व वेबसाइटना अनुमती देण्यात येईल किंवा सर्व वेबसाइटसाठी नाकारता येईल. +<translation id="3034580675120919256">वेबसाइटना JavaScript चालवण्याची अनुमती आहे, की नाही ते सेट करण्याची तुम्हाला अनुमती देते. JavaScript चालवण्याची सर्व वेबसाइटना अनुमती देण्यात येईल किंवा सर्व वेबसाइटसाठी नाकारता येईल. हे धोरण सेट न केल्यास, 'JavaScript ला अनुमती द्या' वापरण्यात येईल आणि वापरकर्ता ते सेट करण्यास सक्षम असेल.</translation> @@ -907,14 +920,14 @@ तुम्ही हे सेटिंग सुरू केल्यास, <ph name="PRODUCT_NAME" /> आणि ARC-अॅप्स कमांड लाइनमधील नमूद केलेले सर्व प्रॉक्सी संबंधित पर्याय दुर्लक्षित करतात. हे धोरण सेट न केलेले सोडल्याने वापरकर्त्याला त्यांच्या स्वतःच्या प्रॉक्सी सेटिंग्ज निवडण्याची अनुमती देते.</translation> -<translation id="3205825995289802549">पहिल्यांदा चालविल्यावर प्रथम ब्राउझर विंडो मोठी करा</translation> +<translation id="3205825995289802549">पहिल्यांदा चालवल्यावर प्रथम ब्राउझर विंडो मोठी करा</translation> <translation id="3213821784736959823"><ph name="PRODUCT_NAME" /> मध्ये बिल्ट-इन DNS क्लायंट वापरले जाणे नियंत्रित करते. हे धोरण सत्य वर सेट केले असल्यास, उपलब्ध असल्यास, बिल्ट-इन DNS क्लायंट वापरले जाते. - हे धोरण चुकीचे वर सेट केले असल्यास, बिल्ट-इन DNS क्लायंट कधीही वापरले जाणार नाही. + हे धोरण असत्य वर सेट केले असल्यास, बिल्ट-इन DNS क्लायंट कधीही वापरले जाणार नाही. - हे धोरण सेट न करता सोडल्यास, वापरकर्ते बिल्ट-इन DNS क्लायंट chrome://flags संपादित करून वापरले जाणे बदलण्यात किंवा कमांड लाइन फ्लॅग करणे शक्य होइल.</translation> + हे धोरण सेट न करता सोडल्यास, वापरकर्ते बिल्ट-इन DNS क्लायंट chrome://flags संपादित करून वापरले जाणे बदलण्यात किंवा एक कमांड-लाइन फ्लॅग निर्दिष्ट करण्यात सक्षम होतील.</translation> <translation id="3214164532079860003">सक्षम केल्यास धोरण मुख्य पृष्ठाला वर्तमान डीफॉल्ड ब्राउझरमधून आयात करण्यास सक्ती करते. अक्षम केल्यास, मुख्य पृष्ठ आयात केले जात नाही. ते सेट केले नसल्यास, वापरकर्त्याला आयात करायचे की किंवा नाही, किंवा आयात करणे स्वयंचलितपणे होण्याबाबत विचारले जाते.</translation> @@ -961,6 +974,22 @@ हे धोरण सेट न केलेले ठेवल्यास, 'DefaultCookiesSetting' धोरण सेट केलेले असल्यास त्यावरून किंवा वापरकर्त्याच्या वैयक्तिक कॉन्फिगरेशवरून सर्व साइटसाठी ग्लोबल डीफॉल्ट मूल्य वापरले जाईल. 'CookiesBlockedForUrls' आणि 'CookiesSessionOnlyForUrls' धोरणेदेखील पहा. या तीन धोरणांंमध्ये परस्परविरोधी URL पॅटर्न नसणे आवश्यक आहे याची नोंद घ्या - कोणत्या धोरणाला प्राधान्य दिले जाईल हे निर्दिष्ट केलेले नाही.</translation> +<translation id="3373364525435227558">व्यवस्थापित केलेल्या सेशनासाठी एक किंवा अधिक शिफारस केलेल्या लोकॅल सेट करते. ज्यामुळे वापरकर्ते यातील कोणतीही एक लोकॅल सहजपणे निवडू शकतात. + + व्यवस्थापित सेशन सुरू करण्यापूर्वी वापरकर्ता लोकॅल आणि एक कीबोर्ड लेआउट निवडू शकतो. बाय डीफॉल्ट, <ph name="PRODUCT_OS_NAME" /> मध्ये सपोर्ट असलेल्या सर्व लोकॅल वर्णक्रमानुसार सूचीबद्ध केल्या जातात. शिफारस केलेल्या लोकॅलचा संच सूचीच्या सर्वात वर हलवण्यासाठी तुम्ही हे धोरण वापरू शकता. + + हे धोरण सेट न केल्यास, सध्याचे UI लोकॅल हे आधीपासून निवडलेले असेल. + + हे धोरण सेट केले असल्यास, शिफारस केलेल्या लोकॅल सूचीच्या सर्वात वर हलवल्या जातील आणि इतर सर्व लोकॅलपासून व्हिज्युअली वेगळ्या केल्या जातील. शिफारस केलेल्या लोकॅल ज्या क्रमात धोरणामध्ये दिसतात त्याच क्रमात सूचीबद्ध केल्या जातील. प्रथम शिफारस केलेले लोकॅल हे आधीपासून निवडलेले असेल. + + एकापेक्षा अधिक शिफारस केलेल्या लोकॅल असल्यास, वापरकर्ता या लोकॅलमधून निवडेल, असे गृहित धरले जाते. व्यवस्थापित केलेले सेशन सुरू करताना लोकॅल आणि कीबोर्ड लेआउट निवड प्रामुख्याने ऑफर केली जाते. नाहीतर, बहुतांश वापरकर्त्यांना आधीपासून निवडलेले लोकॅल वापरायचे आहे हे गृहित धरले जाते.व्यवस्थापित केलेले सेशन सुरू करताना लोकॅल आणि कीबोर्ड लेआउट निवड कमी महत्त्व देऊन ऑफर केली जाते. + + हे धोरण सेट केल्यास आणि आपोआप लॉग इन सुरू केले असल्यास (| DeviceLocalAccountAutoLoginId| आणि |DeviceLocalAccountAutoLoginDelay| धोरणे पाहा), आपोआप सुरू केलेले व्यवस्थापित केलेल्या सेशनमध्ये प्रथम शिफारस केलेले लोकॅल आणि या भाषेशी जुळणार्या सर्वाधिक लोकप्रिय कीबोर्ड लेआउटचा वापर करेल. + + आधीपासून निवडलेले कीबोर्ड लेआउट हे नेहमी आधीपासून निवडलेल्या भाषेशी जुळणारे सर्वाधिक लोकप्रिय लेआउट असेल. + + हे धोरण फक्त शिफारस केलेले म्हणून सेट केले जाऊ शकते. तुम्ही या धोरणाचा वापर शिफारस केलेल्या लोकॅलंचा संच सर्वात वर हलवण्यासाठी करू शकता परंतु वापरकर्त्यांना त्यांच्या सेशनसाठी <ph name="PRODUCT_OS_NAME" /> मध्ये सपोर्ट असलेली कोणतीही लोकॅल निवडण्याची नेहमी अनुमती असते. + </translation> <translation id="3381968327636295719">डीफॉल्टनुसार होस्ट ब्राउझर वापरा</translation> <translation id="3414260318408232239">हे धोरण कॉंफिगर केले नसल्यास <ph name="PRODUCT_NAME" /> एक किमान आवृत्ती म्हणजेच TLS 1.0 वापरते. @@ -1005,8 +1034,8 @@ आणि पुढील वेळी ते साइटवर लॉग इन करतील तेव्हा आपोआप प्रदान करते. ही सेटिंग बंद केली असल्यास, वापरकर्ते नवीन पासवर्ड सेव्ह करू शकत नाहीत परंतु पूर्वी सेव्ह केलेले पासवर्ड ते अद्याप वापरू शकतात. -हे धोरण चालू किंवा बंद केले असल्यास, वापरकर्ते त्यास <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा अधिशून्य करू -शकत नाहीत. हे धोरण अनसेट केले असल्यास, पासवर्ड सेव्ह करण्यास अनुमती आहे +हे धोरण चालू किंवा बंद केले असल्यास, वापरकर्ते त्यास <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा ओव्हरराइड करू +शकत नाहीत. हे धोरण सेट केलेले नसल्यास, पासवर्ड सेव्ह करण्यास अनुमती आहे (परंतु वापरकर्त्याद्वारे बंद केले जाऊ शकते).</translation> <translation id="3496296378755072552">पासवर्ड व्यवस्थापक</translation> <translation id="3502555714327823858">सर्व डुप्लेक्स मोडना अनुमती द्या</translation> @@ -1017,7 +1046,7 @@ 'DefaultSearchProviderEnabled' धोरण सक्षम असल्यासच या धोरणाचा फक्त आदर केला जातो.</translation> <translation id="350797926066071931">भाषांतर सक्षम करा</translation> -<translation id="3512226956150568738">ARC चालवण्यासाठी ext4 वर स्थलांतर करणे आवश्यक असण्यापूर्वी क्लायंट डिव्हाइस मॉडेलने आधीपासूनच ARC ला सपोर्ट दिला असल्यास आणि ArcEnabled धोरण सत्य वर सेट केले असल्यास, हा पर्याय AskUser (मूल्य 3) म्हणून काम करेल. इतर सर्व बाबतींत (डिव्हाइस मॉडेलने आधी ARC ला सपोर्ट दिला नसल्यास किंवा ArcEnabled धोरण असत्य वर सेट केले असल्यास), हे मूल्य DisallowArc (मूल्य 0) च्या समतुल्य असते.</translation> +<translation id="3512226956150568738">ARC रन करण्यासाठी ext4 वर स्थलांतर करणे आवश्यक असण्यापूर्वी क्लायंट डिव्हाइस मॉडेलने आधीपासूनच ARC ला सपोर्ट दिला असल्यास आणि ArcEnabled धोरण सत्य वर सेट केले असल्यास, हा पर्याय AskUser (मूल्य 3) म्हणून काम करेल. इतर सर्व बाबतींत (डिव्हाइस मॉडेलने आधी ARC ला सपोर्ट दिला नसल्यास किंवा ArcEnabled धोरण असत्य वर सेट केले असल्यास), हे मूल्य DisallowArc (मूल्य 0) च्या समतुल्य असते.</translation> <translation id="3513655665999652754">मॉनिटर कॅलिब्रेशन समायोजित करण्यासाठी Quirks सर्व्हर ICC डिस्प्ले प्रोफाइल सारख्या हार्डवेअर-विशिष्ट कॉंफिगरेशन फायली प्रदान करतो. @@ -1056,7 +1085,7 @@ सत्य वर सेट असल्यास परंतु कॉन्फिगर केले नसल्यास वापरकर्ता कार्य व्यवस्थापकामधून प्रक्रिया समाप्त करू शकतो..</translation> <translation id="3646859102161347133">स्क्रीन भिंग प्रकार सेट करा</translation> -<translation id="3653237928288822292">डीफॉल्ट शोध प्रदाता चिन्ह</translation> +<translation id="3653237928288822292">डीफॉल्ट शोध पुरवठादार आयकन</translation> <translation id="3660562134618097814">लॉगिनच्या दरम्यान SAML IdP कुकीज हस्तांतरित करा</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (एकल-रेषीय फील्ड कालबाह्य होते आणि भविष्यात ते काढले जाईल. कृपया खालील बहु-रेषीय टेक्स्टबॉक्स वापरणे सुरू करा.)</translation> <translation id="3709266154059827597">विस्तार स्थापना काळीसूची कॉन्फिगर करा</translation> @@ -1100,11 +1129,11 @@ <translation id="3765260570442823273">निष्क्रिय लॉग-आउट चेतावणी संदेशाचा कालावधी</translation> <translation id="377044054160169374">गैरव्यवहार्य अनुभव मध्यस्थी अंमलबजावणी</translation> <translation id="3780152581321609624">Kerberos SPN मध्ये मानक नसलेले पोर्ट अंतर्भूत करा</translation> -<translation id="3780319008680229708">हे धोरण सत्य वर सेट केल्यास, Cast टूलबार आयकन नेहमी टूलबारवर किंवा ओव्हरफ्लो मेनूवर दर्शवले जाईल आणि वापरकर्ते त्यास काढण्यात सुरू असणार नाहीत. +<translation id="3780319008680229708">हे धोरण सत्य वर सेट केल्यास, Cast टूलबार आयकन नेहमी टूलबारवर किंवा ओव्हरफ्लो मेनूवर दर्शवला जाईल आणि वापरकर्ते त्यास काढण्यात सक्षम असणार नाहीत. - हे धोरण असत्य वर सेट केल्यास किंवा सेट न केल्यास, वापरकर्ते आयकन त्याच्या संदर्भातील मेनूमधून पिन करण्यात किंवा काढण्यात सुरू असतील. + हे धोरण असत्य वर सेट केल्यास किंवा सेट न केल्यास, वापरकर्ते आयकनला त्याच्या संदर्भीय मेनूमधून पिन करण्यात किंवा काढण्यात सक्षम असतील. - "EnableMediaRouter" धोरण असत्य वर सेट केल्यास, या धोरणाच्या मूल्याचा कोणताही प्रभाव नसेल आणि टूलबार आयकन दर्शवले जाणार नाही.</translation> + "EnableMediaRouter" धोरण असत्य वर सेट केल्यास, या धोरणाच्या मूल्याचा कोणताही प्रभाव नसेल आणि टूलबार आयकन दर्शवला जाणार नाही.</translation> <translation id="3788662722837364290">वापरकर्ता निष्क्रिय असतो तेव्हा उर्जा व्यवस्थापन सेटिंग्ज</translation> <translation id="3793095274466276777"><ph name="PRODUCT_NAME" /> मध्ये डीफॉल्ट ब्राउझर निवडी कॉन्फिगर करते आणि त्यांना बदलण्यापासून वापरकर्त्यांना प्रतिबंधित करते. @@ -1231,13 +1260,18 @@ हे असत्य वर सेट असल्यास किंवा ते सेट केले नसल्यास, कोणतेही सर्टिफिकेट व्युत्पन्न केले जाणार नाही आणि enterprise.platformKeysPrivate एक्स्टेंशन API वरील कॉल अयशस्वी होतील.</translation> <translation id="3965339130942650562">निष्क्रिय वापरकर्ता लॉग-आउट होईपर्यंत कालबाह्य</translation> <translation id="3973371701361892765">शेल्फ कधीही स्वयं-लपवू नका</translation> -<translation id="3984028218719007910">लॉगआउट केल्यानंतर <ph name="PRODUCT_OS_NAME" /> ने स्थानिक खाते डेटा ठेवावा किंवा नाही ते निर्धारित करते. खरे वर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> कडून कोणतीही सातत्यपूर्ण खाती ठेवली जात नाही आणि वापरकर्ता सत्रातील सर्व डेटा लॉग आऊटनंतर काढून टाकण्यात येतो. हे धोरण चुकीचे वर सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, डिव्हाइस स्थानिक वापरकर्ता डेटा (कूटबद्ध केलेला) ठेऊ शकते.</translation> +<translation id="3984028218719007910">लॉगआउट केल्यानंतर <ph name="PRODUCT_OS_NAME" /> ने स्थानिक खाते डेटा ठेवावा किंवा नाही ते निर्धारित करते. सत्य वर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> कडून कोणतीही सातत्यपूर्ण खाती ठेवली जात नाही आणि वापरकर्ता सेशनातील सर्व डेटा लॉग आऊटनंतर काढून टाकण्यात येतो. हे धोरण असत्य वर सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, डिव्हाइस स्थानिक वापरकर्ता डेटा (एंक्रिप्ट केलेला) ठेऊ शकते.</translation> <translation id="3997519162482760140">SAML लॉगिन पृष्ठांंवर व्हिडिओ कॅप्चर डिव्हाइसेसवर प्रवेश मंजूर करणार असलेल्या URL</translation> <translation id="4001275826058808087">एन्टरप्राइझ डिव्हाइसेससाठी IT प्रशासन Chrome OS नोंदणीद्वारे ऑफरची पूर्तता करण्यासाठी वापरकर्त्यांना अनुमती द्यावी किंवा नाही हे नियंत्रित करण्यासाठी हे ध्वजांकन वापरू शकते. हे धोरण सत्य वर सेट केले असल्यास किंवा सेट न करता सोडले असल्यास, वापरकर्ते Chrome OS नोंदणीद्वारे ऑफरची पूर्तता करण्यात सक्षम होतील. हे धोरण असत्य वर सेट केले असल्यास, वापरकर्ता ऑफरची पूर्तता करण्यात सक्षम होणार नाही.</translation> +<translation id="4008507541867797979">हे धोरण सत्यवर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, <ph name="PRODUCT_OS_NAME" /> लॉग इन स्क्रीनवर सध्याचे वापरकर्ते दाखवेल आणि एकाला निवडण्याची अनुमती देईल. + + हे धोरण असत्यवर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> लॉग इन स्क्रीनवर सध्याचे वापरकर्ते दाखवणार नाही. व्यवस्थापित केलेले सेशन कॉन्फिगर होईपर्यंत, सामान्य साइन इन स्क्रीन( वापरकर्त्यास ईमेल आणि पासवर्ड किंवा फोनसाठी सूचना देणारी) किंवा SAML इंटरस्टिशियल स्क्रीन (<ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> धोरणाद्वारे सुरू केले असल्यास) दाखवली जाईल. व्यवस्थापित केलेले सेशन कॉन्फिगर झाल्यावर, फक्त व्यवस्थापित सेशन खाती दाखवली जातील, ज्यापैकी एक निवडण्याची अनुमती दिली जाईल. + + लक्षात ठेवा, डिव्हाइसवर स्थानिक वापरकर्ता डेटा ठेवला जातो की नाही यास हे धोरण प्रभावित करत नाही.</translation> <translation id="4010738624545340900">फाइल निवड संवादांच्या निमंत्रणास परवानगी द्या</translation> <translation id="4012737788880122133">सत्य वर सेट केल्यास स्वयंचलित अपडेट अक्षम करते. @@ -1245,7 +1279,7 @@ चेतावणी: स्वयं-अपडेट सक्षम केलेली ठेवण्याची शिफारस केली जाते जेणेकरून वापरकर्त्यांना सॉफ्टवेअर अपडेट आणि गंभीर सुरक्षा निराकरणे प्राप्त होतील. स्वयं-अपडेट बंद केल्यामुळे वापरकर्त्यांना कदाचित धोका असू शकतो.</translation> <translation id="4020682745012723568">वापरकर्त्याच्या प्रोफाइलवर हस्तांतरित केलेल्या कुकीज Android अॅप्ससाठी प्रवेशयोग्य नाहीत.</translation> -<translation id="402759845255257575">कोणत्याही साइटला JavaScript चालविण्याची परवानगी देऊ नका</translation> +<translation id="402759845255257575">कोणत्याही साइटला JavaScript रन करण्याची परवानगी देऊ नका</translation> <translation id="4027608872760987929">डीफॉल्ट शोध प्रदाता सक्षम करा</translation> <translation id="4039085364173654945">पृष्ठावरील तृतीय-पक्ष उप-सामग्रीस HTTP मूलभूत प्रमाणिकरण संवाद बॉक्स पॉप-अपची अनुमती आहे की नाही ते नियंत्रित करते. @@ -1265,7 +1299,7 @@ हे धोरण सेट न करता सोडल्यास, 'AllowCookies' वापरली जाईल आणि वापरकर्ता त्याला बदलू शकेल.</translation> <translation id="4103289232974211388">वापरकर्ता पुष्टीकरणानंतर SAML IdP पुनर्निदेशित करा</translation> -<translation id="410478022164847452">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते ज्यानंतर AC उर्जेवर चालताना निष्क्रिय कारवाई केली जाते. +<translation id="410478022164847452">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते, ज्यानंतर AC उर्जेवर रन होताना निष्क्रिय कारवाई केली जाते. जेव्हा हे धोरण सेट केलेले असते, तेव्हा ते <ph name="PRODUCT_OS_NAME" /> ने निष्क्रिय कारवाई करण्यापूर्वी वापरकर्त्याने निष्क्रिय राहणे आवश्यक असणाऱ्या वेळेची लांबी निर्दिष्ट करते, जी स्वतंत्रपणे कॉन्फिगर केली जाऊ शकते. @@ -1309,13 +1343,13 @@ ही सेटिंग चालू केली असल्यास, फक्त निर्दिष्ट केलेल्या डोमेन वरील क्लायंट होस्टशी कनेक्ट करू शकतात. - ही सेटिंग बंद केली असल्यास किंवा सेट केली नसल्यास, कनेक्शन प्रकारासाठी डीफॉल्ट धोरण लागू केले जाते. रिमोट सहाय्यासाठी, हे कोणत्याही डोमेन वरील क्लायंटना होस्टशी कनेक्ट करण्याची अनुमती देते; कधीही रिमोट अॅक्सेससाठी, फक्त होस्ट मालक कनेक्ट करू शकतो. + ही सेटिंग बंद केली असल्यास किंवा सेट केली नसल्यास, कनेक्शन प्रकारासाठी डीफॉल्ट धोरण लागू केले जाते. रिमोट साहाय्यासाठी, हे कोणत्याही डोमेन वरील क्लायंटना होस्टशी कनेक्ट करण्याची अनुमती देते; कधीही रिमोट अॅक्सेससाठी, फक्त होस्ट मालक कनेक्ट करू शकतो. - असल्यास, ही सेटिंग RemoteAccessHostClientDomain ला अधिशून्य करेल. + असल्यास, ही सेटिंग RemoteAccessHostClientDomain ला ओव्हरराइड करेल. RemoteAccessHostDomainList देखील पहा.</translation> <translation id="4183229833636799228">डीफॉल्ट <ph name="FLASH_PLUGIN_NAME" /> सेटिंग</translation> -<translation id="4192388905594723944">दूरस्थ प्रवेश क्लायंट प्रमाणीकरण टोकनच्या प्रमाणीकरणासाठी URL</translation> +<translation id="4192388905594723944">रिमोट अॅक्सेस क्लायंट अॉथेंटिकेशन टोकनच्या प्रमाणीकरणासाठी URL</translation> <translation id="4203389617541558220">स्वयंचलित रीबूट अनुसूचित करून डिव्हाइस कार्यवेळ मर्यादित करा. जेव्हा हे धोरण सेट असते, तेव्हा ते स्वयंचलित रीबूट अनुसूचित केल्यानंतर डिव्हाइस कार्यवेळेची लांबी निर्दिष्ट करते. @@ -1344,7 +1378,7 @@ वापरले जाऊ शकतात त्या चलांच्या सूचीसाठी https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables पहा. हे धोरण सेट न केलेले ठेवल्यास डीफॉल्ट रोमिंग प्रोफाइल पथ वापरला जाईल.</translation> -<translation id="4239720644496144453">Android अॅप्ससाठी कॅश वापरला जात नाही. एकाधिक वापरकर्त्यांनी एकच Android अॅप इंस्टॉल केला असल्यास, तो प्रत्येक वापरकर्त्यासाठी पुन्हा नव्याने डाउनलोड केला जाईल.</translation> +<translation id="4239720644496144453">Android अॅप्ससाठी कॅशे वापरली जात नाही. एकाहून अधिक वापरकर्त्यांनी एकच Android अॅप इंस्टॉल केला असल्यास, ते प्रत्येक वापरकर्त्यासाठी पुन्हा नव्याने डाउनलोड केले जाईल.</translation> <translation id="4243336580717651045"><ph name="PRODUCT_NAME" /> मध्ये URL-keyed अॅनोनिमाइझ केलेल्या डेटा संकलन सुरू करा आणि हे सेटिंग बदलण्यापासून वापरकर्त्यांना प्रतिबंध करेल. URL-keyed अॅनोनिमाइझ केलेल्या डेटा संकलन शोध आणि ब्राउझिंग अधिक चांगले करण्यासाठी Google ने वापरकर्त्यांना भेट दिलेल्या पेजची URL पाठवते. @@ -1448,14 +1482,14 @@ <translation id="4483649828988077221">अॉटो अपडेट बंद करा</translation> <translation id="4485425108474077672">नवीन टॅब पृष्ठ URL कॉन्फिगर करा</translation> <translation id="4492287494009043413">स्क्रीनशॉट घेणे अक्षम करा</translation> -<translation id="450537894712826981">डिस्कवर कॅश केलेल्या मीडिया फायली संचयन करण्यासाठी <ph name="PRODUCT_NAME" /> वापर करेल त्या कॅश आकारास कॉन्फिगर करते. +<translation id="450537894712826981">डिस्कवर कॅशे केलेल्या मीडिया फायली संचयन करण्यासाठी <ph name="PRODUCT_NAME" /> वापर करेल त्या कॅशे आकारास कॉन्फिगर करते. - आपण हे धोरण सेट केल्यास, वापरकर्त्याने '--media-cache-size' ध्वजांकन निर्दिष्ट केले आहे किंवा नाही त्याचा विचार न करता <ph name="PRODUCT_NAME" /> प्रदान केलेला कॅश आकार वापरेल. या धोरणात निर्दिष्ट केलेले मूल्य हे काटेकोर नसून त्याऐवजी कॅश सिस्टीमला एक सूचना आहे, थोड्या मेगाबाइट्सखालील कोणतेही मूल्य खूप लहान आहे आणि किमान चालू शकणार्या मूल्यावर पूर्ण केले जाईल. + तुम्ही हे धोरण सेट केल्यास, वापरकर्त्याने '--media-cache-size' फ्लॅग निर्दिष्ट केले आहे किंवा नाही त्याचा विचार न करता <ph name="PRODUCT_NAME" /> प्रदान केलेला कॅशे आकार वापरेल. या धोरणात निर्दिष्ट केलेले मूल्य हे काटेकोर नसून त्याऐवजी कॅशे सिस्टीमला एक सूचना आहे, थोड्या मेगाबाइट्सखालील कोणतेही मूल्य खूप लहान आहे आणि किमान चालू शकणार्या मूल्यावर पूर्ण केले जाईल. - या धोरणाचे मूल्य 0 असल्यास, डीफॉल्ट कॅश आकार वापरला जाईल परंतु तो बदलण्यात वापरकर्ता सक्षम होणार नाही. + या धोरणाचे मूल्य 0 असल्यास, डीफॉल्ट कॅशे आकार वापरला जाईल परंतु तो बदलण्यात वापरकर्ता सक्षम होणार नाही. - हे धोरण सेट न केल्यास डीफॉल्ट आकार वापरला जाईल आणि वापरकर्ता --media-cache-size ध्वजांकनासह तो अधिशून्य करण्यात सक्षम होईल.</translation> -<translation id="4508686775017063528">हे धोरण सत्य वर सेट केल्यास किंवा सेट न केलेले ठेवल्यास, <ph name="PRODUCT_NAME" /> चालू केले जाईल, आणि वापरकर्ते त्यास अॅप मेनू, पेज संदर्भ मेनू, Cast चालू असलेल्या वेबसाइट वरील मीडिया नियंत्रणे, आणि (दाखवल्यास) Cast टूलबार आयकॉनमधून लाँच करू शकतील. + हे धोरण सेट न केल्यास डीफॉल्ट आकार वापरला जाईल आणि वापरकर्ता --media-cache-size फ्लॅगसह तो ओव्हरराइड करण्यात सक्षम होईल.</translation> +<translation id="4508686775017063528">हे धोरण सत्य वर सेट केल्यास किंवा सेट न केलेले ठेवल्यास, <ph name="PRODUCT_NAME" /> चालू केले जाईल, आणि वापरकर्ते त्यास अॅप मेनू, पेज संदर्भ मेनू, Cast चालू असलेल्या वेबसाइट वरील मीडिया नियंत्रणे, आणि (दाखवल्यास) Cast टूलबार आयकनमधून लाँच करू शकतील. हे धोरण असत्य वर सेट केल्यास, <ph name="PRODUCT_NAME" /> बंद केले जाईल.</translation> <translation id="4515404363392014383">विश्वासनीय स्त्रोतांसाठी सुरक्षित ब्राउझिंग सुरू करा</translation> @@ -1497,6 +1531,17 @@ <translation id="4613508646038788144">धोरण असत्य म्हणून सेट केलेले असल्यास तृतीय पक्ष सॉफ्टवेअरला Chrome च्या प्रक्रियांमध्ये एक्झेक्युट करण्यायोग्य कोड इंजेक्ट करण्याची अनुमती दिली जाईल. धोरण सेट केलेले नसल्यास किंवा सत्य असे सेट केलेले असल्यास तृतीय पक्ष सॉफ्टवेअरला Chrome च्या प्रक्रियांमये एक्झेक्युट करण्यायोग्य कोड इंजेक्ट करण्यापासून प्रतिबंधित केले जाईल.</translation> <translation id="4617338332148204752"><ph name="PRODUCT_FRAME_NAME" /> मध्ये मेटा टॅग तपासणी वगळा</translation> <translation id="4625915093043961294">विस्तार स्थापना श्वेतसूची कॉन्फिगर करा</translation> +<translation id="463224920692183755">वापरकर्त्याची होम डिरेक्टरी ecryptfs एंक्रिप्शनने तयार केलेली असेल आणि ext4 एंक्रिप्शनवर बदलायची असेल तेव्हा काय कृती करावी हे सांगते. + +हे धोरण 'DisallowArc' वर सेट केलेले असेल, तेव्हा वापरकर्त्याची Android अॅप्स बंद केली जातील आणि एंक्रिप्शनचे ecryptfs वरून ext4 वरील मायग्रेशन घडणार नाही. होम डिरेक्टरी पहिल्यापासूनच ext4 ने एंक्रिप्ट केलेली असेल तर Android अॅप्स कोणत्याही समस्येविना रन होतील. + +हे धोरण 'Migrate' वर सेट केलेले असेल, तेव्हा साइन-इन केल्यानंतर ecryptfs ने एंक्रिप्ट केलेल्या होम डिरेक्टरी आपोआप ext4 वर मायग्रेट केल्या जातील आणि त्यासाठी वापरकर्त्याची संमती घेतली जाणार नाही. + +हे धोरण 'Migrate' वर सेट केलेले असेल, तर ecryptfs ने एंक्रिप्ट केलेल्या होम डिरेक्टरी साइन-इन केल्यानंतर डिलीट केल्या जातील आणि ext4 ने एंक्रिप्ट केलेल्या नव्या होम डिरेक्टरी तयार केल्या जातील. एक इशारेवजा सूचना: यामुळे वापरकर्त्याचा स्थानिक डेटा देखील काढून टाकला जाईल. + +हे धोरण 'AskUser' वर सेट केलेले असेल, तर ecryptfs ने एंक्रिप्ट केलेल्या होम डिरेक्टरी असलेल्या वापरकर्त्यांना मायग्रेट करण्यासाठी विचारणा केली जाईल. + +हे धोरण कियॉस्क वापरकर्त्यांना लागू होत नाही. हे धोरण सेट केलेले नसेल, तर डिव्हाइस 'DisallowArc' वर सेट केल्यासारखे चालेल.</translation> <translation id="4632343302005518762">सूचीबद्ध सामग्री प्रकार हाताळण्यास <ph name="PRODUCT_FRAME_NAME" /> ला अनुमती द्या</translation> <translation id="4632566332417930481">एंटरप्राइझ धोरणाने इंस्टॉल केलेल्या एक्स्टेंशनवर डेव्हलपर टूलच्या वापराला मनाई करा, इतर संदर्भात डेव्हलपर टूलच्या वापराला अनुमती द्या</translation> <translation id="4633786464238689684">कार्य की मध्ये शीर्ष पंक्ती की चे डीफॉल्ट वर्तन बदलतो. @@ -1544,15 +1589,15 @@ कमकुवत पिनची काही उदाहरणे: केवळ एक अंक असलेले पिन (1111), असे पिन ज्यामधील अंकांमध्ये 1 ने वाढ होत जाते (1234), असे पिन ज्यामधील अंक 1 ने कमी होत जातात (4321) आणि सामान्यपणे वापरले जाणारे पिन. डीफॉल्टनुसार, पिन कमकुवत असल्याचे वाटल्यास वापरकर्त्यांना एरर ऐवजी, एक चेतावणी मिळेल.</translation> -<translation id="4723829699367336876">दूरस्थ प्रवेश क्लायंटमधून फायरवॉल ट्रॅव्हर्सल सक्षम करा</translation> +<translation id="4723829699367336876">रिमोट अॅक्सेस क्लायंटमधून फायरवॉल ट्रॅव्हर्सल सक्षम करा</translation> <translation id="4725528134735324213">Android बॅकअप सेवा सक्षम करा</translation> <translation id="4725801978265372736">स्थानिक वापरकर्ता आणि रिमोट अॅक्सेस होस्ट मालक यांचे नाव जुळणे आवश्यक आहे</translation> <translation id="4733471537137819387">समाकलित HTTP प्रमाणीकरणाशी संबंधित धोरणे.</translation> <translation id="4744190513568488164"><ph name="PRODUCT_NAME" /> ज्यांना प्रतिनिधी नियुक्त करु शकते असे सर्व्हर. - स्वल्पविरामांसह एकाधिक सर्व्हर नावे वेगळी करा. वाइल्डकार्ड (*) परवानगी आहे. + स्वल्पविरामांसह एकाहून अधिक सर्व्हर नावे विभक्त करा. वाइल्डकार्ड (*) अनुमत आहेत. - तुम्ही हे धोरण सेट न करता सोडल्यास सर्व्हर इंट्रानेट म्हणून आढळले तरी देखील <ph name="PRODUCT_NAME" /> वापरकर्ता क्रेडेंशियलचे प्रतिनिधी नियुक्त करणार नाही.</translation> + तुम्ही हे धोरण सेट न करता सोडल्यास सर्व्हर इंट्रानेट म्हणून आढळले तरी देखील <ph name="PRODUCT_NAME" /> वापरकर्ता क्रेडेंशियलचे प्रतिनिधी नियुक्त करणार नाही.</translation> <translation id="4752880493649142945">RemoteAccessHostTokenValidationUrl शी कनेक्ट करण्यासाठी क्लायंट प्रमाणपत्र</translation> <translation id="4757671984625088193">जर हे सत्य वर सेट असल्यास किंवा सेट केलेले नसल्यास, <ph name="PRODUCT_NAME" /> आम्ही सध्या सुरू असलेल्या पेजशी संबंधित पेज सूचवतो. या सूचना दूरस्थपणे Google सर्व्हरद्वारे प्राप्त केल्या जातात. @@ -1593,7 +1638,7 @@ ही धोरणे सेट न करता सोडल्यास वापरकर्ते त्यांच्या स्वत:साठी प्रॉक्सी सेटिंग्ज निवडण्यास सुरू असतील.</translation> <translation id="4816674326202173458">एंटरप्राइझ वापरकर्त्यास प्राथमिक आणि दुय्यम दोन्ही होण्यासाठी अनुमती द्या (व्यवस्थापित-नसलेल्या वापरकर्त्यांसाठी डीफॉल्ट वर्तन)</translation> -<translation id="4826326557828204741">बॅटरी ऊर्जेवर चालताना निष्क्रिय विलंब झाल्यानंतर करण्याची कारवाई</translation> +<translation id="4826326557828204741">बॅटरी ऊर्जेवर रन होताना निष्क्रिय विलंब झाल्यानंतर करण्याची कारवाई</translation> <translation id="4834526953114077364">पुरेशी मोकळी जागा असेपर्यंत अंतिम 3 महिन्यांमध्ये लॉग इन न केलेले किमान अलीकडे वापरलेले वापरकर्ते काढले आहेत</translation> <translation id="4838572175671839397">नियमित अभिव्यक्ती असते जी <ph name="PRODUCT_NAME" /> मध्ये कोणते वापरकर्ते साइन इन करू शकतात हे निर्धारित करण्यासाठी वापरली जाते. @@ -1632,15 +1677,15 @@ <translation id="4962262530309732070">हे धोरण सत्य म्हणून सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, <ph name="PRODUCT_NAME" /> वापरकर्ता व्यवस्थापकाकडून व्यक्ती जोडण्यास अनुमती देईल. हे धोरण असत्य म्हणून सेट केले असल्यास, <ph name="PRODUCT_NAME" /> प्रोफाइल व्यवस्थापकाकडून नवीन प्रोफाइल तयार करण्याची अनुमती देणार नाही.</translation> -<translation id="4971529314808359013">साइटने सर्टिफिकेटची विनंती केल्यास, ज्या साइटसाठी <ph name="PRODUCT_NAME" /> ने आपोआप क्लायंट सर्टिफिकेट निवडावे त्या साइट निर्दिष्ट करते त्या url नमुन्यांची एक सूची निर्दिष्ट करण्याची आपल्याला अनुमती देते. +<translation id="4971529314808359013">साइटने प्रमाणपत्राची विनंती केल्यास, ज्या साइटसाठी <ph name="PRODUCT_NAME" /> ने आपोआप क्लायंट प्रमाणपत्र निवडावे त्या साइट निर्दिष्ट करते त्या url नमुन्यांची एक सूची निर्दिष्ट करण्याची आपल्याला अनुमती देते. - मूल्य हे JSON शब्दकोशाच्या स्ट्रिंग असलेले अॅरे असणे आवश्यक आहे. प्रत्येक शब्दकोशात { "pattern": "$URL_PATTERN", "filter" : $FILTER } स्वरूपन असणे आवश्यक आहे ज्यामध्ये $URL_PATTERN हे आशय सेटिंग नमुना असतो. $FILTER मर्यादित करेल की कोणत्या सर्टिफिकेटंवरुन ब्राउझर आपोआप निवडेल. फिल्टरवर अवलंबून नसलेली, फक्त सर्व्हरच्या सर्टिफिकेट विनंतीशी जुळणारी सर्टिफिकेट निवडली जातील. $FILTER मध्ये { "ISSUER": { "CN": "$ISSUER_CN" } } स्वरूपन असल्यास, अतिरिक्तपणे केवळ क्लायंट सर्टिफिकेट निवडली जातात जी CommonName $ISSUER_CN असलेल्या सर्टिफिकेटद्वारे जारी केली जातात. $FILTER {} रिक्त शब्दकोश असल्यास, अतिरिक्तपणे क्लायंट सर्टिफिकेटंची निवड मर्यादित केली जात नाही. + मूल्य हे JSON शब्दकोशाच्या स्ट्रिंग असलेले अरे असणे आवश्यक आहे. प्रत्येक शब्दकोशात { "pattern": "$URL_PATTERN", "filter" : $FILTER } स्वरूपन असणे आवश्यक आहे ज्यामध्ये $URL_PATTERN हे आशय सेटिंग नमुना असतो. $FILTER मर्यादित करेल, की कोणत्या प्रमाणपत्रांवरुन ब्राउझर आपोआप निवडेल. फिल्टरवर अवलंबून नसलेली, फक्त सर्व्हरच्या प्रमाणपत्र विनंतीशी जुळणारी प्रमाणपत्रे निवडली जातील. $FILTER मध्ये { "ISSUER": { "CN": "$ISSUER_CN" } } स्वरूपन असल्यास, अतिरिक्तपणे केवळ क्लायंट प्रमाणपत्रे निवडली जातात जी CommonName $ISSUER_CN असलेल्या प्रमाणपत्राद्वारे जारी केली जातात. $FILTER {} रिक्त शब्दकोश असल्यास, अतिरिक्तपणे क्लायंट प्रमाणपत्रांची निवड मर्यादित केली जात नाही. - हे धोरण सेट न केलेले ठेवल्यास, कोणत्याही साइटसाठी स्वयं-निवड केली जात नाही.</translation> + हे धोरण सेट न केलेले ठेवल्यास, कोणत्याही साइटसाठी आपोआप निवड केली जात नाही.</translation> <translation id="4978405676361550165">"OffHours" धोरण सेट केले असल्यास, निर्धारित कालावधी मध्यंतरांच्या दरम्यान निर्दिष्ट केलेली डिव्हाइस धोरणे दुर्लक्षित केली जातात (या धोरणांची डीफॉल्ट सेटिंग्ज वापरा). प्रत्येक "OffHours" कालावधी सुरू किंवा बंद झाल्यावर Chrome प्रत्येक इव्हेंटवर डिव्हाइस धोरणे पुन्हा लागू करते. "OffHours" कालावधी संपल्यावर आणि डिव्हाइस धोरण सेटिंग्ज बदलल्यावर वापरकर्त्याला सूचित केले जाईल आणि साइन आउट करण्यास भाग पाडले जाईल (उदा. वापरकर्त्याने अनुमती नसलेल्या खात्यासह लॉग इन केले असताना).</translation> <translation id="4980635395568992380">डेटा प्रकार:</translation> <translation id="4983201894483989687">जुने प्लगइन चालवण्याची परवानगी द्या</translation> -<translation id="4988291787868618635">निष्क्रिय विलंब झाल्यानंतर करावयाची कारवाई</translation> +<translation id="4988291787868618635">निष्क्रिय विलंब झाल्यानंतर करायची कारवाई</translation> <translation id="4995548127349206948">NTLMv2 ऑथेंटिकेशन सुरू केले आहे का.</translation> <translation id="5047604665028708335">सामग्री पॅक बाहेरील साइटवर प्रवेश अनुमत करा</translation> <translation id="5052081091120171147">हे धोरण सक्षम केले असल्यास विद्यमान डीफॉल्ट ब्राउझरमधून ब्राउझिंग इतिहास आयात करण्यास सक्ती करते. सक्षम केल्यास, हे धोरण आयात संवादावरही प्रभाव करते. @@ -1664,7 +1709,7 @@ धोरण शून्य वर सेट केल्यास, मशीन खाते पासवर्ड बदलणे बंद केले जाते. - लक्षात ठेवा की क्लायंट जास्त वेळ ऑफलाइन असल्यास पासवर्ड नमूद केलेल्या दिवसांच्या संख्येपेक्षा जास्त जुना असेल.</translation> + लक्षात ठेवा, की क्लायंट जास्त वेळ ऑफलाइन असल्यास पासवर्ड नमूद केलेल्या दिवसांच्या संख्येपेक्षा जास्त जुना असेल.</translation> <translation id="5102187683953991824"><ph name="PRODUCT_NAME" /> विश्वसनीय स्रोताकडून असेल तेव्हा सुरक्षित ब्राउझिंगशिवाय डाउनलोडला परवानगी देऊ शकेल का हे पाहा. हे असत्य असेल तेव्हा विश्वसनीय स्रोताकडून असल्यास डाउनलोड केलेल्या फायलींचे सुरक्षित ब्राउझिंगमध्ये विश्लेषण केले जाणार नाही. @@ -1722,6 +1767,15 @@ हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट सूचना सेटिंग' धोरण, किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉंफिगरेशन वापरले जाईल.</translation> <translation id="5219844027738217407">Android अॅप्ससाठी, हे धोरण केवळ मायक्रोफोनला प्रभावित करते. हे धोरण सत्य वर सेट केले असते तेव्हा, कोणत्याही अपवादांशिवाय सर्व Android अॅप्ससाठी मायक्रोफोन नि:शब्द केला जातो.</translation> +<translation id="5228316810085661003">डिव्हाइस स्थानिक खाते ऑटो लॉग इन विलंब. + + |DeviceLocalAccountAutoLoginId| धोरण सेट केले नसल्यास, या धोरणाचा प्रभाव पडणार नाही. नाहीतर: + + हे धोरण सेट केले असल्यास,|DeviceLocalAccountAutoLoginId| धोरणाद्वारे निर्दिष्ट केलेल्या सार्वजनिक सेशनमध्ये आपोआप लॉग इन करण्यापूर्वी वापरकर्ता अॅक्टिव्हिटीशिवाय जाणाऱ्या वेळेचे प्रमाण निर्धारित करते. + + हे धोरण सेट केले नसल्यास, टाइमअाउट म्हणून शून्य मिलिसेकंद वापरले जातील. + + हे धोरण मिलिसेकंदांमध्ये निर्दिष्ट केले आहे.</translation> <translation id="523505283826916779">प्रवेशयोग्यता सेटिंग्ज</translation> <translation id="5235958368503433463"><ph name="PRODUCT_NAME" /> मधील डीफॉल्ट होम पेजचा प्रकार कॉन्फिगर करते आणि वापरकर्त्यास होम पेज प्राधान्ये बदलण्यापासून प्रतिबंधित करते. होम पेज एकतर तुम्हाला हव्या असलेल्या URL वर किंवा नवा टॅब पेजवर सेट करता येते. @@ -1734,9 +1788,9 @@ हे धोरण सेट न केल्यास वापरकर्त्याला नवा टॅब पेजवर त्यांच्या पसंतीचे होम पेज निवडण्याची परवानगी मिळते. हे धोरण <ph name="MS_AD_NAME" /> डोमेनला न जोडलेल्या Windows इंस्टंसवर उपलब्ध नाही.</translation> -<translation id="5236882091572996759">हे धोरण सत्य वर सेट केलेले असल्यास किंवा सेट केलेले नसल्यास, वापरकर्ता ऑडिओ प्ले होत असताना निष्क्रिय होण्याचा विचार करत नाही.हे निष्क्रियतेची वेळ संपण्यापासून आणि निष्क्रिय कारवाई केली जाण्यापासून प्रतिबंध करते. तथापि, स्क्रीन अंधुक होणे, स्क्रीन बंद होणे आणि स्क्रीन लॉक ऑडिओ गतिविधीकडे दुर्लक्ष करून, कॉन्फिगर केलेली वेळ संपल्यानंतर केली जाईल. +<translation id="5236882091572996759">हे धोरण सत्य वर सेट केलेले असल्यास किंवा सेट केलेले नसल्यास, वापरकर्ता ऑडिओ प्ले होत असताना निष्क्रिय होण्याचा विचार करत नाही.हे निष्क्रियतेची वेळ संपण्यापासून आणि निष्क्रिय कारवाई केली जाण्यापासून प्रतिबंध करते. पण, स्क्रीन अंधुक होणे, स्क्रीन बंद होणे आणि स्क्रीन लॉक ऑडिओ अॅक्टिव्हिटीकडे दुर्लक्ष करून, कॉन्फिगर केलेली वेळ संपल्यानंतर केली जाईल. - हे धोरण असत्य वर सेट केलेले असल्यास, व्हिडिओ गतिविधी वापरकर्त्यास निष्क्रिय होण्याच्या विचार करण्यापासून प्रतिबंध करत नाही.</translation> + हे धोरण असत्य वर सेट केलेले असल्यास, व्हिडिओ अॅक्टिव्हिटी वापरकर्त्यास निष्क्रिय होण्याच्या विचार करण्यापासून प्रतिबंध करत नाही.</translation> <translation id="5246700266104954355">हे धोरण बहिष्कृत केले आहे. कृपया फ्लॅश प्लगिनची उपलब्धता नियंत्रित करण्यासाठी <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> आणि संकलित पीडीएफ फायली उघडण्यासाठी पीडीएफ व्ह्यूअर वापरला जावा किंवा नाही ते नियंत्रित करण्यासाठी <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> वापरा. <ph name="PRODUCT_NAME" /> मध्ये एम्बेड केलेल्या प्लगिनची सूची निर्दिष्ट करते आणि वापरकर्त्यांना हे सेटिंग बदलण्यापासून प्रतिबंधित करते. @@ -1751,13 +1805,13 @@ <translation id="5247006254130721952">धोकादायक डाउनलोड ब्लॉक करा</translation> <translation id="5248863213023520115"><ph name="MS_AD_NAME" /> सर्व्हरवरून Kerberos तिकिटांची मागणी करत असताना अनुमती असलेले एंक्रिप्शन प्रकार सेट करते. - धोरण 'सर्व' वर सेट केले असल्यास, 'aes256-cts-hmac-sha1-96' आणि 'aes128-cts-hmac-sha1-96' दोन्ही AES एंक्रिप्शन प्रकार तसेच RC4 एंक्रिप्शन प्रकार 'rc4-hmac' ला अनुमती आहे. सर्व्हर दोन्ही प्रकारांना सपोर्ट करत असल्यास, AES एंक्रिप्शनला प्राधान्य दिले जाते. लक्षात ठेवा की, RC4 ला असुरक्षित मानले जाते आणि AES एंक्रिप्शनला सपोर्ट करणे शक्य असल्यास, सर्व्हर पुन्हा कॉन्फिगर करणे आवश्यक आहे. + धोरण 'सर्व' वर सेट केले असल्यास, 'aes256-cts-hmac-sha1-96' आणि 'aes128-cts-hmac-sha1-96' दोन्ही AES एंक्रिप्शन प्रकार तसेच RC4 एंक्रिप्शन प्रकार 'rc4-hmac' ला अनुमती आहे. सर्व्हर दोन्ही प्रकारांना सपोर्ट करत असल्यास, AES एंक्रिप्शनला प्राधान्य दिले जाते. लक्षात ठेवा, की, RC4 ला असुरक्षित मानले जाते आणि AES एंक्रिप्शनला सपोर्ट करणे शक्य असल्यास, सर्व्हर पुन्हा कॉन्फिगर करणे आवश्यक आहे. धोरण 'मजबूत' वर सेट केले असल्यास किंवा ते सेट केले नसल्यास, फक्त AES एंक्रिप्शन प्रकारांना अनुमती आहे. धोरण 'लेगसी' वर सेट केल्यास, फक्त RC4 एंक्रिप्शन प्रकाराला अनुमती आहे. हा पर्याय असुरक्षित आहे आणि खूपच विशिष्ट परिस्थितींमध्ये फक्त आवश्यक आहे. - देखील पहा https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> + हे देखील पहा https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> <translation id="5255162913209987122">शिफारस केली जाऊ शकेल</translation> <translation id="527237119693897329">कोणते मूळ संदेशन होस्ट लोड केली जाऊ नयेत हे निर्दिष्ट करण्याची आपल्याला अनुमती देते. @@ -1767,6 +1821,12 @@ <translation id="5272684451155669299">सत्य असल्यास, वापरकर्ता <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> द्वारे <ph name="CHALLENGE_USER_KEY_FUNCTION" /> वापरून गोपनीयता CA मध्ये त्याची ओळख दूरस्थ अनुप्रमाणित करण्यासाठी Chrome डिव्हाइसवरील हार्डवेअर वापरू शकतो. ते असत्यवर सेट केले असल्यास किंवा ते सेट केले नसल्यास, API वरील कॉल एरर कोडसह अयशस्वी होतील.</translation> +<translation id="5277806246014825877">Crostini रन करण्यासाठी या वापरकर्त्याला अनुमती द्या. + + धोरण असत्यवर सेट केल्यास, Crostini वापरकर्त्यासाठी सुरू केलेले नाही. + सत्यवर सेट केल्यास किंवा सेट न करता सोडून दिल्यास, जोपर्यंत इतर सेटिंग्ज देखील याला अनुमती देतात तोपर्यंत वापरकर्त्यासाठी Crostini सुरू केलेले असते. + VirtualMachinesAllowed, CrostiniAllowed आणि DeviceUnaffiliatedCrostiniAllowed ही तिन्ही धोरणे सत्य असणे आवश्यक आहे जेव्हा त्यांना रन करण्याची अनुमती देण्याकरिता Crostini वर लागू केले जाते. + जेव्हा हे धोरण असत्यवर बदलते, तेव्हा ते नवीन Crostini कंटेनर सुरू करण्यासाठी लागू केले जाते परंतु आधीपासून रन होत असलेले कंटेनर बंद करत नाही.</translation> <translation id="5283457834853986457">प्लग-इन फाइंडर (कालबाह्य) बंद करा</translation> <translation id="5288772341821359899">धोरण सेट केले असल्यास, WebRTC ने वापरलेली UDP पोर्ट वर्गवारी ही नमूद केलेल्या पोर्टपुरती मर्यादित केली जाते (समाप्ती बिंदू समाविष्ट केले आहेत). @@ -1777,11 +1837,11 @@ वापरकर्त्याला <ph name="PRODUCT_NAME" /> मध्ये साइन इन करण्याची अनुमती देते. आपण हे धोरण सेट केल्यास, वापरकर्त्यास <ph name="PRODUCT_NAME" /> मध्ये साइन इन करण्याची अनुमती आहे किंवा नाही ते आपण कॉन्फिगर करू शकता. हे धोरण 'असत्य' वर सेट करण्यामुळे chrome.identity API वापरणार्या अॅप्स आणि विस्तारांना त्यास कार्य करण्यापासून प्रतिबंधित करेल, त्यामुळे कदाचित आपण त्याऐवजी SyncDisabled वापरू इच्छित असाल.</translation> -<translation id="5304269353650269372">वापरकर्ता इनपुटशिवाय कालावधी निर्दिष्ट करते ज्यानंतर जेव्हा बॅटरी उर्जेवर चालते तेव्हा एक चेतावणी संवाद दर्शविला जातो. +<translation id="5304269353650269372">वापरकर्ता इनपुटशिवाय कालावधी निर्दिष्ट करते ज्यानंतर जेव्हा बॅटरी उर्जेवर चालते तेव्हा एक चेतावणी संवाद दाखवला जातो. जेव्हा हे धोरण सेट केले जाते, तेव्हा निष्क्रिय कारवाई केली जाणार आहे असे वापरकर्त्यास सांगणारा एक चेतावणी संवाद <ph name="PRODUCT_OS_NAME" /> ने दर्शविण्यापूर्वी वापरकर्त्याने निष्क्रिय रहाणे आवश्यक असलेला कालावधी हे निर्दिष्ट करते. - हे धोरण सेट केलेले नसते, तेव्हा कोणताही चेतावणी संवाद दर्शविला जात नाही. + हे धोरण सेट केलेले नसते, तेव्हा कोणताही चेतावणी संवाद दाखवला जात नाही. धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्ट केले पाहिजे. निष्क्रिय विलंबापेक्षा कमी किंवा समान असण्यासाठी मूल्ये नियंत्रित केली जातात.</translation> @@ -1794,7 +1854,7 @@ <translation id="5365946944967967336">टूलबारवर मुख्यपृष्ठ बटण दर्शवा</translation> <translation id="5366745336748853475">तुम्हाला url पॅटर्नची सूची निर्दिष्ट करण्याची अनुमती दिली जाते ज्यासाठी फ्रेम होस्टिंग SAML फ्लोमध्ये साइन-इन स्क्रीनवर आपोआप निवडलेल्या क्लायंट सर्टिफिकेटसाठी साइट निर्दिष्ट केल्या आहेत, जर साइट सर्टिफिकेटची विनंती करत असेल. - मूल्य स्ट्रिंग असलेल्या JSON शब्दकोशांचा अॅरे असणे आवश्यक आहे. प्रत्येक शब्दकोश { "pattern": "$URL_PATTERN", "filter" : $FILTER } फॉर्ममध्ये असणे आवश्यक आहे, जेथे $URL_PATTERN ही आशय सेटिंग पॅटर्न असेल. क्लायंट सर्टिफिकेट ब्राउझ करण्यासाठी कुठून निवडली जातील हे $FILTER प्रतिबंधित करते. फिल्टर कोणतेही असले तरीही, फक्त तीच सर्टिफिकेट निवडली जातील जी सर्व्हरच्या सर्टिफिकेट विनंतीशी जुळतात. { "ISSUER": { "CN": "$ISSUER_CN" } } स्वरुपात $FILTER असल्यास, अतिरिक्तरीत्या फक्त क्लायंट सर्टिफिकेट निवडली जातात ज्यांची CommonName $ISSUER_CN च्या सर्टिफिकेटने जारी केले जाते. $FILTER रिक्त शब्दकोश {} असल्यास, क्लायंट सर्टिीफिकेटची निवड अतिरिक्तरीत्या प्रतिबंधित केली जात नाही. + मूल्य स्ट्रिंग असलेल्या JSON शब्दकोशांचा अरे असणे आवश्यक आहे. प्रत्येक शब्दकोश { "pattern": "$URL_PATTERN", "filter" : $FILTER } फॉर्ममध्ये असणे आवश्यक आहे, जेथे $URL_PATTERN ही आशय सेटिंग पॅटर्न असेल. क्लायंट सर्टिफिकेट ब्राउझ करण्यासाठी कुठून निवडली जातील हे $FILTER प्रतिबंधित करते. फिल्टर कोणतेही असले तरीही, फक्त तीच सर्टिफिकेट निवडली जातील जी सर्व्हरच्या सर्टिफिकेट विनंतीशी जुळतात. { "ISSUER": { "CN": "$ISSUER_CN" } } स्वरुपात $FILTER असल्यास, अतिरिक्तरीत्या फक्त क्लायंट सर्टिफिकेट निवडली जातात ज्यांची CommonName $ISSUER_CN च्या सर्टिफिकेटने जारी केले जाते. $FILTER रिक्त शब्दकोश {} असल्यास, क्लायंट सर्टिीफिकेटची निवड अतिरिक्तरीत्या प्रतिबंधित केली जात नाही. धोरण सेट केलेले नसल्यास, कोणत्याही साइटसाठी आपोआप निवड केली जाणार नाही.</translation> <translation id="5366977351895725771">असत्य वर सेट केल्यास, या वापरकर्त्याद्वारे पर्यवेक्षी-वापरकर्ता निर्मिती अक्षम केली जाईल. कोणतेही विद्यमान पर्यवेक्षी वापरकर्ते तरीही उपलब्ध राहतील. @@ -1806,6 +1866,7 @@ हे धोरण सेट न केल्यास 'सूचना विचारा' वापरण्यात येईल आणि वापरकर्ता ते बदलण्यास सक्षम असेल.</translation> <translation id="538108065117008131">पुढील सामग्री प्रकार हाताळण्यास <ph name="PRODUCT_FRAME_NAME" /> ला परवानगी द्या.</translation> +<translation id="5391388690191341203">ऑटो लॉग इन करण्यासाठी डिव्हाइस स्थानिक खाते</translation> <translation id="5392172595902933844">Android च्या स्थितीविषयी माहिती परत सर्व्हरकडे पाठविली जाते. धोरण असत्य वर सेट केल्यास किंवा अनसेट केलेले ठेवल्यास, कोणत्याही स्थिती माहितीचा अहवाल दिला जात नाही. @@ -1845,6 +1906,7 @@ हे धोरण सेट न करता सोडल्यास डीफॉल्ट सेटिंग वापरण्यात येते ती होस्ट ब्राउझरला प्रस्तुतीची अनुमती देण्यासाठी, परंतु आपण वैकल्पिकपणे हे अधिलिखित करुन आणि <ph name="PRODUCT_FRAME_NAME" /> मध्ये HTML पृष्ठे डीफॉल्ट म्हणून प्रस्तुत करुन घेऊ शकता.</translation> <translation id="5464816904705580310">व्यवस्थापित केलेल्या वापरकर्त्यांसाठी सेटिंग्ज कॉन्फिगर करा.</translation> <translation id="546726650689747237"> AC उर्जेवर चालताना स्क्रीन अंधुक विलंब</translation> +<translation id="5469143988693423708">Crostini रन करण्यासाठी वापरकर्त्याला अनुमती दिली आहे</translation> <translation id="5469825884154817306">या साइटवरील इमेज अवरोधित करा</translation> <translation id="5475361623548884387">प्रिंट सक्षम करा</translation> <translation id="547601067149622666">अनाहूत जाहिराती असलेल्या साइटवरील जाहिरातींना अनुमती देऊ नका</translation> @@ -1887,7 +1949,7 @@ लक्षात ठेवा की प्लॅटफॉर्म धोरण सूचनांचे समर्थन करीत असल्यास, रिफ्रेश विलंब 24 तासांसाठी (सर्व डीफॉल्ट आणि धोरणाचे मूल्य दुर्लक्षित करून) सेट केला जाईल कारण असे अपेक्षित आहे की जेव्हा धोरण बदलेल तेव्हा धोरण सूचना स्वयंचलितपणे रिफ्रेश करण्याची सक्ती केली जाईल, जे वारंवार केल्या जाणार्या रिफ्रेश क्रिया थांबविते.</translation> <translation id="5530347722229944744">संभाव्यत: धोकादायक डाउनलोड ब्लॉक करा</translation> <translation id="5535973522252703021">Kerberos प्रतिनिधी सर्व्हर श्वेतसूची</translation> -<translation id="555077880566103058">सर्व साइटना <ph name="FLASH_PLUGIN_NAME" /> प्लगइन आपोआप चालविण्याची परवानगी द्या</translation> +<translation id="555077880566103058">सर्व साइटना <ph name="FLASH_PLUGIN_NAME" /> प्लगिन आपोआप रन करण्याची परवानगी द्या</translation> <translation id="5559079916187891399">या धोरणाचा Android अॅप्सवर कोणताही प्रभाव नसतो.</translation> <translation id="5560039246134246593"><ph name="PRODUCT_NAME" /> मध्ये व्हेरिएशन सीड आणण्यासाठी एक मापदंड जोडा. @@ -1916,6 +1978,9 @@ लक्षात ठेवा की, दिलेले सर्टिफिकेट ज्यासाठी ऑप्टीमाइझ केले जाऊ शकते त्या होस्टनावांना प्रतिबंधित करणार्या nameConstraints एक्स्टेंशनस बायपास करण्यास कदाचित हे अनुमती देत असल्याने याची शिफारस केली जात नाही. हे धोरण सेट केले नसल्यास किंवा असत्य वर सेट केले असल्यास, subjectAlternativeName एक्स्टेंशन नसलेल्या एक DNS नाव किंवा IP पत्ता असलेल्या सर्व्हर सर्टिफिकेटंवर विश्वास ठेवला जाणार नाही.</translation> +<translation id="5581292529942108810">Chrome रिपोर्टिंग एक्स्टेंशनशी संबंधित धोरणे कॉन्फिगर करा. + + हे धोरण फक्त <ph name="CHROME_REPORTING_EXTENSION_NAME" /> सुरू केलेले असताना आणि मशीनची <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> सह नोंदणी केलेली असताना प्रभावी असते.</translation> <translation id="5583806683960333345">ही सेटिंग चालू करणे वापरकर्त्यास झटपट टेदरिंग वापरू देते जे त्यांच्या Google फोनला त्याचा मोबाइल डेटा त्यांच्या डीव्हाइसशी शेअर करू देते. ही सेटिंग बंद केल्यास वापरकर्त्यांना झटपट टेदरिंग वापरू दिले जाणार नाही. @@ -1925,7 +1990,7 @@ <translation id="5586942249556966598">काहीही करू नका</translation> <translation id="5610104657949692379">हे धोरण सेट केले जाते तेव्हा ते <ph name="PRODUCT_OS_NAME" /> करत असलेली कारवाई निष्क्रिय विलंबाद्वारे दिलेल्या वेळेच्या लांबीसाठी वापरकर्त्याची निष्क्रियता निर्दिष्ट करते, जी स्वतंत्रपणे कॉन्फिगर केली जाऊ शकते. - जेव्हा हे धोरण सेट केलेले नसते, तेव्हा डीफॉल्ट कारवाई केली जाते, जे निलंबन असते. + जेव्हा हे धोरण सेट केलेले नसते, तेव्हा डीफॉल्ट कारवाई केली जाते, जी निलंबनाची असते. कारवाई म्हणजे निलंबन असल्यास, निलंबनापूर्वी स्क्रीन एकतर लॉक करण्यासाठी किंवा लॉक न करण्यासाठी, <ph name="PRODUCT_OS_NAME" /> स्वतंत्रपणे कॉन्फिगर केले जाऊ शकते.</translation> <translation id="5618398258385745432">पासवर्ड पाहण्यावर रीअॉथेंटिकेशन लागू करण्यात आले त्याच्या आधीपासून संलग्न सेटिंग वापरण्यात येत आहे. तेव्हापासूनच हे सेटिंग आणि पर्यायाने हे धोरण Chrome च्या वर्तनावर परिणाम करत नाही. Chrome चे सद्य वर्तन पासवर्ड व्यवस्थापक सेटिंग्ज पेजमध्ये स्पष्ट मजकूराच्या स्वरूपात पासवर्ड दाखवणे अक्षम केल्यावर कसे असेल तसे आहे. याचाच अर्थ, सेटिंग्ज पेजमध्ये फक्त प्लेसहोल्डर आहे आणि वापरकर्त्याने “दाखवा” वर क्लिक केल्यावरच (आणि लागू असल्यास रीअॉथेंटिकेशन केल्यावर) Chrome पासवर्ड दाखवते. या धोरणाची मूळ माहिती खालीलप्रमाणे. @@ -1954,8 +2019,8 @@ हे धोरण सेट नसल्यास किंवा ते असत्य वर सेट केले असल्यास, <ph name="PRODUCT_NAME" /> विद्यमान ऑनलाइन मागे घेणे तपासणी सेटिंग्ज वापरेल.</translation> <translation id="5728154254076636808"><ph name="PRODUCT_NAME" /> प्रोफाइल डेटासाठी रोमिंग कॉपी तयार करणे चालू करा.</translation> -<translation id="5732972008943405952">प्रथम चालविण्यानंतर डीफॉल्ट ब्राउझर मधून स्वयं-भरण फॉर्म डेटा आयात करा</translation> -<translation id="5741810844420698449">हे धोरण सेट केले असताना, वापरकर्ता डीव्हाइसचे लिड बंद करतो तेव्हा <ph name="PRODUCT_OS_NAME" /> करत असलेली कारवाई निर्दिष्ट करते. +<translation id="5732972008943405952">प्रथम चालवण्यानंतर डीफॉल्ट ब्राउझर मधून अॉटोफिल फॉर्म डेटा आयात करा</translation> +<translation id="5741810844420698449">हे धोरण सेट केले असताना, वापरकर्ता डिव्हाइसचे लिड बंद करतो तेव्हा <ph name="PRODUCT_OS_NAME" /> करत असलेली कारवाई निर्दिष्ट करते. हे धोरण सेट नसताना, डीफॉल्ट कारवाई केली जाते जी निलंबन असते. @@ -1967,7 +2032,7 @@ <translation id="5781412041848781654">HTTP प्रमाणीकरणासाठी कोणती GSSAPI लायब्ररी वापरावी ते निर्दिष्ट करते. आपण फक्त लायब्ररीचे नाव किंवा पूर्ण पथ सेट करू शकता. सेटिंग प्रदान केलेले नसल्यास, <ph name="PRODUCT_NAME" /> डीफॉल्ट लायब्ररी नाव वापरेल.</translation> -<translation id="5781806558783210276">वेळेची लांबी वापरकर्ता इनपुट शिवाय निर्दिष्ट करते ज्यानंतर बॅटरी उर्जेवर चालताना निष्क्रिय कारवाई केली जाते. +<translation id="5781806558783210276">वेळेची लांबी वापरकर्ता इनपुटशिवाय निर्दिष्ट करते ज्यानंतर बॅटरी उर्जेवर रन होताना निष्क्रिय कारवाई केली जाते. जेव्हा हे धोरण सेट केलेले असते, तेव्हा ते <ph name="PRODUCT_OS_NAME" /> ने निष्क्रिय कारवाई करण्यापूर्वी वापरकर्त्याने निष्क्रिय राहणे आवश्यक असणाऱ्या वेळेची लांबी निर्दिष्ट करते, जी स्वतंत्रपणे कॉन्फिगर केली जाऊ शकते. @@ -2012,14 +2077,14 @@ <translation id="5868414965372171132">वापरकर्ता स्तरीय नेटवर्क कॉन्फिगरेशन</translation> <translation id="5879014913445067283"><ph name="NETBIOS_NAME" /> मार्फत नेटवर्क फाइल शेअर शोध नियंत्रित करते</translation> <translation id="5883015257301027298">डीफॉल्ट कुकीज सेटिंग</translation> -<translation id="5887414688706570295">TalkGadget उपसर्ग कॉन्फिगर करते जे दूरस्थ प्रवेश होस्टद्वारे वापरले जाते आणि वापरकर्त्यास त्यास वापरण्यापासून प्रतिबंधित करते. - निर्दिष्ट केल्यास, हा उपसर्ग TalkGadget करिता एक पूर्ण डोमेन तयार करण्यासाठी आधारभूत TalkGadget नावामध्ये योजला आहे. आधारभूत TalkGadget डोमेन नाव '.talkgadget.google.com' हे आहे. +<translation id="5887414688706570295">TalkGadget प्रत्यय कॉन्फिगर करते जे रिमोट अॅक्सेस होस्टद्वारे वापरले जाते आणि वापरकर्त्यास त्यास वापरण्यापासून प्रतिबंधित करते. + निर्दिष्ट केल्यास, हा प्रत्यय TalkGadget करिता एक पूर्ण डोमेन तयार करण्यासाठी आधारभूत TalkGadget नावामध्ये योजला आहे. आधारभूत TalkGadget डोमेन नाव '.talkgadget.google.com' हे आहे. - ही सेटिंग सक्षम केल्यास, जेव्हा डीफॉल्ट डोमेन नावाऐवजी TalkGadget वर प्रवेश करत असल्यास नंतर होस्ट सानुकूल डोमेन नाव वापरेल. + ही सेटिंग सक्षम केल्यास, जेव्हा डीफॉल्ट डोमेन नावाऐवजी TalkGadget वर अॅक्सेस करत असल्यास नंतर होस्ट कस्टमाइझ डोमेन नाव वापरेल. सेटिंग अक्षम असल्यास किंवा सेट नसल्यास, नंतर डीफॉल्ट TalkGadget डोमेन नाव ('chromoting-host.talkgadget.google.com') सर्व होस्टसाठी वापरले जाईल. - दूरस्थ प्रवेश ग्राहक या धोरण सेटिंग द्वारे प्रभावित नाहीत. ते TalkGadget वर प्रवेश करण्यासाठी नेहमीच 'chromoting-client.talkgadget.google.com' वापरतील.</translation> +रिमोट अॅक्सेस ग्राहक या धोरण सेटिंग द्वारे प्रभावित नाहीत. ते TalkGadget वर अॅक्सेस करण्यासाठी नेहमीच 'chromoting-client.talkgadget.google.com' वापरतील.</translation> <translation id="5893553533827140852">हे सेटिंग सक्षम असल्यास, दूरस्थ होस्ट कनेक्शनवर gnubby प्रमाणीकरण विनंत्या प्रॉक्सी केल्या जातील. हे सेटिंग अक्षम असल्यास किंवा कॉन्फिगर न केल्यास, gnubby प्रमाणीकरण विनंत्या प्रॉक्सी केल्या जाणार नाहीत.</translation> @@ -2137,8 +2202,7 @@ <translation id="6114416803310251055">असमर्थित</translation> <translation id="6133088669883929098">सर्व साइटना की निर्मिती वापरण्याची अनुमती द्या</translation> <translation id="6141402445226505817">नेहमी अव्यवस्थित टाइमझोन ओळख वापरा</translation> -<translation id="6145799962557135888">JavaScript रन करण्यासाठी अनुमती नसलेल्या साइट निर्दिष्ट करणार्या url नमुन्यांती सूची सेट करण्याची आपल्याला अनुमती देते. - +<translation id="6145799962557135888">JavaScript रन करण्यासाठी अनुमती नसलेल्या साइट निर्दिष्ट करणार्या url नमुन्यांतील सूची सेट करण्याची तुम्हाला अनुमती देते. हे धोरण सेट न करता सोडल्यास सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य हे सेट केले असल्यास 'डीफॉल्ट JavaScript सेटिंग' धोरण, किंवा अन्यथा वापरकर्त्याचे वैयक्तिक कॉन्फिगरेशन वापरले जाईल.</translation> <translation id="614662973812186053">हे धोरण Android वापर आणि निदान डेटा संकलन देखील नियंत्रित करते.</translation> @@ -2146,7 +2210,7 @@ <translation id="6157537876488211233">प्रॉक्सी स्थलांतर नियमांची स्वल्पविरामाने-विभक्त केलेली सूची</translation> <translation id="6158324314836466367">एंटरप्राइज वेब स्टोअर नाव (बहिष्कृत केलेले)</translation> <translation id="6178075938488052838">हे धोरण <ph name="PRODUCT_OS_NAME" /> सत्र कोण सुरू करू शकते ते नियंत्रित करते. हे वापरकर्त्यांना Android मध्ये अतिरिक्त Google खात्यांमध्ये साइन इन करण्यापासून प्रतिबंधित करत नाही. आपण हे प्रतिबंधित करू इच्छित असल्यास, Android-विशिष्ट <ph name="ACCOUNT_TYPES_WITH_MANAGEMENT_DISABLED_CLOUDDPC_POLICY_NAME" /> धोरणास <ph name="ARC_POLICY_POLICY_NAME" /> चा भाग म्हणून कॉन्फिगर करा.</translation> -<translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> प्लगइन चालवण्याची परवानगी नसलेल्या साइटचा उल्लेख करणार्या url पॅटर्नची सूची सेट करण्याची तुम्हाला परवानगी देते. +<translation id="6181608880636987460"><ph name="FLASH_PLUGIN_NAME" /> प्लगिन रन करण्याची परवानगी नसलेल्या साइटचा उल्लेख करणार्या url पॅटर्नची सूची सेट करण्याची तुम्हाला परवानगी देते. हे धोरण सेट न करता ठेवल्यास, 'DefaultPluginsSetting' धोरण सेट केले असल्यास त्यातून किंवा वापरकर्त्यांच्या वैयक्तिक काँफिगरेशनमधून सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य वापरण्यात येईल.</translation> <translation id="6190022522129724693">डीफॉल्ट पॉपअप सेटिंग</translation> @@ -2180,6 +2244,11 @@ <translation id="6310223829319187614">वापरकर्ता साइन इन दरम्यान डोमेन नाव स्वयंपूर्णता सक्षम करा</translation> <translation id="6315673513957120120">SSL एरर असलेल्या साइटवर वापरकर्ते नेव्हिगेट करतात तेव्हा Chrome चेतावणी पृष्ठ दर्शविते. डीफॉल्टनुसार किंवा हे धोरण सत्य वर सेट केले जाते, तेव्हा या चेतावणी पृष्ठांमधून क्लिक करण्याची वापरकर्त्यांना अनुमती असते. हे धोरण असत्य वर सेट केल्यामुळे वापरकर्त्यांना कोणत्याही चेतावणी पृष्ठांमधून क्लिक करण्याची अनुमती दिली जात नाही.</translation> +<translation id="6352543686437322588">विलंबानंतर ऑटो लॉग इन करण्यासाठी डिव्हाइस स्थानिक खाते. + + हे धोरण सेट केल्यास, वापरकर्ता संवादाशिवाय लॉग इन स्क्रीनवर गेलेल्या कालावधीनंतर निर्दिष्ट सेशन आपोआप लॉग इन केले जाईल. डिव्हाइस स्थानिक खाते आधीपासून कॉन्फिगर केले जाणे आवश्यक आहे (|DeviceLocalAccounts| पाहा). + + हे धोरण सेट न केल्यास, कोणतेही आपोआल लॉग इन नसेल.</translation> <translation id="6353901068939575220">POST सह एक URL शोधताना वापरलेले प्राचल निर्दिष्ट करते. हे स्वल्पविरामाने-विभक्त केलेल्या नाव/मूल्य जोड्यांचे बनलेले असते. मूल्य हे टेम्पलेट प्राचल असल्यास, वरील उदाहरणातील {searchTerms} प्रमाणे, ते खर्या शोध संज्ञा डेटासह पुनर्स्थित केले जाईल. हे धोरण पर्यायी आहे. सेट केले नसल्यास, GET पद्धत वापरून शोध विनंती पाठविली जाईल. @@ -2218,12 +2287,12 @@ ही सेटिंग चालू केल्यास, YouTube वरील प्रतिबंधित मोडला नेहमी किमान मध्यम असण्यासाठी अंमलबजावणी केली जाते. ही सेटिंग बंद केली असल्यास किंवा कोणतेही मूल्य सेट केले नसल्यास, <ph name="PRODUCT_NAME" /> द्वारे YouTube वरील प्रतिबंधित मोडची अंमलबजावणी केली जात नाही. YouTube धोरणांसारखी बाह्य धोरणे तरीही कदाचित प्रतिबंधित मोडची अंमलबजावणी करतील.</translation> -<translation id="6520802717075138474">प्रथमच चालताना डीफॉल्ट ब्राउझरमधून शोध इंजिन आयात करा</translation> +<translation id="6520802717075138474">प्रथमच रन होताना डीफॉल्ट ब्राउझरमधून शोध इंजिन आयात करा</translation> <translation id="6525955212636890608">तुम्ही हे सेटिंग चालू केल्यास, ज्या वेबसाइटवर आशय सेटिंग्जमध्ये फ्लॅशला अनुमती द्या सेट केली गेली आहे तिच्यावर एम्बेड केलेला सर्व फ्लॅश आशय -- एक तर वापरकर्ता किंवा एंटरप्राइझ धोरणानुसार -- इतर मूळ आशयातील आशय किंवा लहान आशयासह रन केला जाईल. कोणत्या वेबसाइटना फ्लॅश रन करण्याची अनुमती आहे यावर नियंत्रण ठेवण्यासाठी "DefaultPluginsSetting", "PluginsAllowedForUrls" आणि "PluginsBlockedForUrls" धोरणे पाहा. - हे सेटिंग बंद असल्यास किंवा सेट केलेले नसल्यास, इतर मूळ आशयातील फ्लॅश आशय किंवा लहान आशय ब्लॉक केला जाऊ शकतो.</translation> + हे सेटिंग बंद असल्यास किंवा सेट केलेले नसल्यास, इतर मूळ आशयातील फ्लॅश आशय किंवा थोडाला आशय ब्लॉक केला जाऊ शकतो.</translation> <translation id="653608967792832033">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते ज्यानंतर बॅटरी उर्जेवर चालताना स्क्रीन लॉक होते. जेव्हा हे धोरण शून्यापेक्षा मोठ्या मूल्यावर सेट केलेले असते, तेव्हा ते <ph name="PRODUCT_OS_NAME" /> ने स्क्रीन लॉक करण्यापूर्वी वापरकर्त्याने निष्क्रिय राहणे आवश्यक असणाऱ्या वेळेची लांबी निर्दिष्ट करते. @@ -2314,7 +2383,7 @@ <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE" />: जर <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_PRESERVE_DEVICE_STATE_TRUE" /> वर सेट केले असेल तर, वापरकर्ते <ph name="TPM_FIRMWARE_UPDATE_TPM" /> फर्मवेयर अपडेट फ्लो कार्यान्वित करू शकतात ज्यामध्ये संपूर्ण डिव्हाइसची स्थिती कायम राखली जाते (एंटरप्राइझ नोंदणीसह) पण वापरकर्त्याचा डेटा गमावला जातो. हा अपडेट फ्लो ६८ व्या आवृत्तीपासून उपलब्ध आहे. जर हे धोरण सेट केले नसेल तर, <ph name="TPM_FIRMWARE_UPDATE_TPM" /> फर्मवेयर अपडेट कार्यक्षमता उपलब्ध नसेल.</translation> -<translation id="6757438632136860443"><ph name="FLASH_PLUGIN_NAME" /> प्लगइन चालवण्याची परवानगी असलेल्या साइटचा उल्लेख करणार्या url पॅटर्नची सूची सेट करण्याची तुम्हाला परवानगी देते. +<translation id="6757438632136860443"><ph name="FLASH_PLUGIN_NAME" /> प्लगिन रन करण्याची परवानगी असलेल्या साइटचा उल्लेख करणार्या url पॅटर्नची सूची सेट करण्याची तुम्हाला परवानगी देते. हे धोरण सेट न करता ठेवल्यास, 'DefaultPluginsSetting' धोरण सेट केले असल्यास त्यातून किंवा वापरकर्त्यांच्या वैयक्तिक काँफिगरेशनमधून सर्व साइटसाठी सर्वंकष डीफॉल्ट मूल्य वापरण्यात येईल.</translation> <translation id="6762235610019366960">तुम्हाला <ph name="PRODUCT_NAME" /> मधील पूर्ण-टॅब जाहिरात आणि/किंवा शैक्षणिक आशयाचे सादरीकरण नियंत्रित करू देते. @@ -2436,7 +2505,7 @@ या धोरणाचे मूल्य 100 पेक्षा कमी आणि 6 पेक्षा जास्त असावे आणि डीफॉल्ट मूल्य 32 असावे. - काही वेब अॅप हँगिंग GET सह अनेक कनेक्शन वापरत असल्याचे ज्ञात आहे, जेणेकरून 32 पेक्षा कमी करण्याने असे अनेक वेब अॅप्स उघडे असल्यास ब्राउझर नेटवर्किंग हँग होऊ शकते. आपल्या स्वत:च्या जोखमीवर डीफॉल्ट कमी करा. + काही वेब अॅप हँगिंग GET सह अनेक कनेक्शन वापरत असल्याचे ज्ञात आहे, जेणेकरून 32 पेक्षा कमी करण्याने असे अनेक वेब अॅप्स उघडे असल्यास ब्राउझर नेटवर्किंग हँग होऊ शकते. तुमच्या स्वत:च्या जोखमीवर डीफॉल्ट कमी करा. हे धोरण सेट न करता सोडल्यास डीफॉल्ट मूल्य वापरण्यात येईल जे 32 आहे.</translation> <translation id="6943577887654905793">Mac/Linux प्राधान्य नाव:</translation> @@ -2519,13 +2588,13 @@ तुम्ही हे सेटिंग सक्षम किंवा अक्षम केल्यास, वापरकर्ते ते बदलू किंवा ओव्हरराइड करू शत नाहीत. धोरण सेट न करता सोडल्यास वापरकर्त्यास डिव्हाइस अनलॉक करण्यासाठी पासवर्ड विचारला जावा किंवा नाही ते वापरकर्ता निवडू शकतो.</translation> -<translation id="7115494316187648452"><ph name="PRODUCT_NAME" /> प्रक्रिया OS लॉगिनवर प्रारंभ झाली किंवा नाही हे निर्धारित करते आणि अंतिम ब्राउझर विंडो बंद झाल्यानंतर देखील चालू ठेवते, आणि कोणत्याही सत्र कुकीजसह, पार्श्वभूमी अॅप्स आणि वर्तमान ब्राउझिंग सत्र सक्रिय ठेवण्याची अनुमती देते. +<translation id="7115494316187648452"><ph name="PRODUCT_NAME" /> प्रक्रिया OS लॉगिनवर सुरू झाली किंवा नाही हे निर्धारित करते आणि अंतिम ब्राउझर विंडो बंद झाल्यानंतर देखील चालू ठेवते, आणि कोणत्याही सेशन कुकीसह, बॅकग्राउंड अॅप्स आणि सद्य ब्राउझिंग सेशन सक्रिय ठेवण्याची अनुमती देते. - हे धोरण सत्य वर सेट केले असल्यास, पार्श्वभूमी मोड सक्षम केला जातो आणि वापरकर्त्याद्वारे ब्राउझिंग सेटिंग्जमध्ये नियंत्रित केला जाऊ शकत नाही. + हे धोरण सत्य वर सेट केले असल्यास, बॅकग्राउंड मोड सक्षम केला जातो आणि वापरकर्त्याद्वारे ब्राउझिंग सेटिंग्जमध्ये नियंत्रित केला जाऊ शकत नाही. - हे धोरण असत्य वर सेट केल्यास, पार्श्वभूमी मोड अक्षम केला जातो आणि वापरकर्त्याद्वारे ब्राउझिंग सेटिंग्जमध्ये नियंत्रित केला जाऊ शकत नाही. + हे धोरण असत्य वर सेट केल्यास, बॅकग्राउंड मोड अक्षम केला जातो आणि वापरकर्त्याद्वारे ब्राउझिंग सेटिंग्जमध्ये नियंत्रित केला जाऊ शकत नाही. - हे धोरण सेट न केलेले ठेवल्यास पार्श्वभूमी मोड सुरूवातीस अक्षम केला जातो आणि वापरकर्त्याद्वारे ब्राउझिंग सेटिंग्जमध्ये नियंत्रित केला जाऊ शकतो.</translation> + हे धोरण सेट न केलेले ठेवल्यास बॅकग्राउंड मोड सुरूवातीस अक्षम केला जातो आणि वापरकर्त्याद्वारे ब्राउझिंग सेटिंग्जमध्ये नियंत्रित केला जाऊ शकतो.</translation> <translation id="7123160381479171745">डीव्हाइसवर लॉगिन करण्याची अनुमती असलेल्या वापरकर्त्यांची सूची परिभाषित करते. प्रविष्ट्या <ph name="USER_WHITELIST_ENTRY_EXAMPLE" />सारखे <ph name="USER_WHITELIST_ENTRY_FORMAT" /> फॉर्म असतात. डोमेनवर मध्यस्थ वापरकर्त्यांना अनुमती देण्यासाठी <ph name="USER_WHITELIST_ENTRY_WILDCARD" /> फॉर्ममधील प्रविष्ट्या वापरा. हे धोरण कॉन्फिगर न केल्यास, वापरकर्त्यांना कशात साइन इन करण्याची अनुमती आहे त्यावर कोणतेही बंधन नसते. लक्षात ठेवा की नवीन वापरकर्ते तयार करण्यासाठी <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> धोरण योग्य प्रकारे कॉन्फिगर केले जाणे आवश्यक असते.</translation> @@ -2553,14 +2622,20 @@ <translation id="7207095846245296855">Google सुरक्षितशोध ला सक्ती करा</translation> <translation id="7211368186050418507">टाइमझोन कधीही स्वयं शोध करू नये</translation> <translation id="7216442368414164495">सुरक्षित ब्राउझिंग विस्तारित अहवालाची निवड करण्याची अनुमती द्या</translation> -<translation id="7221822638060296742">वेबसाइटना आपोआप <ph name="FLASH_PLUGIN_NAME" /> प्लग-इन चालवण्याची अनुमती आहे की नाही हे सेट करण्याची अनुमती देते. <ph name="FLASH_PLUGIN_NAME" /> प्लग-इन आपोआप चालवण्याची एकतर सर्व वेबसाइटना अनुमती दिली जाऊ शकते किंवा सर्व वेबसाइटना विनंती नाकारली जाऊ शकते. +<translation id="7221822638060296742">वेबसाइटना आपोआप <ph name="FLASH_PLUGIN_NAME" /> प्लग-इन रन करण्याची अनुमती आहे, की नाही हे सेट करण्याची अनुमती देते. <ph name="FLASH_PLUGIN_NAME" /> प्लग-इन आपोआप रन करण्याची एकतर सर्व वेबसाइटना अनुमती दिली जाऊ शकते किंवा सर्व वेबसाइटना विनंती नाकारली जाऊ शकते. - चालवण्यासाठी क्लिक करा <ph name="FLASH_PLUGIN_NAME" /> प्लग-इनला चालवण्याची अनुमती देते, परंतु वापरकर्त्याने ते अंमलात आणण्यास सुरुवात करण्यासाठी प्लेसहोल्डरवर क्लिक करणे आवश्यक आहे. + रन करण्यासाठी क्लिक करा <ph name="FLASH_PLUGIN_NAME" /> प्लग-इनला रन करण्याची अनुमती देते, परंतु वापरकर्त्याने ते अंमलात आणण्यास सुरुवात करण्यासाठी प्लेसहोल्डरवर क्लिक करणे आवश्यक आहे. - स्वयंचलित प्लेबॅकला केवळ <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME" /> धोरणामध्ये स्पष्टरीत्या सूचीबद्ध केलेल्या डोमेनसाठी अनुमती आहे. तुम्हाला सर्व साइटसाठी स्वयंचलित प्लेबॅक सुरू करायचे असल्यास या सूचीमध्ये http://* आणि https://* जोडण्याचा विचार करा. + अॉटोमॅटिक प्लेबॅकला केवळ <ph name="PLUGINS_ALLOWED_FOR_URLS_POLICY_NAME" /> धोरणामध्ये स्पष्टरीत्या सूचीबद्ध केलेल्या डोमेनसाठी अनुमती आहे. तुम्हाला सर्व साइटसाठी अॉटोमॅटिक प्लेबॅक सुरू करायचे असल्यास या सूचीमध्ये http://* आणि https://* जोडण्याचा विचार करा. हे धोरण सेट न केल्यास, वापरकर्ता हे सेटिंग मॅन्युअली बदलू शकेल.</translation> <translation id="723103540848640830">लॉक स्क्रीन PIN ची किमान लांबी ठरवा</translation> +<translation id="7232816984286843471">धोरण असत्यवर सेट केल्यास, संलग्न नसलेल्या वापरकर्त्यांना Crostini वापरण्याची अनुमती नसेल. + + धोरण सेट न केल्यास किंवा सत्यवर सेट केल्यास, जोपर्यंत इतर सेटिंग्ज त्याला अनुमती देतात तोपर्यंत सर्व वापरकर्त्यांना Crostini वापरण्याची अनुमती असते. + + VirtualMachinesAllowed, CrostiniAllowed आणि DeviceUnaffiliatedCrostiniAllowed ही तिन्ही धोरणे सत्य असणे आवश्यक आहे जेव्हा त्यांना रन करण्याची अनुमती देण्याकरिता Crostini वर लागू केले जाते. + जेव्हा हे धोरण असत्यवर बदलते तेव्हा, ते नवीन Crostini कंटेनर सुरू करण्यासाठी लागू केले जाते परंतु आधीपासून रन होत असलेले कंटेनर बंद करत नाही.</translation> <translation id="7234280155140786597">निषिद्ध मूळ संदेशन होस्टची नावे (किंवा सर्वांसाठी *)</translation> <translation id="7236775576470542603">लॉगिन स्क्रीनवर सक्षम असलेल्या स्क्रीन भिंगाचा डीफॉल्ट प्रकार सेट करा. @@ -2593,7 +2668,7 @@ गहाळ प्लग-इनचे आपोआप शोध आणि इंस्टॉलेशन यापुढे सपोर्ट करणार नाही.</translation> <translation id="7267809745244694722">कार्य की वर मीडिया की डीफॉल्ट</translation> -<translation id="7271085005502526897">प्रथमच चालताना डीफॉल्ट ब्राउझरमधून मुख्यपृष्ठ आयात करा</translation> +<translation id="7271085005502526897">प्रथमच रन होताना डीफॉल्ट ब्राउझरमधून होमपेज आयात करा</translation> <translation id="7273823081800296768">हे सेटिंग सक्षम केले असल्यास किंवा कॉन्फिगर केले नसल्यास, दर वेळी एक पिन एंटर करण्याची आवश्यकता दूर करून, वापरकर्ते कनेक्शनच्या वेळी क्लायंट आणि होस्ट जोडण्यासाठी निवड करू शकतात. हे सेटिंग अक्षम केले असल्यास, हे वैशिष्ट्य उपलब्ध असणार नाही.</translation> @@ -2613,6 +2688,12 @@ <translation id="7311458740754205918">हे सत्यवर सेट केलेले किंवा सेट न केलेले असल्यास, नवीन टॅब पृष्ठ वापरकर्त्यांच्या ब्राउझिंग इतिहास, स्वारस्ये किंवा स्थानाच्या आधारावर सामग्री सूचना दर्शवू शकते. हे असत्यावर सेट केलेले असल्यास, स्वयंचलितपणे-व्युत्पन्न होणार्या सामग्री सूचना, नवीन टॅब पृष्ठावर दर्शविल्या जाणार नाहीत.</translation> +<translation id="7313793931637495417">हे धोरण OS आवृत्ती, OS प्लॅटफॉर्म, OS आर्किटेक्चर, <ph name="PRODUCT_NAME" /> आवृत्ती आणि <ph name="PRODUCT_NAME" /> चॅनेल यासारखी आवृत्तीची माहिती द्यायची की नाही ते नियंत्रित करते. + + हे धोरण सेट न करता सोडून दिल्यास किंवा सत्यवर सेट केल्यास, आवृत्ती माहिती गोळा केली जाते. + हे धोरण असत्यवर सेट केल्यास, आवृत्ती माहिती गोळा केली जात नाही. + + हे धोरण फक्त <ph name="CHROME_REPORTING_EXTENSION_NAME" /> सुरू केलेले असताना आणि <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> सह मशीनची नोंदणी केलेली असताना प्रभावी असते.</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> साठी अतिरिक्त कमांड लाइन पॅरामीटर्स</translation> <translation id="7326394567531622570">Wipe (मूल्य 2) सारखेच, परंतु वापरकर्त्याला पुन्हा साइन इन करावे लागू नये म्हणून लॉग इन टोकन सेव्ह करण्याचा प्रयत्न करते.</translation> <translation id="7329842439428490522">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते ज्यानंतर बॅटरी उर्जेवर चालताना स्क्रीन बंद होते. @@ -2644,6 +2725,12 @@ <translation id="7349338075015720646">शांतपणे, वापरकर्ता संवादाशिवाय आणि वापरकर्त्याला अनइंस्टॉल किंवा बंद करता येणार नाहीत अशा इंस्टॉल केलेल्या वेबसायटींची सूची निर्दिष्ट करते. धोरणाचा प्रत्येक सूची आयटम दोन मेंबर असलेला ऑब्जेक्ट आहे: "url" आणि "launch_container". "url" इंस्टॉल करायच्या असलेल्या वेब अॅप ची URL असली पाहिजे आणि "launch_container" वेब अॅप इंस्टॉल केल्यावर ते कसे उघडले जाईल हे निर्देशित करण्यासाठी "विंडो" किंवा "टॅब" असले पाहिजे. "launch_container" वगळल्यास, Chrome ला ते प्रगतीशील वेब अॅप आहे असे वाटल्यास अॅप विंडोमध्ये, अन्यथा टॅबमध्ये लाँच होईल.</translation> +<translation id="735902178936442460">हे धोरण मशीनचे नाव आणि नेटवर्क पत्ते यासारखी मशीन ओळखण्यासाठी वापरली जाऊ शकणारी माहिती द्यायची की नाही हे नियंत्रित करते. + + हे धोरण सेट न करता सोडून दिल्यास किंवा सत्यवर सेट केल्यास, मशीन ओळखण्यासाठी वापरली जाऊ शकणारी माहिती गोळा केली जाते. + हे धोरण असत्यवर सेट केल्यास, मशीन ओळखण्यासाठी वापरली जाऊ शकणारी माहिती गोळा केली जात नाही. + + हे धोरण फक्त <ph name="CHROME_REPORTING_EXTENSION_NAME" /> सुरू केलेले असताना आणि <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> सह मशीनची नोंदणी केलेली असताना प्रभावी असते.</translation> <translation id="7367028210010532881">संभाव्यतः त्रासदायक म्हणून फ्लॅग केलेल्या साइटवर जेव्हा वापरकर्ते नेव्हिगेट करतात तेव्हा सुरक्षित ब्राउझिंग सेवा एक धोक्याची सूचना असलेले पेज दाखवते. ही सेटिंग सुरू करण्यामुळे वापरकर्त्यांना धोक्याची सूचना असलेल्या पेजवरून कशाही प्रकारे त्रासदायक साइटवर पुढे जाण्यापासून रोखले जाते. ही सेटिंग बंद केली असल्यास किंवा कॉन्फिगर केली नसल्यास वापरकर्ते धोक्याची सूचना दर्शवल्यानंतर फ्लॅग केलेल्या साइटवर पुढे जाण्याचा पर्याय निवडू शकतात. @@ -2652,14 +2739,14 @@ <translation id="737655323154569539">प्रिंटिंग पेजचा आकार प्रतिबंधित करते. सेट न केलेले धोरण आणि रिकामे संच प्रतिबंध नाही म्हणून मानले जातात.</translation> <translation id="7389872682701720082">तुम्ही ही सेटिंग चालू केल्यास, आउटडेटेड नसलेली प्लगिन नेहमी चालू राहतील. - ही सेटिंग बंद किंवा सेट केली नसल्यास, वापरकर्ते त्यांना करणे आवश्यक असलेले प्लगिन चालवण्यासाठी परवानगीकरिता विचारतीलहे असे प्लगिन आहेत जे सुरक्षिततेशी तडजोड करू शकतात.</translation> + ही सेटिंग बंद किंवा सेट केली नसल्यास, वापरकर्ते त्यांना करणे आवश्यक असलेले प्लगिन रन करण्यासाठी परवानगीकरिता विचारतील हे अशी प्लगिन आहेत जी सुरक्षिततेशी तडजोड करू शकतात.</translation> <translation id="7417728346887499628">बंद केलेले असल्यास, Chrome क्लीनअप ला नको असलेल्या सॉफ्टवेअरसाठी सिस्टम स्कॅन करणे आणि क्लीनअप करण्यास प्रतिबंधित करते. chrome://settings/cleanup वरून Chrome क्लीनअप मॅन्युअली ट्रिगर करणे बंद केले आहे. सुरू केले असल्यास किंवा सेट न केलेले असल्यास, Chrome क्लीनअप अधूनमधून नको असलेल्या सॉफ्टवेअरसाठी सिस्टम स्कॅन करते आणि एखादे सॉफ्टवेअर सापडल्यास, वापरकर्त्याला ते काढायचे आहे का हे विचारेल. chrome://settings वरून Chrome क्लीनअप मॅन्युअली ट्रिगर करणे सुरू केले आहे. हे धोरण <ph name="MS_AD_NAME" /> डोमेनशी न जोडलेल्या Windows इंस्टंसवर उपलब्ध नाही.</translation> <translation id="7417972229667085380">ज्याद्वारे सादरीकरण मोडमधील निष्क्रिय विलंब मोजता येतो अशी टक्केवारी (बहिष्कृत केलेली)</translation> -<translation id="7421483919690710988">मीडिया डिस्क कॅश आकार बाइटमध्ये सेट करा</translation> +<translation id="7421483919690710988">मीडिया डिस्क कॅशे आकार बाइटमध्ये सेट करा</translation> <translation id="7424751532654212117">अक्षम केलेल्या प्लगइनच्या सूचीतील अपवादांची सूची</translation> <translation id="7426112309807051726"><ph name="TLS_FALSE_START" /> ऑप्टिमायझेशन अक्षम करायचे की नाही ते निर्दिष्ट करते. ऐतिहासिक कारणांसाठी, या धोरणाचे नाव DisableSSLRecordSplitting ठेवलेले आहे. @@ -2709,13 +2796,19 @@ <translation id="757395965347379751">हे सेटिंग सुरू केली तेव्हा, SHA-१ स्वाक्षरीकृत सर्टिफिकेटे जोपर्यंत स्थानिकरित्या इंस्टॉल केलेल्या CA सर्टिफिकेटांना यशस्वीरित्या प्रमाणित आणि इंस्टॉल करतात तोपर्यंत त्यांना <ph name="PRODUCT_NAME" /> अनुमती देते. लक्षात ठेवा हे धोरण SHA-१ स्वाक्षर्यांना अनुमती देणार्या ऑपरेटिंग सिस्टम सर्टिफिकेट पडताळणी स्टॅकवर अलंबून असते. OS अपडेट SHA-१ सर्टिफिकेटांची OS हाताळणी बदलत असल्यास, हे धोरण यापुढे प्रभावी असणार नाही. तसेच, संस्थांना SHA-१ वरून हलविण्यासाठी आणखी वेळ देण्याकरिता तात्पुरती उपाययोजना असावी हा या धोरणाचा हेतू आहे. १ जानेवारी २०१९ रोजी किंवा त्याच्या आसपास हे धोरण काढले जाईल. हे धोरण सेट न केल्यास किंवा ते असत्यावर सेट केले असल्यास, <ph name="PRODUCT_NAME" /> सार्वजनिकरीत्या घोषित केलेल्या SHA-१ नापसंत केलेल्या अनुसूचींना फॉलो करते.</translation> -<translation id="7593523670408385997">डिस्कवर कॅश केलेल्या फायली संचयन करण्यासाठी <ph name="PRODUCT_NAME" /> वापर करेल त्या कॅश आकारास कॉन्फिगर करते. +<translation id="7591049650304818898">सुरूवातीची क्रिया म्हणून 'URL ची एक सूची उघडा' निवडल्यास, हे तुम्हाला उघडलेल्या URL ची सूची निर्दिष्ट करू देते. हे सेट न केलेले ठेवल्यास कोणतीही URL सुरुवातीला उघडली जाणार नाही. - आपण हे धोरण सेट केल्यास, वापरकर्त्याने '--disk-cache-size' ध्वजांकन निर्दिष्ट केले आहे किंवा नाही त्याचा विचार न करता <ph name="PRODUCT_NAME" /> प्रदान केलेला कॅश आकार वापरेल. या धोरणात निर्दिष्ट केलेले मूल्य हे काटेकोर नसून त्याऐवजी कॅश सिस्टीमला एक सूचना आहे, थोड्या मेगाबाइट्सखालील कोणतेही मूल्य खूप लहान आहे आणि किमान चालू शकणार्या मूल्यावर पूर्ण केले जाईल. + हे धोरण केवळ 'RestoreOnStartup' धोरण 'RestoreOnStartupIsURLs'वर सेट केल्यासच काम करते. - या धोरणाचे मूल्य 0 असल्यास, डीफॉल्ट कॅश आकार वापरला जाईल परंतु तो बदलण्यात वापरकर्ता सक्षम होणार नाही. + +<ph name="MS_AD_NAME" /> डोमेनवर सामील नसलेल्या Windows इंस्टंसवर हे धोरण उपलब्ध नाही.</translation> +<translation id="7593523670408385997">डिस्कवर कॅशे केलेल्या फायली संचयन करण्यासाठी <ph name="PRODUCT_NAME" /> वापर करेल त्या कॅशे आकारास कॉन्फिगर करते. - हे धोरण सेट न केल्यास डीफॉल्ट आकार वापरला जाईल आणि वापरकर्ता --disk-cache-size ध्वजांकनासह तो अधिशून्य करण्यात सक्षम होईल.</translation> + तुम्ही हे धोरण सेट केल्यास, वापरकर्त्याने '--disk-cache-size' फ्लॅग निर्दिष्ट केले आहे किंवा नाही त्याचा विचार न करता <ph name="PRODUCT_NAME" /> प्रदान केलेला कॅशे आकार वापरेल. या धोरणात निर्दिष्ट केलेले मूल्य हे काटेकोर नसून त्याऐवजी कॅशे सिस्टीमला एक सूचना आहे, थोड्या मेगाबाइट्सखालील कोणतेही मूल्य खूप लहान आहे आणि किमान चालू शकणार्या मूल्यावर पूर्ण केले जाईल. + + या धोरणाचे मूल्य 0 असल्यास, डीफॉल्ट कॅशे आकार वापरला जाईल परंतु तो बदलण्यात वापरकर्ता सक्षम होणार नाही. + + हे धोरण सेट न केल्यास डीफॉल्ट आकार वापरला जाईल आणि वापरकर्ता --disk-cache-size फ्लॅगसह तो ओव्हरराइड करण्यात सक्षम होईल.</translation> <translation id="759957074386651883">सुरक्षित ब्राउझिंग सेटिंग्ज</translation> <translation id="7604169113182304895">Android अॅप्स या सूचीचा आदर करण्यासाठी स्वेच्छेने निवड करू शकतात. आपण त्यांना त्याचा आदर करण्याची सक्ती करू शकत नाही.</translation> <translation id="7612157962821894603"><ph name="PRODUCT_NAME" /> प्रारंभावर लागू करण्यासाठी सिस्टीमव्याप्त ध्वजांकने</translation> @@ -2731,18 +2824,20 @@ जर तुम्ही हे धोरण सेट केले तर, <ph name="PRODUCT_NAME" /> द्वारे विशिष्ट प्रकारचे डाउनलोड रोखले जातील आणि वापरकर्त्याला सुरक्षा इशारे टाळता येणार नाहीत. - जेव्हा 'धोकादायक डाउनलोड ब्लॉक करा' हा पर्याय निवडलेला असेल तेव्हा, ज्यांसाठी सुरक्षित ब्राउझिंग इशारे दर्शविलेले आहेत तेवढे वगळता बाकी सर्व डाउनलोडना स्वीकारले जाईल. + जेव्हा 'धोकादायक डाउनलोड ब्लॉक करा' हा पर्याय निवडलेला असेल तेव्हा, ज्यांसाठी सुरक्षित ब्राउझिंग इशारे दर्शवलाले आहेत तेवढे वगळता बाकी सर्व डाउनलोडना स्वीकारले जाईल. - जेव्हा 'संभाव्य धोकादायक डाउनलोड ब्लॉक करा' हा पर्याय निवडलेला असेल तेव्हा, ज्यांसाठी संभाव्य धोकादायक डाउनलोडसाठीचे सुरक्षित ब्राउझिंग इशारे दर्शविलेले आहेत तेवढे वगळता बाकी सर्व डाउनलोडना स्वीकारले जाईल. + जेव्हा 'संभाव्य धोकादायक डाउनलोड ब्लॉक करा' हा पर्याय निवडलेला असेल तेव्हा, ज्यांसाठी संभाव्य धोकादायक डाउनलोडसाठीचे सुरक्षित ब्राउझिंग इशारे दर्शवलाले आहेत तेवढे वगळता बाकी सर्व डाउनलोडना स्वीकारले जाईल. जेव्हा 'सर्व डाउनलोड ब्लॉक करा' हा पर्याय निवडलेला असेल तेव्हा, सर्व डाउनलोड ब्लॉक केले जातील. जेव्हा हे धोरण सेट केलेले नसेल, (किंवा 'कोणतेही विशेष निर्बंध नाहीत' हा पर्याय निवडलेला असेल), तेव्हा सुरक्षित ब्राउझिंगच्या विश्लेषण परिणामांवर आधारित नेहमीच्या सुरक्षा निर्बंधानुसार डाउनलोड स्वीकारले जातील. - लक्षात घ्या की वेब पेज आशय तसेच '...लिंक डाउनलोड करा' या संदर्भ मेनू पर्यायाद्वारे ट्रिगर झालेल्या डाउनलोडना हे निर्बंध लागू असतील. सध्याच्या दिसणाऱ्या पेजवरून केले जाणारे सेव्ह/डाउनलोड तसेच प्रिंटींग पर्यायांतून पीडीएफ म्हणून सेव्ह करण्यालादेखील हे निर्बंध लागू होणार नाहीत. + लक्षात घ्या, की वेब पेज आशय तसेच '...लिंक डाउनलोड करा' या संदर्भ मेनू पर्यायाद्वारे ट्रिगर झालेल्या डाउनलोडना हे निर्बंध लागू असतील. सध्याच्या दिसणाऱ्या पेजवरून केले जाणारे सेव्ह/डाउनलोड तसेच प्रिंटींग पर्यायांतून PDF म्हणून सेव्ह करण्यालादेखील हे निर्बंध लागू होणार नाहीत. सुरक्षित ब्राउझिंगबाबत अधिक माहितीसाठी https://developers.google.com/safe-browsing पहा.</translation> <translation id="7643883929273267746"><ph name="PRODUCT_NAME" /> मध्ये दिसणारी खाती प्रतिबंधित करा</translation> +<translation id="7644825865811580663">हे धोरण सत्य वर सेट केले असल्यास, पहिल्यांदा चालविल्यावर <ph name="PRODUCT_NAME" /> बिनशर्तपणे प्रथम विंडो मोठी करेल. +हे धोरण असत्य वर सेट केले असल्यास किंवा कॉन्फिगर केले नसल्यास, दाखवलेली प्रथम विंडो मोठी करावी किंवा नाही हा निर्णय स्क्रीन आकारावर आधारित असेल.</translation> <translation id="7651739109954974365">डिव्हाइससाठी डेटा रोमिंग सक्षम करावे किंवा नाही हे निर्धारित करते. खरे वर सेट केल्यास, डेटा रोमिंगला अनुमती दिली जाते. तो कॉन्फिगर न करता सोडल्यास किंवा चुकीचे वर सेट केल्यास, डेटा रोमिंग उपलब्ध असणार नाही.</translation> <translation id="7673194325208122247">कालावधी (मिलिसेकंद)</translation> <translation id="7676708657861783864">या URL पॅटर्नशी जुळणाऱ्या पेजनी सेट केलेल्या कुकी सद्य सेशनपुरत्या मर्यादित असतील, म्हणजेच ब्राउझर बाहेर पडल्यावर त्या हटवल्या जातील. @@ -2767,7 +2862,7 @@ तुम्ही हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा ओव्हरराइड करता आले नाहीत. टिप: सध्या, लॉगिन स्क्रीन दर्शवली जात असताना किंवा कियोस्क अॅप सेश प्रगतीपथावर असतानाच केवळ आपोआप रीबूट सुरु केले जाते. हे भविष्यात बदलेल आणि कोणत्याही विशिष्ट प्रकारचे सेशे प्रगतीपथावर असले किंवा नसले तरीही याकडे दुर्लक्ष करून, धोरण नेहमी लागू होईल.</translation> -<translation id="7701341006446125684">अॅप्स आणि विस्तार कॅश आकार (बाइटमध्ये) सेट करा</translation> +<translation id="7701341006446125684">अॅप्स आणि एक्स्टेंशन कॅशे आकार (बाइटमध्ये) सेट करा</translation> <translation id="7709537117200051035">होस्टवर प्रवेश करण्यास अनुमती असावी (सत्य) किंवा अवरोधित केले जावे (खोटे) हे निर्दिष्ट करणारा एका boolean ध्वजांकनावर होस्टनावे मॅप करणारा एक शब्दकोश. हे धोरण <ph name="PRODUCT_NAME" /> च्या स्वतःच्या अंतर्गत वापरासाठी आहे.</translation> @@ -2787,7 +2882,7 @@ ही सेटिंग अक्षम असल्यास किंवा सेट नसल्यास, नंतर द्वि-घटक सक्षम केले जाणार नाही आणि डीफॉल्ट वापरकर्ता-परिभाषित पिन असणे वापरले जाईल.</translation> <translation id="7750991880413385988">नवीन टॅब पृष्ठ उघडा</translation> -<translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कोठे सेव्ह करावी ते विचारा</translation> +<translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कुठे सेव्ह करावी ते विचारा</translation> <translation id="7761446981238915769">लॉग इन स्क्रीन वर इंस्टॉल केलेल्या अॅप्सची सूची कॉन्फिगर करा</translation> <translation id="7763479091692861127"> OS च्या अपडेटे वापरण्यास अनुमती असलेल्या कनेक्शनचे प्रकार. OS अपडेटे संभाव्यतः त्यांच्या आकारामुळे कनेक्शनवर प्रचंड ताण देतात आणि जास्तीचा खर्च येऊ शकतो. पण, खर्चिक म्हणून विचारात घेतलेल्या कनेक्शन प्रकारांसाठी बाय डीफॉल्ट सक्षम नसतात, ज्यात त्यावेळी WiMax, ब्लूटूथ आणि Cellular समाविष्ट असते. @@ -2839,11 +2934,11 @@ हे धोरण सेट न करता सोडल्याने 5000 मिलिसेकंदांचे डीफॉल्ट मूल्य <ph name="PRODUCT_NAME" /> ला वापरायला लावेल.</translation> <translation id="7841880500990419427">यावर फॉलबॅक करण्यासाठी TLS आवृत्ती</translation> <translation id="7842869978353666042">Google ड्राइव्ह पर्याय कॉन्फिगर करा</translation> -<translation id="7858404742201086014">तुम्ही हे सेटिंग सुरू केल्यास, आउटडेटेड प्लगिन सामान्य प्लगिन म्हणून वापरली जातील. +<translation id="7858404742201086014">तुम्ही ही सेटिंग चालू केल्यास, आउटडेटेड प्लगिन सामान्य प्लगिन म्हणून वापरली जातील. - हे सेटिंग बंद केली असल्यास आउटडेटेड प्लगिन वापरली जाणार नाहीत आणि वापरकर्ते ती चालवण्यासाठी परवानगी विचारणार नाहीत. +ही सेटिंग बंद केली असल्यास आउटडेटेड प्लगिन वापरली जाणार नाहीत आणि वापरकर्ते ती रन करण्यासाठी परवानगी विचारणार नाहीत. -हे सेटिंग सेट केलेले नसल्यास, वापरकर्ते आउटडेटेड प्लगिन चालवण्यासाठी परवानग्या विचारतील.</translation> +ही सेटिंग सेट केली नसल्यास, वापरकर्ते आउटडेटेड प्लगिन रन करण्यासाठी परवानग्या विचारतील.</translation> <translation id="787125417158068494">SyncDisabled वर सेट केल्यास किंवा कॉन्फिगर न केल्यास, <ph name="PRODUCT_OS_NAME" /> प्रमाणपत्रे ARC-अॅप्ससाठी उपलब्ध असणार नाहीत. CopyCaCerts वर सेट केल्यास, सर्व ONC-इंस्टॉल CA प्रमाणपत्रे <ph name="WEB_TRUSTED_BIT" /> सह ARC-अॅप्ससाठी उपलब्ध आहेत.</translation> <translation id="7882585827992171421">हे धोरण केवळ किरकोळ मोडमध्ये सक्रिय आहे. @@ -2902,18 +2997,28 @@ <translation id="7953256619080733119">व्यवस्थापित वापरकर्ता मॅन्युअल एक्सेप्शन होस्ट</translation> <translation id="7958537754689366707">दर बारा तासांनी पासवर्ड टाकणे आवश्यक आहे.</translation> <translation id="7961779417826583251">लेगसी सर्टिफिकेट अधिकाऱ्यांच्या सूचीसाठी सर्टिफिकेट पारदर्शकता अंमलबजावणी बंद करा</translation> -<translation id="7974114691960514888">हे धोरण आता समर्थित नाही. - दूरस्थ क्लायंटशी कनेक्ट करताना STUN आणि रिले सर्व्हरचा वापर सक्षम करते. +<translation id="7974114691960514888">या धोरणास आता सपोर्ट नाही. - हे सेटिंग सक्षम केल्यास, त्या फायरवॉलने विभक्त केलेल्या असल्या तरी मशीन दूरस्थ मशीन शोधून कनेक्ट करु शकते. +रिमोट क्लायंटशी कनेक्ट करताना STUN आणि रिले सर्व्हरचा वापर सक्षम करते. - हे सेटिंग अक्षम केल्यास आणि बाह्यमागी UDP कनेक्शन फायरवॉलने फिल्टर होत असल्यास, ही मशीन केवळ स्थानिक नेटवर्कमधील होस्ट मशीनना कनेक्ट करु शकते.</translation> +हे सेटिंग सक्षम केल्यास, त्या फायरवॉलने विभक्त केलेल्या असल्या तरी मशीन रिमोट मशीन शोधून कनेक्ट करु शकते. + +हे सेटिंग अक्षम केल्यास आणि बाह्यमागी UDP कनेक्शन फायरवॉलने फिल्टर होत असल्यास, ही मशीन केवळ स्थानिक नेटवर्कमधील होस्ट मशीनना कनेक्ट करु शकते.</translation> <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> ठिकाणाचे नाव</translation> <translation id="7980227303582973781">कोणतीही विशेष प्रतिबंधने नाहीत</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> <translation id="798856998567564266">तुम्ही हे सेटिंग सक्षम केल्यास, बुकमार्क जोडता, काढता किंवा सुधारित करता येऊ शकतील. हे धोरण सेट नसताना देखील हे डीफॉल्ट असेल. तुम्ही हे सेटिंग बंद केल्यास, बुकमार्क जोडले, काढले किंवा सुधारित केले जाऊ शकत नाहीत. विद्यमान असलेले बुकमार्क अद्याप उपलब्ध आहेत.</translation> +<translation id="7992136759457836904">Chrome OS वर व्हर्च्युअल मशीनना रन करण्याची अनुमती द्यायची का हे नियंत्रित करण्याची अनुमती देते. + + हे धोरण सत्यवर सेट केल्यास,डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती असते. + हे धोरण असत्यवर सेट केल्यास, डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती असणार नाही. + VirtualMachinesAllowed, CrostiniAllowed आणि DeviceUnaffiliatedCrostiniAllowed ही तिन्ही धोरणे सत्य असणे आवश्यक आहे जेव्हा त्यांना रन करण्याची अनुमती देण्याकरिता Crostini वर लागू केले जाते. + हे धोरण असत्यवर बदलल्यास, ते नवीन व्हर्च्युअल मशीन सुरू करण्यास लागू होते परंतु आधीपासून रन होत असलेल्या व्हर्च्युअल मशीन बंद करत नाहीत. + + हे धोरण व्यवस्थापित डिव्हाइसवर सेट न केल्यास, डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती असणार नाही. + अव्यवस्थापित डिव्हाइसना व्हर्च्युअल मशीन रन करण्याची अनुमती आहे.</translation> <translation id="802147957407376460">स्क्रीन 0 अंश फिरवा</translation> <translation id="8033913082323846868">हे धोरण M70 मध्ये कालबाह्य झाले, याऐवजी AutofillAddressEnabled आणि AutofillCreditCardEnabled वापरा. @@ -2949,7 +3054,7 @@ हे धोरण सेट न केलेले ठेवल्यास, 'AllowImages' वापरले जाईल आणि वापरकर्त्याला ते बदलता येईल. याआधी हे धोरण Android वर चुकून सुरू केले गेले होते, परंतु या कार्यक्षमतेला Android वर कधीही पूर्णपणे सपोर्ट नव्हता याची नोंद घ्या.</translation> -<translation id="8104962233214241919">या साइटसाठी स्वयंचलिपणे क्लायंट प्रमाणपत्र निवडा</translation> +<translation id="8104962233214241919">या साइटसाठी क्लायंट प्रमाणपत्र आपोआप निवडा</translation> <translation id="8112122435099806139">डिव्हाइससाठी घड्याळाचे स्वरूप निर्दिष्ट करते. हे धोरण लॉग इन स्क्रीनवर वापरण्यासाठी आणि वापरकर्ता सत्रांकरिता डीफॉल्ट म्हणून घड्याळाचे स्वरूप कॉन्फिगर करते. वापरकर्ते तरीही त्यांच्या खात्यासाठी घड्याळाचे स्वरूप अधिशून्य करू शकतात. @@ -2958,7 +3063,7 @@ हे धोरण सेट केले नसल्यास, डिव्हाइस 24 तासांच्या घड्याळाच्या स्वरूपावर डीफॉल्ट करेल.</translation> <translation id="8114382167597081590">YouTube वर काटेकोर प्रतिबंधित मोडची अंमलबजावणी करू नका</translation> -<translation id="8118665053362250806">माध्यम डिस्क कॅश आकार सेट करा</translation> +<translation id="8118665053362250806">माध्यम डिस्क कॅशे आकार सेट करा</translation> <translation id="8124468781472887384">डीव्हाइस प्रिंटर कॉन्फिगरेशन अॅक्सेस धोरण.</translation> <translation id="8135937294926049787">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते ज्यानंतर AC उर्जेवर चालताना स्क्रीन बंद होते. @@ -2969,10 +3074,17 @@ जेव्हा हे धोरण सेट केलेले नसते, तेव्हा वेळेची डीफॉल्ट लांबी वापरली जाते. धोरण मूल्य मिलिसेकंदांमध्ये निर्दिष्ट केले जावे. मूल्ये निष्क्रिय विलंबापेक्षा कमी होण्यासाठी किंवा समान होण्यासाठी पकडली जातात.</translation> +<translation id="8138009212169037227">हे धोरण, धोरण डेटा आणि धोरण मिळवण्याच्या वेळेची माहिती द्यायची की नाही हे नियंत्रित करते. + + हे धोरण सेट न करता सोडून दिल्यास किंवा सत्यवर सेट केल्यास, धोरण डेटा आणि धोरण मिळवण्याच्या वेळेची माहिती गोळा केली जाते. + हे धोरण असत्यवर सेट केल्यास, धोरण डेटा आणि धोरण मिळवण्याच्या वेळेची माहिती गोळा केली जात नाही. + + हे धोरण फक्त <ph name="CHROME_REPORTING_EXTENSION_NAME" /> सुरू केलेले असताना आणि मशीनची <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> सह नोंदणी केलेली असताना प्रभावी असते.</translation> <translation id="8140204717286305802">नेटवर्क इंटरफेसच्या प्रकारांसह त्यांची अहवाल सूची आणि सर्व्हरवरील हार्डवेअर पत्ते. धोरण असत्य वर सेट केले असल्यास, इंटरफेस सूचीचा अहवाल दिला जाणार नाही.</translation> <translation id="8141795997560411818">हे धोरण वापरकर्त्यास Android Google ड्राइव्ह अॅप वापरण्यापासून प्रतिबंधित करत नाही. आपण Google ड्राइव्ह मधील प्रवेश प्रतिबंधित करू इच्छित असल्यास, आपण Android Google ड्राइव्ह अॅपच्या स्थापनेची अनुमती देखील रद्द करावी.</translation> +<translation id="8142894094385450823">व्यवस्थापित केलेल्या सेशनकरिता शिफारस केलेली लोकॅल सेट करा</translation> <translation id="8146727383888924340">Chrome OS नोंदणी द्वारा ऑफरची पूर्तता करण्यास वापरकर्त्यांना अनुमती द्या</translation> <translation id="8148785525797916822">यापुढेला सपोर्ट नसलेल्या काँप्युटरवर किंवा ऑपरेटिंग सिस्टमवर <ph name="PRODUCT_NAME" /> सुरू असते तेव्हा दिसणारी चेतावणी दर्शवित नाही.</translation> <translation id="8148901634826284024">उच्च तीव्रता मोड प्रवेशयोग्यता वैशिष्ट्य सक्षम करा. @@ -2984,13 +3096,13 @@ आपण हे धोरण सेट केल्यास, वापरकर्ते ते बदलू किंवा अधिलिखित करू शकत नाहीत. हे धोरण सेट न करता सोडल्यास, उच्च तीव्रता मोड सुरुवातीस अक्षम असतो परंतु कोणत्याही वेळी वापरकर्त्याद्वारे सक्षम केले जाऊ शकते.</translation> -<translation id="815061180603915310">सक्षम केलेल्यावर सेट केल्यास हे धोरण तात्पुरत्या मोडवर स्विच केले जाण्यासाठी प्रोफाईलला सक्ती करते. हे धोरण OS धोरण (उदा. Windows वरील GPO) म्हणून निर्दिष्ट केल्यास ते सिस्टम वरील प्रत्येक प्रोफाईलवर लागू होईल; धोरण क्लाउड धोरण म्हणून सेट केल्यास ते व्यवस्थापित केलेल्या खात्यासह साइन इन केलेल्या प्रोफाईलवरच लागू होईल. +<translation id="815061180603915310">सक्षम केलेल्यावर सेट केल्यास हे धोरण तात्पुरत्या मोडवर स्विच केले जाण्यासाठी प्रोफाइलला सक्ती करते. हे धोरण OS धोरण (उदा. Windows वरील GPO) म्हणून निर्दिष्ट केल्यास ते सिस्टम वरील प्रत्येक प्रोफाइलवर लागू होईल; धोरण क्लाउड धोरण म्हणून सेट केल्यास ते व्यवस्थापित केलेल्या खात्यासह साइन इन केलेल्या प्रोफाइलवरच लागू होईल. - या मोडमध्ये वापरकर्ता सत्रासाठीच डिस्कवर प्रोफाईल डेटा कायम ठेवला जातो. ब्राउझर बंद झाल्यानंतर ब्राउझर इतिहास, विस्तार आणि त्यांचा डेटा, कुकीज आणि वेब डेटाबेस सारखा वेब डेटा यासारखी वैशिष्ट्ये संरक्षित केली जात नाहीत. तथापि हे डिस्कवर कोणताही डेटा व्यक्तिचलितपणे डाउनलोड करण्यापासून, पेज सेव्ह करणे किंवा त्यांचे प्रिंट करण्यापासून वापरकर्त्यास प्रतिबंधित करत नाही. + या मोडमध्ये वापरकर्ता सेशनासाठीच डिस्कवर प्रोफाइल डेटा कायम ठेवला जातो. ब्राउझर बंद झाल्यानंतर ब्राउझर इतिहास, एक्स्टेंशन आणि त्यांचा डेटा, कुकी आणि वेब डेटाबेस सारखा वेब डेटा यासारखी वैशिष्ट्ये संरक्षित केली जात नाहीत. पण हे डिस्कवर कोणताही डेटा मॅन्युअली डाउनलोड करण्यापासून, पेज सेव्ह करणे किंवा त्यांचे प्रिंट करण्यापासून वापरकर्त्यास प्रतिबंधित करत नाही. - वापरकर्त्याने संकालन सक्षम केल्यास हा सर्व डेटा अगदी नियमित प्रोफाईलप्रमाणे त्याच्या संकालित प्रोफाईलमध्ये संरक्षित केला जातो. धोरणाद्वारे गुप्त मोड स्पष्टपणे अक्षम केलेला नसल्यास तो देखील उपलब्ध असतो. + वापरकर्त्याने सिंक सक्षम केल्यास हा सर्व डेटा अगदी नियमित प्रोफाइलप्रमाणे त्याच्या सिंक केलेल्या प्रोफाइलमध्ये संरक्षित केला जातो. धोरणाद्वारे गुप्त मोड स्पष्टपणे अक्षम केलेला नसल्यास तो देखील उपलब्ध असतो. - धोरण अक्षम केलेल्यावर सेट केल्यास किंवा सेट न करता सोडल्यास साइन इन नियमित प्रोफाईलमध्ये रुपांतरीत होते.</translation> + धोरण अक्षम केलेल्यावर सेट केल्यास किंवा सेट न करता सोडल्यास साइन इन नियमित प्रोफाइलमध्ये रुपांतरीत होते.</translation> <translation id="8158758865057576716"><ph name="PRODUCT_NAME" /> प्रोफाइल डेटासाठी रोमिंग प्रतींची निर्मिती सक्षम करा.</translation> <translation id="8172676363520748127">चालू केल्यास, कीबोर्ड शॉर्टकट किंवा विस्तार API वापरून स्क्रीनशॉट घेता येऊ शकणार नाहीत. @@ -3027,7 +3139,23 @@ <translation id="8259592978873597235">हे धोरण सत्य वर सेट केले असल्यास किंवा सेट केले नसल्यास, व्हिडिओ प्ले होत असताना वापरकर्ता निष्क्रिय होण्याचा विचार करत नाही. हे निष्क्रिय विलंबास, स्क्रीन अंधुक विलंब, स्क्रीन बंद विलंब आणि स्क्रीन लॉक विलंबास होण्यापासून आणि संबंधित कारवाई केली जाण्यापासून प्रतिबंध करते. हे धोरण असत्य वर सेट केलेले असल्यास, व्हिडिओ अॅक्टिव्हिटी वापरकर्त्यास निष्क्रिय होण्याचा विचार करण्यापासून प्रतिबंध करत नाही.</translation> -<translation id="8274603902181597201">वापरकर्त्याची एन्क्रिप्ट होम डिरेक्टरी पुसा आणि नवीन एक्स्टें4-एन्क्रिप्टेड होम डिरेक्टरीसोबत सुरुवात करा.</translation> +<translation id="8264653492961233132">वापरकर्त्याशी संवाद न साधता जे अॅप्स आणि एक्स्टेंशन इंस्टॉल केले जातात आणि जे वापरकर्ता अनइंस्टॉल करू शकत नाही किंवा बंदही करू शकत नाही अशा अॅप्स/एक्स्टेंशनची सूची नमूद करते. अॅप्स/ एक्स्टेंशनने विनंती केलेल्या सर्व परवानग्या वापरकर्त्याशी संवाद न साधता पूर्णपणे दिल्या जातात, यामध्ये अॅप्स/एक्स्टेंशनच्या भविष्यातील आवृत्तींच्या परवानग्याचाही समावेश आहे. एवढेच नाही तर, enterprise.deviceAttributes आणि enterprise.platformKeys एक्स्टेंशनसाठीही परवानग्या दिल्या जातात. (सक्तीने इंस्टॉल न केलेल्या अॅप्स/एक्स्टेंशनसाठी हे दोन API उपलब्ध नाहीत.) + + हे धोरण संभाव्य परस्परविरोधी <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> धोरणावर प्राधान्य घेते. यापूर्वी सक्तीने इंस्टॉल केलेले एखादे अॅप किंवा एक्स्टेंशन या सूचीमधून काढून टाकले गेले असल्यास, ते <ph name="PRODUCT_NAME" /> कडून आपोआप अनइंस्टॉल केले जाते. + + <ph name="MS_AD_NAME" /> डोमेनशी जोडल्या न गेलेल्या Windows इंस्टंससाठी, सक्तीने केलेले इंस्टॉल करणे Chrome वेब स्टोअरमध्ये सूचीबद्ध केलेल्या अॅप्स आणि एक्स्टेंशनपुरते मर्यादित आहे. + + वापरकर्ते कोणत्याही एक्स्टेंशनचा स्रोत कोड डेव्हलपर टूलमार्फत (एक्स्टेंशनला बनवण्याची शक्यता असणारी) बदलू शकतात याची नोंद घ्या. याविषयी शंका असल्यास, <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> धोरण सेट केले पाहिजे. + + + धोरणाच्या सूचीतील प्रत्येक आयटम हा स्ट्रिंग आहे ज्यामध्ये एक्स्टेंशन आयडी आणि पर्यायी म्हणून अर्धविराम (<ph name="SEMICOLON" />) याने वेगळी केलेली "अपडेट" URL आहे. एक्स्टेंशन आयडी ही डेव्हलपर मोडमध्ये उदा: <ph name="CHROME_EXTENSIONS_LINK" /> वर असताना सापडलेली एक ३२-अक्षरांची स्ट्रिंग आहे. जर "अपडेट" URL नमूद केलेला असेल, तर तो <ph name="LINK_TO_EXTENSION_DOC1" /> मध्ये वर्णन केल्यानुसार अपडेट मॅनिफेस्ट XML दस्तऐवजाकडे निर्देशित करत असला पाहिजे. बाय डीफॉल्ट, Chrome वेब स्टोअरचा अपडेट URL वापरला जातो (जो सध्या "https://clients2.google.com/service/update2/crx" आहे). लक्षात घ्या की, या धोरणात सेट केलेली "अपडेट" URL फक्त सुरुवातीला इंस्टॉल करण्यासाठी वापरली जाते; एक्स्टेंशनच्या पुढील अपडेटसाठी एक्स्टेंशनच्या मॅनिफेस्टमध्ये दाखवलेली अपडेट URL वापरली जाईल. त्याचबरोबर हेसुद्धा लक्षात असू द्या की, "अपडेट" URL स्पष्टपणे नमूद करणे हे <ph name="PRODUCT_NAME" /> च्या ६७ पर्यंत आणि त्यावरील आवृत्त्यांमध्ये अनिवार्य होते. + + उदाहरणार्थ, <ph name="EXTENSION_POLICY_EXAMPLE" /> साधारण Chrome वेब स्टोअरच्या "अपडेट" URL वरून <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> अॅप इंस्टॉल करते. होस्टिंग एक्सटेंशनबाबत अधिक माहितीसाठी <ph name="LINK_TO_EXTENSION_DOC2" /> पाहा. + + हे धोरण सेट न करता सोडून दिल्यास, कोणतेही अॅप्स किंवा एक्स्टेंशन आपोआप इंस्टॉल केले जात नाहीत आणि वापरकर्ता कोणतेही अॅप किंवा एक्स्टेंशन <ph name="PRODUCT_NAME" /> मधून अनइंस्टॉल करू शकतो. + + लक्षात ठेवा हे धोरण गुप्त मोडवर लागू केले जात नाही.</translation> +<translation id="8274603902181597201">वापरकर्त्याची एन्क्रिप्ट होम डिरेक्टरी पुसा आणि नवीन ext4-एन्क्रिप्टेड होम डिरेक्टरीसोबत सुरुवात करा.</translation> <translation id="8285435910062771358">पूर्ण स्क्रीन भिंग सक्षम केला</translation> <translation id="8288199156259560552">Android Google स्थान सेवा सक्षम करा</translation> <translation id="8294750666104911727">सामान्यतः chrome=1 वर सेट केलेली X-UA-सुसंगत असलेली पेजे 'ChromeFरॅमeRendererSettings' धोरणाकडे दुर्लक्ष करून <ph name="PRODUCT_FRAME_NAME" /> मध्ये प्रस्तुत केली जातील. @@ -3050,7 +3178,7 @@ धोरणाचे मूल्य मिलिसेकंदात निर्दिष्ट करावे.</translation> <translation id="8339420913453596618">सेकंड फॅक्टर बंद केलेले आहे</translation> -<translation id="8344454543174932833">प्रथमच चालताना डीफॉल्ट ब्राउझरमधून बुकमार्क आयात करा</translation> +<translation id="8344454543174932833">प्रथमच रन होताना डीफॉल्ट ब्राउझरमधून बुकमार्क आयात करा</translation> <translation id="8357681633047935212">वापरकर्ता सत्राची लांबी मर्यादित करा</translation> <translation id="8359734107661430198">2008/09/02 द्वारे ExampleDeprecatedFeature API सक्षम करा</translation> <translation id="8367209241899435947">Windows वर Chrome क्लीनअप सुरू करा</translation> @@ -3161,7 +3289,7 @@ सेट केलेले नसल्यास, <ph name="PRODUCT_OS_NAME" /> डिव्हाइससाठी ३४५६००००० मिलिसेकंद (चार दिवस) आणि <ph name="PRODUCT_NAME" /> साठी ६०४८००००० मिलिसेकंद (एक आठवडा) डीफॉल्ट कालावधी वापरला जातो.</translation> <translation id="8685024486845674965">पासवर्ड पुन्हा वापरला गेल्यामुळे पासवर्ड संरक्षण चेतावणी ट्रिगर होते</translation> -<translation id="8693243869659262736">अंगभूत DNS क्लायंट वापरा</translation> +<translation id="8693243869659262736">बिल्ट-इन DNS क्लायंट वापरा</translation> <translation id="8704831857353097849">अक्षम केलेल्या प्लगइनची सूची</translation> <translation id="8711086062295757690">कीवर्ड निर्दिष्ट करते, जो या प्रदात्यासाठी शोध गतिमान करण्यासाठी ओम्निबॉक्समध्ये वापरण्यात येणारा शॉर्टकट आहे. @@ -3216,8 +3344,8 @@ आपण एकतर मुख्यपृष्ठास नवीन टॅब पृष्ठ करणे निवडल्यास किंवा त्यास URL होणे सेट केल्यास आणि मुख्यपृष्ठ URL निर्दिष्ट केल्यास वापरकर्त्याची मुख्यपृष्ठ सेटिंग्ज केवळ पूर्णतः लॉक केली जातात. आपण मुख्य पृष्ठ URL निर्दिष्ट केली नसल्यास, वापरकर्ता अद्याप 'chrome://newtab' निर्दिष्ट करुन मुख्यपृष्ठास नवीन टॅब पृष्ठावर सेट करण्यास सक्षम असेल. </translation> <translation id="8833109046074170275">डीफॉल्ट GAIA प्रवाहाद्वारे प्रमाणीकरण</translation> -<translation id="8838303810937202360">प्रत्येक वापरकर्त्यासाठी पुन्हा डाउनलोड करणे टाळण्यासाठी एकल डिव्हाइसच्या एकाधिक वापरकर्त्यांद्वारे स्थापनेसाठी <ph name="PRODUCT_OS_NAME" /> अॅप्स आणि विस्तार कॅश करते. - हे धोरण कॉन्फिगर केले नसल्यास किंवा मूल्य 1 MB पेक्षा कमी लहान असल्यास, <ph name="PRODUCT_OS_NAME" /> डीफॉल्ट कॅश आकार वापरेल.</translation> +<translation id="8838303810937202360">प्रत्येक वापरकर्त्यासाठी पुन्हा डाउनलोड करणे टाळण्यासाठी एकल डिव्हाइसच्या एकाहून अधिक वापरकर्त्यांद्वारे स्थापनेसाठी <ph name="PRODUCT_OS_NAME" /> अॅप्स आणि विस्तार कॅशे करते. +हे धोरण कॉन्फिगर केले नसल्यास किंवा मूल्य 1 MB पेक्षा कमी लहान असल्यास, <ph name="PRODUCT_OS_NAME" /> डीफॉल्ट कॅशे आकार वापरेल.</translation> <translation id="8858642179038618439">YouTube सुरक्षितता मोडला सक्ती करा</translation> <translation id="8860342862142842017">subjectPublicKeyInfo हॅशच्या सूचीसाठी सर्टिफिकेट पारदर्शकता अंमलबजावणी बंद करा</translation> <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME" /> द्वारे एखादी साइट पूर्तता करते तेव्हा दिसत असलेली नाकारण्याची सूचना दाबते.</translation> @@ -3280,16 +3408,16 @@ असत्यवर सेट केलेले असल्यास, सिंक संमती दाखवली जाणार नाही. सत्यवर सेट केलेले असल्यास किंवा सेट न केलेले असल्यास, सिंक संमती दाखवली जाऊ शकते.</translation> <translation id="8947415621777543415">डिव्हाइस स्थानाची तक्रार करा</translation> -<translation id="8951350807133946005">डिस्क कॅश निर्देशिका सेट करा</translation> +<translation id="8951350807133946005">डिस्क कॅशे डिरेक्टरी सेट करा</translation> <translation id="8952317565138994125">Google ने सादर केलेल्या सिंक्रनायझेशन सेवांचा वापर करून <ph name="PRODUCT_NAME" /> मधील डेटा सिंक्रोनायझेशन बंद करते आणि वापरकर्त्याला या सेटिंग्ज बदलण्यापासून रोखते. - तुम्ही हे सेटिंग सुरू केल्यास, वापरकर्ता हे सेटिंग <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा ओव्हरराइड करू शकणार नाही. + तुम्ही हे सेटिंग चालू केल्यास, वापरकर्ता हे सेटिंग <ph name="PRODUCT_NAME" /> मध्ये बदलू किंवा अधिलिखित करू शकणार नाही. - हे धोरण सेट न केल्यास हे वापरायचे की नाही हे ठरवण्यासाठी Google सिंक वापरकर्त्यांसाठी उपलब्ध असेल. + हे धोरण सेट न केल्यास हे वापरायचे, की नाही हे ठरवण्यासाठी Google सिंक वापरकर्त्यांसाठी उपलब्ध असेल. Google सिंक पूर्णपणे बंद करण्यासाठी, तुम्ही Google सिंक सेवा Google प्रशासक कंसोलमधुन बंद करण्याची शिफारस केली आहे. - <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> धोरण सुरूवर सेट केल्यावर हे धोरण सुरू करू नये कारण ते वैशिष्ट्य सारखीच क्लायंट कार्यक्षमता शेअर करते. या बाबतीत Google ने सादर केलेले सिंक्रोनायझेशन पूर्णपणे बंद होईल.</translation> + <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" /> धोरण चालूवर सेट केल्यावर हे धोरण चालू करू नये कारण ते वैशिष्ट्य सारखीच क्लायंट कार्यक्षमता शेअर करते. या बाबतीत Google ने सादर केलेले सिंक्रोनायझेशन पूर्णपणे बंद होईल.</translation> <translation id="8955719471735800169">शीर्षस्थानाकडे परत</translation> <translation id="8959992920425111821">डीफॉल्ट कॉन्फिगरेशन</translation> <translation id="8960850473856121830">या सूचीमधील नमुने विनंती करणार्या URL च्या सुरक्षितता मूळच्या संबंधात जुळविले जातील. @@ -3357,6 +3485,7 @@ असल्यास, ही सेटिंग override RemoteAccessHostDomain, ला अधिलिखित करेल. RemoteAccessHostClientDomainList देखील पहा.</translation> +<translation id="9077227880520270584">डिव्हाइस स्थानिक खाते अॉटो लॉग इन टायमर</translation> <translation id="9084985621503260744">व्हिडिओ गतिविधी उर्जा व्यवस्थापनावर प्रभाव करत असल्याबाबत निर्दिष्ट करा</translation> <translation id="9088433379343318874">पर्यवेक्षी वापरकर्ता सामग्री प्रदाता सक्षम करा</translation> <translation id="9088444059179765143">स्वयंचलित टाइमझोन ओळख पद्धत कॉन्फिगर करा</translation> @@ -3364,27 +3493,27 @@ 70 आणि त्यानंतरच्या आवृत्तीवर <ph name="PRODUCT_OS_NAME" /> आवृत्ती सपोर्ट करते. जुन्या क्लायंटसाठी, या मूल्याचा अर्थ रोलबॅक करणे बंद केलेले आहे.</translation> <translation id="9096086085182305205">प्रमाणीकरण सर्व्हर श्वेतसूची</translation> <translation id="9098553063150791878">HTTP प्रमाणीकरणासाठी धोरणे</translation> -<translation id="9103061223348895346">हे धोरण वापरकर्ता निष्क्रिय होतो तेव्हा ऊर्जा व्यवस्थापन योजनेसाठी एकाधिक सेटिंग्ज नियंत्रित करते. +<translation id="9103061223348895346">हे धोरण वापरकर्ता निष्क्रिय होतो तेव्हा ऊर्जा व्यवस्थापन योजनेसाठी एकाहून अधिक सेटिंग्ज नियंत्रित करते. - चार प्रकारच्या क्रिया असतात: - * |ScreenDim| द्वारे निर्दिष्ट केलेल्या अवधीसाठी वापरकर्ता निष्क्रिय राहिल्यास स्क्रीन अंधुक होईल.. +चार प्रकारच्या क्रिया असतात: + * |ScreenDim| द्वारे निर्दिष्ट केलेल्या अवधीसाठी वापरकर्ता निष्क्रिय राहिल्यास स्क्रीन अंधुक होईल. * |ScreenOff| द्वारे निर्दिष्ट केलेल्या अवधीसाठी वापरकर्ता निष्क्रिय राहिल्यास स्क्रीन बंद होईल. * |IdleWarning| द्वारे निर्दिष्ट केलेल्या अवधीसाठी वापरकर्ता निष्क्रिय राहिल्यास, निष्क्रिय क्रिया जवळजवळ केली जाणार असल्याचे वापरकर्त्यास सांगणारा, चेतावणी संवाद दाखवला जाईल. * |Idle| द्वारे निर्दिष्ट केलेल्या अवधीसाठी वापरकर्ता निष्क्रिय राहिल्यास |IdleAction| द्वारे निर्दिष्ट केलेली क्रिया केली जाईल. - वरील प्रत्येक क्रियांसाठी, विलंब मिलिसेकंदांमध्ये निर्दिष्ट करावा आणि याच्या संबंधित कारवाई ट्रिगर करण्यासाठी शून्यापेक्षा मोठे मूल्य सेट करणे आवश्यक असते. विलंब शून्यावर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> कोणतीही संबंधित कारवाई करणार नाही. +वरील प्रत्येक क्रियांसाठी, विलंब मिलिसेकंदांमध्ये निर्दिष्ट करावा आणि याच्या संबंधित कारवाई ट्रिगर करण्यासाठी शून्यापेक्षा मोठे मूल्य सेट करणे आवश्यक असते. विलंब शून्यावर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> कोणतीही संबंधित कारवाई करणार नाही. - वरील प्रत्येक विलंबांसाठी वेळेचा अवधी सेट केकेला नसताना डीफॉल्ट मूल्य वापरले जाईल. - लक्षात ठेवा, |ScreenDim| मूल्ये |ScreenOff|, |ScreenOff| पेक्षा कमी किंवा याच्या समान होण्यासाठी घेतली जातील आणि |IdleWarning| हे |Idle| पेक्षा कमी किंवा समान होण्यासाठी घेतले जाईल. +वरील प्रत्येक विलंबांसाठी वेळेचा अवधी सेट केकेला नसताना डीफॉल्ट मूल्य वापरले जाईल. +लक्षात ठेवा, |ScreenDim| मूल्ये |ScreenOff|, |ScreenOff| पेक्षा कमी किंवा याच्या समान होण्यासाठी घेतली जातील आणि |IdleWarning| हे |Idle| पेक्षा कमी किंवा समान होण्यासाठी घेतले जाईल. - |IdleAction| संभाव्य चार पैकी एक क्रिया असू शकते: +|IdleAction| संभाव्य चार पैकी एक क्रिया असू शकते: * |Suspend| * |Logout| * |Shutdown| * |DoNothing| - |IdleAction| सेट केले नसताना, डीफॉल्ट कारवाई केली जाते जी निलंबन असते. - AC ऊर्जा आणि बॅटरीसाठी देखील स्वतंत्र सेटिंग्ज असतात. +|IdleAction| सेट केले नसताना, डीफॉल्ट कारवाई केली जाते जी निलंबन असते. +AC ऊर्जा आणि बॅटरीसाठी देखील स्वतंत्र सेटिंग्ज असतात. </translation> <translation id="9105265795073104888">केवळ प्रॉक्सी कॉन्फिगरेशन पर्यायांचा एक उपसंच Android अॅप्ससाठी उपलब्ध केला जातो. Android अॅप्स प्रॉक्सी वापरणे स्वेच्छेने निवडू शकतात. आपण त्यांना प्रॉक्सी वापरण्याची सक्ती करू शकत नाही.</translation> <translation id="9106865192244721694">या साइटवर WebUSB ला अनुमती द्या</translation> @@ -3451,10 +3580,10 @@ धोरण सत्यवर सेट केल्यास, प्रिंट पूर्वावलोकन डायलॉगमध्ये 'शीर्षलेख आणि तळटीप' निवडलेले असते आणि वापरकर्ता ते बदलू शकत नाही.</translation> <translation id="9210953373038593554">SAML लॉग इनसाठी ऑथेंटिकेशनचा प्रकार कॉन्फिगर करते. -जेव्हा हे धोरण सेट केले नसेल किंवा डीफॉल्ट (मूल्य ०) ला सेट केले असेल तर, ब्राउझरद्वारे SAML लॉग इनचे वर्तन इतर घटकांच्या आधारे ओळखले जाते. सर्वाधिक पायाभूत परिस्थितीत, वापरकर्ता ऑथेंटिकेशन आणि कॅश्ड वापरकर्ता डेटाचे संरक्षण हे वापरकर्त्यांनी वैयक्तिकरत्या एंटर केलेल्या पासवर्डवर आधारित असते. -जेव्हा हे धोरण ClientCertificate (मूल्य १) ला सेट केले असेल, तेव्हा SAML द्वारे लॉग इन करणाऱ्या नवीन जोडलेल्या वापरकर्त्यांसाठी क्लायंट सर्टिफिकेट ऑथेंटिकेशन वापरले जाते. अशा वापरकर्त्यांसाठी पासवर्डचा वापर केला जात नाही आणि त्यांचा कॅश्ड लोकल डेटा संबंधित क्रिप्टोग्राफिक कीद्वारे संरक्षित केला जातो. उदाहरणार्थ, हे सेटिंग स्मार्ट कार्ड आधारित वापरकर्ता ऑथेंटिकेशन (लक्षात घ्या की स्मार्ट कार्ड मिडलवेअर अॅप्स DeviceLoginScreenAppInstallList धोरणाद्वारे इंस्टॉल करणे गरजेचे आहे) कॉन्फिगर करण्याची अनुमती देते. +जेव्हा हे धोरण सेट केले नसेल किंवा डीफॉल्ट (मूल्य ०) ला सेट केले असेल तर, ब्राउझरद्वारे SAML लॉग इनचे वर्तन इतर घटकांच्या आधारे ओळखले जाते. सर्वाधिक पायाभूत परिस्थितीत, वापरकर्ता ऑथेंटिकेशन आणि कॅशे्ड वापरकर्ता डेटाचे संरक्षण हे वापरकर्त्यांनी मॅन्युअली एंटर केलेल्या पासवर्डवर आधारित असते. +जेव्हा हे धोरण ClientCertificate (मूल्य १) ला सेट केले असेल, तेव्हा SAML द्वारे लॉग इन करणाऱ्या नवीन जोडलेल्या वापरकर्त्यांसाठी क्लायंट सर्टिफिकेट ऑथेंटिकेशन वापरले जाते. अशा वापरकर्त्यांसाठी पासवर्डचा वापर केला जात नाही आणि त्यांचा कॅशे्ड लोकल डेटा संबंधित क्रिप्टोग्राफिक, कीद्वारे संरक्षित केला जातो. उदाहरणार्थ, हे सेटिंग स्मार्ट कार्ड आधारित वापरकर्ता ऑथेंटिकेशन (लक्षात घ्या, की स्मार्ट कार्ड मिडलवेअर अॅप्स DeviceLoginScreenAppInstallList धोरणाद्वारे इंस्टॉल करणे गरजेचे आहे) कॉन्फिगर करण्याची अनुमती देते. -हे धोरण केवळ SAML द्वारे ऑथेंटिकेट होणाऱ्या वापरकर्त्यांनावर परिणाम करते.</translation> +हे धोरण केवळ SAML द्वारे ऑथेंटिकेट होणाऱ्या वापरकर्त्यांवरच परिणाम करते.</translation> <translation id="9213347477683611358">कोणत्याही वापरकर्त्याने अद्याप डिव्हाइसमध्ये साइन इन केले नसल्यास लॉगिन स्क्रीनवर दर्शविलेली डिव्हाइस-स्तराची वॉलपेपर इमेज कॉन्फिगर करा. Chrome OS डिव्हाइस ज्यावरून वॉलपेपर इमेज डाउनलोड करू शकते ती URL आणि डाउनलोडचे संकलन सत्यापित करण्यासाठी वापरलेला क्रिप्टोग्राफिक हॅश निर्दिष्ट करून धोरण सेट केले जाते. इमेज JPEG स्वरूपात असणे आवश्यक आहे, तिचा फाइल आकार 16MB पेक्षा जास्त असू नये. URL कोणत्याही अॉथेंटिकेशनाशिवाय अॅक्सेसयोग्य असणे आवश्यक आहे. वॉलपेेपर इमेज डाउनलोड आणि कॅश केली जाते. URL किंवा हॅश बदलतो तेव्हा ती पुन्हा डाउनलोड केली जाईल. JSON स्वरूपात URL आणि हॅश व्यक्त करणारी स्ट्रिंग म्हणून धोरण निर्दिष्ट केले जावे, उदा. @@ -3468,11 +3597,11 @@ डिव्हाइस वॉलपेपर धोरण सेट न केलेले ठेवल्यास, वापरकर्त्याचे वॉलपेपर धोरण सेट केले असल्यास काय दाखवावे ते वापरकर्त्याचे वॉलपेपर धोरण ठरविते.</translation> <translation id="9217154963008402249">नेटवर्क पॅकेटच्या परीक्षणाची वारंवारता</translation> <translation id="922540222991413931">विस्तार, अॅप्लिकेशन आणि वापरकर्ता स्क्रिप्ट स्थापना स्रोत कॉन्फिगर करा</translation> -<translation id="924557436754151212">प्रथमच चालताना डीफॉल्ट ब्राउझरमधून सेव्ह केलेले पासवर्ड आयात करा</translation> +<translation id="924557436754151212">प्रथमच रन होताना डीफॉल्ट ब्राउझरमधून सेव्ह केलेले पासवर्ड आयात करा</translation> <translation id="930930237275114205"><ph name="PRODUCT_FRAME_NAME" /> वापरकर्ता डेटा निर्देशिका सेट करा</translation> <translation id="943865157632139008"><ph name="PRODUCT_FRAME_NAME" /> इंस्टॉल केले जाते तेव्हा तुम्हाला डीफॉल्ट HTML प्रस्तुतकर्ता कॉन्फिगर करण्याची परवानगी देते. होस्ट ब्राउझरला प्रस्तुत करण्याची परवानगी देणे ही डीफॉल्ट सेटिंग आहे, परंतु तुम्ही वैकिल्पिकरित्या हे अधिलिखित करू शकता आणि डीफॉल्टनुसार <ph name="PRODUCT_FRAME_NAME" /> HTML पेज प्रस्तुत करू शकता.</translation> -<translation id="944817693306670849">डीस्क कॅश आकार सेट करा</translation> +<translation id="944817693306670849">डिस्क कॅशे आकार सेट करा</translation> <translation id="966854160628341653"><ph name="PRODUCT_OS_NAME" /> नवीन वापरकर्त्याला खाती तयार करू देते की नाही हे नियंत्रित करते. हे धोरण असत्य वर सेट केले असल्यास ज्या वापरकर्त्यांकडे आधीपासूनच एखादे खाते नाही ते लॉगिन करू शकणार नाहीत. हे धोरण सतेय वर सेट केल असल्यास किंवा कॉन्फिगर केले नसल्यास नवीन वापरकर्ता खाती तयार करू दिली जातील जेणेकरुन <ph name="DEVICE_USER_WHITELIST_POLICY_NAME" /> वापरकर्त्याला लॉगिंग इन करण्यापासून प्रतिबंधित करणार नाही.</translation> <translation id="981346395360763138">Google स्थान सेवा बंद केलेल्या आहेत</translation>
diff --git a/components/policy/resources/policy_templates_no.xtb b/components/policy/resources/policy_templates_no.xtb index 34d1df8..9b86e22 100644 --- a/components/policy/resources/policy_templates_no.xtb +++ b/components/policy/resources/policy_templates_no.xtb
@@ -130,6 +130,7 @@ <translation id="1387596372902085462">Angir om Symantec Corporations eldre PKI-infrastruktur skal klareres eller ikke</translation> <translation id="1393485621820363363">Aktiverte bedriftsskrivere</translation> <translation id="1397855852561539316">Foreslått nettadresse for standard søkeleverandør</translation> +<translation id="142346659686073702">Tillat at brukere uten tilknytning bruker Crostini</translation> <translation id="1426410128494586442">Ja</translation> <translation id="1427655258943162134">Adresse eller nettadresse for proxy-tjener</translation> <translation id="1435659902881071157">Nettverkskonfigurasjon på enhetsnivå</translation> @@ -379,6 +380,12 @@ Hvis regelen ikke spesifiseres, har det samme effekt som å slå den på. Se beskrivelsen ovenfor.</translation> <translation id="2113068765175018713">Begrens enhetens driftstid ved å bruke automatisk omstart</translation> +<translation id="2116790137063002724">Denne regelen kontrollerer om det skal rapporteres om informasjon som kan brukes til å identifisere brukere, for eksempel påloggingsinformasjon for OS, påloggingsinformasjon for <ph name="PRODUCT_NAME" />-profilen, <ph name="PRODUCT_NAME" />-profilnavn, <ph name="PRODUCT_NAME" />-profilbane og den kjørbare banen for <ph name="PRODUCT_NAME" />. + + Hvis denne regelen ikke er konfigurert eller er angitt som «true» (sant), innhentes informasjon som kan brukes til å identifisere brukere. + Hvis denne regelen er angitt som «false» (usant), innhentes ikke informasjon som kan brukes til å identifisere brukere. + + Denne regelen gjelder bare når <ph name="CHROME_REPORTING_EXTENSION_NAME" /> er slått på og maskinen er registrert med <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Tillat varslinger på disse nettstedene</translation> <translation id="2131902621292742709">Forsinkelse for nedtonet skjerm når enheten kjører på batteristrøm</translation> <translation id="2132732175597591362">Kontrollerer godkjenningslisten for nettadresser hvor autoavspilling alltid er aktivert. @@ -862,6 +869,22 @@ Hvis denne regelen ikke angis, brukes den globale standardverdien for alle nettsteder, Denne verdien hentes fra DefaultCookiesSetting-regelen hvis den er angitt, eller fra brukerens personlige konfigurasjon hvis den ikke er angitt. Se også reglene CookiesBlockedForUrls og CookiesSessionOnlyForUrls. Merk at det ikke må være motstridende nettadressemønstre mellom disse tre reglene. Det er ikke spesifisert hvilken regel som prioriteres.</translation> +<translation id="3373364525435227558">Angir én eller flere anbefalte lokaliteter for administrerte økter, slik at brukerne enkelt kan velge én av disse lokalitetene. + + Brukerne kan velge lokalitet og tastaturoppsett før de starter administrerte økter. Som standard vises alle lokaliteter som støttes i <ph name="PRODUCT_OS_NAME" />, i alfabetisk rekkefølge. Du kan bruke denne regelen for å flytte sett med anbefalte lokaliteter til toppen av listen. + + Hvis du ikke angir denne regelen, forhåndsvelges den lokaliteten som for øyeblikket er valgt for brukergrensesnittet. + + Hvis du angir denne regelen, flyttes de anbefalte lokalitetene til toppen av listen, og de skilles visuelt fra alle andre lokaliteter. De anbefalte lokalitetene listes opp i samme rekkefølge som i regelen. Den første av de anbefalte lokalitetene blir valgt som standard. + + Hvis det finnes mer enn én anbefalt lokalitet, antas det at brukerne vil velge mellom dem. De blir derfor vist et tydelig alternativ for å velge lokalitet og tastaturoppsett når de starter administrerte økter. Ellers antas det at de fleste brukerne kommer til å bruke den lokaliteten som er valgt som standard. Brukerne kan likevel velge lokalitet og tastaturoppsett når de starter administrerte økter, men valget er ikke like iøynefallende. + + Når denne regelen er angitt og automatisk pålogging er slått på (se reglene |DeviceLocalAccountAutoLoginId| og |DeviceLocalAccountAutoLoginDelay|), blir den første av de anbefalte lokalitetene – og det mest populære tastaturoppsettet for denne lokaliteten – brukt i administrerte økter som startes automatisk. + + Det mest populære tastaturoppsettet for standardlokaliteten brukes alltid som standardoppsett. + + Denne regelen kan bare angis som en anbefaling. Du kan bruke den til å flytte sett med anbefalte lokaliteter til toppen av listen, men brukerne kan alltid velge blant alle lokalitetene som er støttet i <ph name="PRODUCT_OS_NAME" />, i øktene sine. + </translation> <translation id="3381968327636295719">Bruk vertsnettleser som standard</translation> <translation id="3414260318408232239">Hvis denne regelen ikke er konfigurert, bruker <ph name="PRODUCT_NAME" /> en standard minimumsversjon, som er TLS 1.0. @@ -1099,6 +1122,11 @@ Hvis denne innstillingen angis som sann eller ikke angis, kan brukere innløse tilbud via Chrome OS-registrering. Hvis denne innstillingen angis som usann, kan ikke brukeren innløse tilbud.</translation> +<translation id="4008507541867797979">Hvis denne regelen er angitt som «true» (sant) eller ikke er konfigurert, viser <ph name="PRODUCT_OS_NAME" /> eksisterende brukere på påloggingsskjermen og tillater valg av én av dem. + + Hvis denne regelen er angitt som «false» (usant), viser ikke <ph name="PRODUCT_OS_NAME" /> eksisterende brukere på påloggingsskjermen. Den vanlige påloggingsskjermen (der brukere blir bedt om e-postadresse og passord eller telefonnummer) eller SAML-skjermen for interstitial-annonser (hvis dette er slått på i regelen <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />) vises, med mindre en administrert økt er konfigurert. Når en administrert økt er konfigurert, vises kun kontoene i den administrerte økten, og én av dem kan velges. + + Vær oppmerksom på at denne regelen ikke påvirker hvorvidt enheten beholder eller forkaster lokale brukerdata.</translation> <translation id="4010738624545340900">Tillat anrop av av filvalgdialoger.</translation> <translation id="4012737788880122133">Slår av automatiske oppdateringer når den er angitt som «true» (sann). @@ -1509,6 +1537,15 @@ Hvis denne retningslinjen ikke angis, brukes den globale standardverdien for alle nettsteder, enten fra retningslinjen DefaultNotificationsSetting hvis den er angitt, eller fra brukerens egen konfigurasjon hvis den nevnte retningslinjen ikke er angitt.</translation> <translation id="5219844027738217407">For Android-apper har denne regelen bare innvirkning på mikrofonen. Når denne regelen er angitt som «true» (sann), slås mikrofonen av for alle Android-apper – uten unntak.</translation> +<translation id="5228316810085661003">Forsinkelsen for automatisk pålogging for den lokale kontoen på enheten. + + Hvis regelen |DeviceLocalAccountAutoLoginId| ikke er angitt, har ikke denne regelen noen virkning. Ellers: + + Hvis denne regelen er angitt, angis tidsperioden uten brukeraktivitet før automatisk pålogging på den lokale kontoen på enheten i henhold til regelen |DeviceLocalAccountAutoLoginId|. + + Hvis denne regelen ikke er angitt, brukes 0 millisekunder for tidsavbruddet. + + Regelen angis i millisekunder.</translation> <translation id="523505283826916779">Tilgjengelighetsinnstillinger</translation> <translation id="5247006254130721952">Blokkér farlige nedlastinger</translation> <translation id="5248863213023520115">Angir hvilke krypteringstyper som er tillatt ved forespørsler om Kerberos-billetter fra en <ph name="MS_AD_NAME" />-tjener. @@ -1529,6 +1566,12 @@ <translation id="5272684451155669299">Hvis denne er angitt som «true» (sann), kan brukerne bruke maskinvaren på Chrome-enheter til å attestere enhetenes identitet eksternt til sertifiseringsinstansen for personvern via <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ved bruk av <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Hvis den er angitt som «false» (usann), eller hvis den ikke er angitt, kan ikke API-et kalles opp – i stedet vises en feilkode.</translation> +<translation id="5277806246014825877">Gi denne brukeren tillatelse til å kjøre Crostini. + + Hvis denne regelen er angitt som «false» (usant), kan ikke brukeren kjøre Crostini. + Hvis denne regelen ikke er konfigurert eller er angitt som «true» (sant), kan brukeren kjøre Crostini så lenge andre innstillinger også tillater dette. + Alle tre reglene, VirtualMachinesAllowed, CrostiniAllowed og DeviceUnaffiliatedCrostiniAllowed, må være angitt som sant når de gjelder for hvorvidt Crostini kan kjøres eller ikke. + Hvis denne regelen endres til usant, gjelder den for oppstart av nye Crostini-beholdere, men eksisterende beholdere som allerede kjøres, blir ikke avsluttet.</translation> <translation id="5283457834853986457">Deaktiver programtilleggssøk (avviklet)</translation> <translation id="5288772341821359899">Hvis regelen er konfigurert, blir UDP-portområdet som brukes av WebRTC, begrenset til det spesifiserte portintervallet (inkludert endepunktene). @@ -1567,6 +1610,7 @@ Hvis denne retningslinjen ikke angis, brukes AskNotification, og brukeren kan endre på dette.</translation> <translation id="538108065117008131">Gi <ph name="PRODUCT_FRAME_NAME" /> tillatelse til å håndtere følgende innholdstyper.</translation> +<translation id="5391388690191341203">Lokal konto på enheten for automatisk pålogging</translation> <translation id="5392172595902933844">Informasjon om Android-statusen sendes tilbake til tjeneren. @@ -1596,6 +1640,7 @@ Standardinnstillingen som brukes når denne retningslinjen er angitt, er for å tillate vertstjeneren å foreta gjengivelsen, men du kan velge å overstyre dette sånn at <ph name="PRODUCT_FRAME_NAME" /> som standard gjengir HTML-sider.</translation> <translation id="5464816904705580310">Konfigurer innstillinger for administrerte brukere.</translation> <translation id="546726650689747237">Forsinkelse for lysdemping på skjermen når enheten kjører på vekselstrøm</translation> +<translation id="5469143988693423708">Brukeren har tillatelse til å kjøre Crostini</translation> <translation id="5469825884154817306">Blokkér bilder på disse nettstedene</translation> <translation id="5475361623548884387">Aktiver utskrift</translation> <translation id="547601067149622666">Ikke tillat annonser på nettsteder med forstyrrende annonser</translation> @@ -1647,6 +1692,9 @@ Vær oppmerksom på at dette ikke anbefales, ettersom det gjør det mulig å omgå nameConstraints-utvidelsen som begrenser vertsnavnene et gitt sertifikat kan autoriseres for Hvis denne innstillingen ikke angis, eller hvis den angis som «false» (usann), klareres ikke tjenersertifikater som mangler en subjectAlternativeName-utvidelse og har enten et DNS-navn eller en IP-adresse.</translation> +<translation id="5581292529942108810">Konfigurer regler knyttet til Chrome Reporting Extension. + + Disse reglene gjelder bare når <ph name="CHROME_REPORTING_EXTENSION_NAME" /> er slått på og maskinen er registrert med <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Kontrollér Googles posisjonstjenester for Android</translation> <translation id="5586942249556966598">Gjør ingenting</translation> <translation id="5630352020869108293">Gjenopprett den siste økten</translation> @@ -1894,6 +1942,11 @@ <translation id="6310223829319187614">Slå på autofullføring av domenenavn ved brukerpålogging</translation> <translation id="6315673513957120120">Brukerne ser advarselssider i Chrome når de åpner nettsteder med SSL-feil. Som standard, eller når denne regelen er satt til true (sann), kan brukerne klikke seg forbi disse advarselssidene. Hvis denne regelen settes til false (usann), kan ikke brukerne klikke seg forbi advarselssider.</translation> +<translation id="6352543686437322588">Forsinket pålogging på den lokale kontoen på enheten. + + Hvis denne regelen er angitt, logges den angitte økten på automatisk etter en bestemt tidsperiode uten brukeraktivitet på påloggingsskjermen. Kontoen på enheten må være konfigurert (se regelen |DeviceLocalAccounts|). + + Hvis denne regelen ikke er angitt, logges ikke brukere på automatisk.</translation> <translation id="6353901068939575220">Angir parameterene som brukes når du utfører søker på en nettadresse med POST. De består av kommainndelte navn og verdi-par. Hvis en verdi er et malparameter, som {searchTerms} i eksempelet ovenfor, blir den erstattet med virkelig søkeordsdata. Denne innstillingen er valgfri. Hvis den ikke er angitt, blir forespørsler om søkeforslag sendt via GET-metoden. @@ -2256,6 +2309,11 @@ Hvis denne regelen ikke er angitt, kan brukeren endre denne innstillingen manuelt.</translation> <translation id="723103540848640830">Angi minimumslengden for PIN-koden for låseskjermen</translation> +<translation id="7232816984286843471">Hvis denne regelen er angitt som «false» (usant), kan ikke brukerne kjøre Crostini. + + Hvis denne regelen ikke er konfigurert eller er angitt som «true» (sant), kan alle brukere kjøre Crostini så lenge andre innstillinger også tillater dette. + Alle tre reglene, VirtualMachinesAllowed, CrostiniAllowed og DeviceUnaffiliatedCrostiniAllowed, må være angitt som sant når de gjelder for hvorvidt Crostini kan kjøres eller ikke. + Hvis denne regelen endres til usant, gjelder den for oppstart av nye Crostini-beholdere, men eksisterende beholdere som allerede kjøres, blir ikke avsluttet.</translation> <translation id="7234280155140786597">Navnene på de forbudte innebygde meldingsvertene (eller * for alle)</translation> <translation id="7236775576470542603">Angi standard type lupe som slås på fra påloggingssiden. @@ -2303,6 +2361,12 @@ <translation id="7311458740754205918">Hvis denne regelen er angitt som «true» (sann) eller ikke er angitt, kan nye faner vise innholdsforslag som er basert på brukerens nettleserlogg, interesser eller steder. Hvis den er angitt som «false» (usann), vises ikke automatisk genererte innholdsforslag på nye faner.</translation> +<translation id="7313793931637495417">Denne regelen kontrollerer om det skal rapporteres om versjonsinformasjon, for eksempel OS-versjon, OS-plattform, OS-arkitektur, <ph name="PRODUCT_NAME" />-versjon og <ph name="PRODUCT_NAME" />-kanal. + + Hvis denne regelen ikke er konfigurert eller er angitt som «true» (sant), innhentes versjonsinformasjonen. + Hvis denne regelen er angitt som «false» (usant), innhentes ikke versjonsinformasjon. + + Denne regelen gjelder bare når <ph name="CHROME_REPORTING_EXTENSION_NAME" /> er slått på og maskinen er registrert med <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Ytterligere kommandolinjeparametere for <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Ligner på Visk ut (verdi 2), men forsøker å beholde påloggingstoken, slik at brukeren ikke må logge på igjen.</translation> <translation id="7329842439428490522">Angir hvor lenge brukeren må være inaktiv før skjermen låses når enheten kjører på batteristrøm. @@ -2335,6 +2399,12 @@ <translation id="7349338075015720646">Spesifiserer en liste over nettsteder som er installert gjennom bakgrunnsinstallasjon (uten brukerinteraksjon), og som brukere ikke kan avinstallere eller slå av. Hvert element på regellisten er et objekt med to medlemmer: «url» og «launch_container». «url» bør være nettadressen for nettprogrammet som skal installeres, og «launch_container» bør være enten «window» (vindu) eller «tab» (fane) for å avgjøre hvordan nettprogrammet skal åpnes når det er installert. Hvis «launch_container» ikke er oppført, åpnes programmet i et vindu hvis Chrome anser det som et progressivt nettprogram. Hvis ikke åpnes det i en fane.</translation> +<translation id="735902178936442460">Denne regelen kontrollerer om det skal rapporteres om informasjon som kan brukes til å identifisere maskiner, for eksempel maskinnavn og nettverksadresser. + + Hvis denne regelen ikke er konfigurert eller er angitt som «true» (sant), innhentes informasjon som kan brukes til å identifisere maskiner. + Hvis denne regelen er angitt som «false» (usant), innhentes ikke informasjon som kan brukes til å identifisere maskiner. + + Denne regelen gjelder bare når <ph name="CHROME_REPORTING_EXTENSION_NAME" /> er slått på og maskinen er registrert med <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">Safe Browsing-tjenesten viser en advarselsside når brukere navigerer til nettsteder som er merket som potensielt skadelige. Hvis du slår på denne innstillingen, kan ikke brukerne ignorere advarselssiden og gå videre til det skadelige nettstedet. Hvis denne innstillingen er slått av eller ikke er konfigurert, kan brukerne velge å gå videre til det rapporterte nettstedet etter å ha sett advarselen. @@ -2589,6 +2659,14 @@ <translation id="7976157349247117979">Navnet på <ph name="PRODUCT_NAME" />-destinasjonen</translation> <translation id="7980227303582973781">Ingen spesielle begrensninger</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Lar deg styre om virtuelle maskiner kan kjøre i Chrome OS. + + Hvis regelen er angitt som «true» (sant), kan enheten kjøre virtuelle maskiner. + Hvis regelen er angitt som «false» (usant), kan ikke enheten kjøre virtuelle maskiner. + Alle tre reglene, VirtualMachinesAllowed, CrostiniAllowed og DeviceUnaffiliatedCrostiniAllowed, må være angitt som sant når de gjelder for hvorvidt Crostini kan kjøres eller ikke. + Hvis denne regelen endres til usant, gjelder den for oppstart av nye virtuelle maskiner, men eksisterende virtuelle maskiner som allerede kjøres, blir ikke avsluttet. + Når denne regelen ikke er angitt på en administrert enhet, kan ikke enheten kjøre virtuelle maskiner. + Ikke-administrerte enheter kan kjøre virtuelle maskiner.</translation> <translation id="802147957407376460">Rotér skjermen 0 grader</translation> <translation id="8033913082323846868">Denne regelen er avviklet i M70. Bruk AutofillAddressEnabled og AutofillCreditCardEnabled i stedet. @@ -2633,10 +2711,17 @@ Hvis denne innstillingen ikke er konfigurert, brukes en standardtid. Innstillingsverdien må angis i millisekunder. Verdiene er låst til å være lavere enn inaktivitetsforsinkelsen.</translation> +<translation id="8138009212169037227">Denne regelen kontrollerer om det skal rapporteres om regeldata og tidspunkt for innhenting av regler. + + Hvis denne regelen ikke er konfigurert eller er angitt som «true» (sant), innhentes regeldata og tidspunkt for innhenting av regler. + Hvis denne regelen er angitt som «false» (usant), innhentes ikke regeldata eller tidspunkt for innhenting av regler. + + Denne regelen gjelder bare når <ph name="CHROME_REPORTING_EXTENSION_NAME" /> er slått på og maskinen er registrert med <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Rapportér en liste over nettverksgrensesnitt med typene og maskinvareadressene til tjeneren. Hvis innstillingen angis som «false», rapporteres ikke grensesnittlisten.</translation> <translation id="8141795997560411818">Denne regelen kan ikke brukes til å hindre brukeren i å bruke Google Disk-appen for Android. Hvis du vil forhindre tilgangen til Google Disk, bør du ikke tillate installasjon av Google Disk-appen for Android.</translation> +<translation id="8142894094385450823">Angi de anbefalte lokalitetene for administrerte økter</translation> <translation id="8146727383888924340">Tillat at brukere løser inn tilbud via Chrome OS-registering</translation> <translation id="8148785525797916822">Ignorer advarselen som vises når <ph name="PRODUCT_NAME" /> kjører på en datamaskin eller et operativsystem som ikke lenger støttes.</translation> <translation id="8148901634826284024">Aktiver tilgjengelighetsfunksjon for høykontrastmodus. @@ -2684,6 +2769,29 @@ Disse innstillingene trenger ikke å konfigureres manuelt. Maler for Windows, Mac og Linux som er enkle å bruke, er tilgjengelige for nedlasting fra <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />. Vi anbefaler å konfigurere regler på Windows via GPO, men tildeling av regler via registeret støttes fortsatt for Windows-forekomster som er knyttet til et <ph name="MS_AD_NAME" />-domene.</translation> +<translation id="8264653492961233132">Spesifiserer en liste over apper og utvidelser som installeres stille, + uten brukerinteraksjon, og som ikke kan avinstalleres eller + deaktiveres av brukere. Det er underforstått at alle tillatelser + appene/utvidelsene ber om, gis uten brukerinteraksjon. Dette gjelder + også eventuelle tillatelser fremtidige versjoner av appen/utvidelsen + ber om. Tillatelser gis også for utvidelses-API-ene + enterprise.deviceAttributes og enterprise.platformKeys. + (Disse to API-ene er ikke tilgjengelig for apper/utvidelser som ikke er + administratorinstallert.) + + Denne regelen prioriteres foran eventuelle regler for <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> hvis de er i konflikt med hverandre. Hvis apper eller utvidelser som tidligere var administratorinstallert, blir fjernet fra listen, blir de automatisk avinstallert av <ph name="PRODUCT_NAME" />. + + For Windows-forekomster som ikke er tilknyttet noe <ph name="MS_AD_NAME" />-domene, er administratorinstallasjon begrenset til apper og utvidelser som står oppført i Chrome Nettmarked. + + Vær oppmerksom på at kildekoden for utvidelsene kan endres av brukere via utviklerverktøy (noe som potensielt kan føre til at utvidelsene ikke fungerer). Hvis dette kan bli et problem, bør du angi regelen <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Hvert av elementene i listen er en streng som inneholder en utvidelses-ID og eventuelt (valgfritt) en «oppdatering»-nettadresse, atskilt med semikolon (<ph name="SEMICOLON" />). Utvidelses-ID-en er strengen på 32 tegn du for eksempel finner i <ph name="CHROME_EXTENSIONS_LINK" /> når du er i utviklermodus. «Oppdatering»-nettadressen peker til et oppdateringsmanifest i XML-format, som beskrevet her: <ph name="LINK_TO_EXTENSION_DOC1" />. Oppdateringsnettadressen for Chrome Nettmarked brukes som standard (og for øyeblikket er den «https://clients2.google.com/service/update2/crx»). Vær oppmerksom på at «oppdatering»-nettadressen som angis i denne regelen, bare brukes for den første installasjonen. Påfølgende oppdateringer av utvidelsen bruker oppdateringsnettadressen som er beskrevet i utvidelsens manifest. Vær også oppmerksom på at det var uttrykkelig påkrevd å angi «oppdatering»-nettadressen i <ph name="PRODUCT_NAME" />-versjoner opptil og inkludert 67. + + For eksempel installerer <ph name="EXTENSION_POLICY_EXAMPLE" /> appen <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> fra «oppdatering»-nettadressen som er standard for Chrome Nettmarked. Gå til <ph name="LINK_TO_EXTENSION_DOC2" /> for å finne ut mer om å være vert for utvidelser. + + Hvis denne regelen ikke er angitt, blir ingen apper eller utvidelser installert automatisk, og brukere kan avinstallere hvilke som helst apper og utvidelser i <ph name="PRODUCT_NAME" />. + + Vær oppmerksom på at denne regelen ikke gjelder for inkognitomodus.</translation> <translation id="8274603902181597201">Visk ut brukerens ecryptfs-hjemmekatalog, og begynn med en ny ext4-kryptert hjemmekatalog.</translation> <translation id="8285435910062771358">Fullskjermsforstørrelse aktivert</translation> <translation id="8288199156259560552">Slå på Googles posisjonstjeneste for Android</translation> @@ -2950,6 +3058,7 @@ Denne regelen er ikke tilgjengelig i Windows-forekomster som ikke er knyttet til noe <ph name="MS_AD_NAME" />-domene.</translation> <translation id="9035964157729712237">Utvidelses-ID-er som skal unntas sperrelisten</translation> <translation id="9042911395677044526">Tillater skyving av nettverkskonfigurasjon for enkeltbrukere på en <ph name="PRODUCT_OS_NAME" />-enhet. Nettverkskonfigurasjon er en JSON-formatert streng, som definert av Open Network Configuration-formatet beskrevet på <ph name="ONC_SPEC_URL" /></translation> +<translation id="9077227880520270584">Nedtelling for automatisk pålogging for den lokale kontoen på enheten</translation> <translation id="9084985621503260744">Angi om videoaktivitet skal påvirke strømbehandling</translation> <translation id="9088433379343318874">Slå på innholdsleverandøren for administrerte brukere</translation> <translation id="9088444059179765143">Konfigurer metoden for automatisk påvisning av tidssoner</translation>
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb index 49b34286..8216972f 100644 --- a/components/policy/resources/policy_templates_pt-PT.xtb +++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -146,6 +146,7 @@ <translation id="1387596372902085462">Ativar ou não ativar confiança na Infraestrutura PKI antiga da Symantec Corporation.</translation> <translation id="1393485621820363363">Impressoras empresariais de dispositivos ativadas</translation> <translation id="1397855852561539316">URL de sugestão do fornecedor de pesquisas padrão</translation> +<translation id="142346659686073702">Permitir que utilizadores não afiliados utilizem o Crostini</translation> <translation id="1426410128494586442">Sim</translation> <translation id="1427655258943162134">Endereço ou URL do servidor proxy</translation> <translation id="1435659902881071157">Configuração de rede ao nível do aparelho</translation> @@ -389,6 +390,12 @@ Se esta política não for definida, é o equivalente a estar ativa. Consulte a descrição acima.</translation> <translation id="2113068765175018713">Limitar o tempo de atividade do dispositivo reiniciando automaticamente</translation> +<translation id="2116790137063002724">A presente política controla a comunicação de informações que podem ser utilizadas para identificar utilizadores, como o início de sessão no SO, o início de sessão no perfil do <ph name="PRODUCT_NAME" />, o nome de perfil do <ph name="PRODUCT_NAME" />, o caminho de perfil do <ph name="PRODUCT_NAME" /> e o caminho executável do <ph name="PRODUCT_NAME" />. + + Quando esta política não está definida ou está definida como verdadeira, são recolhidas informações que podem ser utilizadas para identificar utilizadores. + Quando esta política está definida como falsa, não são recolhidas informações que podem identificar utilizadores. + + A presente política apenas entra em vigor quando a <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está ativada e a máquina está associada à <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Permitir notificações nestes Web sites</translation> <translation id="2131902621292742709">Atraso do escurecimento do ecrã quando o dispositivo está a utilizar a energia da bateria</translation> <translation id="2132732175597591362">Controla a lista de autorizações dos padrões de URL nos quais a reprodução automática estará sempre ativada. @@ -873,6 +880,22 @@ Se esta política não for definida, é utilizado o valor global predefinido para todos os sites, seja a partir da política "DefaultCookiesSetting", caso esteja definida, ou a partir da configuração pessoal do utilizador. Consulte também as políticas "CookiesBlockedForUrls" e "CookiesSessionOnlyForUrls". Tenha em atenção que não podem existir padrões de URL em conflito entre estas três políticas. Não está especificado que política tem prioridade.</translation> +<translation id="3373364525435227558">Define um ou mais locais recomendados para uma sessão gerida, o que permite que os utilizadores selecionem facilmente um destes locais. + + O utilizador pode selecionar um local e um esquema de teclado antes de iniciar uma sessão gerida. Por predefinição, todos os locais suportados pelo <ph name="PRODUCT_OS_NAME" /> são apresentados por ordem alfabética. Pode utilizar esta política para mover um conjunto de locais recomendados para o topo da lista. + + Se esta política não estiver definida, o local da IU atual será pré-selecionado. + + Se esta política estiver definida, os locais recomendados serão movidos para o topo da lista e estarão visualmente separados dos outros locais. Os locais recomendados encontram-se organizados por ordem de apresentação na política. O primeiro local recomendado será pré-selecionado. + + Se existir mais do que um local recomendado, pressupõe-se que os utilizadores pretendem escolher entre estes locais. Ao iniciar uma sessão gerida, é destacada a opção de seleção do local e do esquema de teclado. Caso contrário, pressupõe-se que a maioria dos utilizadores pretende utilizar o local pré-selecionado. Ao iniciar uma sessão gerida, é apresentada com menos destaque a opção de seleção do local e do esquema de teclado. + + Quando esta política está definida e o início de sessão automático está ativado (consulte as políticas |DeviceLocalAccountAutoLoginId| e |DeviceLocalAccountAutoLoginDelay|), a sessão gerida iniciada automaticamente utiliza o primeiro local recomendado e o esquema de teclado mais comum correspondente a esse local. + + O esquema de teclado pré-selecionado é sempre o esquema mais comum correspondente ao local pré-selecionado. + + Apenas pode definir esta política conforme recomendado. Pode utilizá-la para mover um conjunto de locais recomendados para o topo, mas os utilizadores podem sempre escolher qualquer local suportado pelo <ph name="PRODUCT_OS_NAME" /> para a respetiva sessão. + </translation> <translation id="3381968327636295719">Utilizar o navegador anfitrião por predefinição</translation> <translation id="3414260318408232239">Se esta política não estiver configurada, o <ph name="PRODUCT_NAME" /> utiliza a versão mínima predefinida, neste caso, TLS 1.0. @@ -1103,6 +1126,11 @@ Se esta política estiver definida como verdadeira ou não estiver definida, os utilizadores poderão resgatar ofertas através do Registo no Chrome OS. Se esta política estiver definida como falsa, os utilizadores não poderão resgatar ofertas.</translation> +<translation id="4008507541867797979">Se esta política estiver definida como verdadeira ou não estiver configurada, o <ph name="PRODUCT_OS_NAME" /> apresenta os utilizadores existentes no ecrã de início de sessão e permite selecionar um. + + Se esta política estiver definida como falsa, o <ph name="PRODUCT_OS_NAME" /> não apresenta os utilizadores existentes no ecrã de início de sessão. É apresentado o ecrã de início de sessão normal (que solicita o email e a palavra-passe ou o número de telefone do utilizador) ou o ecrã intercalar em SAML (se ativado através da política <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />), exceto se configurar uma sessão gerida. Quando configura uma sessão gerida, são apenas apresentadas as contas da sessão gerida para que selecione uma. + + Tenha em atenção que esta política não afeta a preservação ou a eliminação dos dados do utilizador local pelo dispositivo.</translation> <translation id="4010738624545340900">Permitir a invocação de caixas de diálogo de seleção de ficheiros</translation> <translation id="4012737788880122133">Desativa as atualizações automáticas se estiver definida como Verdadeira. @@ -1493,6 +1521,15 @@ Se a política estiver definida como verdadeira ou não estiver especificada, os ciclos de vida dos separadores são ativados.</translation> <translation id="5208240613060747912">Permite definir uma lista de padrões de URL que especificam os Web sites não autorizados a apresentar notificações. Se esta política não for definida, será utilizado o valor global predefinido para todos os Web sites, seja a partir da política "DefaultNotificationsSetting", caso esteja definida, ou a partir da configuração pessoal do utilizador.</translation> <translation id="5219844027738217407">Para aplicações para Android, esta política afeta apenas o microfone. Se esta política estiver definida como verdadeira, o som do microfone é desativado para todas as aplicações para Android, sem exceções.</translation> +<translation id="5228316810085661003">Atraso no início de sessão automático na conta local do dispositivo. + + Se a política |DeviceLocalAccountAutoLoginId| não estiver definida, a mesma não produz efeitos. Caso contrário: + + Se esta política estiver definida, determina a quantidade de tempo sem atividade do utilizador que deve passar antes do início de sessão automático na conta local do dispositivo especificada pela política |DeviceLocalAccountAutoLoginId|. + + Se esta política não estiver definida, o limite de tempo é de 0 milissegundos. + + Esta política é especificada em milissegundos.</translation> <translation id="523505283826916779">Definições de acessibilidade</translation> <translation id="5247006254130721952">Bloquear transferências perigosas</translation> <translation id="5248863213023520115">Define os tipos de encriptação permitidos ao solicitar permissões Kerberos a um servidor do <ph name="MS_AD_NAME" />. @@ -1513,6 +1550,12 @@ <translation id="5272684451155669299">Se for verdadeira, o utilizador pode utilizar o hardware nos dispositivos Chrome para comprovar remotamente a sua identidade perante a AC de privacidade através da <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> com <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Se estiver definida como falsa ou se não estiver definida, as chamadas para a API falham e resultam num código de erro.</translation> +<translation id="5277806246014825877">Permite que este utilizador execute o Crostini. + + Se a política estiver definida como falsa, o utilizador não pode utilizar o Crostini. + Se estiver definida como verdadeira ou não estiver definida, o utilizador pode utilizar o Crostini desde que as outras definições o permitam. + As três políticas, VirtualMachinesAllowed, CrostiniAllowed e DeviceUnaffiliatedCrostiniAllowed, devem estar definidas como verdadeiras quando solicitam a execução do Crostini. + Quando esta política é alterada para falsa, aplica-se ao arranque de novos contentores do Crostini, mas não encerra contentores que já estejam em execução.</translation> <translation id="5283457834853986457">Desativar o localizador de plug-ins (descontinuado)</translation> <translation id="5288772341821359899">Se a política for definida, o intervalo de portas UDP utilizado pelo WebRTC é restrito ao intervalo de portas especificado (endpoints incluídos). @@ -1549,6 +1592,7 @@ <translation id="5370279767682621504">Ativar a compatibilidade com HTTP/0.9 em portas não predefinidas</translation> <translation id="5378985487213287085">Permite definir se os Web sites estão autorizados a apresentar notificações no ambiente de trabalho. A apresentação de notificações no ambiente de trabalho pode ser permitida por predefinição, negada por predefinição ou o utilizador pode ser questionado sempre que um Web site pretenda apresentar notificações no ambiente de trabalho. Se esta política não for definida, será utilizada a definição "AskNotifications" e o utilizador poderá alterá-la.</translation> <translation id="538108065117008131">Permitir que o <ph name="PRODUCT_FRAME_NAME" /> processe os seguintes tipos de conteúdo.</translation> +<translation id="5391388690191341203">Conta local de dispositivo para início de sessão automático</translation> <translation id="5392172595902933844">As informações sobre o estado do Android são enviadas novamente para o servidor. @@ -1573,6 +1617,7 @@ <translation id="5457924070961220141">Permite configurar o processador de HTML predefinido quando o <ph name="PRODUCT_FRAME_NAME" /> é instalado. Se esta política não for definida, será utilizada a predefinição para permitir que o processamento seja efetuado pelo navegador anfitrião. Opcionalmente, pode substituir esta definição e configurar o <ph name="PRODUCT_FRAME_NAME" /> para processar páginas HTML por predefinição.</translation> <translation id="5464816904705580310">Configura definições para utilizadores geridos.</translation> <translation id="546726650689747237">Atraso do escurecimento do ecrã quando o dispositivo está ligado à eletricidade</translation> +<translation id="5469143988693423708">O utilizador pode executar o Crostini</translation> <translation id="5469825884154817306">Bloquear imagens nesses sites</translation> <translation id="5475361623548884387">Ativar impressão</translation> <translation id="547601067149622666">Não permitir anúncios em sites com anúncios intrusivos</translation> @@ -1624,6 +1669,9 @@ Tenha em atenção que esta ação não é recomendada, dado que pode permitir ignorar a extensão nameConstraints que restringe os nomes de anfitriões para os quais um determinado certificado pode ser autorizado. Se esta política não estiver definida ou for definida como falsa, os certificados de servidor que não possuam uma extensão subjectAlternativeName com um nome DNS ou um endereço IP não serão fidedignos.</translation> +<translation id="5581292529942108810">Configure as políticas relacionadas com a Chrome Reporting Extension. + + Esta política apenas entra em vigor quando a <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está ativada e a máquina está associada à <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Controlar os serviços de localização da Google para aplicações para Android.</translation> <translation id="5586942249556966598">Não fazer nada</translation> <translation id="5630352020869108293">Restaurar a última sessão</translation> @@ -1859,6 +1907,11 @@ <translation id="6310223829319187614">Ativar o preenchimento automático do nome do domínio durante o início de sessão do utilizador</translation> <translation id="6315673513957120120">O Chrome mostra uma página de aviso quando os utilizadores navegam para sites com erros de SSL. Por predefinição ou quando esta política está definida como verdadeira, os utilizadores estão autorizados a clicar nestas páginas de aviso. Definir esta política como falsa desautoriza os utilizadores a clicar em qualquer página de aviso.</translation> +<translation id="6352543686437322588">Conta local de dispositivo para início de sessão automático após atraso. + + Se esta política estiver definida, é iniciada sessão automaticamente na sessão especificada após um período de tempo no ecrã de início de sessão sem interação do utilizador. A conta local de dispositivo já deve estar configurada (consulte |DeviceLocalAccounts|). + + Se esta política não estiver definida, não será efetuado o início de sessão automático.</translation> <translation id="6353901068939575220">Especifica os parâmetros utilizados ao pesquisar um URL com POST. Consiste em pares de nome/valor separados por vírgulas. Se um valor for o parâmetro de um modelo, como {searchTerms} no exemplo acima, será substituído por dados dos termos de pesquisa reais. Esta política é opcional. Se não for definida, será enviado um pedido de pesquisa através do método GET. @@ -2211,6 +2264,11 @@ Se esta política não for definida, o utilizador pode alterar manualmente esta definição.</translation> <translation id="723103540848640830">Definir o comprimento mínimo do PIN do ecrã de bloqueio</translation> +<translation id="7232816984286843471">Se a política estiver definida como falsa, os utilizadores não afiliados não podem utilizar o Crostini. + + Se a política não estiver definida ou estiver definida como verdadeira, todos os utilizadores podem utilizar o Crostini, desde que as outras definições o permitam. + As três políticas, VirtualMachinesAllowed, CrostiniAllowed e DeviceUnaffiliatedCrostiniAllowed, devem estar definidas como verdadeiras quando solicitam a execução do Crostini. + Quando esta política é alterada para falsa, aplica-se ao arranque de novos contentores do Crostini, mas não encerra contentores que já estejam em execução.</translation> <translation id="7234280155140786597">Nomes dos anfitriões de mensagens nativas proibidos (ou * para todos)</translation> <translation id="7236775576470542603">Definir o tipo predefinido da lupa que está ativada no ecrã de início de sessão. @@ -2258,6 +2316,12 @@ <translation id="7311458740754205918">Se esta política for definida para verdadeira ou não for definida, a página Novo separador pode mostrar sugestões de conteúdo com base no histórico de navegação, nos interesses ou na localização do utilizador. Se for definida para falsa, as sugestões de conteúdo geradas automaticamente não são mostradas na página Novo separador.</translation> +<translation id="7313793931637495417">Esta política controla a comunicação de informações de versão, como a versão do SO, a plataforma do SO, a arquitetura do SO, a versão do <ph name="PRODUCT_NAME" /> e o canal do <ph name="PRODUCT_NAME" />. + + Quando esta política não está definida ou está definida como verdadeira, são recolhidas informações de versão. + Quando esta política está definida como falsa, não são recolhidas informações de versão. + + Esta política apenas entra em vigor quando a <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está ativada e a máquina está associada à <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Parâmetros da linha de comandos adicionais para <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Semelhante a Limpar (valor 2), mas tenta preservar os símbolos de início de sessão para que o utilizador não tenha de iniciar sessão novamente.</translation> <translation id="7329842439428490522">Especifica o período de tempo sem atividade por parte do utilizador após o qual se desliga o ecrã quando o dispositivo está a utilizar a energia da bateria. @@ -2288,6 +2352,12 @@ <translation id="7349338075015720646">Especifica uma lista de Websites que são instalados silenciosamente, sem interação do utilizador, e que não podem ser desinstalados nem desativados pelo utilizador. Cada item de lista da política é um objeto com dois membros: "url" e "launch_container". "url" deve ser o URL da aplicação Web que vai ser instalada e "launch_container" deve ser "window" ("janela") ou "tab" ("separador") para indicar de que forma é que a aplicação Web vai ser aberta depois da instalação. Se "launch_container" for omitido, a aplicação é aberta numa janela se o Chrome a considerar uma progressive web app; caso contrário, é aberta num separador.</translation> +<translation id="735902178936442460">A presente política controla a comunicação de informações que podem ser utilizadas para identificar máquinas, como o nome da máquina e endereços de rede. + + Quando esta política não está definida ou está definida como verdadeira, são recolhidas informações que podem ser utilizadas para identificar máquinas. + Quando esta política está definida para Falso, não são recolhidas informações que podem ser utilizadas para identificar máquinas. + + Esta política apenas entra em vigor quando a <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está ativada e a máquina está associada à <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">O serviço de Navegação segura apresenta uma página de aviso quando os utilizadores navegam para sites sinalizados como potencialmente maliciosos. A ativação desta definição impede que os utilizadores prossigam da página de aviso para o site com conteúdo malicioso. Se esta definição estiver desativada ou não estiver configurada, os utilizadores podem optar por prosseguir para o site sinalizado após a apresentação do aviso. @@ -2533,6 +2603,14 @@ <translation id="7976157349247117979">Nome do destino do <ph name="PRODUCT_NAME" /></translation> <translation id="7980227303582973781">Sem restrições especiais</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Permite-lhe controlar a execução de máquinas virtuais no SO Chrome. + + Se a política estiver definida como verdadeira, o dispositivo pode executar máquinas virtuais. + Se a política estiver definida como falsa, o dispositivo não pode executar máquinas virtuais. + As três políticas, VirtualMachinesAllowed, CrostiniAllowed e DeviceUnaffiliatedCrostiniAllowed, devem estar definidas como verdadeiras quando solicitam a execução do Crostini. + Quando esta política é alterada para falsa, aplica-se ao arranque de novas máquinas virtuais, mas não encerra máquinas virtuais que já estejam em execução. + Quando esta política não está definida num dispositivo gerido, o dispositivo não pode executar máquinas virtuais. + Os dispositivos não geridos podem executar máquinas virtuais.</translation> <translation id="802147957407376460">Rodar o ecrã 0 graus</translation> <translation id="8033913082323846868">Esta política foi descontinuada no M70. Em alternativa, utilize AutofillAddressEnabled e AutofillCreditCardEnabled. @@ -2577,10 +2655,17 @@ Quando esta política não está definida, utiliza-se um período de tempo predefinido. O valor da política deve ser especificado em milissegundos. Os valores devem ser inferiores ou iguais ao atraso de inatividade.</translation> +<translation id="8138009212169037227">Esta política controla a opção de comunicação de dados da política e da hora de obtenção da política. + + Quando esta política não está definida ou está definida como verdadeira, são recolhidos os dados da política e a hora de obtenção da política. + Quando esta política está definida como falsa, não são recolhidos os dados da política nem a hora de obtenção da política. + + Esta política apenas entra em vigor quando a <ph name="CHROME_REPORTING_EXTENSION_NAME" /> está ativada e a máquina está associada à <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Comunicar a lista de interfaces de rede com os respetivos tipos e endereços de hardware ao servidor. Se a política estiver definida como "false", a lista de interfaces não será comunicada.</translation> <translation id="8141795997560411818">Esta política não impede o utilizador de utilizar a aplicação Google Drive para Android. Se pretender evitar o acesso ao Google Drive, deve remover também a autorização para instalar a aplicação Google Drive para Android.</translation> +<translation id="8142894094385450823">Definir os locais recomendados para uma sessão gerida</translation> <translation id="8146727383888924340">Permitir que os utilizadores resgatem ofertas através do Registo no Chrome OS</translation> <translation id="8148785525797916822">Suprime o aviso apresentado quando o <ph name="PRODUCT_NAME" /> está em execução num computador ou num sistema operativo que já não é suportado.</translation> <translation id="8148901634826284024">Ativar a funcionalidade de acessibilidade do modo de alto contraste. @@ -2628,6 +2713,29 @@ Não é necessário configurar estas definições manualmente. Existem modelos de fácil utilização para Windows, Mac e Linux que pode transferir a partir de <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />. A forma recomendada para configurar a política no Windows é através do GPO, embora o aprovisionamento da política através de registo ainda seja suportado para instâncias do Windows que estejam associadas a um domínio do <ph name="MS_AD_NAME" />.</translation> +<translation id="8264653492961233132">Especifica uma lista de aplicações e de extensões que são instaladas silenciosamente, + sem a interação do utilizador e que não podem ser desinstaladas nem + desativadas pelo utilizador. Todas as autorizações solicitadas pelas + aplicações/extensões são fornecidas implicitamente, sem interação do utilizador, + incluindo autorizações adicionais solicitadas por versões futuras da + aplicação/extensão. Além disso, as autorizações são fornecidas às + APIs de extensão enterprise.deviceAttributes e enterprise.platformKeys + (estas duas APIs não estão disponíveis para aplicações/extensões cuja + instalação não é forçada). + + Esta política tem precedência sobre uma política <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> potencialmente conflituosa. Se uma aplicação ou extensão previamente instalada de forma forçada for eliminada desta lista, é automaticamente desinstalada pelo <ph name="PRODUCT_NAME" />. + + Em instâncias do Windows que não fazem parte de um domínio <ph name="MS_AD_NAME" />, a instalação forçada está limitada a aplicações e extensões apresentadas na Web Store do Chrome. + + Tenha em atenção que o código-fonte de qualquer extensão pode ser alterado pelos utilizadores através das Ferramentas para programador (o que pode resultar no funcionamento incorreto da extensão). Se pretender evitar esta situação, defina a política <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Cada item de lista da política é uma string que contém um ID de extensão e, opcionalmente, um URL de "atualização" separado por ponto e vírgula (<ph name="SEMICOLON" />). O ID da extensão é a string de 32 letras encontrada, por exemplo, em <ph name="CHROME_EXTENSIONS_LINK" /> no modo de programador. O URL de "atualização", se especificado, deve apontar para um documento XML de Atualização do manifesto conforme descrito em <ph name="LINK_TO_EXTENSION_DOC1" />. Por predefinição, utiliza-se o URL de atualização da Web Store do Chrome (que, atualmente, é "https://clients2.google.com/service/update2/crx"). Tenha em atenção que o URL de "atualização" definido nesta política apenas é utilizado para a instalação inicial e as atualizações subsequentes da extensão utilizam o URL de atualização indicado no manifesto da extensão. Tenha também em atenção que era obrigatório especificar explicitamente o URL de "atualização" até à versão 67 do <ph name="PRODUCT_NAME" />, inclusive. + + Por exemplo, a <ph name="EXTENSION_POLICY_EXAMPLE" /> instala a aplicação <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> a partir do URL de "atualização" padrão da Web Store do Chrome. Para obter mais informações sobre o alojamento de extensões, consulte: <ph name="LINK_TO_EXTENSION_DOC2" />. + + Se esta política não estiver definida, não é efetuada a instalação automática de aplicações ou de extensões e o utilizador pode desinstalar qualquer aplicação ou extensão no <ph name="PRODUCT_NAME" />. + + Tenha em consideração que esta política não se aplica ao modo de navegação anónima.</translation> <translation id="8274603902181597201">Limpe o diretório principal de ecryptfs do utilizador e comece com um diretório principal novo com encriptação ext4.</translation> <translation id="8285435910062771358">Lupa em ecrã inteiro ativada</translation> <translation id="8288199156259560552">Ativar os serviços de localização da Google para aplicações para Android</translation> @@ -2908,6 +3016,7 @@ Esta política não está disponível em instâncias do Windows que não pertençam a um domínio do <ph name="MS_AD_NAME" />.</translation> <translation id="9035964157729712237">IDs de extensões a excluir da lista negra</translation> <translation id="9042911395677044526">Permite que a configuração de rede seja aplicada por utilizador para um aparelho <ph name="PRODUCT_OS_NAME" />. A configuração de rede é uma cadeia de formato JSON, conforme definido pelo formato de Configuração de Rede Aberta descrito em <ph name="ONC_SPEC_URL" /></translation> +<translation id="9077227880520270584">Temporizador de início de sessão automático na conta local de dispositivo</translation> <translation id="9084985621503260744">Especificar se a atividade do vídeo afeta a gestão da energia</translation> <translation id="9088433379343318874">Ativar o fornecedor de conteúdos do utilizador supervisionado</translation> <translation id="9088444059179765143">Configurar o método de deteção automática do fuso horário</translation>
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb index e1c2527..3bcb920 100644 --- a/components/policy/resources/policy_templates_ro.xtb +++ b/components/policy/resources/policy_templates_ro.xtb
@@ -129,6 +129,7 @@ <translation id="1387596372902085462">Dacă se acordă încredere infrastructurii PKI vechi a Symantec Corporation</translation> <translation id="1393485621820363363">Imprimantele activate asociate dispozitivelor companiei</translation> <translation id="1397855852561539316">Adresă URL de sugerare a furnizorului de căutare prestabilit</translation> +<translation id="142346659686073702">Permite utilizatorilor neafiliați să folosească Crostini</translation> <translation id="1426410128494586442">Da</translation> <translation id="1427655258943162134">Adresa IP sau adresa URL a serverului proxy</translation> <translation id="1435659902881071157">Configurare de rețea la nivel de dispozitiv</translation> @@ -373,6 +374,12 @@ Dacă politica nu este configurată, va fi considerată ca fiind activată. Vezi descrierea de mai sus.</translation> <translation id="2113068765175018713">Limitează durata de funcționare a dispozitivului prin repornirea automată a acestuia</translation> +<translation id="2116790137063002724">Această politică stabilește dacă se raportează informațiile care se pot folosi pentru a identifica utilizatorii, precum datele de conectare la sistemul de operare, datele de conectare la profilul <ph name="PRODUCT_NAME" />, numele profilului <ph name="PRODUCT_NAME" />, calea profilului <ph name="PRODUCT_NAME" /> și calea executabilă <ph name="PRODUCT_NAME" />. + + Când politica nu este setată sau este activată, se colectează informații care se pot folosi pentru a identifica utilizatorii. + Când politica este dezactivată, nu se colectează informații care se pot folosi pentru a identifica utilizatorii. + + Politica se aplică doar când este activată <ph name="CHROME_REPORTING_EXTENSION_NAME" />, iar dispozitivul este înregistrat cu <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="2127599828444728326">Permiteți notificări pentru aceste site-uri</translation> <translation id="2131902621292742709">Interval până la reducerea luminozității ecranului la funcționarea pe baterie</translation> <translation id="2132732175597591362">Controlează lista albă cu șabloane de adrese URL pentru care redarea automată va fi întotdeauna activată. @@ -854,6 +861,22 @@ Dacă această politică nu este setată, valoarea prestabilită la nivel global va fi folosită pentru toate site-urile, fie din politica „DefaultCookiesSetting” dacă este setată, fie din configurația personală a utilizatorului, în caz contrar. Consultă și politicile „CookiesBlockedForUrls” și „CookiesSessionOnlyForUrls”. Reține că nu trebuie să existe șabloane de adrese URL conflictuale între aceste trei politici, deoarece nu se specifică politica pentru care se va acorda prioritate.</translation> +<translation id="3373364525435227558">Setează una sau mai multe limbi recomandate pentru o sesiune gestionată, astfel încât utilizatorii să poată alege cu ușurință una dintre limbile respective. + + Utilizatorul poate să aleagă o limbă și un aspect al tastaturii înainte de a începe o sesiune gestionată. În mod prestabilit, toate limbile compatibile cu <ph name="PRODUCT_OS_NAME" /> sunt afișate în ordine alfabetică. Poți să folosești această politică pentru a muta un set de limbi recomandate în capul listei. + + Dacă politica nu este setată, limba actuală a interfeței de utilizare va fi preselectată. + + Dacă politica este setată, limbile recomandate vor fi mutate în partea de sus a listei și vor fi separate vizual de restul limbilor. Limbile recomandate se vor afișa în ordinea în care apar în politică. Prima limbă recomandată va fi preselectată. + + Dacă există mai multe limbi recomandate, se presupune că utilizatorii vor dori să selecteze dintre limbile respective. Opțiunea de selectare a limbii și a aspectului tastaturii va fi afișată foarte vizibil la începerea unei sesiuni gestionate. În caz contrar, se va presupune că majoritatea utilizatorilor doresc să folosească limba preselectată. Opțiunea de selectare a limbii și a aspectului tastaturii va fi afișată mai puțin vizibil la începerea unei sesiuni gestionate. + + Când această politică este setată, iar conectarea automată este activată (consultă politicile |DeviceLocalAccountAutoLoginId| și |DeviceLocalAccountAutoLoginDelay|), sesiunea gestionată inițiată automat va folosi prima limbă recomandată și cel mai popular aspect al tastaturii pentru limba respectivă. + + Aspectul preselectat al tastaturii va fi întotdeauna aspectul cel mai popular pentru limba respectivă. + + Această politică poate fi setată numai ca recomandare. O poți folosi pentru a muta un set de limbi recomandate în capul listei, însă utilizatorii vor avea întotdeauna posibilitatea să aleagă pentru sesiunea lor orice limbă compatibilă cu <ph name="PRODUCT_OS_NAME" />. + </translation> <translation id="3381968327636295719">Utilizează în mod prestabilit browserul gazdă</translation> <translation id="3414260318408232239">Dacă politica nu este configurată, <ph name="PRODUCT_NAME" /> folosește versiunea minimă prestabilită, care este TLS 1.0. @@ -1090,6 +1113,11 @@ Dacă politica este activată sau nu este configurată, utilizatorii pot valorifica oferte prin înregistrarea sistemului de operare Chrome. Dacă politica nu este activată, utilizatorii nu vor putea valorifica oferte.</translation> +<translation id="4008507541867797979">Dacă această politică este activată sau nu este configurată, <ph name="PRODUCT_OS_NAME" /> va afișa utilizatorii existenți pe ecranul de conectare și va permite alegerea unuia. + + Dacă politica este dezactivată, <ph name="PRODUCT_OS_NAME" /> nu va afișa utilizatorii existenți pe ecranul de conectare. Se va afișa ecranul de conectare normal (care solicită adresa de e-mail și parola sau numărul de telefon al utilizatorului) sau ecranul interstițial SAML (dacă este activat prin politica <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" />), cu excepția cazului în care s-a configurat o sesiune gestionată, caz în care se vor afișa numai conturile pentru sesiuni gestionate și se va permite alegerea unuia. + + Reține că această politică nu afectează păstrarea sau eliminarea de pe dispozitiv a datelor locale ale utilizatorului.</translation> <translation id="4010738624545340900">Permiteți invocarea casetelor de dialog pentru selectarea fișierelor</translation> <translation id="4012737788880122133">Când politica este activată, se dezactivează actualizările automate. @@ -1484,6 +1512,15 @@ Dacă politica este activată sau nu este specificată, ciclurile de viață ale filelor sunt activate.</translation> <translation id="5208240613060747912">Vă permite să setați o listă de modele pentru adresele URL ce specifică site-urile care nu au permisiunea să afișeze notificări. Dacă această politică nu este setată, valoarea prestabilită la nivel global va fi folosită pentru toate site-urile, fie din politica „DefaultNotificationsSetting”, în cazul în care aceasta este setată, fie din configurația personală a utilizatorului, în caz contrar.</translation> <translation id="5219844027738217407">În cazul aplicațiilor Android, această politică afectează numai microfonul. Când politica este activată, microfonul este dezactivat pentru toate aplicațiile Android, fără excepții.</translation> +<translation id="5228316810085661003">Întârzierea până la conectarea automată la contul local de pe dispozitiv. + + Dacă politica |DeviceLocalAccountAutoLoginId| nu este setată, această politică nu are niciun efect. În caz contrar: + + Dacă această politică este setată, aceasta stabilește intervalul de inactivitate al utilizatorului care trebuie să treacă înainte de conectarea automată la contul local de pe dispozitiv indicat de politica |DeviceLocalAccountAutoLoginId|. + + Dacă politica nu este setată, timpul limită va fi de 0 milisecunde. + + Această politică este specificată în milisecunde.</translation> <translation id="523505283826916779">Setări de accesibilitate</translation> <translation id="5247006254130721952">Blochează descărcările periculoase</translation> <translation id="5248863213023520115">Setează tipurile de criptare permise la solicitarea tichetelor Kerberos de la un server <ph name="MS_AD_NAME" />. @@ -1504,6 +1541,12 @@ <translation id="5272684451155669299">Dacă este activată, utilizatorul poate folosi hardware-ul de pe dispozitivele Chrome pentru a-și atesta la distanță identitatea către autoritatea de certificare pentru confidențialitate prin <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> folosind <ph name="CHALLENGE_USER_KEY_FUNCTION" />. Dacă este dezactivată sau dacă nu este configurată, apelurile către API nu vor reuși și vor genera un cod de eroare.</translation> +<translation id="5277806246014825877">Permite acestui utilizator să ruleze Crostini. + + Dacă politica este dezactivată, Crostini nu este activat pentru acest utilizator. + Dacă este activată sau nu este setată, Crostini este activat pentru utilizator atât timp cât și celelalte setări permit acest lucru. + Toate cele trei politici, VirtualMachinesAllowed, CrostiniAllowed și DeviceUnaffiliatedCrostiniAllowed, trebuie să fie activate atunci când se aplică pentru a permite rularea Crostini. + Atunci când se dezactivează politica, se aplică noilor containere Crostini care pornesc, dar nu le închide pe cele care rulează deja.</translation> <translation id="5283457834853986457">Dezactivează instrumentul de găsire de pluginuri (învechit)</translation> <translation id="5288772341821359899">Dacă politica este configurată, intervalul de porturi UDP folosit de WebRTC este limitat la intervalul de porturi specificat (porturile limită ale intervalului sunt incluse). @@ -1540,6 +1583,7 @@ <translation id="5370279767682621504">Activează compatibilitatea cu HTTP/0.9 pentru porturile care nu sunt prestabilite</translation> <translation id="5378985487213287085">Vă permite să setați dacă site-urile web au permisiunea de a afișa notificări pe desktop. Afișarea notificărilor pe desktop poate fi permisă în mod prestabilit, refuzată în mod prestabilit sau utilizatorul poate fi întrebat de fiecare dată când un site web vrea să afișeze notificări pe desktop. Dacă această politică nu este setată, va fi utilizată politica „AskNotifications”, iar utilizatorul va putea să o schimbe.</translation> <translation id="538108065117008131">Permite <ph name="PRODUCT_FRAME_NAME" /> să gestioneze următoarele tipuri de conținut.</translation> +<translation id="5391388690191341203">Contul local de pe dispozitiv pentru conectarea automată</translation> <translation id="5392172595902933844">Informațiile despre starea Android sunt trimise la server. @@ -1564,6 +1608,7 @@ <translation id="5457924070961220141">Vă permite să configurați motorul de redare HTML prestabilit atunci când <ph name="PRODUCT_FRAME_NAME" /> este instalat. Setarea prestabilită este să permiteți browserului gazdă să efectueze redarea, dar opțional o puteți anula, pentru ca <ph name="PRODUCT_FRAME_NAME" /> să redea paginile HTML în mod prestabilit.</translation> <translation id="5464816904705580310">Configurați setările pentru utilizatorii gestionați.</translation> <translation id="546726650689747237">Interval până la reducerea luminozității ecranului la funcționarea pe c.a.</translation> +<translation id="5469143988693423708">Utilizatorul are permisiunea de a rula Crostini</translation> <translation id="5469825884154817306">Blochează imagini de pe aceste site-uri</translation> <translation id="5475361623548884387">Activează printarea</translation> <translation id="547601067149622666">Nu permite anunțurile pe site-urile cu anunțuri deranjante</translation> @@ -1615,6 +1660,9 @@ Reține că acest lucru nu este recomandat, deoarece astfel se poate permite evitarea extensiei nameConstraints care limitează numele de gazdă pentru care poate fi autorizat un anumit certificat. Dacă politica nu este configurată sau dacă este dezactivată, certificatele de server din care lipsește extensia subjectAlternativeName cu un nume DNS sau o adresă IP nu vor fi considerate de încredere.</translation> +<translation id="5581292529942108810">Configurează politicile privind Chrome Reporting Extension. + + Această politică se aplică doar când este activată <ph name="CHROME_REPORTING_EXTENSION_NAME" />, iar dispozitivul este înregistrat cu <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="5584132346604748282">Gestionează serviciile de localizare Google Android</translation> <translation id="5586942249556966598">Nicio acțiune</translation> <translation id="5630352020869108293">Restabiliți ultima sesiune</translation> @@ -1850,6 +1898,11 @@ <translation id="6310223829319187614">Activează completarea automată a numelui de domeniu la conectarea utilizatorului</translation> <translation id="6315673513957120120">Chrome afișează o pagină de avertisment atunci când utilizatorii accesează site-uri care au erori SSL. În mod prestabilit sau atunci când această politică este activată, utilizatorii au permisiunea să-și continue navigarea dând clic pe aceste pagini de avertisment. Dacă această politică este dezactivată, utilizatorii nu mai au permisiunea să-și continue navigarea dând clic pe aceste pagini de avertisment.</translation> +<translation id="6352543686437322588">Contul local de pe dispozitiv pentru conectare automată după o întârziere. + + Dacă această politică este setată, sesiunea indicată se va conecta automat după o anumită perioadă de timp care s-a scurs după afișarea ecranului de conectare fără ca utilizatorul să interacționeze cu acesta. Contul local de pe dispozitiv trebuie să fie deja configurat (consultă |DeviceLocalAccounts|). + + Dacă politica nu este setată, nu va avea loc conectarea automată.</translation> <translation id="6353901068939575220">Specifică parametrii utilizați la căutarea unei adrese URL cu POST. Politica este alcătuită din perechi nume/valoare separate prin virgulă. Dacă o valoare este un parametru șablon, precum {searchTerms} din exemplul de mai sus, acesta va fi înlocuit cu datele termenilor de căutare reali. Această politică este opțională. Dacă nu este setată, solicitarea de căutare va fi trimisă prin metoda GET. @@ -2201,6 +2254,11 @@ Dacă politica nu este setată, utilizatorul va putea modifica această setare manual.</translation> <translation id="723103540848640830">Stabilește lungimea minimă a codului PIN pentru ecranul de blocare</translation> +<translation id="7232816984286843471">Dacă politica este dezactivată, utilizatorii neafiliați nu vor avea permisiunea de a folosi Crostini. + + Dacă politica este activată sau nu este setată, toți utilizatorii au permisiunea de a folosi Crostini atât timp cât și celelalte setări permit acest lucru. + Toate cele trei politici, VirtualMachinesAllowed, CrostiniAllowed și DeviceUnaffiliatedCrostiniAllowed, trebuie să fie activate atunci când se aplică pentru a permite rularea Crostini. + Atunci când se dezactivează politica, se aplică noilor containere Crostini care pornesc, dar nu le închide pe cele care rulează deja.</translation> <translation id="7234280155140786597">Numele gazdelor de mesagerie nativă interzise (sau * pentru toate)</translation> <translation id="7236775576470542603">Setați tipul prestabilit al lupei pentru ecran activate pe ecranul de conectare. @@ -2247,6 +2305,12 @@ <translation id="7311458740754205918">Dacă politica este activată sau nu este configurată, este posibil ca pagina Filă nouă să afișeze sugestii privind conținutul pe baza istoricului de navigare, a intereselor și a locației utilizatorului. Dacă politica este dezactivată, sugestiile generate automat privind conținutul nu sunt afișate pe pagina Filă nouă.</translation> +<translation id="7313793931637495417">Această politică stabilește dacă se raportează informațiile privind versiunea, precum versiunea, platforma și arhitectura sistemului de operare, versiunea <ph name="PRODUCT_NAME" /> și canalul <ph name="PRODUCT_NAME" />. + + Când politica nu este setată sau este activată, se colectează informații privind versiunea. + Când politica este dezactivată, nu se colectează informații privind versiunea. + + Politica se aplică doar când este activată <ph name="CHROME_REPORTING_EXTENSION_NAME" />, iar dispozitivul este înregistrat cu <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7323896582714668701">Parametri de linie de comandă suplimentari pentru <ph name="PRODUCT_NAME" /></translation> <translation id="7326394567531622570">Similar cu Golirea (valoarea 2), însă încearcă să păstreze indicativele de conectare, astfel încât utilizatorul să nu trebuiască să se conecteze din nou.</translation> <translation id="7329842439428490522">Indică intervalul de timp fără intervenția utilizatorului după care ecranul este oprit atunci când dispozitivul funcționează pe baterie. @@ -2277,6 +2341,12 @@ <translation id="7349338075015720646">Specifică o listă cu site-uri care sunt instalate silențios, fără intervenția utilizatorului și care nu pot fi dezinstalate sau dezactivate de utilizator. Fiecare element din lista politicii este un obiect cu două componente: „url” și „launch_container”. „url” trebuie să fie adresa URL a aplicației web de instalat, iar „launch_container” trebuie să fie „window” sau „tab” pentru a indica modul în care va fi deschisă aplicația web după instalare. Dacă se omite „launch_container”, aplicația se va lansa într-o fereastră dacă Chrome o consideră a fi o aplicație web progresivă și într-o filă în caz contrar.</translation> +<translation id="735902178936442460">Această politică stabilește dacă se raportează informațiile care se pot folosi pentru a identifica dispozitivele, cum ar fi numele și adresele de rețea ale acestora. + + Când politica nu este setată sau este activată, se colectează informații care se pot folosi pentru a identifica dispozitivele. + Când politica este dezactivată, nu se colectează informații care se pot folosi pentru a identifica dispozitivele. + + Politica se aplică doar când este activată <ph name="CHROME_REPORTING_EXTENSION_NAME" />, iar dispozitivul este înregistrat cu <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="7367028210010532881">Serviciul Navigare sigură afișează o pagină de avertisment când utilizatorii navighează pe site-uri semnalate ca fiind potențial dăunătoare. Dacă activezi această setare, utilizatorii nu vor putea să navigheze mai departe de pe pagina de avertisment pe site-ul dăunător. Dacă setarea este dezactivată sau nu este configurată, utilizatorii pot alege să acceseze site-ul semnalat după ce li se afișează avertismentul. @@ -2519,6 +2589,14 @@ <translation id="7976157349247117979">Numele destinației pentru <ph name="PRODUCT_NAME" /></translation> <translation id="7980227303582973781">Fără restricții speciale</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">Îți permite să stabilești dacă mașinile virtuale au permisiunea de a rula pe sistemul de operare Chrome. + + Dacă politica este activată, dispozitivul poate rula mașini virtuale. + Dacă politica este dezactivată, dispozitivul nu va avea permisiunea de a rula mașini virtuale. + Toate cele trei politici, VirtualMachinesAllowed, CrostiniAllowed și DeviceUnaffiliatedCrostiniAllowed, trebuie să fie activate atunci când se aplică pentru a permite rularea Crostini. + Atunci când se dezactivează politica, ea se aplică mașinilor virtuale noi care pornesc, dar nu le închide pe cele care rulează deja. + Atunci când politica nu este setată pe un dispozitiv gestionat, acesta nu are permisiunea de a rula mașini virtuale. + Dispozitivele care nu sunt gestionate au permisiunea de a rula mașini virtuale.</translation> <translation id="802147957407376460">Rotește ecranul la 0 grade</translation> <translation id="8033913082323846868">În M70 s-a renunțat la dezvoltarea acestei politici; folosește AutofillAddressEnabled și AutofillCreditCardEnabled. @@ -2563,10 +2641,17 @@ Dacă politica nu este setată, se utilizează o perioadă de timp prestabilită. Valoarea politicii trebuie specificată în milisecunde. Valorile trebuie să fie mai mici sau egale cu intervalul de inactivitate.</translation> +<translation id="8138009212169037227">Această politică stabilește dacă se raportează date privind politica și ora la care s-a preluat aceasta. + + Când politica nu este setată sau este activată, se colectează date privind politica și ora la care s-a preluat aceasta. + Când politica este dezactivată, nu se colectează date privind politica și ora la care s-a preluat aceasta. + + Politica se aplică doar când este activată <ph name="CHROME_REPORTING_EXTENSION_NAME" />, iar dispozitivul este înregistrat cu <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />.</translation> <translation id="8140204717286305802">Raportează către server lista cu interfețe de rețea, care cuprinde tipurile acestora și adresele hardware. Dacă politica este dezactivată, lista cu interfețe nu va fi raportată.</translation> <translation id="8141795997560411818">Această politică nu împiedică utilizatorul să folosească aplicația Android Google Drive. Dacă vrei să împiedici accesul la Google Drive, îți recomandăm să nu permiți instalarea aplicației Android Google Drive.</translation> +<translation id="8142894094385450823">Setează limbile recomandate pentru o sesiune gestionată</translation> <translation id="8146727383888924340">Permiteți utilizatorilor să valorifice oferte prin înregistrarea sistemului de operare Chrome</translation> <translation id="8148785525797916822">Elimină avertismentul care apare când <ph name="PRODUCT_NAME" /> rulează pe un computer sau pe un sistem de operare care nu mai este acceptat.</translation> <translation id="8148901634826284024">Activați funcția de accesibilitate pentru modul de contrast ridicat. @@ -2614,6 +2699,21 @@ Nu e nevoie ca aceste setări să fie configurate manual! Poți să descarci șabloane ușor de folosit pentru Windows, Mac și Linux de la <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" />. Este recomandat să configurezi politica în Windows prin GPO, cu toate că gestionarea politicii prin registry este încă acceptată pentru instanțele Windows care sunt asociate unui domeniu <ph name="MS_AD_NAME" />.</translation> +<translation id="8264653492961233132">Specifică o listă de aplicații și extensii instalate în fundal, fără intervenția utilizatorului și care nu pot fi dezinstalate sau dezactivate de acesta. Toate permisiunile solicitate de aplicații/extensii sunt acordate în mod prestabilit, fără intervenția utilizatorului, inclusiv orice permisiune suplimentară solicitată de viitoarele versiuni ale aplicației/extensiei. În plus, permisiunile sunt acordate pentru API-urile extensiei enterprise.deviceAttributes și enterprise.platformKeys. (Aceste două API-uri nu sunt disponibile pentru aplicațiile/extensiile care nu sunt instalate forțat.) + + Această politică are prioritate față de o politică <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> care poate crea conflicte. Dacă o aplicație sau o extensie care a fost instalată forțat anterior este eliminată din listă, aceasta este dezinstalată automat de <ph name="PRODUCT_NAME" />. + + Pentru instanțele Windows neasociate unui domeniu <ph name="MS_AD_NAME" />, instalarea forțată se limitează la aplicațiile și extensiile afișate în Magazinul web Chrome. + + Reține că utilizatorii pot să modifice codul sursă al oricărei extensii cu ajutorul Instrumentelor pentru dezvoltatori (ceea ce poate face extensia nefuncțională). Dacă acest aspect creează probleme, trebuie să se seteze politica <ph name="DEVELOPER_TOOLS_POLICY_NAME" />. + + Fiecare element din lista politicii este un șir care include un ID al extensiei și, opțional, o adresă URL de „actualizare”, separate prin punct și virgulă (<ph name="SEMICOLON" />). ID-ul de extensie este un șir alcătuit din 32 de litere găsit, de exemplu, la <ph name="CHROME_EXTENSIONS_LINK" /> în modul pentru dezvoltatori. Adresa URL de „actualizare”, dacă este specificată, trebuie să trimită la un document XML cu manifestul de actualizare, conform descrierii de la <ph name="LINK_TO_EXTENSION_DOC1" />. În mod prestabilit, se folosește adresa URL de actualizare a Magazinului web Chrome (care acum este „https://clients2.google.com/service/update2/crx”). Reține că adresa URL de „actualizare” setată în această politică este folosită numai la instalarea inițială. Actualizările ulterioare ale extensiei vor folosi adresa URL de actualizare indicată în manifestul extensiei. Reține și că specificarea explicită a adresei URL de „actualizare” era obligatorie în versiunile <ph name="PRODUCT_NAME" /> de până la 67, inclusiv. + + De exemplu, <ph name="EXTENSION_POLICY_EXAMPLE" /> instalează aplicația <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> de la adresa URL standard de „actualizare” din Magazinul web Chrome. Pentru mai multe informații despre găzduirea extensiilor, accesează <ph name="LINK_TO_EXTENSION_DOC2" />. + + Dacă politica nu este setată, nicio aplicație sau extensie nu va fi instalată automat, iar utilizatorul poate dezinstala orice aplicație sau extensie din <ph name="PRODUCT_NAME" />. + + Reține că politica nu se aplică modului incognito.</translation> <translation id="8274603902181597201">Șterge directorul principal ecryptfs al utilizatorului și începe cu un nou director principal ext4-encrypted.</translation> <translation id="8285435910062771358">Lupă ecran complet activată</translation> <translation id="8288199156259560552">Activează Serviciul de localizare Google pentru Android</translation> @@ -2879,6 +2979,7 @@ Această politică nu este disponibilă în instanțele Windows care nu sunt asociate unui domeniu <ph name="MS_AD_NAME" />.</translation> <translation id="9035964157729712237">ID-urile extensiilor excluse din lista neagră</translation> <translation id="9042911395677044526">Această politică permite trimiterea configurației rețelei pentru a fi aplicată pentru fiecare utilizator pe un dispozitiv cu <ph name="PRODUCT_OS_NAME" />. Configurația rețelei este un șir în formatul JSON, conform definirii acestuia de către formatul Open Network Configuration descris la <ph name="ONC_SPEC_URL" /></translation> +<translation id="9077227880520270584">Temporizatorul pentru conectarea automată la contul local de pe dispozitiv</translation> <translation id="9084985621503260744">Specificați dacă activitatea video afectează gestionarea consumului de energie</translation> <translation id="9088433379343318874">Activează furnizorul de conținut pentru utilizatori monitorizați</translation> <translation id="9088444059179765143">Configurează metoda de detectare automată a fusului orar</translation>
diff --git a/components/policy/resources/policy_templates_te.xtb b/components/policy/resources/policy_templates_te.xtb index 442b35a..e135eab 100644 --- a/components/policy/resources/policy_templates_te.xtb +++ b/components/policy/resources/policy_templates_te.xtb
@@ -157,6 +157,7 @@ <translation id="1387596372902085462">Symantec Corporation యొక్క Legacy PKI Infrastructureలో విశ్వసనీయతను ప్రారంభించాలో లేదో సూచిక</translation> <translation id="1393485621820363363">ఎంటర్ప్రైజ్ పరికరం ప్రింటర్లు ప్రారంభించబడ్డాయి</translation> <translation id="1397855852561539316">డిఫాల్ట్ శోధన అందింపుదారు URLని సిఫార్సు చేసింది</translation> +<translation id="142346659686073702">Crostiniని ఉపయోగించడానికి అనుబంధంగా లేని వినియోగదారులను అనుమతించండి</translation> <translation id="1426410128494586442">అవును</translation> <translation id="1427655258943162134">ప్రాక్సీ సర్వర్ యొక్క చిరునామా లేదా URL</translation> <translation id="1432194160771348078"> @@ -436,6 +437,12 @@ ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, దాన్ని ప్రారంభించి ఉండటంతో సమానం, ఎగువ వివరణను చూడండి.</translation> <translation id="2113068765175018713">స్వయంచాలకంగా రీబూట్ చేయడం ద్వారా పరికరం యొక్క గరిష్ట సమయాన్ని పరిమితం చేయండి</translation> +<translation id="2116790137063002724">వినియోగదారులను గుర్తించడానికి ఉపయోగించగల OS లాగిన్, <ph name="PRODUCT_NAME" /> ప్రొఫైల్ లాగిన్, <ph name="PRODUCT_NAME" /> ప్రొఫైల్ పేరు, <ph name="PRODUCT_NAME" /> ప్రొఫైల్ పాత్ మరియు <ph name="PRODUCT_NAME" /> అమలు చేయగలిగే పాత్ లాంటి సమాచారాన్ని నివేదించాలో లేదో ఈ విధానం నియంత్రిస్తుంది. + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలివేస్తే లేదా ఒప్పుకు సెట్ చేస్తే, వినియోగదారులను గుర్తించడానికి ఉపయోగించగల సమాచారం సేకరించబడుతుంది. + ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, వినియోగదారులను గుర్తించడానికి ఉపయోగించగల సమాచారం సేకరించబడదు. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ప్రారంభించబడినప్పుడు మాత్రమే ఈ విధానం ప్రభావంలో ఉంటుంది, అలాగే మెషీన్ <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />తో నమోదు చేయబడుతుంది.</translation> <translation id="2127599828444728326">ఈ సైట్లలో ప్రకటనలను అనుమతించు</translation> <translation id="2131902621292742709">బ్యాటరీ శక్తితో అమలవుతున్నప్పుడు స్క్రీన్ మసక ఆలస్యం</translation> <translation id="2132732175597591362">స్వీయ ప్లే ఎల్లప్పుడూ ప్రారంభించబడే URL నమూనాల వైట్లిస్ట్ని నియంత్రిస్తుంది. @@ -804,7 +811,7 @@ <translation id="2873651257716068683">డిఫాల్ట్ ముద్రణ పేజీ పరిమాణాన్ని భర్తీ చేస్తుంది. పేజీ పరిమాణం అందుబాటులో లేకపోతే ఈ విధానం విస్మరించబడుతుంది.</translation> <translation id="2874209944580848064">Android అనువర్తనాలకు మద్దతు ఇచ్చే <ph name="PRODUCT_OS_NAME" /> పరికరాల కోసం గమనిక:</translation> <translation id="2877225735001246144">Kerberos అధికారాన్ని చర్చించినపుడు CNAME లుక్అప్ని ఆపివేయి</translation> -<translation id="2892414556511568464">డూప్లెక్స్ మోడ్ను ముద్రించడాన్ని నియంత్రిస్తుంది. సెట్ చేయని విధానం మరియు ఖాళీ సెట్కు పరిమితి విధించబడదు.</translation> +<translation id="2892414556511568464">ముద్రణ డూప్లెక్స్ మోడ్ను నియంత్రిస్తుంది. సెట్ చేయని విధానం మరియు ఖాళీ సెట్లు పరిమితి లేనివిగా పరిగణించబడతాయి.</translation> <translation id="2893546967669465276">నిర్వహణ సర్వర్కు సిస్టమ్ లాగ్లను పంపుతుంది</translation> <translation id="2899002520262095963">Android అనువర్తనాలు ఈ విధానం ద్వారా సెట్ చేయబడిన నెట్వర్క్ కాన్ఫిగరేషన్లు మరియు CA ప్రమాణపత్రాలను ఉపయోగించవచ్చు, కానీ కొన్ని కాన్ఫిగరేషన్ ఎంపికలకు ప్రాప్యత కలిగి ఉండవు.</translation> <translation id="290002216614278247">క్లయింట్ సమయం లేదా రోజులోని వినియోగ కోటా ఆధారంగా వినియోగదారు సెషన్ని లాక్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. @@ -975,6 +982,22 @@ ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే 'DefaultCookiesSetting' విధానం సెట్ చేయబడి ఉంటే దాని నుండి లేదంటే వినియోగదారు యొక్క వ్యక్తిగత కాన్ఫిగరేషన్ నుండి గ్లోబల్ డిఫాల్ట్ విలువ అన్ని సైట్ల కోసం ఉపయోగించబడుతుంది. అలాగే 'CookiesBlockedForUrls' మరియు 'CookiesSessionOnlyForUrls' విధానాలను కూడా చూడండి. ఈ మూడు విధానాల మధ్య ఎటువంటి వైరుధ్య URL నమూనాలు తప్పనిసరిగా ఉండకూడదని గమనించండి - ఏ విధానానికి ప్రాధాన్యత ఉంటుందో పేర్కొనలేము.</translation> +<translation id="3373364525435227558">నిర్వహిత సెషన్ కోసం ఒకటి లేదా అంతకంటే ఎక్కువ సిఫార్సు చేయబడిన లొకేల్లను సెట్ చేస్తుంది, వినియోగదారులు సులభంగా ఈ లొకేల్లలో ఒకదాన్ని ఎంచుకునేలా అనుమతి పొందుతారు. + + వినియోగదారు నిర్వహిత సెషన్ను ప్రారంభించే ముందు లొకేల్ మరియు కీబోర్డ్ లేఅవుట్ను ఎంచుకోవచ్చు. డిఫాల్ట్గా, <ph name="PRODUCT_OS_NAME" /> మద్దతు ఉన్న అన్ని లొకేల్లు అక్షరక్రమం ప్రకారం జాబితా చేయబడి ఉంటాయి. మీరు సిఫార్సు చేయబడిన కొన్ని లొకేల్లను జాబితా పైభాగానికి తరలించేందుకు ఈ విధానాన్ని ఉపయోగించవచ్చు. + + ఈ విధానాన్ని సెట్ చేయకపోతే, ప్రస్తుత UI లొకేల్ ముందస్తుగా ఎంచుకోబడుతుంది. + + ఈ విధానాన్ని సెట్ చేస్తే, సిఫార్సు చేయబడిన లొకేల్లు జాబితా పైభాగానికి తరలించబడతాయి, అలాగే మిగతా అన్ని లొకేల్ల నుండి దృశ్యమానంగా వేరు చేయబడతాయి. సిఫార్సు చేయబడిన లొకేల్లు విధానంలో కనిపించే క్రమంలో జాబితా చేయబడతాయి. ముందుగా సిఫార్సు చేయబడిన లొకేల్ ముందస్తుగా ఎంపిక చేయబడుతుంది. + + ఒకటి కంటే ఎక్కువ సిఫార్సు చేయబడిన లొకేల్లు ఉన్నట్లయితే, వినియోగదారులు ఈ లొకేల్లలో ఎంపిక చేసుకోవాలనుకుంటున్నట్లు భావించడం జరుగుతుంది. నిర్వహిత సెషన్ను ప్రారంభిస్తున్నప్పుడు లొకేల్ మరియు కీబోర్డ్ లేఅవుట్ ఎంపిక ముఖ్యంగా అందించబడతాయి. లేదంటే, చాలా మంది వినియోగదారులు ముందస్తుగా ఎంచుకోబడిన లొకేల్ను ఉపయోగించాలనుకుంటున్నట్లు భావించడం జరుగుతుంది. నిర్వహిత సెషన్ను ప్రారంభిస్తున్నప్పుడు లొకేల్ మరియు కీబోర్డ్ లేఅవుట్ ఎంపిక తక్కువ ప్రాముఖ్యంగా అందించబడతాయి. + + ఈ విధానాన్ని సెట్ చేసి, ఆటోమేటిక్ లాగిన్ ప్రారంభించినప్పుడు (|DeviceLocalAccountAutoLoginId| మరియు |DeviceLocalAccountAutoLoginDelay| విధానాలను చూడండి), ఆటోమేటిక్గా ప్రారంభించిన నిర్వహిత సెషన్ మొదటగా సిఫార్సు చేసిన లొకేల్ను, అలాగే ఈ లొకేల్కు సరిపోలే అత్యంత ప్రసిద్ధ కీబోర్డ్ లేఅవుట్ను వినియోగిస్తుంది. + + ముందస్తుగా ఎంచుకున్న కీబోర్డ్ లేఅవుట్ ఎల్లప్పుడూ ముందస్తుగా ఎంచుకున్న లొకేల్కు సరిపోలే అత్యంత ప్రసిద్ధ కీబోర్డ్ లేఅవుట్ అయ్యి ఉంటుంది. + + ఈ విధానం సిఫార్సు చేసినదిగా మాత్రమే సెట్ చేయబడుతుంది. మీరు సిఫార్సు చేసిన కొన్ని లొకేల్లను పైభాగానికి తరలించేందుకు ఈ విధానాన్ని ఉపయోగించవచ్చు, కానీ వినియోగదారులు వారి సెషన్ కోసం <ph name="PRODUCT_OS_NAME" /> మద్దతు ఉన్న ఏ లొకేల్ను అయినా ఎంచుకోవడానికి అనుమతించబడతారు. + </translation> <translation id="3381968327636295719">హోస్ట్ బ్రౌజర్ని డిఫాల్ట్గా ఉపయోగించు</translation> <translation id="3414260318408232239">ఈ విధానాన్ని సెట్ చేయకుంటే, <ph name="PRODUCT_NAME" /> డిఫాల్ట్ కనీస వెర్షన్ అయిన TLS 1.0ని ఉపయోగిస్తుంది. @@ -1251,6 +1274,11 @@ ఈ విధానాన్ని ఒప్పుకి సెట్ చేస్తే లేదా సెట్ చేయకుండా వదిలేస్తే, వినియోగదారులు Chrome OS నమోదు ద్వారా ఆఫర్లను రీడీమ్ చేయగలరు. ఈ విధానాన్ని తప్పుకి సెట్ చేస్తే, వినియోగదారు ఆఫర్లను రీడీమ్ చేయలేరు.</translation> +<translation id="4008507541867797979">ఈ విధానాన్ని ఒప్పుకు సెట్ చేస్తే లేదా కాన్ఫిగర్ చేయకుంటే, <ph name="PRODUCT_OS_NAME" /> ఇప్పటికే ఉన్న వినియోగదారులను లాగిన్ స్క్రీన్పై చూపుతుంది, వాటిని ఒకదానిని ఎంచుకోవచ్చు. + + ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, <ph name="PRODUCT_OS_NAME" /> ఇప్పటికే ఉన్న వినియోగదారులను లాగిన్ స్క్రీన్పై చూపదు. సాధారణ సైన్-ఇన్ స్క్రీన్ (వినియోగదారు ఇమెయిల్ మరియు పాస్వర్డ్ లేదా ఫోన్ కోసం ప్రాంప్ట్ చేయడం) లేదా SAML మధ్యవచ్చే స్క్రీన్ (<ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> విధానం ద్వారా ప్రారంభించి ఉంటే) చూపబడుతుంది, నిర్వహిత సెషన్ కాన్ఫిగర్ చేసినప్పుడు మాత్రం ఇది వర్తించదు. నిర్వహిత సెషన్ని కాన్ఫిగర్ చేసినప్పుడు, కేవలం నిర్వహిత సెషన్ ఖాతాలు మాత్రమే చూపబడతాయి, వాటిలో నచ్చిన దానిని మీరు ఎంచుకోవచ్చు. + + స్థానిక వినియోగదారు డేటాను పరికరంలో అలాగే ఉంచినా లేదా తొలగించినా ఈ విధానం ప్రభావితం కాదని గుర్తుంచుకోండి.</translation> <translation id="4010738624545340900">ఫైల్ ఎంపిక డైలాగ్ల ఆహ్వానాన్ని అనుమతించండి</translation> <translation id="4012737788880122133">ఒప్పుకు సెట్ చేసినప్పుడు స్వయంచాలక నవీకరణలను నిలిపివేస్తుంది. @@ -1731,6 +1759,15 @@ ఒకవేళ ఈ విధానాన్ని ఒప్పుకి సెట్ చేసినా లేదా ఫలానా అని పేర్కొనకపోయినా ట్యాబ్ లైఫ్సైకిల్ల ఫీచర్ ప్రారంభించబడుతుంది.</translation> <translation id="5208240613060747912">ప్రకటనలను ప్రదర్శించడానికి అనుమతించబడని సైట్లను పేర్కొనే url నమూనాల జాబితాను సెట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ విధానం సెట్ చేయకుండా వదిలి పెట్టినది అయితే అన్ని సైట్లకు సార్వజనీన డిఫాల్ట్ విలువ ఇది సెట్ చేయబడి ఉంటే 'DefaultNotificationsSetting' విధానం నుండి లేదా చేయబడకపోతే వినియోగదారు వ్యక్తిగత కాన్ఫిగరేషన్ నుండి ఉపయోగించబడుతుంది.</translation> <translation id="5219844027738217407">Android అనువర్తనాల కోసం, ఈ విధానం మైక్రోఫోన్పై మాత్రమే ప్రభావం చూపుతుంది. ఈ విధానాన్ని ఒప్పుకి సెట్ చేసినప్పుడు, మినహాయింపులు లేకుండా అన్ని Android అనువర్తనాల కోసం మైక్రోఫోన్ మ్యూట్ చేయబడుతుంది.</translation> +<translation id="5228316810085661003">పరికర-,స్థానిక ఖాతా ఆటో-లాగిన్ జాప్యం. + + |DeviceLocalAccountAutoLoginId| విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, ఈ విధానం ఎలాంటి ప్రభావం చూపదు. లేదంటే: + + ఈ విధానాన్ని సెట్ చేస్తే, |DeviceLocalAccountAutoLoginId| విధానం ద్వాారా పేర్కొన్న పరికర స్థానిక ఖాతాలోకి ఆటోమేటిక్గా లాగిన్ చేసే ప్రతిసారి వినియోగదారు కార్యకలాపం లేకుండా నిష్క్రియంగా గడవాల్సిన సమయాన్ని పేర్కొంటుంది. + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, 0 మిల్లీసెకన్లు సమయపరిమితిగా ఉపయోగించబడుతుంది. + + ఈ విధానం మిల్లీసెకన్లలో పేర్కొనబడుతుంది.</translation> <translation id="523505283826916779">ప్రాప్యత సెట్టింగ్లు</translation> <translation id="5235958368503433463"><ph name="PRODUCT_NAME" />లో డిఫాల్ట్ హోమ్ పేజీ యొక్క రకాన్ని కాన్ఫిగర్ చేస్తుంది మరియు హోమ్ పేజీ ప్రాధాన్యతలను మార్చకుండా వినియోగదారులను నిరోధిస్తుంది. హోమ్ పేజీ మీరు పేర్కొనే URLకి సెట్ చేయబడవచ్చు లేదా కొత్త ట్యాబ్ పేజీకి సెట్ చేయబడవచ్చు. @@ -1777,6 +1814,12 @@ <translation id="5272684451155669299">ఒప్పు అయితే, వినియోగదారు <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> ద్వారా <ph name="CHALLENGE_USER_KEY_FUNCTION" /> ఉపయోగించి గోప్యత CAకి దాని గుర్తింపును రిమోట్ విధానంలో ధృవీకరించడానికి Chrome పరికరాల్లో హార్డ్వేర్ను ఉపయోగించవచ్చు. దీన్ని తప్పునకు సెట్ చేస్తే లేదా ఏదీ సెట్ చేయకుంటే, APIకి కాల్లు ఎర్రర్ కోడ్తో విఫలమవుతాయి.</translation> +<translation id="5277806246014825877">Crostiniని అమలు చేయడానికి ఈ వినియోగదారును అనుమతించండి. + + విధానాన్ని తప్పుకు సెట్ చేస్తే, వినియోగదారుకు Crostini ప్రారంభించబడదు. + విధానాన్ని ఒప్పుకు సెట్ చేస్తే లేదా సెట్ చేయకుండా వదిలివేస్తే, ఇతర సెట్టింగ్ల ప్రకారం అనుమతి ఉన్నంత కాలం వినియోగదారుకు Crostini ప్రారంభించబడి ఉంటుంది. + VirtualMachinesAllowed, CrostiniAllowed మరియు DeviceUnaffiliatedCrostiniAllowed అనే ఈ మూడు విధానాలు Crostiniకి వర్తింపజేసినప్పుడు, ఇవి అమలు కావాలంటే వీటిని తప్పక ఒప్పుకు సెట్ చేయాలి. + ఈ విధానాన్ని తప్పుకు మార్చినప్పుడు, ఇది కొత్త Crostini కంటైనర్లను ప్రారంభిస్తుంది, కానీ ఇప్పటికే అమలులో ఉన్న కంటైనర్లను షట్ డౌన్ చేయదు.</translation> <translation id="5283457834853986457">ప్లగ్ఇన్ శోధినిని ఆపివేయండి (త్వరలో నిలిపివేయబడుతోంది)</translation> <translation id="5288772341821359899">విధానాన్ని సెట్ చేస్తే, WebRTC ఉపయోగించే UDP పోర్ట్ పరిధి పేర్కొన్న పోర్ట్ విరామానికి (ముగింపు పాయింట్లతో) పరిమితం చేయబడుతుంది. @@ -1813,6 +1856,7 @@ <translation id="5370279767682621504">డిఫాల్ట్ యేతర పోర్ట్లలో HTTP/0.9 మద్దతును ప్రారంభించండి</translation> <translation id="5378985487213287085">వెబ్సైట్లు డెస్క్టాప్ ప్రకటనలు ప్రదర్శించవచ్చో, లేదో అని సెట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. డిఫాల్ట్గా డెస్క్టాప్ ప్రకటనలను ప్రదర్శించడానికి అనుమతించబడతాయి, ఢిఫాల్ట్ను నిరాకరించినా లేదా వినియోగదారు ప్రతీసారి వినియోగదారు వెబ్సైట్ డెస్క్టాప్ ప్రకటనలను ప్రదర్శించాలా వద్దా అని అడగబడతారు. ఈ విధానం సెట్ చేయకుండా వదిలేస్తే, 'AskNotifications' ఉపయోగించబడుతుంది మరియు వినియోగదారు దీన్ని మార్చగలుగుతారు.</translation> <translation id="538108065117008131">ఈ క్రింది కంటెంట్ రకాలని నిర్వహించడానికి <ph name="PRODUCT_FRAME_NAME" />ని అనుమతించు.</translation> +<translation id="5391388690191341203">పరికర-స్థానిక ఖాతా ఆటో-లాగిన్</translation> <translation id="5392172595902933844">Android యొక్క స్థితి గురించి సమాచారం తిరిగి సర్వర్కి పంపబడింది. @@ -1848,6 +1892,7 @@ <translation id="5457924070961220141"><ph name="PRODUCT_FRAME_NAME" /> ఇన్స్టాల్ చేసినప్పుడు, అమలు అయ్యే డిఫాల్ట్ HTMLను కాన్ఫిగర్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ విధానం హోస్ట్ బ్రౌజర్ బట్వాడా చేయడానికి అనుమతించేలా సెట్ చేయకుండా వదలివేస్తే డిఫాల్ట్ సెట్టింగ్ ఉపయోగించబడుతుంది, కానీ మీరు దీన్ని ఐచ్ఛికంగా భర్తీచేయవచ్చు మరియు <ph name="PRODUCT_FRAME_NAME" /> HTML పేజీలను డిఫాల్ట్గా అమలు చేస్తుంది.</translation> <translation id="5464816904705580310">నిర్వహించబడే వినియోగదారుల కోసం సెట్టింగ్లను కాన్ఫిగర్ చేయండి.</translation> <translation id="546726650689747237">AC శక్తితో అమలవుతున్నప్పుడు స్క్రీన్ మసక ఆలస్యం</translation> +<translation id="5469143988693423708">వినియోగదారు Crostiniని అమలు చేయడానికి అనుమతి పొందారు</translation> <translation id="5469825884154817306">ఈ సైట్లలో చిత్రాలని బ్లాక్ చెయ్యి</translation> <translation id="5475361623548884387">ముద్రించడాన్ని ప్రారంభించు</translation> <translation id="547601067149622666">అనుచిత ప్రకటనల సైట్లలో ప్రకటనలను అనుమతించవద్దు</translation> @@ -1919,6 +1964,9 @@ దీని వలన అందించబడిన సర్టిఫికెట్ ప్రమాణీకరించబడే హోస్ట్ పేర్లను నియంత్రించే nameConstraints ఎక్స్టెన్షన్ను దాటవేయడం అనుమతించబడే అవకాశం ఉన్నందున ఇది సిఫార్సు చేయదగినది కాదని గుర్తుంచుకోండి. ఈ విధానాన్ని సెట్ చేయకపోతే లేదా తప్పుకి సెట్ చేస్తే, DNS పేరు లేదా IP చిరునామాను కలిగి ఉన్న subjectAlternativeName ఎక్స్టెన్షన్ లేని సర్వర్ సర్టిఫికెట్లు విశ్వసించబడవు.</translation> +<translation id="5581292529942108810">Chrome నివేదన ఎక్స్టెన్షన్ సంబంధిత విధానాలను కాన్ఫిగర్ చేయండి. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" /> ప్రారంభించినప్పుడు, అలాగే మెషీన్ని <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />తో నమోదు చేసినప్పుడు మాత్రమే ఈ విధానం ప్రభావవంతంగా ఉంటుంది.</translation> <translation id="5583806683960333345">ఈ సెట్టింగ్ ప్రారంభించబడితే, తక్షణ టీథెరింగ్ని ఉపయోగించడానికి వినియోగదారులు అనుమతించబడతారు, ఇది తమ పరికరంతో మొబైల్ డేటాను భాగస్వామ్యం చేయడానికి తమ Google ఫోన్ని అనుమతిస్తుంది. ఈ సెట్టింగ్ నిలిపివేయబడితే, వినియోగదారులు తక్షణ టీథెరింగ్ని ఉపయోగించడానికి అనుమతించబడతారు. @@ -2170,7 +2218,7 @@ డిఫాల్ట్గా ఎక్స్టెన్షన్ కార్పొరేట్ వినియోగం కోసం నిర్దేశించిన కీని ఉపయోగించలేదు, ఇలా చేయడం ఆ ఎక్స్టెన్షన్ కోసం allowCorporateKeyUsageని తప్పునకు సెట్ చేయడంతో సమానం. ఎక్స్టెన్షన్ కోసం allowCorporateKeyUsageని ఒప్పునకు సెట్ చేస్తే మాత్రమే, ఇది అనియంత్రిత డేటాకు సైన్ చేయడానికి కార్పొరేట్ వినియోగం కోసం గుర్తుపెట్టిన ఏ ప్లాట్ఫారమ్ కీని అయినా ఉపయోగించగలుగుతుంది. ఎక్స్టెన్షన్ దాడి చేసేవారికి వ్యతిరేకంగా కీకి సురక్షిత యాక్సెస్ కలిగి ఉన్నట్లు విశ్వసిస్తే మాత్రమే ఈ అనుమతిని మంజూరు చేయాలి.</translation> -<translation id="6208896993204286313">విధాన సమాచారం <ph name="PRODUCT_NAME" />ని నివేదించండి</translation> +<translation id="6208896993204286313"><ph name="PRODUCT_NAME" /> విధాన సమాచారాన్ని నివేదించండి</translation> <translation id="6210259502936598222">OS మరియు <ph name="PRODUCT_NAME" /> వెర్షన్ సమాచారాన్ని నివేదించండి</translation> <translation id="6211428344788340116">పరికరం కార్యాచరణ సమయాలను నివేదించండి. @@ -2192,6 +2240,11 @@ <translation id="6310223829319187614">వినియోగదారు సైన్ ఇన్ చేస్తున్నప్పుడు డొమైన్ పేరు స్వయంపూర్తిని ప్రారంభిస్తుంది</translation> <translation id="6315673513957120120">వినియోగదారులు SSL లోపాలు ఉన్న సైట్లకు నావిగేట్ చేసినప్పుడు Chrome ఒక హెచ్చరిక పేజీని చూపుతుంది. డిఫాల్ట్గా లేదా ఈ విధానం ఒప్పుకు సెట్ చేసినప్పుడు, ఈ హెచ్చరిక పేజీల గుండా క్లిక్ చేయడానికి వినియోగదారులు అనుమతించబడతారు. ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, వినియోగదారులు ఏ హెచ్చరిక పేజీ గుండా క్లిక్ చేయడానికి అనుమతించబడరు.</translation> +<translation id="6352543686437322588">నిర్దిష్ట జాప్యం తర్వాత ఆటో-లాగిన్ చేయాల్సిన పరికర-స్థానిక ఖాతా. + + ఈ విధానాన్ని సెట్ చేస్తే, లాగిన్ స్క్రీన్పై వినియోగదారు ప్రమేయం లేకుండా నిర్దిష్ట సమయ వ్యవధి గడిచిన తర్వాత పేర్కొన్న సెషన్ ఆటోమేటిక్గా లాగిన్ చేయబడుతుంది. పరికర-స్థానిక ఖాతాను తప్పనిసరిగా కాన్ఫిగర్ చేసి ఉండాలి (|DeviceLocalAccounts| చూడండి). + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, ఆటో-లాగిన్ ఉండదు.</translation> <translation id="6353901068939575220">POSTతో URLను శోధిస్తున్నప్పుడు ఉపయోగించే పరామితులను పేర్కొంటుంది. ఇందులో కామాతో వేరు చేయబడిన పేరు/విలువ జతలు ఉంటాయి. విలువ ఎగువ ఉదాహరణలోని {searchTerms} వంటి టెంప్లేట్ పరామితి అయితే, ఇది వాస్తవ శోధన పదాల డేటాతో భర్తీ చేయబడుతుంది. ఈ విధానం ఐచ్ఛికం. సెట్ చేయకపోతే, శోధన అభ్యర్థన GET పద్ధతిని ఉపయోగించి పంపబడుతుంది. @@ -2562,6 +2615,11 @@ ఈ విధానాన్ని సెట్ చేయకుండా వదిలి వేసి ఉంటే, వినియోగదారు ఈ సెట్టింగ్ను మాన్యువల్గా మార్చగలుగుతారు.</translation> <translation id="723103540848640830">లాక్ స్క్రీన్ పిన్ యొక్క కనిష్ట అంకెల పరిమితిని సెట్ చేయండి</translation> +<translation id="7232816984286843471">విధానాన్ని తప్పుకు సెట్ చేస్తే, అనుబంధంగా లేని వినియోగదారులు Crostiniని ఉపయోగించడానికి అనుమతించబడరు. + + విధానాన్ని సెట్ చేయకపోతే లేదా ఒప్పుకు సెట్ చేస్తే, ఇతర సెట్టింగ్ల ప్రకారం అనుమతి ఉన్నంత కాలం వినియోగదారులందరూ Crostiniని ఉపయోగించడానికి అనుమతించబడతారు. + VirtualMachinesAllowed, CrostiniAllowed మరియు DeviceUnaffiliatedCrostiniAllowed అనే ఈ మూడు విధానాలు Crostiniకి వర్తింపజేసినప్పుడు, ఇవి అమలు కావాలంటే తప్పక ఒప్పుకు సెట్ చేయాలి. + ఈ విధానం తప్పుకు మార్చినప్పుడు, ఇది కొత్త Crostini కంటైనర్లను ప్రారంభించగలుగుతుంది, కానీ ఇప్పటికే అమలులో ఉన్న కంటైనర్లను షట్ డౌన్ చేయలేదు.</translation> <translation id="7234280155140786597">నిషేధిత స్థానిక సందేశ పద్ధతి హోస్ట్ల పేర్లు (లేదా అన్నింటికి *)</translation> <translation id="7236775576470542603">లాగిన్ స్క్రీన్లో ప్రారంభించబడే స్క్రీన్ మాగ్నిఫైయర్ యొక్క డిఫాల్ట్ రకాన్ని సెట్ చేయండి. @@ -2614,6 +2672,12 @@ <translation id="7311458740754205918">దీన్ని ఒప్పుకి సెట్ చేసినా లేదా సెట్ చేయకుండా వదిలివేసినా, కొత్త ట్యాబ్ పేజీ వినియోగదారు బ్రౌజింగ్ చరిత్ర, ఆసక్తులు లేదా స్థానం ఆధారంగా కంటెంట్ సూచనలను చూపవచ్చు. దీన్ని తప్పుకి సెట్ చేస్తే, కొత్త ట్యాబ్ పేజీలో స్వయంచాలకంగా ఉత్పాదించిన కంటెంట్ సూచనలు చూపబడవు.</translation> +<translation id="7313793931637495417">OS విధానం, OS ప్లాట్ఫామ్, OS నిర్మాణం, <ph name="PRODUCT_NAME" /> వెర్షన్ మరియు <ph name="PRODUCT_NAME" /> ఛానెల్ లాంటి వెర్షన్ సమాచారాన్ని నివేదించాలో లేదో ఈ విధానం నియంత్రిస్తుంది. + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే లేదా ఒప్పుకు సెట్ చేస్తే, వెర్షన్ సమాచారం సమీకరించబడుతుంది. + ఈ విధానాన్ని తప్పుకు సెట్ చేసినప్పుడు, వెర్షన్ సమాచారం సేకరించబడదు. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" />ని ప్రారంభించినప్పుడు, అలాగే మెషీన్ని <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />తో ప్రారంభించినప్పుడు మాత్రమే ఈ విధానం ప్రభావవంతంగా ఉంటుంది.</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> కోసం అదనపు ఆదేశ పంక్తి పరామితులు</translation> <translation id="7326394567531622570">Wipe (విలువ 2)కి సారూప్యం, కానీ వినియోగదారు మళ్లీ సైన్ ఇన్ చేయాల్సిన అవసరం రాకుండా ఉండటం కోసం లాగిన్ టోకెన్లను నిల్వ ఉంచుతుంది.</translation> <translation id="7329842439428490522">బ్యాటరీ శక్తితో అమలవుతున్నప్పుడు ఎంత సమయం పాటు వినియోగదారు ఇన్పుట్ లేకుంటే స్క్రీన్ ఆపివేయబడుతుందో పేర్కొంటుంది. @@ -2644,12 +2708,18 @@ <translation id="7349338075015720646">వినియోగదారుని ప్రమేయం లేకుండా నిశ్శబ్దంగా ఇన్స్టాల్ అయిన వెబ్సైట్ల జాబితాను పేర్కొంటుంది, అలాగే వీటిని వినియోగదారు అన్ఇన్స్టాల్ చేయలేరు లేదా నిలిపివేయలేరు. విధానంలోని ప్రతి జాబితా అంశం రెండు అంశాలతో కూడిన ఆబ్జెక్ట్లాగా ఉంటుంది: "url" మరియు "launch_container". "url" అనేది ఇన్స్టాల్ చేయాల్సిన వెబ్ యాప్ URL మరియు "launch_container" అనేది, ఇన్స్టాల్ చేయబడిన తర్వాత వెబ్ యాప్ ఎలా తెరవాలో సూచించే “విండో” గానీ లేదా “ట్యాబ్" గానీ అయి ఉంటుంది. ఒకవేళ "launch_container" వదిలేయబడితే, అది ప్రోగ్రెసివ్ యాప్ అని Chrome పరిగణిస్తే, యాప్ విండోలో లేదంటే ట్యాబ్లో ప్రారంభించబడుతుంది.</translation> +<translation id="735902178936442460">మెషీన్లను గుర్తించడానికి ఉపయోగించగల మెషీన్ పేరు మరియు నెట్వర్క్ చిరునామాల లాంటి సమాచారాన్ని నివేదించాలో లేదో ఈ విధానం నియంత్రిస్తుంది. + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలివేస్తే లేదా ఒప్పుకు సెట్ చేస్తే, మెషీన్లను గుర్తించడానికి ఉపయోగించగల సమాచారం సేకరించబడుతుంది. + ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, మెషీన్లను గుర్తించడానికి ఉపయోగించగల సమాచారం సేకరించబడదు. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" />ని ప్రారంభించబడినప్పుడు, అలాగే మెషీన్ని <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />తో నమోదు చేసినప్పుడు మాత్రమే ఈ విధానం ప్రభావంలో ఉంటుంది.</translation> <translation id="7367028210010532881">సంభావ్యంగా హానికరమైనవిగా ఫ్లాగ్ చేయబడిన సైట్లకు వినియోగదారులు నావిగేట్ చేసినప్పుడు సురక్షిత బ్రౌజింగ్ సేవ ఒక హెచ్చరిక పేజీని చూపుతుంది. ఈ సెట్టింగ్ని ప్రారంభించినట్లయితే, వినియోగదారులు ఏదేమైనా హెచ్చరిక పేజీ నుండి హానికరమైన సైట్కు కొనసాగకుండా అడ్డుకోబడతారు. ఈ సెట్టింగ్ నిలిపివేయబడితే లేదా కాన్ఫిగర్ చేయబడకుంటే, హెచ్చరిక చూపబడిన తర్వాత ఫ్లాగ్ చేయబడిన సైట్కు వెళ్లడానికి వినియోగదారులు అనుతించబడతారు. సురక్షిత బ్రౌజింగ్ గురించి మరింత సమాచారం కావాలంటే https://developers.google.com/safe-browsingని చూడండి.</translation> -<translation id="737655323154569539">ముద్రణ పేజీ పరిమాణాన్ని పరిమితం చేస్తుంది. సెట్ చేయని విధానం మరియు ఖాళీ సెట్కి పరిమితి విధించబడదు.</translation> +<translation id="737655323154569539">ముద్రణ పేజీ పరిమాణాన్ని పరిమితం చేస్తుంది. సెట్ చేయని విధానం మరియు ఖాళీ సెట్లు పరిమితి లేనివిగా పరిగణించబడతాయి.</translation> <translation id="7389872682701720082">మీరు ఈ సెట్టింగ్ను అనుమతించినట్లయితే, గడువు గల ప్లగిన్లు ఎప్పటికీ అమలు చేయబడతాయి. ఈ సెట్టింగ్ నిలిపివేసినట్లయితే లేదా సెట్ చేయబడనట్లయితే, ప్రమాణీకరణ అవసరమైన ప్లగిన్లను అమలు చేయడానికి వినియోగదారులు అనుమతి అభ్యర్థించబడుతుంది. భద్రతను రాజీ చేయగల ప్లగిన్లు ఇవే.</translation> @@ -2731,9 +2801,9 @@ <translation id="7617319494457709698">ఈ విధానం రిమోట్ ధృవీకరణ కోసం <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> కార్యనిర్వాహకత <ph name="CHALLENGE_USER_KEY_FUNCTION" />ని ఉపయోగించడానికి అనుమతించే ఎక్స్టెన్షన్లను పేర్కొంటుంది. APIని ఉపయోగించడానికి ఎక్స్టెన్షన్లు తప్పనిసరిగా ఈ జాబితాకు జోడించబడాలి. జాబితాలో ఎక్స్టెన్షన్ లేకపోతే లేదా జాబితాను సెట్ చేయకుండా ఉంటే, APIకి చేసే కాల్ ఎర్రర్ కోడ్తో విఫలమవుతుంది.</translation> -<translation id="7618907117929117943">OS వెర్షన్ లక్ష్యాన్ని దాటినట్లయితే లక్ష్యాన్ని వెర్షన్లో తిరిగి ఉండండి మరియు రోల్ బాక్ ద్వారా పరికర స్థాయి కాన్ఫిగరేషన్ (నెట్వర్క్ ఆధారాలతో సహా)ను కొనసాగించడం సాధ్యమవుతుంది, రోల్ బాక్ తర్వాత OOBEను కూడా వదిలివేస్తుంది. సాధ్యం కానట్లయితే దాన్ని తిరిగి చేయవద్దు లేదా రద్దు చేయవద్దు (లక్ష్య సంస్కరణ డేటా పునరుద్ధరణకు మద్దతు ఇవ్వదు లేదా వెనుకబడిన-అనుకూలమైన మార్పు కారణంగా) +<translation id="7618907117929117943">ప్రస్తుత OS వెర్షన్, లక్ష్య వెర్షన్ కంటే తాజాది అయి ఉండి దాటినట్లయితే, ఉపసంహరించడం ద్వారా పరికర స్థాయి కాన్ఫిగరేషన్ను కొనసాగించడం (నెట్వర్క్ ఆధారాలతో సహా) సాధ్యమయితే, ఉపసంహరించి, లక్ష్య వెర్షన్నే కొనసాగించండి, అంతే కాక ఉపసంహరణ తర్వాత OOBEని దాటవేయండి. సాధ్యం కానట్లయితే (లక్ష్య వెర్షన్ డేటా పునరుద్ధరణకు మద్దతు ఇవ్వకపోతే లేదా మరో దిశలో-అనుకూలం కాని మార్పు జరిగినట్లైతే) ఉపసంహరించడం తిరిగి చేయవద్దు లేదా రద్దు చేయవద్దు. -వెర్షన్ 70 మరియు <ph name="PRODUCT_OS_NAME" /> అధిక మద్దతు. పాత క్లయింట్ల కోసం, ఈ విలువకు రోల్ బాక్ నిలిపివేయబడింది.</translation> +<ph name="PRODUCT_OS_NAME" /> యొక్క 70వ వెర్షన్ మరియు అంతకంటే తాజా వాటికి మద్దతు ఉంది. పాత క్లయింట్ల విషయంలో, ఉపసంహరణ నిలిపివేయబడిందని ఈ విలువ సూచిస్తుంది.</translation> <translation id="7625444193696794922">ఈ పరికరం లాక్ చేయబడాల్సిన విడుదల ఛానెల్ను పేర్కొంటుంది.</translation> <translation id="7632724434767231364">GSSAPI లైబ్రరీ పేరు</translation> <translation id="7635471475589566552"><ph name="PRODUCT_NAME" />లో అప్లికేషన్ లొకేల్ని కాన్ఫిగర్ చేస్తుంది మరియు వినియోగదారులు లొకేల్ని మార్చనివ్వకుండా నిరోధిస్తుంది. మీరు ఈ సెట్టింగ్ని ప్రారంభిస్తే, <ph name="PRODUCT_NAME" /> పేర్కొన్న లొకేల్ని ఉపయోగిస్తుంది. కాన్ఫిగర్ చేసిన లొకేల్ మద్దతివ్వకపోతే, బదులుగా 'en-US' ఉపయోగించబడుతుంది. ఈ సెట్టింగ్ని ఆపివేసినా లేదా సెట్ చేయకపోయినా, <ph name="PRODUCT_NAME" /> వినియోగదారు-పేర్కొన్న ప్రాధాన్య లొకేల్ని (కాన్ఫిగర్ చేసి ఉంటే), సిస్టమ్ లొకేల్ని లేదా ఫాల్బ్యాక్ 'en-US' లొకేల్ని ఉపయోగిస్తుంది.</translation> @@ -2940,6 +3010,14 @@ <translation id="798856998567564266">మీరు ఈ సెట్టింగ్ను ప్రారంభిస్తే, బుక్మార్క్లను జోడించవచ్చు, తీసివేయవచ్చు లేదా నవీకరించవచ్చు. ఈ విధానాన్ని సెట్ చేయనప్పుడు కూడా ఇదే డిఫాల్ట్గా ఉంటుంది. మీరు ఈ సెట్టింగ్ను నిలిపివేస్తే, బుక్మార్క్లను జోడించలేరు, తీసివేయలేరు లేదా నవీకరించలేరు. ఉనికిలోని బుక్మార్క్లు ఇంకా అందుబాటులో ఉంటాయి.</translation> +<translation id="7992136759457836904">వర్చువల్ మెషీన్లు Chrome OSలో అమలు కావాలో లేదో నియంత్రించడానికి మిమ్మల్ని అనుమతిస్తుంది. + + విధానాన్ని ఒప్పుకు సెట్ చేస్తే, వర్చువల్ మెషీన్లను అనుమతించడానికి పరికరం అనుమతించబడుతుంది. + విధానాన్ని తప్పుకు సెట్ చేస్తే, వర్చువల్ మెషీన్లను అమలు చేయడానికి పరికరం అనుమతించబడదు. + VirtualMachinesAllowed, CrostiniAllowed మరియు DeviceUnaffiliatedCrostiniAllowed అనే ఈ మూడు విధానాలను Crostiniకి వర్తింపజేసినప్పుడు,అవి అమలు కావాలంటే ఒప్పుకు సెట్ చేయాలి. + ఈ విధానాన్ని తప్పుకు మార్చినప్పుడు, ఇది కొత్త వర్చువల్ మెషీన్లను ప్రారంభించడానికి వర్తిస్తుంది, కానీ ఇప్పటికే అమలు అవుతున్న వర్చువల్ మెషీన్లను షట్ డౌన్ చేయనివ్వదు. + ఈ విధానాన్ని నిర్వహిత పరికరంలో సెట్ చేయనప్పుడు, వర్చువల్ మెషీన్లను అనుమతించడానికి పరికరం అనుమతించబడదు. + వర్చువల్ మెషీన్లను అమలు చేయడానికి అనిర్వహిత పరికరాలు అనుమతించబడతాయి.</translation> <translation id="802147957407376460">స్క్రీన్ను 0 డిగ్రీల మేర తిప్పండి</translation> <translation id="8033913082323846868">అయితే ఈ విధానం M70లో విస్మరించబడింది, కనుక దయచేసి AutofillAddressEnabled మరియు AutofillCreditCardEnabledని బదులుగా ఉపయోగించండి. @@ -2950,7 +3028,7 @@ మీరు ఈ సెట్టింగ్ని ప్రారంభిస్తే లేదా విలువని సెట్ చేయకపోతే, స్వీయ పూరింపు అనేది వినియోగదారు నియంత్రణలో ఉండిపోతుంది. ఇది ప్రొఫైల్ల స్వీయ పూరింపును కాన్ఫిగర్ చేయడానికి వారిని అనుమతిస్తుంది, అలాగే స్వీయ పూరింపును ఆన్ లేదా ఆఫ్ చేయడం కూడా వారి సొంత విచక్షణపై ఆధారపడి ఉంటుంది.</translation> <translation id="8044493735196713914">పరికరం బూట్ మోడ్ను నివేదించండి</translation> <translation id="8050080920415773384">స్థానిక ముద్రణ</translation> -<translation id="8053580360728293758">డిఫాల్ట్ ముద్రణ రంగు మోడ్ ను భర్తీ చేస్తుంది. మోడ్ అందుబాటులో లేనట్లయితే ఈ విధానం విస్మరించబడుతుంది.</translation> +<translation id="8053580360728293758">డిఫాల్ట్ ముద్రణ రంగు మోడ్ను భర్తీ చేస్తుంది. మోడ్ అందుబాటులో లేనట్లయితే ఈ విధానం విస్మరించబడుతుంది.</translation> <translation id="8059164285174960932">రిమోట్ ప్రాప్యత క్లయింట్లు వారి ప్రామాణీకరణ టోకెన్ను పొందే URL</translation> <translation id="806280865577636339">ఈ విధానాన్ని ఒప్పుకి సెట్ చేస్తే, ప్రాప్యత ఎంపికలు ఎల్లప్పుడూ సిస్టమ్ ట్రే మెనులో కనిపిస్తాయి. @@ -2999,10 +3077,17 @@ ఈ విధానాన్ని సెట్ చేయకుండా వదిలేసినప్పుడు, డిఫాల్ట్ సమయం ఉపయోగించబడుతుంది. విధానం విలువను మిల్లీసెకన్లలో పేర్కొనాలి. విలువలు నిష్క్రియ ఆలస్యం కంటే తక్కువగా లేదా సమానంగా ఉండేలా అమర్చబడతాయి.</translation> +<translation id="8138009212169037227">విధాన డేటా మరియు విధాన సమీకరణ సమయం గురించి నివేదించాలో లేదో ఈ విధానం నియంత్రిస్తుంది. + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలిపెట్టినప్పుడు లేదా ఒప్పుకు సెట్ చేసినప్పుడు, విధాన డేటా మరియు విధాన సమీకరణ సమయం సమీకరించబడతాయి. + ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, విధాన డేటా మరియు విధాన సమీకరణ పొందిన సమయం సమీకరించబడవు. + + <ph name="CHROME_REPORTING_EXTENSION_NAME" />ని ప్రారంభించినప్పుడు, అలాగే మెషీన్ని <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" />తో ప్రారంభించినప్పుడు మాత్రమే ఈ విధానం ప్రభావవంతంగా ఉంటుంది.</translation> <translation id="8140204717286305802">నెట్వర్క్ ఇంటర్ఫేస్ల జాబితాను వాటి రకాలు మరియు హార్డ్వేర్ చిరునామాలతో సర్వర్కు నివేదించండి. విధానాన్ని తప్పుకు సెట్ చేస్తే, ఇంటర్ఫేస్ జాబితా నివేదించబడదు.</translation> <translation id="8141795997560411818">ఈ విధానం Android Google డిస్క్ అనువర్తనాన్ని ఉపయోగించకుండా వినియోగదారుని నిరోధించలేదు. మీరు Google డిస్క్కి ప్రాప్యత నిరోధించాలనుకుంటే, మీరు Android Google డిస్క్ అనువర్తనం యొక్క ఇన్స్టాలేషన్ను కూడా అనుమతించకూడదు.</translation> +<translation id="8142894094385450823">నిర్వహిత సెషన్ కోసం సిఫార్సు చేసిన లొకేల్లను సెట్ చేస్తుంది</translation> <translation id="8146727383888924340">Chrome OS నమోదు ద్వారా ఆఫర్లను రీడీమ్ చేయడానికి వినియోగదారులను అనుమతించండి</translation> <translation id="8148785525797916822"><ph name="PRODUCT_NAME" /> ప్రస్తుతం మద్దతు లేని కంప్యూటర్ లేదా ఆపరేటింగ్ సిస్టమ్లో అమలవుతున్నప్పుడు కనిపించే హెచ్చరికను ఆపివేస్తుంది.</translation> <translation id="8148901634826284024">అధిత కాంట్రాస్ట్ మోడ్ ప్రాప్యత లక్షణాన్ని ప్రారంభించండి. @@ -3057,6 +3142,29 @@ <translation id="8259592978873597235">ఈ విధానాన్ని ఒప్పుకు సెట్ చేసినప్పుడు లేదా సెట్ చేయకుండా వదిలేసినప్పుడు, వీడియో ప్లే అవుతుంటే వినియోగదారు నిష్క్రియంగా ఉన్నట్లు పరిగణించబడరు. నిష్క్రియ ఆలస్యం, స్క్రీన్ కాంతివిహీనత ఆలస్యం, స్క్రీన్ ఆపివేత ఆలస్యం మరియు స్క్రీన్ లాక్ ఆలస్యం వంటివి ఏర్పడకుండా మరియు సంబంధిత చర్యలు తీసుకోబడకుండా ఇది నిరోధిస్తుంది. ఈ విధానాన్ని తప్పుకు సెట్ చేస్తే, వీడియో కార్యాచరణ వినియోగదారును నిష్క్రియంగా పరిగణించబడనీయకుండా నిరోధించదు.</translation> +<translation id="8264653492961233132">వినియోగదారు ప్రమేయం లేకుండా నిశ్శబ్దంగా ఇన్స్టాల్ అయ్యే మరియు తిరిగి అన్ఇన్స్టాల్ + చేయడం లేదా వినియోగదారు నిలిపివేయడం సాధ్యపడని అప్లికేషన్లు మరియు + ఎక్స్టెన్షన్ల జాబితాను పేర్కొంటుంది. యాప్లు/ఎక్స్టెన్షన్లు అభ్యర్థించే అన్ని + అనుమతులు, అలాగే యాప్/ఎక్స్టెన్షన్ యొక్క భావి వెర్షన్లు అభ్యర్థించే + ఏవైనా అదనపు అనుమతులు వినియోగదారు ప్రమేయం లేకుండానే + పరిపూర్ణంగా మంజూరు చేయబడతాయి. ఇంకా, enterprise.deviceAttributes + మరియు enterprise.platformKeys ఎక్స్టెన్షన్ APIల కోసం అనుమతులు + మంజూరు చేయబడతాయి. (ఈ రెండు APIలు నిర్బంధంగా ఇన్స్టాల్ + చేయబడని యాప్లు/ఎక్స్టెన్షన్లకు అందుబాటులో ఉండవు.) + + ఈ విధానం సంభావ్యంగా విరుద్ధమైన <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> విధానం కంటే ముందే వర్తింపజేయబడుతుంది. మునుపు నిర్బంధంగా ఇన్స్టాల్ చేయబడిన యాప్ లేదా ఎక్స్టెన్షన్ ఈ జాబితా నుండి తీసివేయబడితే, అది <ph name="PRODUCT_NAME" /> ద్వారా ఆటోమేటిక్గా అన్ఇన్స్టాల్ చేయబడుతుంది. + + <ph name="MS_AD_NAME" /> డొమైన్కు Windows చేర్చబడని సందర్భాలకు సంబంధించి, నిర్బంధ ఇన్స్టాలేషన్ Chrome వెబ్ స్టోర్లో జాబితా చేయబడిన యాప్లు మరియు ఎక్స్టెన్షన్లకు పరిమితం చేయబడింది. + + ఏదైనా ఎక్స్టెన్షన్ యొక్క సోర్స్ కోడ్ను డెవలపర్ సాధనాల ద్వారా వినియోగదారులు మార్చవచ్చని గుర్తుంచుకోండి (వీలైన మేరకు ఎక్స్టెన్షన్ని పని చేయకుండా చేయడం). ఇదే సమస్య అయితే, <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> విధానాన్ని సెట్ చేయాలి. + + విధానం యొక్క ప్రతి జాబితా అంశం సెమీకోలన్ (<ph name="SEMICOLON" />) ద్వారా వేరు చేయబడిన ఎక్స్టెన్షన్ ID మరియు ఐచ్ఛికంగా "అప్డేట్" URLను కలిగి ఉండే స్ట్రింగ్. ఉదా. డెవలపర్ మోడ్లో ఉన్నప్పుడు <ph name="CHROME_EXTENSIONS_LINK" />లో కనుగొనబడే 32-అక్షరాల స్ట్రింగ్నే ఎక్స్టెన్షన్ ID అంటారు. "అప్డేట్" URLను పేర్కొన్నట్లయితే, అది <ph name="LINK_TO_EXTENSION_DOC1" />లో వివరించినట్లుగా అప్డేట్ మానిఫెస్ట్ XML పత్రాన్ని సూచిస్తుంది. డిఫాల్ట్గా, Chrome వెబ్ స్టోర్ అప్డేట్ URL ఉపయోగించబడుతుంది (ప్రస్తుతం "https://clients2.google.com/service/update2/crx"). ఈ విధానంలో సెట్ చేసిన "అప్డేట్" URL ప్రాథమిక ఇన్స్టాలేషన్ కోసం మాత్రమే ఉపయోగించబడుతుందని; ఎక్స్టెన్షన్ యొక్క తదుపరి అప్డేట్లు ఎక్స్టెన్షన్ మానిఫెస్ట్లో సూచించిన అప్డేట్ URLను వినియోగిస్తాయని గుర్తుంచుకోండి. అలాగే 67తో పాటుగా అప్పటి వరకు ఉన్న <ph name="PRODUCT_NAME" /> వెర్షన్లలో "అప్డేట్" URLను ప్రత్యేకంగా పేర్కొనడం తప్పనిసరి అని గుర్తుంచుకోండి. + + ఉదాహరణకు, <ph name="EXTENSION_POLICY_EXAMPLE" /> ప్రామాణిక Chrome వెబ్ స్టోర్ "అప్డేట్" URL నుండి <ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" /> యాప్ను ఇన్స్టాల్ చేస్తుంది. ఎక్స్టెన్షన్లను హోస్ట్ చేయడం గురించి మరింత సమాచారం కోసం, ఈ లింక్ను చూడండి: <ph name="LINK_TO_EXTENSION_DOC2" />. + + ఈ విధానాన్ని సెట్ చేయకుండా వదిలివేస్తే, యాప్లు లేదా ఎక్స్టెన్షన్లు ఏవీ ఆటోమేటిక్గా ఇన్స్టాల్ చేయబడవు మరియు <ph name="PRODUCT_NAME" />లో వినియోగదారు ఏ యాప్ లేదా ఎక్స్టెన్షన్ని అయినా అన్ఇన్స్టాల్ చేయగలరు. + + ఈ విధానం అజ్ఞాత మోడ్కు వర్తించదని గుర్తుంచుకోండి.</translation> <translation id="8274603902181597201">వినియోగదారు యొక్క ecryptfs హోమ్ డైరెక్టరీని తీసివేయండి మరియు సరికొత్త ext4-ఎన్క్రిప్టెడ్ హోమ్ డైరెక్టరీతో ప్రారంభించండి.</translation> <translation id="8285435910062771358">పూర్తి-స్క్రీన్ మాగ్నిఫైయర్ ప్రారంభించబడింది</translation> <translation id="8288199156259560552">Android Google స్థాన సేవను ప్రారంభించండి</translation> @@ -3148,7 +3256,7 @@ ఇక్కడ "వెర్షన్" అంటే '61.0.3163.120' వంటి ఖచ్చితమైన వెర్షన్ కావచ్చు లేదా '61.0' వంటి వెర్షన్ ఆది ప్రత్యయం కావచ్చు </translation> <translation id="8544375438507658205"><ph name="PRODUCT_FRAME_NAME" /> కోసం డిఫాల్ట్ HTML అందింపుదారు</translation> <translation id="8544465954173828789">ఫోన్ నుండి Chromebookకు సమకాలీకరించాల్సిన SMS సందేశాలను అనుమతిస్తుంది.</translation> -<translation id="8548832052135586762">ముద్రణ మాత్రమే రంగుకు సెట్ చేస్తుంది, మోనోక్రోమ్ మాత్రమే లేదా రంగు మోడ్ పరిమితి లేదు. సెట్ చేయని విధానం పరిమితిగా పరిగణించబడదు.</translation> +<translation id="8548832052135586762">ముద్రణను, రంగు మాత్రమే, మోనోక్రోమ్ మాత్రమే లేదా రంగు మోడ్ పరిమితి లేదు అని సెట్ చేస్తుంది. సెట్ చేయని విధానం పరిమితి లేనిదిగా పరిగణించబడుతుంది.</translation> <translation id="8549772397068118889">కంటెంట్ ప్యాక్లకు వెలుపల ఉన్న సైట్లను సందర్శించేటప్పుడు హెచ్చరించు</translation> <translation id="8566842294717252664">కొత్త ట్యాబ్ పేజీ మరియు అనువర్తన లాంచర్ నుండి వెబ్ స్టోర్ను దాస్తుంది</translation> <translation id="8586528890725660268">వినియోగదారు ఉపయోగించకూడని ప్రింటర్లను పేర్కొంటుంది. @@ -3254,7 +3362,7 @@ ఈ సెట్టింగ్ని సెట్ చేయకుండా వదిలేస్తే, ఈ ఫంక్షన్ని ఉపయోగించాలో లేదో వినియోగదారు నిర్ణయించగలరు.</translation> <translation id="8870318296973696995">హోమ్ పేజీ</translation> -<translation id="8876188741456358123">డిఫాల్ట్ ప్రింటింగ్ డ్యూప్లెక్స్ మోడ్ ను భర్తీ చేస్తుంది. మోడ్ అందుబాటులో లేనట్లయితే ఈ విధానం విస్మరించబడుతుంది.</translation> +<translation id="8876188741456358123">డిఫాల్ట్ ప్రింటింగ్ డ్యూప్లెక్స్ మోడ్ను భర్తీ చేస్తుంది. మోడ్ అందుబాటులో లేనట్లయితే ఈ విధానం విస్మరించబడుతుంది.</translation> <translation id="8882006618241293596">ఈ సైట్లలో <ph name="FLASH_PLUGIN_NAME" /> ప్లగిన్ని చేయి</translation> <translation id="890403179930035128">అక్షరదోష తనిఖీ భాషలను నిర్బంధంగా ప్రారంభిస్తుంది. ఆ జాబితాలో ఉండే గుర్తించబడని భాషలు విస్మరించబడతాయి. @@ -3400,12 +3508,12 @@ ఒకవేళ ఉంటే ఈ సెట్టింగ్ RemoteAccessHostDomainని భర్తీ చేస్తుంది. RemoteAccessHostClientDomainListని కూడా చూడండి.</translation> +<translation id="9077227880520270584">పరికర-స్థానిక ఖాతా ఆటో-లాగిన్ టైమర్</translation> <translation id="9084985621503260744">శక్తి నిర్వహణను వీడియో కార్యాచరణ ప్రభావితం చేయాలో లేదో పేర్కొనడం</translation> <translation id="9088433379343318874">పర్యవేక్షించబడే వినియోగదారు కంటెంట్ ప్రదాతను ప్రారంభించండి</translation> <translation id="9088444059179765143">స్వయంచాలక సమయ మండలి గుర్తింపు పద్ధతిని కాన్ఫిగర్ చేయండి</translation> -<translation id="9094064873808699479">OS సంస్కరణ లక్ష్యాన్ని దాటినట్లయితే లక్ష్యాన్ని సంస్కరణలో తిరిగి ఉండండి మరియు రోల్ బాక్ ద్వారా పరికర స్థాయి కాన్ఫిగరేషన్ (నెట్వర్క్ ఆధారాలతో సహా) ను కొనసాగించడం సాధ్యమవుతుంది. సాధ్యం కానట్లయితే దాన్ని తిరిగి చేయవద్దు లేదా రద్దు చేయవద్దు (లక్ష్య సంస్కరణ డేటా పునరుద్ధరణకు మద్దతు ఇవ్వదు లేదా వెనుకబడిన-అనుకూలమైన మార్పు కారణంగా) - -వెర్షన్ 70 మరియు <ph name="PRODUCT_OS_NAME" /> అధిక మద్దతు. పాత క్లయింట్ల కోసం, ఈ విలువకు రోల్ బాక్ డిసేబుల్ అయ్యింది.</translation> +<translation id="9094064873808699479">OS వెర్షన్ లక్ష్య వెర్షన్ కంటే తాజాది అయినట్లయితే, ఉపసంహరించి, లక్ష్య వెర్షన్నే కొనసాగించండి. వీలైతే ఉపసంహరణ ప్రక్రియ ద్వారా పరికర స్థాయి కాన్ఫిగరేషన్ను (నెట్వర్క్ ఆధారాలతో సహా) కొనసాగించడం ప్రయత్నించండి. ఐతే డేటాను పునరుద్ధరించడం వీలు కాకపోయినా (లక్ష్య వెర్షన్ డేటా పునరుద్ధరణకు మద్దతు ఇవ్వకపోతే లేదా మరో దిశలో-అనుకూలం కాని మార్పు జరిగినట్లైతే), ఉపసంహరణను పూర్తి పవర్వాష్తో చేయండి. +<ph name="PRODUCT_OS_NAME" /> యొక్క 70వ వెర్షన్ మరియు అంతకంటే తాజా వాటికి మద్దతు ఉంది. పాత క్లయింట్ల విషయంలో, ఉపసంహరణ నిలిపివేయబడిందని ఈ విలువ సూచిస్తుంది.</translation> <translation id="9096086085182305205">అధికార సర్వర్ ఆమోదజాబితా</translation> <translation id="9098553063150791878">HTTP ప్రామాణీకరణ కోసం విధానాలు</translation> <translation id="9103061223348895346">ఈ విధానం వినియోగదారు నిష్క్రియంగా ఉన్నప్పుడు పవర్ నిర్వహణ వ్యూహం కోసం బహుళ సెట్టింగ్లను నియంత్రిస్తుంది. @@ -3482,13 +3590,13 @@ <translation id="9187743794267626640">బాహ్య నిల్వను మౌంట్ చేయడాన్ని నిలిపివేస్తుంది</translation> <translation id="9197740283131855199">కాంతివిహీనత తర్వాత వినియోగదారు సక్రియంగా మారితే స్క్రీన్ కాంతివిహీనత ఆలస్యాన్ని లెక్కించే శాతం</translation> <translation id="9200828125069750521">POSTని ఉపయోగించే చిత్రం URL కోసం పరామితులు</translation> -<translation id="920209539000507585">ఫోల్డర్ 'శీర్షికలు మరియు ఫుటర్లు' ముద్రణ డైలాగ్ లో ఆన్ లేదా ఆఫ్ అవుతాయి. +<translation id="920209539000507585">ముద్రణ డైలాగ్లో 'శీర్షికలు మరియు ఫుటర్లు' నిర్బంధంగా ఆన్ లేదా ఆఫ్ అవుతాయి. -విధానాన్ని సెట్ చేయకపోతే, శీర్షికలు మరియు ఫుటర్లు ముద్రించాలా వద్దా అనే వినియోగదారు నిర్ణయించవచ్చు. +విధానాన్ని సెట్ చేయకపోతే, శీర్షికలు మరియు ఫుటర్లు ముద్రించాలా వద్దా అన్నది వినియోగదారు నిర్ణయించవచ్చు. -విధానాన్ని తప్పుకు సెట్ చేస్తే, 'శీర్షికలు మరియు ఫుటర్లు' ముద్రణ పరిదృశ్యం డైలాగ్ లో ఎంచుకోబడలేదు మరియు వినియోగదారు దీన్ని మార్చలేరు. +విధానాన్ని తప్పుకు సెట్ చేస్తే, 'శీర్షికలు మరియు ఫుటర్లు' ముద్రణ ప్రివ్యూ డైలాగ్లో ఎంచుకోబడదు మరియు వినియోగదారు దీన్ని మార్చలేరు. -విధానాన్ని ఒప్పుకు సెట్ చేస్తే, 'శీర్షికలు మరియు ఫుటర్లు' ముద్రణ పరిదృశ్య డైలాగ్ లో ఎంపిక చేయబడతాయి మరియు వినియోగదారు దీన్ని మార్చలేరు.</translation> +విధానాన్ని ఒప్పుకు సెట్ చేస్తే, 'శీర్షికలు మరియు ఫుటర్లు' ముద్రణ ప్రివ్యూ డైలాగ్లో ఎంపిక చేయబడుతుంది మరియు వినియోగదారు దీన్ని మార్చలేరు.</translation> <translation id="9210953373038593554">SAML లాగిన్ల కోసం ప్రమాణీకరణ రకాన్ని కాన్ఫిగర్ చేస్తుంది. ఈ విధానాన్ని సెట్ చేయనప్పుడు లేదా డిఫాల్ట్ (విలువ 0)కి సెట్ చేసినప్పుడు, ఇతర కారకాల ఆధారంగా SAML లాగిన్ల పద్ధతిని బ్రౌజర్ నిర్ణయిస్తుంది. అత్యంత సాధారణ సందర్భంలో, వినియోగదారు ప్రమాణీకరణ మరియు కాష్ చేయబడిన వినియోగదారు డేటా సంరక్షణ అన్నవి వినియోగదారులు మాన్యువల్గా నమోదు చేసిన పాస్వర్డ్లపై ఆధారపడి ఉంటాయి.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 48bb57c..d43cb4d 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -125,6 +125,7 @@ <translation id="1387596372902085462">是否信任赛门铁克公司的旧版 PKI 基础架构</translation> <translation id="1393485621820363363">已启用企业设备打印机</translation> <translation id="1397855852561539316">默认搜索服务提供商建议网址</translation> +<translation id="142346659686073702">允许独立用户使用 Crostini</translation> <translation id="1426410128494586442">是</translation> <translation id="1427655258943162134">代理服务器的地址或网址</translation> <translation id="1435659902881071157">设备级网络配置</translation> @@ -356,6 +357,12 @@ 如果您未设置此政策,则等同于已启用此政策,请参见上述说明。</translation> <translation id="2113068765175018713">通过自动重启限制设备的正常运行时间</translation> +<translation id="2116790137063002724">此政策可控制是否报告可用于识别用户身份的信息,例如操作系统登录、<ph name="PRODUCT_NAME" /> 个人资料登录、<ph name="PRODUCT_NAME" /> 个人资料名称、<ph name="PRODUCT_NAME" /> 个人资料路径和 <ph name="PRODUCT_NAME" /> 可执行文件路径。 + + 当此政策设为 True 或未设置时,系统会收集可用于识别用户身份的信息。 + 当此政策设为 False 时,系统不会收集可用于识别用户身份的信息。 + + 仅当已启用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已使用 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 注册相应设备后,此政策才有效。</translation> <translation id="2127599828444728326">允许在这些网站上显示通知</translation> <translation id="2131902621292742709">使用电源供电时的屏幕变暗延迟时间</translation> <translation id="2132732175597591362">控制自动播放始终启用的网址格式白名单。 @@ -824,6 +831,22 @@ 如果未设置此政策,系统将会对所有网站使用“DefaultCookiesSetting”政策中的全局默认值(倘若已设置“DefaultCookiesSetting”政策),或使用用户个人配置中的全局默认值(倘若未设置“DefaultCookiesSetting”政策)。 另请参阅“CookiesBlockedForUrls”和“CookiesSessionOnlyForUrls”政策。请注意,这三项政策中的网址格式不得存在冲突,因为无从指定应以哪项政策为准。</translation> +<translation id="3373364525435227558">为受管理自助服务终端设置一个或多个建议的语言区域,以便用户从这些语言区域中轻松选择。 + + 用户可以先选择语言区域和键盘布局,然后再启动受管理自助服务终端。默认情况下,系统会按字母顺序列出 <ph name="PRODUCT_OS_NAME" />支持的所有语言区域。您可以使用此政策将一些建议的语言区域移至列表顶部。 + + 如果此政策未设置,系统将预先选择当前的界面语言区域。 + + 如果此政策已设置,建议的语言区域将移至列表顶部,并且会与所有其他语言区域醒目地区分开来。系统将按照在此政策中的显示顺序列出建议的语言区域,并且将预先选择第一个建议的语言区域。 + + 如果有多个建议的语言区域,系统将假定用户希望从这些语言区域中选择(启动受管理自助服务终端时,所选的语言区域和键盘布局将以醒目的方式显示)。否则,系统将假定大多数用户希望使用预先选择的语言区域(启动受管理自助服务终端时,所选的语言区域和键盘布局将以不太醒目的方式显示)。 + + 如果您设置了此政策并启用了自动登录功能(请参见 |DeviceLocalAccountAutoLoginId| 和 |DeviceLocalAccountAutoLoginDelay| 政策),自动启动的受管理自助服务终端将使用第一个建议的语言区域以及与该语言区域匹配的最常用键盘布局。 + + 预先选择的键盘布局始终是与预先选择的语言区域匹配的最常用布局。 + + 此政策只能设置为建议性质。您可以使用此政策将一些建议的语言区域移至顶部,但用户始终可为其自助服务终端选择 <ph name="PRODUCT_OS_NAME" />支持的任何语言区域。 + </translation> <translation id="3381968327636295719">默认情况下托管主机浏览器</translation> <translation id="3414260318408232239">如果未配置此政策,<ph name="PRODUCT_NAME" /> 将会使用默认的最低版本(即 TLS 1.0)。 @@ -1047,6 +1070,11 @@ 如果此政策设为true或未设置,用户将能够通过注册Chrome操作系统兑换优惠。 如果此政策设为false,用户将不能兑换优惠。</translation> +<translation id="4008507541867797979">如果此政策设为 true 或未配置,<ph name="PRODUCT_OS_NAME" />将会在登录屏幕上显示现有用户并允许选择其一。 + + 如果此政策设为 false,<ph name="PRODUCT_OS_NAME" />将不会在登录屏幕上显示现有用户。除非配置了受管理自助服务终端,否则系统将会显示标准登录屏幕(提示用户输入电子邮件地址和密码/手机号码)或 SAML 插页式屏幕(若已通过 <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> 政策启用的话)。如果配置了受管理自助服务终端,系统将仅会显示受管理自助服务终端帐号并允许选择其一。 + + 请注意,此政策不会影响设备对本地用户数据的保留或舍弃。</translation> <translation id="4010738624545340900">允许调用文件选择对话框</translation> <translation id="4012737788880122133">将此政策设为 true 即可停用自动更新功能。 @@ -1434,6 +1462,15 @@ 如果此政策设为 true 或未指定,系统会启用标签页生命周期。</translation> <translation id="5208240613060747912">可让您设置网址格式的列表,这些网址格式用于指定不允许显示通知的网站。在未设置此政策的情况下,如果设置了“DefaultNotificationsSetting”政策,那么将对该政策中的所有网站使用全局默认值,否则将对用户个人配置中的所有网站使用全局默认值。</translation> <translation id="5219844027738217407">对于 Android 应用,此政策仅会影响麦克风。当此政策设为 true 时,系统会针对所有 Android 应用(无一例外)将麦克风设为静音。</translation> +<translation id="5228316810085661003">设备本地帐号自动登录延迟。 + + 如果未设置 |DeviceLocalAccountAutoLoginId| 政策,则此政策不会生效。在设置了 |DeviceLocalAccountAutoLoginId| 政策的情况下: + + 如果设置了此政策,则只要用户停止活动的持续时间达到了此政策指定的时长,系统就会自动登录由 |DeviceLocalAccountAutoLoginId| 政策指定的设备本地帐号。 + + 如果未设置此政策,则超时时间为 0 毫秒。 + + 应以毫秒为单位来指定此政策。</translation> <translation id="523505283826916779">无障碍设置</translation> <translation id="5247006254130721952">拦截有危险的下载内容</translation> <translation id="5248863213023520115">设置可使用哪些加密类型从 <ph name="MS_AD_NAME" /> 服务器请求 Kerberos 凭单。 @@ -1454,6 +1491,12 @@ <translation id="5272684451155669299">如果此政策设为 True,则用户可以使用 Chrome 设备上的硬件,通过 <ph name="ENTERPRISE_PLATFORM_KEYS_API" />(使用 <ph name="CHALLENGE_USER_KEY_FUNCTION" />)远程向隐私认证中心 (Privacy CA) 认证自己的身份。 如果此政策设为 False 或未设置,则会导致无法调用此 API,并返回错误代码。</translation> +<translation id="5277806246014825877">允许此用户运行 Crostini。 + + 如果此政策设为 false,系统不会为此用户启用 Crostini。 + 如果此政策设为 true 或未设置,系统会为此用户启用 Crostini,前提是其他设置也允许此用户运行 Crostini。 + 若想通过应用 VirtualMachinesAllowed、CrostiniAllowed 和 DeviceUnaffiliatedCrostiniAllowed 这三项政策以允许 Crostini 运行,则这三项政策都需设为 true。 + 如果此政策改设为 false,则只会导致无法启动新的 Crostini 容器,而不会关闭已在运行的容器。</translation> <translation id="5283457834853986457">停用插件查找器(已弃用)</translation> <translation id="5288772341821359899">如果此政策已设置,则 WebRTC 使用的 UDP 端口范围将仅限于指定的端口区间(包括端点)。 @@ -1490,6 +1533,7 @@ <translation id="5370279767682621504">在非默认端口上启用 HTTP/0.9 支持</translation> <translation id="5378985487213287085">可让您设置是否允许网站显示桌面通知。默认情况下,可以允许或拒绝显示桌面通知,也可以在每次网站要显示桌面通知时询问用户。如果未设置此政策,系统将使用“AskNotifications”并允许用户更改此设置。</translation> <translation id="538108065117008131">允许“<ph name="PRODUCT_FRAME_NAME" />”处理以下内容类型。</translation> +<translation id="5391388690191341203">用于自动登录的设备本地帐号</translation> <translation id="5392172595902933844">系统会将有关 Android 状态的信息发送回服务器。 如果此政策设为 false 或未设置,系统便不会报告状态信息。 @@ -1513,6 +1557,7 @@ <translation id="5457924070961220141">可让您在安装 <ph name="PRODUCT_FRAME_NAME" />时配置默认 HTML 呈现器。如果未设置此政策,则使用默认设置,即允许托管浏览器进行呈现。不过您可以视情况替换此设置,让 <ph name="PRODUCT_FRAME_NAME" />默认呈现 HTML 网页。</translation> <translation id="5464816904705580310">为托管用户配置设置。</translation> <translation id="546726650689747237">使用交流电源供电时的屏幕变暗延迟时间</translation> +<translation id="5469143988693423708">允许用户运行 Crostini</translation> <translation id="5469825884154817306">在这些网站上阻止图片</translation> <translation id="5475361623548884387">启用打印功能</translation> <translation id="547601067149622666">不允许含侵扰性广告的网站展示广告</translation> @@ -1564,6 +1609,9 @@ 请注意,我们不建议启用此设置,因为这可能会允许绕过 nameConstraints 扩展项(用于限制可针对哪些主机名授权指定的证书)。 如果此政策未设置或设为 false,系统将不会信任包含 DNS 名称或 IP 地址但缺少 subjectAlternativeName 扩展项的服务器证书。</translation> +<translation id="5581292529942108810">配置与 Chrome Reporting Extension 相关的政策。 + + 仅当已启用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已使用 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 注册相应设备后,此政策才有效。</translation> <translation id="5584132346604748282">控制 Android Google 位置信息服务</translation> <translation id="5586942249556966598">不执行任何操作</translation> <translation id="5630352020869108293">恢复上次的会话</translation> @@ -1798,6 +1846,11 @@ <translation id="6310223829319187614">允许在用户登录期间自动填充域名</translation> <translation id="6315673513957120120">当用户访问存在 SSL 错误的网站时,Chrome 将显示警告页面。默认情况下,或当此政策设为 true 时,用户可以在点击这些警告页面后继续操作。 如果将此政策设为 false,用户将无法通过点击任何警告页面继续操作。</translation> +<translation id="6352543686437322588">要在延迟过后自动登录的设备本地帐号。 + + 如果设置了此政策,则只要用户未与登录屏幕互动的持续时间达到了指定的时长,系统就会自动登录指定的自助服务终端。必须已配置设备本地帐号(请参阅 |DeviceLocalAccounts|)。 + + 如果未设置此政策,系统将不会自动登录。</translation> <translation id="6353901068939575220">指定通过 POST 搜索网址时使用的参数。该参数由以英文逗号分隔的名称/值对组成。如果值为模板参数(例如上例中的 {searchTerms}),那么系统会将其替换成真正的搜索字词数据。 此为可选政策。如果未设置此政策,系统将使用 GET 方法发送搜索请求。 @@ -2140,6 +2193,11 @@ 如果此策略未设置,用户将能够手动更改此项设置。</translation> <translation id="723103540848640830">设置锁定屏幕 PIN 码的长度下限</translation> +<translation id="7232816984286843471">如果此政策设为 false,独立用户将无法使用 Crostini。 + + 如果此政策设为 true 或未设置,系统将允许所有用户使用 Crostini,前提是其他设置也允许所有用户运行 Crostini。 + 若想通过应用 VirtualMachinesAllowed、CrostiniAllowed 和 DeviceUnaffiliatedCrostiniAllowed 这三项政策以允许 Crostini 运行,则这三项政策都需设为 true。 + 如果此政策改设为 false,则只会导致无法启动新的 Crostini 容器,而不会关闭已在运行的容器。</translation> <translation id="7234280155140786597">被禁的本地消息传递主机的名称(用“*”则表示全部禁止)</translation> <translation id="7236775576470542603">设置登录屏幕上启用的放大镜默认类型。 @@ -2187,6 +2245,12 @@ <translation id="7311458740754205918">如果此政策设为 true 或未设置,“打开新的标签页”页面可能会根据用户的浏览记录、兴趣或位置信息显示内容建议。 如果此政策设为 false,“打开新的标签页”页面上不会显示自动生成的内容建议。</translation> +<translation id="7313793931637495417">此政策可控制是否报告版本信息,例如操作系统版本、操作系统平台、操作系统架构、<ph name="PRODUCT_NAME" /> 版本号和 <ph name="PRODUCT_NAME" /> 版本类型。 + + 当此政策设为 True 或未设置时,系统会收集版本信息。 + 当此政策设为 False 时,系统不会收集版本信息。 + + 仅当已启用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已使用 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 注册相应设备后,此政策才有效。</translation> <translation id="7323896582714668701">适用于 <ph name="PRODUCT_NAME" />的其他命令行参数</translation> <translation id="7326394567531622570">与 Wipe(值 2)类似,但该选项会尝试保留登录令牌,以使用户无需再次登录。</translation> <translation id="7329842439428490522">指定在使用电池供电时用户停止输入后隔多久关闭屏幕。 @@ -2217,6 +2281,12 @@ <translation id="7349338075015720646">以列表形式指定在无需用户干预的情况下静默安装的网站,用户无法卸载或停用这些网站。 此政策的每个列表项都是一个包含以下两个成员的对象:“url”和“launch_container”。“url”应该是要安装的网络应用的网址,“launch_container”应该是“窗口”或“标签页”(用于指示网络应用在安装后的打开方式)。如果省略“launch_container”,当应用被 Chrome 视为渐进式网页应用时,将在窗口中启动,否则将在标签页中打开。</translation> +<translation id="735902178936442460">此政策可控制是否报告可用于识别设备的信息,例如设备名称和网络地址。 + + 当此政策设为 True 或未设置时,系统会收集可用于识别设备的信息。 + 当此政策设为 False 时,系统不会收集可用于识别设备的信息。 + + 仅当已启用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已使用 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 注册相应设备后,此政策才有效。</translation> <translation id="7367028210010532881">当用户访问被标记为可能存在恶意内容的网站时,安全浏览功能会显示警告页面。如果此设置处于启用状态,用户在看到警告页面后将无法再继续访问相应的恶意网站。 如果此设置处于停用状态或未配置,用户在看到警告后可以继续访问被标记为可能存在恶意内容的网站。 @@ -2454,6 +2524,14 @@ <translation id="7976157349247117979"><ph name="PRODUCT_NAME" /> 目标名称</translation> <translation id="7980227303582973781">无特殊限制</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">让您能够控制是否允许在 Chrome 操作系统上运行虚拟机。 + + 如果此政策设为 True,相应设备将能够运行虚拟机。 + 如果此政策设为 False,相应设备将无法运行虚拟机。 + 若想通过应用 VirtualMachinesAllowed、CrostiniAllowed 和 DeviceUnaffiliatedCrostiniAllowed 这三项政策以允许 Crostini 运行,则这三项政策都需设为 True。 + 如果此政策改设为 False,则只会导致无法启动新的虚拟机,而不会关闭已在运行的虚拟机。 + 如果未在某部托管设备上设置此政策,该设备将无法运行虚拟机。 + 非托管设备可以运行虚拟机。</translation> <translation id="802147957407376460">将屏幕旋转 0 度</translation> <translation id="8033913082323846868">我们在 M70 中弃用了此政策,请改用 AutofillAddressEnabled 和 AutofillCreditCardEnabled。 @@ -2498,10 +2576,17 @@ 如果未设置此政策,系统将使用默认的时间长度。 指定的政策值应以毫秒为单位,并且不得大于闲置延迟时间。</translation> +<translation id="8138009212169037227">此政策可控制是否报告政策数据和政策提取时间。 + + 当此政策设为 True 或未设置时,系统会收集政策数据和政策提取时间。 + 当此政策设为 False 时,系统不会收集政策数据和政策提取时间。 + + 仅当已启用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已使用 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 注册相应设备后,此政策才有效。</translation> <translation id="8140204717286305802">向服务器报告网络接口列表(其中包括网络接口的类型和硬件地址)。 如果此政策设为False,则不报告接口列表。</translation> <translation id="8141795997560411818">此政策不会阻止用户使用 Android 版“Google 云端硬盘”应用。如果您想阻止对 Google 云端硬盘的访问,则也应禁止安装 Android 版“Google 云端硬盘”应用。</translation> +<translation id="8142894094385450823">为受管理自助服务终端设置建议的语言区域</translation> <translation id="8146727383888924340">允许用户通过注册 Chrome 操作系统来兑换优惠</translation> <translation id="8148785525797916822">禁止显示当<ph name="PRODUCT_NAME" />在不再受支持的计算机或操作系统上运行时出现的警告。</translation> <translation id="8148901634826284024">启用高反差模式辅助功能。 @@ -2549,6 +2634,21 @@ 您无需手动配置这些设置!您可从 <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" /> 下载适用于 Windows、Mac 和 Linux 的易用模板。 虽然您仍可在已加入 <ph name="MS_AD_NAME" /> 网域的 Windows 实例上通过注册表配置政策,但我们建议您通过 GPO 在 Windows 上配置政策。</translation> +<translation id="8264653492961233132">以列表形式指定具有下述特征的应用或扩展程序:无需用户干预即会自动静默安装,且无法由用户卸载或停用。此类应用/扩展程序所请求的所有权限(包括相应应用/扩展程序的后续版本所请求的任何其他权限)均由系统默认授予(无需用户干预)。此外,系统还会向 enterprise.deviceAttributes 和 enterprise.platformKeys 扩展程序 API 授予相关权限(这两个 API 不适用于非强制安装的应用/扩展程序)。 + + 此政策优先于可能会与其冲突的 <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> 政策。如果从此列表中移除了之前强制安装的某个应用或扩展程序,<ph name="PRODUCT_NAME" /> 便会自动卸载该应用或扩展程序。 + + 对于未加入 <ph name="MS_AD_NAME" /> 网域的 Windows 实例,强制安装仅限于 Chrome 网上应用店中所列的应用和扩展程序。 + + 请注意,用户可通过开发者工具更改任何扩展程序的源代码(此类更改可能会导致相应扩展程序无法正常运行)。如果您不希望用户进行此类更改,则应设置 <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> 政策。 + + 此政策的每个列表项都是一个字符串,其中包含一个扩展程序 ID 和一个可选的“更新”网址(这两者之间以英文分号 (<ph name="SEMICOLON" />) 分隔)。扩展程序 ID 是一个由 32 个字母构成的字符串;若想查看示例,请在开发者模式下前往 <ph name="CHROME_EXTENSIONS_LINK" />。“更新”网址(如已指定)应指向一个更新清单 XML 文档,如 <ph name="LINK_TO_EXTENSION_DOC1" /> 中所述。默认情况下,系统会使用 Chrome 网上应用店的更新网址(目前为“https://clients2.google.com/service/update2/crx”)。请注意,此政策中设置的“更新”网址仅用于初次安装;相应扩展程序的后续更新将会使用该扩展程序的清单中指定的更新网址。另请注意,在 <ph name="PRODUCT_NAME" /> 67 及更低版本中,明确指定“更新”网址是一项强制性要求。 + + 例如,<ph name="EXTENSION_POLICY_EXAMPLE" /> 会从标准的 Chrome 网上应用店“更新”网址安装“<ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" />”应用。要详细了解如何托管扩展程序,请访问 <ph name="LINK_TO_EXTENSION_DOC2" />。 + + 如果未设置此政策,系统便不会自动安装任何应用或扩展程序,而且用户可在 <ph name="PRODUCT_NAME" /> 中卸载任何应用或扩展程序。 + + 请注意,此政策不适用于无痕模式。</translation> <translation id="8274603902181597201">清空用户的 ecryptfs 主目录,并改用全新的 ext4 加密主目录。</translation> <translation id="8285435910062771358">已启用全屏放大镜</translation> <translation id="8288199156259560552">启用 Android Google 位置信息服务</translation> @@ -2810,6 +2910,7 @@ 此政策不适用于未加入 <ph name="MS_AD_NAME" /> 网域的 Windows 实例。</translation> <translation id="9035964157729712237">要从黑名单中排除的扩展程序 ID</translation> <translation id="9042911395677044526">允许将要按用户应用的网络配置推送到 <ph name="PRODUCT_OS_NAME" />设备。网络配置是 JSON 格式的字符串,具体定义如 <ph name="ONC_SPEC_URL" /> 中的开放网络配置格式所述。</translation> +<translation id="9077227880520270584">设备本地帐号自动登录计时器</translation> <translation id="9084985621503260744">指定视频活动是否影响电源管理</translation> <translation id="9088433379343318874">启用受监管用户内容提供方</translation> <translation id="9088444059179765143">配置自动检测时区方法</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index 819c9e5..4e24c57 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -128,6 +128,7 @@ <translation id="1387596372902085462">是否信任 Symantec 公司的舊版 PKI 基礎架構</translation> <translation id="1393485621820363363">已啟用企業裝置印表機</translation> <translation id="1397855852561539316">預設搜尋引擎建議網址</translation> +<translation id="142346659686073702">允許無關聯的使用者使用 Crostini</translation> <translation id="1426410128494586442">是</translation> <translation id="1427655258943162134">Proxy 伺服器的地址或網址</translation> <translation id="1435659902881071157">裝置層級網路設定</translation> @@ -371,6 +372,12 @@ 未設定這項政策則等同於啟用這項功能,請見上方說明。</translation> <translation id="2113068765175018713">透過自動重新啟動的方式限制裝置的正常運作時間</translation> +<translation id="2116790137063002724">這項政策可控管系統是否要回報能用於辨識使用者身分的資訊,例如作業系統登入資訊、<ph name="PRODUCT_NAME" /> 設定檔登入資訊、<ph name="PRODUCT_NAME" /> 設定檔名稱、<ph name="PRODUCT_NAME" /> 設定檔路徑和 <ph name="PRODUCT_NAME" /> 可執行檔路徑。 + + 如果將這項政策設為 True 或不予設定,系統會收集可用於辨識使用者身分的資訊。 + 如果將這項政策設為 False,系統就不會收集可用於辨識使用者身分的資訊。 + + 只有在已啟用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已透過 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 註冊電腦的情況下,這項政策才有作用。</translation> <translation id="2127599828444728326">允許這些網站的通知</translation> <translation id="2131902621292742709">在電池供電環境下執行時的螢幕調暗延遲時間</translation> <translation id="2132732175597591362">控管一律開啟自動播放功能的網址模式許可清單。 @@ -850,6 +857,22 @@ 如果未設定這項政策,系統會根據「DefaultCookiesSetting」政策 (如有設定) 或使用者的個人設定,將通用預設值套用至所有網站。 另請查看「CookiesBlockedForUrls」和「CookiesSessionOnlyForUrls」政策。請注意,這三項政策的網址模式不得有衝突,否則系統將無法判定應優先遵循哪一項政策。</translation> +<translation id="3373364525435227558">針對受管理工作階段設定一或多個建議語言代碼,方便使用者從中擇一使用。 + + 使用者可以在啟動受管理工作階段前先選擇所需語言代碼和鍵盤配置。根據預設,系統會按字母順序列出 <ph name="PRODUCT_OS_NAME" /> 支援的所有語言代碼。這項政策可讓你將一些建議語言代碼移至清單頂端。 + + 如未設定這項政策,系統會預先選取目前 UI 語言代碼。 + + 如果設定這項政策,建議語言代碼就會移至清單頂端,與其他語言代碼明顯區隔。系統會依政策指定的順序列出建議語言代碼,並預先選取第一個語言代碼。 + + 如果有多個建議語言代碼,系統會假設使用者將從中擇一使用。啟動受管理工作階段時,系統會醒目標出選取的語言代碼和鍵盤配置。否則,系統會假設大部分使用者將使用預先選取的語言代碼,並在受管理工作階段啟動時以較不醒目的方式顯示選取的語言代碼和鍵盤配置。 + + 如果設定這項政策並啟用自動登入功能 (請參閱 |DeviceLocalAccountAutoLoginId| 和 |DeviceLocalAccountAutoLoginDelay| 政策),自動啟動的受管理工作階段會使用第一個建議語言代碼,以及與其相符且最常用的鍵盤配置。 + + 預先選取的鍵盤配置一律是與先選取的語言代碼相符且最常用的配置。 + + 這項政策僅能設為建議政策。你可以使用這項政策將一些建議語言代碼移到頂端,但使用者隨時能為工作階段選擇 <ph name="PRODUCT_OS_NAME" /> 支援的任何語言代碼。 + </translation> <translation id="3381968327636295719">根據預設使用主機瀏覽器</translation> <translation id="3414260318408232239">如果未設定這項政策,<ph name="PRODUCT_NAME" /> 會使用預設最低版本 TLS 1.0。 @@ -1078,6 +1101,11 @@ 如果將這項政策設為 True 或未設定這項政策,使用者將可透過註冊 Chrome 作業系統來兌換優惠。 如果將這項政策設為 False,使用者將無法兌換優惠。</translation> +<translation id="4008507541867797979">如果將這項政策設為 true 或不予設定,<ph name="PRODUCT_OS_NAME" /> 會在登入畫面上顯示現有使用者並允許從中擇一登入。 + + 如果這項政策設為 false,除非已設定受管理工作階段,否則 <ph name="PRODUCT_OS_NAME" /> 不會在登入畫面上顯示現有使用者,而是顯示一般登入畫面 (提示輸入使用者電子郵件地址,以及密碼或電話號碼) 或 SAML 插頁式畫面 (如果透過 <ph name="LOGIN_AUTHENTICATION_BEHAVIOR_POLICY_NAME" /> 政策啟用的話)。設定受管理工作階段後,系統便只會顯示受管理工作階段帳戶並允許從中擇一登入。 + + 請注意,這項政策不會影響裝置保留或捨棄本機使用者資料。</translation> <translation id="4010738624545340900">允許調用檔案選項對話方塊</translation> <translation id="4012737788880122133">在設為 True 時,停用自動更新。 @@ -1468,6 +1496,15 @@ 如果將這項政策設為 true 或未指定任何值,就會啟用分頁生命週期功能。</translation> <translation id="5208240613060747912">允許你設定網址模式清單,指定不可以展示通知的網站。如果未設定這項政策,系統會從「DefaultNotificationsSetting」政策 (如果有設定的話) 或使用者的個人設定,將通用預設值套用至所有網站。</translation> <translation id="5219844027738217407">這項政策對 Android 應用程式的影響僅限於麥克風。將這項政策設為 true 時,所有 Android 應用程式皆無法使用麥克風 (設為靜音),沒有任何例外。</translation> +<translation id="5228316810085661003">裝置本機帳戶自動登入延遲。 + + 如未設定 |DeviceLocalAccountAutoLoginId| 政策,這項政策不會生效。否則: + + 如果設定這項政策,系統會據此判斷自動登入裝置本機帳戶前停止使用者活動的時間長度,如 |DeviceLocalAccountAutoLoginId| 政策所指定。 + + 如未設定這項政策,系統會以 0 毫秒當做逾時時間。 + + 指定這項政策時需以毫秒為單位。</translation> <translation id="523505283826916779">協助工具設定</translation> <translation id="5247006254130721952">封鎖危險下載作業</translation> <translation id="5248863213023520115">設定可使用哪些類型的加密從 <ph name="MS_AD_NAME" /> 伺服器提出 Kerberos 票證要求。 @@ -1488,6 +1525,12 @@ <translation id="5272684451155669299">如果設為 true,使用者就可以使用 Chrome 裝置上的硬體,從遠端透過 <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> (使用 <ph name="CHALLENGE_USER_KEY_FUNCTION" />) 向隱私權 CA 證明身分。 如果設為 false 或未設定,API 呼叫作業將會失敗,並傳回錯誤代碼。</translation> +<translation id="5277806246014825877">允許這位使用者執行 Crostini。 + + 如果將這項政策設為 false,系統不會為使用者啟用 Crostini。 + 如果將這項政策設為 true 或不予設定,只要其他設定也允許執行 Crostini,系統就會為使用者啟用。 + 如要允許 VirtualMachinesAllowed、CrostiniAllowed 和 DeviceUnaffiliatedCrostiniAllowed 執行 Crostini,這三項政策都必須設為 true。 + 將這項政策變更為 false 時,系統會啟動新的 Crostini 容器,而不會關閉執行中的容器。</translation> <translation id="5283457834853986457">停用外掛程式尋找工具 (已淘汰)</translation> <translation id="5288772341821359899">如果設定這項政策,系統會將 WebRTC 所使用的 UDP 通訊埠範圍限於指定的通訊埠區間 (包括端點)。 @@ -1524,6 +1567,7 @@ <translation id="5370279767682621504">在非預設通訊埠啟用 HTTP/0.9 支援功能</translation> <translation id="5378985487213287085">允許你設定是否要讓網站顯示桌面通知。你可以將網站預設為允許或禁止顯示桌面通知,也可以設為每次網站要顯示桌面通知時再詢問使用者。如果未設定這項政策,系統會使用「AskNotifications」,但使用者可以變更這項設定。</translation> <translation id="538108065117008131">允許 <ph name="PRODUCT_FRAME_NAME" /> 處理下列內容類型。</translation> +<translation id="5391388690191341203">用於自動登入的裝置本機帳戶</translation> <translation id="5392172595902933844">將 Android 狀態的相關資訊傳回 伺服器。 @@ -1548,6 +1592,7 @@ <translation id="5457924070961220141">允許你在安裝「<ph name="PRODUCT_FRAME_NAME" />」之後,設定預設的 HTML 轉譯器。如果未設定這項政策,系統就會使用預設設定,允許主機瀏覽器進行轉譯,但是你可以覆寫這項預設,改由「<ph name="PRODUCT_FRAME_NAME" />」轉譯 HTML 網頁。</translation> <translation id="5464816904705580310">為管理化環境下的使用者調整設定。</translation> <translation id="546726650689747237">在 AC 供電環境下執行時的螢幕調暗延遲時間</translation> +<translation id="5469143988693423708">已允許使用者執行 Crostini</translation> <translation id="5469825884154817306">封鎖這些網站的圖片</translation> <translation id="5475361623548884387">啟用列印功能</translation> <translation id="547601067149622666">禁止含侵入式廣告的網站顯示廣告</translation> @@ -1599,6 +1644,9 @@ 請注意,這項設定可能會允許略過 nameConstraints 延伸 (用於限制指定的憑證可授權的主機名稱),因此不建議啟用。 如果未設定這項政策,或是將這項政策設為 false,含有 DNS 名稱或 IP 位址但缺少 subjectAlternativeName 延伸的伺服器憑證將不會受到信任。</translation> +<translation id="5581292529942108810">設定 Chrome 資訊回報擴充功能相關政策。 + + 只有在已啟用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已透過 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 註冊電腦的情況下,這項政策才會有作用。</translation> <translation id="5584132346604748282">控制 Android Google 定位服務</translation> <translation id="5586942249556966598">不要處理</translation> <translation id="5630352020869108293">還原上次工作階段</translation> @@ -1834,6 +1882,11 @@ <translation id="6310223829319187614">允許在使用者登入過程中以自動完成功能填入網域名稱</translation> <translation id="6315673513957120120">當使用者瀏覽出現 SSL 錯誤的網站,Chrome 會顯示警告網頁。在預設或政策設為 True 的情況下,使用者可以忽略這類警告網頁,繼續前往原先指定的頁面。 這項政策設為 False 時,系統會禁止使用者忽略任何警告網頁。</translation> +<translation id="6352543686437322588">要在延遲時間過後自動登入的裝置本機帳戶。 + + 如果設定這項政策,系統會在使用者於登入畫面停止互動後的一段時間過後,自動登入指定工作階段。你必須已設定裝置本機帳戶 (請參閱 |DeviceLocalAccounts|)。 + + 如果未設定這項政策,系統不會自動登入。</translation> <translation id="6353901068939575220">指定使用 POST 搜尋網址時所用的參數,包含以逗號分隔的名稱/數值配對。如果數值為範本參數 (例如上例中的 {searchTerms}),系統將會以實際的搜尋字詞資料替代這個數值。 這項政策是選擇性的,如果未設定,系統將使用 GET 方法傳送搜尋要求。 @@ -2185,6 +2238,11 @@ 如未設定這項政策,使用者可以手動變更這項設定。</translation> <translation id="723103540848640830">設定螢幕鎖定 PIN 碼的長度下限</translation> +<translation id="7232816984286843471">如果將這項政策設為 false,無關聯的使用者就無法使用 Crostini。 + + 如不設定這項政策或設為 true,只要其他設定也允許執行 Crostini,所有使用者便都能使用。 + 如要允許 VirtualMachinesAllowed、CrostiniAllowed 和 DeviceUnaffiliatedCrostiniAllowed 執行 Crostini,這三項政策都必須設為 true。 + 將這項政策變更為 false 時,系統會啟動新的 Crostini 容器,而不會關閉執行中的容器。</translation> <translation id="7234280155140786597">禁止的內建訊息傳遞主機名稱 (指定 * 表示涵蓋所有內建訊息傳遞主機)。</translation> <translation id="7236775576470542603">設定啟用的螢幕放大鏡在登入畫面的預設類型。 @@ -2232,6 +2290,12 @@ <translation id="7311458740754205918">如果將這項政策設為 true 或未設定這項政策,系統可能會根據使用者的瀏覽記錄、興趣或位置在新分頁顯示內容建議。 如果將這項政策設為 false,新分頁就不會顯示系統自動產生的內容建議。</translation> +<translation id="7313793931637495417">這項政策可控管系統是否要回報版本資訊,例如作業系統版本、作業系統平台、作業系統架構、<ph name="PRODUCT_NAME" /> 版本和 <ph name="PRODUCT_NAME" /> 頻道。 + + 如果不設定這項政策或設為 True,系統會收集版本資訊。 + 如果將這項政策設為 False,系統就不會收集版本資訊。 + + 只有在已啟用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已透過 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 註冊電腦的情況下,這項政策才會有作用。</translation> <translation id="7323896582714668701"><ph name="PRODUCT_NAME" /> 額外命令列參數</translation> <translation id="7326394567531622570">與 Wipe (值 2) 類似,但會嘗試保留登入憑證,因此使用者不必重新登入。</translation> <translation id="7329842439428490522">指定時間長度,如果系統在電池供電環境下執行且未偵測到使用者輸入行為,就會在這段時間過後關閉螢幕。 @@ -2262,6 +2326,12 @@ <translation id="7349338075015720646">指定以無訊息方式安裝 (使用者無需操作) 的網站清單 (使用者無法解除安裝或停用這些網站)。 這項政策的每個清單項目都是一個物件,由「url」和「launch_container」組成。「url」應為要安裝的網路應用程式的網址,「launch_container」則應為「window」(視窗) 或「tab」(分頁),是用於指定網路應用程式安裝後要採用的開啟方式。如果省略「launch_container」,且 Chrome 判斷該網路應用程式為漸進式網路應用程式,將會在視窗中開啟;若 Chrome 判斷不是漸進式網路應用程式,則會在分頁中開啟。</translation> +<translation id="735902178936442460">這項政策可控管系統是否要回報能用於辨識電腦的資訊,例如電腦名稱和網路位址。 + + 如果不設定這項政策或設為 True,系統會收集可用於辨識電腦的資訊。 + 如果將這項政策設為 False,系統就不會收集可用於辨識電腦的資訊。 + + 只有在已啟用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已透過 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 註冊電腦的情況下,這項政策才會有作用。</translation> <translation id="7367028210010532881">當使用者瀏覽遭檢舉為有惡意風險的網站時,「安全瀏覽」服務會顯示警告網頁。如果啟用這項設定,就能防止使用者略過警告網頁並繼續前往惡意網站。 如果停用這項設定或未進行設定,則使用者可以選擇在系統顯示警告之後,繼續前往遭檢舉的網站。 @@ -2505,6 +2575,14 @@ <translation id="7976157349247117979">「<ph name="PRODUCT_NAME" />」目的地名稱</translation> <translation id="7980227303582973781">無特殊限制</translation> <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation> +<translation id="7992136759457836904">讓你控制是否要在 Chrome 作業系統上執行虛擬機器。 + + 如果將這項政策設為 True,裝置即可執行虛擬機器。 + 如果將這項政策設為 False,裝置則無法執行虛擬機器。 + 如要允許 VirtualMachinesAllowed、CrostiniAllowed 和 DeviceUnaffiliatedCrostiniAllowed 執行 Crostini,這三項政策都必須設為 true。 + 將這項政策變更為 False 時,系統會啟動新的虛擬機器,而不會關閉執行中的虛擬機器。 + 如果未在受管理裝置上設定這項政策,該裝置便無法執行虛擬機器。 + 不受管理的裝置則可執行虛擬機器。</translation> <translation id="802147957407376460">將畫面旋轉 0 度</translation> <translation id="8033913082323846868">這項政策自 M70 起已淘汰,請改用 AutofillAddressEnabled 和 AutofillCreditCardEnabled。 @@ -2549,10 +2627,17 @@ 如果你未設定這項政策,系統會使用預設時間長度。 指定政策值時需以毫秒為單位。該值需小於或等於閒置延遲時間。</translation> +<translation id="8138009212169037227">這項政策可控管系統是否要回報政策資料和政策擷取時間。 + + 如果不設定這項政策或設為 True,系統會收集政策資料和政策擷取時間。 + 如果將這項政策設為 False,系統就不會收集政策資料和政策擷取時間。 + + 只有在已啟用 <ph name="CHROME_REPORTING_EXTENSION_NAME" /> 且已透過 <ph name="MACHINE_LEVEL_USER_CLOUD_POLICY_ENROLLMENT_TOKEN_POLICY_NAME" /> 註冊電腦的情況下,這項政策才會有作用。</translation> <translation id="8140204717286305802">將網路介面清單及其類型和硬體位址回報給伺服器。 如果這項政策設為 False,則不會回報介面清單。</translation> <translation id="8141795997560411818">這項政策不會禁止使用者使用 Android Google 雲端硬碟應用程式。如要禁止存取 Google 雲端硬碟,則必須一併禁止安裝 Android Google 雲端硬碟應用程式。</translation> +<translation id="8142894094385450823">針對受管理工作階段設定建議語言代碼</translation> <translation id="8146727383888924340">允許使用者透過 Chrome OS Registration 兌換優惠</translation> <translation id="8148785525797916822">在我們已停止支援的電腦或作業系統執行 <ph name="PRODUCT_NAME" /> 時,不顯示警告訊息。</translation> <translation id="8148901634826284024">啟用高反差模式協助功能。 @@ -2600,6 +2685,22 @@ 這些設定不需手動配置!你可以在 <ph name="POLICY_TEMPLATE_DOWNLOAD_URL" /> 下載簡單易用的範本,直接在 Windows、Mac 和 Linux 系統中使用。 你仍可在已加入 <ph name="MS_AD_NAME" /> 網域的 Windows 執行個體透過登錄檔佈建政策,但我們建議你在 Windows 透過 GPO 設定政策。</translation> +<translation id="8264653492961233132">指定以無訊息方式安裝的應用程式和擴充功能清單。 + 這種安裝方式不需使用者互動,且使用者無法解除安裝或停用應用程式和擴充功能。系統會直接授予應用程式/擴充功能要求的所有權限 (使用者無需操作),包括日後新版應用程式/擴充功能要求的額外權限。此外,系統已將權限授予 enterprise.deviceAttributes 和 enterprise.platformKeys 擴充功能 API (這兩個 API 不適用於非強制安裝的應用程式/擴充功能)。 + + 這項政策的優先順序高於可能發生衝突的 <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> 政策。如果從這份清單移除先前已強制安裝的應用程式或擴充功能,<ph name="PRODUCT_NAME" /> 就會自動將其解除安裝。 + + 如果 Windows 執行個體未加入 <ph name="MS_AD_NAME" /> 網域,系統只會強制安裝 Chrome 線上應用程式商店列出的應用程式和擴充功能。 + + 請注意,使用者可能透過開發人員工具變更擴充功能的原始碼 (或許會造成擴充功能無法正常運作),如果你對此有所顧慮,建議你設定 <ph name="DEVELOPER_TOOLS_POLICY_NAME" /> 政策。 + + 這項政策的每個清單項目都是一行字串,其中包含以分號 (<ph name="SEMICOLON" />) 區隔的擴充功能 ID 和「更新」網址 (不一定有)。擴充功能 ID 為 32 個字母的字串,你可在開發人員模式下前往 <ph name="CHROME_EXTENSIONS_LINK" /> 查看範例。「更新」網址 (如有指定) 則應指向更新資訊清單 XML 文件,如 <ph name="LINK_TO_EXTENSION_DOC1" /> 所述。根據預設,系統會使用 Chrome 線上應用程式商店的更新網址 (目前為 "https://clients2.google.com/service/update2/crx")。請注意,這項政策設定的「更新」網址僅用於初次安裝,後續的擴充功能更新將採用擴充功能資訊清單指定的更新網址。另請注意,自 67 版本起必須在 <ph name="PRODUCT_NAME" /> 中明確指定「更新」網址。 + + 舉例來說,<ph name="EXTENSION_POLICY_EXAMPLE" /> 會透過標準 Chrome 線上應用程式商店「更新」網址安裝「<ph name="EXTENSION_POLICY_EXAMPLE_EXTENSION_NAME" />」應用程式。如要進一步瞭解如何代管擴充功能,請參閱以下連結:<ph name="LINK_TO_EXTENSION_DOC2" />。 + + 如未設定這項政策,則不會自動安裝任何應用程式或擴充功能,且使用者可以在 <ph name="PRODUCT_NAME" /> 中解除安裝任何應用程式或擴充功能。 + + 請注意,這項政策不適用於無痕模式。</translation> <translation id="8274603902181597201">清除使用者的 eCryptfs 主目錄,改用全新的 Ext4 加密主目錄。</translation> <translation id="8285435910062771358">已啟用全螢幕放大鏡</translation> <translation id="8288199156259560552">啟用 Android Google 定位服務</translation> @@ -2864,6 +2965,7 @@ 這項政策不適用於未加入 <ph name="MS_AD_NAME" /> 網域的 Windows 執行個體。</translation> <translation id="9035964157729712237">要從黑名單上移除的擴充功能 ID</translation> <translation id="9042911395677044526">允許將網路設定按照使用者套用至安裝了 <ph name="PRODUCT_OS_NAME" /> 的裝置。本網路設定是由開放網路設定格式 (網址為:<ph name="ONC_SPEC_URL" />) 所定義的 JSON 格式字串。</translation> +<translation id="9077227880520270584">裝置本機帳戶自動登入計時器</translation> <translation id="9084985621503260744">指定會影響電源管理的視訊活動</translation> <translation id="9088433379343318874">啟用受監管的使用者內容提供者</translation> <translation id="9088444059179765143">設定自動偵測時區方式</translation>
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index b5451b9..fc7f0f5 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -1012,7 +1012,8 @@ } void PrintRenderFrameHelper::DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) { + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) { is_loading_ = true; }
diff --git a/components/printing/renderer/print_render_frame_helper.h b/components/printing/renderer/print_render_frame_helper.h index 554e926..ff6423d51 100644 --- a/components/printing/renderer/print_render_frame_helper.h +++ b/components/printing/renderer/print_render_frame_helper.h
@@ -179,8 +179,8 @@ // RenderFrameObserver implementation. void OnDestruct() override; - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void DidFailProvisionalLoad(const blink::WebURLError& error) override; void DidFinishLoad() override; void ScriptedPrint(bool user_initiated) override;
diff --git a/components/strings/components_chromium_strings_mr.xtb b/components/strings/components_chromium_strings_mr.xtb index 90a256d..8ef67b2 100644 --- a/components/strings/components_chromium_strings_mr.xtb +++ b/components/strings/components_chromium_strings_mr.xtb
@@ -15,7 +15,7 @@ <ph name="PROXIES_TITLE" /> > LAN सेटिंग्ज - वर जा आणि "आपल्या LAN साठी एक प्रॉक्सी सर्व्हर वापरा" चेकबॉक्स ची निवड रद्द करा.</translation> + वर जा आणि "तुमच्या LAN साठी एक प्रॉक्सी सर्व्हर वापरा" चेकबॉक्स ची निवड रद्द करा.</translation> <translation id="48558539577516920">आपल्या फायरवॉल किंवा अँटीव्हायरस सेटिंग्जमधील नेटवर्कवर प्रवेश करण्यास Chromium ला अनुमती द्या.</translation> <translation id="580822234363523061">Chromium मेनू >
diff --git a/components/strings/components_google_chrome_strings_mr.xtb b/components/strings/components_google_chrome_strings_mr.xtb index f1ca0ffa..426b624 100644 --- a/components/strings/components_google_chrome_strings_mr.xtb +++ b/components/strings/components_google_chrome_strings_mr.xtb
@@ -6,7 +6,7 @@ <translation id="2147651015520127414"><ph name="ISSUER" /> ने या वेबसाइटचे सर्टिफिकेट जारी केले हे Chrome ने पडताळले.</translation> <translation id="2874156562296220396"><ph name="BEGIN_LINK_CHROMIUM" />Chromium<ph name="END_LINK_CHROMIUM" /> मुक्त-स्रोत प्रोजेक्ट आणि अन्य <ph name="BEGIN_LINK_OSS" />मुक्त स्रोत सॉफ्टवेअर<ph name="END_LINK_OSS" /> द्वारे Google Chrome ची निर्मिती करणे शक्य झाले.</translation> <translation id="3140883423282498090">पुढील वेळी आपण Google Chrome पुन्हा लाँच केल्यानंतर आपले बदल प्रभावी होतील.</translation> -<translation id="3444832043240812445">हे पृष्ठ आपण <ph name="BEGIN_LINK" />कॅश अहवाल सक्षम<ph name="END_LINK" /> केल्यास केवळ आपल्याला अलीकडील क्रॅशची माहिती दर्शविते.</translation> +<translation id="3444832043240812445">हे पेज तुम्ही <ph name="BEGIN_LINK" />कॅशे अहवाल सक्षम<ph name="END_LINK" /> केल्यास केवळ तुम्हाला अलीकडील क्रॅशची माहिती दर्शवते.</translation> <translation id="3875312571075912821">आपल्या फायरवॉल किंवा अँटीव्हायरस सेटिंग्जमधील नेटवर्कवर प्रवेश करण्यास Chrome ला अनुमती द्या.</translation> <translation id="4010643444566880169">Chrome OS ने त्याचे प्रारंभीचे सेटअप पूर्ण केले नाही.</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 279378fb..b42c9c88 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">ফোন নম্বর আবশ্যক</translation> <translation id="1517500485252541695">ক্রেডিট এবং ডেবিট কার্ড গ্রহণ করা হয়</translation> <translation id="1519264250979466059">নির্মাণের তারিখ</translation> +<translation id="1521655867290435174">Google পত্রক</translation> <translation id="1527263332363067270">সংযোগের জন্য অপেক্ষা করা হচ্ছে...</translation> <translation id="1532118530259321453">এই পৃষ্ঠায় এটি দেখানো হচ্ছে</translation> <translation id="153384715582417236">এখন এই পর্যন্তই</translation> @@ -273,6 +274,7 @@ <translation id="2781030394888168909">MacOS এক্সপোর্ট করুন</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">সংযোগ পুনঃসেট করা হয়েছে৷</translation> +<translation id="2785008241190445880">বুকমার্ক সরিয়ে দেওয়া হয়েছে</translation> <translation id="2788784517760473862">ক্রেডিট কার্ড গ্রহণ করা হয়</translation> <translation id="2794233252405721443">সাইট অবরুদ্ধ করা হয়েছে</translation> <translation id="2799020568854403057">যে সাইট খুলতে চলেছেন সেটিতে ক্ষতিকারক অ্যাপ আছে</translation> @@ -540,6 +542,7 @@ <translation id="4646534391647090355">আমাকে এখনই সেখানে নিয়ে চলুন</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা শংসাপত্রে কিছু ত্রুটি আছে। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation> +<translation id="467809019005607715">Google স্লাইড্স</translation> <translation id="4690462567478992370">কোনো অবৈধ শংসাপত্র ব্যবহার করা বন্ধ করুন</translation> <translation id="4690954380545377795">আপনি নিজের Google অ্যাকাউন্টে অ্যাক্সেস হারাতে পারেন বা আপনার পরিচয় চুরি হতেই পারে। Chrome এখনই আপনার পাসওয়ার্ড পরিবর্তন করার আর্জি জানাচ্ছে।</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -645,6 +648,7 @@ <translation id="5324080437450482387">পরিচিতির তথ্য বেছে নিন</translation> <translation id="5327248766486351172">নাম</translation> <translation id="5332219387342487447">শিপিংয়ের মাধ্যম</translation> +<translation id="5344579389779391559">এই পৃষ্ঠাতে আপনাকে চার্জ করা হতে পারে</translation> <translation id="5355557959165512791">ওয়েবসাইটটির শংসাপত্র তুলে নেওয়ার কারণে আপনি এখন <ph name="SITE" /> এ যেতে পারবেন না। নেটওয়ার্ক ত্রুটি এবং আক্রমণ সাধারণত সাময়িকভাবে হয়, তাই এই পৃষ্ঠাটি সম্ভবত পরে কাজ করবে।</translation> <translation id="536296301121032821">নীতি সেটিংস সংরক্ষণ করতে ব্যর্থ হয়েছে</translation> <translation id="5371425731340848620">কার্ড আপডেট করুন</translation> @@ -740,6 +744,7 @@ <translation id="6015796118275082299">বছর</translation> <translation id="6016158022840135739">{COUNT,plural, =1{পৃষ্ঠা ১}one{পৃষ্ঠা #}other{পৃষ্ঠা #}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />-এ সক্রিয় থাকা আক্রমণকারীরা এমন প্রতারণামূলক অ্যাপ ইনস্টল করে দিতে পারে যেগুলি অন্যান্য আপের থেকে আলাদা করা যায় না অথবা যেগুলি এমন ডেটা সংগ্রহ করে যা দিয়ে আপনার উপরে নজর রাখা যাবে। <ph name="BEGIN_LEARN_MORE_LINK" />আরও জানুন<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Chrome-কে আপনার করে নিন</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (সিঙ্ক হয়েছে)</translation> <translation id="6027201098523975773">একটি নাম লিখুন</translation> <translation id="6039846035001940113">যদি সমস্যাটি চলতে থাকে তবে সাইট মালিকের সাথে যোগাযোগ করুন।</translation> @@ -748,6 +753,7 @@ <translation id="6047927260846328439">এই কন্টেন্ট প্রতারণার মাধ্যমে আপনাকে দিয়ে কোনও সফ্টওয়্যার ইনস্টল করাতে অথবা আপনার ব্যক্তিগত তথ্য জেনে নেওয়ার চেষ্টা করতে পারে। <ph name="BEGIN_LINK" />তবুও এটি দেখতে চাই<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ওয়েবসাইটটি পিন করা শংসাপত্র ব্যবহার করার কারণে আপনি এখন <ph name="SITE" /> এ যেতে পারবেন না। নেটওয়ার্ক ত্রুটি এবং আক্রমণ সাধারণত সাময়িকভাবে হয়, তাই এই পৃষ্ঠাটি সম্ভবত পরে কাজ করবে।</translation> <translation id="6059925163896151826">USB ডিভাইসগুলি</translation> +<translation id="6060991652695587932">দ্রুত অ্যাক্সেসের জন্য আপনার ইমেল পরিষেবাটি বেছে নিন</translation> <translation id="6071091556643036997">নীতির এই ধরনটি ব্যবহার করা যাবে না।</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{সব ডিভাইস জুড়ে দ্রুত চেক-আউটের জন্য এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হবে।}one{সব ডিভাইস জুড়ে দ্রুত চেক-আউটের জন্য এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হবে।}other{সব ডিভাইস জুড়ে দ্রুত চেক-আউটের জন্য এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হবে।}}</translation> <translation id="6080696365213338172">প্রশাসকের দ্বারা সরবরাহ করা শংসাপত্রের ব্যবহার করে আপনি সামগ্রী ব্যবহার করেছেন৷ <ph name="DOMAIN" /> কে আপনি যে ডেটা সরবরাহ করেন তা আপনার প্রশাসক বাধা দিতে পারে৷</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">না</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">ম্যানেজ করা সেশন ওভাররাইড</translation> <translation id="7390545607259442187">কার্ড নিশ্চিত করুন</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>আপনার Windows কম্পিউটারে Superfish সফ্টওয়্যারটি ইনস্টল করা থাকলে এই সমস্যাটি হবে।</p> @@ -994,6 +1001,7 @@ <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' এর জন্য <ph name="NUMBER_OF_RESULTS" />টি <ph name="SEARCH_RESULTS" /> খুঁজে পাওয়া গেছে</translation> <translation id="7818867226424560206">নীতি পরিচালনা</translation> <translation id="782886543891417279">আপনি যে (<ph name="WIFI_NAME" />) Wi-Fiটি ব্যবহার করছেন সেটির জন্য অপনাকে এটির লগ ইন পৃষ্ঠাতে যেতে হতে পরে৷</translation> +<translation id="7835178595033117206">বুকমার্ক সরানো হয়েছে</translation> <translation id="785549533363645510">আপনি অবশ্য অদৃশ্য থাকবেন না। ছদ্মবেশী মোডে গেলেও তা আপনার নিয়োগকর্তা, আপনার ইন্টারনেট পরিষেবা প্রদানকারী অথবা আপনার পরিদর্শন করা ওয়েবসাইট থেকে আপনার ব্রাউজিংকে আড়াল করবে না।</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">সাইট ছেড়ে যাবেন?</translation> @@ -1129,6 +1137,7 @@ <translation id="8874824191258364635">একটি সঠিক কার্ড নম্বর লিখুন</translation> <translation id="8876793034577346603">নেটওয়ার্ক কনফিগারেশন বিশ্লেষণ করতে ব্যর্থ হয়েছে৷</translation> <translation id="8891727572606052622">প্রক্সি মোড অবৈধ৷</translation> +<translation id="8892964541482452187">ট্যাব সুইচ বোতাম, এই ট্যাবে পরিবর্তন করতে এন্টার প্রেস করুন</translation> <translation id="8903921497873541725">জুম বাড়ান</translation> <translation id="8931333241327730545">আপনি কি আপনার Google অ্যাকাউন্টে এই কার্ড সংরক্ষণ করতে চান?</translation> <translation id="8932102934695377596">আপনার ঘড়ির সময় পিছিয়ে রয়েছে</translation> @@ -1154,6 +1163,7 @@ <translation id="9035022520814077154">নিরাপত্তা ত্রুটি</translation> <translation id="9038649477754266430">পৃষ্ঠা আরও দ্রুত লোড করার জন্য কোনো পূর্বাভাষ পরিষেবা ব্যবহার করুন</translation> <translation id="9039213469156557790">উপরন্তু, এই পৃষ্ঠাতে অন্যান্য সংস্থান অন্তর্ভুক্ত রয়েছে যা নিরাপদ নয়৷ এই সংস্থানগুলি ট্রানজিটের সময় অন্যরা দেখতে পাবে এবং পৃষ্ঠাটির আচরণ পরিবর্তন করার জন্য কোনো আক্রমণকারী এর পরিবর্তন করতে পারেন৷</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">আপনি <ph name="DOMAIN" />-এ পৌছানোর প্রয়াস করছেন, কিন্তু সার্ভার একটি অবৈধ শংসাপত্র উপস্থাপন করেছে|</translation> <translation id="9050666287014529139">পাসফ্রেজ</translation> <translation id="9065203028668620118">সম্পাদনা</translation> @@ -1177,6 +1187,7 @@ <translation id="9170848237812810038">&পূর্বাবস্থায় ফিরুন</translation> <translation id="9171296965991013597">অ্যাপ থেকে বেরিয়ে আসতে চান?</translation> <translation id="917450738466192189">সার্ভারের শংসাপত্র অকার্যকর৷</translation> +<translation id="9183302530794969518">Google দস্তাবেজ</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> একটি অসমর্থিত প্রোটোকল ব্যবহার করে।</translation> <translation id="9205078245616868884">আপনার ডেটা আপনার সিঙ্ক পাসফ্রেজ দিয়ে এনক্রিপ্ট করা হয়েছে। সিঙ্ক শুরু করার জন্য এটি লিখুন।</translation> <translation id="9207861905230894330">নিবন্ধ যোগ করতে ব্যর্থ হয়েছে৷</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb index e1a4eb5..c6ff8f88f 100644 --- a/components/strings/components_strings_el.xtb +++ b/components/strings/components_strings_el.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Απαιτείται αριθμός τηλεφώνου</translation> <translation id="1517500485252541695">Αποδεκτές πιστωτικές και χρεωστικές κάρτες</translation> <translation id="1519264250979466059">Ημερομηνία κατασκευής</translation> +<translation id="1521655867290435174">Υπολογιστικά φύλλα Google</translation> <translation id="1527263332363067270">Αναμονή για σύνδεση…</translation> <translation id="1532118530259321453">Αυτή η σελίδα λέει</translation> <translation id="153384715582417236">Αυτά προς το παρόν</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Εξαγωγή για MacOS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">Έγινε επαναφορά της σύνδεσης.</translation> +<translation id="2785008241190445880">Ο σελιδοδείκτης αντικαταστάθηκε</translation> <translation id="2788784517760473862">Αποδεκτές πιστωτικές κάρτες</translation> <translation id="2794233252405721443">Ο ιστότοπος έχει αποκλειστεί</translation> <translation id="2799020568854403057">Ο ιστότοπος που πρόκειται να επισκεφτείτε περιέχει επιβλαβείς εφαρμογές</translation> @@ -540,6 +542,7 @@ <translation id="4646534391647090355">Μετάβαση εκεί τώρα</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Ο διακομιστής δεν κατάφερε να αποδείξει ότι είναι <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του περιέχει σφάλματα. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation> +<translation id="467809019005607715">Παρουσιάσεις Google</translation> <translation id="4690462567478992370">Διακοπή χρήσης μη έγκυρου πιστοποιητικού</translation> <translation id="4690954380545377795">Μπορεί να χάσετε την πρόσβαση στον Λογαριασμό σας Google ή να πέσετε θύμα κλοπής στοιχείων ταυτότητας. Το Chrome συνιστά να αλλάξετε τον κωδικό πρόσβασής σας τώρα.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -645,6 +648,7 @@ <translation id="5324080437450482387">Επιλογή στοιχείων επικοινωνίας</translation> <translation id="5327248766486351172">Όνομα</translation> <translation id="5332219387342487447">Μέθοδος αποστολής</translation> +<translation id="5344579389779391559">Αυτή η σελίδα μπορεί να προσπαθήσει να σας χρεώσει</translation> <translation id="5355557959165512791">Δεν μπορείτε να επισκεφτείτε τον ιστότοπο <ph name="SITE" /> αυτήν τη στιγμή επειδή το πιστοποιητικό έχει ανακληθεί. Τα σφάλματα δικτύου και οι επιθέσεις είναι συνήθως προσωρινά, συνεπώς αυτή η σελίδα πιθανότατα θα λειτουργήσει αργότερα.</translation> <translation id="536296301121032821">Αποτυχία αποθήκευσης ρυθμίσεων πολιτικής</translation> <translation id="5371425731340848620">Ενημέρωση κάρτας</translation> @@ -740,6 +744,7 @@ <translation id="6015796118275082299">Έτος</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1 σελίδα}other{# σελίδες}}</translation> <translation id="6017850046339264347">Οι εισβολείς στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> θα μπορούσαν να εγκαταστήσουν παραπλανητικές εφαρμογές που προσποιούνται ότι είναι κάτι άλλο ή συλλέγουν δεδομένα τα οποία μπορεί να χρησιμοποιηθούν για την παρακολούθησή σας. <ph name="BEGIN_LEARN_MORE_LINK" />Μάθετε περισσότερα<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Προσαρμόστε το Chrome για εσάς</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (συγχρονισμένο)</translation> <translation id="6027201098523975773">Εισαγωγή ονόματος</translation> <translation id="6039846035001940113">Εάν το πρόβλημα παραμείνει, επικοινωνήστε με τον κάτοχο του ιστοτόπου.</translation> @@ -748,6 +753,7 @@ <translation id="6047927260846328439">Αυτό το περιεχόμενο μπορεί να προσπαθήσει να σας εξαπατήσει έτσι ώστε να εγκαταστήσετε λογισμικό ή να αποκαλύψετε προσωπικά στοιχεία. <ph name="BEGIN_LINK" />Εμφάνιση ούτως ή άλλως<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Δεν μπορείτε να επισκεφτείτε το <ph name="SITE" /> αυτήν τη στιγμή επειδή ο ιστότοπος χρησιμοποιεί certificate pinning (κλείδωμα πιστοποιητικών). Τα σφάλματα δικτύου και οι επιθέσεις είναι συνήθως προσωρινά, συνεπώς αυτή η σελίδα πιθανότατα θα λειτουργήσει αργότερα.</translation> <translation id="6059925163896151826">Συσκευές USB</translation> +<translation id="6060991652695587932">Επιλέξτε την υπηρεσία ηλεκτρονικού ταχυδρομείου σας γρήγορη πρόσβαση</translation> <translation id="6071091556643036997">Ο τύπος πολιτικής δεν είναι έγκυρος.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Αυτή η κάρτα θα αποθηκευτεί στον Λογαριασμό σας Google προκειμένου να ολοκληρώνετε τις αγορές σας πιο γρήγορα στις συσκευές που χρησιμοποιείτε.}other{Αυτές οι κάρτες θα αποθηκευτούν στον Λογαριασμό σας Google προκειμένου να ολοκληρώνετε τις αγορές σας πιο γρήγορα στις συσκευές που χρησιμοποιείτε.}}</translation> <translation id="6080696365213338172">Η πρόσβασή σας στο περιεχόμενο πραγματοποιήθηκε με τη χρήση ενός πιστοποιητικού που παρασχέθηκε από διαχειριστή. Τα δεδομένα που παρέχετε στο <ph name="DOMAIN" /> μπορεί να ελέγχονται από το διαχειριστή σας.</translation> @@ -905,6 +911,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">Όχι</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Παράκαμψη διαχειριζόμενης περιόδου σύνδεσης</translation> <translation id="7390545607259442187">Επιβεβαίωση κάρτας</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>Το σφάλμα θα εμφανιστεί, εάν έχετε λογισμικό Superfish στον υπολογιστή σας με Windows.</p> @@ -995,6 +1002,7 @@ <translation id="7815407501681723534">Βρέθηκαν <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> για τον όρο αναζήτησης "<ph name="SEARCH_STRING" />"</translation> <translation id="7818867226424560206">Διαχείριση πολιτικών</translation> <translation id="782886543891417279">Το Wi-Fi που χρησιμοποιείτε (<ph name="WIFI_NAME" />) ενδέχεται να σας ζητήσει να επισκεφτείτε τη σελίδα σύνδεσής του.</translation> +<translation id="7835178595033117206">Ο σελιδοδείκτης καταργήθηκε</translation> <translation id="785549533363645510">Ωστόσο, δεν είστε αόρατος/η. Με την κατάσταση ανώνυμης περιήγησης δεν μπορείτε να αποκρύψετε τα στοιχεία της περιήγησής σας από τους εργοδότες σας, τον πάροχο υπηρεσιών διαδικτύου που χρησιμοποιείτε ή τους ιστότοπους που επισκέπτεστε.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">Θέλετε να αποχωρήσετε από τον ιστότοπο;</translation> @@ -1131,6 +1139,7 @@ <translation id="8874824191258364635">Εισαγάγετε έναν έγκυρο αριθμό κάρτας</translation> <translation id="8876793034577346603">Αποτυχία ανάλυσης της διαμόρφωσης δικτύου</translation> <translation id="8891727572606052622">Μη έγκυρη λειτουργία διακομιστή μεσολάβησης.</translation> +<translation id="8892964541482452187">Κουμπί εναλλαγής καρτέλας, πατήστε Enter για εναλλαγή σε αυτήν την καρτέλα</translation> <translation id="8903921497873541725">Μεγέθυνση</translation> <translation id="8931333241327730545">Θέλετε να αποθηκεύσετε αυτήν την κάρτα στο Λογαριασμό σας Google;</translation> <translation id="8932102934695377596">Το ρολόι σας πάει πίσω</translation> @@ -1156,6 +1165,7 @@ <translation id="9035022520814077154">Σφάλμα ασφάλειας</translation> <translation id="9038649477754266430">Χρήση μιας υπηρεσίας πρόβλεψης για ταχύτερη φόρτωση σελίδων</translation> <translation id="9039213469156557790">Επίσης, αυτή η σελίδα περιέχει άλλους πόρους, οι οποίοι δεν είναι ασφαλείς. Αυτοί οι πόροι μπορούν να προβληθούν από άλλους χρήστες κατά τη μετάβαση και μπορούν να τροποποιηθούν από έναν εισβολέα ώστε να αλλάξει η συμπεριφορά της σελίδας.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Επιχειρήσατε να μεταβείτε στον <ph name="DOMAIN" /> , αλλά ο διακομιστής παρουσίασε ένα μη έγκυρο πιστοποιητικό.</translation> <translation id="9050666287014529139">Φράση πρόσβασής σας</translation> <translation id="9065203028668620118">Επεξεργασία</translation> @@ -1179,6 +1189,7 @@ <translation id="9170848237812810038">Αναί&ρεση</translation> <translation id="9171296965991013597">Αποχώρηση από την εφαρμογή;</translation> <translation id="917450738466192189">Το πιστοποιητικό του διακομιστή δεν είναι έγκυρο.</translation> +<translation id="9183302530794969518">Έγγραφα Google</translation> <translation id="9183425211371246419">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> χρησιμοποιεί μη υποστηριζόμενο πρωτόκολλο.</translation> <translation id="9205078245616868884">Τα δεδομένα σας είναι κρυπτογραφημένα με τη δική σας φράση πρόσβασης συγχρονισμού. Πληκτρολογήστε την για να ξεκινήσει ο συγχρονισμός.</translation> <translation id="9207861905230894330">Αποτυχία προσθήκης άρθρου.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index a168a16..6e73c4641 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Se requiere el número de teléfono</translation> <translation id="1517500485252541695">Tarjetas de débito y crédito aceptadas</translation> <translation id="1519264250979466059">Fecha de compilación</translation> +<translation id="1521655867290435174">Hojas de cálculo de Google</translation> <translation id="1527263332363067270">Esperando conexión…</translation> <translation id="1532118530259321453">Esta página dice</translation> <translation id="153384715582417236">Eso es todo por ahora</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Exportar para Mac OS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">Se ha restablecido la conexión.</translation> +<translation id="2785008241190445880">Se reemplazó un favorito</translation> <translation id="2788784517760473862">Tarjetas de crédito aceptadas</translation> <translation id="2794233252405721443">Sitio bloqueado</translation> <translation id="2799020568854403057">El siguiente sitio incluye apps dañinas</translation> @@ -540,6 +542,7 @@ <translation id="4646534391647090355">Ir ahora</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Este servidor no pudo probar que su dominio es <ph name="DOMAIN" />; el certificado de seguridad contiene errores. Es posible que esto se deba a una configuración incorrecta o a que un atacante interceptó la conexión.</translation> +<translation id="467809019005607715">Presentaciones de Google</translation> <translation id="4690462567478992370">Dejar de usar un certificado no válido</translation> <translation id="4690954380545377795">Es posible que hayas perdido el acceso a tu cuenta de Google o sufrido un robo de identidad. Chrome te recomienda que cambies la contraseña ahora.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -645,6 +648,7 @@ <translation id="5324080437450482387">Seleccionar información de contacto</translation> <translation id="5327248766486351172">Nombre</translation> <translation id="5332219387342487447">Método de envío</translation> +<translation id="5344579389779391559">Es posible que esta página intente cobrarte dinero</translation> <translation id="5355557959165512791">No puedes visitar <ph name="SITE" /> ahora porque este certificado se revocó. Los ataques y errores de red suelen ser temporales, por lo que es posible que esta página funcione más tarde.</translation> <translation id="536296301121032821">Error al almacenar la configuración de la política</translation> <translation id="5371425731340848620">Actualizar tarjeta</translation> @@ -740,6 +744,7 @@ <translation id="6015796118275082299">Año</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}other{Página #}}</translation> <translation id="6017850046339264347">Es posible que los atacantes que se encuentran en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> instalen apps engañosas que se hagan pasar por otro tipo de contenido o que recopilen datos que se usen para rastrearte. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Personaliza Chrome a tu medida</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Ingresa un nombre</translation> <translation id="6039846035001940113">Si el problema persiste, comunícate con el propietario del sitio.</translation> @@ -748,6 +753,7 @@ <translation id="6047927260846328439">Es posible que este contenido trate de engañarte para que instales software o reveles información personal. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="6051221802930200923">No puedes visitar <ph name="SITE" /> ahora porque el sitio web usa la fijación de certificados. Los ataques y errores de red suelen ser temporales, por lo que es posible que esta página funcione más tarde.</translation> <translation id="6059925163896151826">Dispositivos USB</translation> +<translation id="6060991652695587932">Crea un acceso rápido para tu servicio de correo electrónico</translation> <translation id="6071091556643036997">El tipo de política no es válido.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Esta tarjeta se guardará en tu cuenta de Google para que puedas confirmar compras en diferentes dispositivos de manera más rápida.}other{Estas tarjetas se guardarán en tu cuenta de Google para que puedas confirmar compras en diferentes dispositivos de manera más rápida.}}</translation> <translation id="6080696365213338172">Accediste al contenido mediante un certificado proporcionado por el administrador. Los datos que proporciones a <ph name="DOMAIN" /> pueden ser interceptados por tu administrador.</translation> @@ -905,6 +911,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">No</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Anulación de sesión administrada</translation> <translation id="7390545607259442187">Confirmar tarjeta</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>Se muestra este error si tienes el software Superfish en tu computadora con Windows.</p> @@ -995,6 +1002,7 @@ <translation id="7815407501681723534">Se encontraron <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> para "<ph name="SEARCH_STRING" />"</translation> <translation id="7818867226424560206">Administración de políticas</translation> <translation id="782886543891417279">Es posible que la red Wi-Fi que estás usando (<ph name="WIFI_NAME" />) requiera que visites la página de acceso.</translation> +<translation id="7835178595033117206">Se quitó el favorito</translation> <translation id="785549533363645510">Sin embargo, no eres invisible. El modo de navegación de incógnito no oculta tu navegación de tu empleador, de tu proveedor de servicios de Internet, ni de los sitios web que visitas.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">¿Deseas abandonar el sitio?</translation> @@ -1131,6 +1139,7 @@ <translation id="8874824191258364635">Ingresa un número de tarjeta válido</translation> <translation id="8876793034577346603">No se pudo analizar la configuración de red.</translation> <translation id="8891727572606052622">Modo proxy no válido</translation> +<translation id="8892964541482452187">Botón para cambiar de pestaña, presiona Intro para cambiar a esta pestaña</translation> <translation id="8903921497873541725">Acercar</translation> <translation id="8931333241327730545">¿Quieres guardar esta tarjeta en tu cuenta de Google?</translation> <translation id="8932102934695377596">El reloj está atrasado</translation> @@ -1156,6 +1165,7 @@ <translation id="9035022520814077154">Error de seguridad</translation> <translation id="9038649477754266430">Utilizar un servicio de predicción para cargar las páginas más rápido</translation> <translation id="9039213469156557790">Además, esta página incluye otros recursos que no son seguros. Otras personas pueden ver estos recursos mientras se encuentran en tránsito, y un atacante puede modificarlos para cambiar el funcionamiento de la página.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor presentó un certificado no válido.</translation> <translation id="9050666287014529139">Frase de contraseña</translation> <translation id="9065203028668620118">Editar</translation> @@ -1179,6 +1189,7 @@ <translation id="9170848237812810038">&Deshacer</translation> <translation id="9171296965991013597">¿Deseas salir de la app?</translation> <translation id="917450738466192189">El certificado del servidor no es válido.</translation> +<translation id="9183302530794969518">Documentos de Google</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> utiliza un protocolo no compatible.</translation> <translation id="9205078245616868884">Tus datos están encriptados con tu frase de contraseña para sincronización. Debes ingresarla para iniciar la sincronización.</translation> <translation id="9207861905230894330">Error al agregar artículo</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index ac984ca..d3e9aee 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Número de teléfono requerido</translation> <translation id="1517500485252541695">Tarjetas de débito y crédito aceptadas</translation> <translation id="1519264250979466059">Fecha de compilación</translation> +<translation id="1521655867290435174">Hojas de cálculo de Google</translation> <translation id="1527263332363067270">Esperando conexión…</translation> <translation id="1532118530259321453">Esta página dice</translation> <translation id="153384715582417236">Eso es todo por ahora</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Exportar para MacOS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">Se ha restablecido la conexión.</translation> +<translation id="2785008241190445880">Marcador sustituido</translation> <translation id="2788784517760473862">Tarjetas de crédito aceptadas</translation> <translation id="2794233252405721443">Sito web bloqueado</translation> <translation id="2799020568854403057">El sitio web al que vas a acceder contiene aplicaciones dañinas</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">Ir allí ahora</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" />, su certificado de seguridad contiene errores. El problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation> +<translation id="467809019005607715">Presentaciones de Google</translation> <translation id="4690462567478992370">Dejar de utilizar un certificado no válido</translation> <translation id="4690954380545377795">Podrías perder el acceso a tu cuenta de Google o experimentar problemas de suplantación de identidad. Chrome te recomienda que cambies la contraseña ahora.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">Seleccionar información de contacto</translation> <translation id="5327248766486351172">Nombre</translation> <translation id="5332219387342487447">Método de envío</translation> +<translation id="5344579389779391559">Es posible que esta página intente aplicar algún cargo</translation> <translation id="5355557959165512791">No puedes acceder a <ph name="SITE" /> en este momento porque su certificado se ha revocado. Los ataques y los errores de red suelen ser temporales, por lo que es probable que esta página funcione más tarde.</translation> <translation id="536296301121032821">Error al almacenar la configuración de la política</translation> <translation id="5371425731340848620">Actualizar tarjeta</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">Año</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}other{Página #}}</translation> <translation id="6017850046339264347">Se ha detectado la presencia de atacantes en el sitio web <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />. Estos podrían instalar aplicaciones engañosas que se hagan pasar por otra persona o recojan datos que podrían usarse para realizar un seguimiento de tu actividad. <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Personaliza Chrome</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Introduce un nombre</translation> <translation id="6039846035001940113">Si el problema persiste, ponte en contacto con el propietario del sitio web.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">Es posible que este contenido intente engañarte para que instales software o reveles información personal. <ph name="BEGIN_LINK" />Mostrar de todos modos<ph name="END_LINK" /></translation> <translation id="6051221802930200923">No puedes acceder a <ph name="SITE" /> en este momento porque el sitio web utiliza la fijación de certificados. Los ataques y los errores de red suelen ser temporales, por lo que es probable que esta página funcione más tarde.</translation> <translation id="6059925163896151826">Dispositivos USB</translation> +<translation id="6060991652695587932">Elige un servicio de correo electrónico para crear un acceso rápido</translation> <translation id="6071091556643036997">El tipo de política no es válido.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Esta tarjeta se guardará en tu cuenta de Google para tramitar compras de forma más rápida en todos los dispositivos.}other{Estas tarjetas se guardarán en tu cuenta de Google para tramitar compras de forma más rápida en todos los dispositivos.}}</translation> <translation id="6080696365213338172">Has accedido al contenido mediante un certificado proporcionado por el administrador. Los datos que proporciones a <ph name="DOMAIN" /> pueden ser interceptados por tu administrador.</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">No</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Anulación de la sesión administrada</translation> <translation id="7390545607259442187">Confirmar tarjeta</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>Este error se muestra si tu ordenador Windows tiene software SuperFish.</p> @@ -994,6 +1001,7 @@ <translation id="7815407501681723534">Se han encontrado <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> de <ph name="SEARCH_STRING" /></translation> <translation id="7818867226424560206">Gestión de políticas</translation> <translation id="782886543891417279">La red Wi-Fi que estás utilizando (<ph name="WIFI_NAME" />) puede requerir que accedas a su página de inicio de sesión.</translation> +<translation id="7835178595033117206">Marcador eliminado</translation> <translation id="785549533363645510">Ten en cuenta que tus acciones no serán totalmente invisibles. El uso del modo de 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> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> <translation id="7862185352068345852">¿Quieres salir del sitio web?</translation> @@ -1129,6 +1137,7 @@ <translation id="8874824191258364635">Introduce un número de tarjeta válido</translation> <translation id="8876793034577346603">No se ha podido analizar la configuración de red.</translation> <translation id="8891727572606052622">El modo de proxy no es válido.</translation> +<translation id="8892964541482452187">Botón de cambio de pestaña; pulsa Intro para cambiar a esta pestaña</translation> <translation id="8903921497873541725">Acercar</translation> <translation id="8931333241327730545">¿Quieres guardar esta tarjeta en tu cuenta de Google?</translation> <translation id="8932102934695377596">Tu reloj está atrasado</translation> @@ -1154,6 +1163,7 @@ <translation id="9035022520814077154">Error de seguridad</translation> <translation id="9038649477754266430">Utilizar un servicio de predicciones para que las páginas se carguen más rápido</translation> <translation id="9039213469156557790">Además, esta página incluye otros recursos que no son seguros. Otros usuarios pueden acceder a estos recursos mientras están en circulación y un atacante puede modificarlos para cambiar el comportamiento de la página.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" />: <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Has intentado acceder a <ph name="DOMAIN" />, pero el servidor ha presentado un certificado no válido.</translation> <translation id="9050666287014529139">Frase de contraseña</translation> <translation id="9065203028668620118">Editar</translation> @@ -1177,6 +1187,7 @@ <translation id="9170848237812810038">&Deshacer</translation> <translation id="9171296965991013597">¿Quieres salir de la aplicación?</translation> <translation id="917450738466192189">El certificado del servidor no es válido.</translation> +<translation id="9183302530794969518">Documentos de Google</translation> <translation id="9183425211371246419">La página <ph name="HOST_NAME" /> utiliza un protocolo no admitido.</translation> <translation id="9205078245616868884">Tus datos se han cifrado con tu frase de contraseña de sincronización. Introdúcela para iniciar la sincronización.</translation> <translation id="9207861905230894330">Se ha producido un error al añadir el artículo.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 266ded7..f587b0f 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">ફોન નંબર આવશ્યક</translation> <translation id="1517500485252541695">સ્વીકૃત ક્રેડિટ અને ડેબિટ કાર્ડ</translation> <translation id="1519264250979466059">નિર્માણ તારીખ</translation> +<translation id="1521655867290435174">Google શીટ</translation> <translation id="1527263332363067270">કનેક્શનની રાહ જોઈ રહ્યાં છીએ...</translation> <translation id="1532118530259321453">આ પેજ કહે છે કે</translation> <translation id="153384715582417236">હમણાં માટે બસ આટલું પૂરતું છે</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">MacOSના ફૉર્મેટમાં નિકાસ કરો</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">કનેક્શન ફરીથી સેટ થયું.</translation> +<translation id="2785008241190445880">બુકમાર્ક બદલ્યું</translation> <translation id="2788784517760473862">સ્વીકૃત ક્રેડિટ કાર્ડ</translation> <translation id="2794233252405721443">સાઇટ અવરોધિત કરી</translation> <translation id="2799020568854403057">સાઇટ આગળ હાનિકારક ઍપ્લિકેશનો ધરાવે છે</translation> @@ -538,6 +540,7 @@ <translation id="4646534391647090355">મને હવે ડાઉનલોડ હોમ પર લઈ જાઓ</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેના સુરક્ષા પ્રમાણપત્રમાં ભૂલો છે. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation> +<translation id="467809019005607715">Google સ્લાઇડ</translation> <translation id="4690462567478992370">અમાન્ય પ્રમાણપત્રનો ઉપયોગ કરવાનું બંધ કરો</translation> <translation id="4690954380545377795">તમે તમારા Google એકાઉન્ટનો ઍક્સેસ ગુમાવી શકો છો અથવા તમને ઓળખ ચોરીનો અનુભવ થઈ શકે છે. Chrome તમને હમણાં જ તમારો પાસવર્ડ બદલવાની ભલામણ કરે છે.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -643,6 +646,7 @@ <translation id="5324080437450482387">સંપર્કની માહિતી પસંદ કરો</translation> <translation id="5327248766486351172">નામ</translation> <translation id="5332219387342487447">શિપિંગ પદ્ધતિ</translation> +<translation id="5344579389779391559">આ પેજ કદાચ તમારી પાસેથી શુલ્ક વસૂલ કરવાનો પ્રયાસ કરી શકે છે</translation> <translation id="5355557959165512791">તમે અત્યારે <ph name="SITE" />ની મુલાકાત લઈ શકતાં નથી કારણ કે તેનું પ્રમાણપત્ર રદબાતલ કરવામાં આવ્યું છે. નેટવર્કમાં ભૂલ આવવી અને હુમલા થવા સામાન્ય રીતે અસ્થાયી હોય છે, તેથી આ પેજ સંભવિત રૂપે થોડા સમય પછી કાર્ય કરશે.</translation> <translation id="536296301121032821">નીતિ સેટિંગ્સ સ્ટોર કરવામાં નિષ્ફળ થયાં</translation> <translation id="5371425731340848620">કાર્ડને અપડેટ કરો</translation> @@ -738,6 +742,7 @@ <translation id="6015796118275082299">વર્ષ</translation> <translation id="6016158022840135739">{COUNT,plural, =1{પૃષ્ઠ 1}one{પૃષ્ઠ #}other{પૃષ્ઠ #}}</translation> <translation id="6017850046339264347">હુમલાખોરો <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> પર ભ્રામક ઍપ્લિકેશન ઇન્સ્ટૉલ કરી શકે છે જે કંઈક બીજું હોવાનો ડોળ કરે છે અથવા તમને ટ્રૅક કરવા માટે ઉપયોગમાં લઈ શકાય તેવો ડેટા એકત્રિત કરી શકે છે. <ph name="BEGIN_LEARN_MORE_LINK" />વધુ જાણો<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Chromeને તમારી જરૂરિયાત અનુરૂપ બનાવો</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (સમન્વયિત)</translation> <translation id="6027201098523975773">એક નામ દાખલ કરો</translation> <translation id="6039846035001940113">જો સમસ્યા ચાલુ રહે, તો સાઇટના માલિકનો સંપર્ક કરો.</translation> @@ -746,6 +751,7 @@ <translation id="6047927260846328439">આ કન્ટેન્ટ કદાચ સૉફ્ટવેર ઇન્સ્ટૉલ કરવા માટે અથવા વ્યક્તિગત માહિતી કઢાવવા માટે તમારી સાથે કપટ કરવાનો પ્રયાસ કરી શકે છે. <ph name="BEGIN_LINK" />છતાં પણ બતાવો<ph name="END_LINK" /></translation> <translation id="6051221802930200923">તમે અત્યારે આ <ph name="SITE" />ની મુલાકાત લઈ શકતાં નથી કારણ કે આ વેબસાઇટ પ્રમાણપત્ર પિનિંગનો ઉપયોગ કરે છે. નેટવર્કમાં ભૂલ આવવી અને હુમલા થવા સામાન્ય રીતે અસ્થાયી હોય છે, તેથી આ પેજ સંભવિત રૂપે થોડા સમય પછી કાર્ય કરશે.</translation> <translation id="6059925163896151826">USB ઉપકરણો</translation> +<translation id="6060991652695587932">ઝડપી ઍક્સેસ મેળવવા માટે તમારી ઇમેઇલ સેવા પસંદ કરો</translation> <translation id="6071091556643036997">નીતિ પ્રકાર અમાન્ય છે.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{બધાં જ ડિવાઇસ પર ઝડપી ચેકઆઉટ માટે, આ કાર્ડને તમારા Google એકાઉન્ટમાં સાચવવામાં આવશે.}one{બધાં ડિવાઇસ પર ઝડપી ચેકઆઉટ માટે, આ કાર્ડને તમારા Google એકાઉન્ટમાં સાચવવામાં આવશે.}other{બધાં ડિવાઇસ પર ઝડપી ચેકઆઉટ માટે, આ કાર્ડને તમારા Google એકાઉન્ટમાં સાચવવામાં આવશે.}}</translation> <translation id="6080696365213338172">તમે વ્યવસ્થાપક-પ્રદત્ત પ્રમાણપત્રનો ઉપયોગ કરીને કન્ટેન્ટ ઍક્સેસ કરી છે. તમે <ph name="DOMAIN" /> ને પ્રદાન કરેલ ડેટા તમારા વ્યવસ્થાપક દ્વારા ઇન્ટરસેપ્ટ થઈ શકે છે.</translation> @@ -903,6 +909,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">ના</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">મેનેજ કરાયેલ સત્ર ઓવરરાઇડ થયું હોય</translation> <translation id="7390545607259442187">કાર્ડની પુષ્ટિ કરો</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>જો તમે તમારા Windows કમ્પ્યુટર પર Superfish સૉફ્ટવેર ધરાવો છો, તો તમને આ ભૂલ દેખાશે.</p> @@ -993,6 +1000,7 @@ <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' માટે <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> મળ્યાં</translation> <translation id="7818867226424560206">નીતિનું વ્યવસ્થાપન</translation> <translation id="782886543891417279">તમે વાપરી રહેલા વાઇ-ફાઇ (<ph name="WIFI_NAME" />)ના લોગિન પેજ પર જવું પડી શકે.</translation> +<translation id="7835178595033117206">બુકમાર્ક કાઢી નાખ્યું</translation> <translation id="785549533363645510">જો કે, તમે અદૃશ્ય નથી. છુપામાં જવું તમારા નિયોક્તા, તમારા ઇન્ટરનેટ સેવા પ્રદાતા અથવા તમે મુલાકાત લો છો તે વેબસાઇટ્સથી તમારા બ્રાઉઝિંગને છુપાવતું નથી.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">સાઇટ છોડવી છે?</translation> @@ -1128,6 +1136,7 @@ <translation id="8874824191258364635">એક માન્ય કાર્ડ નંબર દાખલ કરો</translation> <translation id="8876793034577346603">નેટવર્ક ગોઠવણી વિશ્લેષિત થવામાં નિષ્ફળ થઇ.</translation> <translation id="8891727572606052622">અમાન્ય પ્રોક્સી મોડ.</translation> +<translation id="8892964541482452187">ટૅબ, સ્વિચ બટન, આ ટૅબ પર સ્વિચ કરવા માટે enter દબાવો</translation> <translation id="8903921497873541725">ઝૂમ વધારો</translation> <translation id="8931333241327730545">શું તમે આ કાર્ડ તમારા Google એકાઉન્ટમાં સાચવવા માગો છો?</translation> <translation id="8932102934695377596">તમારી ઘડિયાળ પાછળ છે</translation> @@ -1153,6 +1162,7 @@ <translation id="9035022520814077154">સુરક્ષા ભૂલ</translation> <translation id="9038649477754266430">પૃષ્ઠોને વધુ ઝડપથી લોડ કરવા માટે પૂર્વાનુમાન સેવાનો ઉપયોગ કરો</translation> <translation id="9039213469156557790">વળી, આ પૃષ્ઠમાં અન્ય એવા સાધનો છે જે સુરક્ષિત નથી. ટ્રાંઝિટમાં હોવા પર અન્ય લોકો દ્વારા આ સાધનો જોઈ શકાય છે અને પૃષ્ઠનો વ્યવહાર બદલવા માટે હુમલાખોર દ્વારા સંશોધિત કરવામાં આવી શકે છે.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">તમે <ph name="DOMAIN" /> સુધી પહોંચવાનો પ્રયાસ કર્યો, પરંતુ સર્વરે અમાન્ય પ્રમાણપત્ર પ્રસ્તુત કર્યું. </translation> <translation id="9050666287014529139">પાસફ્રેઝ</translation> <translation id="9065203028668620118">સંપાદન</translation> @@ -1176,6 +1186,7 @@ <translation id="9170848237812810038">&પૂર્વવત્ કરો</translation> <translation id="9171296965991013597">ઍપ છોડીએ?</translation> <translation id="917450738466192189">સર્વરનું પ્રમાણપત્ર અમાન્ય છે.</translation> +<translation id="9183302530794969518">Google દસ્તાવેજ</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" />, એક અસમર્થિત પ્રોટોકોલનો ઉપયોગ કરે છે.</translation> <translation id="9205078245616868884">તમારો ડેટા તમારા સમન્વયન પાસફ્રેઝ સાથે એન્ક્રિપ્ટ કરવામાં આવ્યો છે. સમન્વયન શરૂ કરવા માટે તે દાખલ કરો.</translation> <translation id="9207861905230894330">લેખ ઉમેરવામાં નિષ્ફળ થયાં.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 96122bc..5f906c49 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">電話番号が必要です</translation> <translation id="1517500485252541695">利用可能なクレジット カードとデビットカード</translation> <translation id="1519264250979466059">ビルド日</translation> +<translation id="1521655867290435174">Google スプレッドシート</translation> <translation id="1527263332363067270">接続を待機しています…</translation> <translation id="1532118530259321453">このページの内容</translation> <translation id="153384715582417236">現時点では他にありません</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Mac OS 形式でエクスポート</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">接続がリセットされました。</translation> +<translation id="2785008241190445880">ブックマークを置き換えました</translation> <translation id="2788784517760473862">利用可能なクレジット カード</translation> <translation id="2794233252405721443">サイトがブロックされています</translation> <translation id="2799020568854403057">アクセス先のサイトには有害なアプリがあります</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">今すぐ表示</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書にはエラーがあります。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation> +<translation id="467809019005607715">Google スライド</translation> <translation id="4690462567478992370">無効な証明書の使用をやめる</translation> <translation id="4690954380545377795">Google アカウントにアクセスできなくなったり、個人情報が盗まれたりする可能性があります。Chrome で今すぐパスワードを変更することをおすすめします。</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">連絡作情報を選択</translation> <translation id="5327248766486351172">名前</translation> <translation id="5332219387342487447">配送方法</translation> +<translation id="5344579389779391559">このページでは課金される恐れがあります</translation> <translation id="5355557959165512791"><ph name="SITE" /> は証明書が失効しているため、現在アクセスできません。通常、ネットワーク エラーやネットワークへの攻撃は一時的なものです。しばらくするとページにアクセスできるようになります。</translation> <translation id="536296301121032821">ポリシー設定を保存できませんでした</translation> <translation id="5371425731340848620">カードを更新</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">年</translation> <translation id="6016158022840135739">{COUNT,plural, =1{ページ 1}other{ページ #}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> では、悪意のあるユーザーによって詐欺的なアプリ(他のものに成りすましたり、ユーザーの追跡などに使用可能なデータを収集したりするアプリ)がインストールされる可能性があります。<ph name="BEGIN_LEARN_MORE_LINK" />詳細<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Chrome を独自にカスタマイズ</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" />(同期済み)</translation> <translation id="6027201098523975773">名前を入力してください</translation> <translation id="6039846035001940113">この問題が何度も発生する場合は、サイト所有者にお問い合わせください。</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">アクセス先のコンテンツは、ユーザーをだましてソフトウェアをインストールさせようとしたり、個人情報を危険にさらしたりする可能性があります。<ph name="BEGIN_LINK" />危険性を理解したうえで表示する<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> では証明書ピンニングが使用されているため、現在アクセスできません。通常、ネットワーク エラーやネットワークへの攻撃は一時的なものです。しばらくするとページにアクセスできるようになります。</translation> <translation id="6059925163896151826">USB デバイス</translation> +<translation id="6060991652695587932">メールサービスを選択すると、すばやくアクセスできるようになります</translation> <translation id="6071091556643036997">ポリシーのタイプが無効です。</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{このカードは Google アカウントに保存されます。以降は他の端末でもスピーディにお支払い手続きが可能です。}other{これらのカードは Google アカウントに保存されます。以降は他の端末でもスピーディにお支払い手続きが可能です。}}</translation> <translation id="6080696365213338172">管理者が提供する証明書を使用してコンテンツにアクセスしています。<ph name="DOMAIN" /> に提供するデータは管理者によって傍受される可能性があります。</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">いいえ</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">管理対象セッションのオーバーライド</translation> <translation id="7390545607259442187">カードの確認</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>このエラーは、Windows パソコンで Superfish ソフトウェアを使用している場合に表示されます。</p> @@ -994,6 +1001,7 @@ <translation id="7815407501681723534">「<ph name="SEARCH_STRING" />」に対し <ph name="NUMBER_OF_RESULTS" /> 件の <ph name="SEARCH_RESULTS" />が見つかりました</translation> <translation id="7818867226424560206">ポリシー管理</translation> <translation id="782886543891417279">ご利用の Wi-Fi(<ph name="WIFI_NAME" />)では、ログインページへのアクセスが必要な可能性があります。</translation> +<translation id="7835178595033117206">ブックマークを削除しました</translation> <translation id="785549533363645510">あらゆる場所に記録が一切残らないわけではありません。シークレット モードを使っても、雇用主、インターネット サービス プロバイダ、訪問先のウェブサイトに閲覧内容が知られる可能性はあります。</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> <translation id="7862185352068345852">このサイトを離れますか?</translation> @@ -1130,6 +1138,7 @@ <translation id="8874824191258364635">有効なクレジット カード番号を入力してください</translation> <translation id="8876793034577346603">ネットワーク設定を解析できませんでした。</translation> <translation id="8891727572606052622">プロキシ モードが無効です。</translation> +<translation id="8892964541482452187">タブの切り替えボタンです。Enter キーを押すとこのタブに切り替えます</translation> <translation id="8903921497873541725">拡大する</translation> <translation id="8931333241327730545">このカードを Google アカウントに保存しますか?</translation> <translation id="8932102934695377596">時計が遅れています</translation> @@ -1155,6 +1164,7 @@ <translation id="9035022520814077154">セキュリティ エラー</translation> <translation id="9038649477754266430">予測サービスを使用してページをより迅速に読み込む</translation> <translation id="9039213469156557790">加えて、このページには安全でない他のリソースが含まれています。このリソースは送信中に他のユーザーから見られる可能性があります。また、悪意のあるユーザーによって改変されページの動作が変わる可能性もあります。</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619"><ph name="DOMAIN" /> にアクセスしようとしましたが、サーバーから無効な証明書が提示されました。</translation> <translation id="9050666287014529139">パスフレーズ</translation> <translation id="9065203028668620118">編集</translation> @@ -1178,6 +1188,7 @@ <translation id="9170848237812810038">取消(&U)</translation> <translation id="9171296965991013597">アプリを終了しますか?</translation> <translation id="917450738466192189">サーバーの証明書が無効です。</translation> +<translation id="9183302530794969518">Google ドキュメント</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> ではサポートされていないプロトコルが使用されています。</translation> <translation id="9205078245616868884">データは同期パスフレーズで暗号化されます。同期を開始するには、同期パスフレーズを入力してください。</translation> <translation id="9207861905230894330">記事を追加できませんでした。</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index 3d0dbd9..50204c7 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">전화번호 필요</translation> <translation id="1517500485252541695">사용 가능한 신용카드 및 직불카드</translation> <translation id="1519264250979466059">생성 날짜</translation> +<translation id="1521655867290435174">Google 스프레드시트</translation> <translation id="1527263332363067270">연결 대기 중...</translation> <translation id="1532118530259321453">이 페이지 내용:</translation> <translation id="153384715582417236">새 콘텐츠가 없습니다.</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">MacOS 내보내기</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">연결이 재설정되었습니다.</translation> +<translation id="2785008241190445880">북마크가 변경됨</translation> <translation id="2788784517760473862">사용 가능한 신용카드</translation> <translation id="2794233252405721443">차단된 사이트</translation> <translation id="2799020568854403057">방문하려는 사이트에 유해한 앱이 있습니다.</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">지금 이동</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">이 서버가 <ph name="DOMAIN" />임을 입증할 수 없으며 서버의 보안 인증서에 오류가 있습니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다.</translation> +<translation id="467809019005607715">Google 프레젠테이션</translation> <translation id="4690462567478992370">유효하지 않은 인증서 사용 중단</translation> <translation id="4690954380545377795">Google 계정에 액세스할 수 없게 되거나 신원 도용이 발생할 수도 있습니다. 따라서 지금 비밀번호를 변경하는 것이 좋습니다.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">연락처 정보 선택</translation> <translation id="5327248766486351172">이름</translation> <translation id="5332219387342487447">배송 방법</translation> +<translation id="5344579389779391559">이 페이지에서 금액을 청구할 수 있습니다.</translation> <translation id="5355557959165512791">인증서가 취소되었기 때문에 현재 <ph name="SITE" />에 방문할 수 없습니다. 네트워크 오류와 공격은 대부분 일시적이므로 나중에 이 페이지가 정상적으로 작동할 수 있습니다.</translation> <translation id="536296301121032821">정책 설정 저장 실패</translation> <translation id="5371425731340848620">카드 업데이트</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">연도</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1페이지}other{#페이지}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />에 있는 공격자는 다른 앱인 것처럼 가장하거나 사용자를 추적하는 데 사용될 수 있는 데이터를 수집하는 사기성 앱을 설치할 수도 있습니다. <ph name="BEGIN_LEARN_MORE_LINK" />자세히 알아보기<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">나만의 Chrome 만들기</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" />(동기화됨)</translation> <translation id="6027201098523975773">이름을 입력하세요.</translation> <translation id="6039846035001940113">문제가 계속되면 사이트 소유자에게 문의하세요.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">이 콘텐츠는 사용자를 속여 소프트웨어를 설치하거나 개인정보를 유출할 수도 있습니다. <ph name="BEGIN_LINK" />표시하기<ph name="END_LINK" /></translation> <translation id="6051221802930200923">현재 <ph name="SITE" />에서 인증서 고정을 사용하기 때문에 방문할 수 없습니다. 네트워크 오류와 공격은 대부분 일시적이므로 나중에 이 페이지가 정상적으로 작동할 수 있습니다.</translation> <translation id="6059925163896151826">USB 기기</translation> +<translation id="6060991652695587932">이메일 서비스를 사용하여 빠르게 액세스합니다.</translation> <translation id="6071091556643036997">잘못된 정책 유형입니다.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{모든 기기에서 신속하게 결제하기 위해 이 카드가 Google 계정에 저장됩니다.}other{모든 기기에서 신속하게 결제하기 위해 이 카드가 Google 계정에 저장됩니다.}}</translation> <translation id="6080696365213338172">관리자 제공 인증서를 사용하여 콘텐츠에 액세스했습니다. 사용자가 <ph name="DOMAIN" />에 제공한 데이터가 관리자에 의해 차단될 수 있습니다.</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">안함</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">관리 세션 재정의</translation> <translation id="7390545607259442187">카드 확인</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>Windows 컴퓨터에 Superfish 소프트웨어가 있으면 이 오류가 표시됩니다.</p> @@ -993,6 +1000,7 @@ <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />'에 대해 <ph name="SEARCH_RESULTS" /> <ph name="NUMBER_OF_RESULTS" />개의 검색 결과를 찾았습니다.</translation> <translation id="7818867226424560206">정책 관리</translation> <translation id="782886543891417279">사용 중인 Wi-Fi(<ph name="WIFI_NAME" />)에서 로그인 페이지 방문을 요청할 수 있습니다.</translation> +<translation id="7835178595033117206">북마크가 삭제됨</translation> <translation id="785549533363645510">하지만 흔적이 아예 남지 않는 것은 아닙니다. 시크릿 모드로 탐색해도 회사, 인터넷 서비스 제공업체 또는 방문한 웹사이트에 저장된 흔적까지 없앨 수는 없습니다.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">사이트에서 나가시겠습니까?</translation> @@ -1128,6 +1136,7 @@ <translation id="8874824191258364635">올바른 카드 번호를 입력하세요.</translation> <translation id="8876793034577346603">네트워크 설정을 파싱하지 못했습니다.</translation> <translation id="8891727572606052622">프록시 모드가 잘못되었습니다.</translation> +<translation id="8892964541482452187">탭 전환 버튼, 이 탭으로 전환하려면 Enter를 누르세요.</translation> <translation id="8903921497873541725">확대</translation> <translation id="8931333241327730545">이 카드를 Google 계정에 저장하시겠습니까?</translation> <translation id="8932102934695377596">시간이 너무 먼 과거로 설정되어 있습니다.</translation> @@ -1153,6 +1162,7 @@ <translation id="9035022520814077154">보안 오류</translation> <translation id="9038649477754266430">빠른 페이지 로드를 위해 예상 검색어 서비스 사용</translation> <translation id="9039213469156557790">또한 이 페이지에는 안전하지 않은 다른 리소스가 포함되어 있습니다. 이러한 리소스는 전송 중에 다른 사람이 볼 수 있으며 페이지의 작동을 변경하기 위해 공격자가 수정할 수 있습니다.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619"><ph name="DOMAIN" />에 접속하려 했지만 서버가 잘못된 인증서를 전달했습니다.</translation> <translation id="9050666287014529139">암호</translation> <translation id="9065203028668620118">수정</translation> @@ -1176,6 +1186,7 @@ <translation id="9170848237812810038">실행 취소(&U)</translation> <translation id="9171296965991013597">앱을 종료하시겠습니까?</translation> <translation id="917450738466192189">서버의 인증서가 유효하지 않습니다.</translation> +<translation id="9183302530794969518">Google 문서</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" />에서 지원되지 않는 프로토콜을 사용합니다.</translation> <translation id="9205078245616868884">동기화 암호로 데이터가 암호화되어 있습니다. 동기화를 시작하려면 입력하세요.</translation> <translation id="9207861905230894330">글을 추가하지 못했습니다.</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb index a9b958ab..047dd842 100644 --- a/components/strings/components_strings_lv.xtb +++ b/components/strings/components_strings_lv.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Jānorāda tālruņa numurs</translation> <translation id="1517500485252541695">Atbalstītās kredītkartes un debetkartes</translation> <translation id="1519264250979466059">Būvējuma datums</translation> +<translation id="1521655867290435174">Google izklājlapas</translation> <translation id="1527263332363067270">Tiek gaidīta savienojuma izveide...</translation> <translation id="1532118530259321453">Šajā lapā ir rakstīts</translation> <translation id="153384715582417236">Pagaidām tas arī viss!</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Eksportēt MacOS formātā</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">Savienojums tika atiestatīts.</translation> +<translation id="2785008241190445880">Grāmatzīme ir aizstāta</translation> <translation id="2788784517760473862">Atbalstītās kredītkartes</translation> <translation id="2794233252405721443">Vietne bloķēta</translation> <translation id="2799020568854403057">Šajā vietnē, kas tiks atvērta, ir kaitīgas lietotnes</translation> @@ -538,6 +540,7 @@ <translation id="4646534391647090355">Doties uz turieni tagad</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Šis serveris nevarēja pierādīt, ka šī ir vietne <ph name="DOMAIN" />; tās drošības sertifikātā ir kļūdas. Iespējams, tas ir nepareizas konfigurācijas dēļ vai arī kāds ir ļaunprātīgi izmantojis jūsu savienojumu.</translation> +<translation id="467809019005607715">Google prezentācijas</translation> <translation id="4690462567478992370">Pārtraukt nederīga sertifikāta izmantošanu</translation> <translation id="4690954380545377795">Varat zaudēt piekļuvi savam Google kontam, vai jūsu identitāte var tikt nozagta. Chrome iesaka nekavējoties nomainīt paroli.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -643,6 +646,7 @@ <translation id="5324080437450482387">Izvēlēties kontaktinformāciju</translation> <translation id="5327248766486351172">Nosaukums</translation> <translation id="5332219387342487447">Piegādes veids</translation> +<translation id="5344579389779391559">Šajā lapā var tikt mēģināts pieprasīt naudu</translation> <translation id="5355557959165512791">Pašlaik nevarat apmeklēt vietni <ph name="SITE" />, jo tās sertifikāts ir atsaukts. Tā kā tīkla kļūdas un uzbrukumi parasti ir īslaicīgi, visticamāk, šī lapa vēlāk darbosies.</translation> <translation id="536296301121032821">Neizdevās saglabāt politikas iestatījumus.</translation> <translation id="5371425731340848620">Kartes atjaunināšana</translation> @@ -738,6 +742,7 @@ <translation id="6015796118275082299">Gads</translation> <translation id="6016158022840135739">{COUNT,plural, =1{1. lapa}zero{#. lapa}one{#. lapa}other{#. lapa}}</translation> <translation id="6017850046339264347">Uzbrucēji vietnē <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> varētu instalēt maldinošas lietotnes, kas uzdodas par citu saturu, vai ievākt datus, ko izmantot jūsu izsekošanai. <ph name="BEGIN_LEARN_MORE_LINK" />Uzziniet vairāk<ph name="END_LEARN_MORE_LINK" />.</translation> +<translation id="6022659036123304283">Pielāgojiet Chrome savām prasībām</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (veikta sinhronizācija)</translation> <translation id="6027201098523975773">Ievadiet vārdu</translation> <translation id="6039846035001940113">Ja problēma joprojām pastāv, sazinieties ar vietnes īpašnieku.</translation> @@ -746,6 +751,7 @@ <translation id="6047927260846328439">Ar šo saturu jūs var maldināt un panākt, ka instalējat programmatūru vai atklājat personas informāciju. <ph name="BEGIN_LINK" />Tāpat rādīt<ph name="END_LINK" />.</translation> <translation id="6051221802930200923">Pašlaik nevarat apmeklēt vietni <ph name="SITE" />, jo tajā tiek izmantota sertifikātu piespraušana. Tā kā tīkla kļūdas un uzbrukumi parasti ir īslaicīgi, visticamāk, šī lapa vēlāk darbosies.</translation> <translation id="6059925163896151826">USB ierīces</translation> +<translation id="6060991652695587932">Izvēlieties e-pasta pakalpojumu ātrai piekļuvei</translation> <translation id="6071091556643036997">Politikas veids nav derīgs.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Šī karte tiks saglabāta jūsu Google kontā, lai paātrinātu norēķināšanos dažādās ierīcēs.}zero{Šīs kartes tiks saglabātas jūsu Google kontā, lai paātrinātu norēķināšanos dažādās ierīcēs.}one{Šīs kartes tiks saglabātas jūsu Google kontā, lai paātrinātu norēķināšanos dažādās ierīcēs.}other{Šīs kartes tiks saglabātas jūsu Google kontā, lai paātrinātu norēķināšanos dažādās ierīcēs.}}</translation> <translation id="6080696365213338172">Jūs esat piekļuvis saturam, izmantojot administratora izsniegtu sertifikātu. Datus, kurus sniedzat domēnā <ph name="DOMAIN" />, var pārtvert jūsu administrators.</translation> @@ -903,6 +909,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">Nē</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Pārvaldītas sesijas ignorēšana</translation> <translation id="7390545607259442187">Kartes apstiprināšana</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>Šī kļūda tiek rādīta, ja Windows datorā ir instalēta Superfish programmatūra.</p> @@ -993,6 +1000,7 @@ <translation id="7815407501681723534">Meklējot pēc virknes “<ph name="SEARCH_STRING" />”, tika atrasti <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /></translation> <translation id="7818867226424560206">Politiku pārvaldība</translation> <translation id="782886543891417279">Iespējams, izmantotajā Wi-Fi tīklā (<ph name="WIFI_NAME" />) tiks pieprasīts apmeklēt pieteikšanās lapu.</translation> +<translation id="7835178595033117206">Grāmatzīme ir noņemta</translation> <translation id="785549533363645510">Tomēr jūs neesat neredzams. Pārlūkojot inkognito režīmā, jūsu pārlūkošanas darbības netiek slēptas no jūsu darba devēja, interneta pakalpojumu sniedzēja vai apmeklētajām vietnēm.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" />: <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">Vai aizvērt vietni?</translation> @@ -1129,6 +1137,7 @@ <translation id="8874824191258364635">Ievadiet derīgu kartes numuru</translation> <translation id="8876793034577346603">Neizdevās parsēt tīkla konfigurāciju.</translation> <translation id="8891727572606052622">Nederīgs starpniekservera režīms.</translation> +<translation id="8892964541482452187">Ciļņu pārslēgšanas poga, nospiediet ievadi, lai pārslēgtos uz šo cilni</translation> <translation id="8903921497873541725">Tuvināt</translation> <translation id="8931333241327730545">Vai vēlaties saglabāt šo karti savā Google kontā?</translation> <translation id="8932102934695377596">Norādītais laiks ir pārāk tālu pagātnē</translation> @@ -1154,6 +1163,7 @@ <translation id="9035022520814077154">Drošības kļūda</translation> <translation id="9038649477754266430">Ieteikumu pakalpojuma izmantošana ātrākai lapu ielādei</translation> <translation id="9039213469156557790">Turklāt šajā lapā ir citi resursi, kas nav droši. Kamēr šie resursi tiek pārsūtīti, tos var aplūkot citi, kā arī uzbrucējs var tos pārveidot, lai mainītu lapas uzvedību.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> — <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Jūs centāties piekļūt <ph name="DOMAIN" />, bet serveris piedāvāja nederīgu sertifikātu.</translation> <translation id="9050666287014529139">Ieejas frāze</translation> <translation id="9065203028668620118">Labot</translation> @@ -1177,6 +1187,7 @@ <translation id="9170848237812810038">&Atsaukt</translation> <translation id="9171296965991013597">Vai aizvērt lietotni?</translation> <translation id="917450738466192189">Servera sertifikāts ir nederīgs.</translation> +<translation id="9183302530794969518">Google dokumenti</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> izmanto neatbalstītu protokolu.</translation> <translation id="9205078245616868884">Jūsu dati ir šifrēti, izmantojot jūsu sinhronizācijas ieejas frāzi. Lai sāktu sinhronizāciju, ievadiet ieejas frāzi.</translation> <translation id="9207861905230894330">Rakstu neizdevās pievienot.</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb index 3973fd3..5076cc1 100644 --- a/components/strings/components_strings_ml.xtb +++ b/components/strings/components_strings_ml.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">ഫോൺ നമ്പർ ആവശ്യമാണ്</translation> <translation id="1517500485252541695">ക്രെഡിറ്റ് കാർഡുകളും ഡെബിറ്റ് കാർഡുകളും സ്വീകരിക്കുന്നു</translation> <translation id="1519264250979466059">ബിൽഡ് തീയതി</translation> +<translation id="1521655867290435174">Google ഷീറ്റ്</translation> <translation id="1527263332363067270">കണക്ഷനുവേണ്ടി കാക്കുന്നു…</translation> <translation id="1532118530259321453">ഈ പേജ് പറയുന്നത്:</translation> <translation id="153384715582417236">ഇപ്പോൾ ഇത്രമാത്രമേ ലഭ്യമായിട്ടുള്ളൂ</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">MacOS എക്സ്പോർട്ട് ചെയ്യുക</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">കണക്ഷന് പുനഃസജ്ജമാക്കിയതാണ്.</translation> +<translation id="2785008241190445880">ബുക്ക്മാര്ക്ക് മാറ്റിസ്ഥാപിച്ചു</translation> <translation id="2788784517760473862">ക്രെഡിറ്റ് കാർഡുകൾ സ്വീകരിക്കുന്നു</translation> <translation id="2794233252405721443">സൈറ്റ് ബ്ലോക്കുചെയ്തു</translation> <translation id="2799020568854403057">നിങ്ങൾ പോകുന്ന സൈറ്റിൽ ദോഷകരമായ ആപ്പുകളുണ്ട്</translation> @@ -538,6 +540,7 @@ <translation id="4646534391647090355">എന്നെ ഇപ്പോൾ അവിടെയെത്തിക്കൂ</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">ഈ സെർവറിന് അത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; അതിന്റെ സുരക്ഷാ സർട്ടിഫിക്കറ്റിൽ പിശകുകൾ അടങ്ങിയിരിക്കുന്നു. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു അക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്.</translation> +<translation id="467809019005607715">Google സ്ലൈഡ്</translation> <translation id="4690462567478992370">അസാധുവായ ഒരു സർട്ടിഫിക്കറ്റ് ഉപയോഗിക്കുന്നത് നിർത്തുക</translation> <translation id="4690954380545377795">നിങ്ങളുടെ Google അക്കൗണ്ടിലേക്കുള്ള ആക്സസ് നഷ്ടമാകാനോ നിങ്ങളുടെ ഐഡന്റിറ്റി മോഷ്ടിക്കപ്പെടാനോ സാധ്യതയുണ്ട്. ഇപ്പോൾ തന്നെ പാസ്വേഡ് മാറ്റാൻ Chrome നിർദ്ദേശിക്കുന്നു.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -643,6 +646,7 @@ <translation id="5324080437450482387">കോണ്ടാക്റ്റ് വിവരം തിരഞ്ഞെടുക്കുക</translation> <translation id="5327248766486351172">പേര്</translation> <translation id="5332219387342487447">ഷിപ്പിംഗ് രീതി</translation> +<translation id="5344579389779391559">ഈ പേജ് നിങ്ങളില് നിന്ന് പണം ഈടാക്കാനിടയുണ്ട്</translation> <translation id="5355557959165512791">സർട്ടിഫിക്കറ്റ് റദ്ദാക്കിയതിനാൽ നിങ്ങൾക്കിപ്പോൾ <ph name="SITE" /> സന്ദർശിക്കാനാകില്ല. നെറ്റ്വർക്ക് പിശകുകളും ആക്രമണങ്ങളും സാധാരണ താൽക്കാലികമായിരിക്കും, അതിനാൽ ഈ പേജ് മിക്കവാറും പിന്നീട് പ്രവർത്തിക്കും.</translation> <translation id="536296301121032821">നയ ക്രമീകരണങ്ങൾ സംഭരിക്കുന്നതിൽ പരാജയപ്പെട്ടു</translation> <translation id="5371425731340848620">കാർഡ് അപ്ഡേറ്റ് ചെയ്യുക</translation> @@ -727,7 +731,7 @@ <translation id="5922853866070715753">ഏതാണ്ട് പൂർത്തിയായി</translation> <translation id="5939518447894949180">വീണ്ടും സജ്ജീകരിക്കുക</translation> <translation id="5951495562196540101">ഉപയോക്തൃ അക്കൗണ്ട് ഉപയോഗിച്ച് എൻറോൾ ചെയ്യാനാവില്ല (പാക്കേജ് ചെയ്ത ലൈസൻസ് ലഭ്യമാണ്).</translation> -<translation id="5966151627327109289">ഇത് ഭൂരിഭാഗം വെബ്സൈറ്റുകളിൽ നിന്നും നിങ്ങളുടെ അക്കൗണ്ട് സൈൻ ഔട്ട് ചെയ്യുന്നു. <ph name="SITE" /> എന്ന സൈറ്റിൽ നിന്നും മറ്റ് ചില സൈറ്റുകളിൽ നിന്നുമുള്ള പരിരക്ഷിക്കപ്പെട്ട ഉള്ളടക്കങ്ങളിലേക്കുള്ള ആക്സസ് നിങ്ങൾക്ക് നഷ്ടപ്പെട്ടേക്കാം.</translation> +<translation id="5966151627327109289">ഇത് ഭൂരിഭാഗം സൈറ്റുകളിൽ നിന്നും നിങ്ങളുടെ അക്കൗണ്ട് സൈൻ ഔട്ട് ചെയ്യുന്നു. <ph name="SITE" /> എന്ന സൈറ്റിൽ നിന്നും മറ്റ് ചില സൈറ്റുകളിൽ നിന്നുമുള്ള പരിരക്ഷിക്കപ്പെട്ട ഉള്ളടക്കത്തിലേക്കുള്ള ആക്സസ് നിങ്ങൾക്ക് നഷ്ടപ്പെട്ടേക്കാം.</translation> <translation id="5967592137238574583">കോൺടാക്റ്റ് വിവരം എഡിറ്റുചെയ്യുക</translation> <translation id="5967867314010545767">ചരിത്രത്തിൽ നിന്നും നീക്കംചെയ്യുക</translation> <translation id="5975083100439434680">സൂം ഔട്ട്</translation> @@ -738,6 +742,7 @@ <translation id="6015796118275082299">വര്ഷം</translation> <translation id="6016158022840135739">{COUNT,plural, =1{പേജ് 1}other{പേജ് #}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> എന്നതിലുള്ള അക്രമികൾ, മറ്റെന്തെങ്കിലുമാണെന്ന വ്യാജേന തെറ്റിദ്ധരിപ്പിക്കുന്ന ആപ്പുകൾ ഇൻസ്റ്റാൾ ചെയ്യാം അല്ലെങ്കിൽ ഡാറ്റ ശേഖരിച്ച് നിങ്ങളെ ട്രാക്കുചെയ്യാൻ ഉപയോഗിക്കാം. <ph name="BEGIN_LEARN_MORE_LINK" />കൂടുതലറിയുക<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Chrome-നെ നിങ്ങളുടേതാക്കുക</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (സമന്വയിപ്പിച്ചത്)</translation> <translation id="6027201098523975773">ഒരു പേര് നൽകുക</translation> <translation id="6039846035001940113">പ്രശ്നം പരിഹരിക്കപ്പെടുന്നില്ലെങ്കിൽ, സൈറ്റ് ഉടമയെ ബന്ധപ്പെടുക.</translation> @@ -746,10 +751,11 @@ <translation id="6047927260846328439">സോഫ്റ്റ്വെയർ ഇൻസ്റ്റാൾ ചെയ്യുന്നതിലേക്കോ വ്യക്തിഗത വിവരങ്ങൾ വെളിപ്പെടുത്തുന്നതിലേക്കോ നിങ്ങളെ തന്ത്രപൂർവ്വം നയിച്ചുകൊണ്ട്, ഈ ഉള്ളടക്കം നിങ്ങളെ കബളിപ്പിക്കാൻ ശ്രമിച്ചേക്കാം. <ph name="BEGIN_LINK" />എന്തായാലും കാണിക്കുക<ph name="END_LINK" /></translation> <translation id="6051221802930200923"><ph name="SITE" /> എന്ന വെബ്സൈറ്റ് സർട്ടിഫിക്കറ്റ് പിന്നിംഗ് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങൾക്കിപ്പോൾ അത് സന്ദർശിക്കാനാകില്ല. നെറ്റ്വർക്ക് പിശകുകളും ആക്രമണങ്ങളും സാധാരണയായി താൽക്കാലികമായിരിക്കും, അതിനാൽ ഈ പേജ് മിക്കവാറും പിന്നീട് പ്രവർത്തിക്കും.</translation> <translation id="6059925163896151826">USB ഉപകരണങ്ങൾ</translation> +<translation id="6060991652695587932">ദ്രുത ആക്സസിനായി നിങ്ങളുടെ ഇമെയില് തിരഞ്ഞെടുക്കുക</translation> <translation id="6071091556643036997">സാധുതയില്ലാത്ത നയ തരം.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{ഉപകരണങ്ങളിൽ ഉടനീളം വേഗത്തിൽ ചെക്കൗട്ട് ചെയ്യാനായി ഈ കാർഡ് നിങ്ങളുടെ Google അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കും.}other{ഉപകരണങ്ങളിൽ ഉടനീളം വേഗത്തിൽ ചെക്കൗട്ട് ചെയ്യാനായി ഈ കാർഡുകൾ നിങ്ങളുടെ Google അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കും.}}</translation> <translation id="6080696365213338172">അഡ്മിനിസ്ട്രേറ്റർ നൽകിയ സർട്ടിഫിക്കറ്റ് ഉപയോഗിച്ച് നിങ്ങൾ ഉള്ളടക്കം ആക്സസ്സുചെയ്തു. നിങ്ങൾ <ph name="DOMAIN" /> എന്നതിലേക്ക് നൽകുന്ന ഡാറ്റ അഡ്മിനിസ്ട്രേറ്റർക്ക് തടയാനാവും.</translation> -<translation id="6096619198407627433">ഇത് ഭൂരിഭാഗം വെബ്സൈറ്റുകളിൽ നിന്നും നിങ്ങളുടെ അക്കൗണ്ട് സൈൻ ഔട്ട് ചെയ്യുന്നു. നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യപ്പെടില്ല. <ph name="SITE" /> എന്ന സൈറ്റിൽ നിന്നും മറ്റ് ചില സൈറ്റുകളിൽ നിന്നുമുള്ള പരിരക്ഷിക്കപ്പെട്ട ഉള്ളടക്കങ്ങളിലേക്കുള്ള ആക്സസ് നിങ്ങൾക്ക് നഷ്ടപ്പെട്ടേക്കാം.</translation> +<translation id="6096619198407627433">ഇത് ഭൂരിഭാഗം സൈറ്റുകളിൽ നിന്നും നിങ്ങളുടെ അക്കൗണ്ട് സൈൻ ഔട്ട് ചെയ്യുന്നു. നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യപ്പെടില്ല. <ph name="SITE" /> എന്ന സൈറ്റിൽ നിന്നും മറ്റ് ചില സൈറ്റുകളിൽ നിന്നുമുള്ള പരിരക്ഷിക്കപ്പെട്ട ഉള്ളടക്കകത്തിലേക്കുള്ള ആക്സസ് നിങ്ങൾക്ക് നഷ്ടപ്പെട്ടേക്കാം.</translation> <translation id="610911394827799129">നിങ്ങളുടെ Google അക്കൗണ്ടിന് <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> എന്നതിൽ മറ്റ് തരത്തിലുള്ള ബ്രൗസിംഗ് ചരിത്രമുണ്ടായിരിക്കാം.</translation> <translation id="6144381551823904650">{COUNT,plural, =0{ഒന്നുമില്ല}=1{ഒരു പാസ്വേഡ് (സമന്വയിപ്പിച്ചത്)}other{# പാസ്വേഡുകൾ (സമന്വയിപ്പിച്ചത്)}}</translation> <translation id="6146055958333702838">എല്ലാ കേബിളുകളും പരിശോധിക്കുക ഒപ്പം ഏതെങ്കിലും റൂട്ടറുകൾ, മോഡങ്ങൾ നിങ്ങൾ ഉപയോഗിക്കാനിടയുള്ള @@ -903,6 +909,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">വേണ്ട</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">മാനേജ് ചെയ്യപ്പെടുന്ന സെഷന് അസാധുവാക്കി</translation> <translation id="7390545607259442187">കാർഡ് സ്ഥിരീകരിക്കുക</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>നിങ്ങളുടെ Windows കമ്പ്യൂട്ടറിൽ Superfish സോഫ്റ്റ്വെയർ ഉണ്ടെങ്കിൽ, നിങ്ങൾ ഈ പിശക് കാണും.</p> @@ -991,6 +998,7 @@ <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' എന്നതിന്റെ <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> കണ്ടു</translation> <translation id="7818867226424560206">പോളിസി മാനേജ്മെന്റ്</translation> <translation id="782886543891417279">നിങ്ങൾ ഉപയോഗിക്കുന്ന Wi-Fi (<ph name="WIFI_NAME" />) അതിന്റെ ലോഗിൻ പേജ് സന്ദർശിക്കാൻ ആവശ്യപ്പെടാം..</translation> +<translation id="7835178595033117206">ബുക്ക്മാര്ക്ക് നീക്കം ചെയ്തു</translation> <translation id="785549533363645510">എന്നിരുന്നാലും നിങ്ങൾ അദൃശ്യനല്ല. ആൾമാറാട്ടത്തിലേയ്ക്ക് പോകുന്നത്, നിങ്ങളുടെ തൊഴിൽ ദാതാവിൽ നിന്നോ ഇന്റർനെറ്റ് സേവന ദാതാവിൽ നിന്നോ നിങ്ങൾ സന്ദർശിക്കുന്ന വെബ്സൈറ്റുകളിൽ നിന്നോ ഉള്ള ബ്രൗസിംഗിനെ മറയ്ക്കില്ല.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">സൈറ്റ് വിടണോ?</translation> @@ -1127,6 +1135,7 @@ <translation id="8874824191258364635">ശരിയായ കാർഡ് നമ്പർ നൽകുക</translation> <translation id="8876793034577346603">നെറ്റ്വർക്ക് കോൺഫിഗറേഷൻ പാഴ്സുചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു</translation> <translation id="8891727572606052622">അസാധുവായ പ്രോക്സി മോഡ്</translation> +<translation id="8892964541482452187">ടാബ് സ്വിച്ച് ബട്ടണ്, ഈ ടാബിലേക്ക് സ്വിച്ച് ചെയ്യാൻ എന്റര് അമര്ത്തുക</translation> <translation id="8903921497873541725">സൂം ഇന്</translation> <translation id="8931333241327730545">ഈ കാർഡ് നിങ്ങളുടെ Google അക്കൗണ്ടിൽ സംരക്ഷിക്കണോ?</translation> <translation id="8932102934695377596">നിങ്ങളുടെ ക്ലോക്ക് വളരെ പിന്നിലാണ്</translation> @@ -1152,6 +1161,7 @@ <translation id="9035022520814077154">സുരക്ഷ പിശക്</translation> <translation id="9038649477754266430">പേജുകൾ കൂടുതൽ വേഗത്തിൽ ലോഡുചെയ്യാൻ ഒരു പ്രവചന സേവനം ഉപയോഗിക്കുക</translation> <translation id="9039213469156557790">ഈ പേജിൽ സുരക്ഷിതമല്ലാത്ത മറ്റ് ഉറവിടങ്ങൾ ഉൾപ്പെടുന്നു. ഈ ഉറവിടങ്ങൾ കൈമാറുന്നതിനിടെ മറ്റുള്ളവർക്ക് കാണാനും പേജിന്റെ പ്രവർത്തനരീതി മാറ്റുന്ന തരത്തിൽ ഒരു ആക്രമണകാരിയ്ക്ക് പരിഷ്ക്കരിക്കാനുമായേക്കും.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">നിങ്ങള് <ph name="DOMAIN" /> എന്നതില് എത്താന് ശ്രമിച്ചു, പക്ഷേ സെര്വര് ഒരു അസാധുവായ സര്ട്ടിഫിക്കറ്റ് അവതരിപ്പിച്ചു.</translation> <translation id="9050666287014529139">പാസ്ഫ്രെയ്സ്</translation> <translation id="9065203028668620118">എഡിറ്റുചെയ്യുക</translation> @@ -1175,6 +1185,7 @@ <translation id="9170848237812810038">&പൂര്വാവസ്ഥയിലാക്കുക</translation> <translation id="9171296965991013597">ആപ്പ് വിടണോ?</translation> <translation id="917450738466192189">സെർവറിന്റെ സർട്ടിഫിക്കറ്റ് അസാധുവാണ്.</translation> +<translation id="9183302530794969518">Google ഡോക്സ്</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> പിന്തുണയ്ക്കാത്ത ഒരു പ്രോട്ടോക്കോളാണ് ഉപയോഗിക്കുന്നത്.</translation> <translation id="9205078245616868884">നിങ്ങളുടെ സമന്വയ പാസ്ഫ്രെയ്സ് ഉപയോഗിച്ച് ഡാറ്റ എൻക്രിപ്റ്റുചെയ്തു. സമന്വയം ആരംഭിക്കുന്നതിന് ഇത് നൽകുക.</translation> <translation id="9207861905230894330">ലേഖനം ചേർക്കുന്നത് പരാജയപ്പെട്ടു.</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index c22f35c..ad19a24f 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -23,7 +23,7 @@ <translation id="1113869188872983271">&पुनर्क्रमित करा पूर्ववत करा</translation> <translation id="1125573121925420732">वेबसाइट त्यांची सीक्युरिटी अपडेट करत असताना चेतावण्या सामान्य असू शकतात. यात लवकरच सुधारणा व्हावी.</translation> <translation id="1126551341858583091">स्थानिक संचयावरील आकार <ph name="CRASH_SIZE" /> आहे.</translation> -<translation id="112840717907525620">धोरण कॅश ठीक</translation> +<translation id="112840717907525620">धोरण कॅशे ठीक</translation> <translation id="1150979032973867961">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याची सुरक्षितता सर्टिफिकेट तुम्हाला काँप्युटरच्या ऑपरेटिंग सिस्टमद्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation> <translation id="1151972924205500581">पासवर्ड आवश्यक</translation> <translation id="1152921474424827756"><ph name="URL" /> च्या <ph name="BEGIN_LINK" />कॅश केलेल्या कॉपीवर<ph name="END_LINK" /> प्रवेश करा</translation> @@ -91,6 +91,7 @@ <translation id="1517433312004943670">फोन नंबर आवश्यक आहे</translation> <translation id="1517500485252541695">स्वीकारली जाणारी क्रेडिट आणि डेबिट कार्डे</translation> <translation id="1519264250979466059">बिल्ड तारीख</translation> +<translation id="1521655867290435174">Google पत्रक</translation> <translation id="1527263332363067270">कनेक्शनची वाट पाहत आहे...</translation> <translation id="1532118530259321453">या पेजचे म्हणणे हे आहे की</translation> <translation id="153384715582417236">सध्या इतकेच</translation> @@ -115,7 +116,7 @@ <translation id="1656489000284462475">घेणे</translation> <translation id="1662550410081243962">पेमेंट पद्धती सेव्ह करा आणि भरा</translation> <translation id="1663943134801823270">कार्ड आणि पत्ते Chrome कडील आहेत. आपण त्यांना <ph name="BEGIN_LINK" />सेटिंग्ज<ph name="END_LINK" /> मधून व्यवस्थापित करू शकता.</translation> -<translation id="1676269943528358898"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Google Chrome ने यावेळी <ph name="SITE" /> शी कनेक्ट करण्याचा प्रयत्न केला तेव्हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Google Chrome ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation> +<translation id="1676269943528358898"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Google Chrome ने यावेळी <ph name="SITE" /> शी कनेक्ट करण्याचा प्रयत्न केला तेव्हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Google Chrome ने कनेक्शन थांबवल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation> <translation id="168841957122794586">सर्व्हर सर्टिफिकेटमध्ये एक कमकुवत क्रिप्टोग्राफिक की आहे.</translation> <translation id="1697532407822776718">आपण पूर्णपणे तयार आहात!</translation> <translation id="1706954506755087368">{1,plural, =1{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट उद्यापासून मानले जाईल. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.}one{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट पुढील # दिवसांपासून मानले जाईल. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.}other{हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षा सर्टिफिकेट पुढील # दिवसांपासून मानले जाईल. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.}}</translation> @@ -272,12 +273,13 @@ <translation id="2781030394888168909">MacOS निर्यात करा</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">कनेक्शन रीसेट केले.</translation> +<translation id="2785008241190445880">बुकमार्क बदलले</translation> <translation id="2788784517760473862">क्रेडिट कार्डे स्वीकारली जातात</translation> <translation id="2794233252405721443">साइट अवरोधित केली</translation> <translation id="2799020568854403057">पुढील साइटमध्ये हानिकारक अॅप आहे</translation> <translation id="2803306138276472711">Google सुरक्षित ब्राउझिंगला अलीकडे <ph name="SITE" /> वर <ph name="BEGIN_LINK" />मालवेअर आढळले आहे<ph name="END_LINK" />. सामान्यतः सुरक्षित असलेल्या वेबसाइट काहीवेळा मालवेअरमुळे संक्रमित झालेल्या असतात.</translation> <translation id="2824775600643448204">पत्ता आणि शोध बार</translation> -<translation id="2826760142808435982">कनेक्शन <ph name="CIPHER" /> वापरून आणि की विनिमय तंत्र म्हणून <ph name="KX" /> वापर कूटबद्ध आणि प्रमाणीकृत केले आहे.</translation> +<translation id="2826760142808435982">कनेक्शन <ph name="CIPHER" /> वापरून आणि महत्त्वाचे एक्स्चेंज तंत्र म्हणून <ph name="KX" /> वापर एंक्रिप्ट आणि अॉथेंटिकेट केले आहे.</translation> <translation id="2835170189407361413">फॉर्म क्लिअर करा</translation> <translation id="2851634818064021665">या साइटला भेट देण्यासाठी तुम्हाला परवानगीची गरज आहे</translation> <translation id="2856444702002559011">हल्लेखोर कदाचित तुमची माहिती (उदाहरणार्थ पासवर्ड, संदेश किंवा क्रेडिट कार्ड) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> मधून चोरण्याचा प्रयत्न करत असतील. <ph name="BEGIN_LEARN_MORE_LINK" />आणखी जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation> @@ -331,7 +333,7 @@ <translation id="320323717674993345">पेमेंट रद्द करा</translation> <translation id="3207960819495026254">बुकमार्क केलेली</translation> <translation id="3209375525920864198">कृपया एक वैध सेशन नाव टाका.</translation> -<translation id="3211223744486044430">पुढील वेळी जलद पेमेंट देण्यासाठी, तुमच्या Google खात्यावर आणि या डीव्हाइसवर हे कार्ड सेव्ह करा.</translation> +<translation id="3211223744486044430">पुढील वेळी जलद पेमेंट देण्यासाठी, तुमच्या Google खात्यावर आणि या डिव्हाइसवर हे कार्ड सेव्ह करा.</translation> <translation id="3225919329040284222">सर्व्हरने असे सर्टिफिकेट सादर केले आहे जे अंगभूत अपेक्षांशी जुळत नाही. या अपेक्षा तुम्हाला संरक्षित करण्यासाठी विशिष्ट, उच्च सुरक्षिततेच्या वेबसाइटसाठी समाविष्ट केल्या आहेत.</translation> <translation id="3226128629678568754">पृष्ठ लोड करण्यास आवश्यक असलेला डेटा पुन्हा सबमिट करण्यासाठी रीलोड बटण दाबा.</translation> <translation id="3227137524299004712">मायक्रोफोन</translation> @@ -344,15 +346,15 @@ <translation id="3287510313208355388">ऑनलाइन असताना डाउनलोड करा</translation> <translation id="3293642807462928945"><ph name="POLICY_NAME" /> धोरणांबद्दल अधिक जाणून घ्या</translation> <translation id="3303855915957856445">कोणतेही शोध परिणाम आढळले नाहीत</translation> -<translation id="3305707030755673451">आपला डेटा आपल्या संकालन सांकेतिक वाक्यांशासह <ph name="TIME" /> वाजता कूटबद्ध केला होता. संकालन सुरु करण्यासाठी तो एंटर करा.</translation> +<translation id="3305707030755673451">तुमचा डेटा तुमच्या सिंक पासफ्रेजसह <ph name="TIME" /> वाजता एंक्रिप्ट केला होता. सिंक सुरु करण्यासाठी तो एंटर करा.</translation> <translation id="3320021301628644560">बिलिंग पत्ता जोडा</translation> <translation id="3338095232262050444">सुरक्षित</translation> <translation id="3345135638360864351">या साइटवर प्रवेश करण्याची तुमची विनंती <ph name="NAME" /> कडे पाठविली जाऊ शकली नाही. कृपया पुन्हा प्रयत्न करा.</translation> <translation id="3355823806454867987">प्रॉक्सी सेटिंग्ज बदला...</translation> <translation id="3361596688432910856">Chrome पुढील माहिती <ph name="BEGIN_EMPHASIS" />सेव्ह करणार नाही<ph name="END_EMPHASIS" />: <ph name="BEGIN_LIST" /> - <ph name="LIST_ITEM" />आपला ब्राउझिंग इतिहास - <ph name="LIST_ITEM" />कुकीज आणि साइट डेटा + <ph name="LIST_ITEM" />तुमचा ब्राउझिंग इतिहास + <ph name="LIST_ITEM" />कुकी आणि साइट डेटा <ph name="LIST_ITEM" />फॉर्ममध्ये टाकलेली माहिती <ph name="END_LIST" /></translation> <translation id="3366477098757335611">कार्डे पाहा</translation> @@ -382,7 +384,7 @@ <translation id="3528171143076753409">सर्व्हरचे सर्टिफिकेट विश्वसनीय नाही.</translation> <translation id="3530944546672790857">{COUNT,plural, =0{ सिंक केलेल्या डिव्हाइसवर किमान 1 आयटम}=1{1 आयटम (सिंक केलेल्या डिव्हाइसवर आणखी काही)}one{# आयटम (सिंक केलेल्या डिव्हाइसवर आणखी काही)}other{# आयटम (सिंक केलेल्या डिव्हाइसवर आणि आणखी काही)}}</translation> <translation id="3539171420378717834">या डिव्हाइसवर या कार्डची एक प्रत ठेवा</translation> -<translation id="3549644494707163724">आपल्या स्वतःच्या वाक्यांशासह सर्व संंकालित केलेला डेटा कूटबद्ध करा</translation> +<translation id="3549644494707163724">तुमच्या स्वतःच्या पासफ्रेजसह सिंक केलेला सर्व डेटा एंक्रिप्ट करा</translation> <translation id="3556433843310711081">आपला व्यवस्थापक तुमच्यासाठी ती अनावरोधित करू शकतो</translation> <translation id="3566021033012934673">आपले कनेक्शन खाजगी नाही</translation> <translation id="3574305903863751447"><ph name="CITY" />, <ph name="STATE" /> <ph name="COUNTRY" /></translation> @@ -415,10 +417,10 @@ <translation id="372429172604983730">या एररला कारणीभूत असू शकणार्या अॅप्लिकेशनमध्ये अँटिव्हायरस, फायरवॉल आणि वेब-फिल्टरिंग किंवा प्रॉक्सी सॉफ्टवेअरचा समावेश होतो.</translation> <translation id="3736520371357197498">आपल्याला आपल्या सुरक्षिततेच्या जोखमी समजत असल्यास, धोकादायक प्रोग्राम काढण्यापूर्वी आपण <ph name="BEGIN_LINK" />या असुरक्षित साइटला भेट देऊ शकता<ph name="END_LINK" />.</translation> <translation id="3739623965217189342">आपण कॉपी केलेल्याचा दुवा जोडा</translation> -<translation id="3744899669254331632">Chromium प्रक्रिया करू शकत नसलेले सरमिसळ केलेले क्रेडेन्शियल वेबसाइटने पाठविल्याने आपण आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही. नेटवर्क एरर आणि आक्रमण सहसा तात्पुरते आहेत त्यामुळे संभवत: हे पृष्ठ नंतर कार्य करेल.</translation> +<translation id="3744899669254331632">Chromium प्रक्रिया करू शकत नसलेले सरमिसळ केलेले क्रेडेंशियल वेबसाइटने पाठविल्याने तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही. नेटवर्क एरर आणि आक्रमणे सहसा तात्पुरती असतात त्यामुळे यामुळे हे पेज कदाचित नंतर काम करेल.</translation> <translation id="3748148204939282805"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> वरील हल्लेखोर कदाचित तुम्हाला सॉफ्टवेअर इंस्टॉल करणे किंवा तुमची वैयक्तिक माहिती (उदाहरणार्थ, पासवर्ड, फोन नंबर किंवा क्रेडिट कार्डे) उघड करणे यासारख्या काही धोकादायक गोष्टी करण्यासाठी तुम्हाला फसवू शकतात. <ph name="BEGIN_LEARN_MORE_LINK" />आणखी जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation> <translation id="375403751935624634">सर्व्हर त्रुटीमुळे भाषांतर अयशस्वी झाला.</translation> -<translation id="3759461132968374835">आपण अलीकडे कोणतेही क्रॅश नोंदवले नाहीत. क्रॅश नोंदवणे अक्षम असताना झालेले क्रॅश येथे दिसून येणार नाहीत.</translation> +<translation id="3759461132968374835">तुम्ही अलीकडे कोणतेही क्रॅश नोंदवले नाहीत. क्रॅश नोंदवणे अक्षम असताना झालेले क्रॅश येथे दिसून येणार नाहीत.</translation> <translation id="3765032636089507299">सुरक्षित ब्राउझिंग पेज तयार होत आहे.</translation> <translation id="3778403066972421603">तुम्हाला हे कार्ड तुमच्या Google खात्यामध्ये आणि या डिव्हाइसवर सेव्ह करायचे आहे का?</translation> <translation id="3783418713923659662">Mastercard</translation> @@ -450,7 +452,7 @@ <translation id="4058922952496707368">की "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> <translation id="4067947977115446013">वैध पत्ता जोडा</translation> <translation id="4072486802667267160">आपल्या मागणीवर प्रक्रिया करताना एरर आली, कृपया पुन्हा प्रयत्न करा.</translation> -<translation id="4075732493274867456">क्लायंट आणि सर्व्हर एक सामान्य SSL प्रोटोकॉल आवृत्ती किंवा सायफर संचाचे समर्थन करीत नाही.</translation> +<translation id="4075732493274867456">क्लायंट आणि सर्व्हर एक सामान्य SSL प्रोटोकॉल आवृत्ती किंवा सायफर सूटला सपोर्ट करत नाही.</translation> <translation id="4079302484614802869">प्रॉक्सी कॉन्फिगरेशन .pac स्क्रिप्ट URL वापरण्यास सेट करण्यात आले आहे, निश्चित प्रॉक्सी सर्व्हर नव्हे.</translation> <translation id="4098354747657067197">भ्रामक साइट पुढे आहे</translation> <translation id="4103249731201008433">डिव्हाइस सिरीयल क्रमांक चुकीचा आहे</translation> @@ -511,7 +513,7 @@ <translation id="4356973930735388585">या साइट वरील आक्रमणकर्ते तुमची माहिती (उदाहरणार्थ, फोटो, पासवर्ड, संदेश आणि क्रेडिट कार्ड) चोरणारे किंवा हटविणारे धोकादायक प्रोग्राम आपल्या संगणकावर इंस्टॉल करण्याचा प्रयत्न करू शकतात.</translation> <translation id="4358461427845829800">पेमेंट पद्धती व्यवस्थापित करा</translation> <translation id="4372948949327679948">अपेक्षित <ph name="VALUE_TYPE" /> मूल्य.</translation> -<translation id="4377125064752653719">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने सादर केलेले सर्टिफिकेट त्याच्या जारीकर्त्याद्वारे मागे घेतले गेले आहे. याचा अर्थ सर्व्हरने सादर केलेल्या सुरक्षा क्रेडेंशियलवर अजिबात ठेवला जाऊ नये. तुम्ही कदाचित हल्लेखोराशी संवाद प्रस्थापित करत आहात.</translation> +<translation id="4377125064752653719">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने सादर केलेले प्रमाणपत्र त्याच्या जारीकर्त्याद्वारे मागे घेतले गेले आहे. याचा अर्थ सर्व्हरने सादर केलेल्या सुरक्षा क्रेडेंशियलवर अजिबात विश्वास ठेवला जाऊ नये. तुम्ही कदाचित आक्रमणकर्त्याशी संवाद प्रइंस्टॉल करत आहात.</translation> <translation id="4406896451731180161">शोध परिणाम</translation> <translation id="4408413947728134509">कुकीज <ph name="NUM_COOKIES" /></translation> <translation id="4415426530740016218">घेण्याचा पत्ता</translation> @@ -533,12 +535,13 @@ <translation id="457875822857220463">वितरण</translation> <translation id="4582800630050655161">तुम्ही तुमच्या Google खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chromium लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation> <translation id="4587425331216688090">Chrome मधून पत्ता काढून टाकायचा?</translation> -<translation id="4592951414987517459">आपले <ph name="DOMAIN" /> वरील कनेक्शन आधुनिक सायफर सूट वापरून कूटबद्ध केलेले आहे.</translation> +<translation id="4592951414987517459">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन आधुनिक सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation> <translation id="4594403342090139922">&हटवा पूर्ववत करा</translation> <translation id="4619615317237390068">अन्य डिव्हाइसेसमधील टॅब</translation> <translation id="4646534391647090355">आता मला तेथे घेऊन जा</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याच्या सुरक्षितता सर्टिफिकेटमध्ये एरर आहेत. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation> +<translation id="467809019005607715">Google स्लाइड</translation> <translation id="4690462567478992370">चुकीचे सर्टिफिकेट वापरणे थांबवा</translation> <translation id="4690954380545377795">तुम्ही तुमच्या Google खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -560,7 +563,7 @@ <translation id="4792143361752574037">सेशन फायली अॅक्सेस करताना अडचण आली. डिस्कवर सेव्ह करणे सध्या बंद केलेले आहे. पुन्हा प्रयत्न करण्यासाठी कृपया पेज रीलोड करा.</translation> <translation id="4800132727771399293">तुमची कालबाह्यता तारीख आणि CVC तपासा आणि पुन्हा प्रयत्न करा</translation> <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> -<translation id="4807049035289105102">Google Chrome प्रक्रिया करू शकत नाही असे न समजणारे क्रेडेन्शियल वेबसाइटने पाठविल्यामुळे आपण आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही. नेटवर्क एरर आणि आक्रमण सामान्यतः तात्पुरते असतात, यामुळे हे पृष्ठ कदाचित नंतर कार्य करेल.</translation> +<translation id="4807049035289105102">Google Chrome प्रक्रिया करू शकत नाही असे न समजणारे क्रेडेंशियल वेबसाइटने पाठविल्यामुळे तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही. नेटवर्क एरर आणि आक्रमणे सामान्यतः तात्पुरती असतात, यामुळे हे पेज कदाचित नंतर काम करेल.</translation> <translation id="4813512666221746211">नेटवर्क एरर</translation> <translation id="4816492930507672669">पृष्ठानुरुप करा</translation> <translation id="4850886885716139402">पहा</translation> @@ -608,7 +611,7 @@ <translation id="5121084798328133320">तुम्ही निश्चित केल्यानंतर, तुमच्या Google पेमेंट खात्यावरील कार्ड तपशील या साइटसोबत शेअर केले जातील.</translation> <translation id="5128122789703661928">हे नाव असलेले सेशन हटवण्यासाठी वैध नाही.</translation> <translation id="5135404736266831032">पत्ते व्यवस्थापित करा...</translation> -<translation id="5141240743006678641">आपल्या Google क्रेडेन्शियलसह संंकालित केलेले पासवर्ड कूटबद्ध करा</translation> +<translation id="5141240743006678641">तुमच्या Google क्रेडेंशियलसह सिंक केलेले पासवर्ड एंक्रिप्ट करा</translation> <translation id="5145883236150621069">धोरण प्रतिसादामध्ये एरर कोड अस्तित्वात आहे</translation> <translation id="5159010409087891077">नवीन गुप्त विंडोमध्ये पेज उघडा (⇧⌘N)</translation> <translation id="5169827969064885044">तुम्ही तुमच्या संस्थेच्या खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">संपर्क माहिती निवडा</translation> <translation id="5327248766486351172">नाव</translation> <translation id="5332219387342487447">पाठविण्याची पद्धत</translation> +<translation id="5344579389779391559">या पेजवर कदाचित तुमच्याकडून शुल्क आकारले जाऊ शकते</translation> <translation id="5355557959165512791">तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही कारण तिचे सर्टिफिकेट रिव्होक केले गेले आहे. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation> <translation id="536296301121032821">धोरण सेटिंग्ज संचयित करण्यात अयशस्वी</translation> <translation id="5371425731340848620">कार्ड अपडेट करा</translation> @@ -714,7 +718,7 @@ <translation id="5785756445106461925">पुढे, या पृष्ठात सुरक्षित नसलेली इतर संसाधने समाविष्ट आहेत. ही संसाधने संक्रमणात असताना इतरांद्वारे पाहिली जाऊ शकतात आणि पृष्ठाचे स्वरूप बदलण्यासाठी आक्रमणकर्त्याद्वारे सुधारित केली जाऊ शकतात.</translation> <translation id="5786044859038896871">आपण तुमची कार्ड माहिती भरू इच्छित आहात?</translation> <translation id="5803412860119678065">आपण आपले <ph name="CARD_DETAIL" /> भरू इच्छित आहात?</translation> -<translation id="5810442152076338065">आपले <ph name="DOMAIN" /> वरील कनेक्शन अप्रचलित सायफर सूट वापरून कूटबद्ध केलेले आहे.</translation> +<translation id="5810442152076338065">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन अॉब्सोलीट सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation> <translation id="5813119285467412249">&जोडा पुन्हा करा</translation> <translation id="5838278095973806738">या साइटवर कोणतीही संवेदनशील माहिती (उदाहरणार्थ, पासवर्ड किंवा क्रेडिट कार्ड) एंटर करू नका, कारण आक्रमणकर्ते ती चोरू शकतात.</translation> <translation id="5863847714970149516">पुढील पेजवर तुमच्याकडून शुल्क आकारले जाऊ शकते</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">वर्ष</translation> <translation id="6016158022840135739">{COUNT,plural, =1{पृष्ठ 1}one{पृष्ठ #}other{पेज #}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />वर असलेले आक्रमणकर्ता फसवणारे अॅप्स इंस्टॉल करू शकतात जे दुसरे काहीतरी असल्याचे भासवू शकतात किंवा तुम्हाला शोधण्यासाठी डेटा वापरू शकतात. <ph name="BEGIN_LEARN_MORE_LINK" />अधिक जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Chrome ला तुमच्या आवडीनुसार बनवा</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (सिंक केलेले)</translation> <translation id="6027201098523975773">नाव एंटर करा</translation> <translation id="6039846035001940113">समस्या कायम राहिल्यास साइटच्या मालकाशी संपर्क साधा.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">हा आशय तुम्हाला सॉफ्टवेअर इंस्टॉल करण्याचा किंवा वैयक्तिक माहिती उघड करण्याचा फसवा प्रयत्न करू शकेल. <ph name="BEGIN_LINK" />तरीही दाखवा<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ही वेबसाइट सर्टिफिकेट पिनिंग वापरत असल्यामुळे तुम्ही आत्ता <ph name="SITE" /> पाहू शकणार नाही. नेटवर्क एरर आणि आक्रमणे शक्यतो तात्पुरती असतात, त्यामुळे हे पेज नंतर पाहता येईल.</translation> <translation id="6059925163896151826">USB डिव्हाइसेस</translation> +<translation id="6060991652695587932">झटपट अॅक्सेससाठी तुमची ईमेल सेवा निवडा</translation> <translation id="6071091556643036997">धोरणाचा प्रकार चुकीचा आहे.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{सर्व डिव्हाइसवरून जलद चेकआउट करता यावे यासाठी हे कार्ड तुमच्या Google खात्यावर सेव्ह केले जाईल.}one{सर्व डिव्हाइसवरून जलद चेकआउट करता यावे यासाठी ही कार्डे तुमच्या Google खात्यावर सेव्ह केली जातील.}other{सर्व डिव्हाइसवरून जलद चेकआउट करता यावे यासाठी हे कार्ड तुमच्या Google खात्यावर सेव्ह केले जाईल.}}</translation> <translation id="6080696365213338172">तुम्ही अॅडमिनिस्ट्रेटरने दिलेले सर्टिफिकेट वापरून आशय अॅक्सेस केला. तुम्ही <ph name="DOMAIN" /> वर प्रदान करता तो डेटा तुमच्या अॅडमिनिस्ट्रेटरद्वारे इंटरसेप्ट केला जाऊ शकतो.</translation> @@ -807,7 +813,7 @@ <translation id="6550675742724504774">पर्याय</translation> <translation id="6563469144985748109">आपल्या व्यवस्थापकाने अद्याप ती मंजूर केली नाही</translation> <translation id="6569060085658103619">आपण एक विस्तार पृष्ठ पाहत आहात</translation> -<translation id="6596325263575161958">कूटबद्धता पर्याय</translation> +<translation id="6596325263575161958">एंक्रिप्शन पर्याय</translation> <translation id="6604181099783169992">गती किंवा प्रकाश सेन्सर</translation> <translation id="6624427990725312378">संपर्क माहिती</translation> <translation id="6626291197371920147">वैध कार्ड नंबर जोडा</translation> @@ -830,7 +836,7 @@ <translation id="681021252041861472">आवश्यक भाग</translation> <translation id="6810899417690483278">सानुकूलीकरण आयडी</translation> <translation id="6824266427216888781">प्रदेश डेटा लोड करण्यात अयशस्वी</translation> -<translation id="6825578344716086703">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एका कमकुवत स्वाक्षरी अल्गोरिदमचा (जसे की SHA-1) वापर करून स्वाक्षरी केलेले सर्टिफिकेट सादर केले. याचा अर्थ असा आहे की सर्व्हरने सादर केलेली सुरक्षितता क्रेडेंशियल बनावट असू शकतात आणि हा सर्व्हर तुम्ही अपेक्षा करत असलेला नसेल. (तुम्ही कदाचित एखाद्या हल्लेखोराशी संभाषण करत आहात).</translation> +<translation id="6825578344716086703">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने एका कमकुवत स्वाक्षरी अल्गोरिदमचा (जसे SHA-1) वापर करून स्वाक्षरीकृत केलेले प्रमाणपत्र सादर केले. याचा अर्थ असा आहे, की सर्व्हरने सादर केलेली सुरक्षितता क्रेडेंशियल बनावट असू शकतात आणि हा सर्व्हर तुम्ही अपेक्षा करत असलेला नसेल. (तुम्ही कदाचित एखाद्या हल्लेखोराशी संभाषण करत आहात).</translation> <translation id="6831043979455480757">भाषांतर करा</translation> <translation id="6839929833149231406">क्षेत्र</translation> <translation id="6852204201400771460">अॅप रीलोड करायचे?</translation> @@ -905,6 +911,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">नाही</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">व्यवस्थापित केलेले सेशन अधिशून्य</translation> <translation id="7390545607259442187">कार्डची पुष्टी करा</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>जर तुम्हाला Windows कॉंप्युटरवर Superfish सॉफ्टवेअर असेल, तर तुम्हाला हा एरर दिसेल.</p> @@ -942,7 +949,7 @@ <translation id="7542995811387359312">स्वयंचलित क्रेडिट कार्ड भरणे अक्षम झाले आहे कारण हा फॉर्म सुरक्षित कनेक्शन वापरत नाही.</translation> <translation id="7543525346216957623">आपल्या पालकास विचारा</translation> <translation id="7548892272833184391">कनेक्शन एरर दुरूस्त करा</translation> -<translation id="7549584377607005141">हे वेबपृष्ठ योग्यरितीने प्रदर्शित केले जाण्यासाठी आपण पूर्वी एंटर केलेला डेटा आवश्यक आहे. आपण हा डेटा पुन्हा पाठवू शकता, परंतु असे केल्याने या पृष्ठाने मागे केलेली कोणत्याही क्रियेची पुनरावृत्ती आपण कराल.</translation> +<translation id="7549584377607005141">हे वेबपेज योग्यरितीने प्रदर्शित केले जाण्यासाठी तुम्ही पूर्वी एंटर केलेला डेटा आवश्यक आहे. तुम्ही हा डेटा पुन्हा पाठवू शकता, परंतु असे केल्याने या पेजने मागे केलेली कोणत्याही क्रियेची पुनरावृत्ती तुम्ही कराल.</translation> <translation id="7552846755917812628">खालील टिपा वापरून पहा:</translation> <translation id="7554791636758816595">नवीन टॅब</translation> <translation id="7564049878696755256">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation> @@ -957,7 +964,7 @@ <translation id="7600965453749440009">कधीही <ph name="LANGUAGE" /> चा भाषांतर करु नका</translation> <translation id="7610193165460212391">मूल्य <ph name="VALUE" /> श्रेणीच्या बाहेर आहे.</translation> <translation id="7613889955535752492">कालबाह्य: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> -<translation id="7615602087246926389">आपल्याकडे आधीपासूनच डेटा आहे जो आपल्या Google खाते संकेतशब्दाची विभिन्न आवृत्ती वापरुन कूटबद्ध करण्यात आला आहे. कृपया तो खाली प्रविष्ट करा.</translation> +<translation id="7615602087246926389">तुमच्याकडे आधीपासूनच डेटा आहे जो तुमच्या Google खाते पासवर्डची विभिन्न आवृत्ती वापरुन एंक्रिप्ट करण्यात आला आहे. कृपया तो खाली एंटर करा.</translation> <translation id="7637571805876720304">Chromium वरून क्रेडिट कार्ड काढून टाकायचे?</translation> <translation id="765676359832457558">प्रगत सेटिंग्ज लपवा...</translation> <translation id="7658239707568436148">रद्द करा</translation> @@ -972,7 +979,7 @@ <translation id="7704050614460855821"><ph name="BEGIN_LINK" /> <ph name="SITE" /> (असुरक्षित) वर सुरु ठेवा<ph name="END_LINK" /></translation> <translation id="7714464543167945231">सर्टिफिकेट</translation> <translation id="7716147886133743102">तुमच्या प्रशासकाने ब्लॉक केलेले</translation> -<translation id="7716424297397655342">ही साइट कॅश मधून लोड करणे शक्य नाही</translation> +<translation id="7716424297397655342">ही साइट कॅशे मधून लोड करणे शक्य नाही</translation> <translation id="7723047071702270851">कार्ड संपादित करा</translation> <translation id="774634243536837715">धोकादायक आशय ब्लॉक केला.</translation> <translation id="7752995774971033316">व्यवस्थापित न केलेले</translation> @@ -986,7 +993,7 @@ <translation id="7791543448312431591">जोडा</translation> <translation id="7793553086574152071">पुढील वेळी जलद पेमेंट देण्यासाठी, तुमच्या Google खात्यावर हे कार्ड सेव्ह करा.</translation> <translation id="7793809570500803535"><ph name="SITE" />येथील वेबपृष्ठ कदाचित तात्पुरते बंद आहे किंवा ते कदाचित नवीन वेब पत्त्यावर कायमचे हलवले आहे.</translation> -<translation id="7800304661137206267">संदेश प्रमाणीकरणासाठी <ph name="MAC" /> आणि की विनिमय तंत्र महणून <ph name="KX" /> सह <ph name="CIPHER" /> वापरून कनेक्शन कूटबद्ध केले आहे.</translation> +<translation id="7800304661137206267">मेसेज अॉथेंटिकेशनसाठी <ph name="MAC" /> आणि महत्त्वाचे एक्स्चेंज तंत्र म्हणून <ph name="KX" /> सह <ph name="CIPHER" /> वापरून कनेक्शन एंक्रिप्ट केले आहे.</translation> <translation id="7802523362929240268">साइट कायदेशीर आहे</translation> <translation id="780301667611848630">नाही, नको</translation> <translation id="7805768142964895445">स्थिती</translation> @@ -995,6 +1002,7 @@ <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' साठी <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> सापडले</translation> <translation id="7818867226424560206">धोरण व्यवस्थापन</translation> <translation id="782886543891417279">तुम्ही वापरत असलेल्या (<ph name="WIFI_NAME" />) वाय-फाय च्या लॉग इन पेजला तुम्हाला भेट देण्याची आवश्यकता असू शकते.</translation> +<translation id="7835178595033117206">बुकमार्क काढून टाकले</translation> <translation id="785549533363645510">तरीही, तुम्ही अदृश्य नाही. गुप्त झाल्याने तुमचे ब्राउझिंग तुमचा एम्पलॉयर, तुमचा इंटरनेट सेवा पुरवठादार, किंवा तुम्ही भेट देता त्या वेबसाइटपासून लपत नाही.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">साइट सोडायची?</translation> @@ -1042,7 +1050,7 @@ <translation id="8225771182978767009">ज्या व्यक्तीने हा कॉंप्युटर सेट केला त्या व्यक्तीने ही साइट अवरोधित करण्याचे निवडले आहे.</translation> <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation> <translation id="8238581221633243064">पेज नवीन गुप्त टॅबमध्ये उघडा</translation> -<translation id="8241707690549784388">आपण जे पृष्ठ शोधत आहत ते आपण एंटर केलेली माहिती वापरत आहे. त्या पृष्ठाकडे परत गेल्यास कदाचित आपण केलेल्या कोणत्याही क्रियेची पुनरावृत्ती होईल. आपण सुरू ठेवू इच्छिता?</translation> +<translation id="8241707690549784388">तुम्ही जे पेज शोधत आहत ते तुम्ही एंटर केलेली माहिती वापरत आहे. त्या पेजकडे परत गेल्यास कदाचित तुम्ही केलेल्या कोणत्याही क्रियेची पुनरावृत्ती होईल. तुम्ही सुरू ठेवू इच्छिता?</translation> <translation id="8241712895048303527">या साइटवर ब्लॉक करा</translation> <translation id="8242426110754782860">पुढे जा</translation> <translation id="8249320324621329438">अंतिम प्राप्त केलेले:</translation> @@ -1100,7 +1108,7 @@ <translation id="8662811608048051533">तुम्हाला बहुतांश साइटवरून साइन आउट करते.</translation> <translation id="8663226718884576429">ऑर्डर सारांश, <ph name="TOTAL_LABEL" />, आणखी तपशील</translation> <translation id="8680536109547170164"><ph name="QUERY" />, उत्तर, <ph name="ANSWER" /></translation> -<translation id="8703575177326907206"><ph name="DOMAIN" /> चे आपले कनेक्शन कूटबद्ध केलेले नाही.</translation> +<translation id="8703575177326907206">तुमचे <ph name="DOMAIN" /> चे कनेक्शन एंक्रिप्ट केलेले नाही.</translation> <translation id="8718314106902482036">पेमेंट पूर्ण झाले नाही</translation> <translation id="8719263113926255150"><ph name="ENTITY" />, <ph name="DESCRIPTION" />, शोध सूचना</translation> <translation id="8725066075913043281">पुन्हा प्रयत्न करा</translation> @@ -1130,8 +1138,9 @@ <translation id="8874824191258364635">वैध कार्ड नंबर एंटर करा</translation> <translation id="8876793034577346603">विश्लेषण करण्यात नेटवर्क कॉन्फिगरेशन अयशस्वी.</translation> <translation id="8891727572606052622">चुकीचे प्रॉक्सी मोड.</translation> +<translation id="8892964541482452187">टॅब स्विच बटण, या टॅबवर जाण्यासाठी एंटर दाबा</translation> <translation id="8903921497873541725">झूम इन करा</translation> -<translation id="8931333241327730545">आपण आपल्या Google खात्यात हे कार्ड सेव्ह करू इच्छिता?</translation> +<translation id="8931333241327730545">तुम्ही तुमच्या Google खात्यात हे कार्ड सेव्ह करू इच्छिता?</translation> <translation id="8932102934695377596">आपले घड्याळ मागे आहे</translation> <translation id="893332455753468063">नाव जोडा</translation> <translation id="8938939909778640821">स्वीकारलेली क्रेडिट आणि प्रीपेड कार्डे</translation> @@ -1155,6 +1164,7 @@ <translation id="9035022520814077154">सुरक्षितता एरर</translation> <translation id="9038649477754266430">पेज अधिक द्रुतपणे लोड करण्यासाठी पूर्वानुमान सेवेचा वापर करा</translation> <translation id="9039213469156557790">पुढे, या पृष्ठात सुरक्षित नसलेली इतर संसाधने समाविष्ट आहेत. ही संसाधने संक्रमणात असताना इतरांद्वारे पाहिली जाऊ शकतात आणि पृष्ठाचे वर्तन बदलण्यासाठी आक्रमणकर्त्याद्वारे सुधारित केली जाऊ शकतात.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">तुम्ही <ph name="DOMAIN" /> वर पोहोचण्याचा प्रयत्न केला, परंतु सर्व्हरने चुकीचे सर्टिफिकेट दाखवले आहे.</translation> <translation id="9050666287014529139">सांकेतिक वाक्यांश</translation> <translation id="9065203028668620118">संपादन</translation> @@ -1162,7 +1172,7 @@ <translation id="9076283476770535406">कदाचित तिच्यामध्ये प्रौढ सामग्री असू शकते</translation> <translation id="9078964945751709336">अधिक माहिती आवश्यक आहे</translation> <translation id="9080712759204168376">मागणी सारांश</translation> -<translation id="9103872766612412690"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Chromium ने यावेळी <ph name="SITE" /> शी कनेक्ट करण्याचा प्रयत्न केला तेव्हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Chromium ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation> +<translation id="9103872766612412690">तुमची माहिती संरक्षित करण्यासाठी <ph name="SITE" /> सामान्यतः एंक्रिप्शन वापरते. Chromium ने यावेळी <ph name="SITE" /> शी कनेक्ट करण्याचा प्रयत्न केला तेव्हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Chromium ने कनेक्शन थांबवल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation> <translation id="9106062320799175032">बिलिंग पत्ता जोडा</translation> <translation id="910908805481542201">याचे निराकरण करण्यात माझी मदत करा</translation> <translation id="9114524666733003316">कार्डची निश्चिती करत आहे...</translation> @@ -1178,8 +1188,9 @@ <translation id="9170848237812810038">&पूर्ववत करा</translation> <translation id="9171296965991013597">अॅप सोडायचे?</translation> <translation id="917450738466192189">सर्व्हरचे सर्टिफिकेट चुकीचे आहे.</translation> +<translation id="9183302530794969518">Google दस्तऐवज</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> असमर्थित प्रोटोकॉल वापरतो.</translation> -<translation id="9205078245616868884">आपला डेटा आपल्या संकालन सांकेतिक वाक्यांशासह कूटबद्ध केला जातो. संकालन सुरु करण्यासाठी तो एंटर करा.</translation> +<translation id="9205078245616868884">तुमचा डेटा तुमच्या सिंक पासफ्रेजसह एंक्रिप्ट केला जातो. सिंक सुरु करण्यासाठी तो एंटर करा.</translation> <translation id="9207861905230894330">लेख जोडण्यात अयशस्वी.</translation> <translation id="9215416866750762878">एक अॅप्लिकेशन Chrome ला या साइटशी सुरक्षितपणे कनेक्ट करण्यापासून थांबवत आहे</translation> <translation id="9219103736887031265">इमेज</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 16c3819..bf627f9 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Det kreves et telefonnummer</translation> <translation id="1517500485252541695">Godkjente kreditt- og debetkort</translation> <translation id="1519264250979466059">Versjonsdato</translation> +<translation id="1521655867290435174">Google Regneark</translation> <translation id="1527263332363067270">Venter på tilkobling …</translation> <translation id="1532118530259321453">På denne siden står det</translation> <translation id="153384715582417236">Det var alt for denne gangen</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Eksportér til MacOS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">Tilkoblingen ble tilbakestilt.</translation> +<translation id="2785008241190445880">Bokmerket er erstattet</translation> <translation id="2788784517760473862">Godkjente kredittkort</translation> <translation id="2794233252405721443">Nettstedet er blokkert</translation> <translation id="2799020568854403057">Nettstedet du er på vei til, inneholder skadelige apper</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">Gå dit nå</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />. Sikkerhetssertifikatet til tjeneren inneholder feil. Dette kan være forårsaket av en feilkonfigurering eller en angriper som avskjærer tilkoblingen din.</translation> +<translation id="467809019005607715">Google Presentasjoner</translation> <translation id="4690462567478992370">Slutt å bruke et ugyldig sertifikat</translation> <translation id="4690954380545377795">Du kan miste tilgangen til Google-kontoen din eller bli utsatt for identitetstyveri. Chrome anbefaler at du endrer passordet ditt nå.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">Velg kontaktinformasjon</translation> <translation id="5327248766486351172">Navn</translation> <translation id="5332219387342487447">Leveringsmetode</translation> +<translation id="5344579389779391559">Denne siden kan prøve å belaste deg for penger</translation> <translation id="5355557959165512791">Du kan ikke gå til <ph name="SITE" /> akkurat nå, siden sertifikatet for nettstedet er trukket tilbake. Nettverksfeil- og angrep er vanligvis midlertidige, så denne siden fungerer sannsynligvis senere.</translation> <translation id="536296301121032821">Kunne ikke lagre angivelsen for enhetsinnstillinger</translation> <translation id="5371425731340848620">Oppdater kortet</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">År</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Side 1}other{Side #}}</translation> <translation id="6017850046339264347">Angripere på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kan installere villedende apper som ser ut til å være noe annet, eller samle inn data som kan brukes til å spore deg. <ph name="BEGIN_LEARN_MORE_LINK" />Finn ut mer<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Gi Chrome et personlig preg</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" /> og <ph name="TYPE_3" /> (synkronisert)</translation> <translation id="6027201098523975773">Skriv inn et navn</translation> <translation id="6039846035001940113">Hvis problemet fortsetter, kan du kontakte nettstedseieren.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">Dette innholdet kan prøve å lure deg til å installere programvare eller oppgi personopplysninger. <ph name="BEGIN_LINK" />Vis det likevel<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Du kan ikke gå til <ph name="SITE" /> akkurat nå, siden nettstedet bruker sertifikatfesting. Nettverksfeil og -angrep er vanligvis midlertidige, så denne siden fungerer sannsynligvis senere.</translation> <translation id="6059925163896151826">USB-enheter</translation> +<translation id="6060991652695587932">Velg e-posttjenesten din for å få rask tilgang</translation> <translation id="6071091556643036997">Regeltypen er ugyldig.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Dette kortet blir lagret i Google-kontoen din for raskere betaling på flere enheter.}other{Disse kortene blir lagret i Google-kontoen din for raskere betaling på flere enheter.}}</translation> <translation id="6080696365213338172">Du har åpnet innhold via et administratorlevert sertifikat. Data du sender til <ph name="DOMAIN" /> kan stoppes av administratoren din.</translation> @@ -903,6 +909,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> – <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">Nei takk</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Overstyring av administrert økt</translation> <translation id="7390545607259442187">Bekreft kortet</translation> <translation id="7400418766976504921">Nettadresse</translation> <translation id="7407424307057130981"><p>Du ser denne feilen hvis du har Superfish-programvare på Windows-datamaskinen din.</p> @@ -993,6 +1000,7 @@ <translation id="7815407501681723534">Fant <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> for «<ph name="SEARCH_STRING" />»</translation> <translation id="7818867226424560206">Administrasjon av retningslinjer</translation> <translation id="782886543891417279">Det kan hende at Wi-Fi-nettverket du bruker (<ph name="WIFI_NAME" />), krever at du besøker en påloggingsside.</translation> +<translation id="7835178595033117206">Bokmerket er fjernet</translation> <translation id="785549533363645510">Du er imidlertid ikke usynlig. Inkognitomodus skjuler ikke surfingen din for arbeidsgiveren din, Internett-leverandøren eller nettstedene du besøker.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">Vil du forlate nettstedet?</translation> @@ -1128,6 +1136,7 @@ <translation id="8874824191258364635">Angi et gyldig kortnummer</translation> <translation id="8876793034577346603">Nettverkskonfigurasjon kunne ikke analyseres.</translation> <translation id="8891727572606052622">Ugyldig modus for mellomtjener.</translation> +<translation id="8892964541482452187">Knappen for å bytte fane, trykk på enter for å bytte til denne fanen</translation> <translation id="8903921497873541725">Zoom inn</translation> <translation id="8931333241327730545">Vil du lagre dette kortet i Google-kontoen din?</translation> <translation id="8932102934695377596">Klokken går for sent</translation> @@ -1153,6 +1162,7 @@ <translation id="9035022520814077154">Sikkerhetsfeil</translation> <translation id="9038649477754266430">Bruk en prediksjonstjeneste for å laste inn sider raskere</translation> <translation id="9039213469156557790">Denne siden inneholder i tillegg andre ressurser som ikke er sikre. Disse ressursene er synlige for andre mens de sendes frem og tilbake, og eventuelle angripere kan modifisere dem for å endre på atferden til siden.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Du forsøkte å nå <ph name="DOMAIN" />, men tjeneren oppga et ugyldig sertifikat.</translation> <translation id="9050666287014529139">Passordfrase</translation> <translation id="9065203028668620118">Endre</translation> @@ -1176,6 +1186,7 @@ <translation id="9170848237812810038">&Angre</translation> <translation id="9171296965991013597">Vil du gå ut av appen?</translation> <translation id="917450738466192189">Tjenerens sertifikat er ugyldig.</translation> +<translation id="9183302530794969518">Google Dokumenter</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> bruker en protokoll som ikke støttes.</translation> <translation id="9205078245616868884">Dataene dine er kryptert med passordfrasen din for synkronisering. Skriv den inn for å starte synkroniseringen.</translation> <translation id="9207861905230894330">Kunne ikke legge til artikkelen.</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb index 3cf2431..520f1c7 100644 --- a/components/strings/components_strings_pt-PT.xtb +++ b/components/strings/components_strings_pt-PT.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Número de telefone obrigatório</translation> <translation id="1517500485252541695">Cartões de crédito e de débito admitidos</translation> <translation id="1519264250979466059">Data da Compilação</translation> +<translation id="1521655867290435174">Google Sheets</translation> <translation id="1527263332363067270">A aguardar ligação…</translation> <translation id="1532118530259321453">Esta página diz</translation> <translation id="153384715582417236">É tudo por agora</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Exportar para MacOS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">A ligação foi reposta.</translation> +<translation id="2785008241190445880">Marcador substituído</translation> <translation id="2788784517760473862">Cartões de crédito admitidos</translation> <translation id="2794233252405721443">Site bloqueado</translation> <translation id="2799020568854403057">O site que pretende visitar contém aplicações prejudiciais</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">Aceder agora</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Este servidor não conseguiu provar que é o domínio <ph name="DOMAIN" />; o respetivo certificado de segurança contém erros. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação.</translation> +<translation id="467809019005607715">Google Slides</translation> <translation id="4690462567478992370">Parar de utilizar um certificado inválido</translation> <translation id="4690954380545377795">Pode perder o acesso à sua Conta Google ou ser vítima de roubo de identidade. O Chrome recomenda a alteração da palavra-passe agora.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">Escolher informações de contacto</translation> <translation id="5327248766486351172">Nome</translation> <translation id="5332219387342487447">Método de envio</translation> +<translation id="5344579389779391559">Esta página pode tentar cobrar-lhe dinheiro</translation> <translation id="5355557959165512791">Não pode visitar <ph name="SITE" /> neste momento, porque o certificado foi revogado. Os erros de rede e os ataques são geralmente temporários, pelo que esta página deverá funcionar mais tarde.</translation> <translation id="536296301121032821">Falha ao armazenar as definições da política</translation> <translation id="5371425731340848620">Atualizar cartão</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">Ano</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Página 1}other{Página #}}</translation> <translation id="6017850046339264347">Os utilizadores mal-intencionados em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem instalar aplicações fraudulentas que se fazem passar por algo diferente ou recolhem dados que podem ser utilizados para o monitorizar. <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Personalize o Google Chrome</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizados)</translation> <translation id="6027201098523975773">Introduza um nome</translation> <translation id="6039846035001940113">Se o problema persistir, contacte o proprietário do site.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">Este conteúdo pode tentar enganá-lo de forma a que instale software ou revele informações pessoais. <ph name="BEGIN_LINK" />Mostrar mesmo assim<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Não pode visitar <ph name="SITE" /> neste momento, porque o Website utiliza a afixação de certificados. Os erros de rede e os ataques são geralmente temporários, pelo que esta página deverá funcionar mais tarde.</translation> <translation id="6059925163896151826">Dispositivos USB</translation> +<translation id="6060991652695587932">Selecione o serviço de email que pretende para um acesso rápido</translation> <translation id="6071091556643036997">O tipo de política é inválido.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Este cartão será guardado na sua Conta Google para um pagamento mais rápido em vários dispositivos.}other{Estes cartões serão guardados na sua Conta Google para um pagamento mais rápido em vários dispositivos.}}</translation> <translation id="6080696365213338172">Acedeu a conteúdos utilizando um certificado fornecido por um gestor. Os dados que fornecer a <ph name="DOMAIN" /> podem ser intercetados pelo seu gestor.</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">Não</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Substituição de sessão gerida</translation> <translation id="7390545607259442187">Confirmar cartão</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>Este erro é apresentado se tiver software Superfish no seu computador com Windows.</p> @@ -993,6 +1000,7 @@ <translation id="7815407501681723534">Encontrados <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> para "<ph name="SEARCH_STRING" />"</translation> <translation id="7818867226424560206">Gestão de políticas</translation> <translation id="782886543891417279">A rede Wi-Fi que está a utilizar (<ph name="WIFI_NAME" />) pode exigir que visite a respetiva página de início de sessão.</translation> +<translation id="7835178595033117206">Marcador removido</translation> <translation id="785549533363645510">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 fornecedor de serviços de Internet, nem dos Sites que visitar.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">Pretende sair do site?</translation> @@ -1129,6 +1137,7 @@ <translation id="8874824191258364635">Introduza um número de cartão válido</translation> <translation id="8876793034577346603">Falha ao analisar a configuração de rede.</translation> <translation id="8891727572606052622">Modo de proxy inválido.</translation> +<translation id="8892964541482452187">Botão de mudança de separador: prima Enter para mudar para este separador</translation> <translation id="8903921497873541725">Ampliar</translation> <translation id="8931333241327730545">Pretende guardar este cartão na sua Conta Google?</translation> <translation id="8932102934695377596">O seu relógio está atrasado</translation> @@ -1154,6 +1163,7 @@ <translation id="9035022520814077154">Erro de segurança</translation> <translation id="9038649477754266430">Utilizar um serviço de previsão para carregar páginas mais rapidamente</translation> <translation id="9039213469156557790">Além disso, esta página inclui outros recursos que não são seguros. Estes recursos podem ser vistos por outros utilizadores em trânsito e modificados por um utilizador mal intencionado com o intuito de alterar o comportamento da página.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Tentou aceder a <ph name="DOMAIN" />, mas o servidor apresentou um certificado inválido.</translation> <translation id="9050666287014529139">Frase de acesso</translation> <translation id="9065203028668620118">Editar</translation> @@ -1177,6 +1187,7 @@ <translation id="9170848237812810038">An&ular</translation> <translation id="9171296965991013597">Pretende sair da aplicação?</translation> <translation id="917450738466192189">O certificado do servidor é inválido.</translation> +<translation id="9183302530794969518">Google Docs</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> utiliza um protocolo não suportado.</translation> <translation id="9205078245616868884">Os dados estão encriptados com a sua frase de acesso de sincronização. Introduza-a para iniciar a sincronização.</translation> <translation id="9207861905230894330">Falha ao adicionar o artigo.</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb index 31af13f..0b6d02c 100644 --- a/components/strings/components_strings_ro.xtb +++ b/components/strings/components_strings_ro.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">Numărul de telefon este obligatoriu</translation> <translation id="1517500485252541695">Carduri de credit și de debit acceptate</translation> <translation id="1519264250979466059">Dată versiune:</translation> +<translation id="1521655867290435174">Foi de calcul Google</translation> <translation id="1527263332363067270">Se așteaptă conectarea…</translation> <translation id="1532118530259321453">Această pagină afișează mesajul</translation> <translation id="153384715582417236">Asta este tot</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">Exportă în format MacOS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">Conexiunea a fost resetată.</translation> +<translation id="2785008241190445880">Marcajul a fost înlocuit</translation> <translation id="2788784517760473862">Carduri de credit acceptate</translation> <translation id="2794233252405721443">Site blocat</translation> <translation id="2799020568854403057">Site-ul pe care urmează să îl accesezi conține aplicații dăunătoare</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">Accesez acum</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">Acest server nu a putut dovedi că este <ph name="DOMAIN" />; certificatul său de securitate conține erori. Cauza poate fi o configurare greșită sau interceptarea conexiunii de către un atacator.</translation> +<translation id="467809019005607715">Prezentări Google</translation> <translation id="4690462567478992370">Nu mai folosi un certificat nevalid</translation> <translation id="4690954380545377795">Este posibil să pierzi accesul la Contul Google sau să fii victima unui furt de identitate. Chrome îți recomandă să îți schimbi acum parola.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">Alege informațiile de contact</translation> <translation id="5327248766486351172">Nume</translation> <translation id="5332219387342487447">Metoda de expediere</translation> +<translation id="5344579389779391559">Această pagină poate să genereze costuri</translation> <translation id="5355557959165512791">Nu poți accesa <ph name="SITE" /> acum, deoarece certificatul său a fost revocat. Erorile de rețea și atacurile sunt de obicei temporare și probabil că această pagină va funcționa mai târziu.</translation> <translation id="536296301121032821">Setările pentru politică nu au putut fi stocate</translation> <translation id="5371425731340848620">Actualizează cardul</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">An</translation> <translation id="6016158022840135739">{COUNT,plural, =1{Pagina 1}few{Pagina #}other{Pagina #}}</translation> <translation id="6017850046339264347">Atacatorii de pe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ar putea instala aplicații înșelătoare care pretind a fi altceva sau culeg date care pot fi folosite pentru a te urmări. <ph name="BEGIN_LEARN_MORE_LINK" />Află mai multe<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Personalizează Chrome</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (sincronizate)</translation> <translation id="6027201098523975773">Introdu un nume</translation> <translation id="6039846035001940113">Dacă problema persistă, contactează proprietarul site-ului.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">Acest conținut ar putea încerca să te păcălească să instalezi software sau să dezvălui informații cu caracter personal. <ph name="BEGIN_LINK" />Afișează oricum<ph name="END_LINK" /></translation> <translation id="6051221802930200923">Nu poți accesa <ph name="SITE" /> acum, deoarece site-ul folosește fixarea certificatelor. Erorile de rețea și atacurile sunt de obicei temporare și probabil că această pagină va funcționa mai târziu.</translation> <translation id="6059925163896151826">Dispozitive USB</translation> +<translation id="6060991652695587932">Alege-ți serviciul de e-mail pentru acces rapid</translation> <translation id="6071091556643036997">Tipul de politică nu este valid.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{Acest card va fi salvat în Contul Google pentru finalizarea mai ușoară a plății pe toate dispozitivele.}few{Aceste carduri vor fi salvate în Contul Google pentru finalizarea mai ușoară a plății pe toate dispozitivele.}other{Aceste carduri vor fi salvate în Contul Google pentru finalizarea mai ușoară a plății pe toate dispozitivele.}}</translation> <translation id="6080696365213338172">Ați accesat conținut utilizând un certificat oferit de administrator. Datele pe care le transmiteți către <ph name="DOMAIN" /> pot fi interceptate de administratorul dvs.</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">Nu</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">Modificarea sesiunii gestionate</translation> <translation id="7390545607259442187">Confirmă cardul</translation> <translation id="7400418766976504921">Adresă URL</translation> <translation id="7407424307057130981"><p>Această eroare se va afișa dacă ai un software Superfish pe computerul Windows.</p> @@ -994,6 +1001,7 @@ <translation id="7815407501681723534">S-au găsit <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> pentru „<ph name="SEARCH_STRING" />”</translation> <translation id="7818867226424560206">Gestionarea politicilor</translation> <translation id="782886543891417279">Rețeaua Wi-Fi pe care o folosești (<ph name="WIFI_NAME" />) poate solicita accesarea paginii de conectare.</translation> +<translation id="7835178595033117206">Marcajul a fost eliminat</translation> <translation id="785549533363645510">Cu toate acestea, 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> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation> <translation id="7862185352068345852">Ieși de pe site?</translation> @@ -1130,6 +1138,7 @@ <translation id="8874824191258364635">Introdu un număr de card valid</translation> <translation id="8876793034577346603">Configurația rețelei nu a putut fi analizată.</translation> <translation id="8891727572606052622">Mod proxy nevalid.</translation> +<translation id="8892964541482452187">Butonul Comută între file, apasă pe Enter pentru a comuta la această filă</translation> <translation id="8903921497873541725">Mărește</translation> <translation id="8931333241327730545">Dorești să salvezi acest card în Contul Google?</translation> <translation id="8932102934695377596">Ora este setată în trecut</translation> @@ -1155,6 +1164,7 @@ <translation id="9035022520814077154">Eroare de securitate</translation> <translation id="9038649477754266430">Folosește un serviciu de predicții pentru a încărca paginile mai rapid</translation> <translation id="9039213469156557790">În plus, această pagină include alte resurse care nu sunt securizate. Aceste resurse sunt vizibile pentru alți utilizatori în cursul transferului și pot fi modificate de un atacator pentru a schimba comportamentul paginii.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">Ai încercat să accesezi <ph name="DOMAIN" />, dar serverul a prezentat un certificat nevalid.</translation> <translation id="9050666287014529139">Expresie de acces</translation> <translation id="9065203028668620118">Editează</translation> @@ -1178,6 +1188,7 @@ <translation id="9170848237812810038">&Anulează</translation> <translation id="9171296965991013597">Ieși din aplicație?</translation> <translation id="917450738466192189">Certificatul serverului nu este valid.</translation> +<translation id="9183302530794969518">Documente Google</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> folosește un protocol neacceptat.</translation> <translation id="9205078245616868884">Datele sunt criptate cu expresia de acces pentru sincronizare. Introdu-o pentru a începe sincronizarea.</translation> <translation id="9207861905230894330">Articolul nu a fost adăugat.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 5a1e9a9..6e2bf892 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">ఫోన్ నంబర్ అవసరం</translation> <translation id="1517500485252541695">ఆమోదించబడిన క్రెడిట్ మరియు డెబిట్ కార్డ్లు</translation> <translation id="1519264250979466059">రూపకల్పన తేదీ</translation> +<translation id="1521655867290435174">Google షీట్లు</translation> <translation id="1527263332363067270">కనెక్షన్ కోసం వేచి ఉన్నాము...</translation> <translation id="1532118530259321453">ఈ పేజీ ఇలా చెబుతోంది</translation> <translation id="153384715582417236">ఇప్పటికి ఇంతే</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">MacOS ఫార్మాట్లో ఎగుమతి చేయి</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">కనెక్షన్ మళ్ళీ సెట్ చెయ్యబడింది.</translation> +<translation id="2785008241190445880">బుక్మార్క్ భర్తీ చేయబడింది</translation> <translation id="2788784517760473862">ఆమోదించబడిన క్రెడిట్ కార్డ్లు</translation> <translation id="2794233252405721443">సైట్ బ్లాక్ చేయబడింది</translation> <translation id="2799020568854403057">రాబోయే సైట్ హానికరమైన యాప్లను కలిగి ఉంది</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">ఇప్పుడు నన్ను అక్కడకు తీసుకు వెళ్లు</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రంలో లోపాలు ఉన్నాయి. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్కి అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation> +<translation id="467809019005607715">Google స్లయిడ్లు</translation> <translation id="4690462567478992370">చెల్లని ప్రమాణపత్రాన్ని ఉపయోగించడాన్ని ఆపివేయి</translation> <translation id="4690954380545377795">మీరు మీ Google ఖాతాకు యాక్సెస్ను కోల్పోవచ్చు లేదా గుర్తింపు సమాచారం చౌర్యం కావచ్చు. Chrome వెంటనే మీ పాస్వర్డ్ను మార్చుకోవాల్సిందిగా సిఫార్సు చేస్తోంది.</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">సంప్రదింపు సమాచారాన్ని ఎంచుకోండి</translation> <translation id="5327248766486351172">పేరు</translation> <translation id="5332219387342487447">షిప్పింగ్ పద్ధతి</translation> +<translation id="5344579389779391559">ఈ పేజీ మీకు డబ్బు ఛార్జీ చేయడానికి ప్రయత్నించవచ్చు</translation> <translation id="5355557959165512791"><ph name="SITE" /> యొక్క ప్రమాణపత్రం రద్దు చేయబడినందున మీరు ప్రస్తుతం దీన్ని సందర్శించలేరు. నెట్వర్క్ లోపాలు మరియు దాడులు సాధారణంగా తాత్కాలికమే, కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation> <translation id="536296301121032821">విధాన సెట్టింగ్లను నిల్వ చేయడంలో విఫలమైంది</translation> <translation id="5371425731340848620">కార్డ్ని అప్డేట్ చేయండి</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">సంవత్సరం</translation> <translation id="6016158022840135739">{COUNT,plural, =1{పేజీ 1}other{పేజీ #}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />లోని హ్యాకర్లు మోసపూరిత యాప్లను ఇన్స్టాల్ చేయవచ్చు, ఇవి వేరే వాటిలా కనిపించవచ్చు లేదా మిమ్మల్ని ట్రాక్ చేయడానికి ఉపయోగించబడే డేటాని సేకరించవచ్చు. <ph name="BEGIN_LEARN_MORE_LINK" />మరింత తెలుసుకోండి<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">Chromeని మీకు నచ్చినట్లు తయారుగా చేసుకోండి</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />, <ph name="TYPE_2" />, <ph name="TYPE_3" /> (సమకాలీకరించబడ్డాయి)</translation> <translation id="6027201098523975773">పేరుని నమోదు చేయండి</translation> <translation id="6039846035001940113">సమస్య కొనసాగుతుంటే, సైట్ యజమానిని సంప్రదించండి.</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">ఈ కంటెంట్ సాఫ్ట్వేర్ని ఇన్స్టాల్ చేయడానికి లేదా వ్యక్తిగత సమాచారాన్ని బహిర్గతం చేయడానికి పురిగొల్పేలా మిమ్మల్ని మాయ చేయడానికి ప్రయత్నించవచ్చు. <ph name="BEGIN_LINK" />ఏదేమైనా చూపు<ph name="END_LINK" /></translation> <translation id="6051221802930200923">ప్రమాణపత్రాన్ని పిన్ చేసే పద్ధతిని వెబ్సైట్ ఉపయోగిస్తుంది కనుక మీరు ప్రస్తుతానికి <ph name="SITE" />ని సందర్శించలేరు. నెట్వర్క్ లోపాలు మరియు దాడులు సాధారణంగా తాత్కాలికమే, కనుక ఈ పేజీ తర్వాత పని చేయవచ్చు.</translation> <translation id="6059925163896151826">USB పరికరాలు</translation> +<translation id="6060991652695587932">త్వరిత యాక్సెస్ కోసం మీ ఇమెయిల్ సేవను ఎంచుకోండి</translation> <translation id="6071091556643036997">విధాన రకం చెల్లదు.</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{అన్ని పరికరాలలోనూ చెక్అవుట్ను వేగవంతంగా పూర్తి చేయడానికి, ఈ కార్డ్ మీ Google ఖాతాకు సేవ్ చేయబడుతుంది.}other{అన్ని పరికరాలలోనూ చెక్అవుట్ను వేగవంతంగా పూర్తి చేయడానికి, ఈ కార్డ్లు మీ Google ఖాతాకు సేవ్ చేయబడతాయి.}}</translation> <translation id="6080696365213338172">మీరు నిర్వాహకుని ద్వారా అందించబడిన ప్రమాణపత్రాన్ని ఉపయోగించి కంటెంట్ను ప్రాప్యత చేసారు. మీరు <ph name="DOMAIN" />కు అందించే డేటాకు మీ నిర్వాహకుని ద్వారా అంతరాయం ఏర్పడవచ్చు.</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">వద్దు</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">సెషన్ భర్తీని నిర్వహించండి</translation> <translation id="7390545607259442187">కార్డ్ని నిర్ధారించండి</translation> <translation id="7400418766976504921">URL</translation> <translation id="7407424307057130981"><p>మీ Windows కంప్యూటర్లో Superfish సాఫ్ట్వేర్ ఉన్నట్లయితే మీకు ఈ ఎర్రర్ కనిపిస్తుంది.</p> @@ -994,6 +1001,7 @@ <translation id="7815407501681723534">'<ph name="SEARCH_STRING" />' కోసం <ph name="NUMBER_OF_RESULTS" /> <ph name="SEARCH_RESULTS" /> కనుగొనబడ్డాయి</translation> <translation id="7818867226424560206">విధాన నిర్వహణ</translation> <translation id="782886543891417279">మీరు ఉపయోగిస్తున్న Wi-Fi (<ph name="WIFI_NAME" />)కి మీరు దాని లాగిన్ పేజీని సందర్శించడం అవసరం.</translation> +<translation id="7835178595033117206">బుక్మార్క్ తీసివేయబడింది</translation> <translation id="785549533363645510">అయితే, మీరు అదృశ్యంగా ఉండరు. అజ్ఞాతంలోకి వెళ్లడం వలన మీ బ్రౌజింగ్ మీ యజమానికి, మీ ఇంటర్నెట్ సేవా ప్రదాతకు లేదా మీరు సందర్శించే వెబ్సైట్లకు కనిపించకుండా దాచబడదు.</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">సైట్ నుండి నిష్క్రమించాలా?</translation> @@ -1130,6 +1138,7 @@ <translation id="8874824191258364635">చెల్లుబాటు అయ్యే కార్డ్ నంబర్ను నమోదు చేయండి</translation> <translation id="8876793034577346603">నెట్వర్క్ కాన్ఫిగరేషన్ అన్వయించబడటంలో విఫలమైంది.</translation> <translation id="8891727572606052622">చెల్లని ప్రాక్సీ మోడ్.</translation> +<translation id="8892964541482452187">ట్యాబ్ స్విచ్ బటన్, ఈ ట్యాబ్కి మారడానికి ఎంటర్ని నొక్కండి</translation> <translation id="8903921497873541725">దగ్గరికి జూమ్ చెయ్యి</translation> <translation id="8931333241327730545">మీరు ఈ కార్డ్ను మీ Google ఖాతాకి సేవ్ చేయాలనుకుంటున్నారా?</translation> <translation id="8932102934695377596">మీ గడియారం సమయం గతంలో ఉంది</translation> @@ -1155,6 +1164,7 @@ <translation id="9035022520814077154">భద్రతా లోపం</translation> <translation id="9038649477754266430">పేజీలను మరింత శీఘ్రంగా లోడ్ చేయడానికి సూచన సేవను ఉపయోగించండి</translation> <translation id="9039213469156557790">అలాగే, ఈ పేజీలో సురక్షితం కాని ఇతర వనరులు ఉన్నాయి. ఈ వనరులను బదిలీ చేస్తున్నప్పుడు ఇతరులు చూడగలరు మరియు దాడికి పాల్పడేవారు పేజీ ప్రవర్తనను మార్చేలా వీటిని సవరించగలరు.</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">మీరు <ph name="DOMAIN" />ని చేరుకోవడానికి ప్రయత్నించారు, కానీ సర్వర్ ఒక చెల్లుబాటులో లేని ప్రమాణపత్రంని అందించింది.</translation> <translation id="9050666287014529139">పాస్ఫ్రేజ్</translation> <translation id="9065203028668620118">సవరించు</translation> @@ -1178,6 +1188,7 @@ <translation id="9170848237812810038">&అన్డు</translation> <translation id="9171296965991013597">యాప్ నుండి నిష్క్రమించాలా?</translation> <translation id="917450738466192189">సర్వర్ యొక్క ప్రమాణపత్రం చెల్లుబాటు కాదు.</translation> +<translation id="9183302530794969518">Google డాక్స్</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> మద్దతు లేని ప్రోటోకాల్ను ఉపయోగిస్తోంది.</translation> <translation id="9205078245616868884">మీ సమకాలీకరణ రహస్య పదబంధంతో మీ డేటా గుప్తీకరించబడింది. సమకాలీకరణను ప్రారంభించడానికి దీన్ని నమోదు చేయండి.</translation> <translation id="9207861905230894330">కథనాన్ని జోడించడంలో విఫలమైంది.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index ec66cdc6..a49c5d6 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">必须提供电话号码</translation> <translation id="1517500485252541695">接受的信用卡和借记卡</translation> <translation id="1519264250979466059">构建日期</translation> +<translation id="1521655867290435174">Google 表格</translation> <translation id="1527263332363067270">正在等待建立连接…</translation> <translation id="1532118530259321453">此网页显示</translation> <translation id="153384715582417236">暂无新内容</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">以 MacOS 格式导出</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">连接已重置。</translation> +<translation id="2785008241190445880">已替换书签</translation> <translation id="2788784517760473862">接受的信用卡</translation> <translation id="2794233252405721443">网站已被屏蔽</translation> <translation id="2799020568854403057">您要访问的网站包含有害应用</translation> @@ -536,6 +538,7 @@ <translation id="4646534391647090355">立即前往</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">此服务器无法证明它是<ph name="DOMAIN" />;其安全证书有误。出现此问题的原因可能是配置有误或您的连接被拦截了。</translation> +<translation id="467809019005607715">Google 幻灯片</translation> <translation id="4690462567478992370">停止使用无效的证书</translation> <translation id="4690954380545377795">您可能会无法再访问自己的 Google 帐号,或者遭遇身份信息被盗用。Chrome 建议您立即更改密码。</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /><ph name="SENTENCE2" /></translation> @@ -641,6 +644,7 @@ <translation id="5324080437450482387">选择联系信息</translation> <translation id="5327248766486351172">名称</translation> <translation id="5332219387342487447">送货方式</translation> +<translation id="5344579389779391559">您要前往的页面可能会向您收取费用</translation> <translation id="5355557959165512791">您目前无法访问 <ph name="SITE" />,因为此证书已被撤消。网络错误和攻击行为通常是暂时的,因此,此网页稍后可能会恢复正常。</translation> <translation id="536296301121032821">无法存储策略设置</translation> <translation id="5371425731340848620">更新信用卡</translation> @@ -736,6 +740,7 @@ <translation id="6015796118275082299">年</translation> <translation id="6016158022840135739">{COUNT,plural, =1{第 1 页}other{第 # 页}}</translation> <translation id="6017850046339264347"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 上的攻击者可能会安装欺骗性应用来冒充其他内容或收集可用于对您进行跟踪的数据。<ph name="BEGIN_LEARN_MORE_LINK" />了解详情<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">定制您的专属 Chrome</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" />(已同步)</translation> <translation id="6027201098523975773">请输入名称</translation> <translation id="6039846035001940113">如果问题仍然存在,请与网站所有者联系。</translation> @@ -744,6 +749,7 @@ <translation id="6047927260846328439">此内容可能会试图诱骗您安装软件或透露个人信息。<ph name="BEGIN_LINK" />仍然显示<ph name="END_LINK" /></translation> <translation id="6051221802930200923">您目前无法访问 <ph name="SITE" />,因为此网站使用了证书锁定。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。</translation> <translation id="6059925163896151826">USB 设备</translation> +<translation id="6060991652695587932">选择您的电子邮件服务以便快速访问</translation> <translation id="6071091556643036997">政策类型无效。</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{此卡将会保存到您的 Google 帐号中,以实现更快捷的跨设备结帐。}other{这些卡将会保存到您的 Google 帐号中,以实现更快捷的跨设备结帐。}}</translation> <translation id="6080696365213338172">您已使用管理员提供的证书访问了内容,因此管理员可以拦截您提供给 <ph name="DOMAIN" /> 的数据。</translation> @@ -900,6 +906,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">否</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">替换受管理自助服务终端</translation> <translation id="7390545607259442187">确认信用卡</translation> <translation id="7400418766976504921">网址</translation> <translation id="7407424307057130981"><p>如果您的 Windows 计算机上装有 SuperFish 软件,您将会看到这条错误消息。</p> @@ -990,6 +997,7 @@ <translation id="7815407501681723534">找到了 <ph name="NUMBER_OF_RESULTS" /> 个与“<ph name="SEARCH_STRING" />”相符的<ph name="SEARCH_RESULTS" /></translation> <translation id="7818867226424560206">政策管理</translation> <translation id="782886543891417279">您要使用的 Wi-Fi 网络(<ph name="WIFI_NAME" />)可能需要您访问其登录页面。</translation> +<translation id="7835178595033117206">已移除书签</translation> <translation id="785549533363645510">但是,这并不意味着您能完全隐身。即使您进入隐身模式,您的雇主、互联网服务提供商和您访问的网站仍然能看到您的浏览活动。</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">离开此网站?</translation> @@ -1126,6 +1134,7 @@ <translation id="8874824191258364635">请输入有效的信用卡号</translation> <translation id="8876793034577346603">无法解析网络配置。</translation> <translation id="8891727572606052622">代理模式无效。</translation> +<translation id="8892964541482452187">标签页切换按钮,按 Enter 键可切换到此标签页</translation> <translation id="8903921497873541725">放大</translation> <translation id="8931333241327730545">要将此卡的信息保存到您的 Google 帐号吗?</translation> <translation id="8932102934695377596">您的时钟慢了</translation> @@ -1151,6 +1160,7 @@ <translation id="9035022520814077154">安全错误</translation> <translation id="9038649477754266430">使用联想查询服务更快速地加载网页</translation> <translation id="9039213469156557790">而且,此页中包含其他不安全的资源。他人能在这些资源传输过程中进行查看,而攻击者可以修改这些资源,从而改变此页的行为。</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">您试图访问 <ph name="DOMAIN" />,但服务器提供的证书无效。</translation> <translation id="9050666287014529139">密码</translation> <translation id="9065203028668620118">修改</translation> @@ -1174,6 +1184,7 @@ <translation id="9170848237812810038">撤消(&U)</translation> <translation id="9171296965991013597">要退出应用吗?</translation> <translation id="917450738466192189">服务器证书无效。</translation> +<translation id="9183302530794969518">Google 文档</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> 使用了不受支持的协议。</translation> <translation id="9205078245616868884">您的数据已使用您的同步密码加密。输入该密码即可开始同步。</translation> <translation id="9207861905230894330">无法添加文章。</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index 0451c3f3..6f3abd5 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -91,6 +91,7 @@ <translation id="1517433312004943670">必須輸入電話號碼</translation> <translation id="1517500485252541695">接受的信用卡和簽帳金融卡</translation> <translation id="1519264250979466059">建立日期</translation> +<translation id="1521655867290435174">Google 試算表</translation> <translation id="1527263332363067270">正在等待連線…</translation> <translation id="1532118530259321453">這個網頁顯示</translation> <translation id="153384715582417236">暫無內容</translation> @@ -272,6 +273,7 @@ <translation id="2781030394888168909">匯出 MacOS</translation> <translation id="2781692009645368755">Google Pay</translation> <translation id="2784949926578158345">連線已重設。</translation> +<translation id="2785008241190445880">已更換書籤</translation> <translation id="2788784517760473862">接受的信用卡</translation> <translation id="2794233252405721443">網站遭到封鎖</translation> <translation id="2799020568854403057">你要造訪的網站含有有害的應用程式</translation> @@ -539,6 +541,7 @@ <translation id="4646534391647090355">立即前往下載中心</translation> <translation id="4668929960204016307">,</translation> <translation id="467662567472608290">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證含有錯誤。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation> +<translation id="467809019005607715">Google 簡報</translation> <translation id="4690462567478992370">停止使用無效的憑證</translation> <translation id="4690954380545377795">你可能失去了 Google 帳戶存取權,或身分遭到冒用。Chrome 建議你立即變更密碼。</translation> <translation id="4701488924964507374"><ph name="SENTENCE1" /> <ph name="SENTENCE2" /></translation> @@ -644,6 +647,7 @@ <translation id="5324080437450482387">選擇聯絡資訊</translation> <translation id="5327248766486351172">名稱</translation> <translation id="5332219387342487447">運送方式</translation> +<translation id="5344579389779391559">進入接下來的頁面後,系統可能會向您收費</translation> <translation id="5355557959165512791">目前無法造訪 <ph name="SITE" />,因為這個網站的憑證已遭撤銷。網路錯誤和攻擊行為通常是暫時性的,因此這個網頁可能稍後就會恢復正常狀態。</translation> <translation id="536296301121032821">無法儲存政策設定</translation> <translation id="5371425731340848620">更新信用卡</translation> @@ -739,6 +743,7 @@ <translation id="6015796118275082299">年</translation> <translation id="6016158022840135739">{COUNT,plural, =1{第 1 頁}other{第 # 頁}}</translation> <translation id="6017850046339264347">目前在 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 上的攻擊者可能會讓你安裝身分不實的欺騙性應用程式,或是收集可用於追蹤你的資料。<ph name="BEGIN_LEARN_MORE_LINK" />瞭解詳情<ph name="END_LEARN_MORE_LINK" /></translation> +<translation id="6022659036123304283">打造專屬的 Chrome</translation> <translation id="6025416945513303461"><ph name="TYPE_1" />、<ph name="TYPE_2" />、<ph name="TYPE_3" /> (已同步)</translation> <translation id="6027201098523975773">輸入名稱</translation> <translation id="6039846035001940113">如果問題仍未解決,請與網站擁有者聯絡。</translation> @@ -747,6 +752,7 @@ <translation id="6047927260846328439">這項內容可能會試圖誘使你安裝軟體或提供個人資訊。<ph name="BEGIN_LINK" />仍要顯示<ph name="END_LINK" /></translation> <translation id="6051221802930200923">目前無法造訪 <ph name="SITE" />,因為這個網站使用憑證鎖定功能。網路錯誤和攻擊行為通常是暫時性的,因此這個網頁可能稍後就會恢復正常狀態。</translation> <translation id="6059925163896151826">USB 裝置</translation> +<translation id="6060991652695587932">請選擇要加入書籤的電子郵件服務以便快速存取</translation> <translation id="6071091556643036997">政策類型無效。</translation> <translation id="6078024795140153212">{NUM_CARDS,plural, =1{系統會將這張卡片儲存至你的 Google 帳戶,讓你在不同裝置上都能享受便捷的結帳體驗。}other{系統會將這些卡片儲存至你的 Google 帳戶,讓你在不同裝置上都能享受便捷的結帳體驗。}}</translation> <translation id="6080696365213338172">你使用了管理員提供的憑證存取內容,因此管理員可攔截你傳送至「<ph name="DOMAIN" />」的資料。</translation> @@ -904,6 +910,7 @@ <translation id="7377249249140280793"><ph name="RELATIVE_DATE" /> - <ph name="FULL_DATE" /></translation> <translation id="7378627244592794276">不需要</translation> <translation id="7378810950367401542">/</translation> +<translation id="7381288752349550461">受管理工作階段覆寫</translation> <translation id="7390545607259442187">驗證信用卡</translation> <translation id="7400418766976504921">網址</translation> <translation id="7407424307057130981"><p>如果你的 Windows 電腦上有 Superfish 軟體,系統就會顯示這則錯誤訊息。</p> @@ -994,6 +1001,7 @@ <translation id="7815407501681723534">找到 <ph name="NUMBER_OF_RESULTS" /> 個與「<ph name="SEARCH_STRING" />」相符的<ph name="SEARCH_RESULTS" /></translation> <translation id="7818867226424560206">政策管理</translation> <translation id="782886543891417279">目前使用的 Wi-Fi 網路 (<ph name="WIFI_NAME" />) 可能會要求您造訪登入網頁。</translation> +<translation id="7835178595033117206">已移除書籤</translation> <translation id="785549533363645510">不過,這並不意味著您可以完全隱形。使用無痕模式時,您的雇主和網際網路服務供應商仍然可以追蹤您的瀏覽記錄,您所造訪的網站也可能會記錄您的瀏覽行為。</translation> <translation id="7855695075675558090"><ph name="TOTAL_LABEL" /> <ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation> <translation id="7862185352068345852">要離開網站嗎?</translation> @@ -1129,6 +1137,7 @@ <translation id="8874824191258364635">請輸入有效的信用卡號碼</translation> <translation id="8876793034577346603">無法解析網路設定。</translation> <translation id="8891727572606052622">Proxy 模式無效。</translation> +<translation id="8892964541482452187">分頁切換按鈕,按下 Enter 鍵即可切換到這個分頁</translation> <translation id="8903921497873541725">放大</translation> <translation id="8931333241327730545">您要將這張卡片的資訊儲存到您的 Google 帳戶嗎?</translation> <translation id="8932102934695377596">你的時鐘時間過慢</translation> @@ -1154,6 +1163,7 @@ <translation id="9035022520814077154">安全性錯誤</translation> <translation id="9038649477754266430">使用預測查詢字串服務,讓系統更快載入網頁</translation> <translation id="9039213469156557790">此外,這個網頁含有其他不安全的資源。其他人可能會在資源傳輸期間檢視這些資源,攻擊者也可能會修改這些資源,進而變更網頁行為。</translation> +<translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> <translation id="9049981332609050619">你嘗試連線至 <ph name="DOMAIN" />,但伺服器提供的憑證無效。</translation> <translation id="9050666287014529139">通關密語</translation> <translation id="9065203028668620118">編輯</translation> @@ -1177,6 +1187,7 @@ <translation id="9170848237812810038">取消(&U)</translation> <translation id="9171296965991013597">要離開應用程式嗎?</translation> <translation id="917450738466192189">伺服器憑證無效。</translation> +<translation id="9183302530794969518">Google 文件</translation> <translation id="9183425211371246419"><ph name="HOST_NAME" /> 使用了不支援的通訊協定。</translation> <translation id="9205078245616868884">您已使用同步通關密語對資料進行加密,請輸入通關密語開始進行同步。</translation> <translation id="9207861905230894330">無法新增文章。</translation>
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent.cc b/components/subresource_filter/content/renderer/subresource_filter_agent.cc index c54dd56..34f768d 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent.cc +++ b/components/subresource_filter/content/renderer/subresource_filter_agent.cc
@@ -198,8 +198,8 @@ } void SubresourceFilterAgent::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { if (is_same_document_navigation) return;
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent.h b/components/subresource_filter/content/renderer/subresource_filter_agent.h index ac0f2d7..31c9d1745 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent.h +++ b/components/subresource_filter/content/renderer/subresource_filter_agent.h
@@ -90,8 +90,8 @@ // content::RenderFrameObserver: void OnDestruct() override; void DidCreateNewDocument() override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void DidFailProvisionalLoad(const blink::WebURLError& error) override; void DidFinishLoad() override; bool OnMessageReceived(const IPC::Message& message) override;
diff --git a/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc b/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc index bbb77d8..439c08d 100644 --- a/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc +++ b/components/subresource_filter/content/renderer/subresource_filter_agent_unittest.cc
@@ -135,15 +135,15 @@ } void StartLoadWithoutSettingActivationState() { - agent_as_rfo()->DidStartProvisionalLoad(nullptr); + agent_as_rfo()->DidStartProvisionalLoad(nullptr, true); agent_as_rfo()->DidCommitProvisionalLoad( - true /* is_new_navigation */, false /* is_same_document_navigation */); + false /* is_same_document_navigation */, ui::PAGE_TRANSITION_LINK); } void PerformSameDocumentNavigationWithoutSettingActivationLevel() { - agent_as_rfo()->DidStartProvisionalLoad(nullptr); + agent_as_rfo()->DidStartProvisionalLoad(nullptr, true); agent_as_rfo()->DidCommitProvisionalLoad( - true /* is_new_navigation */, true /* is_same_document_navigation */); + true /* is_same_document_navigation */, ui::PAGE_TRANSITION_LINK); // No DidFinishLoad is called in this case. } @@ -156,12 +156,12 @@ void StartLoadAndSetActivationState(mojom::ActivationState state, bool is_ad_subframe = false) { - agent_as_rfo()->DidStartProvisionalLoad(nullptr); + agent_as_rfo()->DidStartProvisionalLoad(nullptr, true); EXPECT_TRUE(agent_as_rfo()->OnMessageReceived( SubresourceFilterMsg_ActivateForNextCommittedLoad(0, state, is_ad_subframe))); agent_as_rfo()->DidCommitProvisionalLoad( - true /* is_new_navigation */, false /* is_same_document_navigation */); + false /* is_same_document_navigation */, ui::PAGE_TRANSITION_LINK); } void FinishLoad() { agent_as_rfo()->DidFinishLoad(); } @@ -461,7 +461,7 @@ ASSERT_NO_FATAL_FAILURE( SetTestRulesetToDisallowURLsWithPathSuffix(kTestBothURLsPathSuffix)); ExpectNoSubresourceFilterGetsInjected(); - agent_as_rfo()->DidStartProvisionalLoad(nullptr); + agent_as_rfo()->DidStartProvisionalLoad(nullptr, true); mojom::ActivationState state; state.activation_level = mojom::ActivationLevel::kEnabled; state.measure_performance = true; @@ -470,9 +470,9 @@ 0, state, false /* is_ad_subframe */))); agent_as_rfo()->DidFailProvisionalLoad( blink::WebURLError(net::ERR_FAILED, blink::WebURL())); - agent_as_rfo()->DidStartProvisionalLoad(nullptr); + agent_as_rfo()->DidStartProvisionalLoad(nullptr, true); agent_as_rfo()->DidCommitProvisionalLoad( - true /* is_new_navigation */, false /* is_same_document_navigation */); + false /* is_same_document_navigation */, ui::PAGE_TRANSITION_LINK); FinishLoad(); }
diff --git a/components/sync/base/get_session_name.cc b/components/sync/base/get_session_name.cc index 34b3b0a7..408102586 100644 --- a/components/sync/base/get_session_name.cc +++ b/components/sync/base/get_session_name.cc
@@ -12,7 +12,7 @@ #include "base/sys_info.h" #include "base/task_runner.h" #include "base/task_runner_util.h" -#include "base/threading/thread_restrictions.h" +#include "base/threading/scoped_blocking_call.h" #include "build/build_config.h" #if defined(OS_CHROMEOS) @@ -32,7 +32,7 @@ namespace syncer { std::string GetSessionNameBlocking() { - base::AssertBlockingAllowed(); + base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK); std::string session_name; #if defined(OS_CHROMEOS) switch (chromeos::GetDeviceType()) {
diff --git a/components/viz/common/gl_helper_benchmark.cc b/components/viz/common/gl_helper_benchmark.cc index b54d6ab..ec352db 100644 --- a/components/viz/common/gl_helper_benchmark.cc +++ b/components/viz/common/gl_helper_benchmark.cc
@@ -76,7 +76,6 @@ attributes, gpu::SharedMemoryLimits(), nullptr, /* gpu_memory_buffer_manager */ nullptr, /* image_factory */ - nullptr /* gpu_channel_manager_delegate */, base::ThreadTaskRunnerHandle::Get()); DCHECK_EQ(result, gpu::ContextResult::kSuccess); gl_ = context_->GetImplementation();
diff --git a/components/viz/common/gl_helper_unittest.cc b/components/viz/common/gl_helper_unittest.cc index 5395980..13f80a2 100644 --- a/components/viz/common/gl_helper_unittest.cc +++ b/components/viz/common/gl_helper_unittest.cc
@@ -72,7 +72,6 @@ attributes, gpu::SharedMemoryLimits(), nullptr, /* gpu_memory_buffer_manager */ nullptr, /* image_factory */ - nullptr /* gpu_channel_manager_delegate */, base::ThreadTaskRunnerHandle::Get()); DCHECK_EQ(result, gpu::ContextResult::kSuccess); gl_ = context_->GetImplementation();
diff --git a/components/viz/common/yuv_readback_unittest.cc b/components/viz/common/yuv_readback_unittest.cc index 9bc57fc..cb392fb 100644 --- a/components/viz/common/yuv_readback_unittest.cc +++ b/components/viz/common/yuv_readback_unittest.cc
@@ -52,7 +52,6 @@ attributes, gpu::SharedMemoryLimits(), nullptr, /* gpu_memory_buffer_manager */ nullptr, /* image_factory */ - nullptr /* gpu_channel_manager_delegate */, base::ThreadTaskRunnerHandle::Get()); DCHECK_EQ(result, gpu::ContextResult::kSuccess); gl_ = context_->GetImplementation();
diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn index 08703da8..2a6d377 100644 --- a/components/viz/service/BUILD.gn +++ b/components/viz/service/BUILD.gn
@@ -181,6 +181,7 @@ "//cc/paint", "//components/crash/core/common:crash_key", "//components/viz/common", + "//gpu/command_buffer/client:gles2_cmd_helper", "//gpu/command_buffer/client:gles2_implementation", "//gpu/command_buffer/client:raster",
diff --git a/components/viz/service/display_embedder/viz_process_context_provider.cc b/components/viz/service/display_embedder/viz_process_context_provider.cc index c3aa280..e6ff1fe5 100644 --- a/components/viz/service/display_embedder/viz_process_context_provider.cc +++ b/components/viz/service/display_embedder/viz_process_context_provider.cc
@@ -9,7 +9,6 @@ #include <utility> #include "base/lazy_instance.h" -#include "base/macros.h" #include "base/metrics/histogram_macros.h" #include "base/single_thread_task_runner.h" #include "base/sys_info.h" @@ -19,18 +18,16 @@ #include "components/viz/common/gpu/context_lost_reason.h" #include "components/viz/common/resources/platform_color.h" #include "gpu/GLES2/gl2extchromium.h" +#include "gpu/command_buffer/client/gles2_cmd_helper.h" #include "gpu/command_buffer/client/gles2_implementation.h" #include "gpu/command_buffer/client/raster_implementation_gles.h" -#include "gpu/command_buffer/common/context_creation_attribs.h" +#include "gpu/command_buffer/client/shared_memory_limits.h" +#include "gpu/command_buffer/client/transfer_buffer.h" #include "gpu/command_buffer/common/skia_utils.h" -#include "gpu/command_buffer/service/mailbox_manager.h" -#include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/config/gpu_feature_info.h" #include "gpu/config/gpu_preferences.h" #include "gpu/ipc/common/surface_handle.h" -#include "gpu/ipc/gl_in_process_context.h" -#include "gpu/ipc/gpu_in_process_thread_service.h" -#include "gpu/ipc/in_process_command_buffer.h" +#include "gpu/skia_bindings/gles2_implementation_with_grcontext_support.h" #include "gpu/skia_bindings/grcontext_for_gles2_interface.h" #include "third_party/khronos/GLES2/gl2.h" #include "third_party/khronos/GLES2/gl2ext.h" @@ -96,31 +93,18 @@ gpu::GpuChannelManagerDelegate* gpu_channel_manager_delegate, const gpu::SharedMemoryLimits& limits, bool requires_alpha_channel) - : attributes_(CreateAttributes(requires_alpha_channel)), - context_(std::make_unique<gpu::GLInProcessContext>()), - context_result_( - context_->Initialize(std::move(task_executor), - nullptr, - (surface_handle == gpu::kNullSurfaceHandle), - surface_handle, - attributes_, - limits, - gpu_memory_buffer_manager, - image_factory, - gpu_channel_manager_delegate, - base::ThreadTaskRunnerHandle::Get())) { + : attributes_(CreateAttributes(requires_alpha_channel)) { + InitializeContext(std::move(task_executor), surface_handle, + gpu_memory_buffer_manager, image_factory, + gpu_channel_manager_delegate, limits); + if (context_result_ == gpu::ContextResult::kSuccess) { - auto* gles2_implementation = context_->GetImplementation(); - cache_controller_ = std::make_unique<ContextCacheController>( - gles2_implementation, base::ThreadTaskRunnerHandle::Get()); - // |context_| is owned here so bind an unretained pointer or there will be a - // circular reference preventing destruction. - gles2_implementation->SetLostContextCallback(base::BindOnce( + // |gles2_implementation_| is owned here so bind an unretained pointer or + // there will be a circular reference preventing destruction. + gles2_implementation_->SetLostContextCallback(base::BindOnce( &VizProcessContextProvider::OnContextLost, base::Unretained(this))); } else { - // Context initialization failed. Record UMA and cleanup. UmaRecordContextLost(CONTEXT_INIT_FAILED); - context_.reset(); } } @@ -139,11 +123,11 @@ } gpu::gles2::GLES2Interface* VizProcessContextProvider::ContextGL() { - return context_->GetImplementation(); + return gles2_implementation_.get(); } gpu::ContextSupport* VizProcessContextProvider::ContextSupport() { - return context_->GetImplementation(); + return gles2_implementation_.get(); } class GrContext* VizProcessContextProvider::GrContext() { @@ -166,17 +150,18 @@ } base::Lock* VizProcessContextProvider::GetLock() { - return &context_lock_; + // Locking isn't supported on display compositor contexts. + return nullptr; } const gpu::Capabilities& VizProcessContextProvider::ContextCapabilities() const { - return context_->GetCapabilities(); + return command_buffer_->GetCapabilities(); } const gpu::GpuFeatureInfo& VizProcessContextProvider::GetGpuFeatureInfo() const { - return context_->GetGpuFeatureInfo(); + return command_buffer_->GetGpuFeatureInfo(); } void VizProcessContextProvider::AddObserver(ContextLostObserver* obs) { @@ -190,7 +175,57 @@ void VizProcessContextProvider::SetUpdateVSyncParametersCallback( const gpu::InProcessCommandBuffer::UpdateVSyncParametersCallback& callback) { - context_->SetUpdateVSyncParametersCallback(callback); + command_buffer_->SetUpdateVSyncParametersCallback(callback); +} + +void VizProcessContextProvider::InitializeContext( + scoped_refptr<gpu::CommandBufferTaskExecutor> task_executor, + gpu::SurfaceHandle surface_handle, + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, + gpu::ImageFactory* image_factory, + gpu::GpuChannelManagerDelegate* gpu_channel_manager_delegate, + const gpu::SharedMemoryLimits& mem_limits) { + const bool is_offscreen = surface_handle == gpu::kNullSurfaceHandle; + + command_buffer_ = + std::make_unique<gpu::InProcessCommandBuffer>(std::move(task_executor)); + context_result_ = command_buffer_->Initialize( + /*surface=*/nullptr, is_offscreen, surface_handle, attributes_, + /*share_command_buffer=*/nullptr, gpu_memory_buffer_manager, + image_factory, gpu_channel_manager_delegate, + base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); + if (context_result_ != gpu::ContextResult::kSuccess) { + DLOG(ERROR) << "Failed to initialize InProcessCommmandBuffer"; + return; + } + + // Create the GLES2 helper, which writes the command buffer protocol. + gles2_helper_ = + std::make_unique<gpu::gles2::GLES2CmdHelper>(command_buffer_.get()); + context_result_ = gles2_helper_->Initialize(mem_limits.command_buffer_size); + if (context_result_ != gpu::ContextResult::kSuccess) { + DLOG(ERROR) << "Failed to initialize GLES2CmdHelper"; + return; + } + + transfer_buffer_ = std::make_unique<gpu::TransferBuffer>(gles2_helper_.get()); + + // Create the object exposing the OpenGL API. + gles2_implementation_ = + std::make_unique<skia_bindings::GLES2ImplementationWithGrContextSupport>( + gles2_helper_.get(), /*share_group=*/nullptr, transfer_buffer_.get(), + attributes_.bind_generates_resource, + attributes_.lose_context_when_out_of_memory, + /*support_client_side_arrays=*/false, command_buffer_.get()); + + context_result_ = gles2_implementation_->Initialize(mem_limits); + if (context_result_ != gpu::ContextResult::kSuccess) { + DLOG(ERROR) << "Failed to initialize GLES2Implementation"; + return; + } + + cache_controller_ = std::make_unique<ContextCacheController>( + gles2_implementation_.get(), base::ThreadTaskRunnerHandle::Get()); } void VizProcessContextProvider::OnContextLost() { @@ -199,8 +234,7 @@ if (gr_context_) gr_context_->OnLostContext(); - gpu::CommandBuffer::State state = - context_->GetCommandBuffer()->GetLastState(); + gpu::CommandBuffer::State state = command_buffer_->GetLastState(); UmaRecordContextLost( GetContextLostReason(state.error, state.context_lost_reason)); }
diff --git a/components/viz/service/display_embedder/viz_process_context_provider.h b/components/viz/service/display_embedder/viz_process_context_provider.h index 8780e7bd..00f77f67 100644 --- a/components/viz/service/display_embedder/viz_process_context_provider.h +++ b/components/viz/service/display_embedder/viz_process_context_provider.h
@@ -9,9 +9,7 @@ #include <memory> -#include "base/compiler_specific.h" #include "base/observer_list.h" -#include "base/synchronization/lock.h" #include "components/viz/common/gpu/context_cache_controller.h" #include "components/viz/common/gpu/context_provider.h" #include "components/viz/service/viz_service_export.h" @@ -22,10 +20,14 @@ class GrContext; namespace gpu { -class GLInProcessContext; +namespace gles2 { +class GLES2CmdHelper; +class GLES2Implementation; +} // namespace gles2 class GpuChannelManagerDelegate; class GpuMemoryBufferManager; class ImageFactory; +class TransferBuffer; struct SharedMemoryLimits; } // namespace gpu @@ -69,20 +71,29 @@ const gpu::InProcessCommandBuffer::UpdateVSyncParametersCallback& callback); - protected: + private: friend class base::RefCountedThreadSafe<VizProcessContextProvider>; ~VizProcessContextProvider() override; - private: + void InitializeContext( + scoped_refptr<gpu::CommandBufferTaskExecutor> task_executor, + gpu::SurfaceHandle surface_handle, + gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, + gpu::ImageFactory* image_factory, + gpu::GpuChannelManagerDelegate* gpu_channel_manager_delegate, + const gpu::SharedMemoryLimits& mem_limits); void OnContextLost(); const gpu::ContextCreationAttribs attributes_; - base::Lock context_lock_; - std::unique_ptr<gpu::GLInProcessContext> context_; - gpu::ContextResult context_result_; - std::unique_ptr<skia_bindings::GrContextForGLES2Interface> gr_context_; + std::unique_ptr<gpu::InProcessCommandBuffer> command_buffer_; + std::unique_ptr<gpu::gles2::GLES2CmdHelper> gles2_helper_; + std::unique_ptr<gpu::TransferBuffer> transfer_buffer_; + std::unique_ptr<gpu::gles2::GLES2Implementation> gles2_implementation_; std::unique_ptr<ContextCacheController> cache_controller_; + gpu::ContextResult context_result_; + + std::unique_ptr<skia_bindings::GrContextForGLES2Interface> gr_context_; base::ObserverList<ContextLostObserver>::Unchecked observers_; };
diff --git a/components/web_cache/browser/BUILD.gn b/components/web_cache/browser/BUILD.gn index c3329b0..0c09f07 100644 --- a/components/web_cache/browser/BUILD.gn +++ b/components/web_cache/browser/BUILD.gn
@@ -13,7 +13,7 @@ deps = [ "//base", "//components/prefs", - "//components/web_cache/public/interfaces", + "//components/web_cache/public/mojom", "//content/public/browser", "//content/public/common", "//services/service_manager/public/cpp",
diff --git a/components/web_cache/browser/web_cache_manager.h b/components/web_cache/browser/web_cache_manager.h index d2020dc..a53814f 100644 --- a/components/web_cache/browser/web_cache_manager.h +++ b/components/web_cache/browser/web_cache_manager.h
@@ -19,7 +19,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" -#include "components/web_cache/public/interfaces/web_cache.mojom.h" +#include "components/web_cache/public/mojom/web_cache.mojom.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h"
diff --git a/components/web_cache/public/interfaces/BUILD.gn b/components/web_cache/public/mojom/BUILD.gn similarity index 91% rename from components/web_cache/public/interfaces/BUILD.gn rename to components/web_cache/public/mojom/BUILD.gn index 4da8e47..239dffa 100644 --- a/components/web_cache/public/interfaces/BUILD.gn +++ b/components/web_cache/public/mojom/BUILD.gn
@@ -4,7 +4,7 @@ import("//mojo/public/tools/bindings/mojom.gni") -mojom("interfaces") { +mojom("mojom") { sources = [ "web_cache.mojom", ]
diff --git a/components/web_cache/public/interfaces/OWNERS b/components/web_cache/public/mojom/OWNERS similarity index 100% rename from components/web_cache/public/interfaces/OWNERS rename to components/web_cache/public/mojom/OWNERS
diff --git a/components/web_cache/public/interfaces/web_cache.mojom b/components/web_cache/public/mojom/web_cache.mojom similarity index 100% rename from components/web_cache/public/interfaces/web_cache.mojom rename to components/web_cache/public/mojom/web_cache.mojom
diff --git a/components/web_cache/renderer/BUILD.gn b/components/web_cache/renderer/BUILD.gn index 9609bc9..66d3194 100644 --- a/components/web_cache/renderer/BUILD.gn +++ b/components/web_cache/renderer/BUILD.gn
@@ -10,7 +10,7 @@ deps = [ "//base", - "//components/web_cache/public/interfaces", + "//components/web_cache/public/mojom", "//content/public/child", "//content/public/common", "//content/public/renderer",
diff --git a/components/web_cache/renderer/web_cache_impl.h b/components/web_cache/renderer/web_cache_impl.h index 4a8a44f..2314967 100644 --- a/components/web_cache/renderer/web_cache_impl.h +++ b/components/web_cache/renderer/web_cache_impl.h
@@ -10,7 +10,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" -#include "components/web_cache/public/interfaces/web_cache.mojom.h" +#include "components/web_cache/public/mojom/web_cache.mojom.h" #include "mojo/public/cpp/bindings/binding_set.h" namespace web_cache {
diff --git a/content/BUILD.gn b/content/BUILD.gn index 49b2f5d..0ca39d7 100644 --- a/content/BUILD.gn +++ b/content/BUILD.gn
@@ -9,11 +9,10 @@ # Applied by targets internal to content. config("content_implementation") { defines = [ "CONTENT_IMPLEMENTATION" ] - configs = [ "//build/config/compiler:noshadowing" ] - if (!is_win) { - # TODO(thakis): Enable on Windows too, http://crbug.com/404525 - configs += [ "//build/config/compiler:wexit_time_destructors" ] - } + configs = [ + "//build/config/compiler:noshadowing", + "//build/config/compiler:wexit_time_destructors", + ] } # When targets depend on, e.g. //content/public/browser, what happens? To
diff --git a/content/browser/android/background_sync_network_observer_android.cc b/content/browser/android/background_sync_network_observer_android.cc index c1c514c7..11391de 100644 --- a/content/browser/android/background_sync_network_observer_android.cc +++ b/content/browser/android/background_sync_network_observer_android.cc
@@ -13,7 +13,7 @@ // static scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> BackgroundSyncNetworkObserverAndroid::Observer::Create( - base::Callback<void(net::NetworkChangeNotifier::ConnectionType)> callback) { + base::Callback<void(network::mojom::ConnectionType)> callback) { DCHECK_CURRENTLY_ON(BrowserThread::IO); scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> observer( new BackgroundSyncNetworkObserverAndroid::Observer(callback)); @@ -50,13 +50,12 @@ DCHECK_CURRENTLY_ON(BrowserThread::UI); BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, - base::Bind(callback_, - static_cast<net::NetworkChangeNotifier::ConnectionType>( - new_connection_type))); + base::Bind(callback_, static_cast<network::mojom::ConnectionType>( + new_connection_type))); } BackgroundSyncNetworkObserverAndroid::Observer::Observer( - base::Callback<void(net::NetworkChangeNotifier::ConnectionType)> callback) + base::Callback<void(network::mojom::ConnectionType)> callback) : callback_(callback) { DCHECK_CURRENTLY_ON(BrowserThread::IO); } @@ -67,15 +66,16 @@ weak_ptr_factory_(this) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - // Remove the observer attached by the NetworkObserver constructor - net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); - observer_ = Observer::Create( - base::Bind(&BackgroundSyncNetworkObserverAndroid::OnNetworkChanged, + base::Bind(&BackgroundSyncNetworkObserverAndroid::OnConnectionChanged, weak_ptr_factory_.GetWeakPtr())); } BackgroundSyncNetworkObserverAndroid::~BackgroundSyncNetworkObserverAndroid() { DCHECK_CURRENTLY_ON(BrowserThread::IO); } + +void BackgroundSyncNetworkObserverAndroid::RegisterWithNetworkConnectionTracker( + network::NetworkConnectionTracker* network_connection_tracker) {} + } // namespace content
diff --git a/content/browser/android/background_sync_network_observer_android.h b/content/browser/android/background_sync_network_observer_android.h index ace3b9b..85f93c2d 100644 --- a/content/browser/android/background_sync_network_observer_android.h +++ b/content/browser/android/background_sync_network_observer_android.h
@@ -15,9 +15,9 @@ namespace content { // BackgroundSyncNetworkObserverAndroid is a specialized -// BackgroundSyncNetworkObserver which is backed by a NetworkChangeNotifier +// BackgroundSyncNetworkObserver which is backed by a NetworkConnectionTracker // that listens for network events even when the browser is paused, unlike the -// standard NetworkChangeNotifier. This ensures that sync events can be fired +// standard NetworkConnectionTracker. This ensures that sync events can be fired // even when the browser is backgrounded, and other network observers are // disabled. class BackgroundSyncNetworkObserverAndroid @@ -38,8 +38,7 @@ content::BrowserThread::DeleteOnUIThread> { public: static scoped_refptr<BackgroundSyncNetworkObserverAndroid::Observer> Create( - base::Callback<void(net::NetworkChangeNotifier::ConnectionType)> - callback); + base::Callback<void(network::mojom::ConnectionType)> callback); // Called from BackgroundSyncNetworkObserver.java over JNI whenever the // connection type changes. This updates the current connection type seen by @@ -55,20 +54,22 @@ friend class base::DeleteHelper< BackgroundSyncNetworkObserverAndroid::Observer>; - Observer(base::Callback<void(net::NetworkChangeNotifier::ConnectionType)> - callback); + Observer(base::Callback<void(network::mojom::ConnectionType)> callback); void Init(); ~Observer(); // This callback is to be run on the IO thread whenever the connection type // changes. - base::Callback<void(net::NetworkChangeNotifier::ConnectionType)> callback_; + base::Callback<void(network::mojom::ConnectionType)> callback_; base::android::ScopedJavaGlobalRef<jobject> j_observer_; DISALLOW_COPY_AND_ASSIGN(Observer); }; private: + void RegisterWithNetworkConnectionTracker( + network::NetworkConnectionTracker* network_connection_tracker) override; + // Accessed on UI Thread scoped_refptr<Observer> observer_;
diff --git a/content/browser/background_sync/background_sync_browsertest.cc b/content/browser/background_sync/background_sync_browsertest.cc index 678766f9..5689615 100644 --- a/content/browser/background_sync/background_sync_browsertest.cc +++ b/content/browser/background_sync/background_sync_browsertest.cc
@@ -131,13 +131,15 @@ ~BackgroundSyncBrowserTest() override {} void SetUp() override { - background_sync_test_util::SetIgnoreNetworkChangeNotifier(true); + background_sync_test_util::SetIgnoreNetworkChanges(true); ContentBrowserTest::SetUp(); } void SetIncognitoMode(bool incognito) { shell_ = incognito ? CreateOffTheRecordBrowser() : shell(); + // Let any async shell creation logic finish. + base::RunLoop().RunUntilIdle(); } StoragePartitionImpl* GetStorage() {
diff --git a/content/browser/background_sync/background_sync_manager_unittest.cc b/content/browser/background_sync/background_sync_manager_unittest.cc index 077a39c..f700aca 100644 --- a/content/browser/background_sync/background_sync_manager_unittest.cc +++ b/content/browser/background_sync/background_sync_manager_unittest.cc
@@ -37,7 +37,7 @@ #include "content/public/test/test_utils.h" #include "content/test/mock_background_sync_controller.h" #include "content/test/test_background_sync_manager.h" -#include "net/base/network_change_notifier.h" +#include "services/network/test/test_network_connection_tracker.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h" @@ -86,8 +86,7 @@ class BackgroundSyncManagerTest : public testing::Test { public: BackgroundSyncManagerTest() - : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), - network_change_notifier_(net::NetworkChangeNotifier::CreateMock()) { + : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) { sync_options_1_.tag = "foo"; sync_options_1_.network_state = NETWORK_STATE_ONLINE; @@ -97,7 +96,7 @@ void SetUp() override { // Don't let the tests be confused by the real-world device connectivity - background_sync_test_util::SetIgnoreNetworkChangeNotifier(true); + background_sync_test_util::SetIgnoreNetworkChanges(true); // TODO(jkarlin): Create a new object with all of the necessary SW calls // so that we can inject test versions instead of bringing up all of this @@ -129,7 +128,7 @@ void TearDown() override { // Restore the network observer functionality for subsequent tests - background_sync_test_util::SetIgnoreNetworkChangeNotifier(false); + background_sync_test_util::SetIgnoreNetworkChanges(false); } void RegisterServiceWorkers() { @@ -168,13 +167,13 @@ EXPECT_TRUE(sw_registration_2_); } - void SetNetwork(net::NetworkChangeNotifier::ConnectionType connection_type) { - net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( + void SetNetwork(network::mojom::ConnectionType connection_type) { + network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType( connection_type); if (test_background_sync_manager_) { BackgroundSyncNetworkObserver* network_observer = test_background_sync_manager_->GetNetworkObserverForTesting(); - network_observer->NotifyManagerIfNetworkChangedForTesting( + network_observer->NotifyManagerIfConnectionChangedForTesting( connection_type); base::RunLoop().RunUntilIdle(); } @@ -216,7 +215,7 @@ // the sync event fires by manipulating the network state as needed. // NOTE: The setup of the network connection must happen after the // BackgroundSyncManager has been created. - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); } void InitBackgroundSyncManager() { @@ -346,7 +345,7 @@ void SetupForSyncEvent( const TestBackgroundSyncManager::DispatchSyncCallback& callback) { test_background_sync_manager_->set_dispatch_sync_callback(callback); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); } void DispatchSyncStatusCallback( @@ -411,7 +410,6 @@ } TestBrowserThreadBundle browser_thread_bundle_; - std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_; std::unique_ptr<EmbeddedWorkerTestHelper> helper_; std::unique_ptr<BackgroundSyncManager> background_sync_manager_; std::unique_ptr<StoragePartitionImpl> storage_partition_impl_; @@ -853,7 +851,7 @@ InitFailedSyncEventTest(); // Prevent the first sync from running so that it stays in a pending state. - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_TRUE(Register(sync_options_1_)); EXPECT_TRUE(GetRegistration(sync_options_1_)); @@ -862,7 +860,7 @@ EXPECT_TRUE(GetRegistration(sync_options_1_)); // Verify that it only gets to run once. - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, sync_events_called_); EXPECT_FALSE(GetRegistration(sync_options_1_)); @@ -870,7 +868,7 @@ TEST_F(BackgroundSyncManagerTest, DisableWhilePending) { InitDelayedSyncEventTest(); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_TRUE(Register(sync_options_1_)); // Corrupting the backend should result in the manager disabling itself on the @@ -879,7 +877,7 @@ EXPECT_FALSE(Register(sync_options_2_)); test_background_sync_manager_->set_corrupt_backend(false); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); base::RunLoop().RunUntilIdle(); EXPECT_EQ(0, sync_events_called_); } @@ -906,12 +904,12 @@ TEST_F(BackgroundSyncManagerTest, FiresOnNetworkChange) { InitSyncEventTest(); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_TRUE(Register(sync_options_1_)); EXPECT_EQ(0, sync_events_called_); EXPECT_TRUE(GetRegistration(sync_options_1_)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); base::RunLoop().RunUntilIdle(); EXPECT_EQ(1, sync_events_called_); EXPECT_FALSE(GetRegistration(sync_options_1_)); @@ -920,14 +918,14 @@ TEST_F(BackgroundSyncManagerTest, MultipleRegistrationsFireOnNetworkChange) { InitSyncEventTest(); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_TRUE(Register(sync_options_1_)); EXPECT_TRUE(Register(sync_options_2_)); EXPECT_EQ(0, sync_events_called_); EXPECT_TRUE(GetRegistration(sync_options_1_)); EXPECT_TRUE(GetRegistration(sync_options_2_)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); EXPECT_EQ(2, sync_events_called_); EXPECT_FALSE(GetRegistration(sync_options_1_)); @@ -938,7 +936,7 @@ InitSyncEventTest(); // Initially the event won't run because there is no network. - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_TRUE(Register(sync_options_1_)); EXPECT_EQ(0, sync_events_called_); EXPECT_TRUE(GetRegistration(sync_options_1_)); @@ -947,7 +945,7 @@ DeleteBackgroundSyncManager(); // The next time the manager is started, the network is good. - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); SetupBackgroundSyncManager(); InitSyncEventTest(); @@ -1138,7 +1136,7 @@ EXPECT_LT(0, GetController()->run_in_background_count()); EXPECT_FALSE(GetController()->run_in_background_enabled()); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_FALSE(GetController()->run_in_background_enabled()); // Register a one-shot but it can't fire due to lack of network, wake up is @@ -1148,7 +1146,7 @@ // Start the event but it will pause mid-sync due to // InitDelayedSyncEventTest() above. - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); EXPECT_TRUE(GetController()->run_in_background_enabled()); EXPECT_EQ(test_background_sync_manager_->background_sync_parameters() ->min_sync_recovery_time, @@ -1435,7 +1433,7 @@ background_sync_manager_->EmulateServiceWorkerOffline(sw_registration_id_1_, false); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); was_called = false; code = blink::ServiceWorkerStatusCode::kOk; background_sync_manager_->EmulateDispatchSyncEvent( @@ -1445,7 +1443,7 @@ EXPECT_TRUE(was_called); EXPECT_EQ(blink::ServiceWorkerStatusCode::kErrorNetwork, code); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); was_called = false; background_sync_manager_->EmulateDispatchSyncEvent( "emulated_tag", sw_registration_1_->active_version(), false,
diff --git a/content/browser/background_sync/background_sync_network_observer.cc b/content/browser/background_sync/background_sync_network_observer.cc index 0746401..7de2ae5 100644 --- a/content/browser/background_sync/background_sync_network_observer.cc +++ b/content/browser/background_sync/background_sync_network_observer.cc
@@ -8,31 +8,52 @@ #include "base/single_thread_task_runner.h" #include "base/threading/thread_task_runner_handle.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/network_service_instance.h" namespace content { // static -bool BackgroundSyncNetworkObserver::ignore_network_change_notifier_ = false; +bool BackgroundSyncNetworkObserver::ignore_network_changes_ = false; // static -void BackgroundSyncNetworkObserver::SetIgnoreNetworkChangeNotifierForTests( +void BackgroundSyncNetworkObserver::SetIgnoreNetworkChangesForTests( bool ignore) { - ignore_network_change_notifier_ = ignore; + ignore_network_changes_ = ignore; } BackgroundSyncNetworkObserver::BackgroundSyncNetworkObserver( - const base::RepeatingClosure& network_changed_callback) - : connection_type_(net::NetworkChangeNotifier::GetConnectionType()), - network_changed_callback_(network_changed_callback) { + const base::RepeatingClosure& connection_changed_callback) + : network_connection_tracker_(nullptr), + connection_type_(network::mojom::ConnectionType::CONNECTION_UNKNOWN), + connection_changed_callback_(connection_changed_callback), + weak_ptr_factory_(this) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - net::NetworkChangeNotifier::AddNetworkChangeObserver(this); + BrowserThread::PostTaskAndReplyWithResult( + BrowserThread::UI, FROM_HERE, + base::BindOnce(&GetNetworkConnectionTracker), + base::BindOnce( + &BackgroundSyncNetworkObserver::RegisterWithNetworkConnectionTracker, + weak_ptr_factory_.GetWeakPtr())); } BackgroundSyncNetworkObserver::~BackgroundSyncNetworkObserver() { DCHECK_CURRENTLY_ON(BrowserThread::IO); - net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); + if (network_connection_tracker_) + network_connection_tracker_->RemoveNetworkConnectionObserver(this); +} + +void BackgroundSyncNetworkObserver::RegisterWithNetworkConnectionTracker( + network::NetworkConnectionTracker* network_connection_tracker) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK(network_connection_tracker); + network_connection_tracker_ = network_connection_tracker; + network_connection_tracker_->AddNetworkConnectionObserver(this); + network_connection_tracker_->GetConnectionType( + &connection_type_, + base::BindOnce(&BackgroundSyncNetworkObserver::OnConnectionChanged, + weak_ptr_factory_.GetWeakPtr())); } bool BackgroundSyncNetworkObserver::NetworkSufficient( @@ -45,46 +66,48 @@ case NETWORK_STATE_AVOID_CELLULAR: // Note that this returns true for CONNECTION_UNKNOWN to avoid never // firing. - return connection_type_ != net::NetworkChangeNotifier::CONNECTION_NONE && - !net::NetworkChangeNotifier::IsConnectionCellular( + return connection_type_ != + network::mojom::ConnectionType::CONNECTION_NONE && + !network::NetworkConnectionTracker::IsConnectionCellular( connection_type_); case NETWORK_STATE_ONLINE: - return connection_type_ != net::NetworkChangeNotifier::CONNECTION_NONE; + return connection_type_ != + network::mojom::ConnectionType::CONNECTION_NONE; } NOTREACHED(); return false; } -void BackgroundSyncNetworkObserver::OnNetworkChanged( - net::NetworkChangeNotifier::ConnectionType connection_type) { +void BackgroundSyncNetworkObserver::OnConnectionChanged( + network::mojom::ConnectionType connection_type) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - if (ignore_network_change_notifier_) + if (ignore_network_changes_) return; - NotifyManagerIfNetworkChanged(connection_type); + NotifyManagerIfConnectionChanged(connection_type); } -void BackgroundSyncNetworkObserver::NotifyManagerIfNetworkChangedForTesting( - net::NetworkChangeNotifier::ConnectionType connection_type) { - NotifyManagerIfNetworkChanged(connection_type); +void BackgroundSyncNetworkObserver::NotifyManagerIfConnectionChangedForTesting( + network::mojom::ConnectionType connection_type) { + NotifyManagerIfConnectionChanged(connection_type); } -void BackgroundSyncNetworkObserver::NotifyManagerIfNetworkChanged( - net::NetworkChangeNotifier::ConnectionType connection_type) { +void BackgroundSyncNetworkObserver::NotifyManagerIfConnectionChanged( + network::mojom::ConnectionType connection_type) { DCHECK_CURRENTLY_ON(BrowserThread::IO); if (connection_type == connection_type_) return; connection_type_ = connection_type; - NotifyNetworkChanged(); + NotifyConnectionChanged(); } -void BackgroundSyncNetworkObserver::NotifyNetworkChanged() { +void BackgroundSyncNetworkObserver::NotifyConnectionChanged() { DCHECK_CURRENTLY_ON(BrowserThread::IO); base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, - network_changed_callback_); + connection_changed_callback_); } } // namespace content
diff --git a/content/browser/background_sync/background_sync_network_observer.h b/content/browser/background_sync/background_sync_network_observer.h index c52dbe5..34ea74c4 100644 --- a/content/browser/background_sync/background_sync_network_observer.h +++ b/content/browser/background_sync/background_sync_network_observer.h
@@ -7,14 +7,15 @@ #include "base/bind.h" #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "content/browser/background_sync/background_sync.pb.h" #include "content/common/content_export.h" -#include "net/base/network_change_notifier.h" +#include "services/network/public/cpp/network_connection_tracker.h" namespace content { class CONTENT_EXPORT BackgroundSyncNetworkObserver - : public net::NetworkChangeNotifier::NetworkChangeObserver { + : public network::NetworkConnectionTracker::NetworkConnectionObserver { public: // Creates a BackgroundSyncNetworkObserver. |network_changed_callback| is // called when the network connection changes asynchronously via PostMessage. @@ -23,37 +24,47 @@ ~BackgroundSyncNetworkObserver() override; - // Enable or disable notifications coming from the NetworkChangeNotifier. (For - // preventing flakes in tests) - static void SetIgnoreNetworkChangeNotifierForTests(bool ignore); + // Enable or disable notifications coming from the NetworkConnectionTracker. + // (For preventing flakes in tests) + static void SetIgnoreNetworkChangesForTests(bool ignore); // Returns true if the state of the network meets the needs of // |network_state|. bool NetworkSufficient(SyncNetworkState network_state); - // NetworkChangeObserver overrides - void OnNetworkChanged( - net::NetworkChangeNotifier::ConnectionType connection_type) override; + // NetworkConnectionObserver overrides + void OnConnectionChanged( + network::mojom::ConnectionType connection_type) override; - // Allow tests to call NotifyManagerIfNetworkChanged. - void NotifyManagerIfNetworkChangedForTesting( - net::NetworkChangeNotifier::ConnectionType connection_type); + // Allow tests to call NotifyManagerIfConnectionChanged. + void NotifyManagerIfConnectionChangedForTesting( + network::mojom::ConnectionType connection_type); private: - // Calls NotifyNetworkChanged if the connection type has changed. - void NotifyManagerIfNetworkChanged( - net::NetworkChangeNotifier::ConnectionType connection_type); + // Finishes setup once we get the NetworkConnectionTracker from the UI thread. + virtual void RegisterWithNetworkConnectionTracker( + network::NetworkConnectionTracker* network_connection_tracker); - void NotifyNetworkChanged(); + // Calls NotifyConnectionChanged if the connection type has changed. + void NotifyManagerIfConnectionChanged( + network::mojom::ConnectionType connection_type); - net::NetworkChangeNotifier::ConnectionType connection_type_; + void NotifyConnectionChanged(); - // The callback to run when the network changes. - base::RepeatingClosure network_changed_callback_; + // NetworkConnectionTracker is a global singleton which will outlive this + // object. + network::NetworkConnectionTracker* network_connection_tracker_; - // Set true to ignore notifications coming from the NetworkChangeNotifier + network::mojom::ConnectionType connection_type_; + + // The callback to run when the connection changes. + base::RepeatingClosure connection_changed_callback_; + + // Set true to ignore notifications coming from the NetworkConnectionTracker // (to prevent flakes in tests). - static bool ignore_network_change_notifier_; + static bool ignore_network_changes_; + + base::WeakPtrFactory<BackgroundSyncNetworkObserver> weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(BackgroundSyncNetworkObserver); };
diff --git a/content/browser/background_sync/background_sync_network_observer_unittest.cc b/content/browser/background_sync/background_sync_network_observer_unittest.cc index ed81a6119..81331a6 100644 --- a/content/browser/background_sync/background_sync_network_observer_unittest.cc +++ b/content/browser/background_sync/background_sync_network_observer_unittest.cc
@@ -6,102 +6,101 @@ #include "base/run_loop.h" #include "content/public/test/test_browser_thread_bundle.h" -#include "net/base/network_change_notifier.h" +#include "services/network/test/test_network_connection_tracker.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { class BackgroundSyncNetworkObserverTest : public testing::Test { protected: - BackgroundSyncNetworkObserverTest() - : network_change_notifier(net::NetworkChangeNotifier::CreateMock()), - network_observer_(new BackgroundSyncNetworkObserver(base::BindRepeating( - &BackgroundSyncNetworkObserverTest::OnNetworkChanged, - base::Unretained(this)))), - network_changed_count_(0) {} + BackgroundSyncNetworkObserverTest() : network_changed_count_(0) { + network_observer_ = + std::make_unique<BackgroundSyncNetworkObserver>(base::BindRepeating( + &BackgroundSyncNetworkObserverTest::OnConnectionChanged, + base::Unretained(this))); + } - void SetNetwork(net::NetworkChangeNotifier::ConnectionType connection_type) { - net::NetworkChangeNotifier::NotifyObserversOfNetworkChangeForTests( + void SetNetwork(network::mojom::ConnectionType connection_type) { + network::TestNetworkConnectionTracker::GetInstance()->SetConnectionType( connection_type); base::RunLoop().RunUntilIdle(); } - void OnNetworkChanged() { network_changed_count_++; } + void OnConnectionChanged() { network_changed_count_++; } TestBrowserThreadBundle browser_thread_bundle_; - std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier; std::unique_ptr<BackgroundSyncNetworkObserver> network_observer_; int network_changed_count_; }; TEST_F(BackgroundSyncNetworkObserverTest, NetworkChangeInvokesCallback) { - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); network_changed_count_ = 0; - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); EXPECT_EQ(1, network_changed_count_); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_3G); + SetNetwork(network::mojom::ConnectionType::CONNECTION_3G); EXPECT_EQ(2, network_changed_count_); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_UNKNOWN); + SetNetwork(network::mojom::ConnectionType::CONNECTION_UNKNOWN); EXPECT_EQ(3, network_changed_count_); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_EQ(4, network_changed_count_); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_EQ(4, network_changed_count_); } TEST_F(BackgroundSyncNetworkObserverTest, NetworkSufficientAnyNetwork) { - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ANY)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_3G); + SetNetwork(network::mojom::ConnectionType::CONNECTION_3G); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ANY)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_UNKNOWN); + SetNetwork(network::mojom::ConnectionType::CONNECTION_UNKNOWN); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ANY)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ANY)); } TEST_F(BackgroundSyncNetworkObserverTest, NetworkSufficientAvoidCellular) { - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); EXPECT_TRUE( network_observer_->NetworkSufficient(NETWORK_STATE_AVOID_CELLULAR)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_UNKNOWN); + SetNetwork(network::mojom::ConnectionType::CONNECTION_UNKNOWN); EXPECT_TRUE( network_observer_->NetworkSufficient(NETWORK_STATE_AVOID_CELLULAR)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_2G); + SetNetwork(network::mojom::ConnectionType::CONNECTION_2G); EXPECT_FALSE( network_observer_->NetworkSufficient(NETWORK_STATE_AVOID_CELLULAR)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_3G); + SetNetwork(network::mojom::ConnectionType::CONNECTION_3G); EXPECT_FALSE( network_observer_->NetworkSufficient(NETWORK_STATE_AVOID_CELLULAR)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_4G); + SetNetwork(network::mojom::ConnectionType::CONNECTION_4G); EXPECT_FALSE( network_observer_->NetworkSufficient(NETWORK_STATE_AVOID_CELLULAR)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_FALSE( network_observer_->NetworkSufficient(NETWORK_STATE_AVOID_CELLULAR)); } TEST_F(BackgroundSyncNetworkObserverTest, ConditionsMetOnline) { - SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); + SetNetwork(network::mojom::ConnectionType::CONNECTION_WIFI); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ONLINE)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_3G); + SetNetwork(network::mojom::ConnectionType::CONNECTION_3G); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ONLINE)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_UNKNOWN); + SetNetwork(network::mojom::ConnectionType::CONNECTION_UNKNOWN); EXPECT_TRUE(network_observer_->NetworkSufficient(NETWORK_STATE_ONLINE)); - SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); + SetNetwork(network::mojom::ConnectionType::CONNECTION_NONE); EXPECT_FALSE(network_observer_->NetworkSufficient(NETWORK_STATE_ONLINE)); }
diff --git a/content/browser/background_sync/background_sync_service_impl_unittest.cc b/content/browser/background_sync/background_sync_service_impl_unittest.cc index 4f6d1aa..a1dd3ef 100644 --- a/content/browser/background_sync/background_sync_service_impl_unittest.cc +++ b/content/browser/background_sync/background_sync_service_impl_unittest.cc
@@ -25,7 +25,6 @@ #include "content/public/test/test_browser_thread_bundle.h" #include "content/test/test_background_sync_context.h" #include "mojo/public/cpp/bindings/interface_ptr.h" -#include "net/base/network_change_notifier.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/mojom/service_worker/service_worker_registration.mojom.h" @@ -90,14 +89,13 @@ public: BackgroundSyncServiceImplTest() : thread_bundle_( - new TestBrowserThreadBundle(TestBrowserThreadBundle::IO_MAINLOOP)), - network_change_notifier_(net::NetworkChangeNotifier::CreateMock()) { + new TestBrowserThreadBundle(TestBrowserThreadBundle::IO_MAINLOOP)) { default_sync_registration_ = blink::mojom::SyncRegistration::New(); } void SetUp() override { // Don't let the tests be confused by the real-world device connectivity - background_sync_test_util::SetIgnoreNetworkChangeNotifier(true); + background_sync_test_util::SetIgnoreNetworkChanges(true); CreateTestHelper(); CreateStoragePartition(); @@ -115,7 +113,7 @@ background_sync_context_ = nullptr; // Restore the network observer functionality for subsequent tests - background_sync_test_util::SetIgnoreNetworkChangeNotifier(false); + background_sync_test_util::SetIgnoreNetworkChanges(false); } // SetUp helper methods @@ -158,8 +156,8 @@ BackgroundSyncNetworkObserver* network_observer = background_sync_context_->background_sync_manager() ->GetNetworkObserverForTesting(); - network_observer->NotifyManagerIfNetworkChangedForTesting( - net::NetworkChangeNotifier::CONNECTION_NONE); + network_observer->NotifyManagerIfConnectionChangedForTesting( + network::mojom::ConnectionType::CONNECTION_NONE); base::RunLoop().RunUntilIdle(); } @@ -211,7 +209,6 @@ } std::unique_ptr<TestBrowserThreadBundle> thread_bundle_; - std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier_; std::unique_ptr<EmbeddedWorkerTestHelper> embedded_worker_helper_; std::unique_ptr<StoragePartitionImpl> storage_partition_impl_; scoped_refptr<BackgroundSyncContext> background_sync_context_;
diff --git a/content/browser/devtools/devtools_stream_file.cc b/content/browser/devtools/devtools_stream_file.cc index 1e0aa6b..6f651af 100644 --- a/content/browser/devtools/devtools_stream_file.cc +++ b/content/browser/devtools/devtools_stream_file.cc
@@ -12,7 +12,6 @@ #include "base/task/lazy_task_runner.h" #include "base/task/post_task.h" #include "base/third_party/icu/icu_utf.h" -#include "base/threading/thread_restrictions.h" #include "content/public/browser/browser_thread.h" #include "storage/browser/fileapi/file_system_context.h" @@ -46,7 +45,6 @@ bool DevToolsStreamFile::InitOnFileSequenceIfNeeded() { DCHECK(task_runner_->RunsTasksInCurrentSequence()); - base::AssertBlockingAllowed(); if (had_errors_) return false; if (file_.IsValid())
diff --git a/content/browser/devtools/protocol/devtools_download_manager_delegate.cc b/content/browser/devtools/protocol/devtools_download_manager_delegate.cc index bfaa525..a865566 100644 --- a/content/browser/devtools/protocol/devtools_download_manager_delegate.cc +++ b/content/browser/devtools/protocol/devtools_download_manager_delegate.cc
@@ -7,7 +7,6 @@ #include "base/bind.h" #include "base/files/file_util.h" #include "base/task/post_task.h" -#include "base/threading/thread_restrictions.h" #include "content/browser/devtools/protocol/devtools_download_manager_helper.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" @@ -159,7 +158,6 @@ const std::string& mime_type, const base::FilePath& suggested_directory, const FilenameDeterminedCallback& callback) { - base::AssertBlockingAllowed(); base::FilePath generated_name = net::GenerateFileName(url, content_disposition, std::string(), suggested_filename, mime_type, "download");
diff --git a/content/browser/frame_host/navigation_handle_impl.cc b/content/browser/frame_host/navigation_handle_impl.cc index f9fbba4d..3fb4b74 100644 --- a/content/browser/frame_host/navigation_handle_impl.cc +++ b/content/browser/frame_host/navigation_handle_impl.cc
@@ -593,6 +593,11 @@ ResumeInternal(); } +bool NavigationHandleImpl::IsDeferredForTesting() { + return state_ == DEFERRING_START || state_ == DEFERRING_REDIRECT || + state_ == DEFERRING_FAILURE || state_ == DEFERRING_RESPONSE; +} + bool NavigationHandleImpl::WasStartedFromContextMenu() const { return started_from_context_menu_; }
diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h index f901fb8..39867552 100644 --- a/content/browser/frame_host/navigation_handle_impl.h +++ b/content/browser/frame_host/navigation_handle_impl.h
@@ -152,6 +152,7 @@ const std::string& raw_response_header) override; void CallDidCommitNavigationForTesting(const GURL& url) override; void CallResumeForTesting() override; + bool IsDeferredForTesting() override; bool WasStartedFromContextMenu() const override; const GURL& GetSearchableFormURL() override; const std::string& GetSearchableFormEncoding() override;
diff --git a/content/browser/network_service_instance.cc b/content/browser/network_service_instance.cc index e9306742..de01c02 100644 --- a/content/browser/network_service_instance.cc +++ b/content/browser/network_service_instance.cc
@@ -131,8 +131,10 @@ void SetNetworkConnectionTrackerForTesting( network::NetworkConnectionTracker* network_connection_tracker) { - DCHECK(!g_network_connection_tracker || !network_connection_tracker); - g_network_connection_tracker = network_connection_tracker; + if (g_network_connection_tracker != network_connection_tracker) { + DCHECK(!g_network_connection_tracker || !network_connection_tracker); + g_network_connection_tracker = network_connection_tracker; + } } } // namespace content
diff --git a/content/browser/renderer_host/input/autoscroll_browsertest.cc b/content/browser/renderer_host/input/autoscroll_browsertest.cc index 33ed8a9..731d4cc 100644 --- a/content/browser/renderer_host/input/autoscroll_browsertest.cc +++ b/content/browser/renderer_host/input/autoscroll_browsertest.cc
@@ -33,6 +33,52 @@ namespace content { +// Waits for a GSB ack and checks that the acked event has none zero scroll +// delta hints. +class GestureScrollBeginWatcher : public RenderWidgetHost::InputEventObserver { + public: + GestureScrollBeginWatcher(RenderWidgetHost* rwh) + : rwh_(static_cast<RenderWidgetHostImpl*>(rwh)->GetWeakPtr()) { + rwh->AddInputEventObserver(this); + Reset(); + } + ~GestureScrollBeginWatcher() override { + if (rwh_) + rwh_->RemoveInputEventObserver(this); + } + + void OnInputEventAck(InputEventAckSource, + InputEventAckState, + const blink::WebInputEvent& event) override { + if (event.GetType() == blink::WebInputEvent::kGestureScrollBegin) { + blink::WebGestureEvent received_begin = + *static_cast<const blink::WebGestureEvent*>(&event); + DCHECK(received_begin.data.scroll_begin.delta_x_hint || + received_begin.data.scroll_begin.delta_y_hint); + if (run_loop_) + run_loop_->Quit(); + gesture_scroll_begin_seen_ = true; + } + } + + void Wait() { + if (gesture_scroll_begin_seen_) + return; + DCHECK(run_loop_); + run_loop_->Run(); + } + + void Reset() { + gesture_scroll_begin_seen_ = false; + run_loop_ = std::make_unique<base::RunLoop>(); + } + + private: + base::WeakPtr<RenderWidgetHostImpl> rwh_; + std::unique_ptr<base::RunLoop> run_loop_; + bool gesture_scroll_begin_seen_; +}; + class AutoscrollBrowserTest : public ContentBrowserTest { public: AutoscrollBrowserTest() {} @@ -103,39 +149,54 @@ LoadURL(kAutoscrollDataURL); // Start autoscroll with middle click. - auto input_msg_watcher = std::make_unique<InputMsgWatcher>( - GetWidgetHost(), blink::WebInputEvent::kGestureScrollBegin); + auto scroll_begin_watcher = + std::make_unique<GestureScrollBeginWatcher>(GetWidgetHost()); SimulateMiddleClick(10, 10, blink::WebInputEvent::kNoModifiers); - input_msg_watcher->WaitForAck(); // The page should start scrolling with mouse move. RenderFrameSubmissionObserver observer( GetWidgetHost()->render_frame_metadata_provider()); blink::WebMouseEvent move_event = SyntheticWebMouseEventBuilder::Build( - blink::WebInputEvent::kMouseMove, 30, 30, + blink::WebInputEvent::kMouseMove, 50, 50, blink::WebInputEvent::kNoModifiers); move_event.SetTimeStamp(ui::EventTimeForNow()); - move_event.SetPositionInScreen(30, 30); + move_event.SetPositionInScreen(50, 50); GetWidgetHost()->ForwardMouseEvent(move_event); + scroll_begin_watcher->Wait(); WaitForScroll(observer); } +// Tests that the GSB sent in the beginning of a middle click autoscroll has +// none-zero delta hints. +IN_PROC_BROWSER_TEST_F(AutoscrollBrowserTest, AutoscrollFlingGSBDeltaHints) { + LoadURL(kAutoscrollDataURL); + + // Start autoscroll with middle click. + auto scroll_begin_watcher = + std::make_unique<GestureScrollBeginWatcher>(GetWidgetHost()); + SimulateMiddleClick(10, 10, blink::WebInputEvent::kNoModifiers); + + // A GSB will be sent on first mouse move. + blink::WebMouseEvent move_event = SyntheticWebMouseEventBuilder::Build( + blink::WebInputEvent::kMouseMove, 50, 50, + blink::WebInputEvent::kNoModifiers); + move_event.SetTimeStamp(ui::EventTimeForNow()); + move_event.SetPositionInScreen(50, 50); + GetWidgetHost()->ForwardMouseEvent(move_event); + // The test crashes if the received GSB has zero delta hints. + scroll_begin_watcher->Wait(); +} + // Checks that wheel scrolling works after autoscroll cancelation. IN_PROC_BROWSER_TEST_F(AutoscrollBrowserTest, WheelScrollingWorksAfterAutoscrollCancel) { LoadURL(kAutoscrollDataURL); // Start autoscroll with middle click. - auto input_msg_watcher = std::make_unique<InputMsgWatcher>( - GetWidgetHost(), blink::WebInputEvent::kGestureScrollBegin); SimulateMiddleClick(10, 10, blink::WebInputEvent::kNoModifiers); - input_msg_watcher->WaitForAck(); // Without moving the mouse cancel the autoscroll fling with another click. - input_msg_watcher = std::make_unique<InputMsgWatcher>( - GetWidgetHost(), blink::WebInputEvent::kGestureScrollEnd); SimulateMiddleClick(10, 10, blink::WebInputEvent::kNoModifiers); - input_msg_watcher->WaitForAck(); // The mouse wheel scrolling must work after autoscroll cancellation. RenderFrameSubmissionObserver observer( @@ -154,20 +215,20 @@ LoadURL(kAutoscrollDataURL); // Start autoscroll with middle click. - auto scroll_begin_watcher = std::make_unique<InputMsgWatcher>( - GetWidgetHost(), blink::WebInputEvent::kGestureScrollBegin); - SimulateMiddleClick(30, 30, blink::WebInputEvent::kNoModifiers); - scroll_begin_watcher->WaitForAck(); + auto scroll_begin_watcher = + std::make_unique<GestureScrollBeginWatcher>(GetWidgetHost()); + SimulateMiddleClick(100, 100, blink::WebInputEvent::kNoModifiers); // Move the mouse up, no scrolling happens since the page is at its extent. auto scroll_update_watcher = std::make_unique<InputMsgWatcher>( GetWidgetHost(), blink::WebInputEvent::kGestureScrollUpdate); blink::WebMouseEvent move_up = SyntheticWebMouseEventBuilder::Build( - blink::WebInputEvent::kMouseMove, 10, 10, + blink::WebInputEvent::kMouseMove, 20, 20, blink::WebInputEvent::kNoModifiers); move_up.SetTimeStamp(ui::EventTimeForNow()); - move_up.SetPositionInScreen(10, 10); + move_up.SetPositionInScreen(20, 20); GetWidgetHost()->ForwardMouseEvent(move_up); + scroll_begin_watcher->Wait(); EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS, scroll_update_watcher->WaitForAck()); @@ -183,10 +244,10 @@ RenderFrameSubmissionObserver observer( GetWidgetHost()->render_frame_metadata_provider()); blink::WebMouseEvent move_down = SyntheticWebMouseEventBuilder::Build( - blink::WebInputEvent::kMouseMove, 55, 55, + blink::WebInputEvent::kMouseMove, 180, 180, blink::WebInputEvent::kNoModifiers); move_down.SetTimeStamp(ui::EventTimeForNow()); - move_down.SetPositionInScreen(55, 55); + move_down.SetPositionInScreen(180, 180); GetWidgetHost()->ForwardMouseEvent(move_down); WaitForScroll(observer); }
diff --git a/content/browser/renderer_host/input/input_router_impl.cc b/content/browser/renderer_host/input/input_router_impl.cc index 06c0f73..7efbc3c3 100644 --- a/content/browser/renderer_host/input/input_router_impl.cc +++ b/content/browser/renderer_host/input/input_router_impl.cc
@@ -342,12 +342,11 @@ touch_action_filter_.AppendToGestureSequenceForDebugging( base::NumberToString(event.event.unique_touch_event_id).c_str()); touch_action_filter_.IncreaseActiveTouches(); - // Touchstart events sent to the renderer indicate a new touch sequence, but - // in some cases we may filter out sending the touchstart - catch those - // here. - if (ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS || - ack_result == INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING) { - // Touch action must be auto when there is no consumer + // There are some cases the touch action may not have value when receiving + // the ACK for the touch start, such as input ack state is + // NO_CONSUMER_EXISTS, or the renderer has swapped out. In these cases, set + // touch action Auto. + if (!touch_action_filter_.allowed_touch_action().has_value()) { touch_action_filter_.OnSetTouchAction(cc::kTouchActionAuto); UpdateTouchAckTimeoutEnabled(); }
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc index e5077420..d295be3 100644 --- a/content/browser/renderer_host/input/input_router_impl_unittest.cc +++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -440,14 +440,13 @@ EXPECT_EQ(input_router_->num_of_active_touches_for_test(), 0); } - void OnTouchEventAckWithResultNonBlocking() { + void OnTouchEventAckWithAckState(InputEventAckState ack_state) { input_router_->OnHasTouchEventHandlers(true); EXPECT_FALSE(input_router_->AllowedTouchAction().has_value()); PressTouchPoint(1, 1); input_router_->SendTouchEvent(TouchEventWithLatencyInfo(touch_event_)); input_router_->OnTouchEventAck(TouchEventWithLatencyInfo(touch_event_), - InputEventAckSource::BROWSER, - INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); + InputEventAckSource::BROWSER, ack_state); EXPECT_EQ(input_router_->AllowedTouchAction().value(), cc::kTouchActionAuto); } @@ -649,8 +648,33 @@ INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); } -TEST_F(InputRouterImplTest, TouchActionAutoWithAckResultNonBlocking) { - OnTouchEventAckWithResultNonBlocking(); +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateConsumed) { + OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_CONSUMED); +} + +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateNotConsumed) { + OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_NOT_CONSUMED); +} + +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateConsumedShouldBubble) { + OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_CONSUMED_SHOULD_BUBBLE); +} + +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateNoConsumerExists) { + OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS); +} + +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateIgnored) { + OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_IGNORED); +} + +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateNonBlocking) { + OnTouchEventAckWithAckState(INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING); +} + +TEST_F(InputRouterImplTest, TouchActionAutoWithAckStateNonBlockingDueToFling) { + OnTouchEventAckWithAckState( + INPUT_EVENT_ACK_STATE_SET_NON_BLOCKING_DUE_TO_FLING); } // Tests that touch-events are sent properly.
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index a3d7e1f..9d5cd65 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -2229,22 +2229,25 @@ void RenderWidgetHostImpl::OnAutoscrollStart(const gfx::PointF& position) { GetView()->OnAutoscrollStart(); - WebGestureEvent scroll_begin = SyntheticWebGestureEventBuilder::Build( - WebInputEvent::kGestureScrollBegin, - blink::kWebGestureDeviceSyntheticAutoscroll); - scroll_begin.SetPositionInWidget(position); - - ForwardGestureEventWithLatencyInfo( - scroll_begin, ui::LatencyInfo(ui::SourceEventType::OTHER)); - - // Send a GFS event with zero velocity to make sure that the scroll sequence - // will end with the GFC generated in |OnAutoscrollEnd()|; Otherwise if the - // user cancels the autoscroll without moving the mouse, the GFC will get - // filtered since no GFS is sent in the sequence. https://crbug.com/829794 - OnAutoscrollFling(gfx::Vector2dF()); + sent_autoscroll_scroll_begin_ = false; + autoscroll_start_position_ = position; } void RenderWidgetHostImpl::OnAutoscrollFling(const gfx::Vector2dF& velocity) { + if (!sent_autoscroll_scroll_begin_ && velocity != gfx::Vector2dF()) { + // Send a GSB event with valid delta hints. + WebGestureEvent scroll_begin = SyntheticWebGestureEventBuilder::Build( + WebInputEvent::kGestureScrollBegin, + blink::kWebGestureDeviceSyntheticAutoscroll); + scroll_begin.SetPositionInWidget(autoscroll_start_position_); + scroll_begin.data.scroll_begin.delta_x_hint = velocity.x(); + scroll_begin.data.scroll_begin.delta_y_hint = velocity.y(); + + ForwardGestureEventWithLatencyInfo( + scroll_begin, ui::LatencyInfo(ui::SourceEventType::OTHER)); + sent_autoscroll_scroll_begin_ = true; + } + WebGestureEvent event = SyntheticWebGestureEventBuilder::Build( WebInputEvent::kGestureFlingStart, blink::kWebGestureDeviceSyntheticAutoscroll); @@ -2256,6 +2259,11 @@ } void RenderWidgetHostImpl::OnAutoscrollEnd() { + // Don't send a GFC if no GSB is sent. + if (!sent_autoscroll_scroll_begin_) + return; + + sent_autoscroll_scroll_begin_ = false; WebGestureEvent cancel_event = SyntheticWebGestureEventBuilder::Build( WebInputEvent::kGestureFlingCancel, blink::kWebGestureDeviceSyntheticAutoscroll);
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h index 9f25072..ed83bf8a 100644 --- a/content/browser/renderer_host/render_widget_host_impl.h +++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -1165,6 +1165,9 @@ bool did_receive_first_frame_after_navigation_ = true; + bool sent_autoscroll_scroll_begin_ = false; + gfx::PointF autoscroll_start_position_; + base::WeakPtrFactory<RenderWidgetHostImpl> weak_factory_; DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostImpl);
diff --git a/content/browser/service_worker/service_worker_controllee_request_handler.cc b/content/browser/service_worker/service_worker_controllee_request_handler.cc index dbbad21..77ab17a4 100644 --- a/content/browser/service_worker/service_worker_controllee_request_handler.cc +++ b/content/browser/service_worker/service_worker_controllee_request_handler.cc
@@ -71,8 +71,10 @@ return false; } offline_pages::OfflinePageHeader offline_header(offline_header_value); - return offline_header.reason == - offline_pages::OfflinePageHeader::Reason::DOWNLOAD; + return offline_header.reason != + offline_pages::OfflinePageHeader::Reason::NONE && + offline_header.reason != + offline_pages::OfflinePageHeader::Reason::RELOAD; } #endif // BUILDFLAG(ENABLE_OFFLINE_PAGES)
diff --git a/content/browser/utility_process_host_browsertest.cc b/content/browser/utility_process_host_browsertest.cc index 670a457d..c08c0ce 100644 --- a/content/browser/utility_process_host_browsertest.cc +++ b/content/browser/utility_process_host_browsertest.cc
@@ -160,7 +160,14 @@ RunUtilityProcess(false, false); } -IN_PROC_BROWSER_TEST_F(UtilityProcessHostBrowserTest, LaunchProcessAndCrash) { +// Flaky on Windows, crbug.com/879555 +#if defined(OS_WIN) +#define MAYBE_LaunchProcessAndCrash DISABLED_LaunchProcessAndCrash +#else +#define MAYBE_LaunchProcessAndCrash LaunchProcessAndCrash +#endif +IN_PROC_BROWSER_TEST_F(UtilityProcessHostBrowserTest, + MAYBE_LaunchProcessAndCrash) { RunUtilityProcess(false, true); }
diff --git a/content/child/dwrite_font_proxy/dwrite_font_proxy_init_impl_win.cc b/content/child/dwrite_font_proxy/dwrite_font_proxy_init_impl_win.cc index a6cd064c..80894616 100644 --- a/content/child/dwrite_font_proxy/dwrite_font_proxy_init_impl_win.cc +++ b/content/child/dwrite_font_proxy/dwrite_font_proxy_init_impl_win.cc
@@ -26,8 +26,10 @@ namespace { -mswr::ComPtr<DWriteFontCollectionProxy> g_font_collection; -mswr::ComPtr<FontFallback> g_font_fallback; +// Created on demand and then kept around until process exit. +DWriteFontCollectionProxy* g_font_collection = nullptr; +FontFallback* g_font_fallback = nullptr; + base::RepeatingCallback<mojom::DWriteFontProxyPtrInfo(void)>* g_connection_callback_override = nullptr; @@ -67,11 +69,13 @@ mswr::ComPtr<IDWriteFactory2> factory2; if (SUCCEEDED(factory.As(&factory2)) && factory2.Get()) { - FontFallback::Create(&g_font_fallback, g_font_collection.Get()); + if (g_font_fallback) + g_font_fallback->Release(); + FontFallback::Create(&g_font_fallback, g_font_collection); } sk_sp<SkFontMgr> skia_font_manager = SkFontMgr_New_DirectWrite( - factory.Get(), g_font_collection.Get(), g_font_fallback.Get()); + factory.Get(), g_font_collection, g_font_fallback); blink::WebFontRendering::SetSkiaFontManager(skia_font_manager); SetDefaultSkiaFactory(std::move(skia_font_manager)); @@ -83,7 +87,7 @@ // instead fall back on WebKit's fallback logic, we don't use Skia's font // fallback if IDWriteFontFallback is not available. // This flag can be removed when Win8.0 and earlier are no longer supported. - bool fallback_available = g_font_fallback.Get() != nullptr; + bool fallback_available = g_font_fallback != nullptr; DCHECK_EQ(fallback_available, base::win::GetVersion() > base::win::VERSION_WIN8); blink::WebFontRendering::SetUseSkiaFontFallback(fallback_available);
diff --git a/content/public/browser/navigation_handle.h b/content/public/browser/navigation_handle.h index 3baba2d4..bd5c217b 100644 --- a/content/public/browser/navigation_handle.h +++ b/content/public/browser/navigation_handle.h
@@ -326,6 +326,9 @@ // deferring NavigationThrottle do the resuming. virtual void CallResumeForTesting() = 0; + // Returns whether this navigation is currently deferred. + virtual bool IsDeferredForTesting() = 0; + // The NavigationData that the embedder returned from // ResourceDispatcherHostDelegate::GetNavigationData during commit. This will // be a clone of the NavigationData.
diff --git a/content/public/renderer/navigation_state.h b/content/public/renderer/navigation_state.h index 10432c1..0a39e5e 100644 --- a/content/public/renderer/navigation_state.h +++ b/content/public/renderer/navigation_state.h
@@ -8,26 +8,14 @@ #include <string> #include "content/common/content_export.h" -#include "ui/base/page_transition_types.h" namespace content { -// NavigationState is the portion of DocumentState that is affected by -// in-document navigation. -// TODO(simonjam): Move this to HistoryItem's ExtraData. +// TODO(dgozman): Remove this class, once public DocumentState +// does not reference it. class CONTENT_EXPORT NavigationState { public: virtual ~NavigationState(); - - // Contains the transition type that the browser specified when it - // initiated the load. - virtual ui::PageTransition GetTransitionType() = 0; - - // True iff the frame's navigation was within the same document. - virtual bool WasWithinSameDocument() = 0; - - // True if this navigation was not initiated via WebFrame::LoadRequest. - virtual bool IsContentInitiated() = 0; }; } // namespace content
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h index 88efca34..cff1efb 100644 --- a/content/public/renderer/render_frame_observer.h +++ b/content/public/renderer/render_frame_observer.h
@@ -21,6 +21,7 @@ #include "third_party/blink/public/platform/web_loading_behavior_flag.h" #include "third_party/blink/public/platform/web_vector.h" #include "third_party/blink/public/web/web_meaningful_layout.h" +#include "ui/base/page_transition_types.h" #include "v8/include/v8.h" namespace blink { @@ -72,10 +73,11 @@ // Called when a provisional load is about to commit in a frame. This is // dispatched just before the Javascript unload event. virtual void WillCommitProvisionalLoad() {} - virtual void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) {} + virtual void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) {} virtual void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) {} + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) {} virtual void DidFailProvisionalLoad(const blink::WebURLError& error) {} virtual void DidFinishLoad() {} virtual void DidFinishDocumentLoad() {}
diff --git a/content/public/test/background_sync_test_util.cc b/content/public/test/background_sync_test_util.cc index ae2d3554..f07530fb 100644 --- a/content/public/test/background_sync_test_util.cc +++ b/content/public/test/background_sync_test_util.cc
@@ -29,11 +29,11 @@ BackgroundSyncNetworkObserver* network_observer = sync_manager->GetNetworkObserverForTesting(); if (online) { - network_observer->NotifyManagerIfNetworkChangedForTesting( - net::NetworkChangeNotifier::CONNECTION_WIFI); + network_observer->NotifyManagerIfConnectionChangedForTesting( + network::mojom::ConnectionType::CONNECTION_WIFI); } else { - network_observer->NotifyManagerIfNetworkChangedForTesting( - net::NetworkChangeNotifier::CONNECTION_NONE); + network_observer->NotifyManagerIfConnectionChangedForTesting( + network::mojom::ConnectionType::CONNECTION_NONE); } } @@ -45,8 +45,8 @@ } // namespace // static -void SetIgnoreNetworkChangeNotifier(bool ignore) { - BackgroundSyncNetworkObserver::SetIgnoreNetworkChangeNotifierForTests(ignore); +void SetIgnoreNetworkChanges(bool ignore) { + BackgroundSyncNetworkObserver::SetIgnoreNetworkChangesForTests(ignore); } // static
diff --git a/content/public/test/background_sync_test_util.h b/content/public/test/background_sync_test_util.h index 586dba08..6de9e3d 100644 --- a/content/public/test/background_sync_test_util.h +++ b/content/public/test/background_sync_test_util.h
@@ -11,9 +11,9 @@ // Utility namespace for background sync tests. namespace background_sync_test_util { -// Enables or disables notifications coming from the NetworkChangeNotifier. +// Enables or disables notifications coming from the NetworkConnectionTracker. // (For preventing flakes in tests) -void SetIgnoreNetworkChangeNotifier(bool ignore); +void SetIgnoreNetworkChanges(bool ignore); // Puts background sync manager into online or offline mode for tests. //
diff --git a/content/public/test/test_content_client_initializer.cc b/content/public/test/test_content_client_initializer.cc index 10f0d10..a8391d04 100644 --- a/content/public/test/test_content_client_initializer.cc +++ b/content/public/test/test_content_client_initializer.cc
@@ -19,7 +19,8 @@ TestContentClientInitializer::TestContentClientInitializer() { test_network_connection_tracker_ = network::TestNetworkConnectionTracker::CreateInstance(); - SetNetworkConnectionTrackerForTesting(test_network_connection_tracker_.get()); + SetNetworkConnectionTrackerForTesting( + network::TestNetworkConnectionTracker::GetInstance()); notification_service_.reset(new NotificationServiceImpl());
diff --git a/content/renderer/manifest/manifest_manager.cc b/content/renderer/manifest/manifest_manager.cc index 9e83891a..39fcec66 100644 --- a/content/renderer/manifest/manifest_manager.cc +++ b/content/renderer/manifest/manifest_manager.cc
@@ -95,9 +95,8 @@ manifest_debug_info_ = nullptr; } -void ManifestManager::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { +void ManifestManager::DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) { if (is_same_document_navigation) return;
diff --git a/content/renderer/manifest/manifest_manager.h b/content/renderer/manifest/manifest_manager.h index 67d2d374..5836e41 100644 --- a/content/renderer/manifest/manifest_manager.h +++ b/content/renderer/manifest/manifest_manager.h
@@ -42,8 +42,8 @@ // RenderFrameObserver implementation. void DidChangeManifest() override; - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; void BindToRequest(blink::mojom::ManifestManagerRequest request);
diff --git a/content/renderer/media/audio/audio_renderer_sink_cache_impl.cc b/content/renderer/media/audio/audio_renderer_sink_cache_impl.cc index 9a8988784..8247f96 100644 --- a/content/renderer/media/audio/audio_renderer_sink_cache_impl.cc +++ b/content/renderer/media/audio/audio_renderer_sink_cache_impl.cc
@@ -35,8 +35,8 @@ private: // content::RenderFrameObserver implementation: - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override { + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override { if (!is_same_document_navigation) DropFrameCache(); }
diff --git a/content/renderer/navigation_state_impl.h b/content/renderer/navigation_state_impl.h index 9b3628b9..20e66fa9 100644 --- a/content/renderer/navigation_state_impl.h +++ b/content/renderer/navigation_state_impl.h
@@ -28,10 +28,15 @@ static NavigationStateImpl* CreateContentInitiated(); - // NavigationState implementation. - ui::PageTransition GetTransitionType() override; - bool WasWithinSameDocument() override; - bool IsContentInitiated() override; + // Contains the transition type that the browser specified when it + // initiated the load. + ui::PageTransition GetTransitionType(); + + // True iff the frame's navigation was within the same document. + bool WasWithinSameDocument(); + + // True if this navigation was not initiated via WebFrame::LoadRequest. + bool IsContentInitiated(); const CommonNavigationParams& common_params() const { return common_params_; } const RequestNavigationParams& request_params() const {
diff --git a/content/renderer/pepper/plugin_power_saver_helper.cc b/content/renderer/pepper/plugin_power_saver_helper.cc index b16d1e1..7b5c4db 100644 --- a/content/renderer/pepper/plugin_power_saver_helper.cc +++ b/content/renderer/pepper/plugin_power_saver_helper.cc
@@ -48,8 +48,8 @@ } void PluginPowerSaverHelper::DidCommitProvisionalLoad( - bool is_new_navigation, - bool is_same_document_navigation) { + bool is_same_document_navigation, + ui::PageTransition transition) { blink::WebFrame* frame = render_frame()->GetWebFrame(); // Only apply to top-level and new page navigation. if (frame->Parent() || is_same_document_navigation)
diff --git a/content/renderer/pepper/plugin_power_saver_helper.h b/content/renderer/pepper/plugin_power_saver_helper.h index b89e911..e178201b 100644 --- a/content/renderer/pepper/plugin_power_saver_helper.h +++ b/content/renderer/pepper/plugin_power_saver_helper.h
@@ -50,8 +50,8 @@ void WhitelistContentOrigin(const url::Origin& content_origin); // RenderFrameObserver implementation. - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override; + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override; bool OnMessageReceived(const IPC::Message& message) override; void OnDestruct() override;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index c25bfd48..a3ff3c5b 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -4100,8 +4100,10 @@ navigation_state->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME); } - for (auto& observer : observers_) - observer.DidStartProvisionalLoad(document_loader); + for (auto& observer : observers_) { + observer.DidStartProvisionalLoad(document_loader, + navigation_state->IsContentInitiated()); + } } void RenderFrameImpl::DidFailProvisionalLoad( @@ -5606,12 +5608,14 @@ return is_new_navigation; } -void RenderFrameImpl::NotifyObserversOfNavigationCommit(bool is_new_navigation, - bool is_same_document) { +void RenderFrameImpl::NotifyObserversOfNavigationCommit( + bool is_new_navigation, + bool is_same_document, + ui::PageTransition transition) { for (auto& observer : render_view_->observers_) observer.DidCommitProvisionalLoad(frame_, is_new_navigation); for (auto& observer : observers_) - observer.DidCommitProvisionalLoad(is_new_navigation, is_same_document); + observer.DidCommitProvisionalLoad(is_same_document, transition); } void RenderFrameImpl::UpdateStateForCommit( @@ -5630,7 +5634,8 @@ bool is_new_navigation = UpdateNavigationHistory(item, commit_type); NotifyObserversOfNavigationCommit(is_new_navigation, - navigation_state->WasWithinSameDocument()); + navigation_state->WasWithinSameDocument(), + navigation_state->GetTransitionType()); if (internal_data->must_reset_scroll_and_scale_state()) { render_view_->webview()->ResetScrollAndScaleState();
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 2f393e6..5279061 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -1244,7 +1244,8 @@ // Notify render_view_ observers that a commit happened. void NotifyObserversOfNavigationCommit(bool is_new_navigation, - bool is_same_document); + bool is_same_document, + ui::PageTransition transition); // Updates the internal state following a navigation commit. This should be // called before notifying the FrameHost of the commit.
diff --git a/content/renderer/render_frame_impl_browsertest.cc b/content/renderer/render_frame_impl_browsertest.cc index bf2e07d..2ae1d127 100644 --- a/content/renderer/render_frame_impl_browsertest.cc +++ b/content/renderer/render_frame_impl_browsertest.cc
@@ -821,13 +821,13 @@ RequestTestInterfaceOnFrameEvent(kFrameEventWillCommitProvisionalLoad); } - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override {} + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override {} void DidFailProvisionalLoad(const blink::WebURLError& error) override {} - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override { + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override { RequestTestInterfaceOnFrameEvent(is_same_document_navigation ? kFrameEventDidCommitSameDocumentLoad : kFrameEventDidCommitProvisionalLoad); @@ -852,8 +852,8 @@ // RenderFrameObserver: void OnDestruct() override {} - void DidCommitProvisionalLoad(bool is_new_navigation, - bool is_same_document_navigation) override { + void DidCommitProvisionalLoad(bool is_same_document_navigation, + ui::PageTransition transition) override { did_commit_ = true; run_loop_.Quit(); }
diff --git a/content/renderer/service_worker/service_worker_subresource_loader.cc b/content/renderer/service_worker/service_worker_subresource_loader.cc index 8459e78..0b8cfb84 100644 --- a/content/renderer/service_worker/service_worker_subresource_loader.cc +++ b/content/renderer/service_worker/service_worker_subresource_loader.cc
@@ -471,6 +471,7 @@ DCHECK(response->blob->blob.is_valid()); body_as_blob_.Bind(std::move(response->blob->blob)); + body_as_blob_size_ = response->blob->size; // If parallel reading is enabled, then start reading the body blob // immediately. This will allow the body to start buffering in the
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn index 9df50e2..46e73b5 100644 --- a/content/shell/BUILD.gn +++ b/content/shell/BUILD.gn
@@ -450,6 +450,8 @@ } grit("content_shell_resources_grit") { + testonly = true + # External code should depend on ":resources" instead. visibility = [ ":*" ] source = "shell_resources.grd" @@ -470,6 +472,8 @@ } copy("copy_shell_resources") { + testonly = true + sources = [ "$target_gen_dir/shell_resources.pak", ] @@ -483,6 +487,8 @@ } group("resources") { + testonly = true + public_deps = [ ":copy_shell_resources", ] @@ -495,6 +501,8 @@ } repack("pak") { + testonly = true + sources = [ "$root_gen_dir/content/app/resources/content_resources_100_percent.pak", "$root_gen_dir/content/app/strings/content_strings_en-US.pak", @@ -664,6 +672,7 @@ } bundle_data("content_shell_framework_resources") { + testonly = true sources = [ "$root_out_dir/content_shell.pak", "resources/missingImage.png", @@ -908,6 +917,8 @@ } service_manifest("content_shell_packaged_services_manifest_overlay") { + testonly = true + source = "//content/shell/browser/content_shell_packaged_services_manifest_overlay.json" packaged_services = [ "//services/test/echo:manifest" ] }
diff --git a/content/shell/android/BUILD.gn b/content/shell/android/BUILD.gn index 2033406..4babaa6 100644 --- a/content/shell/android/BUILD.gn +++ b/content/shell/android/BUILD.gn
@@ -150,6 +150,7 @@ } android_assets("content_shell_assets") { + testonly = true sources = [ "$root_out_dir/content_shell.pak", ]
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py index e6a2f49a..782e58f 100644 --- a/content/test/gpu/gpu_tests/pixel_expectations.py +++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -130,6 +130,3 @@ self.Fail('Pixel_CanvasLowLatencyWebGL', ['android', 'nvidia'], bug=868596) self.Fail('Pixel_OffscreenCanvasWebGLPaintAfterResize', ['android', 'nvidia'], bug=868596) - - # TODO(vikassoni): Suppress new test first time to generate reference image. - self.Fail('Pixel_BackgroundImage', bug=883500)
diff --git a/content/test/gpu/run_gpu_integration_test.py b/content/test/gpu/run_gpu_integration_test.py index 87e562b..00ed2d2 100755 --- a/content/test/gpu/run_gpu_integration_test.py +++ b/content/test/gpu/run_gpu_integration_test.py
@@ -25,7 +25,25 @@ with open(file_name, 'w') as f: json.dump(test_result, f, indent=2) +def FailIfScreenLockedOnMac(): + # Detect if the Mac lockscreen is present, which causes issues when running + # tests. + if not sys.platform.startswith('darwin'): + return + import Quartz + current_session = Quartz.CGSessionCopyCurrentDictionary() + if not current_session: + # Using the logging module doesn't seem to be guaranteed to show up in + # stdout, so use print instead. + print ('WARNING: Unable to obtain CGSessionCoppyCurrentDictionary via ' + 'Quartz - unable to determine whether Mac lockscreen is present or ' + 'not.') + return + if current_session.get('CGSSessionScreenIsLocked'): + raise RuntimeError('Mac lockscreen detected, aborting.') + def main(): + FailIfScreenLockedOnMac() rest_args = sys.argv[1:] parser = argparse.ArgumentParser(description='Extra argument parser', add_help=False)
diff --git a/device/vr/BUILD.gn b/device/vr/BUILD.gn index a808226..7a50872 100644 --- a/device/vr/BUILD.gn +++ b/device/vr/BUILD.gn
@@ -212,6 +212,7 @@ deps = [ "//base", + "//device/vr/public/mojom:test_mojom", ] } }
diff --git a/device/vr/buildflags/buildflags.gni b/device/vr/buildflags/buildflags.gni index 13f05de..7f91ac2 100644 --- a/device/vr/buildflags/buildflags.gni +++ b/device/vr/buildflags/buildflags.gni
@@ -54,7 +54,5 @@ # When enabled, host Desktop VR devices (OpenVR and Oculus) in a separate # process. When disabled, and Oculus/OpenVR are enabled, they are hosted # in the browser process. - # TODO(billorr): Enable by default when OpenVR or Oculus are enabled after - # tests and controllers are working with the isolated process. - enable_isolated_xr_service = false + enable_isolated_xr_service = enable_oculus_vr || enable_openvr }
diff --git a/device/vr/openvr/openvr_api_wrapper.cc b/device/vr/openvr/openvr_api_wrapper.cc index 98160a83..61de317 100644 --- a/device/vr/openvr/openvr_api_wrapper.cc +++ b/device/vr/openvr/openvr_api_wrapper.cc
@@ -72,6 +72,7 @@ vr::VR_GetGenericInterface(kChromeOpenVRTestHookAPI, &eError)); if (test_hook_registration_) { test_hook_registration_->SetTestHook(test_hook_); + test_hook_->AttachCurrentThread(); } } @@ -85,6 +86,8 @@ compositor_ = nullptr; test_hook_registration_ = nullptr; current_task_runner_ = nullptr; + if (test_hook_) + test_hook_->DetachCurrentThread(); vr::VR_Shutdown(); any_initialized_ = false;
diff --git a/device/vr/openvr/openvr_api_wrapper.h b/device/vr/openvr/openvr_api_wrapper.h index 72751df..7ee97958 100644 --- a/device/vr/openvr/openvr_api_wrapper.h +++ b/device/vr/openvr/openvr_api_wrapper.h
@@ -6,6 +6,7 @@ #define DEVICE_VR_OPENVR_OPENVR_API_WRAPPER_H_ #include "base/memory/scoped_refptr.h" +#include "device/vr/vr_export.h" #include "third_party/openvr/src/headers/openvr.h" namespace base { @@ -28,7 +29,7 @@ vr::IVRCompositor* GetCompositor(); vr::IVRSystem* GetSystem(); - static void SetTestHook(OpenVRTestHook* hook); + static void DEVICE_VR_EXPORT SetTestHook(OpenVRTestHook* hook); private: bool Initialize(bool for_rendering);
diff --git a/device/vr/openvr/test/fake_openvr_impl_api.cc b/device/vr/openvr/test/fake_openvr_impl_api.cc index fe9b975..3850741 100644 --- a/device/vr/openvr/test/fake_openvr_impl_api.cc +++ b/device/vr/openvr/test/fake_openvr_impl_api.cc
@@ -528,7 +528,7 @@ } switch (prop) { case Prop_UserIpdMeters_Float: - return g_test_helper.GetIpd(); + return g_test_helper.GetInterpupillaryDistance(); default: NOTIMPLEMENTED(); }
diff --git a/device/vr/openvr/test/test_helper.cc b/device/vr/openvr/test/test_helper.cc index d36c428..381297f 100644 --- a/device/vr/openvr/test/test_helper.cc +++ b/device/vr/openvr/test/test_helper.cc
@@ -113,12 +113,12 @@ } // namespace -float TestHelper::GetIpd() { +float TestHelper::GetInterpupillaryDistance() { lock_.Acquire(); if (test_hook_) { auto config = test_hook_->WaitGetDeviceConfig(); lock_.Release(); - return config.ipd; + return config.interpupillary_distance; } lock_.Release(); return 0.1f;
diff --git a/device/vr/openvr/test/test_helper.h b/device/vr/openvr/test/test_helper.h index 43a8234..69b9a53 100644 --- a/device/vr/openvr/test/test_helper.h +++ b/device/vr/openvr/test/test_helper.h
@@ -24,10 +24,13 @@ const VRTextureBounds_t* bounds, EVREye eye); TrackedDevicePose_t GetPose(bool presenting); - float GetIpd(); + float GetInterpupillaryDistance(); ProjectionRaw GetProjectionRaw(bool left); void TestFailure(); + void AttachToCurrentThread(); + void DetachFromCurrentThread(); + // TestHookRegistration void SetTestHook(device::OpenVRTestHook* hook) final;
diff --git a/device/vr/openvr/test/test_hook.h b/device/vr/openvr/test/test_hook.h index 8d2a0f3..1aeb3528 100644 --- a/device/vr/openvr/test/test_hook.h +++ b/device/vr/openvr/test/test_hook.h
@@ -39,7 +39,7 @@ }; struct DeviceConfig { - float ipd; + float interpupillary_distance; float viewport_left[4]; // raw projection left {left, right, top, bottom} float viewport_right[4]; // raw projection right {left, right, top, bottom} }; @@ -51,6 +51,9 @@ virtual DeviceConfig WaitGetDeviceConfig() = 0; virtual PoseFrameData WaitGetPresentingPose() = 0; virtual PoseFrameData WaitGetMagicWindowPose() = 0; + + virtual void AttachCurrentThread() = 0; + virtual void DetachCurrentThread() = 0; }; class TestHookRegistration {
diff --git a/device/vr/public/mojom/BUILD.gn b/device/vr/public/mojom/BUILD.gn index a66e485..f3a25cb2 100644 --- a/device/vr/public/mojom/BUILD.gn +++ b/device/vr/public/mojom/BUILD.gn
@@ -22,3 +22,17 @@ "//ui/gfx/mojo:mojo", ] } + +mojom_component("test_mojom") { + output_prefix = "device_vr_test_mojo_bindings" + macro_prefix = "DEVICE_VR_TEST_MOJO_BINDINGS" + + sources = [ + "browser_test_interfaces.mojom", + ] + + public_deps = [ + "//ui/gfx/geometry/mojo", + "//ui/gfx/mojo:mojo", + ] +}
diff --git a/device/vr/public/mojom/README.md b/device/vr/public/mojom/README.md index ad481a1..3b621bb8 100644 --- a/device/vr/public/mojom/README.md +++ b/device/vr/public/mojom/README.md
@@ -82,3 +82,8 @@ The XRInput process may be the browser process or a separate process depending on the platform. + +# Test interfaces (defined in browser_test_interfaces.mojom) +XRTestHook allows a test to control the behavior of a fake implementation of +OpenVR, and potentially other runtimes. This allows testing the entire stack +of Chromium WebXR code end-to-end.
diff --git a/device/vr/public/mojom/browser_test_interfaces.mojom b/device/vr/public/mojom/browser_test_interfaces.mojom new file mode 100644 index 0000000..08a0070 --- /dev/null +++ b/device/vr/public/mojom/browser_test_interfaces.mojom
@@ -0,0 +1,66 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module device_test.mojom; + +import "ui/gfx/geometry/mojo/geometry.mojom"; +import "ui/gfx/mojo/transform.mojom"; + +struct Color { + uint8 r; + uint8 g; + uint8 b; + uint8 a; +}; + +enum Eye { + LEFT = 1, + RIGHT = 2 +}; + +struct SubmittedFrameData { + Color color; + + Eye eye; + + gfx.mojom.Rect viewport; + gfx.mojom.Size image_size; +}; + +struct PoseFrameData { + gfx.mojom.Transform? device_to_origin; +}; + +// Each component is the tangent of the up/down/left/right view frustum. +struct ProjectionRaw { + float left; + float right; + float top; + float bottom; +}; + +struct DeviceConfig { + float interpupillary_distance; // Distance between the eyes. + + ProjectionRaw projection_left; + ProjectionRaw projection_right; +}; + +// Tests may implement this, and register it to control behavior of devices for +// tests. The test interface lives in the browser process, and may be consumed +// by the device utility process. +// It is only implemented when running in browser tests. +interface XRTestHook { + [Sync] OnFrameSubmitted(SubmittedFrameData frame_data) => (); + [Sync] WaitGetDeviceConfig() => (DeviceConfig config); + [Sync] WaitGetPresentingPose() => (PoseFrameData data); + [Sync] WaitGetMagicWindowPose() => (PoseFrameData data); +}; + +// Interface exposed by IsolatedXRService to allow browser tests to hook VR APIs +// It is always hosted in the XRDevice process, but only has effects while +// running in browser tests with mock implementations of runtimes. +interface XRTestHookRegistration { + [Sync] SetTestHook(XRTestHook? hook) => (); +};
diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn index 4ca8b3b5..52e1d9ca 100644 --- a/extensions/BUILD.gn +++ b/extensions/BUILD.gn
@@ -161,6 +161,8 @@ } repack("shell_and_test_pak") { + testonly = true + sources = [ "$root_gen_dir/content/app/strings/content_strings_en-US.pak", "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index b7303a1..8ce8dc1 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1339,6 +1339,7 @@ WEBVIEWINTERNAL_SETSPATIALNAVIGATIONENABLED = 1276, WEBVIEWINTERNAL_ISSPATIALNAVIGATIONENABLED = 1277, FILEMANAGERPRIVATEINTERNAL_GETTHUMBNAIL = 1278, + FILEMANAGERPRIVATEINTERNAL_GETCROSTINISHAREDPATHS = 1279, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/browser/extension_service_worker_message_filter.cc b/extensions/browser/extension_service_worker_message_filter.cc index 98fa8bdf..6132c60 100644 --- a/extensions/browser/extension_service_worker_message_filter.cc +++ b/extensions/browser/extension_service_worker_message_filter.cc
@@ -22,12 +22,12 @@ browser_context_(context), render_process_id_(render_process_id), service_worker_context_(service_worker_context), - dispatcher_(new ExtensionFunctionDispatcher(context)) {} - -ExtensionServiceWorkerMessageFilter::~ExtensionServiceWorkerMessageFilter() { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + dispatcher_(new ExtensionFunctionDispatcher(context)) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); } +ExtensionServiceWorkerMessageFilter::~ExtensionServiceWorkerMessageFilter() {} + void ExtensionServiceWorkerMessageFilter::OverrideThreadForMessage( const IPC::Message& message, content::BrowserThread::ID* thread) {
diff --git a/extensions/browser/extensions_browser_client.cc b/extensions/browser/extensions_browser_client.cc index adf2c97..8658efe 100644 --- a/extensions/browser/extensions_browser_client.cc +++ b/extensions/browser/extensions_browser_client.cc
@@ -98,4 +98,8 @@ return nullptr; } +UserScriptListener* ExtensionsBrowserClient::GetUserScriptListener() { + return nullptr; +} + } // namespace extensions
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h index 7e0c178e..4afefce 100644 --- a/extensions/browser/extensions_browser_client.h +++ b/extensions/browser/extensions_browser_client.h
@@ -74,6 +74,7 @@ class ProcessManagerDelegate; class ProcessMap; class RuntimeAPIDelegate; +class UserScriptListener; // Interface to allow the extensions module to make browser-process-specific // queries of the embedder. Should be Set() once in the browser process. @@ -355,6 +356,8 @@ virtual network::mojom::NetworkContext* GetSystemNetworkContext(); + virtual UserScriptListener* GetUserScriptListener(); + private: std::vector<std::unique_ptr<ExtensionsBrowserAPIProvider>> providers_;
diff --git a/extensions/renderer/extension_frame_helper.cc b/extensions/renderer/extension_frame_helper.cc index 6732526..cd591a86 100644 --- a/extensions/renderer/extension_frame_helper.cc +++ b/extensions/renderer/extension_frame_helper.cc
@@ -318,7 +318,8 @@ } void ExtensionFrameHelper::DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) { + blink::WebDocumentLoader* document_loader, + bool is_content_initiated) { // New window created by chrome.app.window.create() must not start parsing the // document immediately. The chrome.app.window.create() callback (if any) // needs to be called prior to the new window's 'load' event. The parser will
diff --git a/extensions/renderer/extension_frame_helper.h b/extensions/renderer/extension_frame_helper.h index 770d20c..7c10468 100644 --- a/extensions/renderer/extension_frame_helper.h +++ b/extensions/renderer/extension_frame_helper.h
@@ -123,8 +123,8 @@ // RenderFrameObserver implementation. void DidCreateDocumentElement() override; void DidCreateNewDocument() override; - void DidStartProvisionalLoad( - blink::WebDocumentLoader* document_loader) override; + void DidStartProvisionalLoad(blink::WebDocumentLoader* document_loader, + bool is_content_initiated) override; void DidCreateScriptContext(v8::Local<v8::Context>, int world_id) override; void WillReleaseScriptContext(v8::Local<v8::Context>, int world_id) override;
diff --git a/extensions/strings/extensions_strings_bn.xtb b/extensions/strings/extensions_strings_bn.xtb index ea315e4..1b9f3df 100644 --- a/extensions/strings/extensions_strings_bn.xtb +++ b/extensions/strings/extensions_strings_bn.xtb
@@ -56,7 +56,7 @@ <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> এর থেকে অজানা পণ্য <ph name="PRODUCT_ID" /></translation> <translation id="7068383018033524534">ম্যানিফেস্ট ফাইলটি ভুল</translation> <translation id="7217838517480956708">এই মেশিনের প্রশাসকের <ph name="EXTENSION_NAME" /> ইনস্টল করার প্রয়োজন৷ এটি সরানো অথবা সংশোধন করা যাবে না৷</translation> -<translation id="7612608473764576263">ব্যক্তিগত কীয়ের জন্য ইনপুট করা মান সঠিক ফর্ম্যাটে হওয়া আবশ্যক (PKCS#8-format PEM-encoded RSA key)।</translation> +<translation id="7612608473764576263">'ব্যক্তিগত কী'-এর জন্য ইনপুট করা মান সঠিক ফর্ম্যাটে হওয়া আবশ্যক (PKCS#8-format PEM-encoded RSA key)।</translation> <translation id="7939686037314084444">এই এক্সটেনশনটি সঠিকভাবে লোড করা যায়নি। এটি নেটওয়ার্ক অনুরোধগুলি হয়ত আটকাতে পারেনি।</translation> <translation id="7972881773422714442">বিকল্পগুলি: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation> <translation id="8035920974645200807">ব্যবহারকারীর দিকে মুখ করা</translation>
diff --git a/extensions/strings/extensions_strings_mr.xtb b/extensions/strings/extensions_strings_mr.xtb index 95220e3..51442dd 100644 --- a/extensions/strings/extensions_strings_mr.xtb +++ b/extensions/strings/extensions_strings_mr.xtb
@@ -7,7 +7,7 @@ <translation id="1420684932347524586">अरेरे! यादृच्छिक RSA खासगी की व्युत्पन्न करण्यात अयशस्वी.</translation> <translation id="1445572445564823378">हे एक्स्टेंशन <ph name="PRODUCT_NAME" /> हळू चालत आहे. <ph name="PRODUCT_NAME" /> चे काम रिस्टोअर करण्यासाठी तुम्ही ते अक्षम करणे आवश्यक आहे.</translation> <translation id="1468038450257740950">WebGL समर्थित नाही.</translation> -<translation id="149347756975725155">विस्तार प्रतीक '<ph name="ICON" />' लोड करणे शक्य नाही.</translation> +<translation id="149347756975725155">एक्स्टेंशन आयकन '<ph name="ICON" />' लोड करणे शक्य नाही.</translation> <translation id="1803557475693955505">'पार्श्वभूमी पृष्ठ '<ph name="BACKGROUND_PAGE" />' लोड करणे शक्य नाही.</translation> <translation id="2159915644201199628">इमेज डीकोड करणे शक्य झाले नाही: '<ph name="IMAGE_NAME" />'</translation> <translation id="2350172092385603347">भाषांतर वापरले, परंतु मॅनिफेस्टमध्ये डीफॉल्ट_लोकॅल निर्दिष्ट नाही.</translation>
diff --git a/extensions/strings/extensions_strings_te.xtb b/extensions/strings/extensions_strings_te.xtb index 3426e31..adb6f09 100644 --- a/extensions/strings/extensions_strings_te.xtb +++ b/extensions/strings/extensions_strings_te.xtb
@@ -56,7 +56,7 @@ <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> నుండి తెలియని ఉత్పత్తి <ph name="PRODUCT_ID" /></translation> <translation id="7068383018033524534">మానిఫెస్ట్ ఫైల్ చెల్లదు</translation> <translation id="7217838517480956708">ఈ మెషీన్ యొక్క నిర్వాహకుడికి <ph name="EXTENSION_NAME" /> ఇన్స్టాల్ చేయబడి ఉండటం అవసరం. దీన్ని తీసివేయడం లేదా సవరించడం సాధ్యపడదు.</translation> -<translation id="7612608473764576263">ప్రైవేట్ కీ కోసం ఇన్పుట్ విలువ తప్పనిసరిగా చెల్లుబాటు అయ్యే ఫార్మాట్లో ఉండాలి. (PKCS#8-format PEM-encoded RSA కీ)</translation> +<translation id="7612608473764576263">ప్రైవేట్ కీ కోసం ఇన్పుట్ విలువ తప్పనిసరిగా చెల్లుబాటు అయ్యే ఫార్మాట్లో ఉండాలి. (PKCS#8-ఫార్మాట్లో, PEM-ఎన్కోడ్ చేసిన RSA కీ)</translation> <translation id="7939686037314084444">ఎక్స్టెన్షన్ సరిగా లోడ్ అవ్వడంలో విఫలం అయ్యింది. కనుక ఇది నెట్వర్క్ అభ్యర్థనలను అడ్డగించలేకపోవచ్చు.</translation> <translation id="7972881773422714442">ఎంపికలు: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation> <translation id="8035920974645200807">వినియోగదారు వైపుగా</translation>
diff --git a/gpu/command_buffer/service/raster_decoder.cc b/gpu/command_buffer/service/raster_decoder.cc index 46e20f0f..a7c9c005 100644 --- a/gpu/command_buffer/service/raster_decoder.cc +++ b/gpu/command_buffer/service/raster_decoder.cc
@@ -3198,8 +3198,7 @@ cc::PaintOpBuffer::PaintOpAlign) char data[sizeof(cc::LargestPaintOp)]; SkCanvas* canvas = raster_canvas_.get(); - SkMatrix original_ctm; - cc::PlaybackParams playback_params(nullptr, original_ctm); + cc::PlaybackParams playback_params(nullptr, SkMatrix::I()); TransferCacheDeserializeHelperImpl impl(raster_decoder_id_, transfer_cache()); cc::PaintOp::DeserializeOptions options(&impl, font_manager_->strike_client());
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json index d208340..0366e85 100644 --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json
@@ -2930,11 +2930,7 @@ "cr_bugs": [866613], "description": "Frequent crashes on Adreno (TM) on L and below", "os": { - "type": "android", - "version": { - "op": "<", - "value": "6.0" - } + "type": "android" }, "gl_renderer": "Adreno.*", "features": [
diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json index 10b6288..cb6118b 100644 --- a/gpu/config/software_rendering_list.json +++ b/gpu/config/software_rendering_list.json
@@ -280,18 +280,14 @@ }, { "id": 30, - "description": "NVIDIA cards with nouveau drivers in Linux are crash-prone", - "cr_bugs": [94103], + "description": "NVIDIA cards with nouveau drivers in Linux are unstable", + "cr_bugs": [94103, 876523], "os": { "type": "linux" }, "vendor_id": "0x10de", "gl_vendor": "(?i)nouveau.*", "driver_vendor": "Mesa", - "driver_version": { - "op": "<", - "value": "10.1" - }, "features": [ "all" ] @@ -1362,7 +1358,7 @@ }, { "id": 137, - "description": "GPU rasterization on CrOS is blacklisted on anything but Intel or Mali GPUs for now.", + "description": "GPU rasterization on CrOS is blacklisted on anything but Intel, Mali or Imagination GPUs for now.", "cr_bugs": [684094], "os": { "type": "chromeos" @@ -1372,7 +1368,8 @@ ], "exceptions": [ { "vendor_id": "0x8086" }, - { "gl_renderer": "Mali-T.*" } + { "gl_renderer": "Mali-T.*" }, + { "gl_renderer": "PowerVR.*" } ] }, {
diff --git a/gpu/ipc/client/gpu_in_process_context_tests.cc b/gpu/ipc/client/gpu_in_process_context_tests.cc index f5bd950..4f6891e 100644 --- a/gpu/ipc/client/gpu_in_process_context_tests.cc +++ b/gpu/ipc/client/gpu_in_process_context_tests.cc
@@ -42,7 +42,6 @@ gpu::kNullSurfaceHandle, /* window */ attributes, gpu::SharedMemoryLimits(), gpu_memory_buffer_manager_.get(), nullptr, /* image_factory */ - nullptr /* gpu_channel_manager_delegate */, base::ThreadTaskRunnerHandle::Get()); DCHECK_EQ(result, gpu::ContextResult::kSuccess); return context;
diff --git a/gpu/ipc/gl_in_process_context.cc b/gpu/ipc/gl_in_process_context.cc index 6a23e5a..0c1509d 100644 --- a/gpu/ipc/gl_in_process_context.cc +++ b/gpu/ipc/gl_in_process_context.cc
@@ -48,19 +48,6 @@ return gles2_implementation_.get(); } -CommandBuffer* GLInProcessContext::GetCommandBuffer() { - return command_buffer_.get(); -} - -SharedImageInterface* GLInProcessContext::GetSharedImageInterface() { - return command_buffer_->GetSharedImageInterface(); -} - -void GLInProcessContext::SetUpdateVSyncParametersCallback( - const InProcessCommandBuffer::UpdateVSyncParametersCallback& callback) { - command_buffer_->SetUpdateVSyncParametersCallback(callback); -} - ContextResult GLInProcessContext::Initialize( scoped_refptr<CommandBufferTaskExecutor> task_executor, scoped_refptr<gl::GLSurface> surface, @@ -70,7 +57,6 @@ const SharedMemoryLimits& mem_limits, GpuMemoryBufferManager* gpu_memory_buffer_manager, ImageFactory* image_factory, - GpuChannelManagerDelegate* gpu_channel_manager_delegate, scoped_refptr<base::SingleThreadTaskRunner> task_runner) { // If a surface is provided, we are running in a webview and should not have // a task runner. We must have a task runner in all other cases. @@ -87,8 +73,9 @@ auto result = command_buffer_->Initialize( surface, is_offscreen, window, attribs, /*share_command_buffer=*/nullptr, - gpu_memory_buffer_manager, image_factory, gpu_channel_manager_delegate, - std::move(task_runner), nullptr, nullptr); + gpu_memory_buffer_manager, image_factory, + /*gpu_channel_manager_delegate=*/nullptr, std::move(task_runner), nullptr, + nullptr); if (result != ContextResult::kSuccess) { DLOG(ERROR) << "Failed to initialize InProcessCommmandBuffer"; return result;
diff --git a/gpu/ipc/gl_in_process_context.h b/gpu/ipc/gl_in_process_context.h index 923af56a..ac406d1 100644 --- a/gpu/ipc/gl_in_process_context.h +++ b/gpu/ipc/gl_in_process_context.h
@@ -16,7 +16,6 @@ #include "ui/gl/gl_surface.h" namespace gpu { -class SharedImageInterface; class TransferBuffer; struct GpuFeatureInfo; struct SharedMemoryLimits; @@ -41,7 +40,6 @@ // service must run on the same thread as this client because GLSurface is // not thread safe. If |surface| is null, then the other parameters are used // to correctly create a surface. - // |gpu_channel_manager| should be non-null when used in the GPU process. ContextResult Initialize( scoped_refptr<CommandBufferTaskExecutor> task_executor, scoped_refptr<gl::GLSurface> surface, @@ -51,7 +49,6 @@ const SharedMemoryLimits& memory_limits, GpuMemoryBufferManager* gpu_memory_buffer_manager, ImageFactory* image_factory, - GpuChannelManagerDelegate* gpu_channel_manager_delegate, scoped_refptr<base::SingleThreadTaskRunner> task_runner); const Capabilities& GetCapabilities() const; @@ -61,13 +58,6 @@ // can be used without making it current. gles2::GLES2Implementation* GetImplementation(); - CommandBuffer* GetCommandBuffer(); - - SharedImageInterface* GetSharedImageInterface(); - - void SetUpdateVSyncParametersCallback( - const InProcessCommandBuffer::UpdateVSyncParametersCallback& callback); - private: // The destruction order is important, don't reorder these member variables. std::unique_ptr<InProcessCommandBuffer> command_buffer_;
diff --git a/gpu/vulkan/vulkan_surface.h b/gpu/vulkan/vulkan_surface.h index 610c17ff..8329fcd 100644 --- a/gpu/vulkan/vulkan_surface.h +++ b/gpu/vulkan/vulkan_surface.h
@@ -45,6 +45,7 @@ bool SetSize(const gfx::Size& size); const gfx::Size& size() const { return size_; } + VkSurfaceFormatKHR surface_format() const { return surface_format_; } private: const VkInstance vk_instance_;
diff --git a/gpu/vulkan/vulkan_swap_chain.h b/gpu/vulkan/vulkan_swap_chain.h index a361b07..1823af7c 100644 --- a/gpu/vulkan/vulkan_swap_chain.h +++ b/gpu/vulkan/vulkan_swap_chain.h
@@ -20,7 +20,7 @@ class VulkanCommandPool; class VulkanDeviceQueue; -class VulkanSwapChain { +class VULKAN_EXPORT VulkanSwapChain { public: VulkanSwapChain(); ~VulkanSwapChain(); @@ -43,6 +43,11 @@ return images_[current_image_]->pre_raster_command_buffer.get(); } + VkImage GetImage(uint32_t index) const { + DCHECK_LT(index, images_.size()); + return images_[index]->image; + } + VkImage GetCurrentImage() const { DCHECK_LT(current_image_, images_.size()); return images_[current_image_]->image;
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb index 2deda0b..793e873 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -11,7 +11,7 @@ <translation id="1843424232666537147">Chromium कडे अशी वैशिष्ट्ये आहेत जी आपल्याला आपला इंटरनेट डेटा आणि आपण किती द्रुतपणे वेबपृष्ठे लोड करण्यात सक्षम आहात हे व्यवस्थापित करण्यास मदत करतात. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="2075400798887076382">आपण आपल्या संगणकावर उघडलेल्या टॅबमध्ये, थेट येथून प्रवेश करा. आपल्या संगणकावर फक्त Chromium उघडा, मेनूवर जा आणि "Chromium वर साइन इन करा…" निवडा</translation> -<translation id="2168108852149185974">Chromium क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation> +<translation id="2168108852149185974">काही अॅड-ऑनमुळे Chromium क्रॅश होते. कृपया ती अनइंस्टॉल करा:</translation> <translation id="2178608107313874732">Chromium आत्ता आपला कॅमेरा वापरू शकत नाही</translation> <translation id="2195025571279539885">Chromium ने या साइटवरून पुढील वेळी <ph name="LANGUAGE_NAME" /> पेज भाषांतरित करण्याची ऑफर द्यावी असे आपण इच्छिता?</translation> <translation id="2647554856022461007">Chromium तुमचा ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> @@ -42,7 +42,7 @@ <translation id="6626296268883197964">हे अॅप्लिकेशन वापरून, तुम्ही Chromium च्या <ph name="BEGIN_LINK_TOS" />सेवा अटी<ph name="END_LINK_TOS" /> आणि <ph name="BEGIN_LINK_PRIVACY" />गोपनीयता सूचनां<ph name="END_LINK_PRIVACY" /> शी सहमत होता.</translation> <translation id="7099326575020694068">Chromium विभाजित दृश्य मोड मध्ये आपला कॅमेरा वापरू शकत नाही</translation> <translation id="7208566199746267865">तुमची खाती वेबवर आणून Chromium तुमचा वेळ वाचविते. तुम्ही सेटिंग्जमध्ये खाती जोडू किंवा काढू शकता.</translation> -<translation id="7269362888766543920">Chromium क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ते अनइंस्टॉल करून पहा.</translation> +<translation id="7269362888766543920">काही अॅड-ऑनमुळे Chromium क्रॅश होते. कृपया ते अनइंस्टॉल करून पहा.</translation> <translation id="7337881442233988129">Chromium</translation> <translation id="7357211569052832586">निवडलेला डेटा Chromium आणि संकालित केलेल्या डिव्हाइस मधून काढला गेला आहे. आपल्या Google खात्यामध्ये history.google.com येथे Google च्या इतर सेवांमधील शोध आणि क्रियाकलाप यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे असू शकतात.</translation> <translation id="7400689562045506105">Chromium सर्वत्र वापरा</translation> @@ -52,10 +52,10 @@ <translation id="786327964234957808">आपण संकालित केलेली खाती <ph name="USER_EMAIL1" /> वरून <ph name="USER_EMAIL2" /> वर स्विच करीत आहात. आपला विद्यमान Chromium डेटा <ph name="DOMAIN" /> द्वारे व्यवस्थापित केला आहे. हे आपला डेटा या डिव्हाइस वरून हटवेल परंतु आपला डेटा <ph name="USER_EMAIL1" /> मध्ये असेल.</translation> <translation id="8175055321229419309">टीप: <ph name="BEGIN_LINK" />Chromium आपल्या डॉकमध्ये हलवा<ph name="END_LINK" /></translation> <translation id="8252885722420466166">आपल्या स्थानावर आधारित Chromium मध्ये उत्कृष्ट Google अनुभव मिळवा.</translation> -<translation id="8353224596138547809">आपण या साइटसाठी Chromium ने आपला पासवर्ड सेव्ह करू इच्छिता?</translation> +<translation id="8353224596138547809">या साइटसाठी Chromium ने तुमचा पासवर्ड सेव्ह करावा का?</translation> <translation id="8508544542427105412"><ph name="BEGIN_LINK" />सेटिंग्ज<ph name="END_LINK" /> कधीही कस्टमाइझ केली जाऊ शकतात. Chromium आणि भाषांतर, शोध आणि जाहिरातींसारख्या Google सेवा पर्सनलाइझ करण्यासाठी Google तुम्ही भेट देत असलेल्या साइटवरील आशय, ब्राउझर परस्परसंवाद आणि अॅक्टिव्हिटी वापरू शकते.</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium लेखक. सर्व हक्क राखीव.</translation> -<translation id="8809780021347235332">इमेज सेव्ह करण्यासाठी, Chromium ला आपले फोटो वापरू देण्यासाठी सेटिंग्जवर टॅप करा</translation> +<translation id="8809780021347235332">इमेज सेव्ह करण्यासाठी, Chromium ला तुमचे फोटो वापरू देण्यासाठी सेटिंग्जवर टॅप करा</translation> <translation id="9022552996538154597">Chromium वर साइन इन करा</translation> <translation id="985602178874221306">Chromium लेखक</translation> </translationbundle> \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb index 8c87ea9..922c9ec 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
@@ -12,7 +12,7 @@ <translation id="2342981853652716282">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड आणि अधिक मिळवण्यासाठी Chromeमध्ये साइन इन करा.</translation> <translation id="2347208864470321755">हे वैशिष्ट्य चालू असते तेव्हा, Google Translate चा वापर करून Chrome इतर भाषांमध्ये लिहिलेल्या पृष्ठांचे भाषांतर करण्यासाठी ऑफर करेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="2436117022029368436">ब्राउझिंग आणि Chrome मध्ये सुधारणा करण्यासाठी Google शी संवाद साधते</translation> -<translation id="2441696206556358796">इमेज सेव्ह करण्यासाठी, Chrome ला आपले फोटो वापरू देण्यासाठी सेटिंग्जवर टॅप करा</translation> +<translation id="2441696206556358796">इमेज सेव्ह करण्यासाठी, Chrome ला तुमचे फोटो वापरू देण्यासाठी सेटिंग्जवर टॅप करा</translation> <translation id="2576431527583832481">Chrome आता आणखी सर्वोत्तम झाले आहे! नवीन आवृत्ती उपलब्ध आहे.</translation> <translation id="257708665678654955">पुढील वेळी Google Chrome ने या साइटवरील <ph name="LANGUAGE_NAME" /> पृष्ठांचे भाषांतर करण्याची ऑफर द्यावी असे आपण इच्छिता?</translation> <translation id="2943166482989655199">Google ला सिस्टम आणि वापर डेटा पाठवून Chrome आणि त्याच्या सुरक्षिततेत सुधारणा करा</translation> @@ -22,7 +22,7 @@ <translation id="3196546062792660320">तुमची खाती वेबवर आणून Chrome तुमचा वेळ वाचविते. तुम्ही सेटिंग्जमध्ये खाती जोडू किंवा काढू शकता.</translation> <translation id="3282568296779691940">Chrome वर साइन इन करा</translation> <translation id="3345341804167540816">Chrome सर्वत्र वापरा</translation> -<translation id="3678774398092457402">Chrome ने या साइटसाठी आपला पासवर्ड सेव्ह करावा असे आपण इच्छिता?</translation> +<translation id="3678774398092457402">Chrome ने या साइटसाठी तुमचा पासवर्ड सेव्ह केलेला चालेल?</translation> <translation id="384394811301901750">Google Chrome आत्ता आपला कॅमेरा वापरू शकत नाही</translation> <translation id="3870154837782082782">Google Inc.</translation> <translation id="3980220367029651214">आपण संकालित केलेली खाती <ph name="USER_EMAIL1" /> वरून <ph name="USER_EMAIL2" /> वर स्विच करीत आहात. आपला विद्यमान Chrome डेटा <ph name="DOMAIN" /> द्वारे व्यवस्थापित केला आहे. हे आपला डेटा या डिव्हाइस वरून हटवेल परंतु आपला डेटा <ph name="USER_EMAIL1" /> मध्ये असेल.</translation> @@ -31,7 +31,7 @@ <translation id="415767770115540173">आपल्या स्थानावर आधारित Chrome मध्ये उत्कृष्ट Google अनुभव मिळवा.</translation> <translation id="424864128008805179">Chrome मधून साइन आउट करायचे?</translation> <translation id="447252321002412580">Chrome ची वैशिष्ट्ये आणि परफॉर्मन्स सुधारण्यात मदत करा</translation> -<translation id="4523886039239821078">Chrome क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation> +<translation id="4523886039239821078">काही अॅड-ऑनमुळे Chrome क्रॅश होऊ शकते. कृपया ते अनइंस्टॉल करा.</translation> <translation id="4615174829807303908"><ph name="SIGNOUT_MANAGED_DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यामधून आपण साइन आउट करीत आहात. हे आपला Chrome डेटा या डिव्हाइस वरून हटवेल परंतु आपला डेटा आपल्या Google खात्यामध्ये असेल.</translation> <translation id="5240817131241497236">Chrome मध्ये सिंक, पर्सनलायझेशन आणि इतर Google सेवा नियंत्रित करणारी सेटिंग्ज बदलली आहेत. याचा तुमच्या सद्य सेटिंग्जवर परिणाम होऊ शकतो.</translation> <translation id="5389212809648216794">Google Chrome तुमचा कॅमेरा वापरू शकत नाही कारण दुसरे अॅप्स सध्या तो वापरत आहे.</translation> @@ -55,7 +55,7 @@ <translation id="7437998757836447326">Chrome मधून साइन आउट करा</translation> <translation id="756809126120519699">Chrome डेटा साफ केला</translation> <translation id="7626032353295482388">Chrome मध्ये स्वागत आहे</translation> -<translation id="840168496893712993">Chrome क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ते अनइंस्टॉल करून पहा.</translation> +<translation id="840168496893712993">काही अॅड-ऑनमुळे Chrome क्रॅश होऊ शकते. कृपया ते अनइंस्टॉल करून पहा.</translation> <translation id="8459495907675268833">निवडलेला डेटा Chrome आणि संकालित केलेल्या डिव्हाइसेस मधून काढला गेला आहे. आपल्या Google खात्यामध्ये history.google.com येथे Google च्या इतर सेवांमधील शोध आणि क्रियाकलाप यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे असू शकतात.</translation> <translation id="8540666473246803645">Google Chrome</translation> <translation id="8606668294522778825">Google Chrome तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी वेब सेवा वापरू शकते. तुमच्याकडे या सेवा बंद करण्याचा पर्याय आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb index d98aa2a..3e4e537 100644 --- a/ios/chrome/app/strings/resources/ios_strings_am.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">ከሚተዳደር መለያ ዘግግተህ ውጣ</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">የብልሽት ሪፖርት ተልኳል።</translation> -<translation id="932327136139879170">መነሻ</translation> <translation id="935490618240037774">የእርስዎን ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች በሁሉም መሣሪያዎችዎ ላይ መጠቀም እንዲችሉ ከGoogle መለያዎ ጋር ይሰምራሉ።</translation> <translation id="939598580284253335">የይለፍ ሐረግ ያስገቡ</translation> <translation id="976982866697960176">የሠመረ ውሂብን ያቀናብሩ…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb index 739c23b..d54b9a8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">تسجيل الخروج من الحساب المُدار</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">تم إرسال تقرير الأعطال.</translation> -<translation id="932327136139879170">الصفحة الرئيسية</translation> <translation id="935490618240037774">ستتم مزامنة الإشارات المرجعية، والسجل، وكلمات المرور، والإعدادات الأخرى مع حسابك في Google لكي يتسنّى لك استخدامها على جميع أجهزتك.</translation> <translation id="939598580284253335">إدخال عبارة المرور</translation> <translation id="976982866697960176">إدارة البيانات المتزامنة...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb index fb08823f..92daf97d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Излизане от управляван профил</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Сигналите за сривове са изпратени.</translation> -<translation id="932327136139879170">Начална страница</translation> <translation id="935490618240037774">Вашите отметки, история, пароли и други настройки ще се синхронизират с профила ви в Google, за да можете да ги използвате на всичките си устройства.</translation> <translation id="939598580284253335">Въведете пропуск</translation> <translation id="976982866697960176">Управление на синхронизираните данни…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb index a060e70..c807772 100644 --- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -476,7 +476,6 @@ <translation id="9188680907066685419">পরিচালিত অ্যাকাউন্ট থেকে প্রস্থান করুন</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">ক্র্যাশ প্রতিবেদন পাঠানো হয়েছে৷</translation> -<translation id="932327136139879170">হোম</translation> <translation id="935490618240037774">আপনার বুকমার্ক, ইতিহাস এবং অন্যান্য সেটিংস আপনার Google অ্যাকাউন্টে সিঙ্ক হবে যাতে আপনি আপনার সমস্ত ডিভাইসে সেগুলি ব্যবহার করতে পারেন।</translation> <translation id="939598580284253335">পাসফ্রেজ প্রবেশ করান</translation> <translation id="976982866697960176">সিঙ্ক হওয়া ডেটা পরিচালনা করুন...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 2929698..3a8c511 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Tanqueu la sessió del compte gestionat</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">L'informe d'error s'ha enviat.</translation> -<translation id="932327136139879170">Inici</translation> <translation id="935490618240037774">Les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració se sincronitzaran amb el teu compte de Google, perquè els puguis utilitzar en tots els dispositius</translation> <translation id="939598580284253335">Introduïu la frase de contrasenya</translation> <translation id="976982866697960176">Gestioneu les dades sincronitzades…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index 980cfbd..93fc07c 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Odhlásit se ze spravovaného účtu</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Zpráva o selhání byla odeslána.</translation> -<translation id="932327136139879170">Domovská stránka</translation> <translation id="935490618240037774">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.</translation> <translation id="939598580284253335">Zadat heslovou frázi</translation> <translation id="976982866697960176">Správa synchronizovaných dat…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 6b2093c..69b7b3c5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Log ud af den administrerede konto</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Der er sendt en nedbrudsrapport.</translation> -<translation id="932327136139879170">Start</translation> <translation id="935490618240037774">Dine bogmærker, din historik, dine adgangskoder og andre indstillinger synkroniseres med din Google-konto, så du kan bruge dem på alle dine enheder.</translation> <translation id="939598580284253335">Angiv adgangssætning</translation> <translation id="976982866697960176">Administrer synkroniserede data...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb index 3bdbdcb..60e6119 100644 --- a/ios/chrome/app/strings/resources/ios_strings_de.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Von verwaltetem Konto abmelden</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Absturzbericht wurde gesendet.</translation> -<translation id="932327136139879170">Privat</translation> <translation id="935490618240037774">Lesezeichen, Verlauf, Passwörter und andere Einstellungen werden mit Ihrem Google-Konto synchronisiert, damit Sie sie auf allen Ihren Geräten nutzen können.</translation> <translation id="939598580284253335">Passphrase eingeben</translation> <translation id="976982866697960176">Synchronisierte Daten verwalten...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb index 5902571b..b330c1c9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_el.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Αποσύνδεση από διαχειριζόμενο λογαριασμό</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Η αναφορά σφάλματος εστάλη.</translation> -<translation id="932327136139879170">Αρχική σελίδα</translation> <translation id="935490618240037774">Οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις σας θα συγχρονιστούν στον Λογαριασμό σας Google, ώστε η χρήση τους να είναι δυνατή σε όλες τις συσκευές σας.</translation> <translation id="939598580284253335">Εισαγωγή φράσης πρόσβασης</translation> <translation id="976982866697960176">Διαχείριση συγχρονισμένων δεδομένων…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb index b182f80..c9f20fb 100644 --- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Sign out of managed account</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Crash report sent.</translation> -<translation id="932327136139879170">Home</translation> <translation id="935490618240037774">Your bookmarks, history, passwords and other settings will be synced to your Google account so that you can use them on all of your devices.</translation> <translation id="939598580284253335">Enter passphrase</translation> <translation id="976982866697960176">Manage Synced Data…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb index e6f516c..22527436 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Salir de la cuenta administrada</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Informe de fallos enviado.</translation> -<translation id="932327136139879170">Página principal</translation> <translation id="935490618240037774">Tus favoritos, historial, contraseñas y otras opciones de configuración se sincronizarán con tu cuenta de Google para que puedas usarlos en todos tus dispositivos.</translation> <translation id="939598580284253335">Ingresar frase de contraseña</translation> <translation id="976982866697960176">Administrar datos sincronizados...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index 8eec9fc..193ce2a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Cierra sesión en la cuenta gestionada</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Informe sobre fallos enviado.</translation> -<translation id="932327136139879170">Página principal</translation> <translation id="935490618240037774">Tus marcadores, historial, contraseñas y otros ajustes se sincronizarán con tu cuenta de Google para que puedas utilizarlos en todos tus dispositivos.</translation> <translation id="939598580284253335">Introducir frase de contraseña</translation> <translation id="976982866697960176">Administrar datos sincronizados…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index ce68bed0..a2ba792 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Hallatud kontolt väljalogimine</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Krahhiaruanne on saadetud.</translation> -<translation id="932327136139879170">Kodu</translation> <translation id="935490618240037774">Teie järjehoidjad, ajalugu, paroolid ja muud seaded sünkroonitakse teie Google'i kontoga, et saaksite neid kasutada kõigis oma seadmetes.</translation> <translation id="939598580284253335">Sisesta parool</translation> <translation id="976982866697960176">Sünkroonitud andmete haldamine …</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb index 6839c889..6293066 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">خروج از حساب مدیریتشده</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">گزارش خرابی ارسال شد.</translation> -<translation id="932327136139879170">منزل</translation> <translation id="935490618240037774">نشانکها، سابقه، گذرواژهها و سایر تنظیمات در حساب Google شما همگامسازی میشوند تا بتوانید از آنها در همه دستگاههایتان استفاده کنید.</translation> <translation id="939598580284253335">عبارت ورود را وارد کنید</translation> <translation id="976982866697960176">مدیریت دادههای همگامسازیشده…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 2ff3ceda..bd3f4b4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Kirjaudu ulos hallinnoidulta tililtä</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Virheraportti lähetettiin.</translation> -<translation id="932327136139879170">Etusivu</translation> <translation id="935490618240037774">Kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi synkronoidaan Google-tilillesi, jotta voit käyttää niitä kaikilla laitteillasi.</translation> <translation id="939598580284253335">Anna tunnuslause</translation> <translation id="976982866697960176">Hallinnoi synkronoituja tietoja</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index cc4f0038..b0e5eaf 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Mag-sign out sa pinamamahalaang account</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Nagpadala ng ulat sa pag-crash.</translation> -<translation id="932327136139879170">Home</translation> <translation id="935490618240037774">Masi-sync sa iyong Google Account ang iyong mga bookmark, history, mga password at iba pang mga setting upang magamit mo ang mga ito sa lahat ng iyong device.</translation> <translation id="939598580284253335">Ilagay ang passphrase</translation> <translation id="976982866697960176">Pamahalaan ang Naka-sync na Data…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 021d9399..c1f4d9e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Se déconnecter d'un compte géré</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Le rapport d'erreur a bien été envoyé.</translation> -<translation id="932327136139879170">Accueil</translation> <translation id="935490618240037774">Vos favoris, votre historique, vos mots de passe et d'autres paramètres seront synchronisés avec votre compte Google, afin que vous puissiez les utiliser sur tous vos appareils.</translation> <translation id="939598580284253335">Saisir la phrase secrète</translation> <translation id="976982866697960176">Gérer les données synchronisées…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index 618050f..7a6541e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">સંચાલિત એકાઉન્ટમાંથી સાઇન આઉટ કરો</translation> <translation id="9203116392574189331">હેન્ડઓફ</translation> <translation id="9223358826628549784">ક્રેશ રિપોર્ટ મોકલ્યો.</translation> -<translation id="932327136139879170">હોમ</translation> <translation id="935490618240037774">તમારા Google એકાઉન્ટ પર તમારા બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને અન્ય સેટિંગ સિંક કરવામાં આવશે, જેથી કરીને તમે તમારા બધા ડિવાઇસ પર તેમનો ઉપયોગ કરી શકો.</translation> <translation id="939598580284253335">પાસફ્રેઝ દાખલ કરો</translation> <translation id="976982866697960176">સમન્વયિત ડેટા સંચાલિત કરો…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb index e5a5966..c95530e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">प्रबंधित खाते से प्रस्थान करें</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">ख़राबी रिपोर्ट भेज दी गई.</translation> -<translation id="932327136139879170">होम</translation> <translation id="935490618240037774">आपके बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग को आपके Google खाते में समन्वयित किया जाएगा ताकि आप उनका उपयोग अपने सभी डिवाइस पर कर सकें.</translation> <translation id="939598580284253335">पासफ़्रेज़ दर्ज करें</translation> <translation id="976982866697960176">समन्वयित डेटा प्रबंधित करें...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb index fb342a5..8af2073 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Odjava s upravljanog računa</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Izvješće o rušenju programa poslano je.</translation> -<translation id="932327136139879170">Početna stranica</translation> <translation id="935490618240037774">Vaše oznake, povijest, zaporke i ostale postavke sinkronizirat će se s vašim Google računom kako biste ih mogli upotrebljavati na svim svojim uređajima.</translation> <translation id="939598580284253335">Unesite zaporku</translation> <translation id="976982866697960176">Upravljanje sinkroniziranim podacima…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index e84bf96..b07d856 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Kijelentkezés felügyelt fiókból</translation> <translation id="9203116392574189331">Átadás</translation> <translation id="9223358826628549784">Hibajelentés elküldve.</translation> -<translation id="932327136139879170">Főoldal</translation> <translation id="935490618240037774">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 bármelyik eszközén hozzájuk férjen.</translation> <translation id="939598580284253335">Összetett jelszó megadása</translation> <translation id="976982866697960176">Szinkronizált adatok kezelése...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index a77a652..52f5a4b8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Keluar dari akun yang dikelola</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Laporan kerusakan terkirim.</translation> -<translation id="932327136139879170">Beranda</translation> <translation id="935490618240037774">Bookmark, histori, sandi, dan setelan lainnya akan disinkronkan ke Akun Google agar Anda dapat menggunakannya di semua perangkat.</translation> <translation id="939598580284253335">Masukkan frasa sandi</translation> <translation id="976982866697960176">Kelola Data yang Disinkronkan…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb index 013f39c..611fb86 100644 --- a/ios/chrome/app/strings/resources/ios_strings_it.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Esci dall'account gestito</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Rapporto sugli arresti anomali inviato.</translation> -<translation id="932327136139879170">Home page</translation> <translation id="935490618240037774">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.</translation> <translation id="939598580284253335">Inserisci passphrase</translation> <translation id="976982866697960176">Gestisci dati sincronizzati…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 01b5e06..517440d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">צא מהחשבון המנוהל</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">דוח הקריסה נשלח.</translation> -<translation id="932327136139879170">בית</translation> <translation id="935490618240037774">הסימניות, ההיסטוריה, הסיסמאות והגדרות נוספות יסונכרנו עם חשבון Google, כך שתוכל להשתמש בהן בכל המכשירים שלך.</translation> <translation id="939598580284253335">הזן משפט-סיסמה</translation> <translation id="976982866697960176">נהל נתונים מסונכרנים…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index a705665..199d033 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">管理対象アカウントからログアウトする</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">クラッシュレポートを送信しました。</translation> -<translation id="932327136139879170">ホーム</translation> <translation id="935490618240037774">ブックマーク、履歴、パスワード、その他の設定が Google アカウントに同期され、どの端末でも利用できるようになります。</translation> <translation id="939598580284253335">パスフレーズを入力</translation> <translation id="976982866697960176">同期データを管理...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb index 7a48c1ae..bad1c1a 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">ನಿರ್ವಹಿಸಲಾದ ಖಾತೆಯಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡಿ</translation> <translation id="9203116392574189331">ಹ್ಯಾಂಡ್ಆಫ್</translation> <translation id="9223358826628549784">ಕ್ರ್ಯಾಶ್ ವರದಿಯನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ.</translation> -<translation id="932327136139879170">Home</translation> <translation id="935490618240037774">ನಿಮ್ಮ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ ಈ ಮೂಲಕ ಅವುಗಳನ್ನು ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲಿ ನೀವು ಬಳಸಬಹುದು.</translation> <translation id="939598580284253335">ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ನಮೂದಿಸಿ</translation> <translation id="976982866697960176">ಸಿಂಕ್ ಮಾಡಲಾದ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಿ...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index 474cd6f..3615735 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">관리 계정에서 로그아웃</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">비정상 종료 보고서 전송 완료</translation> -<translation id="932327136139879170">홈</translation> <translation id="935490618240037774">북마크, 방문 기록, 비밀번호, 기타 설정이 Google 계정에 동기화되므로 모든 기기에서 사용할 수 있습니다.</translation> <translation id="939598580284253335">암호 입력</translation> <translation id="976982866697960176">동기화된 데이터 관리…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb index 0f21d634..7e64670b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Atsijungimas nuo valdomos paskyros</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Strigties ataskaita išsiųsta.</translation> -<translation id="932327136139879170">Kontaktinė namų informacija</translation> <translation id="935490618240037774">Žymės, istorija, slaptažodžiai ir kiti nustatymai bus sinchronizuojami su „Google“ paskyra, kad galėtumėte juos naudoti visuose įrenginiuose.</translation> <translation id="939598580284253335">Įvesti slaptafrazę</translation> <translation id="976982866697960176">Tvarkyti sinchronizuotus duomenis…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb index d79fd42..6eef026 100644 --- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Izrakstīšanās no pārvaldīta konta</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Avārijas ziņojums nosūtīts.</translation> -<translation id="932327136139879170">Sākums</translation> <translation id="935490618240037774">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 tos izmantot visās savās ierīcēs.</translation> <translation id="939598580284253335">Ievadiet ieejas frāzi</translation> <translation id="976982866697960176">Pārvaldīt sinhronizētos datus…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb index 9cd964a..df7431b3 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">മാനേജുചെയ്ത അക്കൗണ്ടിൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യുക</translation> <translation id="9203116392574189331">ഹാൻഡ്ഓഫ്</translation> <translation id="9223358826628549784">ക്രാഷ് റിപ്പോർട്ട് അയച്ചു.</translation> -<translation id="932327136139879170">ഹോം</translation> <translation id="935490618240037774">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും ഉപയോഗിക്കുന്നതിന് ബുക്ക്മാർക്കുകൾ, ചരിത്രം, പാസ്വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവയെ Google അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കുന്നതാണ്.</translation> <translation id="939598580284253335">പാസ്ഫ്രെയ്സ് നല്കുക</translation> <translation id="976982866697960176">സമന്വിത ഡാറ്റ മാനേജുചെയ്യുക...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index e7a33983..77b6545e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -130,7 +130,7 @@ <translation id="3024255823539804759">काल</translation> <translation id="3037605927509011580">च्चक!</translation> <translation id="3112556859945124369">चिन्हांकित करा…</translation> -<translation id="3151924044251363314">फक्त आपला सांकेतिक वाक्यांश असलेली एखादी व्यक्ती आपला कूटबद्ध डेटा वाचू शकते. सांकेतिक वाक्यांश Google कडे पाठविला किंवा त्याद्वारे संचयित केला जात नाही. आपण आपला सांकेतिक वाक्यांश विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, आपल्याला संकालन रीसेट करावे लागेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> +<translation id="3151924044251363314">फक्त तुमचा पासफ्रेज असलेली एखादी व्यक्ती तुमचा एंक्रिप्ट केलेला डेटा वाचू शकते. पासफ्रेज Google कडे पाठवला किंवा त्याद्वारे स्टोअर केला जात नाही. तुम्ही तुमचा पासफ्रेज विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, तुम्हाला सिंक रीसेट करावे लागेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation> <translation id="3157684681743766797">सर्व चिन्हांकित करा…</translation> <translation id="3172213052701798825">संकेतशब्दांसाठी Google Smart Lock</translation> <translation id="3175081911749765310">वेब सेवा</translation> @@ -160,7 +160,7 @@ <translation id="3519193562722059437">वेब ब्राउझ करण्यासाठी एक टॅब उघडा.</translation> <translation id="3527085408025491307">फोल्डर</translation> <translation id="3551320343578183772">टॅब बंद करा</translation> -<translation id="3567664240939803299">या साइटसाठी Google Smart Lock ने आपला पासवर्ड सेव्ह करावा असे आपण इच्छिता?</translation> +<translation id="3567664240939803299">या साइटसाठी Google Smart Lock ने तुमचा पासवर्ड सेव्ह करावा का?</translation> <translation id="3588820906588687999">नवीन टॅबमध्ये इमेज उघडा</translation> <translation id="3603009562372709545">दुवा URL कॉपी करा</translation> <translation id="3607167657931203000">स्वयं-भरण डेटा</translation> @@ -222,7 +222,7 @@ <translation id="4659667755519643272">टॅब स्विचर प्रविष्ट करा</translation> <translation id="4666531726415300315"><ph name="EMAIL" /> म्हणून साइन इन केले. -आपला डेटा आपल्या संकालित वाक्यांशासह कूटबद्ध केला आहे. संकालन सुरू करण्यासाठी तो एंटर करा.</translation> +तुमचा डेटा तुमच्या सिंक केलेल्या पासफ्रेजसह एंक्रिप्ट केला आहे. सिंक सुरू करण्यासाठी तो एंटर करा.</translation> <translation id="473775607612524610">अपडेट करा</translation> <translation id="4807020197310989387">एक न वाचलेला वाचन सूची लेख.</translation> <translation id="481968316161811770">कुकीज, साइट डेटा</translation> @@ -314,7 +314,7 @@ <translation id="6308436439357671616">हे आपल्याला फोटो घेऊ आणि अपलोड करू देते.</translation> <translation id="6324528485781869530">संकालन खाते स्विच करा</translation> <translation id="6324669097367352121">साइन इन सेटिंग्ज</translation> -<translation id="6337234675334993532">कूटबद्धीकरण</translation> +<translation id="6337234675334993532">एंक्रिप्शन</translation> <translation id="633809752005859102">खरोखर काहीतरी चूक झाली. आम्ही त्यावर कार्य करू.</translation> <translation id="6342069812937806050">आत्ताच</translation> <translation id="6344783595350022745">मजकूर साफ करा</translation> @@ -328,7 +328,7 @@ <translation id="6417838470969808600">आपल्याकडे <ph name="USER_EMAIL1" /> मधील बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज आहेत.</translation> <translation id="641799622251403418"><ph name="EMAIL" /> म्हणून साइन इन केले. -आपला डेटा आपल्या संकालन सांकेतिक वाक्यांशासह <ph name="TIME" /> वाजता कूटबद्ध केला होता. संकालन सुरु करण्यासाठी तो एंटर करा.</translation> +तुमचा डेटा तुमच्या सिंक पासफ्रेजसह <ph name="TIME" /> वाजता एंक्रिप्ट केला होता. सिंक सुरु करण्यासाठी तो एंटर करा.</translation> <translation id="6418346271604475326">पीडीएफ तयार करत आहे</translation> <translation id="6434591244308415567">एरर आली. नंतर पुन्हा प्रयत्न करा.</translation> <translation id="6445051938772793705">देश</translation> @@ -414,7 +414,7 @@ <translation id="7971521879845308059">पॉप-अप अवरोधित करा</translation> <translation id="7981313251711023384">जलद ब्राउझिंग आणि शोधाकरता पेज आधीच लोड करा</translation> <translation id="7982789257301363584">नेटवर्क</translation> -<translation id="8019783059653722575">हे आपल्याला फोटो सेव्ह आणि अपलोड करू देते.</translation> +<translation id="8019783059653722575">हे तुम्हाला फोटो सेव्ह आणि अपलोड करू देते.</translation> <translation id="802154636333426148">डाउनलोड अयशस्वी झाले</translation> <translation id="8023878949384262191">विभाग विस्तृत करते.</translation> <translation id="8059533439631660104">विभाग संकुचित करा.</translation> @@ -461,7 +461,7 @@ <translation id="8904976895050290827">Chrome Sync</translation> <translation id="895541991026785598">समस्या नोंदवणे</translation> <translation id="8971089644512329999">ठीक आहे, समजले</translation> -<translation id="8981454092730389528">Google क्रियाकलाप नियंत्रणे</translation> +<translation id="8981454092730389528">Google अॅक्टिव्हिटी नियंत्रणे</translation> <translation id="8985320356172329008">Google मध्ये हे म्हणून साइन इन केले</translation> <translation id="902659348151742535">शोध, जाहिरात आणि इतर Google सेवा वैयक्तीकृत करण्यासाठी Google आपल्या ब्राउझिंग इतिहासाचा वापर करू शकते.</translation> <translation id="9034759925968272072">आपल्याला आपल्या Google खात्यामधून साइन आउट केले जाणार नाही. आपल्या Google खात्यात <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> वर ब्राउझिंग इतिहासाची इतर स्वरूपे असू शकतात.</translation> @@ -476,7 +476,6 @@ <translation id="9188680907066685419">व्यवस्थापित केलेल्या खात्यामधून साइन आउट करा</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">क्रॅश अहवाल पाठवला.</translation> -<translation id="932327136139879170">घर</translation> <translation id="935490618240037774">आपले बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज आपल्या Google खात्यात संकालित केल्या जातील जेणेकरून आपण आपल्या सर्व डिव्हाइसेसवर त्यांचा वापर करू शकता.</translation> <translation id="939598580284253335">सांकेतिक वाक्यांश एंटर करा</translation> <translation id="976982866697960176">संकालित केलेला डेटा व्यवस्थापित करा...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 32328fc..d08c989 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Log keluar daripada akaun terurus</translation> <translation id="9203116392574189331">Serah</translation> <translation id="9223358826628549784">Laporan ranap sistem dihantar.</translation> -<translation id="932327136139879170">Laman Utama</translation> <translation id="935490618240037774">Penanda halaman, sejarah, kata laluan dan tetapan anda yang lain akan disegerakkan ke Akaun Google supaya anda dapat menggunakannya pada semua peranti anda.</translation> <translation id="939598580284253335">Masukkan frasa laluan</translation> <translation id="976982866697960176">Urus Data yang Disegerakkan...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb index 2f823ae..ec3b6d1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Uitloggen van beheerd account</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Crashrapport verzonden.</translation> -<translation id="932327136139879170">Homepage</translation> <translation id="935490618240037774">Je bladwijzers, geschiedenis, wachtwoorden en andere instellingen worden gesynchroniseerd met je Google-account, zodat je ze op al je apparaten kunt gebruiken.</translation> <translation id="939598580284253335">Wachtwoordzin opgeven</translation> <translation id="976982866697960176">Gesynchroniseerde gegevens beheren…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index 253f2a6..f4e3afe 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Logg av administrert konto</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Programstopprapporten er sendt.</translation> -<translation id="932327136139879170">Gå til startsiden</translation> <translation id="935490618240037774">Bokmerkene, loggoppføringene, passordene og de andre innstillingene dine blir synkronisert med Google-kontoen din, slik at du kan få dem på alle enhetene du bruker.</translation> <translation id="939598580284253335">Angi en passordfrase</translation> <translation id="976982866697960176">Administrer synkroniserte data …</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 06a0180..f72625f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Wyloguj się z konta zarządzanego</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Raport o awarii został wysłany.</translation> -<translation id="932327136139879170">Strona główna</translation> <translation id="935490618240037774">Zakładki, historia, hasła i inne ustawienia zostaną zsynchronizowane z kontem Google, by można było z nich korzystać na dowolnym urządzeniu.</translation> <translation id="939598580284253335">Wpisz hasło</translation> <translation id="976982866697960176">Zarządzaj synchronizowanymi danymi…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index 177c27ab..cb2cd23 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Sair da conta gerenciada</translation> <translation id="9203116392574189331">Transição</translation> <translation id="9223358826628549784">Relatórios de erros enviados.</translation> -<translation id="932327136139879170">Início</translation> <translation id="935490618240037774">Seus favoritos, histórico, senhas e outras configurações serão sincronizados com sua Conta do Google para que seja possível usá-los em todos os seus dispositivos.</translation> <translation id="939598580284253335">Inserir senha</translation> <translation id="976982866697960176">Gerenciar dados sincronizados…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb index 0fa2a47..559b360 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Terminar sessão na conta gerida</translation> <translation id="9203116392574189331">Entrega</translation> <translation id="9223358826628549784">Relatório de falha enviado.</translation> -<translation id="932327136139879170">Página inicial</translation> <translation id="935490618240037774">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.</translation> <translation id="939598580284253335">Introduzir frase de acesso</translation> <translation id="976982866697960176">Gerir dados sincronizados...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb index 7f964d5..cf1614ad 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Deconectează-te de la contul gestionat</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Raportul de blocare a fost trimis.</translation> -<translation id="932327136139879170">Pagina de pornire</translation> <translation id="935490618240037774">Marcajele, istoricul, parolele și alte setări vor fi sincronizate cu Contul Google, pentru a le putea folosi pe toate dispozitivele.</translation> <translation id="939598580284253335">Introdu expresia de acces</translation> <translation id="976982866697960176">Gestionează datele sincronizate…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb index 03dae0f..510f2f4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Выход из управляемого аккаунта</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Отчет отправлен</translation> -<translation id="932327136139879170">Главная страница</translation> <translation id="935490618240037774">Пароли, закладки, история и другие параметры будут синхронизированы с аккаунтом Google, чтобы у вас был доступ к ним на любом устройстве.</translation> <translation id="939598580284253335">Введите кодовую фразу</translation> <translation id="976982866697960176">Управление синхронизированными данными</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index a467683b..7a755c6f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Odhlásenie zo spravovaného účtu</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Správa o zlyhaní bola odoslaná.</translation> -<translation id="932327136139879170">Domov</translation> <translation id="935490618240037774">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.</translation> <translation id="939598580284253335">Zadať prístupovú frázu</translation> <translation id="976982866697960176">Spravujte synchronizované údaje…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 4d15cd2..b4e9a69 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -473,7 +473,6 @@ <translation id="9188680907066685419">Odjava iz upravljanega računa</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Poročilo o zrušitvi poslano.</translation> -<translation id="932327136139879170">Domov</translation> <translation id="935490618240037774">Vaši zaznamki, zgodovina, gesla in druge nastavitve bodo sinhronizirani z Google Računom, tako da jih boste lahko uporabljali v vseh svojih napravah.</translation> <translation id="939598580284253335">Vnesite geslo</translation> <translation id="976982866697960176">Upravljanje sinhroniziranih podatkov …</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb index b4fc1042..d029f90 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Одјавите се са налога којим се управља</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Извештај о отказивању је послат.</translation> -<translation id="932327136139879170">Почетна</translation> <translation id="935490618240037774">Обележивачи, историја, лозинке и друга подешавања ће се синхронизовати са Google налогом да бисте могли да их користите на свим уређајима.</translation> <translation id="939598580284253335">Унесите приступну фразу</translation> <translation id="976982866697960176">Управљајте синхронизованим подацима…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb index 009c7a9c..23cdc5f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Logga ut från hanterat konto</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Felrapporten har skickats.</translation> -<translation id="932327136139879170">Startsida</translation> <translation id="935490618240037774">Bokmärken, historik, lösenord och andra inställningar synkroniseras med ditt Google-konto så att du kan använda dem på alla enheter.</translation> <translation id="939598580284253335">Ange lösenfras</translation> <translation id="976982866697960176">Hantera synkroniserad data …</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb index bdc3460..af2765d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Ondoka kwenye akaunti inayodhibitiwa</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Ripoti ya kuacha kufanya kazi imetumwa.</translation> -<translation id="932327136139879170">Mwanzo</translation> <translation id="935490618240037774">Alamisho, historia, manenosiri na mipangilio yako mingine itasawazishwa kwenye Akaunti yako ya Google ili uitumie katika vifaa vyako vyote.</translation> <translation id="939598580284253335">Ingiza kaulisiri</translation> <translation id="976982866697960176">Dhibiti Data Iliyosawazishwa...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 2c41ac7..85c1de0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">நிர்வகிக்கப்படும் கணக்கிலிருந்து வெளியேறு</translation> <translation id="9203116392574189331">ஹேண்ட்ஆஃப்</translation> <translation id="9223358826628549784">சிதைவு அறிக்கை அனுப்பப்பட்டது.</translation> -<translation id="932327136139879170">முகப்பு</translation> <translation id="935490618240037774">புத்தகக்குறிகள், வரலாறு, கடவுச்சொற்கள் மற்றும் பிற அமைப்புகள் உங்கள் Google கணக்குடன் ஒத்திசைக்கப்படும் என்பதால் அவற்றை எல்லா சாதனங்களிலும் பயன்படுத்தலாம்.</translation> <translation id="939598580284253335">கடவுச்சொற்றொடரை உள்ளிடுக</translation> <translation id="976982866697960176">ஒத்திசைத்த தரவை நிர்வகித்தல்...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 6569c47a..1ffffba5 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">నిర్వహిత ఖాతా నుండి సైన్ అవుట్ చేయండి</translation> <translation id="9203116392574189331">హ్యాండ్ఆఫ్</translation> <translation id="9223358826628549784">క్రాష్ నివేదిక పంపబడింది.</translation> -<translation id="932327136139879170">హోమ్</translation> <translation id="935490618240037774">మీ బుక్మార్క్లు, చరిత్ర, పాస్వర్డ్లు మరియు ఇతర సెట్టింగ్లు మీ Google ఖాతాకు సమకాలీకరించబడతాయి, కాబట్టి మీరు వీటిని మీ అన్ని పరికరాల్లో ఉపయోగించవచ్చు.</translation> <translation id="939598580284253335">పాస్ఫ్రేజ్ని ఎంటర్ చెయ్యండి</translation> <translation id="976982866697960176">సమకాలీకరించిన డేటాను నిర్వహించండి…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb index 8a02997..707c1db 100644 --- a/ios/chrome/app/strings/resources/ios_strings_th.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">ออกจากระบบบัญชีที่มีการจัดการ</translation> <translation id="9203116392574189331">แฮนด์ออฟ</translation> <translation id="9223358826628549784">ส่งรายงานข้อขัดข้องแล้ว</translation> -<translation id="932327136139879170">หน้าแรก</translation> <translation id="935490618240037774">บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะซิงค์กับบัญชี Google เพื่อให้คุณสามารถใช้ข้อมูลเหล่านี้ได้กับอุปกรณ์ทุกเครื่อง</translation> <translation id="939598580284253335">ป้อนข้อความรหัสผ่าน</translation> <translation id="976982866697960176">จัดการข้อมูลที่ซิงค์…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb index 324d23c..e18071b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Yönetilen hesabın oturumunu kapat</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Kilitlenme raporu gönderildi.</translation> -<translation id="932327136139879170">Ana Sayfa</translation> <translation id="935490618240037774">Yer işaretleri, geçmiş, şifreler ve diğer ayarlarınızı tüm cihazlarınızda kullanabilmeniz için bu veriler Google Hesabınızla senkronize edilecek</translation> <translation id="939598580284253335">Parolayı girin</translation> <translation id="976982866697960176">Senkronize Edilen Verileri Yönetme…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb index 2b667c6..53fcac7 100644 --- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Вийти з керованого облікового запису</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">Звіт про аварійне завершення роботи надіслано.</translation> -<translation id="932327136139879170">Домашня сторінка</translation> <translation id="935490618240037774">Ваші закладки, історія, паролі й інші налаштування синхронізуватимуться з обліковим записом Google, щоб ви могли користуватися ними на всіх своїх пристроях.</translation> <translation id="939598580284253335">Ввести парольну фразу</translation> <translation id="976982866697960176">Керування синхронізованими даними…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index edcbdab..a8f93a2 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">Đăng xuất khỏi tài khoản được quản lý</translation> <translation id="9203116392574189331">Tiếp nối</translation> <translation id="9223358826628549784">Đã gửi báo cáo lỗi.</translation> -<translation id="932327136139879170">Trang chủ</translation> <translation id="935490618240037774">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 chúng trên tất cả thiết bị của mình.</translation> <translation id="939598580284253335">Nhập cụm mật khẩu</translation> <translation id="976982866697960176">Quản lý dữ liệu đã đồng bộ hóa...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 7fc4a07..47e54f0 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">退出受管理的帐号</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">已发送崩溃报告。</translation> -<translation id="932327136139879170">首页</translation> <translation id="935490618240037774">您的书签、历史记录、密码及其他设置均将同步到您的 Google 帐号,以便您在自己所有的设备上使用。</translation> <translation id="939598580284253335">请输入密码</translation> <translation id="976982866697960176">管理同步的数据…</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index 262cf2c..f5cfec9e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -475,7 +475,6 @@ <translation id="9188680907066685419">登出受管理的帳戶</translation> <translation id="9203116392574189331">Handoff</translation> <translation id="9223358826628549784">當機報告已送出。</translation> -<translation id="932327136139879170">首頁</translation> <translation id="935490618240037774">您的書籤、歷史記錄、密碼和其他設定都會在您的 Google 帳戶中保持同步,以便您在所有個人裝置上使用。</translation> <translation id="939598580284253335">請輸入通關密語</translation> <translation id="976982866697960176">管理同步資料…</translation>
diff --git a/ios/chrome/browser/ui/side_swipe/BUILD.gn b/ios/chrome/browser/ui/side_swipe/BUILD.gn index 5261ca7..860816d 100644 --- a/ios/chrome/browser/ui/side_swipe/BUILD.gn +++ b/ios/chrome/browser/ui/side_swipe/BUILD.gn
@@ -62,25 +62,3 @@ "//third_party/ocmock", ] } - -source_set("eg_tests") { - configs += [ "//build/config/compiler:enable_arc" ] - testonly = true - sources = [ - "side_swipe_egtest.mm", - ] - - deps = [ - ":side_swipe", - "//base", - "//ios/chrome/browser", - "//ios/chrome/browser/ui:ui_util", - "//ios/chrome/browser/ui/toolbar/adaptive:adaptive_ui", - "//ios/chrome/test/app:test_support", - "//ios/chrome/test/earl_grey:test_support", - "//ios/testing/earl_grey:earl_grey_support", - "//ios/third_party/earl_grey:earl_grey+link", - "//ios/web/public/test/http_server", - ] - libs = [ "XCTest.framework" ] -}
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm index 55c9e346..929464d 100644 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm +++ b/ios/chrome/browser/ui/side_swipe/side_swipe_controller.mm
@@ -242,8 +242,7 @@ // Since the toolbar and the contentView can overlap, check the toolbar frame // first, and confirm the right gesture recognizer is firing. - if ([self.toolbarInteractionHandler - isInsideToolbar:[gesture.view convertPoint:location toView:nil]]) { + if ([self.toolbarInteractionHandler isInsideToolbar:location]) { if (![gesture isEqual:panGestureRecognizer_]) { return NO; }
diff --git a/ios/chrome/browser/ui/side_swipe/side_swipe_egtest.mm b/ios/chrome/browser/ui/side_swipe/side_swipe_egtest.mm deleted file mode 100644 index 882140e4..0000000 --- a/ios/chrome/browser/ui/side_swipe/side_swipe_egtest.mm +++ /dev/null
@@ -1,73 +0,0 @@ -// Copyright 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import <EarlGrey/EarlGrey.h> -#import <XCTest/XCTest.h> - -#import "ios/chrome/browser/ui/toolbar/adaptive/primary_toolbar_view.h" -#import "ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_view.h" -#import "ios/chrome/browser/ui/uikit_ui_util.h" -#import "ios/chrome/test/earl_grey/chrome_earl_grey.h" -#import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h" -#import "ios/chrome/test/earl_grey/chrome_matchers.h" -#import "ios/chrome/test/earl_grey/chrome_test_case.h" -#include "ios/testing/earl_grey/disabled_test_macros.h" -#include "net/test/embedded_test_server/default_handlers.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -// Integration tests for side swipe. -@interface SideSwipeTestCase : ChromeTestCase -@end - -@implementation SideSwipeTestCase - -#pragma mark - Tests - -// Tests that swiping horizontally on the bottom toolbar is changing tab. -- (void)testSideSwipeBottomToolbar { - if (!IsSplitToolbarMode()) { - EARL_GREY_TEST_SKIPPED( - @"This tests should only be tested if the secondary toolbar is " - @"present"); - } - [self checkSideSwipeOnToolbarClass:[SecondaryToolbarView class]]; -} - -// Tests that swiping horizontally on the top toolbar is changing tab. -- (void)testSideSwipeTopToolbar { - [self checkSideSwipeOnToolbarClass:[PrimaryToolbarView class]]; -} - -#pragma mark - Helpers - -// Checks that side swipe on an element of class |klass| is working to change -// tab. -- (void)checkSideSwipeOnToolbarClass:(Class)klass { - // Setup the server. - net::test_server::RegisterDefaultHandlers(self.testServer); - GREYAssertTrue(self.testServer->Start(), @"Test server failed to start."); - - // Load the first page. - [ChromeEarlGrey loadURL:self.testServer->GetURL("/echo")]; - [ChromeEarlGrey waitForWebViewContainingText:"Echo"]; - - // Open a new Tab to have a tab to switch to. - [ChromeEarlGreyUI openNewTab]; - - // Load the second page in the new tab. - [ChromeEarlGrey loadURL:self.testServer->GetURL("/defaultresponse")]; - [ChromeEarlGrey waitForWebViewContainingText:"Default response"]; - - // Side swipe on the toolbar. - [[EarlGrey selectElementWithMatcher:grey_kindOfClass(klass)] - performAction:grey_swipeSlowInDirection(kGREYDirectionRight)]; - - // Check that we swiped back to our web page. - [ChromeEarlGrey waitForWebViewContainingText:"Echo"]; -} - -@end
diff --git a/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm b/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm index 823aaa8..8ab930e52 100644 --- a/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm +++ b/ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.mm
@@ -64,9 +64,7 @@ // swipes from the right side. CGRect toolbarFrame = CGRectInset([coordinator viewController].view.frame, -1, -1); - CGRect frameInWindowCoordinates = - [[coordinator viewController].view convertRect:toolbarFrame toView:nil]; - if (CGRectContainsPoint(frameInWindowCoordinates, point)) + if (CGRectContainsPoint(toolbarFrame, point)) return YES; } return NO;
diff --git a/ios/chrome/browser/ui/toolbar/public/side_swipe_toolbar_interacting.h b/ios/chrome/browser/ui/toolbar/public/side_swipe_toolbar_interacting.h index 354f5561..05d9287 100644 --- a/ios/chrome/browser/ui/toolbar/public/side_swipe_toolbar_interacting.h +++ b/ios/chrome/browser/ui/toolbar/public/side_swipe_toolbar_interacting.h
@@ -10,8 +10,7 @@ // Protocol used by SideSwipe to interact with the toolbar. @protocol SideSwipeToolbarInteracting -// Returns whether the |point| is inside a toolbar's frame. The |point| must be -// in the window coordinates. +// Returns whether the |point| is inside a toolbar's frame. - (BOOL)isInsideToolbar:(CGPoint)point; @end
diff --git a/ios/chrome/browser/web/window_open_by_dom_egtest.mm b/ios/chrome/browser/web/window_open_by_dom_egtest.mm index b7d1010..2aeaa03 100644 --- a/ios/chrome/browser/web/window_open_by_dom_egtest.mm +++ b/ios/chrome/browser/web/window_open_by_dom_egtest.mm
@@ -218,6 +218,24 @@ [ChromeEarlGrey waitForMainTabCount:2]; } +// Tests that the correct URL is displayed for a child window opened with the +// script window.open('', '').location.replace('about:blank#hash'). +// This is a regression test for crbug.com/866142. +- (void)testLocationReplaceInWindowOpenWithEmptyTarget { + GREYAssert(TapWebViewElementWithId( + "webScenarioLocationReplaceInWindowOpenWithEmptyTarget"), + @"Failed to tap " + @"\"webScenarioLocationReplaceInWindowOpenWithEmptyTarget\""); + [ChromeEarlGrey waitForMainTabCount:2]; + // WebKit doesn't parse 'about:blank#hash' as about:blank with URL fragment. + // Instead, it percent encodes '#hash' and considers 'blank%23hash' as the + // resource identifier. Nevertheless, the '#' is significant in triggering the + // edge case in the bug. TODO(crbug.com/885249): Change back to '#'. + const GURL URL("about:blank%23hash"); + [[EarlGrey selectElementWithMatcher:OmniboxText("about:blank%23hash")] + assertWithMatcher:grey_notNil()]; +} + // Tests a link with JavaScript in the href. + (void)testWindowOpenWithJavaScriptInHref { GREYAssert(
diff --git a/ios/chrome/test/earl_grey/BUILD.gn b/ios/chrome/test/earl_grey/BUILD.gn index b146db6a..cdab9df 100644 --- a/ios/chrome/test/earl_grey/BUILD.gn +++ b/ios/chrome/test/earl_grey/BUILD.gn
@@ -123,7 +123,6 @@ "//ios/chrome/browser/ui/sad_tab:eg_tests", "//ios/chrome/browser/ui/safe_mode:eg_tests", "//ios/chrome/browser/ui/settings/sync_utils:eg_tests", - "//ios/chrome/browser/ui/side_swipe:eg_tests", "//ios/chrome/browser/ui/signin_interaction:eg_tests", "//ios/chrome/browser/ui/stack_view:eg_tests", "//ios/chrome/browser/ui/tab_switcher:eg_tests",
diff --git a/ios/testing/data/http_server_files/window_open.html b/ios/testing/data/http_server_files/window_open.html index 77ccf862..36b5e167 100644 --- a/ios/testing/data/http_server_files/window_open.html +++ b/ios/testing/data/http_server_files/window_open.html
@@ -39,6 +39,17 @@ <td>about:blank opened in new tab</td> </tr> + <tr id="_webScenarioLocationReplaceInWindowOpenWithEmptyTarget"> + <td> + <input type="button" + onclick="window.open('','').location.replace('about:blank#hash');" + name="webScenarioLocationReplaceInWindowOpenWithEmptyTarget" + id="webScenarioLocationReplaceInWindowOpenWithEmptyTarget" + value="webScenarioLocationReplaceInWindowOpenWithEmptyTarget"> + </td> + <td>Hash-only location.replace in new empty window</td> + </tr> + <tr id="_webScenarioWindowOpenRegularLink"> <td> <a href="about:blank"
diff --git a/ios/web/navigation/navigation_manager_impl.mm b/ios/web/navigation/navigation_manager_impl.mm index 638a01df..273b659 100644 --- a/ios/web/navigation/navigation_manager_impl.mm +++ b/ios/web/navigation/navigation_manager_impl.mm
@@ -18,7 +18,7 @@ namespace web { -const char kRestoreNavigationItemCount[] = "IOSRestoreNavigationItemCount"; +const char kRestoreNavigationItemCount[] = "IOS.RestoreNavigationItemCount"; NavigationManager::WebLoadParams::WebLoadParams(const GURL& url) : url(url), @@ -399,9 +399,8 @@ } void NavigationManagerImpl::WillRestore(size_t item_count) { - // UMA_HISTOGRAM_EXACT_LINEAR recommends to limit max size to 100. It should - // be uncommon for the user to have more than 100 items in their session, - // so bucketing 100+ logs together is fine. + // It should be uncommon for the user to have more than 100 items in their + // session, so bucketing 100+ logs together is fine. UMA_HISTOGRAM_COUNTS_100(kRestoreNavigationItemCount, item_count); }
diff --git a/ios/web/navigation/wk_based_navigation_manager_impl.mm b/ios/web/navigation/wk_based_navigation_manager_impl.mm index 2e1c7ea..0b637d9f 100644 --- a/ios/web/navigation/wk_based_navigation_manager_impl.mm +++ b/ios/web/navigation/wk_based_navigation_manager_impl.mm
@@ -10,6 +10,7 @@ #include "base/logging.h" #include "base/mac/bundle_locations.h" #include "base/memory/ptr_util.h" +#include "base/strings/string_util.h" #include "base/strings/sys_string_conversions.h" #import "ios/web/navigation/crw_navigation_item_holder.h" #import "ios/web/navigation/navigation_item_impl.h" @@ -215,7 +216,10 @@ // WKWebView. if (proxy.backForwardList && !proxy.backForwardList.currentItem) { // WKWebView's URL should be about:blank for empty window open item. - DCHECK_EQ(url::kAboutBlankURL, net::GURLWithNSURL(proxy.URL).spec()); + // TODO(crbug.com/885249): Use GURL::IsAboutBlank() instead. + DCHECK(base::StartsWith(net::GURLWithNSURL(proxy.URL).spec(), + url::kAboutBlankURL, + base::CompareCase::SENSITIVE)); // There should be no back-forward history for empty window open item. DCHECK_EQ(0UL, proxy.backForwardList.backList.count); DCHECK_EQ(0UL, proxy.backForwardList.forwardList.count);
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index b4c94d08..86f6c39 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -5305,9 +5305,20 @@ // update NavigationItem URL. if (web::GetWebClient()->IsSlimNavigationManagerEnabled()) { const GURL webViewURL = net::GURLWithNSURL(_webView.URL); - web::NavigationItem* currentItem = [[CRWNavigationItemHolder - holderForBackForwardListItem:_webView.backForwardList.currentItem] - navigationItem]; + web::NavigationItem* currentItem = nullptr; + if (_webView.backForwardList.currentItem) { + currentItem = [[CRWNavigationItemHolder + holderForBackForwardListItem:_webView.backForwardList.currentItem] + navigationItem]; + } else { + // WKBackForwardList.currentItem may be nil in a corner case when + // location.replace is called with about:blank#hash in an empty window + // open tab. See crbug.com/866142. + DCHECK(self.webStateImpl->HasOpener()); + DCHECK(!self.navigationManagerImpl->GetTransientItem()); + DCHECK(!self.navigationManagerImpl->GetPendingItem()); + currentItem = self.navigationManagerImpl->GetLastCommittedItem(); + } if (currentItem && webViewURL != currentItem->GetURL()) currentItem->SetURL(webViewURL); } @@ -5385,7 +5396,6 @@ - (void)URLDidChangeWithoutDocumentChange:(const GURL&)newURL { DCHECK(newURL == net::GURLWithNSURL([_webView URL])); - DCHECK(!_documentURL.host().empty() || _documentURL.SchemeIsFile()); if (base::FeatureList::IsEnabled( web::features::kCrashOnUnexpectedURLChange)) {
diff --git a/media/gpu/windows/d3d11_decryptor.cc b/media/gpu/windows/d3d11_decryptor.cc index 258e87d83..683ef3b 100644 --- a/media/gpu/windows/d3d11_decryptor.cc +++ b/media/gpu/windows/d3d11_decryptor.cc
@@ -18,6 +18,11 @@ const UINT kSubresourceIndex = 0; const UINT kWaitIfGPUBusy = 0; +// This value is somewhat arbitrary but is a multiple of 16 and 4K and is +// equal to D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION. Since the buffers are cast +// to ID3D11Texture2D, setting it as its size should make sense. +const UINT kBufferSize = 16384; + // Creates ID3D11Buffer using the values. Return true on success. bool CreateBuffer(ID3D11Device* device, D3D11_USAGE usage, @@ -25,10 +30,8 @@ UINT cpu_access, ID3D11Buffer** out) { D3D11_BUFFER_DESC buf_desc = {}; - // This value is somewhat arbitrary but is a multiple of 16 and 4K and is - // equal to D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION. Since the buffers are cast - // to ID3D11Texture2D, setting it as its size should make sense. - buf_desc.ByteWidth = 16384; + + buf_desc.ByteWidth = kBufferSize; buf_desc.BindFlags = bind_flags; buf_desc.Usage = usage; buf_desc.CPUAccessFlags = cpu_access; @@ -121,6 +124,13 @@ return device1_iunknown == device2_iunknown; } +// Returns a value that is bigger than or equal to |num| that is a +// multiple of 16. +// E.g. num = 15 returns 16, 17 returns 32. +UINT To16Multiple(size_t num) { + return ((num + 15) >> 4) << 4; +} + } // namespace D3D11Decryptor::D3D11Decryptor(CdmProxyContext* cdm_proxy_context) @@ -299,10 +309,14 @@ } D3D11_AES_CTR_IV aes_ctr_iv = StringIvToD3D11Iv(iv); - D3D11_ENCRYPTED_BLOCK_INFO block_info = {}; - // The field says num bytes but it should be number of 4K blocks. See more at + + // The size of the encrypted bytes must be a multiple of 16. See more at // https://crbug.com/849466. - block_info.NumEncryptedBytesAtBeginning = (input.size() - 1) / 4096 + 1; + D3D11_ENCRYPTED_BLOCK_INFO block_info = {}; + block_info.NumEncryptedBytesAtBeginning = To16Multiple(input.size()); + DCHECK_LE(block_info.NumEncryptedBytesAtBeginning, kBufferSize); + block_info.NumBytesInSkipPattern = + kBufferSize - block_info.NumEncryptedBytesAtBeginning; // ID3D11Buffers should be used but since the interface takes ID3D11Texture2D, // it is reinterpret cast. See more at https://crbug.com/849466. @@ -316,7 +330,10 @@ // Because DecryptionBlt() doesn't have a return value, this is a hack to // check for decryption operation status. If it has been modified, then there // was an error. See more at https://crbug.com/849466. - if (block_info.NumBytesInSkipPattern != 0) { + HRESULT result = static_cast<HRESULT>(block_info.NumBytesInEncryptPattern); + if (FAILED(result)) { + DVLOG(3) << "Decryption error :" + << logging::SystemErrorCodeToString(result); return false; }
diff --git a/media/gpu/windows/d3d11_decryptor_unittest.cc b/media/gpu/windows/d3d11_decryptor_unittest.cc index 806713b6..731eb52 100644 --- a/media/gpu/windows/d3d11_decryptor_unittest.cc +++ b/media/gpu/windows/d3d11_decryptor_unittest.cc
@@ -48,6 +48,13 @@ const char kKeyId[] = "some 16 byte id."; const char kIv[] = "some 16 byte iv."; +// For tests where the input doesn't matter. +const uint8_t kAnyInput[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, +}; + +const SubsampleEntry kAnyInputSubsample(0, base::size(kAnyInput)); + scoped_refptr<DecoderBuffer> TestDecoderBuffer( const uint8_t* input, size_t data_size, @@ -63,6 +70,16 @@ return encrypted_buffer; } +CdmProxyContext::D3D11DecryptContext TestDecryptContext( + ComPtr<D3D11CryptoSessionMock> crypto_session_mock) { + CdmProxyContext::D3D11DecryptContext decrypt_context = {}; + decrypt_context.crypto_session = crypto_session_mock.Get(); + decrypt_context.key_blob = kAnyKeyBlob; + decrypt_context.key_blob_size = base::size(kAnyKeyBlob); + decrypt_context.key_info_guid = TEST_GUID; + return decrypt_context; +} + class CallbackMock { public: MOCK_METHOD2(DecryptCallback, Decryptor::DecryptCB::RunType); @@ -95,9 +112,16 @@ unsigned_cpu_access_flags; } -MATCHER_P(NumEncryptedBytesAtBeginningEquals, value, "") { +// NumEncryptedBytesAtBeginning must be greater than or equal to the size of the +// encrypted data, and also a multiple of 16. +MATCHER_P(NumEncryptedBytesAtBeginningGreaterOrEq, value, "") { const D3D11_ENCRYPTED_BLOCK_INFO& block_info = *arg; - return block_info.NumEncryptedBytesAtBeginning == value; + if (block_info.NumEncryptedBytesAtBeginning < value) { + *result_listener << block_info.NumEncryptedBytesAtBeginning + << " is not less than " << value; + return false; + } + return block_info.NumEncryptedBytesAtBeginning % 16 == 0; } ACTION_P(SetBufferDescSize, size) { @@ -129,6 +153,9 @@ device_mock_ = CreateD3D11Mock<D3D11DeviceMock>(); device_context_mock_ = CreateD3D11Mock<D3D11DeviceContextMock>(); video_context_mock_ = CreateD3D11Mock<D3D11VideoContextMock>(); + staging_buffer1_ = CreateD3D11Mock<D3D11BufferMock>(); + staging_buffer2_ = CreateD3D11Mock<D3D11BufferMock>(); + gpu_buffer_ = CreateD3D11Mock<D3D11BufferMock>(); } // Only sets mock expectations to the objects. Use this for the case where the @@ -136,9 +163,6 @@ // through |crypto_session_mock|'s GetDevice() function. void SetExpectationsForSuccessfulBufferInitialization( D3D11CryptoSessionMock* crypto_session_mock, - D3D11BufferMock* staging_buffer1, - D3D11BufferMock* staging_buffer2, - D3D11BufferMock* gpu_buffer, CdmProxyContext::D3D11DecryptContext* decrypt_context) { // As noted in the function comment, the device is accessible from the // crypto session. @@ -161,11 +185,12 @@ .WillOnce(Return(*decrypt_context)); // These return big enough size. - ON_CALL(*staging_buffer1, GetDesc(_)) + ON_CALL(*staging_buffer1_.Get(), GetDesc(_)) .WillByDefault(SetBufferDescSize(20000)); - ON_CALL(*staging_buffer2, GetDesc(_)) + ON_CALL(*staging_buffer2_.Get(), GetDesc(_)) .WillByDefault(SetBufferDescSize(20000)); - ON_CALL(*gpu_buffer, GetDesc(_)).WillByDefault(SetBufferDescSize(20000)); + ON_CALL(*gpu_buffer_.Get(), GetDesc(_)) + .WillByDefault(SetBufferDescSize(20000)); // It should be requesting for 2 staging buffers one for writing the data to // a GPU buffer and one for reading from the a GPU buffer. @@ -174,10 +199,10 @@ D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE), nullptr, _)) - .WillOnce( - DoAll(AddRefAndSetArgPointee<2>(staging_buffer1), Return(S_OK))) - .WillOnce( - DoAll(AddRefAndSetArgPointee<2>(staging_buffer2), Return(S_OK))); + .WillOnce(DoAll(AddRefAndSetArgPointee<2>(staging_buffer1_.Get()), + Return(S_OK))) + .WillOnce(DoAll(AddRefAndSetArgPointee<2>(staging_buffer2_.Get()), + Return(S_OK))); // It should be requesting a GPU only accessible buffer to the decrypted // output. @@ -185,7 +210,8 @@ CreateBuffer(BufferDescHas(D3D11_USAGE_DEFAULT, D3D11_BIND_RENDER_TARGET, 0u), nullptr, _)) - .WillOnce(DoAll(AddRefAndSetArgPointee<2>(gpu_buffer), Return(S_OK))); + .WillOnce( + DoAll(AddRefAndSetArgPointee<2>(gpu_buffer_.Get()), Return(S_OK))); } // |input| is the input to the Decrypt() function, the subsample information @@ -195,9 +221,6 @@ // the callback. The decrypted result of |encrypted_input| should be // |decrypted_output|. void ExpectSuccessfulDecryption(D3D11CryptoSessionMock* crypto_session_mock, - D3D11BufferMock* staging_buffer1, - D3D11BufferMock* staging_buffer2, - D3D11BufferMock* gpu_buffer, base::span<const uint8_t> input, base::span<const uint8_t> encrypted_input, base::span<const uint8_t> whole_output, @@ -213,20 +236,21 @@ // It should be requesting for a memory mapped buffer, from the staging // buffer, to pass the encrypted data to the GPU. EXPECT_CALL(*device_context_mock_.Get(), - Map(staging_buffer1, 0, D3D11_MAP_WRITE, _, _)) + Map(staging_buffer1_.Get(), 0, D3D11_MAP_WRITE, _, _)) .WillOnce( DoAll(SetArgPointee<4>(staging_buffer1_subresource), Return(S_OK))); - EXPECT_CALL(*device_context_mock_.Get(), Unmap(staging_buffer1, 0)); + EXPECT_CALL(*device_context_mock_.Get(), Unmap(staging_buffer1_.Get(), 0)); EXPECT_CALL( *video_context_mock_.Get(), - DecryptionBlt(crypto_session_mock, - reinterpret_cast<ID3D11Texture2D*>(staging_buffer1), - reinterpret_cast<ID3D11Texture2D*>(gpu_buffer), - NumEncryptedBytesAtBeginningEquals(1u), - sizeof(kAnyKeyBlob), kAnyKeyBlob, _, _)); + DecryptionBlt( + crypto_session_mock, + reinterpret_cast<ID3D11Texture2D*>(staging_buffer1_.Get()), + reinterpret_cast<ID3D11Texture2D*>(gpu_buffer_.Get()), + NumEncryptedBytesAtBeginningGreaterOrEq(encrypted_input.size()), + sizeof(kAnyKeyBlob), kAnyKeyBlob, _, _)); EXPECT_CALL(*device_context_mock_.Get(), - CopyResource(staging_buffer2, gpu_buffer)); + CopyResource(staging_buffer2_.Get(), gpu_buffer_.Get())); D3D11_MAPPED_SUBRESOURCE staging_buffer2_subresource = {}; @@ -241,10 +265,10 @@ // Tt should be requesting for a memory mapped buffer, from the staging // buffer, to read the decrypted data out from the GPU buffer. EXPECT_CALL(*device_context_mock_.Get(), - Map(staging_buffer2, 0, D3D11_MAP_READ, _, _)) + Map(staging_buffer2_.Get(), 0, D3D11_MAP_READ, _, _)) .WillOnce( DoAll(SetArgPointee<4>(staging_buffer2_subresource), Return(S_OK))); - EXPECT_CALL(*device_context_mock_.Get(), Unmap(staging_buffer2, 0)); + EXPECT_CALL(*device_context_mock_.Get(), Unmap(staging_buffer2_.Get(), 0)); CallbackMock callbacks; EXPECT_CALL(callbacks, @@ -269,6 +293,11 @@ ComPtr<D3D11DeviceMock> device_mock_; ComPtr<D3D11DeviceContextMock> device_context_mock_; ComPtr<D3D11VideoContextMock> video_context_mock_; + + private: + ComPtr<D3D11BufferMock> staging_buffer1_; + ComPtr<D3D11BufferMock> staging_buffer2_; + ComPtr<D3D11BufferMock> gpu_buffer_; }; // Verify that full sample encrypted sample works. @@ -285,27 +314,46 @@ static_assert(base::size(kFakeDecryptedData) == base::size(kInput), "Fake input and output data size must match."); - CdmProxyContext::D3D11DecryptContext decrypt_context = {}; ComPtr<D3D11CryptoSessionMock> crypto_session_mock = CreateD3D11Mock<D3D11CryptoSessionMock>(); - decrypt_context.crypto_session = crypto_session_mock.Get(); - decrypt_context.key_blob = kAnyKeyBlob; - decrypt_context.key_blob_size = base::size(kAnyKeyBlob); - decrypt_context.key_info_guid = TEST_GUID; - - ComPtr<D3D11BufferMock> staging_buffer1 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> staging_buffer2 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> gpu_buffer = CreateD3D11Mock<D3D11BufferMock>(); - - SetExpectationsForSuccessfulBufferInitialization( - crypto_session_mock.Get(), staging_buffer1.Get(), staging_buffer2.Get(), - gpu_buffer.Get(), &decrypt_context); + CdmProxyContext::D3D11DecryptContext decrypt_context = + TestDecryptContext(crypto_session_mock); + SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), + &decrypt_context); // The entire sample is encrypted so the encrypted/decrypted portions are the // input/output. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), staging_buffer1.Get(), - staging_buffer2.Get(), gpu_buffer.Get(), kInput, - kInput, kFakeDecryptedData, kFakeDecryptedData, + ExpectSuccessfulDecryption(crypto_session_mock.Get(), kInput, kInput, + kFakeDecryptedData, kFakeDecryptedData, + {kSubsample}, decryptor_.get()); +} + +// Verify that it works for encrypted input that's not a multiple of 16. +TEST_F(D3D11DecryptorTest, InputSizeNotMultipleOf16) { + const uint8_t kInput[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + }; + const SubsampleEntry kSubsample(0, base::size(kInput)); + // This is arbitrary. Just used to check that this value is output from the + // method. + const uint8_t kFakeDecryptedData[] = { + 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, + }; + static_assert(base::size(kFakeDecryptedData) == base::size(kInput), + "Fake input and output data size must match."); + + ComPtr<D3D11CryptoSessionMock> crypto_session_mock = + CreateD3D11Mock<D3D11CryptoSessionMock>(); + CdmProxyContext::D3D11DecryptContext decrypt_context = + TestDecryptContext(crypto_session_mock); + + SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), + &decrypt_context); + + // The entire sample is encrypted so the encrypted/decrypted portions are the + // input/output. + ExpectSuccessfulDecryption(crypto_session_mock.Get(), kInput, kInput, + kFakeDecryptedData, kFakeDecryptedData, {kSubsample}, decryptor_.get()); } @@ -349,26 +397,16 @@ const std::vector<SubsampleEntry> subsamples = {SubsampleEntry(16, 16), SubsampleEntry(5, 16)}; - CdmProxyContext::D3D11DecryptContext decrypt_context = {}; ComPtr<D3D11CryptoSessionMock> crypto_session_mock = CreateD3D11Mock<D3D11CryptoSessionMock>(); - decrypt_context.crypto_session = crypto_session_mock.Get(); - decrypt_context.key_blob = kAnyKeyBlob; - decrypt_context.key_blob_size = base::size(kAnyKeyBlob); - decrypt_context.key_info_guid = TEST_GUID; + CdmProxyContext::D3D11DecryptContext decrypt_context = + TestDecryptContext(crypto_session_mock); - ComPtr<D3D11BufferMock> staging_buffer1 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> staging_buffer2 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> gpu_buffer = CreateD3D11Mock<D3D11BufferMock>(); - - SetExpectationsForSuccessfulBufferInitialization( - crypto_session_mock.Get(), staging_buffer1.Get(), staging_buffer2.Get(), - gpu_buffer.Get(), &decrypt_context); - - ExpectSuccessfulDecryption(crypto_session_mock.Get(), staging_buffer1.Get(), - staging_buffer2.Get(), gpu_buffer.Get(), kInput, - kInputEncrypted, kFakeOutputData, - kFakeDecryptedData, subsamples, decryptor_.get()); + SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), + &decrypt_context); + ExpectSuccessfulDecryption(crypto_session_mock.Get(), kInput, kInputEncrypted, + kFakeOutputData, kFakeDecryptedData, subsamples, + decryptor_.get()); } // Verify that if the input is too big, it fails. This may be removed if the @@ -379,22 +417,13 @@ std::array<uint8_t, 1000000> kInput; const SubsampleEntry kSubsample(0, base::size(kInput)); - CdmProxyContext::D3D11DecryptContext decrypt_context = {}; ComPtr<D3D11CryptoSessionMock> crypto_session_mock = CreateD3D11Mock<D3D11CryptoSessionMock>(); - decrypt_context.crypto_session = crypto_session_mock.Get(); - decrypt_context.key_blob = kAnyKeyBlob; - decrypt_context.key_blob_size = base::size(kAnyKeyBlob); - decrypt_context.key_info_guid = TEST_GUID; + CdmProxyContext::D3D11DecryptContext decrypt_context = + TestDecryptContext(crypto_session_mock); - ComPtr<D3D11BufferMock> staging_buffer1 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> staging_buffer2 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> gpu_buffer = CreateD3D11Mock<D3D11BufferMock>(); - - SetExpectationsForSuccessfulBufferInitialization( - crypto_session_mock.Get(), staging_buffer1.Get(), staging_buffer2.Get(), - gpu_buffer.Get(), &decrypt_context); - + SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), + &decrypt_context); CallbackMock callbacks; EXPECT_CALL(callbacks, DecryptCallback(Decryptor::kError, IsNull())); @@ -408,16 +437,14 @@ // If there is no decrypt config, it must be in the clear, so it shouldn't // change the output. TEST_F(D3D11DecryptorTest, NoDecryptConfig) { - const uint8_t kInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; scoped_refptr<DecoderBuffer> clear_buffer = - DecoderBuffer::CopyFrom(kInput, base::size(kInput)); + DecoderBuffer::CopyFrom(kAnyInput, base::size(kAnyInput)); clear_buffer->set_timestamp(kTestTimestamp); CallbackMock callbacks; - EXPECT_CALL(callbacks, - DecryptCallback(Decryptor::kSuccess, - OutputDataEquals(kInput, base::size(kInput)))); + EXPECT_CALL( + callbacks, + DecryptCallback(Decryptor::kSuccess, + OutputDataEquals(kAnyInput, base::size(kAnyInput)))); decryptor_->Decrypt(Decryptor::kAudio, clear_buffer, base::BindRepeating(&CallbackMock::DecryptCallback, base::Unretained(&callbacks))); @@ -425,14 +452,10 @@ // The current decryptor cannot deal with pattern encryption. TEST_F(D3D11DecryptorTest, PatternDecryption) { - const uint8_t kInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; scoped_refptr<DecoderBuffer> encrypted_buffer = - DecoderBuffer::CopyFrom(kInput, base::size(kInput)); - std::vector<SubsampleEntry> subsamples = {SubsampleEntry(0, 16)}; + DecoderBuffer::CopyFrom(kAnyInput, base::size(kAnyInput)); encrypted_buffer->set_decrypt_config(DecryptConfig::CreateCbcsConfig( - kKeyId, kIv, subsamples, EncryptionPattern(1, 9))); + kKeyId, kIv, {kAnyInputSubsample}, EncryptionPattern(1, 9))); CallbackMock callbacks; EXPECT_CALL(callbacks, DecryptCallback(Decryptor::kError, IsNull())); @@ -443,12 +466,8 @@ // If there is no decrypt context, it's missing a key. TEST_F(D3D11DecryptorTest, NoDecryptContext) { - const uint8_t kInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; - const SubsampleEntry kSubsample(0, base::size(kInput)); - scoped_refptr<DecoderBuffer> encrypted_buffer = - TestDecoderBuffer(kInput, base::size(kInput), kKeyId, kIv, {kSubsample}); + scoped_refptr<DecoderBuffer> encrypted_buffer = TestDecoderBuffer( + kAnyInput, base::size(kAnyInput), kKeyId, kIv, {kAnyInputSubsample}); EXPECT_CALL(mock_proxy_, GetD3D11DecryptContext(kKeyId)) .WillOnce(Return(base::nullopt)); @@ -463,32 +482,18 @@ // Verify that if the crypto session's device is the same as the previous call, // the buffers aren't recreated. TEST_F(D3D11DecryptorTest, ReuseBuffers) { - const uint8_t kInput[] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - }; - const SubsampleEntry kSubsample(0, base::size(kInput)); - - CdmProxyContext::D3D11DecryptContext decrypt_context = {}; ComPtr<D3D11CryptoSessionMock> crypto_session_mock = CreateD3D11Mock<D3D11CryptoSessionMock>(); - decrypt_context.crypto_session = crypto_session_mock.Get(); - decrypt_context.key_blob = kAnyKeyBlob; - decrypt_context.key_blob_size = base::size(kAnyKeyBlob); - decrypt_context.key_info_guid = TEST_GUID; + CdmProxyContext::D3D11DecryptContext decrypt_context = + TestDecryptContext(crypto_session_mock); - ComPtr<D3D11BufferMock> staging_buffer1 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> staging_buffer2 = CreateD3D11Mock<D3D11BufferMock>(); - ComPtr<D3D11BufferMock> gpu_buffer = CreateD3D11Mock<D3D11BufferMock>(); - - SetExpectationsForSuccessfulBufferInitialization( - crypto_session_mock.Get(), staging_buffer1.Get(), staging_buffer2.Get(), - gpu_buffer.Get(), &decrypt_context); + SetExpectationsForSuccessfulBufferInitialization(crypto_session_mock.Get(), + &decrypt_context); // This test doesn't require checking the output or the correctness of the // decyrption, so just pass the input buffer for output. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), staging_buffer1.Get(), - staging_buffer2.Get(), gpu_buffer.Get(), kInput, - kInput, kInput, kInput, {kSubsample}, + ExpectSuccessfulDecryption(crypto_session_mock.Get(), kAnyInput, kAnyInput, + kAnyInput, kAnyInput, {kAnyInputSubsample}, decryptor_.get()); Mock::VerifyAndClearExpectations(crypto_session_mock.Get()); Mock::VerifyAndClearExpectations(device_mock_.Get()); @@ -507,9 +512,8 @@ EXPECT_CALL(*device_mock_.Get(), CreateBuffer(_, _, _)).Times(0); // This calls Decrypt() so that the expectations above are triggered. - ExpectSuccessfulDecryption(crypto_session_mock.Get(), staging_buffer1.Get(), - staging_buffer2.Get(), gpu_buffer.Get(), kInput, - kInput, kInput, kInput, {kSubsample}, + ExpectSuccessfulDecryption(crypto_session_mock.Get(), kAnyInput, kAnyInput, + kAnyInput, kAnyInput, {kAnyInputSubsample}, decryptor_.get()); }
diff --git a/media/renderers/video_renderer_impl.cc b/media/renderers/video_renderer_impl.cc index 997a949..2addf9c8 100644 --- a/media/renderers/video_renderer_impl.cc +++ b/media/renderers/video_renderer_impl.cc
@@ -350,6 +350,12 @@ void VideoRendererImpl::OnPlaybackEnded() { DCHECK(task_runner_->BelongsToCurrentThread()); + { + // Send one last stats update so things like memory usage are correct. + base::AutoLock auto_lock(lock_); + UpdateStats_Locked(true); + } + client_->OnEnded(); } @@ -659,14 +665,16 @@ base::ResetAndReturn(&flush_cb_).Run(); } -void VideoRendererImpl::UpdateStats_Locked() { +void VideoRendererImpl::UpdateStats_Locked(bool force_update) { DCHECK(task_runner_->BelongsToCurrentThread()); lock_.AssertAcquired(); // No need to check for `stats_.video_frames_decoded_power_efficient` because // if it is greater than 0, `stats_.video_frames_decoded` will too. - if (!stats_.video_frames_decoded && !stats_.video_frames_dropped) + if (!force_update && !stats_.video_frames_decoded && + !stats_.video_frames_dropped) { return; + } if (stats_.video_frames_dropped) { TRACE_EVENT_INSTANT2("media", "VideoFramesDropped",
diff --git a/media/renderers/video_renderer_impl.h b/media/renderers/video_renderer_impl.h index 49cc84d3..6e7bc2e 100644 --- a/media/renderers/video_renderer_impl.h +++ b/media/renderers/video_renderer_impl.h
@@ -124,8 +124,9 @@ void TransitionToHaveNothing_Locked(); // Runs |statistics_cb_| with |frames_decoded_| and |frames_dropped_|, resets - // them to 0. - void UpdateStats_Locked(); + // them to 0. If |force_update| is true, sends an update even if no frames + // have been decoded since the last update. + void UpdateStats_Locked(bool force_update = false); // Returns true if there is no more room for additional buffered frames. bool HaveReachedBufferingCap() const;
diff --git a/media/renderers/video_renderer_impl_unittest.cc b/media/renderers/video_renderer_impl_unittest.cc index ce74ddd0..5ac2446f 100644 --- a/media/renderers/video_renderer_impl_unittest.cc +++ b/media/renderers/video_renderer_impl_unittest.cc
@@ -878,6 +878,9 @@ // calls must all have occurred before playback starts. EXPECT_EQ(0u, last_pipeline_statistics.video_frames_dropped); EXPECT_EQ(1u, last_pipeline_statistics.video_frames_decoded); + + // Note: This is not the total, but just the increase in the last call since + // the previous call, the total should be 4 * 115200. EXPECT_EQ(115200, last_pipeline_statistics.video_memory_usage); // Consider the case that rendering is faster than we setup the test event. @@ -898,10 +901,21 @@ AdvanceTimeInMs(91); EXPECT_CALL(mock_cb_, FrameReceived(HasTimestampMatcher(90))); WaitForPendingDecode(); + + EXPECT_CALL(mock_cb_, OnStatisticsUpdate(_)) + .WillOnce(SaveArg<0>(&last_pipeline_statistics)); SatisfyPendingDecodeWithEndOfStream(); AdvanceTimeInMs(30); WaitForEnded(); + + EXPECT_EQ(0u, last_pipeline_statistics.video_frames_dropped); + EXPECT_EQ(0u, last_pipeline_statistics.video_frames_decoded); + + // Memory usage is relative, so the prior lines increased memory usage to + // 4 * 115200, so this last one should show we only have 1 frame left. + EXPECT_EQ(-3 * 115200, last_pipeline_statistics.video_memory_usage); + Destroy(); }
diff --git a/net/BUILD.gn b/net/BUILD.gn index 92762958..c798c87 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -1335,8 +1335,6 @@ "third_party/quic/core/frames/quic_connection_close_frame.cc", "third_party/quic/core/frames/quic_connection_close_frame.h", "third_party/quic/core/frames/quic_control_frame.h", - "third_party/quic/core/frames/quic_crypto_frame.cc", - "third_party/quic/core/frames/quic_crypto_frame.h", "third_party/quic/core/frames/quic_frame.cc", "third_party/quic/core/frames/quic_frame.h", "third_party/quic/core/frames/quic_goaway_frame.cc",
diff --git a/net/quic/quic_flags_list.h b/net/quic/quic_flags_list.h index 7a5f95e..31426270 100644 --- a/net/quic/quic_flags_list.h +++ b/net/quic/quic_flags_list.h
@@ -161,7 +161,7 @@ // If true, try to aggregate acked stream frames. QUIC_FLAG(bool, - FLAGS_quic_reloadable_flag_quic_aggregate_acked_stream_frames_2, + FLAGS_quic_reloadable_flag_quic_aggregate_acked_stream_frames, false) // If true, only process stateless reset packets on the client side. @@ -184,7 +184,9 @@ // If true, when session decides what to write, set a approximate retransmission // for packets to be retransmitted. Also check packet state in // IsPacketUsefulForRetransmittableData. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_is_useful_for_retrans, true) +QUIC_FLAG(bool, + FLAGS_quic_reloadable_flag_quic_fix_is_useful_for_retrans, + false) // If true, QUIC connection will notify the debug visitor after a connectivity // probing is sent. @@ -231,7 +233,4 @@ false) // If true, enable version 45. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_45, false) - -// This flag fixes a bug where a zombie stream cannot be correctly reset. -QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_reset_zombie_streams, false) +QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_45, false) \ No newline at end of file
diff --git a/net/third_party/quic/core/chlo_extractor.cc b/net/third_party/quic/core/chlo_extractor.cc index 27ab8e2..60ac9654 100644 --- a/net/third_party/quic/core/chlo_extractor.cc +++ b/net/third_party/quic/core/chlo_extractor.cc
@@ -38,11 +38,11 @@ void OnDecryptedPacket(EncryptionLevel level) override {} bool OnPacketHeader(const QuicPacketHeader& header) override; bool OnStreamFrame(const QuicStreamFrame& frame) override; - bool OnCryptoFrame(const QuicCryptoFrame& frame) override; bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override; - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override; - bool OnAckFrameEnd(QuicPacketNumber start) override; + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) override; bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override; bool OnPingFrame(const QuicPingFrame& frame) override; bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override; @@ -140,22 +140,14 @@ return true; } -bool ChloFramerVisitor::OnCryptoFrame(const QuicCryptoFrame& frame) { - // TODO(nharper): Implement. - return false; -} - bool ChloFramerVisitor::OnAckFrameStart(QuicPacketNumber /*largest_acked*/, QuicTime::Delta /*ack_delay_time*/) { return true; } bool ChloFramerVisitor::OnAckRange(QuicPacketNumber /*start*/, - QuicPacketNumber /*end*/) { - return true; -} - -bool ChloFramerVisitor::OnAckFrameEnd(QuicPacketNumber /*start*/) { + QuicPacketNumber /*end*/, + bool /*last_range*/) { return true; }
diff --git a/net/third_party/quic/core/frames/quic_crypto_frame.cc b/net/third_party/quic/core/frames/quic_crypto_frame.cc deleted file mode 100644 index a1c4cdb..0000000 --- a/net/third_party/quic/core/frames/quic_crypto_frame.cc +++ /dev/null
@@ -1,30 +0,0 @@ -// Copyright (c) 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "net/third_party/quic/core/frames/quic_crypto_frame.h" - -#include "net/third_party/quic/platform/api/quic_logging.h" - -namespace quic { - -QuicCryptoFrame::QuicCryptoFrame() : QuicCryptoFrame(0, nullptr, 0) {} - -QuicCryptoFrame::QuicCryptoFrame(QuicStreamOffset offset, QuicStringPiece data) - : QuicCryptoFrame(offset, data.data(), data.length()) {} - -QuicCryptoFrame::QuicCryptoFrame(QuicStreamOffset offset, - const char* data_buffer, - QuicPacketLength data_length) - : data_length(data_length), data_buffer(data_buffer), offset(offset) {} - -QuicCryptoFrame::~QuicCryptoFrame() {} - -std::ostream& operator<<(std::ostream& os, - const QuicCryptoFrame& stream_frame) { - os << "{ offset: " << stream_frame.offset - << ", length: " << stream_frame.data_length << " }\n"; - return os; -} - -} // namespace quic
diff --git a/net/third_party/quic/core/frames/quic_crypto_frame.h b/net/third_party/quic/core/frames/quic_crypto_frame.h deleted file mode 100644 index fed0d3a6..0000000 --- a/net/third_party/quic/core/frames/quic_crypto_frame.h +++ /dev/null
@@ -1,42 +0,0 @@ -// Copyright (c) 2018 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef NET_THIRD_PARTY_QUIC_CORE_FRAMES_QUIC_CRYPTO_FRAME_H_ -#define NET_THIRD_PARTY_QUIC_CORE_FRAMES_QUIC_CRYPTO_FRAME_H_ - -#include <memory> -#include <ostream> - -#include "net/third_party/quic/core/quic_buffer_allocator.h" -#include "net/third_party/quic/core/quic_types.h" -#include "net/third_party/quic/platform/api/quic_export.h" -#include "net/third_party/quic/platform/api/quic_string_piece.h" - -namespace quic { - -struct QUIC_EXPORT_PRIVATE QuicCryptoFrame { - QuicCryptoFrame(); - QuicCryptoFrame(QuicStreamOffset offset, QuicStringPiece data); - ~QuicCryptoFrame(); - - friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, - const QuicCryptoFrame& s); - - QuicPacketLength data_length; - // When reading, |data_buffer| points to the data that was received in the - // frame. When writing, |data_buffer| must be a valid pointer for the lifetime - // of the frame, which may get serialized some time after creation. - const char* data_buffer; - QuicStreamOffset offset; // Location of this data in the stream. - - QuicCryptoFrame(QuicStreamOffset offset, - const char* data_buffer, - QuicPacketLength data_length); -}; -static_assert(sizeof(QuicCryptoFrame) <= 64, - "Keep the QuicCryptoFrame size to a cacheline."); - -} // namespace quic - -#endif // NET_THIRD_PARTY_QUIC_CORE_FRAMES_QUIC_CRYPTO_FRAME_H_
diff --git a/net/third_party/quic/core/frames/quic_frame.cc b/net/third_party/quic/core/frames/quic_frame.cc index 8ada26e..6a1902a 100644 --- a/net/third_party/quic/core/frames/quic_frame.cc +++ b/net/third_party/quic/core/frames/quic_frame.cc
@@ -19,9 +19,6 @@ QuicFrame::QuicFrame(QuicStreamFrame stream_frame) : stream_frame(stream_frame) {} -QuicFrame::QuicFrame(QuicCryptoFrame* crypto_frame) - : type(CRYPTO_FRAME), crypto_frame(crypto_frame) {} - QuicFrame::QuicFrame(QuicAckFrame* frame) : type(ACK_FRAME), ack_frame(frame) {} QuicFrame::QuicFrame(QuicMtuDiscoveryFrame frame) @@ -128,9 +125,6 @@ case MESSAGE_FRAME: delete frame->message_frame; break; - case CRYPTO_FRAME: - delete frame->crypto_frame; - break; case NUM_FRAME_TYPES: DCHECK(false) << "Cannot delete type: " << frame->type;
diff --git a/net/third_party/quic/core/frames/quic_frame.h b/net/third_party/quic/core/frames/quic_frame.h index 5815eac..ab712a9b 100644 --- a/net/third_party/quic/core/frames/quic_frame.h +++ b/net/third_party/quic/core/frames/quic_frame.h
@@ -12,7 +12,6 @@ #include "net/third_party/quic/core/frames/quic_application_close_frame.h" #include "net/third_party/quic/core/frames/quic_blocked_frame.h" #include "net/third_party/quic/core/frames/quic_connection_close_frame.h" -#include "net/third_party/quic/core/frames/quic_crypto_frame.h" #include "net/third_party/quic/core/frames/quic_goaway_frame.h" #include "net/third_party/quic/core/frames/quic_max_stream_id_frame.h" #include "net/third_party/quic/core/frames/quic_message_frame.h" @@ -57,7 +56,6 @@ explicit QuicFrame(QuicPathChallengeFrame* frame); explicit QuicFrame(QuicStopSendingFrame* frame); explicit QuicFrame(QuicMessageFrame* message_frame); - explicit QuicFrame(QuicCryptoFrame* crypto_frame); QUIC_EXPORT_PRIVATE friend std::ostream& operator<<(std::ostream& os, const QuicFrame& frame); @@ -96,7 +94,6 @@ QuicPathChallengeFrame* path_challenge_frame; QuicStopSendingFrame* stop_sending_frame; QuicMessageFrame* message_frame; - QuicCryptoFrame* crypto_frame; }; }; };
diff --git a/net/third_party/quic/core/quic_alarm_factory.h b/net/third_party/quic/core/quic_alarm_factory.h index 8c94f8d..cde152f 100644 --- a/net/third_party/quic/core/quic_alarm_factory.h +++ b/net/third_party/quic/core/quic_alarm_factory.h
@@ -11,6 +11,10 @@ namespace quic { +// QuicConnections currently use around 1KB of polymorphic types which would +// ordinarily be on the heap. Instead, store them inline in an arena. +using QuicConnectionArena = QuicOneBlockArena<1024>; + // Creates platform-specific alarms used throughout QUIC. class QUIC_EXPORT_PRIVATE QuicAlarmFactory { public:
diff --git a/net/third_party/quic/core/quic_connection.cc b/net/third_party/quic/core/quic_connection.cc index b894f77..ed0db5c 100644 --- a/net/third_party/quic/core/quic_connection.cc +++ b/net/third_party/quic/core/quic_connection.cc
@@ -855,11 +855,6 @@ return connected_; } -bool QuicConnection::OnCryptoFrame(const QuicCryptoFrame& frame) { - // TODO(nharper): Implement. - return false; -} - bool QuicConnection::OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) { DCHECK(connected_); @@ -914,9 +909,12 @@ return true; } -bool QuicConnection::OnAckRange(QuicPacketNumber start, QuicPacketNumber end) { +bool QuicConnection::OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) { DCHECK(connected_); - QUIC_DVLOG(1) << ENDPOINT << "OnAckRange: [" << start << ", " << end << ")"; + QUIC_DVLOG(1) << ENDPOINT << "OnAckRange: [" << start << ", " << end + << "), last_range: " << last_range; if (last_header_.packet_number <= largest_seen_packet_with_ack_) { QUIC_DLOG(INFO) << ENDPOINT << "Received an old ack frame: ignoring"; @@ -924,15 +922,7 @@ } sent_packet_manager_.OnAckRange(start, end); - return true; -} - -bool QuicConnection::OnAckFrameEnd(QuicPacketNumber start) { - DCHECK(connected_); - QUIC_DVLOG(1) << ENDPOINT << "OnAckFrameEnd, start: " << start; - - if (last_header_.packet_number <= largest_seen_packet_with_ack_) { - QUIC_DLOG(INFO) << ENDPOINT << "Received an old ack frame: ignoring"; + if (!last_range) { return true; } bool acked_new_packet = @@ -3171,8 +3161,6 @@ SetPathDegradingAlarm(); } - // TODO(ianswett): Only increment stop_waiting_count_ if StopWaiting frames - // are sent. if (send_stop_waiting) { ++stop_waiting_count_; } else {
diff --git a/net/third_party/quic/core/quic_connection.h b/net/third_party/quic/core/quic_connection.h index 49f9a1c..b7b5c19 100644 --- a/net/third_party/quic/core/quic_connection.h +++ b/net/third_party/quic/core/quic_connection.h
@@ -294,6 +294,10 @@ virtual void OnRttChanged(QuicTime::Delta rtt) const {} }; +// QuicConnections currently use around 1KB of polymorphic types which would +// ordinarily be on the heap. Instead, store them inline in an arena. +using QuicConnectionArena = QuicOneBlockArena<1024>; + class QUIC_EXPORT_PRIVATE QuicConnectionHelperInterface { public: virtual ~QuicConnectionHelperInterface() {} @@ -467,11 +471,11 @@ void OnDecryptedPacket(EncryptionLevel level) override; bool OnPacketHeader(const QuicPacketHeader& header) override; bool OnStreamFrame(const QuicStreamFrame& frame) override; - bool OnCryptoFrame(const QuicCryptoFrame& frame) override; bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override; - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override; - bool OnAckFrameEnd(QuicPacketNumber start) override; + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) override; bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override; bool OnPaddingFrame(const QuicPaddingFrame& frame) override; bool OnPingFrame(const QuicPingFrame& frame) override;
diff --git a/net/third_party/quic/core/quic_dispatcher.cc b/net/third_party/quic/core/quic_dispatcher.cc index 99a2537..5e730cf 100644 --- a/net/third_party/quic/core/quic_dispatcher.cc +++ b/net/third_party/quic/core/quic_dispatcher.cc
@@ -709,11 +709,6 @@ return false; } -bool QuicDispatcher::OnCryptoFrame(const QuicCryptoFrame& /*frame*/) { - DCHECK(false); - return false; -} - bool QuicDispatcher::OnAckFrameStart(QuicPacketNumber /*largest_acked*/, QuicTime::Delta /*ack_delay_time*/) { DCHECK(false); @@ -721,12 +716,8 @@ } bool QuicDispatcher::OnAckRange(QuicPacketNumber /*start*/, - QuicPacketNumber /*end*/) { - DCHECK(false); - return false; -} - -bool QuicDispatcher::OnAckFrameEnd(QuicPacketNumber start) { + QuicPacketNumber /*end*/, + bool /*last_range*/) { DCHECK(false); return false; }
diff --git a/net/third_party/quic/core/quic_dispatcher.h b/net/third_party/quic/core/quic_dispatcher.h index 3a3b04f..8984e47c 100644 --- a/net/third_party/quic/core/quic_dispatcher.h +++ b/net/third_party/quic/core/quic_dispatcher.h
@@ -136,11 +136,11 @@ void OnDecryptedPacket(EncryptionLevel level) override; bool OnPacketHeader(const QuicPacketHeader& header) override; bool OnStreamFrame(const QuicStreamFrame& frame) override; - bool OnCryptoFrame(const QuicCryptoFrame& frame) override; bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override; - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override; - bool OnAckFrameEnd(QuicPacketNumber start) override; + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) override; bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override; bool OnPaddingFrame(const QuicPaddingFrame& frame) override; bool OnPingFrame(const QuicPingFrame& frame) override;
diff --git a/net/third_party/quic/core/quic_framer.cc b/net/third_party/quic/core/quic_framer.cc index f026bef..ab669d5 100644 --- a/net/third_party/quic/core/quic_framer.cc +++ b/net/third_party/quic/core/quic_framer.cc
@@ -472,7 +472,6 @@ case MTU_DISCOVERY_FRAME: case PADDING_FRAME: case MESSAGE_FRAME: - case CRYPTO_FRAME: case NUM_FRAME_TYPES: DCHECK(false); return 0; @@ -733,10 +732,6 @@ return 0; } break; - case CRYPTO_FRAME: - set_detailed_error( - "Attempt to append CRYPTO frame and not in version 99."); - return RaiseError(QUIC_INTERNAL_ERROR); default: RaiseError(QUIC_INVALID_FRAME_DATA); @@ -888,12 +883,6 @@ return 0; } break; - case CRYPTO_FRAME: - if (!AppendCryptoFrame(*frame.crypto_frame, &writer)) { - QUIC_BUG << "AppendCryptoFrame failed"; - return 0; - } - break; default: RaiseError(QUIC_INVALID_FRAME_DATA); QUIC_BUG << "QUIC_INVALID_FRAME_DATA"; @@ -2326,18 +2315,6 @@ } break; } - case IETF_CRYPTO: { - QuicCryptoFrame frame; - if (!ProcessCryptoFrame(reader, &frame)) { - return RaiseError(QUIC_INVALID_FRAME_DATA); - } - if (!visitor_->OnCryptoFrame(frame)) { - QUIC_DVLOG(1) << "Visitor asked to stop further processing."; - // Returning true since there was no parsing error. - return true; - } - break; - } default: set_detailed_error("Illegal frame type."); @@ -2493,30 +2470,6 @@ return true; } -bool QuicFramer::ProcessCryptoFrame(QuicDataReader* reader, - QuicCryptoFrame* frame) { - if (!reader->ReadVarInt62(&frame->offset)) { - set_detailed_error("Unable to read crypto data offset."); - return false; - } - uint64_t len; - if (!reader->ReadVarInt62(&len) || - len > std::numeric_limits<QuicPacketLength>::max()) { - set_detailed_error("Invalid data length."); - return false; - } - frame->data_length = len; - - // TODO(ianswett): Don't use QuicStringPiece as an intermediary. - QuicStringPiece data; - if (!reader->ReadStringPiece(&data, frame->data_length)) { - set_detailed_error("Unable to read frame data."); - return false; - } - frame->data_buffer = data.data(); - return true; -} - bool QuicFramer::ProcessAckFrame(QuicDataReader* reader, uint8_t frame_type) { const bool has_ack_blocks = ExtractBit(frame_type, kQuicHasMultipleAckBlocksOffset); @@ -2591,7 +2544,8 @@ } QuicPacketNumber first_received = largest_acked + 1 - first_block_length; - if (!visitor_->OnAckRange(first_received, largest_acked + 1)) { + if (!visitor_->OnAckRange(first_received, largest_acked + 1, + /*last_range=*/!has_ack_blocks)) { // The visitor suppresses further processing of the packet. Although // this is not a parsing error, returns false as this is in middle // of processing an ack frame, @@ -2620,9 +2574,11 @@ } first_received -= (gap + current_block_length); - if (current_block_length > 0) { + const bool last_range = i + 1 == num_ack_blocks; + if (current_block_length > 0 || last_range) { if (!visitor_->OnAckRange(first_received, - first_received + current_block_length)) { + first_received + current_block_length, + last_range)) { // The visitor suppresses further processing of the packet. Although // this is not a parsing error, returns false as this is in middle // of processing an ack frame, @@ -2643,8 +2599,7 @@ return false; } - // Done processing the ACK frame. - return visitor_->OnAckFrameEnd(first_received); + return true; } bool QuicFramer::ProcessTimestampsInAckFrame(uint8_t num_received_packets, @@ -2746,7 +2701,8 @@ return false; } - if (!visitor_->OnAckRange(block_low, block_high)) { + if (!visitor_->OnAckRange(block_low, block_high, + /* last_range= */ (ack_block_count == 0))) { // The visitor suppresses further processing of the packet. Although // this is not a parsing error, returns false as this is in middle // of processing an ACK frame. @@ -2799,7 +2755,8 @@ // Calculate the low end of the new nth ack block. The +1 is // because the encoded value is the blocksize-1. block_low = block_high - 1 - ack_block_value; - if (!visitor_->OnAckRange(block_low, block_high)) { + if (!visitor_->OnAckRange(block_low, block_high, + /*last_range=*/(ack_block_count == 1))) { // The visitor suppresses further processing of the packet. Although // this is not a parsing error, returns false as this is in middle // of processing an ACK frame. @@ -2810,8 +2767,7 @@ // Another one done. ack_block_count--; } - - return visitor_->OnAckFrameEnd(block_low); + return true; } bool QuicFramer::ProcessStopWaitingFrame(QuicDataReader* reader, @@ -3280,7 +3236,6 @@ frame.stream_frame.offset, last_frame_in_packet, frame.stream_frame.data_length) + frame.stream_frame.data_length; - // TODO(nharper): Add a case for CRYPTO_FRAME here? case ACK_FRAME: { return GetAckFrameSize(*frame.ack_frame, packet_number_length); } @@ -3436,9 +3391,6 @@ break; case MESSAGE_FRAME: return true; - case CRYPTO_FRAME: - type_byte = IETF_CRYPTO; - break; default: QUIC_BUG << "Attempt to generate a frame type for an unsupported value: " << frame.type; @@ -3611,20 +3563,6 @@ return true; } -bool QuicFramer::AppendCryptoFrame(const QuicCryptoFrame& frame, - QuicDataWriter* writer) { - if (!writer->WriteVarInt62(static_cast<uint64_t>(frame.offset))) { - set_detailed_error("Writing data offset failed."); - return false; - } - if (!writer->WriteVarInt62(static_cast<uint64_t>(frame.data_length))) { - set_detailed_error("Writing data length failed."); - return false; - } - // TODO(nharper): Append stream frame contents. - return false; -} - void QuicFramer::set_version(const ParsedQuicVersion version) { DCHECK(IsSupportedVersion(version)) << ParsedQuicVersionToString(version); version_ = version;
diff --git a/net/third_party/quic/core/quic_framer.h b/net/third_party/quic/core/quic_framer.h index 44d580f2..4e996cc 100644 --- a/net/third_party/quic/core/quic_framer.h +++ b/net/third_party/quic/core/quic_framer.h
@@ -114,19 +114,14 @@ // Called when a StreamFrame has been parsed. virtual bool OnStreamFrame(const QuicStreamFrame& frame) = 0; - // Called when a CRYPTO frame has been parsed. - virtual bool OnCryptoFrame(const QuicCryptoFrame& frame) = 0; - // Called when largest acked of an AckFrame has been parsed. virtual bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) = 0; // Called when ack range [start, end) of an AckFrame has been parsed. - virtual bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) = 0; - - // Called after the last ack range in an AckFrame has been parsed. - // |start| is the starting value of the last ack range. - virtual bool OnAckFrameEnd(QuicPacketNumber start) = 0; + virtual bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) = 0; // Called when a StopWaitingFrame has been parsed. virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) = 0; @@ -386,7 +381,6 @@ bool AppendStreamFrame(const QuicStreamFrame& frame, bool last_frame_in_packet, QuicDataWriter* writer); - bool AppendCryptoFrame(const QuicCryptoFrame& frame, QuicDataWriter* writer); // SetDecrypter sets the primary decrypter, replacing any that already exists. // If an alternative decrypter is in place then the function DCHECKs. This is @@ -681,7 +675,6 @@ QuicRstStreamFrame* frame); bool ProcessStopSendingFrame(QuicDataReader* reader, QuicStopSendingFrame* stop_sending_frame); - bool ProcessCryptoFrame(QuicDataReader* reader, QuicCryptoFrame* frame); // IETF frame appending methods. All methods append the type byte as well. bool AppendIetfStreamFrame(const QuicStreamFrame& frame,
diff --git a/net/third_party/quic/core/quic_framer_test.cc b/net/third_party/quic/core/quic_framer_test.cc index c8aefc2..cd231c4b 100644 --- a/net/third_party/quic/core/quic_framer_test.cc +++ b/net/third_party/quic/core/quic_framer_test.cc
@@ -213,11 +213,6 @@ return true; } - bool OnCryptoFrame(const QuicCryptoFrame& frame) override { - // TODO(nharper): Implement. - return true; - } - bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override { ++frame_count_; @@ -228,14 +223,14 @@ return true; } - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override { + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool /*last_range*/) override { DCHECK(!ack_frames_.empty()); ack_frames_[ack_frames_.size() - 1]->packets.AddRange(start, end); return true; } - bool OnAckFrameEnd(QuicPacketNumber /*start*/) override { return true; } - bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { ++frame_count_; stop_waiting_frames_.push_back(QuicMakeUnique<QuicStopWaitingFrame>(frame));
diff --git a/net/third_party/quic/core/quic_ietf_framer_test.cc b/net/third_party/quic/core/quic_ietf_framer_test.cc index 4e94d9e..6200fe4 100644 --- a/net/third_party/quic/core/quic_ietf_framer_test.cc +++ b/net/third_party/quic/core/quic_ietf_framer_test.cc
@@ -106,19 +106,17 @@ bool OnStreamFrame(const QuicStreamFrame& frame) override { return true; } - bool OnCryptoFrame(const QuicCryptoFrame& frame) override { return true; } - bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override { return true; } - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override { + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool /*last_range*/) override { return true; } - bool OnAckFrameEnd(QuicPacketNumber start) override { return true; } - bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { return true; }
diff --git a/net/third_party/quic/core/quic_one_block_arena.h b/net/third_party/quic/core/quic_one_block_arena.h index eb830711..c07c2cc 100644 --- a/net/third_party/quic/core/quic_one_block_arena.h +++ b/net/third_party/quic/core/quic_one_block_arena.h
@@ -74,10 +74,6 @@ QuicArenaScopedPtr<T>::ConstructFrom::kArena); } -// QuicConnections currently use around 1KB of polymorphic types which would -// ordinarily be on the heap. Instead, store them inline in an arena. -using QuicConnectionArena = QuicOneBlockArena<1024>; - } // namespace quic #endif // NET_THIRD_PARTY_QUIC_CORE_QUIC_ONE_BLOCK_ARENA_H_
diff --git a/net/third_party/quic/core/quic_packet_creator_test.cc b/net/third_party/quic/core/quic_packet_creator_test.cc index ba91a19c..9088b3dbe 100644 --- a/net/third_party/quic/core/quic_packet_creator_test.cc +++ b/net/third_party/quic/core/quic_packet_creator_test.cc
@@ -290,13 +290,13 @@ if (client_framer_.transport_version() != QUIC_VERSION_99) { // pre-version 99; ensure that the error is gracefully // handled. - EXPECT_CALL(framer_visitor_, OnAckRange(1, 1)).WillOnce(Return(true)); - EXPECT_CALL(framer_visitor_, OnAckFrameEnd(1)).WillOnce(Return(true)); + EXPECT_CALL(framer_visitor_, OnAckRange(1, 1, true)) + .WillOnce(Return(true)); } else { // version 99; ensure that the correct packet is signalled // properly. - EXPECT_CALL(framer_visitor_, OnAckRange(0, 1)).WillOnce(Return(true)); - EXPECT_CALL(framer_visitor_, OnAckFrameEnd(0)).WillOnce(Return(true)); + EXPECT_CALL(framer_visitor_, OnAckRange(0, 1, true)) + .WillOnce(Return(true)); } EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
diff --git a/net/third_party/quic/core/quic_sent_packet_manager.cc b/net/third_party/quic/core/quic_sent_packet_manager.cc index fc467e4a..9583edf 100644 --- a/net/third_party/quic/core/quic_sent_packet_manager.cc +++ b/net/third_party/quic/core/quic_sent_packet_manager.cc
@@ -112,7 +112,7 @@ rtt_updated_(false), acked_packets_iter_(last_ack_frame_.packets.rbegin()), aggregate_acked_stream_frames_( - GetQuicReloadableFlag(quic_aggregate_acked_stream_frames_2)), + GetQuicReloadableFlag(quic_aggregate_acked_stream_frames)), fix_mark_for_loss_retransmission_( GetQuicReloadableFlag(quic_fix_mark_for_loss_retransmission)) { SetSendAlgorithm(congestion_control_type);
diff --git a/net/third_party/quic/core/quic_sent_packet_manager.h b/net/third_party/quic/core/quic_sent_packet_manager.h index 2c8e1e98..87ed9df 100644 --- a/net/third_party/quic/core/quic_sent_packet_manager.h +++ b/net/third_party/quic/core/quic_sent_packet_manager.h
@@ -565,7 +565,7 @@ // OnAckRangeStart, and gradually moves in OnAckRange.. PacketNumberQueue::const_reverse_iterator acked_packets_iter_; - // Latched value of quic_reloadable_flag_quic_aggregate_acked_stream_frames_2. + // Latched value of quic_reloadable_flag_quic_aggregate_acked_stream_frames. const bool aggregate_acked_stream_frames_; // Latched value of
diff --git a/net/third_party/quic/core/quic_session.cc b/net/third_party/quic/core/quic_session.cc index 743ec7e..dff75cc 100644 --- a/net/third_party/quic/core/quic_session.cc +++ b/net/third_party/quic/core/quic_session.cc
@@ -450,12 +450,6 @@ control_frame_manager_.WriteOrBufferRstStream(id, error, bytes_written); connection_->OnStreamReset(id, error); } - if (GetQuicReloadableFlag(quic_fix_reset_zombie_streams) && - error != QUIC_STREAM_NO_ERROR && QuicContainsKey(zombie_streams_, id)) { - QUIC_FLAG_COUNT(quic_reloadable_flag_quic_fix_reset_zombie_streams); - OnStreamDoneWaitingForAcks(id); - return; - } CloseStreamInner(id, true); }
diff --git a/net/third_party/quic/core/quic_session_test.cc b/net/third_party/quic/core/quic_session_test.cc index 342a3bc..2d570cc 100644 --- a/net/third_party/quic/core/quic_session_test.cc +++ b/net/third_party/quic/core/quic_session_test.cc
@@ -106,7 +106,6 @@ TestStream(QuicStreamId id, QuicSession* session) : QuicStream(id, session, /*is_static=*/false) {} - using QuicStream::CloseReadSide; using QuicStream::CloseWriteSide; void OnDataAvailable() override {} @@ -1470,42 +1469,6 @@ EXPECT_FALSE(session_.IsFrameOutstanding(QuicFrame(&frame))); } -// Regression test of b/115323618. -TEST_P(QuicSessionTestServer, LocallyResetZombieStreams) { - QuicConnectionPeer::SetSessionDecidesWhatToWrite(connection_); - - session_.set_writev_consumes_all_data(true); - TestStream* stream2 = session_.CreateOutgoingDynamicStream(); - QuicString body(100, '.'); - stream2->CloseReadSide(); - stream2->WriteOrBufferData(body, true, nullptr); - EXPECT_TRUE(stream2->IsWaitingForAcks()); - // Verify stream2 is a zombie streams. - EXPECT_TRUE(QuicContainsKey(session_.zombie_streams(), stream2->id())); - - QuicStreamFrame frame(stream2->id(), true, 0, 100); - EXPECT_CALL(*stream2, HasPendingRetransmission()) - .WillRepeatedly(Return(true)); - session_.OnFrameLost(QuicFrame(frame)); - - // Reset stream2 locally. - EXPECT_CALL(*connection_, SendControlFrame(_)) - .WillRepeatedly(Invoke(&session_, &TestSession::ClearControlFrame)); - EXPECT_CALL(*connection_, OnStreamReset(stream2->id(), _)); - stream2->Reset(QUIC_STREAM_CANCELLED); - - if (GetQuicReloadableFlag(quic_fix_reset_zombie_streams)) { - // Verify stream 2 gets closed. - EXPECT_FALSE(QuicContainsKey(session_.zombie_streams(), stream2->id())); - EXPECT_TRUE(session_.IsClosedStream(stream2->id())); - EXPECT_CALL(*stream2, OnCanWrite()).Times(0); - } else { - EXPECT_TRUE(QuicContainsKey(session_.zombie_streams(), stream2->id())); - EXPECT_CALL(*stream2, OnCanWrite()); - } - session_.OnCanWrite(); -} - } // namespace } // namespace test } // namespace quic
diff --git a/net/third_party/quic/core/quic_trace_visitor.cc b/net/third_party/quic/core/quic_trace_visitor.cc index 4768bc9..ca1112d8 100644 --- a/net/third_party/quic/core/quic_trace_visitor.cc +++ b/net/third_party/quic/core/quic_trace_visitor.cc
@@ -88,7 +88,6 @@ case PATH_CHALLENGE_FRAME: case STOP_SENDING_FRAME: case MESSAGE_FRAME: - case CRYPTO_FRAME: break; // Ignore gQUIC-specific frames. @@ -214,7 +213,6 @@ case PATH_CHALLENGE_FRAME: case STOP_SENDING_FRAME: case MESSAGE_FRAME: - case CRYPTO_FRAME: break; case NUM_FRAME_TYPES:
diff --git a/net/third_party/quic/core/quic_types.h b/net/third_party/quic/core/quic_types.h index 3ae1d3c..f0a31980 100644 --- a/net/third_party/quic/core/quic_types.h +++ b/net/third_party/quic/core/quic_types.h
@@ -184,7 +184,6 @@ PATH_CHALLENGE_FRAME, STOP_SENDING_FRAME, MESSAGE_FRAME, - CRYPTO_FRAME, NUM_FRAME_TYPES }; @@ -218,7 +217,6 @@ // whether the frame is a stream frame or not, and then examine each // bit specifically when/as needed. IETF_STREAM = 0x10, - IETF_CRYPTO = 0x18, // MESSAGE frame type is not yet determined, use 0x2x temporarily to give // stream frame some wiggle room. IETF_EXTENSION_MESSAGE_NO_LENGTH = 0x20, @@ -436,16 +434,15 @@ enum QuicIetfTransportErrorCodes : uint16_t { NO_IETF_QUIC_ERROR = 0x0, INTERNAL_ERROR = 0x1, - SERVER_BUSY_ERROR = 0x2, FLOW_CONTROL_ERROR = 0x3, STREAM_ID_ERROR = 0x4, STREAM_STATE_ERROR = 0x5, FINAL_OFFSET_ERROR = 0x6, - FRAME_ENCODING_ERROR = 0x7, + FRAME_FORMAT_ERROR = 0x7, TRANSPORT_PARAMETER_ERROR = 0x8, VERSION_NEGOTIATION_ERROR = 0x9, PROTOCOL_VIOLATION = 0xA, - INVALID_MIGRATION = 0xC, + UNSOLICITED_PONG = 0xB, FRAME_ERROR_base = 0x100, // add frame type to this base };
diff --git a/net/third_party/quic/core/quic_unacked_packet_map.cc b/net/third_party/quic/core/quic_unacked_packet_map.cc index 2ea78e0..a6edfec 100644 --- a/net/third_party/quic/core/quic_unacked_packet_map.cc +++ b/net/third_party/quic/core/quic_unacked_packet_map.cc
@@ -4,9 +4,6 @@ #include "net/third_party/quic/core/quic_unacked_packet_map.h" -#include <limits> -#include <type_traits> - #include "net/third_party/quic/core/quic_connection_stats.h" #include "net/third_party/quic/core/quic_utils.h" #include "net/third_party/quic/platform/api/quic_bug_tracker.h" @@ -14,16 +11,6 @@ namespace quic { -namespace { -bool WillStreamFrameLengthSumWrapAround(QuicPacketLength lhs, - QuicPacketLength rhs) { - static_assert( - std::is_unsigned<QuicPacketLength>::value, - "This function assumes QuicPacketLength is an unsigned integer type."); - return std::numeric_limits<QuicPacketLength>::max() - lhs < rhs; -} -} // namespace - QuicUnackedPacketMap::QuicUnackedPacketMap() : largest_sent_packet_(0), largest_sent_retransmittable_packet_(0), @@ -431,14 +418,7 @@ frame.type == STREAM_FRAME && frame.stream_frame.stream_id == aggregated_stream_frame_.stream_id && frame.stream_frame.offset == aggregated_stream_frame_.offset + - aggregated_stream_frame_.data_length && - // We would like to increment aggregated_stream_frame_.data_length by - // frame.stream_frame.data_length, so we need to make sure their sum is - // representable by QuicPacketLength, which is the type of the former. - !WillStreamFrameLengthSumWrapAround( - aggregated_stream_frame_.data_length, - frame.stream_frame.data_length); - + aggregated_stream_frame_.data_length; if (can_aggregate) { // Aggregate stream frame. aggregated_stream_frame_.data_length += frame.stream_frame.data_length;
diff --git a/net/third_party/quic/core/quic_unacked_packet_map.h b/net/third_party/quic/core/quic_unacked_packet_map.h index 7cc3db3..a12436d 100644 --- a/net/third_party/quic/core/quic_unacked_packet_map.h +++ b/net/third_party/quic/core/quic_unacked_packet_map.h
@@ -16,10 +16,6 @@ namespace quic { -namespace test { -class QuicUnackedPacketMapPeer; -} // namespace test - // Class which tracks unacked packets for three purposes: // 1) Track retransmittable data, including multiple transmissions of frames. // 2) Track packets and bytes in flight for congestion control. @@ -194,8 +190,6 @@ } private: - friend class test::QuicUnackedPacketMapPeer; - // Called when a packet is retransmitted with a new packet number. // |old_packet_number| will remain unacked, but will have no // retransmittable data associated with it. Retransmittable frames will be
diff --git a/net/third_party/quic/core/quic_unacked_packet_map_test.cc b/net/third_party/quic/core/quic_unacked_packet_map_test.cc index 3896cfb..dd133aed 100644 --- a/net/third_party/quic/core/quic_unacked_packet_map_test.cc +++ b/net/third_party/quic/core/quic_unacked_packet_map_test.cc
@@ -3,10 +3,7 @@ // found in the LICENSE file. #include "net/third_party/quic/core/quic_unacked_packet_map.h" -#include <limits> -#include "net/third_party/quic/core/frames/quic_stream_frame.h" -#include "net/third_party/quic/core/quic_transmission_info.h" #include "net/third_party/quic/core/quic_utils.h" #include "net/third_party/quic/platform/api/quic_arraysize.h" #include "net/third_party/quic/platform/api/quic_test.h" @@ -18,15 +15,6 @@ namespace quic { namespace test { - -class QuicUnackedPacketMapPeer { - public: - static const QuicStreamFrame& GetAggregatedStreamFrame( - const QuicUnackedPacketMap& unacked_packets) { - return unacked_packets.aggregated_stream_frame_; - } -}; - namespace { // Default packet length. @@ -556,62 +544,6 @@ QuicTime::Delta::Zero()); } -// Regression test for b/112930090. -TEST_P(QuicUnackedPacketMapTest, CannotAggregateIfDataLengthOverflow) { - testing::InSequence s; - - QuicByteCount kMaxAggregatedDataLength = - std::numeric_limits<decltype(QuicStreamFrame().data_length)>::max(); - QuicStreamId stream_id = 2; - - // acked_stream_length=512 covers the case where a frame will cause the - // aggregated frame length to be exactly 64K. - // acked_stream_length=1300 covers the case where a frame will cause the - // aggregated frame length to exceed 64K. - for (const QuicPacketLength acked_stream_length : {512, 1300}) { - ++stream_id; - QuicStreamOffset offset = 0; - // Expected length of the aggregated stream frame. - QuicByteCount aggregated_data_length = 0; - - while (offset < 1e6) { - QuicTransmissionInfo info; - QuicStreamFrame stream_frame(stream_id, false, offset, - acked_stream_length); - info.retransmittable_frames.push_back(QuicFrame(stream_frame)); - - const QuicStreamFrame& aggregated_stream_frame = - QuicUnackedPacketMapPeer::GetAggregatedStreamFrame(unacked_packets_); - if (aggregated_stream_frame.data_length + acked_stream_length <= - kMaxAggregatedDataLength) { - // Verify the acked stream frame can be aggregated. - EXPECT_CALL(notifier_, OnFrameAcked(_, _)).Times(0); - unacked_packets_.MaybeAggregateAckedStreamFrame( - info, QuicTime::Delta::Zero()); - aggregated_data_length += acked_stream_length; - } else { - // Verify the acked stream frame cannot be aggregated because - // data_length is overflow. - EXPECT_CALL(notifier_, OnFrameAcked(_, _)).Times(1); - unacked_packets_.MaybeAggregateAckedStreamFrame( - info, QuicTime::Delta::Zero()); - aggregated_data_length = acked_stream_length; - } - - EXPECT_EQ(aggregated_data_length, aggregated_stream_frame.data_length); - offset += acked_stream_length; - } - - // Ack the last frame of the stream. - QuicTransmissionInfo info; - QuicStreamFrame stream_frame(stream_id, true, offset, acked_stream_length); - info.retransmittable_frames.push_back(QuicFrame(stream_frame)); - EXPECT_CALL(notifier_, OnFrameAcked(_, _)).Times(1); - unacked_packets_.MaybeAggregateAckedStreamFrame(info, - QuicTime::Delta::Zero()); - } -} - TEST_P(QuicUnackedPacketMapTest, CannotAggregateAckedControlFrames) { testing::InSequence s; QuicWindowUpdateFrame window_update(1, 5, 100);
diff --git a/net/third_party/quic/quartc/quartc_factory.cc b/net/third_party/quic/quartc/quartc_factory.cc index 66d3873..7e467b3 100644 --- a/net/third_party/quic/quartc/quartc_factory.cc +++ b/net/third_party/quic/quartc/quartc_factory.cc
@@ -31,12 +31,6 @@ // Fixes behavior of StopReading() with level-triggered stream sequencers. SetQuicReloadableFlag(quic_stop_reading_when_level_triggered, true); - // Quartc uses zombie streams -- we close the stream for read as soon as we - // create a stream -- this makes the stream a zombie stream. b/115323618 - // revealed that closing zombie streams is problematic, and enabling this flag - // fixes it. - SetQuicReloadableFlag(quic_fix_reset_zombie_streams, true); - std::unique_ptr<QuicConnection> quic_connection = CreateQuicConnection(perspective, writer.get());
diff --git a/net/third_party/quic/test_tools/quic_framer_peer.cc b/net/third_party/quic/test_tools/quic_framer_peer.cc index 0b164105..f701a48 100644 --- a/net/third_party/quic/test_tools/quic_framer_peer.cc +++ b/net/third_party/quic/test_tools/quic_framer_peer.cc
@@ -58,20 +58,6 @@ } // static -bool QuicFramerPeer::ProcessCryptoFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicCryptoFrame* frame) { - return framer->ProcessCryptoFrame(reader, frame); -} - -// static -bool QuicFramerPeer::AppendCryptoFrame(QuicFramer* framer, - const QuicCryptoFrame& frame, - QuicDataWriter* writer) { - return framer->AppendCryptoFrame(frame, writer); -} - -// static bool QuicFramerPeer::ProcessIetfAckFrame(QuicFramer* framer, QuicDataReader* reader, QuicAckFrame* ack_frame) {
diff --git a/net/third_party/quic/test_tools/quic_framer_peer.h b/net/third_party/quic/test_tools/quic_framer_peer.h index 45942691..d7903bb 100644 --- a/net/third_party/quic/test_tools/quic_framer_peer.h +++ b/net/third_party/quic/test_tools/quic_framer_peer.h
@@ -47,12 +47,6 @@ const QuicStreamFrame& frame, bool last_frame_in_packet, QuicDataWriter* writer); - static bool ProcessCryptoFrame(QuicFramer* framer, - QuicDataReader* reader, - QuicCryptoFrame* frame); - static bool AppendCryptoFrame(QuicFramer* framer, - const QuicCryptoFrame& frame, - QuicDataWriter* writer); static bool AppendIetfConnectionCloseFrame( QuicFramer* framer,
diff --git a/net/third_party/quic/test_tools/quic_test_utils.cc b/net/third_party/quic/test_tools/quic_test_utils.cc index 0b8a016..ed1adbb 100644 --- a/net/third_party/quic/test_tools/quic_test_utils.cc +++ b/net/third_party/quic/test_tools/quic_test_utils.cc
@@ -139,8 +139,6 @@ ON_CALL(*this, OnStreamFrame(_)).WillByDefault(testing::Return(true)); - ON_CALL(*this, OnCryptoFrame(_)).WillByDefault(testing::Return(true)); - ON_CALL(*this, OnStopWaitingFrame(_)).WillByDefault(testing::Return(true)); ON_CALL(*this, OnPaddingFrame(_)).WillByDefault(testing::Return(true)); @@ -191,21 +189,14 @@ return true; } -bool NoOpFramerVisitor::OnCryptoFrame(const QuicCryptoFrame& frame) { - return true; -} - bool NoOpFramerVisitor::OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) { return true; } bool NoOpFramerVisitor::OnAckRange(QuicPacketNumber start, - QuicPacketNumber end) { - return true; -} - -bool NoOpFramerVisitor::OnAckFrameEnd(QuicPacketNumber start) { + QuicPacketNumber end, + bool last_range) { return true; }
diff --git a/net/third_party/quic/test_tools/quic_test_utils.h b/net/third_party/quic/test_tools/quic_test_utils.h index f23f033..6df6c0e 100644 --- a/net/third_party/quic/test_tools/quic_test_utils.h +++ b/net/third_party/quic/test_tools/quic_test_utils.h
@@ -256,10 +256,8 @@ MOCK_METHOD1(OnDecryptedPacket, void(EncryptionLevel level)); MOCK_METHOD1(OnPacketHeader, bool(const QuicPacketHeader& header)); MOCK_METHOD1(OnStreamFrame, bool(const QuicStreamFrame& frame)); - MOCK_METHOD1(OnCryptoFrame, bool(const QuicCryptoFrame& frame)); MOCK_METHOD2(OnAckFrameStart, bool(QuicPacketNumber, QuicTime::Delta)); - MOCK_METHOD2(OnAckRange, bool(QuicPacketNumber, QuicPacketNumber)); - MOCK_METHOD1(OnAckFrameEnd, bool(QuicPacketNumber)); + MOCK_METHOD3(OnAckRange, bool(QuicPacketNumber, QuicPacketNumber, bool)); MOCK_METHOD1(OnStopWaitingFrame, bool(const QuicStopWaitingFrame& frame)); MOCK_METHOD1(OnPaddingFrame, bool(const QuicPaddingFrame& frame)); MOCK_METHOD1(OnPingFrame, bool(const QuicPingFrame& frame)); @@ -303,11 +301,11 @@ void OnDecryptedPacket(EncryptionLevel level) override {} bool OnPacketHeader(const QuicPacketHeader& header) override; bool OnStreamFrame(const QuicStreamFrame& frame) override; - bool OnCryptoFrame(const QuicCryptoFrame& frame) override; bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override; - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override; - bool OnAckFrameEnd(QuicPacketNumber start) override; + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) override; bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override; bool OnPaddingFrame(const QuicPaddingFrame& frame) override; bool OnPingFrame(const QuicPingFrame& frame) override;
diff --git a/net/third_party/quic/test_tools/simple_quic_framer.cc b/net/third_party/quic/test_tools/simple_quic_framer.cc index e3bac246..cad44e3 100644 --- a/net/third_party/quic/test_tools/simple_quic_framer.cc +++ b/net/third_party/quic/test_tools/simple_quic_framer.cc
@@ -64,11 +64,6 @@ return true; } - bool OnCryptoFrame(const QuicCryptoFrame& frame) override { - // TODO(nharper): Implement this. - return false; - } - bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta ack_delay_time) override { QuicAckFrame ack_frame; @@ -78,14 +73,14 @@ return true; } - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override { + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool /*last_range*/) override { DCHECK(!ack_frames_.empty()); ack_frames_[ack_frames_.size() - 1].packets.AddRange(start, end); return true; } - bool OnAckFrameEnd(QuicPacketNumber /*start*/) override { return true; } - bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { stop_waiting_frames_.push_back(frame); return true;
diff --git a/net/third_party/quic/tools/quic_packet_printer_bin.cc b/net/third_party/quic/tools/quic_packet_printer_bin.cc index c5bbec1..723c4b4 100644 --- a/net/third_party/quic/tools/quic_packet_printer_bin.cc +++ b/net/third_party/quic/tools/quic_packet_printer_bin.cc
@@ -105,24 +105,16 @@ << " }\n"; return true; } - bool OnCryptoFrame(const QuicCryptoFrame& frame) override { - std::cerr << "OnCryptoFrame: " << frame; - std::cerr << " data: { " - << QuicTextUtils::HexEncode(frame.data_buffer, frame.data_length) - << " }\n"; - return true; - } bool OnAckFrameStart(QuicPacketNumber largest_acked, QuicTime::Delta /*ack_delay_time*/) override { std::cerr << "OnAckFrameStart, largest_acked: " << largest_acked; return true; } - bool OnAckRange(QuicPacketNumber start, QuicPacketNumber end) override { - std::cerr << "OnAckRange: [" << start << ", " << end << ")"; - return true; - } - bool OnAckFrameEnd(QuicPacketNumber start) override { - std::cerr << "OnAckFrameEnd, start: " << start; + bool OnAckRange(QuicPacketNumber start, + QuicPacketNumber end, + bool last_range) override { + std::cerr << "OnAckRange: [" << start << ", " << end + << "), last_range: " << last_range; return true; } bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override {
diff --git a/remoting/resources/remoting_strings_ml.xtb b/remoting/resources/remoting_strings_ml.xtb index 59d3b60b..b9ce28c 100644 --- a/remoting/resources/remoting_strings_ml.xtb +++ b/remoting/resources/remoting_strings_ml.xtb
@@ -329,8 +329,8 @@ <translation id="8525306231823319788">പൂര്ണ്ണ സ്ക്രീന്</translation> <translation id="8548209692293300397">നിങ്ങൾ മുമ്പ് <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) എന്ന് സൈൻ ഇൻ ചെയ്തിട്ടുണ്ട്. ആ അക്കൗണ്ടിൽ നിങ്ങളുടെ കമ്പ്യൂട്ടറുകൾ ആക്സസ്സ് ചെയ്യാൻ, ആ അക്കൗണ്ട് ഉപയോഗിച്ച്, <ph name="LINK_BEGIN" />Google Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്ത്<ph name="LINK_END" /> Chrome വിദൂര ഡെസ്ക്ടോപ്പ് വീണ്ടും ഇൻസ്റ്റാൾ ചെയ്യുക.</translation> <translation id="8642984861538780905">തൃപ്തികരം</translation> -<translation id="8705151241155781642">• Android 9.0 പൈ എന്നതിന് പിന്തുണ കൂട്ടിച്ചേർത്തു. -• നിങ്ങളുടെ Android ഉപകരണത്തിന്റെ സ്ക്രീനുമായി പൊരുത്തപ്പെടാനായി വിദൂര ഡെസ്ക്ടോപ്പിന്റെ റെസല്യൂഷൻ വലുപ്പം മാറ്റുന്നതിനുള്ള പിന്തുണ.</translation> +<translation id="8705151241155781642">• Android 9.0 പൈ എന്നതിന് പിന്തുണ ചേർത്തു. +• നിങ്ങളുടെ Android ഉപകരണത്തിന്റെ സ്ക്രീനുമായി പൊരുത്തപ്പെടുന്നതിന്, വിദൂര ഡെസ്ക്ടോപ്പിന്റെ റെസല്യൂഷൻ വലുപ്പം മാറ്റുന്നതിനുള്ള പിന്തുണ.</translation> <translation id="8712909229180978490">എനിക്ക് Google ഡ്രൈവിൽ സംരക്ഷിച്ച ഫയലുകൾ ഓൺലൈനിൽ കാണാനാകുന്നില്ല.</translation> <translation id="8743328882720071828"><ph name="CLIENT_USERNAME" /> എന്നതിനെ നിങ്ങളുടെ കമ്പ്യൂട്ടർ കാണാനും നിയന്ത്രിക്കാനും അനുവദിക്കണോ?</translation> <translation id="8747048596626351634">സെഷൻ ക്രാഷായി അല്ലെങ്കിൽ ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു. വിദൂര കമ്പ്യൂട്ടറിൽ ~/.chrome-വിദൂര-ഡെസ്ക്ടോപ്പ്-സെഷൻ നിലവിലുണ്ടെങ്കിൽ, ഡെസ്ക്ടോപ്പ് അന്തരീക്ഷമോ വിൻഡോ മാനേജരോ പോലെയുള്ള, നീണ്ട നേരം റൺ ചെയ്യുന്ന പൂർവ്വതല (ഫോർഗ്രൗണ്ട്) പ്രോസസ്സ് ആയി അത് ആരംഭിക്കുന്നുവെന്ന് ഉറപ്പാക്കുക.</translation>
diff --git a/remoting/resources/remoting_strings_mr.xtb b/remoting/resources/remoting_strings_mr.xtb index 5c957946..18ab596b4 100644 --- a/remoting/resources/remoting_strings_mr.xtb +++ b/remoting/resources/remoting_strings_mr.xtb
@@ -35,9 +35,9 @@ <translation id="1841799852846221389">या संगणकासाठी दूरस्थ कनेक्शन अक्षम करीत आहे...</translation> <translation id="1897488610212723051">हटवा</translation> <translation id="195619862187186579">कीबोर्ड लेआउट</translation> -<translation id="1996161829609978754">Chrome हे Chromoting होस्ट इन्स्टॉलर डाउनलोड करीत आहे. एकदा डाउनलोड पूर्ण झाल्यानंतर, कृपया सुरु ठेवण्यापूर्वी इन्स्टॉलर चालवा.</translation> +<translation id="1996161829609978754">Chrome हे Chromoting होस्ट इंस्टॉलर डाउनलोड करत आहे. एकदा डाउनलोड पूर्ण झाल्यानंतर, कृपया सुरु ठेवण्यापूर्वी इंस्टॉलर रन करा.</translation> <translation id="2009755455353575666">कनेक्शन अयशस्वी</translation> -<translation id="2013884659108657024">Chrome हे Chrome रिमोट डेस्कटॉप होस्ट इन्स्टॉलर डाउनलोड करीत आहे. एकदा डाउनलोड पूर्ण झाल्यानंतर, कृपया सुरु ठेवण्यापूर्वी इन्स्टॉलर चालवा.</translation> +<translation id="2013884659108657024">Chrome हे Chrome रिमोट डेस्कटॉप होस्ट इंस्टॉलर डाउनलोड करत आहे. एकदा डाउनलोड पूर्ण झाल्यानंतर, कृपया सुरु ठेवण्यापूर्वी इंस्टॉलर रन करा.</translation> <translation id="2013996867038862849">सर्व जोडलेले क्लायंट हटविण्यात आले आहेत.</translation> <translation id="2038229918502634450">धोरण बदल विचारात घेण्यासाठी, होस्ट रीस्टार्ट करीत आहे.</translation> <translation id="2046651113449445291">खालील क्लायंट या संगणकासह जोडण्यात आले आहेत आणि पिन प्रदान न करता कनेक्ट करू शकतात. आपण एकतर वैयक्तिकरित्या किंवा सर्व क्लायंटकरिता, कोणत्याही वेळी ही परवानगी मागे घेऊ शकता.</translation> @@ -143,7 +143,7 @@ <translation id="4156740505453712750">या संगणकावर प्रवेश संरक्षित करण्यासाठी, कृपया <ph name="BOLD_START" />कमीत कमी सहा अंकांचा<ph name="BOLD_END" /> एक पिन निवडा. दुसर्या स्थानावरून कनेक्ट करताना हा पिन आवश्यक असेल.</translation> <translation id="4169432154993690151">एक प्रोफाइल फोटो निवडण्यासाठी, Chrome रिमोट डेस्कटॉपला तुमचा कॅमेरा अॅक्सेस करण्याची अनुमती द्या</translation> <translation id="4176825807642096119">प्रवेश कोड</translation> -<translation id="4207623512727273241">कृपया सुरु ठेवण्यापूर्वी इन्स्टॉलर चालवा.</translation> +<translation id="4207623512727273241">कृपया सुरु ठेवण्यापूर्वी इंस्टॉलर रन करा.</translation> <translation id="4227991223508142681">होस्ट तरतूद उपयुक्तता</translation> <translation id="4240294130679914010">Chromoting होस्ट विस्थापनकर्ता</translation> <translation id="4277463233460010382">हा कॉंप्युटर पिन एंटर न करता एक किंवा अधिक क्लायंटना कनेक्ट करण्याची अनुमती देण्यासाठी कॉन्फिगर केला आहे.</translation> @@ -176,7 +176,7 @@ <translation id="4741792197137897469">प्रमाणीकरण अयशस्वी. कृपया Chrome वर पुन्हा साइन इन करा.</translation> <translation id="477305884757156764">अॅप्लिकेशन खूप धीमे झाले आहे.</translation> <translation id="4784508858340177375">X सर्व्हर क्रॅश झाला किंवा सुरू झाला नाही.</translation> -<translation id="4795786176190567663">आपल्याला ती क्रिया करण्याची परवानगी नाही.</translation> +<translation id="4795786176190567663">तुम्हाला ती क्रिया करण्याची परवानगी नाही.</translation> <translation id="4798680868612952294">माउसचे पर्याय</translation> <translation id="4804818685124855865">डिस्कनेक्ट</translation> <translation id="4808503597364150972">कृपया <ph name="HOSTNAME" /> साठीचा आपला पिन प्रविष्ट करा.</translation> @@ -281,7 +281,7 @@ <translation id="7312846573060934304">होस्ट ऑफलाइन आहे.</translation> <translation id="7319983568955948908">सामायिकरण थांबवा</translation> <translation id="7401733114166276557">Chrome रिमोट डेस्कटॉप</translation> -<translation id="7434397035092923453">क्लायंटसाठी प्रवेश नाकारला: <ph name="CLIENT_USERNAME" /></translation> +<translation id="7434397035092923453">क्लायंटसाठी अॅक्सेस नाकारला: <ph name="CLIENT_USERNAME" /></translation> <translation id="7444276978508498879">कनेक्ट केलेला क्लायंट: <ph name="CLIENT_USERNAME" />.</translation> <translation id="7526139040829362392">खाते बदला</translation> <translation id="7589941250119944644">Chrome रिमोट डेस्कटॉप हे वेबवरील नवीन होमवर जात आहे. आमचे <ph name="LINK_BEGIN" />वेब अॅप<ph name="LINK_END" /> पहा—हे पहिल्यासारख्या सर्व वैशिष्ट्यांप्रमाणे, जलद आणि विनामूल्य आहे.</translation> @@ -298,7 +298,7 @@ <translation id="7810127880729796595">आकडेवारी दर्शवा (कनेक्शन: <ph name="QUALITY" />)</translation> <translation id="7836926030608666805">काही आवश्यक घटक गहाळ आहेत. कृपया आपण Chrome ची नवीनतम आवृत्ती चालवत असल्याचे सुनिश्चित करा आणि पुन्हा प्रयत्न करा.</translation> <translation id="7868137160098754906">कृपया दूरस्थ संगणकासाठी आपला पिन एंटर करा.</translation> -<translation id="7869445566579231750">तुम्हाला हा अॅप्लिकेशन रन करण्याची परवानगी नाही.</translation> +<translation id="7869445566579231750">तुम्हाला हे अॅप्लिकेशन रन करण्याची परवानगी नाही.</translation> <translation id="7895403300744144251">दूरस्थ संगणकावरील सुरक्षितता धोरणे आपल्या खात्यामधील कनेेक्शनना अनुमती देत नाहीत.</translation> <translation id="7936528439960309876">उजवीकडे डॉक करा</translation> <translation id="7948001860594368197">स्क्रीन पर्याय</translation> @@ -322,7 +322,7 @@ <translation id="8355485110405946777">तुमच्या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी अॅप्लिकेशन लॉग समाविष्ट करा (लॉगमध्ये खाजगी माहिती असू शकते).</translation> <translation id="837021510621780684">या संगणकावरुन</translation> <translation id="8383794970363966105">Chromoting वापरण्यासाठी, आपल्याला आपल्या डिव्हाइसमध्ये एक Google खाते जोडणे आवश्यक असेल.</translation> -<translation id="8386846956409881180">चुकीच्या OAuth क्रेडेन्ाियलसह होस्ट कॉन्फिगर केले आहे.</translation> +<translation id="8386846956409881180">अवैध OAuth क्रेडेंशियलसह होस्ट कॉन्फिगर केला आहे.</translation> <translation id="8428213095426709021">सेटिंग्ज</translation> <translation id="8445362773033888690">Google Play Store मध्ये पहा</translation> <translation id="8509907436388546015">डेस्कटॉप संकलन प्रक्रिया</translation>
diff --git a/services/network/test/test_network_connection_tracker.cc b/services/network/test/test_network_connection_tracker.cc index 6cf0cead..cb997d8e 100644 --- a/services/network/test/test_network_connection_tracker.cc +++ b/services/network/test/test_network_connection_tracker.cc
@@ -25,13 +25,16 @@ } TestNetworkConnectionTracker::TestNetworkConnectionTracker() { - DCHECK(!g_test_network_connection_tracker_instance); + if (g_test_network_connection_tracker_instance) { + LOG(WARNING) << "Creating more than one TestNetworkConnectionTracker"; + return; + } g_test_network_connection_tracker_instance = this; } TestNetworkConnectionTracker::~TestNetworkConnectionTracker() { - DCHECK_EQ(g_test_network_connection_tracker_instance, this); - g_test_network_connection_tracker_instance = nullptr; + if (g_test_network_connection_tracker_instance == this) + g_test_network_connection_tracker_instance = nullptr; } bool TestNetworkConnectionTracker::GetConnectionType(
diff --git a/services/service_manager/public/service_manifest.gni b/services/service_manager/public/service_manifest.gni index 1a55cde..1bf9463 100644 --- a/services/service_manager/public/service_manifest.gni +++ b/services/service_manager/public/service_manifest.gni
@@ -45,6 +45,8 @@ # within this output manifest, specifically within a toplevel "services" # list. # +# testonly (optional) +# # Outputs: # # An instantiation of this template produces a meta manifest from the source @@ -61,6 +63,8 @@ "Only one of \"source\" or \"source_manifest\" must be defined for the $target_name target") action(target_name) { + testonly = defined(invoker.testonly) && invoker.testonly + script = "//services/service_manager/public/tools/manifest/manifest_collator.py"
diff --git a/services/ws/test_ws/BUILD.gn b/services/ws/test_ws/BUILD.gn index eb34bf1c..55e53e42 100644 --- a/services/ws/test_ws/BUILD.gn +++ b/services/ws/test_ws/BUILD.gn
@@ -36,6 +36,8 @@ } service_manifest("manifest") { + testonly = true + name = "test_ws" source = "manifest.json" packaged_services = [ "//services/ws:manifest" ]
diff --git a/skia/BUILD.gn b/skia/BUILD.gn index 55bcd126..f15688a 100644 --- a/skia/BUILD.gn +++ b/skia/BUILD.gn
@@ -34,14 +34,11 @@ "//third_party/skia/include/c", "//third_party/skia/include/config", "//third_party/skia/include/core", + "//third_party/skia/include/docs", "//third_party/skia/include/effects", "//third_party/skia/include/encode", "//third_party/skia/include/gpu", - "//third_party/skia/include/images", - "//third_party/skia/include/lazy", "//third_party/skia/include/pathops", - "//third_party/skia/include/pdf", - "//third_party/skia/include/pipe", "//third_party/skia/include/ports", "//third_party/skia/include/utils", ]
diff --git a/testing/buildbot/filters/chromeos.mash.fyi.browser_tests.filter b/testing/buildbot/filters/chromeos.mash.fyi.browser_tests.filter index dd3fecc..71c18753 100644 --- a/testing/buildbot/filters/chromeos.mash.fyi.browser_tests.filter +++ b/testing/buildbot/filters/chromeos.mash.fyi.browser_tests.filter
@@ -189,7 +189,9 @@ # Function under test uses ash::Shell for window list. -SortWindowsByZIndexBrowserTest.* -# Timeout. +# Timeout because first non-empty paint isn't triggered. +# https://crbug.com/885318 +-NoBackgroundTasksTest.FirstNonEmptyPaintWithoutBackgroundTasks -StartupMetricsTest.* # ash::Shell access in test for StatusAreaWidget.
diff --git a/testing/buildbot/filters/chromeos.single_process_mash.browser_tests.filter b/testing/buildbot/filters/chromeos.single_process_mash.browser_tests.filter index 533cd22b..5e88df4 100644 --- a/testing/buildbot/filters/chromeos.single_process_mash.browser_tests.filter +++ b/testing/buildbot/filters/chromeos.single_process_mash.browser_tests.filter
@@ -86,7 +86,9 @@ # http://crbug.com/831826 -ShelfAppBrowserTest.LaunchAppFromDisplayWithoutFocus* -# Timeout. +# Timeout because first non-empty paint isn't triggered. +# https://crbug.com/885318 +-NoBackgroundTasksTest.FirstNonEmptyPaintWithoutBackgroundTasks -StartupMetricsTest.* # Timeouts in content::WaitForChildFrameSurfaceReady() @@ -156,6 +158,9 @@ # Enterprise keys tests. -CheckSystemTokenAvailability/EnterprisePlatformKeysTest.Basic/* +# Flaky test. crbug.com/884118 +-ChromeNewWindowClientBrowserTest.NewWindowForActiveWindowProfileTest + # Ash native views tests. -ChromeNativeAppWindowViewsAuraAshBrowserTest.*
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 3cca235..fbfb6990 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -2415,6 +2415,12 @@ "enable_features": [ "ContentSuggestionsFaviconsFromNewServer" ] + }, + { + "name": "Enabled_50", + "enable_features": [ + "ContentSuggestionsFaviconsFromNewServer" + ] } ] }
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees index b7173759..65237479 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
@@ -217,3 +217,5 @@ crbug.com/884239 virtual/threaded/fast/animationworklet/worklet-animation-local-time-undefined.html [ Failure ] crbug.com/884240 images/cross-fade-invalidation.html [ Pass Failure ] + +crbug.com/884846 virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-mainframe.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 index 5a9c372..bec7455 100644 --- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 +++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
@@ -1072,6 +1072,9 @@ crbug.com/706066 paint/invalidation/scale-page-shrink.html [ Crash ] crbug.com/706066 paint/invalidation/compositing/page-scale-repaint.html [ Crash ] crbug.com/706066 paint/invalidation/position/relayout-fixed-position-after-scale.html [ Crash ] +crbug.com/706066 virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html [ Crash Failure ] +crbug.com/706066 virtual/threaded/fast/events/touch/touch-scaled-scrolled.html [ Crash ] +crbug.com/706066 virtual/threaded/fast/events/touch/page-scaled-touch-gesture-click.html [ Crash ] crbug.com/719721 virtual/threaded/animations/composited-animation-style-update.html [ Pass Failure ] @@ -1420,3 +1423,47 @@ Bug(none) fast/events/touch/compositor-touch-hit-rects-svg-root.html [ Failure ] Bug(none) fast/events/touch/compositor-touch-hit-rects-table.html [ Failure ] Bug(none) virtual/paint-touchaction-rects/fast/events/touch/compositor-touch-hit-rects-table.html [ Failure ] + +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-animation.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-continuation.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-global.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-iframes.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-img-element.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-list-no-translate.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-many.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-non-composited-scroll-overflow-with-handler.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-non-composited-scroll.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-scroll.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-squashing.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-svg-container.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-svg-foreign-object.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-svg-image.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-svg-root.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-svg-text.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-svg.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-table.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-transform-changed-nolayout.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-trigger-commit.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/compositor-touch-hit-rects-with-negative-child.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/touch-action-range-input.html [ Failure Timeout ] +Bug(none) virtual/threaded/fast/events/touch/touch-handler-assert-input-range.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/touch-rect-assert-first-layer-special.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/touch-rect-crash-on-unpromote-layer.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-scroll-by-page.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-mainframe.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-textarea.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-touchpad-fling.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-touchscreen-fling.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-zoomed.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-input-field.html [ Failure ] +Bug(none) virtual/threaded/fast/events/wheel/wheel-in-scrollbar.html [ Failure ] +Bug(none) virtual/threaded/fast/events/wheel/wheel-scroll-latching-on-scrollbar.html [ Failure ] +Bug(none) virtual/threaded/fast/events/wheel/wheelevent-in-horizontal-scrollbar-in-rtl.html [ Failure ] +Bug(none) virtual/threaded/fast/events/wheel/wheelevent-in-vertical-scrollbar-in-rtl.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-iframe.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-scrollbar.html [ Failure Timeout ] +Bug(none) virtual/threaded/fast/events/touch/gesture/gesture-tap-frame-scrollbar.html [ Failure ] +Bug(none) virtual/threaded/fast/events/touch/touch-action-range-input-csp.html [ Timeout Pass ] +Bug(none) virtual/threaded/fast/events/touch/touch-fractional-coordinates.html [ Crash Pass ] +Bug(none) virtual/threaded/fast/events/touch/gesture/context-menu-on-two-finger-tap-iframe.html [ Crash Pass ] +Bug(none) virtual/threaded/fast/events/wheel/wheelevent-document-createevent.html [ Crash Pass ] \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations index 485a0f7..deddc1ea 100644 --- a/third_party/WebKit/LayoutTests/TestExpectations +++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -145,26 +145,37 @@ crbug.com/857490 virtual/mouseevent_fractional/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html [ Skip ] crbug.com/857490 virtual/mouseevent_fractional/fast/events/wheel/mainthread-touchpad-fling-latching.html [ Skip ] crbug.com/857490 virtual/mouseevent_fractional/fast/events/wheel/wheel-fling-cancel.html [ Skip ] -crbug.com/857490 virtual/mouseevent_fractional/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Skip ] -crbug.com/857490 virtual/mouseevent_fractional/fast/events/touch/compositor-touch-hit-rects.html [ Skip ] crbug.com/857490 virtual/scroll_customization/fast/events/touch/gesture/pad-gesture-cancel.html [ Skip ] crbug.com/857490 virtual/scroll_customization/fast/events/touch/gesture/pad-gesture-fling.html [ Skip ] crbug.com/857490 virtual/scroll_customization/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html [ Skip ] crbug.com/857490 virtual/scroll_customization/fast/scroll-behavior/scroll-customization/touch-scroll-customization.html [ Skip ] -crbug.com/857490 virtual/scroll_customization/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Skip ] -crbug.com/857490 virtual/scroll_customization/fast/events/touch/compositor-touch-hit-rects.html [ Skip ] crbug.com/857490 virtual/user-activation-v2/fast/events/touch/gesture/pad-gesture-cancel.html [ Skip ] crbug.com/857490 virtual/user-activation-v2/fast/events/touch/gesture/pad-gesture-fling.html [ Skip ] crbug.com/857490 virtual/user-activation-v2/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html [ Skip ] crbug.com/857490 virtual/user-activation-v2/fast/events/wheel/mainthread-touchpad-fling-latching.html [ Skip ] crbug.com/857490 virtual/user-activation-v2/fast/events/wheel/wheel-fling-cancel.html [ Skip ] -crbug.com/857490 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Skip ] -crbug.com/857490 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects.html [ Skip ] crbug.com/857490 virtual/paint-touchaction-rects/fast/events/touch/gesture/gesture-scrollbar-touchpad-fling.html [ Skip ] crbug.com/857490 virtual/paint-touchaction-rects/fast/events/touch/gesture/gesture-scrollbar-touchscreen-fling.html [ Skip ] crbug.com/857490 virtual/paint-touchaction-rects/fast/events/touch/gesture/pad-gesture-cancel.html [ Skip ] crbug.com/857490 virtual/paint-touchaction-rects/fast/events/touch/gesture/pad-gesture-fling.html [ Skip ] crbug.com/857490 virtual/paint-touchaction-rects/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html [ Skip ] +crbug.com/857490 virtual/threaded/fast/events/touch/gesture/pad-gesture-cancel.html [ Skip ] +crbug.com/857490 virtual/threaded/fast/events/touch/gesture/pad-gesture-fling.html [ Skip ] +crbug.com/857490 virtual/threaded/fast/events/touch/gesture/touch-gesture-fling-with-page-scale.html [ Skip ] +crbug.com/857490 virtual/threaded/fast/events/wheel/mainthread-touchpad-fling-latching.html [ Skip ] +crbug.com/857490 virtual/threaded/fast/events/wheel/wheel-fling-cancel.html [ Skip ] + +crbug.com/884312 fast/events/touch/multi-touch-user-gesture.html [ Pass Failure ] +crbug.com/884312 virtual/threaded/fast/events/touch/multi-touch-user-gesture.html [ Pass Failure ] +crbug.com/884312 virtual/user-activation-v2/fast/events/touch/multi-touch-user-gesture.html [ Pass Failure ] + +# The test is still using eventSender and that's why its threaded version fails: +crbug.com/884332 virtual/threaded/fast/events/touch/gesture/gesture-tap-active-state-hidden-iframe.html [ Skip ] +crbug.com/884332 virtual/threaded/fast/events/touch/gesture/gesture-tap-frame-removed.html [ Skip ] +crbug.com/884332 virtual/threaded/fast/events/touch/scroll-without-mouse-lacks-mousemove-events.html [ Skip ] +crbug.com/884332 virtual/threaded/fast/events/touch/gesture/gesture-tap-active-state.html [ Skip ] +crbug.com/884332 virtual/threaded/fast/events/touch/gesture/focus-selectionchange-on-tap.html [ Skip ] +crbug.com/884332 virtual/threaded/fast/events/touch/gesture/gesture-tap-scrolled.html [ Skip ] # Sheriff 2018/05/25 crbug.com/846747 http/tests/navigation/navigation-interrupted-by-fragment.html [ Pass Timeout ] @@ -1873,6 +1884,14 @@ crbug.com/876305 fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Failure ] crbug.com/876305 fast/events/touch/compositor-touch-hit-rects.html [ Failure ] +crbug.com/876305 virtual/mouseevent_fractional/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Failure ] +crbug.com/876305 virtual/mouseevent_fractional/fast/events/touch/compositor-touch-hit-rects.html [ Failure ] +crbug.com/876305 virtual/scroll_customization/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Failure ] +crbug.com/876305 virtual/scroll_customization/fast/events/touch/compositor-touch-hit-rects.html [ Failure ] +crbug.com/876305 virtual/threaded/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Failure ] +crbug.com/876305 virtual/threaded/fast/events/touch/compositor-touch-hit-rects.html [ Failure ] +crbug.com/876305 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects-list-translate.html [ Failure ] +crbug.com/876305 virtual/user-activation-v2/fast/events/touch/compositor-touch-hit-rects.html [ Failure ] # TODO(ojan): These tests aren't flaky. See crbug.com/517144. # Release trybots run asserts, but the main waterfall ones don't. So, even @@ -1947,7 +1966,6 @@ # Web Components related tests (Shadow DOM, Custom Elements) failures. crbug.com/392771 external/wpt/shadow-dom/untriaged/styles/test-003.html [ Failure ] crbug.com/869308 shadow-dom/imperative-api.html [ Failure ] -crbug.com/883650 external/wpt/shadow-dom/event-dispatch-order.tentative.html [ Failure ] crbug.com/552494 virtual/prefer_compositing_to_lcd_text/scrollbars/overflow-scrollbar-combinations.html [ Pass Failure ] @@ -2386,6 +2404,32 @@ crbug.com/613672 [ Mac ] virtual/paint-touchaction-rects/fast/events/touch/gesture/touch-gesture-scroll-page-past-extent.html [ Skip ] crbug.com/613672 [ Mac ] virtual/paint-touchaction-rects/fast/events/touch/gesture/touch-gesture-scroll-page-zoomed.html [ Skip ] crbug.com/613672 [ Mac ] virtual/paint-touchaction-rects/fast/events/touch/gesture/touch-gesture-scroll-page.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/gesture-scroll-by-page.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/gesture-scroll.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-mainframe.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-touchpad-fling.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/gesture-scrollbar-touchscreen-fling.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/gesture-scrollbar.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-noscroll-body-propagated.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-noscroll-body-xhidden.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-noscroll-body-yhidden.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-noscroll-body.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-noscroll-div.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-noscroll-iframe.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-past-extent-diagonally.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-past-extent.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-twice-past-extent.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div-zoomed.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-div.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-iframe-editable.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-iframe-past-extent.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-iframe.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-input-field.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-listbox.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-page-past-extent.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-page-zoomed.html [ Skip ] +crbug.com/613672 [ Mac ] virtual/threaded/fast/events/touch/gesture/touch-gesture-scroll-page.html [ Skip ] crbug.com/802067 [ Mac ] external/wpt/pointerlock/movementX_Y_basic-manual.html [ Failure ] crbug.com/802067 [ Mac ] external/wpt/pointerevents/pointerlock/pointerevent_movementxy-manual.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites index 6d74e3ce..ec906693 100644 --- a/third_party/WebKit/LayoutTests/VirtualTestSuites +++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -89,6 +89,16 @@ }, { "prefix": "threaded", + "base": "fast/events/touch", + "args": ["--enable-threaded-compositing"] + }, + { + "prefix": "threaded", + "base": "fast/events/wheel", + "args": ["--enable-threaded-compositing"] + }, + { + "prefix": "threaded", "base": "fast/events/pointerevents/pinch", "args": ["--enable-threaded-compositing"] },
diff --git a/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image-expected.png b/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image-expected.png new file mode 100644 index 0000000..c1a307a6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image-expected.txt b/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image-expected.txt new file mode 100644 index 0000000..c216c05 --- /dev/null +++ b/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image-expected.txt
@@ -0,0 +1,6 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutBlockFlow {DIV} at (0,0) size 100x100
diff --git a/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image.html b/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image.html new file mode 100644 index 0000000..5cc9b18f --- /dev/null +++ b/third_party/WebKit/LayoutTests/accessibility/animation-policy-background-image.html
@@ -0,0 +1,26 @@ +<html> + <head> + <script> + if (window.internals) + internals.settings.setImageAnimationPolicy("none"); + + function finishTest() { window.testRunner.notifyDone(); } + + function waitForFrame() { + if (window.testRunner) { + setTimeout(finishTest, 0.5); + } + } + </script> + <style> + div { + background-image: url(animation-blue.gif); + height: 100px; + width: 100px; + } + </style> + </head> + <body onload="waitForFrame()"> + <div></div> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt b/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt index 7fb32ee..8eb301b 100644 --- a/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/massive-scale-interest-rect-expected.txt
@@ -7,7 +7,7 @@ LayoutBlockFlow {DIV} at (0,0) size 165x92 layer at (8,8) size 1920x1080 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 LayoutBlockFlow {DIV} at (0,0) size 1920x1080 [bgcolor=#0000FF] -layer at (8,5008) size 300x300 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 +layer at (8,438) size 26x25 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 LayoutBlockFlow (positioned) {DIV} at (0,5000) size 300x300 -layer at (8,5008) size 300x300 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 +layer at (8,438) size 26x25 backgroundClip at (8,8) size 165x92 clip at (8,8) size 165x92 LayoutBlockFlow (positioned) {DIV} at (0,5000) size 300x300
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt index 09e538a..2f20a8d 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/nested-render-surfaces-with-rotation-expected.txt
@@ -5,27 +5,27 @@ LayoutBlockFlow {BODY} at (8,10) size 769x2000 layer at (8,10) size 769x418 LayoutBlockFlow {DIV} at (0,0) size 769x418 -layer at (8,10) size 769x418 transparent +layer at (-9,-23) size 803x484 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 transparent LayoutBlockFlow {DIV} at (0,0) size 769x418 -layer at (8,120) size 308x308 backgroundClip at (0,87) size 325x334 clip at (12,124) size 285x285 scrollWidth 339 scrollHeight 448 +layer at (-9,87) size 334x334 backgroundClip at (0,87) size 325x334 clip at (0,91) size 280x285 scrollWidth 339 scrollHeight 448 LayoutBlockFlow {DIV} at (0,110) size 308x308 [border: (4px solid #000000)] -layer at (12,134) size 285x418 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 transparent +layer at (-16,101) size 321x441 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 transparent LayoutBlockFlow {DIV} at (4,14) size 285x418 -layer at (12,244) size 308x308 backgroundClip at (0,211) size 306x189 clip at (16,248) size 285x152 scrollHeight 560 +layer at (-4,211) size 328x329 backgroundClip at (0,211) size 306x189 clip at (0,215) size 285x185 scrollHeight 560 LayoutBlockFlow {DIV} at (0,110) size 308x308 [border: (4px solid #000000)] -layer at (62,234) size 200x200 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 +layer at (45,206) size 213x213 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 LayoutBlockFlow (positioned) {DIV} at (50,100) size 200x200 [bgcolor=#008000] -layer at (22,134) size 100x100 +layer at (-2,116) size 107x106 backgroundClip at (0,91) size 306x309 clip at (0,91) size 306x309 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (10,0) size 100x100 [bgcolor=#0000FF] -layer at (26,258) size 100x100 +layer at (10,239) size 107x107 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,14) size 100x100 [bgcolor=#0000FF] -layer at (26,368) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 +layer at (18,349) size 107x106 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,124) size 100x100 [bgcolor=#0000FF] -layer at (26,478) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 +layer at (26,458) size 107x107 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,234) size 100x100 [bgcolor=#0000FF] -layer at (26,588) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 +layer at (34,568) size 106x107 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,344) size 100x100 [bgcolor=#0000FF] -layer at (26,698) size 100x100 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 +layer at (41,678) size 107x107 backgroundClip at (0,217) size 305x183 clip at (0,217) size 305x183 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (14,454) size 100x100 [bgcolor=#0000FF] -layer at (18,10) size 100x100 +layer at (29,-22) size 108x109 backgroundClip at (0,0) size 785x585 clip at (0,0) size 785x585 LayoutBlockFlow (relative positioned) zI: 1 {DIV} at (10,0) size 100x100 [bgcolor=#0000FF]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt index 8173a555..4b394d5 100644 --- a/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/overflow/scaled-overflow-expected.txt
@@ -4,12 +4,12 @@ LayoutBlockFlow {HTML} at (0,0) size 800x466 layer at (8,8) size 784x450 LayoutBlockFlow {BODY} at (8,8) size 784x450 [bgcolor=#000000] -layer at (8,8) size 150x150 backgroundClip at (8,8) size 113x113 clip at (8,8) size 113x113 scrollHeight 400 +layer at (8,8) size 113x113 scrollHeight 400 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 150x150 [bgcolor=#FFFFFF] LayoutBlockFlow {DIV} at (0,0) size 135x400 -layer at (9,168) size 150x150 backgroundClip at (9,128) size 112x113 clip at (9,168) size 112x73 scrollHeight 400 +layer at (9,128) size 112x113 scrollHeight 400 LayoutBlockFlow (relative positioned) {DIV} at (0,150) size 150x150 [bgcolor=#FFFFFF] LayoutBlockFlow {DIV} at (0,0) size 135x400 -layer at (10,328) size 150x150 backgroundClip at (10,248) size 112x113 clip at (10,328) size 112x33 scrollHeight 400 +layer at (10,248) size 112x113 scrollHeight 400 LayoutBlockFlow (relative positioned) {DIV} at (0,300) size 150x150 [bgcolor=#FFFFFF] LayoutBlockFlow {DIV} at (0,0) size 135x400
diff --git a/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.png b/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.png index 6835cd5..6cda17ad 100644 --- a/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.png +++ b/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.txt b/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.txt index eccfef8..5941ee8 100644 --- a/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/compositing/visibility/visibility-composited-transforms-expected.txt
@@ -12,5 +12,5 @@ LayoutBlockFlow {DIV} at (0,0) size 100x100 hidden layer at (8,8) size 100x100 LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#FF0000] -layer at (8,8) size 100x100 +layer at (-13,-13) size 142x142 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-fixed-block-size-percentage-quirks-mode.https.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-fixed-block-size-percentage-quirks-mode.https.html new file mode 100644 index 0000000..9bd9044 --- /dev/null +++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-layout-api/constraints-fixed-block-size-percentage-quirks-mode.https.html
@@ -0,0 +1,38 @@ +<html class=reftest-wait> +<link rel="help" href="https://drafts.css-houdini.org/css-layout-api/#dom-layoutconstraints-fixedblocksize"> +<link rel="match" href="green-square-ref.html"> +<meta name="assert" content="This test checks that LayoutConstraints#fixedBlockSize is passed into the layout function correctly." /> +<style> +body { + height: 100px; +} + +.test { + background: red; + --expected-block-size: 50; /* In quirks mode we should get 100px * 50% */ + width: 100px; + height: 50%; +} + +.child { + background: green; +} + +@supports (display: layout(test)) { + .test { + display: layout(test); + } +} +</style> +<script src="/common/reftest-wait.js"></script> +<script src="/common/worklet-reftest.js"></script> + +<div class="container"> + <div class="test"> + <div class="child"></div> + </div> +</div> + +<script> +importWorkletAndTerminateTestAfterAsyncPaint(CSS.layoutWorklet, {url: 'support/constraints-fixed-block-size.js'}); +</script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-tables/width-distribution/computing-column-measure-2.html b/third_party/WebKit/LayoutTests/external/wpt/css/css-tables/width-distribution/computing-column-measure-2.html deleted file mode 100644 index b9840187..0000000 --- a/third_party/WebKit/LayoutTests/external/wpt/css/css-tables/width-distribution/computing-column-measure-2.html +++ /dev/null
@@ -1,81 +0,0 @@ -<!doctype html> -<script src='/resources/testharness.js'></script> -<script src='/resources/testharnessreport.js'></script> -<link rel="author" title="Richard Townsend" href="Richard.Townsend@arm.com" /> -<link rel="help" href="https://drafts.csswg.org/css-tables-3/#computing-column-measures" /> -<style type="text/css"> -td { - padding: 0; -} -div { - /* Bug does not happen when the table's containing block is less - than (100+200+300)=600px, so make sure sure that it's larger. */ - width: 750px; -} -</style> -<div> - <h1>Width Distribution</h1> - <h4>"Computing column measures"</h4> - <p>This is testing that the table's auto columns are correctly recalculated after removing and adding a <code>col</code> element. - <a href="https://www.w3.org/TR/CSS2/tables.html#auto-table-layout">Spec Text</a></p> - - <hr/> - - <table id="one" style="border: 1px solid orange"> - <colgroup> - <col style="width: 100px" /> - <col style="width: 200px" /> - <col style="width: 300px;" id="hideable" /> - </colgroup> - <tr> - <td>100</td> - <td>200</td> - <td>300</td> - </tr> - </table> - - <table id="two" style="border: 1px solid orange"> - <colgroup> - <col style="width: 100px; display: none;" id="displayable" /> - <col style="width: 200px;" /> - <col style="width: auto;" /> - </colgroup> - <tr> - <td>100</td> - <td>200</td> - <td>300</td> - </tr> - </table> - - <table id="ref" style="border: 1px solid orange"> - <colgroup> - <col style="width: 100px;" /> - <col style="width: 200px;" /> - <col style="width: auto;" /> - </colgroup> - <tr> - <td>100</td> - <td>200</td> - <td>300</td> - </tr> - </table> - -</div> -<script> - test(function() { - var one = document.getElementById('one'); - var two = document.getElementById('two'); - var ref = document.getElementById('ref'); - - // Force initial layout. - assert_greater_than(one.offsetWidth, ref.offsetWidth); - - // Display two's colgroup and hide one's. - document.getElementById('displayable').style.display = 'table-column'; - document.getElementById('hideable').style.display = 'none'; - - // Both tables should now match the reference. - assert_equals(one.offsetWidth, ref.offsetWidth); - assert_equals(two.offsetWidth, ref.offsetWidth); - }, "Table recalculations should match the reference"); -</script>
diff --git a/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-leftControl.html b/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-leftControl.html new file mode 100644 index 0000000..68e4e24d --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-leftControl.html
@@ -0,0 +1,46 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Drag and Drop: interaction between effectAllowed and dropEffect</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model"> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="resources/dropEffect-common.js"></script> +<style> +.box { + display: block; + border: 1px solid black; + width: 100px; + height: 100px; +} +</style> + +<p> + Tests that one can drag and drop, even when holding various modifiers like + shift and control. Please drag the "Drag Me" box into the "Drop Here" box + repeatedly, until the test ends. While dragging, hold down the key + specified below as "keyPressed", if one exists, or hold no keys down if + none are specified. +</p> + +<div class="dragged box" draggable="true"> + Drag Me +</div> + +<div class="dropzone box"> + Drop Here +</div> + +<p> + Current test: <code id="test-description"></code> +</p> + +<script> + +dropEffectTests([ + { drop: 'copy', keyPressed: 'ControlLeft', operation: 'copy' }, + { drop: 'link', keyPressed: 'ControlLeft', operation: 'link' }, + { drop: 'move', keyPressed: 'ControlLeft', operation: 'move' }, + { drop: 'dummy', keyPressed: 'ControlLeft', operation: 'copy' }, +]); + +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-leftShift.html b/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-leftShift.html new file mode 100644 index 0000000..1a66e656 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-leftShift.html
@@ -0,0 +1,47 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Drag and Drop: interaction between effectAllowed and dropEffect</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model"> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="resources/dropEffect-common.js"></script> +<style> +.box { + display: block; + border: 1px solid black; + width: 100px; + height: 100px; +} +</style> + +<p> + Tests that one can drag and drop, even when holding various modifiers like + shift and control. Please drag the "Drag Me" box into the "Drop Here" box + repeatedly, until the test ends. While dragging, hold down the key + specified below as "keyPressed", if one exists, or hold no keys down if + none are specified. +</p> + +<div class="dragged box" draggable="true"> + Drag Me +</div> + +<div class="dropzone box"> + Drop Here +</div> + +<p> + Current test: <code id="test-description"></code> +</p> + +<script> + +dropEffectTests([ + { drop: 'copy', keyPressed: 'ShiftLeft', operation: 'copy' }, + { drop: 'link', keyPressed: 'ShiftLeft', operation: 'link' }, + { drop: 'move', keyPressed: 'ShiftLeft', operation: 'move' }, + { drop: 'dummy', keyPressed: 'ShiftLeft', operation: 'copy' }, + +]); + +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-nokey.html b/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-nokey.html new file mode 100644 index 0000000..f238cc2 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/dnd/dropEffect-for-modifier-nokey.html
@@ -0,0 +1,46 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Drag and Drop: interaction between effectAllowed and dropEffect</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#drag-and-drop-processing-model"> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="resources/dropEffect-common.js"></script> +<style> +.box { + display: block; + border: 1px solid black; + width: 100px; + height: 100px; +} +</style> + +<p> + Tests that one can drag and drop, even when holding various modifiers like + shift and control. Please drag the "Drag Me" box into the "Drop Here" box + repeatedly, until the test ends. While dragging, hold down the key + specified below as "keyPressed", if one exists, or hold no keys down if + none are specified. +</p> + +<div class="dragged box" draggable="true"> + Drag Me +</div> + +<div class="dropzone box"> + Drop Here +</div> + +<p> + Current test: <code id="test-description"></code> +</p> + +<script> + +dropEffectTests([ + { drop: 'copy', operation: 'copy' }, + { drop: 'link', operation: 'link' }, + { drop: 'move', operation: 'move' }, + { drop: 'dummy', operation: 'copy' }, +]); + +</script>
diff --git a/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js b/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js index adbef51..0cf52284 100644 --- a/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js +++ b/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js
@@ -46,6 +46,8 @@ if (window.eventSender) { if (dragged) { mouseMoveToCenter(dragged); + if ('keyPressed' in testCase) + eventSender.keyDown(testCase.keyPressed); eventSender.mouseDown(); } else { eventSender.mouseMoveTo(0, 0); @@ -54,6 +56,8 @@ setTimeout(() => { mouseMoveToCenter(dropZone); eventSender.mouseUp(); + //TODO(huangdarwin): Use eventSender.keyUp() here when it becomes + //available, to mirror eventSender.keyDown() if (doneButton) { setTimeout(() => { const clickEvent = new Event('click'); @@ -71,7 +75,7 @@ !gotDrop, 'drop target should not have received a drop event'); assert_equals(dragOperation, 'none'); } - }), `effectAllowed: ${testCase.allowed} dropEffect: ${testCase.drop}`); + }), `effectAllowed: ${testCase.allowed} keyPressed: ${testCase.keyPressed} dropEffect: ${testCase.drop}`); }; const dropEffectTests = testCases => {
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events-expected.txt b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events-expected.txt index 20d0f66..ea8cb68f 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events-expected.txt
@@ -77,8 +77,8 @@ Old focused node and new focused node exist in separated subtrees, crossing shadow boundaries. Making sure that an event is not dispatched beyond the lowest common boundary. Moving focus from shadowD/shadowF/shadowG/divH to shadowD/shadowK/divL -PASS dispatchedEvent("focus") is ["shadowK(<-shadowF)(@divJ)(capturing phase)", "divL(<-shadowF)(@divL)", "shadowK(<-shadowF)(@shadowK)"] -PASS dispatchedEvent("blur") is ["shadowF(<-shadowK)(@divE)(capturing phase)", "divH(<-shadowK)(@divH)", "shadowG(<-shadowK)(@shadowG)", "shadowF(<-shadowK)(@shadowF)"] +PASS dispatchedEvent("focus") is ["shadowK(<-shadowF)(@divJ)(capturing phase)", "shadowK(<-shadowF)(@shadowK)", "divL(<-shadowF)(@divL)"] +PASS dispatchedEvent("blur") is ["shadowF(<-shadowK)(@divE)(capturing phase)", "shadowF(<-shadowK)(@shadowF)", "shadowG(<-shadowK)(@shadowG)", "divH(<-shadowK)(@divH)"] PASS successfullyParsed is true TEST COMPLETE
diff --git a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html index d15e8c03..004ce4b 100644 --- a/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html +++ b/third_party/WebKit/LayoutTests/fast/dom/shadow/shadow-boundary-events.html
@@ -197,8 +197,8 @@ moveFocus('shadowD/shadowF/shadowG/divH', 'shadowD/shadowK/divL', 'Old focused node and new focused node exist in separated subtrees, crossing shadow boundaries. Making sure that an event is not dispatched beyond the lowest common boundary.'); - shouldBe('dispatchedEvent("focus")', '["shadowK(<-shadowF)(@divJ)(capturing phase)", "divL(<-shadowF)(@divL)", "shadowK(<-shadowF)(@shadowK)"]'); - shouldBe('dispatchedEvent("blur")', '["shadowF(<-shadowK)(@divE)(capturing phase)", "divH(<-shadowK)(@divH)", "shadowG(<-shadowK)(@shadowG)", "shadowF(<-shadowK)(@shadowF)"]'); + shouldBe('dispatchedEvent("focus")', '["shadowK(<-shadowF)(@divJ)(capturing phase)", "shadowK(<-shadowF)(@shadowK)", "divL(<-shadowF)(@divL)"]'); + shouldBe('dispatchedEvent("blur")', '["shadowF(<-shadowK)(@divE)(capturing phase)", "shadowF(<-shadowK)(@shadowF)", "shadowG(<-shadowK)(@shadowG)", "divH(<-shadowK)(@divH)"]'); } test();
diff --git a/third_party/WebKit/LayoutTests/fast/frames/frame-set-rotation-hit-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/frame-set-rotation-hit-expected.txt index 325d46c..5cfa57e73 100644 --- a/third_party/WebKit/LayoutTests/fast/frames/frame-set-rotation-hit-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/frames/frame-set-rotation-hit-expected.txt
@@ -4,14 +4,14 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutFrameSet {FRAMESET} at (0,0) size 800x600 [bgcolor=#FF0000] -layer at (0,0) size 398x600 +layer at (100,0) size 600x398 LayoutFrame {FRAME} at (0,0) size 398x600 layer at (0,0) size 398x600 LayoutView at (0,0) size 398x600 layer at (0,0) size 398x600 LayoutBlockFlow {HTML} at (0,0) size 398x600 LayoutBlockFlow {BODY} at (8,8) size 382x584 [bgcolor=#008000] -layer at (404,0) size 396x600 +layer at (100,404) size 600x396 LayoutFrame {FRAME} at (404,0) size 396x600 layer at (0,0) size 396x600 LayoutView at (0,0) size 396x600
diff --git a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-centered-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-centered-expected.txt index 9898a216..cf88b5b 100644 --- a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-centered-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-centered-expected.txt
@@ -3,14 +3,14 @@ layer at (0,0) size 800x600 LayoutBlockFlow {HTML} at (0,0) size 800x600 LayoutFrameSet {FRAMESET} at (0,0) size 800x600 [border: (5px solid #008000)] -layer at (0,0) size 238x600 +layer at (200,150) size 119x300 LayoutFrame {FRAME} at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutView at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutBlockFlow {HTML} at (0,0) size 238x600 LayoutBlockFlow {BODY} at (8,8) size 222x584 [bgcolor=#008000] -layer at (244,0) size 556x600 +layer at (322,150) size 278x300 LayoutFrame {FRAME} at (244,0) size 556x600 layer at (0,0) size 556x600 LayoutView at (0,0) size 556x600
diff --git a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-expected.txt index 66ede85a..f84efe9 100644 --- a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-expected.txt
@@ -4,14 +4,14 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutFrameSet {FRAMESET} at (0,0) size 800x600 [bgcolor=#FF0000] -layer at (0,0) size 238x600 +layer at (0,0) size 119x300 LayoutFrame {FRAME} at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutView at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutBlockFlow {HTML} at (0,0) size 238x600 LayoutBlockFlow {BODY} at (8,8) size 222x584 [bgcolor=#008000] -layer at (244,0) size 556x600 +layer at (122,0) size 278x300 LayoutFrame {FRAME} at (244,0) size 556x600 layer at (0,0) size 556x600 LayoutView at (0,0) size 556x600
diff --git a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-rotate-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-rotate-expected.txt index 66ede85a..1360c0c 100644 --- a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-rotate-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-rotate-expected.txt
@@ -4,14 +4,14 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutFrameSet {FRAMESET} at (0,0) size 800x600 [bgcolor=#FF0000] -layer at (0,0) size 238x600 +layer at (153,53) size 296x296 LayoutFrame {FRAME} at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutView at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutBlockFlow {HTML} at (0,0) size 238x600 LayoutBlockFlow {BODY} at (8,8) size 222x584 [bgcolor=#008000] -layer at (244,0) size 556x600 +layer at (239,139) size 409x409 LayoutFrame {FRAME} at (244,0) size 556x600 layer at (0,0) size 556x600 LayoutView at (0,0) size 556x600
diff --git a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-skew-expected.txt b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-skew-expected.txt index 66ede85a..93efafa 100644 --- a/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-skew-expected.txt +++ b/third_party/WebKit/LayoutTests/fast/frames/frame-set-scaling-skew-expected.txt
@@ -4,14 +4,14 @@ LayoutBlockFlow {HTML} at (0,0) size 800x600 layer at (0,0) size 800x600 LayoutFrameSet {FRAMESET} at (0,0) size 800x600 [bgcolor=#FF0000] -layer at (0,0) size 238x600 +layer at (113,150) size 293x300 LayoutFrame {FRAME} at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutView at (0,0) size 238x600 layer at (0,0) size 238x600 LayoutBlockFlow {HTML} at (0,0) size 238x600 LayoutBlockFlow {BODY} at (8,8) size 222x584 [bgcolor=#008000] -layer at (244,0) size 556x600 +layer at (235,150) size 452x300 LayoutFrame {FRAME} at (244,0) size 556x600 layer at (0,0) size 556x600 LayoutView at (0,0) size 556x600
diff --git a/third_party/WebKit/LayoutTests/images/png-inside-ico-expected.png b/third_party/WebKit/LayoutTests/images/png-inside-ico-expected.png new file mode 100644 index 0000000..96755d6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/png-inside-ico-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/images/png-inside-ico-expected.txt b/third_party/WebKit/LayoutTests/images/png-inside-ico-expected.txt new file mode 100644 index 0000000..784a746 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/png-inside-ico-expected.txt
@@ -0,0 +1,7 @@ +layer at (0,0) size 800x600 + LayoutView at (0,0) size 800x600 +layer at (0,0) size 800x600 + LayoutBlockFlow {HTML} at (0,0) size 800x600 + LayoutBlockFlow {BODY} at (8,8) size 784x584 + LayoutImage {IMG} at (0,0) size 32x32 + LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/images/png-inside-ico.html b/third_party/WebKit/LayoutTests/images/png-inside-ico.html new file mode 100644 index 0000000..0f6bf4f --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/png-inside-ico.html
@@ -0,0 +1,7 @@ +<html> + <body> + <!-- Tests that decoding an ico with an internal png file works + correctly. This is a regression test, see crbug.com/884136. --> + <img src="resources/twitter_favicon.ico"> + </body> +</html>
diff --git a/third_party/WebKit/LayoutTests/images/resources/twitter_favicon.ico b/third_party/WebKit/LayoutTests/images/resources/twitter_favicon.ico new file mode 100644 index 0000000..7716008 --- /dev/null +++ b/third_party/WebKit/LayoutTests/images/resources/twitter_favicon.ico Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.txt index e038d1112..8d01ccef 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-expected.txt
@@ -13,7 +13,7 @@ LayoutBlockFlow (relative positioned) {DIV} at (21,41) size 250x220 [bgcolor=#0000FF] layer at (49,59) size 200x200 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 200x200 [bgcolor=#FFFF00] -layer at (149,59) size 250x100 +layer at (149,72) size 267x212 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 250x100 [bgcolor=#008000] LayoutText {#text} at (0,0) size 182x19 text run at (0,0) width 182: "Box should have perspective"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt index a0a4e7d..9a2f5806 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt
@@ -15,5 +15,5 @@ LayoutBlockFlow (positioned) {DIV} at (10,60) size 50x50 [bgcolor=#FF0000] layer at (10,10) size 0x0 LayoutBlockFlow (positioned) {DIV} at (10,10) size 0x0 -layer at (10,10) size 100x100 +layer at (10,60) size 50x50 LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt index c7afb2a3..9033488 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/scaled-mask-expected.txt
@@ -8,13 +8,13 @@ text run at (0,0) width 515: "Testing masks on compositing layers. Top and bottom rows should look the same." layer at (8,52) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 -layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (8,52) size 416x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 +layer at (16,56) size 1000x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 -layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (8,300) size 416x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 +layer at (16,304) size 1000x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt index 7bad132..732cc224 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt
@@ -8,7 +8,7 @@ LayoutBlockFlow (anonymous) at (0,0) size 160x20 LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample" -layer at (8,28) size 120x120 +layer at (4,36) size 134x104 LayoutBlockFlow {DIV} at (0,20) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample" @@ -20,16 +20,16 @@ LayoutBlockFlow (anonymous) at (0,140) size 160x20 LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample" -layer at (8,188) size 120x120 +layer at (4,196) size 134x104 LayoutBlockFlow {DIV} at (0,20) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample" -layer at (8,238) size 120x120 +layer at (-9,239) size 134x104 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow {DIV} at (0,70) size 120x120 [color=#FFFFFF] [bgcolor=#646438] LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample" layer at (8,328) size 160x160 layerType: background only -layer at (8,378) size 120x120 +layer at (-4,382) size 134x104 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow (positioned) zI: -1 {DIV} at (0,50) size 120x120 [color=#FFFFFF] [bgcolor=#646438] LayoutText zI: -1 {#text} at (0,0) size 92x119 text run at (0,0) width 92: "sample sample" @@ -43,7 +43,7 @@ LayoutBlockFlow (anonymous) at (0,0) size 160x20 LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample" -layer at (8,348) size 120x120 +layer at (4,356) size 134x104 LayoutBlockFlow {DIV} at (0,20) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 44x19 text run at (0,0) width 44: "sample"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt index fdcaa7cc..2759272a08 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/fast/forms/placeholder-position-expected.txt
@@ -171,9 +171,9 @@ LayoutBlockFlow {DIV} at (165,3.50) size 9x9 layer at (8,334) size 181x36 backgroundClip at (11,321) size 175x122 clip at (11,336) size 175x32 LayoutTextControl {INPUT} at (0,326) size 181x36 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (10,351) size 177x16 backgroundClip at (14,337) size 162x102 clip at (14,351) size 162x16 +layer at (14,337) size 162x102 clip at (14,337) size 162x16 LayoutBlockFlow {DIV} at (2,17) size 177x16 [color=#757575] LayoutText {#text} at (0,0) size 66x16 text run at (0,0) width 66: "placeholder" -layer at (10,351) size 177x16 backgroundClip at (14,337) size 162x102 clip at (14,351) size 162x16 +layer at (14,337) size 162x102 clip at (14,337) size 162x16 LayoutBlockFlow {DIV} at (2,17) size 177x16
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt index d0dceff..c250032 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt
@@ -18,15 +18,15 @@ LayoutBR {BR} at (210,337) size 0x0 layer at (12,64) size 206x156 LayoutVideo {VIDEO} at (4,20) size 206x156 [border: (3px solid #FF0000)] -layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75 +layer at (65,105) size 100x75 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75 +layer at (65,105) size 100x75 LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150 layer at (12,225) size 206x156 LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)] -layer at (15,228) size 200x150 +layer at (-12,228) size 254x150 backgroundClip at (0,228) size 242x150 clip at (0,228) size 242x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,228) size 200x150 +layer at (-12,228) size 254x150 backgroundClip at (0,228) size 242x150 clip at (0,228) size 242x150 LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt index 1c827e3..e2f5f2e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-controls-expected.txt
@@ -46,18 +46,18 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A] layer at (57,310) size 240x180 LayoutVideo {VIDEO} at (45,298) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 clip at (43,291) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x156 clip at (60,313) size 234x150 +layer at (47,291) size 264x195 clip at (50,294) size 234x150 LayoutButton (relative positioned) {INPUT} at (0,0) size 240x156 [border: (3px outset #C0C0C0)] LayoutFlexibleBox (anonymous) at (12,42) size 216x72 LayoutBlockFlow {DIV} at (72,0) size 72x72 [bgcolor=#FFFFFFE6] -layer at (57,394) size 240x72 backgroundClip at (47,373) size 249x113 clip at (57,394) size 239x72 scrollWidth 266 +layer at (47,373) size 249x113 clip at (47,373) size 240x72 scrollWidth 266 LayoutFlexibleBox (relative positioned) {DIV} at (0,84) size 240x72 LayoutBlockFlow {DIV} at (24,0) size 46x72 [color=#FFFFFF] LayoutText {#text} at (0,22) size 46x27 @@ -69,16 +69,16 @@ LayoutBlockFlow {DIV} at (122,72) size 0x0 LayoutButton {INPUT} at (122,0) size 72x72 LayoutButton {INPUT} at (194,0) size 72x72 -layer at (57,466) size 240x24 +layer at (43,444) size 241x65 LayoutSlider {INPUT} at (0,156) size 240x24 [color=#9D968E] LayoutFlexibleBox {DIV} at (24,0) size 192x6 -layer at (81,466) size 192x6 +layer at (70,448) size 190x40 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D] -layer at (81,460) size 18x18 +layer at (69,442) size 21x21 LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF] -layer at (81,466) size 192x6 backgroundClip at (70,448) size 190x40 clip at (81,466) size 179x6 scrollWidth 288 +layer at (70,448) size 190x40 clip at (70,448) size 190x6 scrollWidth 288 LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6 -layer at (81,466) size 0x6 +layer at (70,448) size 1x6 LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF] -layer at (81,466) size 288x6 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 +layer at (70,448) size 285x56 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/011-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/011-expected.txt index 6cfbcfc..bc9a8ea 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/011-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/hixie/mixed/011-expected.txt
@@ -9,7 +9,7 @@ LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 200x200 backgroundClip at (0,8) size 149x283 clip at (8,8) size 141x200 LayoutSVGForeignObject {foreignObject} at (0,0) size 200x200 -layer at (58,8) size 150x200 backgroundClip at (0,8) size 149x283 clip at (0,8) size 149x283 +layer at (-98,43) size 247x248 backgroundClip at (0,8) size 149x283 clip at (0,8) size 149x283 LayoutBlockFlow (positioned) {div} at (50,0) size 150x200 LayoutText {#text} at (0,0) size 135x79 text run at (0,0) width 113: "There should be a"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt index 98e1847..252d45e 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/transforms/svg-css-transforms-expected.txt
@@ -35,7 +35,7 @@ LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (31,355) size 60x60 +layer at (107,381) size 120x120 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)] layer at (272,85) size 200x200 LayoutBlockFlow (relative positioned) {div} at (10,66.81) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-foreignObject-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-foreignObject-expected.txt index 3893cf8..3e5845f 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-foreignObject-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-foreignObject-expected.txt
@@ -31,7 +31,7 @@ LayoutText {#text} at (0,0) size 0x0 LayoutSVGRect {rect} at (260,0) size 250x200 [stroke={[type=SOLID] [color=#008000]}] [x=260.00] [y=0.00] [width=250.00] [height=200.00] LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 -layer at (0,0) size 250x200 +layer at (0,0) size 360x288 clip at (0,0) size 250x200 LayoutSVGForeignObject {foreignObject} at (0,0) size 250x200 LayoutBlockFlow {xhtml:div} at (0,0) size 250x20 LayoutText {#text} at (0,0) size 80x19 @@ -44,7 +44,7 @@ LayoutBlockFlow {xhtml:div} at (0,40) size 250x20 LayoutText {#text} at (0,0) size 56x19 text run at (0,0) width 56: "[HTML]" -layer at (260,0) size 250x200 backgroundClip at (374,0) size 360x288 clip at (374,0) size 136x200 scrollHeight 205 +layer at (374,0) size 360x288 clip at (374,0) size 250x200 scrollHeight 205 LayoutSVGForeignObject {foreignObject} at (260,0) size 250x200 LayoutSVGRoot {svg} at (0,0) size 250x200 LayoutSVGContainer {g} at (0,1.77) size 81.38x58.19 [transform={m=((3.00,0.26)(0.26,3.02)) t=(0.00,0.00)}]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-008-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-008-expected.txt index 07a9c9e..542938f6 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-008-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-008-expected.txt
@@ -15,7 +15,7 @@ LayoutText {#text} at (139,1) size 122x57 text run at (139,1) width 122: "TEST" LayoutText {#text} at (0,0) size 0x0 -layer at (12,248) size 400x50 backgroundClip at (12,325) size 576x72 clip at (0,0) size 0x0 scrollHeight 59 +layer at (12,325) size 576x72 clip at (12,325) size 400x50 scrollHeight 59 LayoutSVGForeignObject {foreignObject} at (0,175) size 400x50 [color=#FFFFFF] LayoutBlockFlow {div} at (0,0) size 400x59 LayoutText {#text} at (139,1) size 122x57
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-009-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-009-expected.txt index 8482d6d0..d4b91f0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-009-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-hixie-mixed-009-expected.txt
@@ -17,7 +17,7 @@ LayoutBlockFlow {div} at (0,206.80) size 576x172.80 [color=#000080] [bgcolor=#EEEEEE] LayoutText {#text} at (0,3) size 344x164 text run at (0,3) width 344: "TEST" -layer at (12,39) size 60x10 scrollHeight 12 +layer at (12,39) size 86x14 clip at (12,39) size 60x10 scrollHeight 12 LayoutSVGForeignObject {foreignObject} at (0,0) size 60x10 LayoutBlockFlow {div} at (0,0) size 60x12 [color=#000080] LayoutText {#text} at (0,0) size 24x12
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt index bc63bed..78cd7fa 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/2d/compound-transforms-vs-containers-expected.txt
@@ -16,9 +16,9 @@ LayoutBlockFlow (positioned) {DIV} at (1,53) size 80x80 layer at (154,149) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,129) size 80x80 +layer at (130,125) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,129) size 80x80 +layer at (103,98) size 182x182 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 [bgcolor=#FF0000] LayoutText {#text} at (0,0) size 64x19 text run at (0,0) width 64: "Individual" @@ -31,11 +31,11 @@ text run at (0,0) width 105: "Translate second" layer at (79,371) size 80x80 LayoutBlockFlow (positioned) {DIV} at (1,53) size 80x80 -layer at (79,371) size 80x80 +layer at (55,347) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,371) size 80x80 +layer at (175,379) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,371) size 80x80 +layer at (148,352) size 182x182 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 [bgcolor=#FF0000] LayoutText {#text} at (0,0) size 64x19 text run at (0,0) width 64: "Individual"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt index 996499d..69b4fbd 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt
@@ -18,11 +18,11 @@ LayoutText {#text} at (197,32) size 4x19 text run at (197,32) width 4: " " LayoutText {#text} at (0,0) size 0x0 -layer at (27,63) size 160x160 +layer at (231,63) size 160x160 LayoutBlockFlow (relative positioned) {DIV} at (19,19) size 160x160 [bgcolor=#808080] LayoutText {#text} at (48,0) size 64x36 text run at (48,0) width 64: "box1" -layer at (227,63) size 160x160 +layer at (31,63) size 160x160 LayoutBlockFlow (relative positioned) {DIV} at (219,19) size 160x160 [bgcolor=#808080] LayoutText {#text} at (48,0) size 64x36 text run at (48,0) width 64: "box2"
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt index cd92170..9b5c9dc 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt
@@ -37,22 +37,22 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,104) size 100x100 +layer at (105,103) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] -layer at (125,125) size 90x90 +layer at (124,125) size 90x105 LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (288,42) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (330,84) size 100x100 +layer at (335,81) size 92x110 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)] -layer at (351,85) size 90x90 +layer at (352,82) size 86x100 LayoutBlockFlow {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (534,42) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)] -layer at (597,85) size 90x90 +layer at (598,82) size 86x100 LayoutBlockFlow {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt index b1b85dc..4a9ad39 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt
@@ -9,15 +9,15 @@ LayoutBlockFlow {DIV} at (21,21) size 340x340 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,63) size 300x300 LayoutBlockFlow {DIV} at (21,21) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,104) size 300x300 +layer at (100,93) size 267x331 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] -layer at (145,145) size 300x300 +layer at (150,139) size 300x372 LayoutBlockFlow {DIV} at (41,41) size 300x300 [bgcolor=#AA7994] [border: (1px solid #000000)] -layer at (186,186) size 300x300 +layer at (213,194) size 291x373 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] -layer at (227,227) size 300x300 +layer at (257,238) size 270x359 LayoutBlockFlow {DIV} at (41,41) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (268,268) size 300x300 +layer at (293,260) size 278x370 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (61,61) size 90x90 [bgcolor=#0000FF] layer at (30,650) size 345x160 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.txt index 602d24a..9334a04 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-expected.txt
@@ -60,7 +60,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (84,330) size 100x100 +layer at (85,314) size 114x157 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (267,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (267,267) size 202x202 [border: (1px solid #000000)] @@ -69,5 +69,5 @@ layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#C0D69E] [border: (1px solid #000000)] -layer at (351,351) size 100x100 +layer at (351,346) size 126x166 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt index a56a2043..38fd53a0 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt
@@ -66,12 +66,12 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,310) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (84,331) size 100x100 +layer at (88,282) size 136x170 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (288,289) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,310) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#C0D69E] [border: (1px solid #000000)] -layer at (351,352) size 100x100 +layer at (358,313) size 150x180 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt index c73fed2..97c3006 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt
@@ -32,7 +32,7 @@ LayoutBlockFlow (positioned) {DIV} at (21,21) size 260x260 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (73,63) size 200x200 LayoutBlockFlow (positioned) {DIV} at (31,21) size 200x200 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (124,114) size 100x100 +layer at (117,106) size 114x114 LayoutBlockFlow (relative positioned) {DIV} at (51,51) size 100x100 [bgcolor=#0000FF] layer at (22,22) size 150x300 LayoutBlockFlow (positioned) {DIV} at (1,1) size 150x300 [bgcolor=#0080004D]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt index 62bfe9a..03c5f06 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt
@@ -92,7 +92,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (576,84) size 90x90 +layer at (581,82) size 81x97 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (21,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (21,267) size 202x202 [border: (1px solid #000000)] @@ -100,7 +100,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,350) size 100x100 +layer at (105,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] layer at (267,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (267,267) size 202x202 [border: (1px solid #000000)] @@ -108,7 +108,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (350,350) size 100x100 +layer at (351,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (513,267) size 202x202 @@ -117,8 +117,8 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (596,350) size 100x100 +layer at (597,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] -layer at (637,391) size 100x100 +layer at (628,393) size 112x115 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [bgcolor=#AA7994] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt index 28bfe03..2e98c63 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/svg-vs-css-expected.txt
@@ -44,7 +44,7 @@ LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (31,355) size 60x60 +layer at (107,381) size 120x120 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)] layer at (272,85) size 200x200 LayoutBlockFlow (relative positioned) {div} at (10,66.81) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt index 8773277..e02e099 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/transforms/transformed-focused-text-input-expected.txt
@@ -7,6 +7,6 @@ LayoutBlockFlow {DIV} at (0,0) size 784x22 LayoutTextControl {INPUT} at (0,0) size 181x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (10,11) size 177x16 backgroundClip at (7,11) size 177x47 clip at (10,11) size 174x16 +layer at (7,11) size 177x47 clip at (7,11) size 177x16 LayoutBlockFlow {DIV} at (2,3) size 177x16 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png deleted file mode 100644 index 3700b9e4..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt deleted file mode 100644 index c7afb2a3..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-mask-expected.txt +++ /dev/null
@@ -1,20 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x52 - LayoutBlockFlow {HTML} at (0,0) size 800x52 - LayoutBlockFlow {BODY} at (8,16) size 784x20 - LayoutBlockFlow {P} at (0,0) size 784x20 - LayoutText {#text} at (0,0) size 515x19 - text run at (0,0) width 515: "Testing masks on compositing layers. Top and bottom rows should look the same." -layer at (8,52) size 0x0 - LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 -layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 - LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] -layer at (8,300) size 0x0 - LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 -layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 - LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 - LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt deleted file mode 100644 index d0dceff..0000000 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt +++ /dev/null
@@ -1,32 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x600 - LayoutBlockFlow {HTML} at (0,0) size 800x600 - LayoutBlockFlow {BODY} at (8,8) size 784x584 - LayoutBlockFlow {P} at (0,0) size 784x20 - LayoutText {#text} at (0,0) size 359x19 - text run at (0,0) width 359: "Test dynamic removal of transformed and reflected video" - LayoutBlockFlow (anonymous) at (0,36) size 784x342 - LayoutText {#text} at (0,0) size 4x19 - text run at (0,0) width 4: " " - LayoutBR {BR} at (4,15) size 0x0 - LayoutText {#text} at (0,161) size 4x19 - text run at (0,161) width 4: " " - LayoutBR {BR} at (210,176) size 0x0 - LayoutText {#text} at (0,322) size 4x19 - text run at (0,322) width 4: " " - LayoutBR {BR} at (210,337) size 0x0 -layer at (12,64) size 206x156 - LayoutVideo {VIDEO} at (4,20) size 206x156 [border: (3px solid #FF0000)] -layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 - LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75 - LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150 -layer at (12,225) size 206x156 - LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)] -layer at (15,228) size 200x150 - LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 - LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,228) size 200x150 - LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt index 381706f42..5c2eeb7 100644 --- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
@@ -47,18 +47,18 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A] layer at (57,310) size 240x180 LayoutVideo {VIDEO} at (45,298) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 clip at (43,291) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x156 clip at (60,313) size 234x150 +layer at (47,291) size 264x195 clip at (50,294) size 234x150 LayoutButton (relative positioned) {INPUT} at (0,0) size 240x156 [border: (3px outset #C0C0C0)] LayoutFlexibleBox (anonymous) at (12,42) size 216x72 LayoutBlockFlow {DIV} at (72,0) size 72x72 [bgcolor=#FFFFFFE6] -layer at (57,394) size 240x72 backgroundClip at (47,373) size 249x113 clip at (57,394) size 239x72 scrollWidth 338 +layer at (47,373) size 249x113 clip at (47,373) size 240x72 scrollWidth 338 LayoutFlexibleBox (relative positioned) {DIV} at (0,84) size 240x72 LayoutBlockFlow {DIV} at (24,0) size 46x72 [color=#FFFFFF] LayoutText {#text} at (0,22) size 46x27 @@ -71,16 +71,16 @@ LayoutButton {INPUT} at (122,0) size 72x72 LayoutButton {INPUT} at (194,0) size 72x72 LayoutButton {INPUT} at (266,0) size 72x72 -layer at (57,466) size 240x24 +layer at (43,444) size 241x65 LayoutSlider {INPUT} at (0,156) size 240x24 [color=#9D968E] LayoutFlexibleBox {DIV} at (24,0) size 192x6 -layer at (81,466) size 192x6 +layer at (70,448) size 190x40 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D] -layer at (81,460) size 18x18 +layer at (69,442) size 21x21 LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF] -layer at (81,466) size 192x6 backgroundClip at (70,448) size 190x40 clip at (81,466) size 179x6 scrollWidth 288 +layer at (70,448) size 190x40 clip at (70,448) size 190x6 scrollWidth 288 LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6 -layer at (81,466) size 0x6 +layer at (70,448) size 1x6 LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF] -layer at (81,466) size 288x6 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 +layer at (70,448) size 285x56 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt index 347fa07..5b12726 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/placeholder-position-expected.txt
@@ -172,9 +172,9 @@ LayoutBlockFlow {DIV} at (114,1) size 11x11 layer at (8,283) size 131x33 backgroundClip at (9,282) size 129x95 clip at (10,285) size 127x29 LayoutTextControl {INPUT} at (0,275) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (11,300) size 125x13 backgroundClip at (13,299) size 114x73 clip at (13,300) size 114x13 +layer at (13,299) size 114x73 clip at (13,299) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 59x13 text run at (0,0) width 59: "placeholder" -layer at (11,300) size 125x13 backgroundClip at (13,299) size 114x73 clip at (13,300) size 114x13 +layer at (13,299) size 114x73 clip at (13,299) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt index 66963f7..174e4a9 100644 --- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/fast/forms/placeholder-position-expected.txt
@@ -172,9 +172,9 @@ LayoutBlockFlow {DIV} at (114,1) size 11x11 layer at (8,284) size 131x33 backgroundClip at (9,283) size 129x95 clip at (10,286) size 127x29 LayoutTextControl {INPUT} at (0,276) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 +layer at (13,300) size 114x73 clip at (13,300) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 62x13 text run at (0,0) width 62: "placeholder" -layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 +layer at (13,300) size 114x73 clip at (13,300) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-expected.txt index e913ade..5e4370e1 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-expected.txt
@@ -13,7 +13,7 @@ LayoutBlockFlow (relative positioned) {DIV} at (21,39) size 250x220 [bgcolor=#0000FF] layer at (49,57) size 200x200 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 200x200 [bgcolor=#FFFF00] -layer at (149,57) size 250x100 +layer at (149,70) size 267x212 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 250x100 [bgcolor=#008000] LayoutText {#text} at (0,0) size 185x18 text run at (0,0) width 185: "Box should have perspective"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt index a94fbdb..c9ad6ab 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt
@@ -15,5 +15,5 @@ LayoutBlockFlow (positioned) {DIV} at (10,60) size 50x50 [bgcolor=#FF0000] layer at (10,10) size 0x0 LayoutBlockFlow (positioned) {DIV} at (10,10) size 0x0 -layer at (10,10) size 100x100 +layer at (10,60) size 50x50 LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt index c9f1d9f3..88e0fd7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/mask-with-filter-expected.txt
@@ -6,7 +6,7 @@ LayoutText {#text} at (0,0) size 0x0 layer at (108,8) size 208x208 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208 -layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (18,8) size 454x246 clip at (22,12) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (112,12) size 500x500 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 +layer at (-103,13) size 1091x591 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt index 7bed3f72..06514b6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/scaled-mask-expected.txt
@@ -8,13 +8,13 @@ text run at (0,0) width 524: "Testing masks on compositing layers. Top and bottom rows should look the same." layer at (8,50) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,50) size 0x0 -layer at (8,50) size 208x208 clip at (12,54) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (8,50) size 416x208 clip at (12,54) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,54) size 500x500 backgroundClip at (16,54) size 400x200 clip at (16,54) size 400x200 +layer at (16,54) size 1000x500 backgroundClip at (16,54) size 400x200 clip at (16,54) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 -layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (8,300) size 416x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 +layer at (16,304) size 1000x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt index d1e6250..b733fc3 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt
@@ -8,7 +8,7 @@ LayoutBlockFlow (anonymous) at (0,0) size 160x18 LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample" -layer at (8,26) size 120x120 +layer at (4,34) size 134x104 LayoutBlockFlow {DIV} at (0,18) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample" @@ -20,16 +20,16 @@ LayoutBlockFlow (anonymous) at (0,138) size 160x18 LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample" -layer at (8,186) size 120x120 +layer at (4,194) size 134x104 LayoutBlockFlow {DIV} at (0,18) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample" -layer at (8,234) size 120x120 +layer at (-8,236) size 134x104 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow {DIV} at (0,66) size 120x120 [color=#FFFFFF] [bgcolor=#646438] LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample" layer at (8,328) size 160x160 layerType: background only -layer at (8,376) size 120x120 +layer at (-3,380) size 134x104 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow (positioned) zI: -1 {DIV} at (0,48) size 120x120 [color=#FFFFFF] [bgcolor=#646438] LayoutText zI: -1 {#text} at (0,0) size 95x108 text run at (0,0) width 95: "sample sample" @@ -43,7 +43,7 @@ LayoutBlockFlow (anonymous) at (0,0) size 160x18 LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample" -layer at (8,346) size 120x120 +layer at (4,354) size 134x104 LayoutBlockFlow {DIV} at (0,18) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 46x18 text run at (0,0) width 46: "sample"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt index d6bf290..e9a88d4 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/placeholder-position-expected.txt
@@ -172,9 +172,9 @@ LayoutBlockFlow {DIV} at (114,1) size 11x11 layer at (8,284) size 131x33 backgroundClip at (9,283) size 129x95 clip at (10,286) size 127x29 LayoutTextControl {INPUT} at (0,276) size 131x33 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 +layer at (13,300) size 114x73 clip at (13,300) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13 [color=#757575] LayoutText {#text} at (0,0) size 62x13 text run at (0,0) width 62: "placeholder" -layer at (11,301) size 125x13 backgroundClip at (13,300) size 114x73 clip at (13,301) size 114x13 +layer at (13,300) size 114x73 clip at (13,300) size 114x13 LayoutBlockFlow {DIV} at (3,17) size 125x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt index 273ce98..a4c6b42 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt
@@ -18,15 +18,15 @@ LayoutBR {BR} at (210,334) size 0x0 layer at (12,60) size 206x156 LayoutVideo {VIDEO} at (4,18) size 206x156 [border: (3px solid #FF0000)] -layer at (15,63) size 200x150 backgroundClip at (65,101) size 100x75 clip at (65,101) size 100x75 +layer at (65,101) size 100x75 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,63) size 200x150 backgroundClip at (65,101) size 100x75 clip at (65,101) size 100x75 +layer at (65,101) size 100x75 LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150 layer at (12,220) size 206x156 LayoutVideo {VIDEO} at (4,178) size 206x156 [border: (3px solid #FF0000)] -layer at (15,223) size 200x150 +layer at (-12,223) size 254x150 backgroundClip at (0,223) size 242x150 clip at (0,223) size 242x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,223) size 200x150 +layer at (-12,223) size 254x150 backgroundClip at (0,223) size 242x150 clip at (0,223) size 242x150 LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt index 762b36e..d22d73f6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-controls-expected.txt
@@ -46,18 +46,18 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A] layer at (57,310) size 240x180 LayoutVideo {VIDEO} at (45,298) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 clip at (43,291) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x156 clip at (59,312) size 237x153 +layer at (47,291) size 264x195 clip at (49,292) size 237x153 LayoutButton (relative positioned) {INPUT} at (0,0) size 240x156 [border: (1.50px solid #D8D8D8) (1.50px solid #D1D1D1) (1.50px solid #BABABA) (1.50px solid #D1D1D1)] LayoutFlexibleBox (anonymous) at (12,41.25) size 216x72 LayoutBlockFlow {DIV} at (72,0) size 72x72 [bgcolor=#FFFFFFE6] -layer at (57,394) size 240x72 backgroundClip at (47,373) size 249x113 clip at (57,394) size 239x72 scrollWidth 267 +layer at (47,373) size 249x113 clip at (47,373) size 240x72 scrollWidth 267 LayoutFlexibleBox (relative positioned) {DIV} at (0,84) size 240x72 LayoutBlockFlow {DIV} at (24,0) size 46.72x72 [color=#FFFFFF] LayoutText {#text} at (0,22) size 47x28 @@ -69,16 +69,16 @@ LayoutBlockFlow {DIV} at (123.44,72) size 0x0 LayoutButton {INPUT} at (123.44,0) size 72x72 LayoutButton {INPUT} at (195.44,0) size 72x72 -layer at (57,466) size 240x24 +layer at (43,444) size 241x65 LayoutSlider {INPUT} at (0,156) size 240x24 [color=#909090] LayoutFlexibleBox {DIV} at (24,0) size 192x6 -layer at (81,466) size 192x6 +layer at (70,448) size 190x40 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D] -layer at (81,460) size 18x18 +layer at (69,442) size 21x21 LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF] -layer at (81,466) size 192x6 backgroundClip at (70,448) size 190x40 clip at (81,466) size 179x6 scrollWidth 288 +layer at (70,448) size 190x40 clip at (70,448) size 190x6 scrollWidth 288 LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6 -layer at (81,466) size 0x6 +layer at (70,448) size 1x6 LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF] -layer at (81,466) size 288x6 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 +layer at (70,448) size 285x56 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/011-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/011-expected.txt index 61f6e69..2cd5262 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/011-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/hixie/mixed/011-expected.txt
@@ -9,7 +9,7 @@ LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 200x200 backgroundClip at (0,8) size 149x283 clip at (8,8) size 141x200 LayoutSVGForeignObject {foreignObject} at (0,0) size 200x200 -layer at (58,8) size 150x200 backgroundClip at (0,8) size 149x283 clip at (0,8) size 149x283 +layer at (-98,43) size 247x248 backgroundClip at (0,8) size 149x283 clip at (0,8) size 149x283 LayoutBlockFlow (positioned) {div} at (50,0) size 150x200 LayoutText {#text} at (0,0) size 139x72 text run at (0,0) width 115: "There should be a"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt index d306b58..6ee8785 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/transforms/svg-css-transforms-expected.txt
@@ -35,7 +35,7 @@ LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (105,381) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (31,357) size 60x60 +layer at (107,383) size 120x120 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)] layer at (272,86) size 200x200 LayoutBlockFlow (relative positioned) {div} at (10,67.81) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-foreignObject-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-foreignObject-expected.txt index 785215d..68c08fed 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-foreignObject-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-foreignObject-expected.txt
@@ -31,7 +31,7 @@ LayoutText {#text} at (0,0) size 0x0 LayoutSVGRect {rect} at (260,0) size 250x200 [stroke={[type=SOLID] [color=#008000]}] [x=260.00] [y=0.00] [width=250.00] [height=200.00] LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 -layer at (0,0) size 250x200 +layer at (0,0) size 360x288 clip at (0,0) size 250x200 LayoutSVGForeignObject {foreignObject} at (0,0) size 250x200 LayoutBlockFlow {xhtml:div} at (0,0) size 250x18 LayoutText {#text} at (0,0) size 83x18 @@ -44,7 +44,7 @@ LayoutBlockFlow {xhtml:div} at (0,36) size 250x18 LayoutText {#text} at (0,0) size 56x18 text run at (0,0) width 56: "[HTML]" -layer at (260,0) size 250x200 backgroundClip at (374,0) size 360x288 clip at (374,0) size 136x200 scrollHeight 204 +layer at (374,0) size 360x288 clip at (374,0) size 250x200 scrollHeight 204 LayoutSVGForeignObject {foreignObject} at (260,0) size 250x200 LayoutSVGRoot {svg} at (0,0) size 250x200 LayoutSVGContainer {g} at (0,1.77) size 82.20x58.19 [transform={m=((3.00,0.26)(0.26,3.02)) t=(0.00,0.00)}]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-008-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-008-expected.txt index ecb8f66..ad5dae7 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-008-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-008-expected.txt
@@ -15,7 +15,7 @@ LayoutText {#text} at (140,0) size 120x59 text run at (140,0) width 120: "TEST" LayoutText {#text} at (0,0) size 0x0 -layer at (12,247) size 400x50 backgroundClip at (12,324) size 576x72 clip at (0,0) size 0x0 scrollHeight 59 +layer at (12,324) size 576x72 clip at (12,324) size 400x50 scrollHeight 59 LayoutSVGForeignObject {foreignObject} at (0,175) size 400x50 [color=#FFFFFF] LayoutBlockFlow {div} at (0,0) size 400x59 LayoutText {#text} at (140,0) size 120x59
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-009-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-009-expected.txt index 24b0024..41c9bf2 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-009-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-hixie-mixed-009-expected.txt
@@ -17,7 +17,7 @@ LayoutBlockFlow {div} at (0,204.80) size 576x172.80 [color=#000080] [bgcolor=#EEEEEE] LayoutText {#text} at (0,0) size 344x166 text run at (0,0) width 344: "TEST" -layer at (12,38) size 60x10 scrollHeight 13 +layer at (12,38) size 86x14 clip at (12,38) size 60x10 scrollHeight 13 LayoutSVGForeignObject {foreignObject} at (0,0) size 60x10 LayoutBlockFlow {div} at (0,0) size 60x13 [color=#000080] LayoutText {#text} at (0,0) size 24x13
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt index 8933c4f..c53da25d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/2d/compound-transforms-vs-containers-expected.txt
@@ -16,9 +16,9 @@ LayoutBlockFlow (positioned) {DIV} at (1,51) size 80x80 layer at (154,143) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,123) size 80x80 +layer at (130,119) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,123) size 80x80 +layer at (103,92) size 182x182 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 [bgcolor=#FF0000] LayoutText {#text} at (0,0) size 66x18 text run at (0,0) width 66: "Individual" @@ -31,11 +31,11 @@ text run at (0,0) width 108: "Translate second" layer at (79,365) size 80x80 LayoutBlockFlow (positioned) {DIV} at (1,51) size 80x80 -layer at (79,365) size 80x80 +layer at (55,341) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,365) size 80x80 +layer at (175,373) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,365) size 80x80 +layer at (148,346) size 182x182 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 [bgcolor=#FF0000] LayoutText {#text} at (0,0) size 66x18 text run at (0,0) width 66: "Individual"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt index 33a29c06..e212f098 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt
@@ -18,11 +18,11 @@ LayoutText {#text} at (197,34) size 4x18 text run at (197,34) width 4: " " LayoutText {#text} at (0,0) size 0x0 -layer at (27,61) size 160x160 +layer at (231,61) size 160x160 LayoutBlockFlow (relative positioned) {DIV} at (19,19) size 160x160 [bgcolor=#808080] LayoutText {#text} at (48,0) size 64x37 text run at (48,0) width 64: "box1" -layer at (227,61) size 160x160 +layer at (31,61) size 160x160 LayoutBlockFlow (relative positioned) {DIV} at (219,19) size 160x160 [bgcolor=#808080] LayoutText {#text} at (48,0) size 64x37 text run at (48,0) width 64: "box2"
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt index 75143c8..16d5fc6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt
@@ -37,22 +37,22 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,104) size 100x100 +layer at (105,103) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] -layer at (125,125) size 90x90 +layer at (124,125) size 90x105 LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (288,42) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (330,84) size 100x100 +layer at (335,81) size 92x110 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)] -layer at (351,85) size 90x90 +layer at (352,82) size 86x100 LayoutBlockFlow {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (534,42) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)] -layer at (597,85) size 90x90 +layer at (598,82) size 86x100 LayoutBlockFlow {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt index 85046156..23037e8 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt
@@ -9,15 +9,15 @@ LayoutBlockFlow {DIV} at (21,21) size 340x340 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,63) size 300x300 LayoutBlockFlow {DIV} at (21,21) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,104) size 300x300 +layer at (100,93) size 267x331 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] -layer at (145,145) size 300x300 +layer at (150,139) size 300x372 LayoutBlockFlow {DIV} at (41,41) size 300x300 [bgcolor=#AA7994] [border: (1px solid #000000)] -layer at (186,186) size 300x300 +layer at (213,194) size 291x373 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] -layer at (227,227) size 300x300 +layer at (257,238) size 270x359 LayoutBlockFlow {DIV} at (41,41) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (268,268) size 300x300 +layer at (293,260) size 278x370 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (61,61) size 90x90 [bgcolor=#0000FF] layer at (30,650) size 349x144 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt index ee409db8da..c1efb6b6 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-expected.txt
@@ -60,7 +60,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (84,330) size 100x100 +layer at (85,314) size 114x157 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (267,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (267,267) size 202x202 [border: (1px solid #000000)] @@ -69,5 +69,5 @@ layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#C0D69E] [border: (1px solid #000000)] -layer at (351,351) size 100x100 +layer at (351,346) size 126x166 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt index e3f8c2e..f58a7ad 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt
@@ -66,12 +66,12 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (84,330) size 100x100 +layer at (88,281) size 136x170 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (288,288) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#C0D69E] [border: (1px solid #000000)] -layer at (351,351) size 100x100 +layer at (358,312) size 150x180 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt index 4a0be3f..fbc4e9d 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt
@@ -32,7 +32,7 @@ LayoutBlockFlow (positioned) {DIV} at (21,21) size 260x260 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (73,63) size 200x200 LayoutBlockFlow (positioned) {DIV} at (31,21) size 200x200 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (124,114) size 100x100 +layer at (117,106) size 114x114 LayoutBlockFlow (relative positioned) {DIV} at (51,51) size 100x100 [bgcolor=#0000FF] layer at (22,22) size 150x300 LayoutBlockFlow (positioned) {DIV} at (1,1) size 150x300 [bgcolor=#0080004D]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt index 3824532..71d99b0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt
@@ -92,7 +92,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (576,84) size 90x90 +layer at (581,82) size 81x97 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (21,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (21,267) size 202x202 [border: (1px solid #000000)] @@ -100,7 +100,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,350) size 100x100 +layer at (105,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] layer at (267,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (267,267) size 202x202 [border: (1px solid #000000)] @@ -108,7 +108,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (350,350) size 100x100 +layer at (351,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (513,267) size 202x202 @@ -117,8 +117,8 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (596,350) size 100x100 +layer at (597,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] -layer at (637,391) size 100x100 +layer at (628,393) size 112x115 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [bgcolor=#AA7994] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt index 438212a..1cd6961 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/svg-vs-css-expected.txt
@@ -44,7 +44,7 @@ LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (105,381) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (31,357) size 60x60 +layer at (107,383) size 120x120 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)] layer at (272,86) size 200x200 LayoutBlockFlow (relative positioned) {div} at (10,67.81) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt index 2b74034..2651a1e0 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/transformed-focused-text-input-expected.txt
@@ -7,6 +7,6 @@ LayoutBlockFlow {DIV} at (0,0) size 784x19 LayoutTextControl {INPUT} at (0,0) size 131x19 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (11,11) size 125x13 backgroundClip at (8,11) size 126x35 clip at (11,11) size 123x13 +layer at (8,11) size 126x35 clip at (8,11) size 125x13 LayoutBlockFlow {DIV} at (3,3) size 125x13 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt index d40ff8f..ad1c937 100644 --- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
@@ -47,18 +47,18 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A] layer at (57,310) size 240x180 LayoutVideo {VIDEO} at (45,298) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 clip at (43,291) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x156 clip at (59,312) size 237x153 +layer at (47,291) size 264x195 clip at (49,292) size 237x153 LayoutButton (relative positioned) {INPUT} at (0,0) size 240x156 [border: (1.50px solid #D8D8D8) (1.50px solid #D1D1D1) (1.50px solid #BABABA) (1.50px solid #D1D1D1)] LayoutFlexibleBox (anonymous) at (12,41.25) size 216x72 LayoutBlockFlow {DIV} at (72,0) size 72x72 [bgcolor=#FFFFFFE6] -layer at (57,394) size 240x72 backgroundClip at (47,373) size 249x113 clip at (57,394) size 239x72 scrollWidth 339 +layer at (47,373) size 249x113 clip at (47,373) size 240x72 scrollWidth 339 LayoutFlexibleBox (relative positioned) {DIV} at (0,84) size 240x72 LayoutBlockFlow {DIV} at (24,0) size 46.72x72 [color=#FFFFFF] LayoutText {#text} at (0,22) size 47x28 @@ -71,16 +71,16 @@ LayoutButton {INPUT} at (123.44,0) size 72x72 LayoutButton {INPUT} at (195.44,0) size 72x72 LayoutButton {INPUT} at (267.44,0) size 72x72 -layer at (57,466) size 240x24 +layer at (43,444) size 241x65 LayoutSlider {INPUT} at (0,156) size 240x24 [color=#909090] LayoutFlexibleBox {DIV} at (24,0) size 192x6 -layer at (81,466) size 192x6 +layer at (70,448) size 190x40 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D] -layer at (81,460) size 18x18 +layer at (69,442) size 21x21 LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF] -layer at (81,466) size 192x6 backgroundClip at (70,448) size 190x40 clip at (81,466) size 179x6 scrollWidth 288 +layer at (70,448) size 190x40 clip at (70,448) size 190x6 scrollWidth 288 LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6 -layer at (81,466) size 0x6 +layer at (70,448) size 1x6 LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF] -layer at (81,466) size 288x6 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 +layer at (70,448) size 285x56 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-expected.txt index 4de63a5e..5a6b908 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-expected.txt
@@ -13,7 +13,7 @@ LayoutBlockFlow (relative positioned) {DIV} at (21,41) size 250x220 [bgcolor=#0000FF] layer at (49,59) size 200x200 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 200x200 [bgcolor=#FFFF00] -layer at (149,59) size 250x100 +layer at (149,72) size 267x212 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 250x100 [bgcolor=#008000] LayoutText {#text} at (0,0) size 173x19 text run at (0,0) width 173: "Box should have perspective"
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt index f89662a..b38db1f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/transfrom-origin-on-zero-size-layer-expected.txt
@@ -15,5 +15,5 @@ LayoutBlockFlow (positioned) {DIV} at (10,60) size 50x50 [bgcolor=#FF0000] layer at (10,10) size 0x0 LayoutBlockFlow (positioned) {DIV} at (10,10) size 0x0 -layer at (10,10) size 100x100 +layer at (10,60) size 50x50 LayoutBlockFlow (positioned) {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt index b7278d0c..099ea748 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/mask-with-filter-expected.txt
@@ -6,7 +6,7 @@ LayoutText {#text} at (0,0) size 0x0 layer at (108,8) size 208x208 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 208x208 -layer at (108,8) size 208x208 clip at (112,12) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (18,8) size 454x246 clip at (22,12) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (112,12) size 500x500 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 +layer at (-103,13) size 1091x591 backgroundClip at (27,13) size 436x236 clip at (27,13) size 436x236 LayoutBlockFlow {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt index 88fee7961..3cea056 100644 --- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/scaled-mask-expected.txt
@@ -8,13 +8,13 @@ text run at (0,0) width 492: "Testing masks on compositing layers. Top and bottom rows should look the same." layer at (8,52) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,52) size 0x0 -layer at (8,52) size 208x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (8,52) size 416x208 clip at (12,56) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,56) size 500x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 +layer at (16,56) size 1000x500 backgroundClip at (16,56) size 400x200 clip at (16,56) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000] layer at (8,300) size 0x0 LayoutBlockFlow (positioned) {DIV} at (8,300) size 0x0 -layer at (8,300) size 208x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 +layer at (8,300) size 416x208 clip at (12,304) size 200x200 scrollWidth 500 scrollHeight 500 LayoutBlockFlow (positioned) {DIV} at (0,0) size 208x208 [bgcolor=#808080] [border: (4px solid #FF0000)] -layer at (12,304) size 500x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 +layer at (16,304) size 1000x500 backgroundClip at (16,304) size 400x200 clip at (16,304) size 400x200 LayoutBlockFlow (positioned) {DIV} at (4,4) size 500x500 [bgcolor=#000000]
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt index 18190c6..c59a071 100644 --- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-overlapping-accelerated-elements-expected.txt
@@ -8,7 +8,7 @@ LayoutBlockFlow (anonymous) at (0,0) size 160x20 LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample" -layer at (8,28) size 120x120 +layer at (4,36) size 134x104 LayoutBlockFlow {DIV} at (0,20) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample" @@ -20,16 +20,16 @@ LayoutBlockFlow (anonymous) at (0,140) size 160x20 LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample" -layer at (8,188) size 120x120 +layer at (4,196) size 134x104 LayoutBlockFlow {DIV} at (0,20) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample" -layer at (8,238) size 120x120 +layer at (-9,239) size 134x104 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow {DIV} at (0,70) size 120x120 [color=#FFFFFF] [bgcolor=#646438] LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample" layer at (8,328) size 160x160 layerType: background only -layer at (8,378) size 120x120 +layer at (-4,382) size 134x104 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutBlockFlow (positioned) zI: -1 {DIV} at (0,50) size 120x120 [color=#FFFFFF] [bgcolor=#646438] LayoutText zI: -1 {#text} at (0,0) size 88x119 text run at (0,0) width 88: "sample sample" @@ -43,7 +43,7 @@ LayoutBlockFlow (anonymous) at (0,0) size 160x20 LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample" -layer at (8,348) size 120x120 +layer at (4,356) size 134x104 LayoutBlockFlow {DIV} at (0,20) size 120x120 [color=#FFFF00] [bgcolor=#C8C89C] LayoutText {#text} at (0,0) size 42x19 text run at (0,0) width 42: "sample"
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt index 464d6cbd..526dc6c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/placeholder-position-expected.txt
@@ -171,9 +171,9 @@ LayoutBlockFlow {DIV} at (157,3.50) size 9x9 layer at (8,334) size 173x36 backgroundClip at (11,323) size 167x118 clip at (11,336) size 167x32 LayoutTextControl {INPUT} at (0,326) size 173x36 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] -layer at (10,351) size 169x16 backgroundClip at (14,339) size 154x98 clip at (14,351) size 154x16 +layer at (14,339) size 154x98 clip at (14,339) size 154x16 LayoutBlockFlow {DIV} at (2,17) size 169x16 [color=#757575] LayoutText {#text} at (0,0) size 66x16 text run at (0,0) width 66: "placeholder" -layer at (10,351) size 169x16 backgroundClip at (14,339) size 154x98 clip at (14,351) size 154x16 +layer at (14,339) size 154x98 clip at (14,339) size 154x16 LayoutBlockFlow {DIV} at (2,17) size 169x16
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt index 86c5cd83..0f26d5f 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt
@@ -18,15 +18,15 @@ LayoutBR {BR} at (210,337) size 0x0 layer at (12,64) size 206x156 LayoutVideo {VIDEO} at (4,20) size 206x156 [border: (3px solid #FF0000)] -layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75 +layer at (65,105) size 100x75 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75 +layer at (65,105) size 100x75 LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150 layer at (12,225) size 206x156 LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)] -layer at (15,228) size 200x150 +layer at (-12,228) size 254x150 backgroundClip at (0,228) size 242x150 clip at (0,228) size 242x150 LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150 LayoutFlexibleBox {DIV} at (0,0) size 200x150 -layer at (15,228) size 200x150 +layer at (-12,228) size 254x150 backgroundClip at (0,228) size 242x150 clip at (0,228) size 242x150 LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt index d4220b3..d7a3056 100644 --- a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-controls-expected.txt
@@ -46,18 +46,18 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A] layer at (57,310) size 240x180 LayoutVideo {VIDEO} at (45,298) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 clip at (43,291) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x156 clip at (60,313) size 234x150 +layer at (47,291) size 264x195 clip at (50,294) size 234x150 LayoutButton (relative positioned) {INPUT} at (0,0) size 240x156 [border: (3px outset #C0C0C0)] LayoutFlexibleBox (anonymous) at (12,42) size 216x72 LayoutBlockFlow {DIV} at (72,0) size 72x72 [bgcolor=#FFFFFFE6] -layer at (57,394) size 240x72 backgroundClip at (47,373) size 249x113 clip at (57,394) size 239x72 scrollWidth 266 +layer at (47,373) size 249x113 clip at (47,373) size 240x72 scrollWidth 266 LayoutFlexibleBox (relative positioned) {DIV} at (0,84) size 240x72 LayoutBlockFlow {DIV} at (24,0) size 46x72 [color=#FFFFFF] LayoutText {#text} at (0,22) size 46x27 @@ -69,16 +69,16 @@ LayoutBlockFlow {DIV} at (122,72) size 0x0 LayoutButton {INPUT} at (122,0) size 72x72 LayoutButton {INPUT} at (194,0) size 72x72 -layer at (57,466) size 240x24 +layer at (43,444) size 241x65 LayoutSlider {INPUT} at (0,156) size 240x24 [color=#C4C4C4] LayoutFlexibleBox {DIV} at (24,0) size 192x6 -layer at (81,466) size 192x6 +layer at (70,448) size 190x40 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D] -layer at (81,460) size 18x18 +layer at (69,442) size 21x21 LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF] -layer at (81,466) size 192x6 backgroundClip at (70,448) size 190x40 clip at (81,466) size 179x6 scrollWidth 288 +layer at (70,448) size 190x40 clip at (70,448) size 190x6 scrollWidth 288 LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6 -layer at (81,466) size 0x6 +layer at (70,448) size 1x6 LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF] -layer at (81,466) size 288x6 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 +layer at (70,448) size 285x56 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/011-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/011-expected.txt index 82daefc..732b429e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/011-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/hixie/mixed/011-expected.txt
@@ -9,7 +9,7 @@ LayoutText {#text} at (0,0) size 0x0 layer at (8,8) size 200x200 backgroundClip at (0,8) size 149x283 clip at (8,8) size 141x200 LayoutSVGForeignObject {foreignObject} at (0,0) size 200x200 -layer at (58,8) size 150x200 backgroundClip at (0,8) size 149x283 clip at (0,8) size 149x283 +layer at (-98,43) size 247x248 backgroundClip at (0,8) size 149x283 clip at (0,8) size 149x283 LayoutBlockFlow (positioned) {div} at (50,0) size 150x200 LayoutText {#text} at (0,0) size 145x79 text run at (0,0) width 145: "There should be a green"
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt index 81454b8..713ba4e 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/transforms/svg-css-transforms-expected.txt
@@ -35,7 +35,7 @@ LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (31,355) size 60x60 +layer at (107,381) size 120x120 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)] layer at (272,85) size 200x200 LayoutBlockFlow (relative positioned) {div} at (10,66.81) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-foreignObject-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-foreignObject-expected.txt index e7b537477e..e23d83bf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-foreignObject-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-foreignObject-expected.txt
@@ -31,7 +31,7 @@ LayoutText {#text} at (0,0) size 0x0 LayoutSVGRect {rect} at (260,0) size 250x200 [stroke={[type=SOLID] [color=#008000]}] [x=260.00] [y=0.00] [width=250.00] [height=200.00] LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 -layer at (0,0) size 250x200 +layer at (0,0) size 360x288 clip at (0,0) size 250x200 LayoutSVGForeignObject {foreignObject} at (0,0) size 250x200 LayoutBlockFlow {xhtml:div} at (0,0) size 250x20 LayoutText {#text} at (0,0) size 75x19 @@ -44,7 +44,7 @@ LayoutBlockFlow {xhtml:div} at (0,40) size 250x20 LayoutText {#text} at (0,0) size 53x19 text run at (0,0) width 53: "[HTML]" -layer at (260,0) size 250x200 backgroundClip at (374,0) size 360x288 clip at (374,0) size 136x200 scrollHeight 205 +layer at (374,0) size 360x288 clip at (374,0) size 250x200 scrollHeight 205 LayoutSVGForeignObject {foreignObject} at (260,0) size 250x200 LayoutSVGRoot {svg} at (0,0) size 250x200 LayoutSVGContainer {g} at (0,1.77) size 80.05x58.19 [transform={m=((3.00,0.26)(0.26,3.02)) t=(0.00,0.00)}]
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-008-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-008-expected.txt index 07cc09c..9f36c009 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-008-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-008-expected.txt
@@ -15,7 +15,7 @@ LayoutText {#text} at (139,1) size 122x57 text run at (139,1) width 122: "TEST" LayoutText {#text} at (0,0) size 0x0 -layer at (12,248) size 400x50 backgroundClip at (12,325) size 576x72 clip at (0,0) size 0x0 scrollHeight 59 +layer at (12,325) size 576x72 clip at (12,325) size 400x50 scrollHeight 59 LayoutSVGForeignObject {foreignObject} at (0,175) size 400x50 [color=#FFFFFF] LayoutBlockFlow {div} at (0,0) size 400x59 LayoutText {#text} at (139,1) size 122x57
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-009-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-009-expected.txt index b046ac327..86c19c0 100644 --- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-009-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-hixie-mixed-009-expected.txt
@@ -17,7 +17,7 @@ LayoutBlockFlow {div} at (0,206.80) size 576x172.80 [color=#000080] [bgcolor=#EEEEEE] LayoutText {#text} at (0,3) size 344x164 text run at (0,3) width 344: "TEST" -layer at (12,39) size 60x10 scrollHeight 12 +layer at (12,39) size 86x14 clip at (12,39) size 60x10 scrollHeight 12 LayoutSVGForeignObject {foreignObject} at (0,0) size 60x10 LayoutBlockFlow {div} at (0,0) size 60x12 [color=#000080] LayoutText {#text} at (0,0) size 26x12
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt index 2987884..5d02967 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/2d/compound-transforms-vs-containers-expected.txt
@@ -16,9 +16,9 @@ LayoutBlockFlow (positioned) {DIV} at (1,53) size 80x80 layer at (154,149) size 80x80 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,129) size 80x80 +layer at (130,125) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,129) size 80x80 +layer at (103,98) size 182x182 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 [bgcolor=#FF0000] LayoutText {#text} at (0,0) size 58x19 text run at (0,0) width 58: "Individual" @@ -31,11 +31,11 @@ text run at (0,0) width 101: "Translate second" layer at (79,371) size 80x80 LayoutBlockFlow (positioned) {DIV} at (1,53) size 80x80 -layer at (79,371) size 80x80 +layer at (55,347) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,371) size 80x80 +layer at (175,379) size 128x128 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 -layer at (79,371) size 80x80 +layer at (148,352) size 182x182 LayoutBlockFlow (positioned) {DIV} at (0,0) size 80x80 [bgcolor=#FF0000] LayoutText {#text} at (0,0) size 58x19 text run at (0,0) width 58: "Individual"
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt index bfd6a35..6f81f393 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/hit-testing/backface-no-transform-hit-test-expected.txt
@@ -18,11 +18,11 @@ LayoutText {#text} at (197,32) size 4x19 text run at (197,32) width 4: " " LayoutText {#text} at (0,0) size 0x0 -layer at (27,63) size 160x160 +layer at (231,63) size 160x160 LayoutBlockFlow (relative positioned) {DIV} at (19,19) size 160x160 [bgcolor=#808080] LayoutText {#text} at (48,0) size 64x36 text run at (48,0) width 64: "box1" -layer at (227,63) size 160x160 +layer at (31,63) size 160x160 LayoutBlockFlow (relative positioned) {DIV} at (219,19) size 160x160 [bgcolor=#808080] LayoutText {#text} at (48,0) size 64x36 text run at (48,0) width 64: "box2"
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt index d41b885..69e1e71 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-2-expected.txt
@@ -37,22 +37,22 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,104) size 100x100 +layer at (105,103) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] -layer at (125,125) size 90x90 +layer at (124,125) size 90x105 LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (288,42) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (330,84) size 100x100 +layer at (335,81) size 92x110 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)] -layer at (351,85) size 90x90 +layer at (352,82) size 86x100 LayoutBlockFlow {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (534,42) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#DDDDDD] [border: (1px solid #000000)] -layer at (597,85) size 90x90 +layer at (598,82) size 86x100 LayoutBlockFlow {DIV} at (21,1) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt index 5a39765..5a8889c 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-deep-expected.txt
@@ -9,15 +9,15 @@ LayoutBlockFlow {DIV} at (21,21) size 340x340 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,63) size 300x300 LayoutBlockFlow {DIV} at (21,21) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,104) size 300x300 +layer at (100,93) size 267x331 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] -layer at (145,145) size 300x300 +layer at (150,139) size 300x372 LayoutBlockFlow {DIV} at (41,41) size 300x300 [bgcolor=#AA7994] [border: (1px solid #000000)] -layer at (186,186) size 300x300 +layer at (213,194) size 291x373 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] -layer at (227,227) size 300x300 +layer at (257,238) size 270x359 LayoutBlockFlow {DIV} at (41,41) size 300x300 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (268,268) size 300x300 +layer at (293,260) size 278x370 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600 LayoutBlockFlow {DIV} at (41,41) size 300x300 [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (61,61) size 90x90 [bgcolor=#0000FF] layer at (30,650) size 336x160 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-expected.txt index 1fceeb0..112edaf 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-expected.txt
@@ -60,7 +60,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (84,330) size 100x100 +layer at (85,314) size 114x157 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (267,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (267,267) size 202x202 [border: (1px solid #000000)] @@ -69,5 +69,5 @@ layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#C0D69E] [border: (1px solid #000000)] -layer at (351,351) size 100x100 +layer at (351,346) size 126x166 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt index d1c4aff..a816237d 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-origins-expected.txt
@@ -66,12 +66,12 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,310) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (84,331) size 100x100 +layer at (88,282) size 136x170 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (288,289) size 140x140 LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,310) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#AAAAAA] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 100x100 [bgcolor=#C0D69E] [border: (1px solid #000000)] -layer at (351,352) size 100x100 +layer at (358,313) size 150x180 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt index 3e38d68..4ec1b560 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-overlapping-expected.txt
@@ -32,7 +32,7 @@ LayoutBlockFlow (positioned) {DIV} at (21,21) size 260x260 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (73,63) size 200x200 LayoutBlockFlow (positioned) {DIV} at (31,21) size 200x200 [bgcolor=#AAAAAA] [border: (1px solid #000000)] -layer at (124,114) size 100x100 +layer at (117,106) size 114x114 LayoutBlockFlow (relative positioned) {DIV} at (51,51) size 100x100 [bgcolor=#0000FF] layer at (22,22) size 150x300 LayoutBlockFlow (positioned) {DIV} at (1,1) size 150x300 [bgcolor=#0080004D]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt index 175d625..8d7389b 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/3d/point-mapping/3d-point-mapping-preserve-3d-expected.txt
@@ -92,7 +92,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,63) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (576,84) size 90x90 +layer at (581,82) size 81x97 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (21,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (21,267) size 202x202 [border: (1px solid #000000)] @@ -100,7 +100,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (63,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (104,350) size 100x100 +layer at (105,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] layer at (267,267) size 202x202 LayoutBlockFlow (positioned) {DIV} at (267,267) size 202x202 [border: (1px solid #000000)] @@ -108,7 +108,7 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (309,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (350,350) size 100x100 +layer at (351,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)] layer at (513,267) size 202x202 @@ -117,8 +117,8 @@ LayoutBlockFlow {DIV} at (21,21) size 140x140 [bgcolor=#DDDDDD] [border: (1px solid #000000)] layer at (555,309) size 100x100 LayoutBlockFlow (relative positioned) {DIV} at (21,21) size 100x100 [bgcolor=#81AA8A] [border: (1px solid #000000)] -layer at (596,350) size 100x100 +layer at (597,349) size 97x113 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [border: (1px solid #000000)] -layer at (637,391) size 100x100 +layer at (628,393) size 112x115 LayoutBlockFlow (relative positioned) {DIV} at (41,41) size 100x100 [bgcolor=#AA7994] [border: (1px solid #000000)] LayoutBlockFlow {DIV} at (21,21) size 90x90 [bgcolor=#0000FF] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt index 4dc748cc..35bf086 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/svg-vs-css-expected.txt
@@ -44,7 +44,7 @@ LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] layer at (105,379) size 60x60 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px dotted #000000)] -layer at (31,355) size 60x60 +layer at (107,381) size 120x120 LayoutBlockFlow (positioned) {div} at (1,1) size 60x60 [border: (1px solid #0000FF)] layer at (272,85) size 200x200 LayoutBlockFlow (relative positioned) {div} at (10,66.81) size 200x200 [bgcolor=#C0C0C0] [border: (1px solid #000000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt index 3322f58f..bab1fd9ed 100644 --- a/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/transforms/transformed-focused-text-input-expected.txt
@@ -7,6 +7,6 @@ LayoutBlockFlow {DIV} at (0,0) size 784x22 LayoutTextControl {INPUT} at (0,0) size 173x22 [bgcolor=#FFFFFF] [border: (2px inset #EEEEEE)] LayoutText {#text} at (0,0) size 0x0 -layer at (10,11) size 169x16 backgroundClip at (7,11) size 169x45 clip at (10,11) size 166x16 +layer at (7,11) size 169x45 clip at (7,11) size 169x16 LayoutBlockFlow {DIV} at (2,3) size 169x16 caret: position 0 of child 0 {DIV} of {#document-fragment} of child 1 {INPUT} of child 1 {DIV} of body
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt index 684068a0..bafa4fd 100644 --- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt +++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-zoom-controls-expected.txt
@@ -47,18 +47,18 @@ LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A] layer at (57,310) size 240x180 LayoutVideo {VIDEO} at (45,298) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 LayoutBlockFlow (positioned) {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x180 +layer at (43,291) size 268x218 clip at (43,291) size 240x180 LayoutFlexibleBox {DIV} at (0,0) size 240x180 -layer at (57,310) size 240x156 clip at (60,313) size 234x150 +layer at (47,291) size 264x195 clip at (50,294) size 234x150 LayoutButton (relative positioned) {INPUT} at (0,0) size 240x156 [border: (3px outset #C0C0C0)] LayoutFlexibleBox (anonymous) at (12,42) size 216x72 LayoutBlockFlow {DIV} at (72,0) size 72x72 [bgcolor=#FFFFFFE6] -layer at (57,394) size 240x72 backgroundClip at (47,373) size 249x113 clip at (57,394) size 239x72 scrollWidth 338 +layer at (47,373) size 249x113 clip at (47,373) size 240x72 scrollWidth 338 LayoutFlexibleBox (relative positioned) {DIV} at (0,84) size 240x72 LayoutBlockFlow {DIV} at (24,0) size 46x72 [color=#FFFFFF] LayoutText {#text} at (0,22) size 46x27 @@ -71,16 +71,16 @@ LayoutButton {INPUT} at (122,0) size 72x72 LayoutButton {INPUT} at (194,0) size 72x72 LayoutButton {INPUT} at (266,0) size 72x72 -layer at (57,466) size 240x24 +layer at (43,444) size 241x65 LayoutSlider {INPUT} at (0,156) size 240x24 [color=#C4C4C4] LayoutFlexibleBox {DIV} at (24,0) size 192x6 -layer at (81,466) size 192x6 +layer at (70,448) size 190x40 LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 192x6 [bgcolor=#FFFFFF4D] -layer at (81,460) size 18x18 +layer at (69,442) size 21x21 LayoutBlockFlow (relative positioned) {DIV} at (0,-6) size 18x18 [bgcolor=#FFFFFF] -layer at (81,466) size 192x6 backgroundClip at (70,448) size 190x40 clip at (81,466) size 179x6 scrollWidth 288 +layer at (70,448) size 190x40 clip at (70,448) size 190x6 scrollWidth 288 LayoutBlockFlow (positioned) {DIV} at (0,0) size 192x6 -layer at (81,466) size 0x6 +layer at (70,448) size 1x6 LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x6 [bgcolor=#FFFFFF] -layer at (81,466) size 288x6 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 +layer at (70,448) size 285x56 backgroundClip at (70,448) size 190x40 clip at (70,448) size 190x40 LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x6 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/printing/fixed-positioned-composited-expected.html b/third_party/WebKit/LayoutTests/printing/fixed-positioned-composited-expected.html new file mode 100644 index 0000000..50e2958 --- /dev/null +++ b/third_party/WebKit/LayoutTests/printing/fixed-positioned-composited-expected.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<script> +if (window.testRunner) + testRunner.setPrinting(); +</script> +<div style="position: fixed; top: 0"> + crbug.com/848839: Composited fixed-position should repeat on every page. +</div> +<div style="height: 2000px"></div>
diff --git a/third_party/WebKit/LayoutTests/printing/fixed-positioned-composited.html b/third_party/WebKit/LayoutTests/printing/fixed-positioned-composited.html new file mode 100644 index 0000000..5798ab1 --- /dev/null +++ b/third_party/WebKit/LayoutTests/printing/fixed-positioned-composited.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<script> +if (window.testRunner) + testRunner.setPrinting(); +</script> +<div style="position: fixed; top: 0; will-change-transform"> + crbug.com/848839: Composited fixed-position should repeat on every page. +</div> +<div style="height: 2000px"></div>
diff --git a/third_party/WebKit/LayoutTests/printing/fixed-positioned-overflow-scroll-expected.html b/third_party/WebKit/LayoutTests/printing/fixed-positioned-overflow-scroll-expected.html new file mode 100644 index 0000000..e072d7d --- /dev/null +++ b/third_party/WebKit/LayoutTests/printing/fixed-positioned-overflow-scroll-expected.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<script> +if (window.testRunner) + testRunner.setPrinting(); +</script> +<div style="position: fixed; top: 0"> + crbug.com/848734: Fixed-position with overflow:scroll should repeat on every page. +</div> +<div style="height: 2000px"></div>
diff --git a/third_party/WebKit/LayoutTests/printing/fixed-positioned-overflow-scroll.html b/third_party/WebKit/LayoutTests/printing/fixed-positioned-overflow-scroll.html new file mode 100644 index 0000000..2b2c843 --- /dev/null +++ b/third_party/WebKit/LayoutTests/printing/fixed-positioned-overflow-scroll.html
@@ -0,0 +1,10 @@ +<!DOCTYPE html> +<script> +if (window.testRunner) + testRunner.setPrinting(); +</script> +<style>::-webkit-scrollbar { display: none }</style> +<div style="position: fixed; top: 0; overflow: scroll"> + crbug.com/848734: Fixed-position with overflow:scroll should repeat on every page. +</div> +<div style="height: 2000px"></div>
diff --git a/third_party/WebKit/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt b/third_party/WebKit/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt index bad70ac..5a68fad 100644 --- a/third_party/WebKit/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt +++ b/third_party/WebKit/LayoutTests/svg/zoom/page/zoom-foreign-content-expected.txt
@@ -11,12 +11,12 @@ LayoutBlockFlow {html} at (0,0) size 800x99 LayoutBlockFlow {div} at (0,0) size 99x99 [bgcolor=#008000] LayoutSVGHiddenContainer {defs} at (0,0) size 0x0 -layer at (0,0) size 800x600 +layer at (0,0) size 1659x1244 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutSVGForeignObject {foreignObject} at (0,0) size 800x600 LayoutSVGRoot {svg} at (0,0) size 300x150 LayoutSVGRect {rect} at (0,0) size 99x99 [fill={[type=SOLID] [color=#FFA500]}] [x=0.00] [y=0.00] [width=99.00] [height=99.00] LayoutText {#text} at (0,0) size 0x0 -layer at (0,0) size 800x600 +layer at (0,0) size 1659x1244 backgroundClip at (0,0) size 800x600 clip at (0,0) size 800x600 LayoutSVGForeignObject {foreignObject} at (0,0) size 800x600 LayoutBlockFlow {html} at (0,0) size 800x99 LayoutBlockFlow {div} at (0,0) size 99x99 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-inside-ico-expected.png b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-inside-ico-expected.png new file mode 100644 index 0000000..a1832d87 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/exotic-color-space/images/png-inside-ico-expected.png Binary files differ
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/visibility-composited-transforms-expected.txt b/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/visibility-composited-transforms-expected.txt deleted file mode 100644 index eccfef8..0000000 --- a/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/visibility-composited-transforms-expected.txt +++ /dev/null
@@ -1,16 +0,0 @@ -layer at (0,0) size 800x600 - LayoutView at (0,0) size 800x600 -layer at (0,0) size 800x8 - LayoutBlockFlow {HTML} at (0,0) size 800x8 - LayoutBlockFlow {BODY} at (8,8) size 784x0 -layer at (8,8) size 100x100 - LayoutBlockFlow (positioned) {DIV} at (8,8) size 100x100 - LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#FF0000] -layer at (8,8) size 100x100 - LayoutBlockFlow (positioned) {DIV} at (8,8) size 100x100 -layer at (8,8) size 100x100 - LayoutBlockFlow {DIV} at (0,0) size 100x100 -hidden layer at (8,8) size 100x100 - LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#FF0000] -layer at (8,8) size 100x100 - LayoutBlockFlow {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/events/touch/README.txt b/third_party/WebKit/LayoutTests/virtual/threaded/fast/events/touch/README.txt new file mode 100644 index 0000000..389a442a --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/events/touch/README.txt
@@ -0,0 +1,2 @@ +# This suite runs the tests in fast/events/touch with +# --enable-threaded-compositing \ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/fast/events/wheel/README.txt b/third_party/WebKit/LayoutTests/virtual/threaded/fast/events/wheel/README.txt new file mode 100644 index 0000000..f5d94365 --- /dev/null +++ b/third_party/WebKit/LayoutTests/virtual/threaded/fast/events/wheel/README.txt
@@ -0,0 +1,2 @@ +# This suite runs the tests in fast/events/wheel with +# --enable-threaded-compositing \ No newline at end of file
diff --git a/third_party/blink/renderer/build/scripts/core/css/css_properties.py b/third_party/blink/renderer/build/scripts/core/css/css_properties.py index 9f80728..786e96ce 100755 --- a/third_party/blink/renderer/build/scripts/core/css/css_properties.py +++ b/third_party/blink/renderer/build/scripts/core/css/css_properties.py
@@ -54,10 +54,10 @@ class CSSProperties(object): def __init__(self, file_paths): assert len(file_paths) >= 2, \ - "CSSProperties at least needs both CSSProperties.json5 and \ - ComputedStyleFieldAliases.json5 to function" + "CSSProperties at least needs both css_properties.json5 and \ + computed_style_field_aliases.json5 to function" - # ComputedStyleFieldAliases.json5. Used to expand out parameters used + # computed_style_field_aliases.json5. Used to expand out parameters used # in the various generators for ComputedStyle. self._field_alias_expander = FieldAliasExpander(file_paths[1]) @@ -75,7 +75,7 @@ self._shorthands = [] self._properties_including_aliases = [] - # Add default data in CSSProperties.json5. This must be consistent + # Add default data in css_properties.json5. This must be consistent # across instantiations of this class. css_properties_file = json5_generator.Json5File.load_from_files( [file_paths[0]]) @@ -232,7 +232,7 @@ property_['type_name'] = '{}<{}>'.format( property_['wrapper_pointer_name'], type_name) - # Default values for extra parameters in ComputedStyleExtraFields.json5. + # Default values for extra parameters in computed_style_extra_fields.json5. set_if_none(property_, 'custom_copy', False) set_if_none(property_, 'custom_compare', False) set_if_none(property_, 'mutable', False)
diff --git a/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py b/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py index 5bbca46..d4b4cf8f 100644 --- a/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py +++ b/third_party/blink/renderer/build/scripts/core/css/field_alias_expander.py
@@ -7,10 +7,10 @@ class FieldAliasExpander(object): """ - A helper for expanding the "field_template" parameter in CSSProperties.json5 + A helper for expanding the "field_template" parameter in css_properties.json5 It takes the list of aliases and expansions from the given file_path, (it - should point to core/css/ComputedStyleFieldAliases.json5) and uses that to + should point to core/css/computed_style_field_aliases.json5) and uses that to inform which fields in a given property should be set. """ def __init__(self, file_path):
diff --git a/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py b/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py index 9f539ca6..f7bf935 100644 --- a/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py +++ b/third_party/blink/renderer/build/scripts/core/style/computed_style_fields.py
@@ -111,7 +111,7 @@ Almost all properties will have at least one Field, often more than one. Most attributes in this class correspond to parameters in - CSSProperties.json5. See that file for a more detailed explanation of + css_properties.json5. See that file for a more detailed explanation of each attribute. Attributes:
diff --git a/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl b/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl index a4d5997..b79b759a 100644 --- a/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl +++ b/third_party/blink/renderer/build/scripts/core/style/templates/computed_style_initial_values.h.tmpl
@@ -26,8 +26,8 @@ /** * A set of functions that return the initial value for each field on ComputedStyle. - * This includes both properties defined in CSSProperties.json5 and the extra - * fields defined in ComputedStyleExtraFields.json5. + * This includes both properties defined in css_properties.json5 and the extra + * fields defined in computed_style_extra_fields.json5. */ class ComputedStyleInitialValues{ STATIC_ONLY(ComputedStyleInitialValues);
diff --git a/third_party/blink/renderer/build/scripts/keyword_utils.py b/third_party/blink/renderer/build/scripts/keyword_utils.py index faab8b5..6212887b 100644 --- a/third_party/blink/renderer/build/scripts/keyword_utils.py +++ b/third_party/blink/renderer/build/scripts/keyword_utils.py
@@ -6,7 +6,7 @@ def sort_keyword_properties_by_canonical_order(css_properties, css_value_keywords_file, json5_file_parameters): - """Sort all keyword CSS properties by the order of the keyword in CSSValueKeywords.json5 + """Sort all keyword CSS properties by the order of the keyword in css_value_keywords.json5 Args: css_properties: css_properties excluding extra fields.
diff --git a/third_party/blink/renderer/build/scripts/make_computed_style_base.py b/third_party/blink/renderer/build/scripts/make_computed_style_base.py index b6e8a5b..a15ae5e8 100755 --- a/third_party/blink/renderer/build/scripts/make_computed_style_base.py +++ b/third_party/blink/renderer/build/scripts/make_computed_style_base.py
@@ -154,8 +154,8 @@ field.property_name for field in root_group.all_fields], \ "The field '{}' isn't a defined field on ComputedStyle. " \ "Please check that there's an entry for '{}' in" \ - "CSSProperties.json5 or " \ - "ComputedStyleExtraFields.json5".format(name, name) + "css_properties.json5 or " \ + "computed_style_extra_fields.json5".format(name, name) diff_functions_map[entry['name'].original] = _create_diff_groups( entry['fields_to_diff'], entry['methods_to_diff'], entry['predicates_to_test'], root_group) @@ -500,17 +500,17 @@ self._input_files = json5_file_paths - # Reads CSSProperties.json5, ComputedStyleFieldAliases.json5 and - # ComputedStyleExtraFields.json5 + # Reads css_properties.json5, computed_style_field_aliases.json5 and + # computed_style_extra_fields.json5 self._css_properties = css_properties.CSSProperties( json5_file_paths[0:3]) # We sort the enum values based on each value's position in - # the keywords as listed in CSSProperties.json5. This will ensure that + # the keywords as listed in css_properties.json5. This will ensure that # if there is a continuous - # segment in CSSProperties.json5 matching the segment in this enum then + # segment in css_properties.json5 matching the segment in this enum then # the generated enum will have the same order and continuity as - # CSSProperties.json5 and we can get the longest continuous segment. + # css_properties.json5 and we can get the longest continuous segment. # Thereby reduce the switch case statement to the minimum. properties = keyword_utils.sort_keyword_properties_by_canonical_order( self._css_properties.longhands,
diff --git a/third_party/blink/renderer/build/scripts/make_css_value_id_mappings.py b/third_party/blink/renderer/build/scripts/make_css_value_id_mappings.py index 9a3548f..90782109 100755 --- a/third_party/blink/renderer/build/scripts/make_css_value_id_mappings.py +++ b/third_party/blink/renderer/build/scripts/make_css_value_id_mappings.py
@@ -107,10 +107,10 @@ self.css_values_dictionary_file = json5_file_paths[2] css_properties = self.css_properties.longhands # We sort the enum values based on each value's position in - # the keywords as listed in CSSProperties.json5. This will ensure that if there is a continuous - # segment in CSSProperties.json5 matching the segment in this enum then + # the keywords as listed in css_properties.json5. This will ensure that if there is a continuous + # segment in css_properties.json5 matching the segment in this enum then # the generated enum will have the same order and continuity as - # CSSProperties.json5 and we can get the longest continuous segment. + # css_properties.json5 and we can get the longest continuous segment. # Thereby reduce the switch case statement to the minimum. css_properties = keyword_utils.sort_keyword_properties_by_canonical_order( css_properties, json5_file_paths[2], self.default_parameters)
diff --git a/third_party/blink/renderer/build/scripts/scripts.gni b/third_party/blink/renderer/build/scripts/scripts.gni index ae0ace1..eac21781 100644 --- a/third_party/blink/renderer/build/scripts/scripts.gni +++ b/third_party/blink/renderer/build/scripts/scripts.gni
@@ -187,8 +187,8 @@ process_json5_files(target_name) { script = invoker.script in_files = [ - "css/CSSProperties.json5", - "css/ComputedStyleFieldAliases.json5", + "css/css_properties.json5", + "css/computed_style_field_aliases.json5", ] if (defined(invoker.in_files)) { in_files += invoker.in_files
diff --git a/third_party/blink/renderer/build/scripts/templates/computed_style_base.h.tmpl b/third_party/blink/renderer/build/scripts/templates/computed_style_base.h.tmpl index 4b0dd513..fdcf46c9 100644 --- a/third_party/blink/renderer/build/scripts/templates/computed_style_base.h.tmpl +++ b/third_party/blink/renderer/build/scripts/templates/computed_style_base.h.tmpl
@@ -77,7 +77,7 @@ // The functions generated for a field is determined by its 'template'. For // example, a field with the 'keyword' template has only one setter, whereas an // 'external' field has an extra setter that takes an rvalue reference. A list -// of the available templates can be found in CSSProperties.json5. +// of the available templates can be found in css_properties.json5. class ComputedStyleBase { public: inline bool IndependentInheritedEqual(const ComputedStyleBase& o) const {
diff --git a/third_party/blink/renderer/build/scripts/update_css_ranking.py b/third_party/blink/renderer/build/scripts/update_css_ranking.py index 96b0e5de..262fc159 100644 --- a/third_party/blink/renderer/build/scripts/update_css_ranking.py +++ b/third_party/blink/renderer/build/scripts/update_css_ranking.py
@@ -16,9 +16,9 @@ CSS_RANKING_API = "http://www.chromestatus.com/data/csspopularity" -CSS_RANKING_FILE = "../../core/css/CSSPropertiesRanking.json5" -CSS_PROPERTIES = "../../core/css/CSSProperties.json5" -CONFIG_FILE = "../../core/css/CSSGroupConfig.json5" +CSS_RANKING_FILE = "../../core/css/css_properties_ranking.json5" +CSS_PROPERTIES = "../../core/css/css_properties.json5" +CONFIG_FILE = "../../core/css/css_group_config.json5" def reformat_properties_name(css_properties): @@ -30,10 +30,10 @@ def update_css_ranking(css_ranking_file, css_ranking_api): - """Create the CSSPropertiesRanking.json5 for uses in Computed Style grouping + """Create the css_properties_ranking.json5 for uses in Computed Style grouping Args: - css_ranking_file: file directory to CSSPropertiesRanking.json5 + css_ranking_file: file directory to css_properties_ranking.json5 css_ranking_api: url to CSS ranking api """
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn index 5247cb1..d289d9ec 100644 --- a/third_party/blink/renderer/core/BUILD.gn +++ b/third_party/blink/renderer/core/BUILD.gn
@@ -446,7 +446,7 @@ css_properties("make_core_generated_computed_style_initial_values") { script = "../build/scripts/core/style/make_computed_style_initial_values.py" - in_files = [ "css/ComputedStyleExtraFields.json5" ] + in_files = [ "css/computed_style_extra_fields.json5" ] other_inputs = [ "../build/scripts/core/style/templates/computed_style_initial_values.h.tmpl" ] outputs = [ "$blink_core_output_dir/style/computed_style_initial_values.h", @@ -456,11 +456,11 @@ css_properties("make_core_generated_computed_style_base") { script = "../build/scripts/make_computed_style_base.py" in_files = [ - "css/ComputedStyleExtraFields.json5", - "css/ComputedStyleDiffFunctions.json5", - "css/CSSValueKeywords.json5", - "css/CSSPropertiesRanking.json5", - "css/CSSGroupConfig.json5", + "css/computed_style_extra_fields.json5", + "css/computed_style_diff_functions.json5", + "css/css_value_keywords.json5", + "css/css_properties_ranking.json5", + "css/css_group_config.json5", ] other_inputs = [ "../build/scripts/templates/fields/field.tmpl", @@ -485,7 +485,7 @@ css_properties("make_core_generated_css_value_id_mappings") { script = "../build/scripts/make_css_value_id_mappings.py" - in_files = [ "css/CSSValueKeywords.json5" ] + in_files = [ "css/css_value_keywords.json5" ] other_inputs = [ "../build/scripts/templates/css_value_id_mappings_generated.h.tmpl", "../build/scripts/keyword_utils.py", @@ -515,9 +515,9 @@ css_properties("make_core_generated_css_longhand_property_classes") { script = "../build/scripts/core/css/properties/make_css_property_subclasses.py" - in_files = [ "css/properties/CSSPropertyMethods.json5" ] + in_files = [ "css/properties/css_property_methods.json5" ] other_inputs = [ - "css/CSSProperties.json5", + "css/css_properties.json5", "../build/scripts/core/css/properties/templates/css_property_subclass.h.tmpl", "../build/scripts/core/css/properties/templates/css_property_subclass.cc.tmpl", ] @@ -1023,9 +1023,9 @@ css_properties("make_core_generated_css_shorthand_property_classes") { script = "../build/scripts/core/css/properties/make_css_property_subclasses.py" - in_files = [ "css/properties/CSSPropertyMethods.json5" ] + in_files = [ "css/properties/css_property_methods.json5" ] other_inputs = [ - "css/CSSProperties.json5", + "css/css_properties.json5", "../build/scripts/core/css/properties/templates/css_property_subclass.h.tmpl", ] outputs = [ @@ -1192,8 +1192,8 @@ code_generator("make_core_generated_css_value_keywords") { script = "../build/scripts/core/css/make_css_value_keywords.py" json_inputs = [ - "css/CSSValueKeywords.json5", - "css/SVGCSSValueKeywords.json5", + "css/css_value_keywords.json5", + "css/svg_css_value_keywords.json5", ] other_inputs = [ "../build/scripts/gperf.py" ] templates = [
diff --git a/third_party/blink/renderer/core/css/ComputedStyleDiffFunctions.json5 b/third_party/blink/renderer/core/css/computed_style_diff_functions.json5 similarity index 100% rename from third_party/blink/renderer/core/css/ComputedStyleDiffFunctions.json5 rename to third_party/blink/renderer/core/css/computed_style_diff_functions.json5
diff --git a/third_party/blink/renderer/core/css/ComputedStyleExtraFields.json5 b/third_party/blink/renderer/core/css/computed_style_extra_fields.json5 similarity index 99% rename from third_party/blink/renderer/core/css/ComputedStyleExtraFields.json5 rename to third_party/blink/renderer/core/css/computed_style_extra_fields.json5 index 18e9a38..2489b9f1 100644 --- a/third_party/blink/renderer/core/css/ComputedStyleExtraFields.json5 +++ b/third_party/blink/renderer/core/css/computed_style_extra_fields.json5
@@ -20,7 +20,7 @@ default: false, }, - // The rest is the same as CSSProperties.json5, but the only relevant ones in + // The rest is the same as css_properties.json5, but the only relevant ones in // this file are: // name, field_template, include_paths, default_value, type_name, keyword, // inherited
diff --git a/third_party/blink/renderer/core/css/ComputedStyleFieldAliases.json5 b/third_party/blink/renderer/core/css/computed_style_field_aliases.json5 similarity index 87% rename from third_party/blink/renderer/core/css/ComputedStyleFieldAliases.json5 rename to third_party/blink/renderer/core/css/computed_style_field_aliases.json5 index 1b5bbfc..cce3321d 100644 --- a/third_party/blink/renderer/core/css/ComputedStyleFieldAliases.json5 +++ b/third_party/blink/renderer/core/css/computed_style_field_aliases.json5
@@ -1,5 +1,5 @@ { -// This file specifies all alias used in CSSProperties.json5, these alias +// This file specifies all alias used in css_properties.json5, these alias // replace frequently used combination of property. "parameters": { },
diff --git a/third_party/blink/renderer/core/css/CSSGroupConfig.json5 b/third_party/blink/renderer/core/css/css_group_config.json5 similarity index 100% rename from third_party/blink/renderer/core/css/CSSGroupConfig.json5 rename to third_party/blink/renderer/core/css/css_group_config.json5
diff --git a/third_party/blink/renderer/core/css/CSSProperties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 similarity index 99% rename from third_party/blink/renderer/core/css/CSSProperties.json5 rename to third_party/blink/renderer/core/css/css_properties.json5 index 6342b410..397a906d 100644 --- a/third_party/blink/renderer/core/css/CSSProperties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5
@@ -161,7 +161,7 @@ // Leave this out if the field is stored directly on ComputedStyle. // If you want to auto group this property use: field_group: "*[->subgroup]" // If you use the auto grouping function check if your property is in - // CSSPropertiesRanking.json5 + // css_properties_ranking.json5 // - If yes, only provide: field_group: "*" // - If no, you can specify a subgroup following the asterisk: // field_group: "*[->subgroup]"
diff --git a/third_party/blink/renderer/core/css/CSSPropertiesRanking.json5 b/third_party/blink/renderer/core/css/css_properties_ranking.json5 similarity index 100% rename from third_party/blink/renderer/core/css/CSSPropertiesRanking.json5 rename to third_party/blink/renderer/core/css/css_properties_ranking.json5
diff --git a/third_party/blink/renderer/core/css/CSSValueKeywords.json5 b/third_party/blink/renderer/core/css/css_value_keywords.json5 similarity index 100% rename from third_party/blink/renderer/core/css/CSSValueKeywords.json5 rename to third_party/blink/renderer/core/css/css_value_keywords.json5
diff --git a/third_party/blink/renderer/core/css/cssom/cssom_keywords.h b/third_party/blink/renderer/core/css/cssom/cssom_keywords.h index f5d383f8..3e5388e 100644 --- a/third_party/blink/renderer/core/css/cssom/cssom_keywords.h +++ b/third_party/blink/renderer/core/css/cssom/cssom_keywords.h
@@ -16,7 +16,7 @@ // CSSKeywordValue is valid for a given CSS Property. // // The implementation for this class is generated using input from -// CSSProperties.json5 and build/scripts/make_cssom_types.py. +// css_properties.json5 and build/scripts/make_cssom_types.py. class CSSOMKeywords { STATIC_ONLY(CSSOMKeywords);
diff --git a/third_party/blink/renderer/core/css/cssom/cssom_types.h b/third_party/blink/renderer/core/css/cssom/cssom_types.h index 6ad9dbec..b4e65dc 100644 --- a/third_party/blink/renderer/core/css/cssom/cssom_types.h +++ b/third_party/blink/renderer/core/css/cssom/cssom_types.h
@@ -15,7 +15,7 @@ // This class provides utility functions for determining whether a property // can accept a CSSStyleValue type or instance. Its implementation is generated -// using input from CSSProperties.json5 and the script +// using input from css_properties.json5 and the script // build/scripts/make_cssom_types.py. class CSSOMTypes { STATIC_ONLY(CSSOMTypes);
diff --git a/third_party/blink/renderer/core/css/properties/README.md b/third_party/blink/renderer/core/css/properties/README.md index 21001b0..c2e56dd 100644 --- a/third_party/blink/renderer/core/css/properties/README.md +++ b/third_party/blink/renderer/core/css/properties/README.md
@@ -47,7 +47,7 @@ somtimes with the exception of some minor differences in parsing logic due to legacy reasons. Many aliases are -webit prefixed properties that have since been implemented without the prefix. Aliases define the alias_for member in -[CSSProperties.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/CSSProperties.json5)). +[css_properties.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/css_properties.json5)). Alias classes implement a small subset of functions of properties, only those that do not share an implementation with the resolved property that they are an @@ -74,7 +74,7 @@ ### Variable The Variable rule is not a true CSS property, but is treated -as such in places for convience. It does not appear in CSSProperties.json5; thus +as such in places for convenience. It does not appear in css_properties.json5; thus its property class header needed to be hand-written & manually added to the list of property classes by make_css_property_base.py. Those hand-written headers are in this directory. @@ -90,10 +90,10 @@ 3. If logic is required by multiple property classes you may need to create a new Utils file. These utils methods are grouped by pipeline function (e.g. [CSSParsingUtils](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/properties/css_parsing_utils.h)). -4. Add the new property to `core/css/CSSProperties.json5`. Ensure that you +4. Add the new property to `core/css/css_properties.json5`. Ensure that you include all the methods implemented on the property in the 'property_methods' flag so that the header file is generated correctly (see - [CSSProperties.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/CSSProperties.json5) + [css_properties.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/css_properties.json5) for more details) 5. Add new files to BUILD files 1. Add the new .cpp file to
diff --git a/third_party/blink/renderer/core/css/properties/CSSPropertyMethods.json5 b/third_party/blink/renderer/core/css/properties/css_property_methods.json5 similarity index 100% rename from third_party/blink/renderer/core/css/properties/CSSPropertyMethods.json5 rename to third_party/blink/renderer/core/css/properties/css_property_methods.json5
diff --git a/third_party/blink/renderer/core/css/SVGCSSValueKeywords.json5 b/third_party/blink/renderer/core/css/svg_css_value_keywords.json5 similarity index 100% rename from third_party/blink/renderer/core/css/SVGCSSValueKeywords.json5 rename to third_party/blink/renderer/core/css/svg_css_value_keywords.json5
diff --git a/third_party/blink/renderer/core/editing/selection_controller.cc b/third_party/blink/renderer/core/editing/selection_controller.cc index ff002cf..e7e6162 100644 --- a/third_party/blink/renderer/core/editing/selection_controller.cc +++ b/third_party/blink/renderer/core/editing/selection_controller.cc
@@ -33,6 +33,7 @@ #include "third_party/blink/public/platform/web_menu_source_type.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/events/event.h" +#include "third_party/blink/renderer/core/dom/node_computed_style.h" #include "third_party/blink/renderer/core/editing/editing_behavior.h" #include "third_party/blink/renderer/core/editing/editing_boundary.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" @@ -1280,12 +1281,27 @@ event.IsOverLink(); } +bool IsUserNodeDraggable(const MouseEventWithHitTestResults& event) { + Node* inner_node = event.InnerNode(); + + // TODO(huangdarwin): event.InnerNode() should never be nullptr, but unit + // tests WebFrameTest.FrameWidgetTest and WebViewTest.ClientTapHandling fail + // without a nullptr check, as they don't set the InnerNode() appropriately. + // Remove the if statement nullptr check when those tests are fixed. + if (!inner_node) + return false; + + const ComputedStyle* kStyle = inner_node->GetComputedStyle(); + return kStyle && kStyle->UserDrag() == EUserDrag::kElement; +} + bool IsExtendingSelection(const MouseEventWithHitTestResults& event) { bool is_mouse_down_on_link_or_image = event.IsOverLink() || event.GetHitTestResult().GetImage(); + return (event.Event().GetModifiers() & WebInputEvent::Modifiers::kShiftKey) != 0 && - !is_mouse_down_on_link_or_image; + !is_mouse_down_on_link_or_image && !IsUserNodeDraggable(event); } } // namespace blink
diff --git a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc index 30f9a90..3851b9e 100644 --- a/third_party/blink/renderer/core/frame/csp/content_security_policy.cc +++ b/third_party/blink/renderer/core/frame/csp/content_security_policy.cc
@@ -381,7 +381,7 @@ // addAndReportPolicyFromHeaderValue for more details and context. DCHECK(client); WebVector<WebContentSecurityPolicy> policies(policies_.size()); - for (size_t i = 0; i < policies_.size(); ++i) + for (wtf_size_t i = 0; i < policies_.size(); ++i) policies[i] = policies_[i]->ExposeForNavigationalChecks(); client->DidAddContentSecurityPolicies(policies); } @@ -390,7 +390,7 @@ const String& header, ContentSecurityPolicyHeaderType type, ContentSecurityPolicyHeaderSource source) { - size_t previous_policy_count = policies_.size(); + wtf_size_t previous_policy_count = policies_.size(); AddPolicyFromHeaderValue(header, type, source); // Notify about the new header, so that it can be reported back to the // browser process. This is needed in order to: @@ -403,7 +403,7 @@ // finished. WebVector<WebContentSecurityPolicy> policies(policies_.size() - previous_policy_count); - for (size_t i = previous_policy_count; i < policies_.size(); ++i) { + for (wtf_size_t i = previous_policy_count; i < policies_.size(); ++i) { policies[i - previous_policy_count] = policies_[i]->ExposeForNavigationalChecks(); }
diff --git a/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc b/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc index 30d91ff..dfef21f1 100644 --- a/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc +++ b/third_party/blink/renderer/core/frame/csp/csp_directive_list.cc
@@ -115,8 +115,10 @@ if (directives->IsReportOnly() && source != kContentSecurityPolicyHeaderSourceMeta && - directives->ReportEndpoints().IsEmpty()) - policy->ReportMissingReportURI(String(begin, end - begin)); + directives->ReportEndpoints().IsEmpty()) { + policy->ReportMissingReportURI( + String(begin, static_cast<wtf_size_t>(end - begin))); + } return directives; } @@ -1071,7 +1073,8 @@ void CSPDirectiveList::Parse(const UChar* begin, const UChar* end, bool should_parse_wasm_eval) { - header_ = String(begin, end - begin).StripWhiteSpace(); + header_ = + String(begin, static_cast<wtf_size_t>(end - begin)).StripWhiteSpace(); if (begin == end) return; @@ -1117,11 +1120,11 @@ if (name_begin == position) { SkipWhile<UChar, IsNotASCIISpace>(position, end); policy_->ReportUnsupportedDirective( - String(name_begin, position - name_begin)); + String(name_begin, static_cast<wtf_size_t>(position - name_begin))); return false; } - *name = String(name_begin, position - name_begin); + *name = String(name_begin, static_cast<wtf_size_t>(position - name_begin)); if (position == end) return true; @@ -1129,7 +1132,7 @@ if (!SkipExactly<UChar, IsASCIISpace>(position, end)) { SkipWhile<UChar, IsNotASCIISpace>(position, end); policy_->ReportUnsupportedDirective( - String(name_begin, position - name_begin)); + String(name_begin, static_cast<wtf_size_t>(position - name_begin))); return false; } @@ -1140,7 +1143,7 @@ if (position != end) { policy_->ReportInvalidDirectiveValueCharacter( - *name, String(value_begin, end - value_begin)); + *name, String(value_begin, static_cast<wtf_size_t>(end - value_begin))); return false; } @@ -1148,7 +1151,7 @@ if (value_begin == position) return true; - *value = String(value_begin, position - value_begin); + *value = String(value_begin, static_cast<wtf_size_t>(position - value_begin)); return true; } @@ -1173,7 +1176,8 @@ SkipWhile<UChar, IsNotASCIISpace>(position, end); if (token_begin < position) { - String token = String(token_begin, position - token_begin); + String token = + String(token_begin, static_cast<wtf_size_t>(position - token_begin)); if (EqualIgnoringASCIICase(token, "script")) { require_sri_for_ |= RequireSRIForToken::kScript; } else if (EqualIgnoringASCIICase(token, "style")) { @@ -1254,7 +1258,8 @@ SkipWhile<UChar, IsNotASCIISpace>(position, end); if (endpoint_begin < position) { - String endpoint = String(endpoint_begin, position - endpoint_begin); + String endpoint = String( + endpoint_begin, static_cast<wtf_size_t>(position - endpoint_begin)); report_endpoints_.push_back(endpoint); } }
diff --git a/third_party/blink/renderer/core/frame/csp/media_list_directive.cc b/third_party/blink/renderer/core/frame/csp/media_list_directive.cc index 7a7477d..9b79187 100644 --- a/third_party/blink/renderer/core/frame/csp/media_list_directive.cc +++ b/third_party/blink/renderer/core/frame/csp/media_list_directive.cc
@@ -48,7 +48,8 @@ begin = position; if (!SkipExactly<UChar, IsMediaTypeCharacter>(position, end)) { SkipWhile<UChar, IsNotASCIISpace>(position, end); - Policy()->ReportInvalidPluginTypes(String(begin, position - begin)); + Policy()->ReportInvalidPluginTypes( + String(begin, static_cast<wtf_size_t>(position - begin))); continue; } SkipWhile<UChar, IsMediaTypeCharacter>(position, end); @@ -57,7 +58,8 @@ // ^ if (!SkipExactly<UChar>(position, end, '/')) { SkipWhile<UChar, IsNotASCIISpace>(position, end); - Policy()->ReportInvalidPluginTypes(String(begin, position - begin)); + Policy()->ReportInvalidPluginTypes( + String(begin, static_cast<wtf_size_t>(position - begin))); continue; } @@ -65,7 +67,8 @@ // ^ if (!SkipExactly<UChar, IsMediaTypeCharacter>(position, end)) { SkipWhile<UChar, IsNotASCIISpace>(position, end); - Policy()->ReportInvalidPluginTypes(String(begin, position - begin)); + Policy()->ReportInvalidPluginTypes( + String(begin, static_cast<wtf_size_t>(position - begin))); continue; } SkipWhile<UChar, IsMediaTypeCharacter>(position, end); @@ -74,10 +77,12 @@ // ^ ^ ^ if (position < end && IsNotASCIISpace(*position)) { SkipWhile<UChar, IsNotASCIISpace>(position, end); - Policy()->ReportInvalidPluginTypes(String(begin, position - begin)); + Policy()->ReportInvalidPluginTypes( + String(begin, static_cast<wtf_size_t>(position - begin))); continue; } - plugin_types_.insert(String(begin, position - begin)); + plugin_types_.insert( + String(begin, static_cast<wtf_size_t>(position - begin))); DCHECK(position == end || IsASCIISpace(*position)); } @@ -90,7 +95,7 @@ // Find the effective set of plugins allowed by `other`. HashSet<String> normalized_b = other[0]->plugin_types_; - for (size_t i = 1; i < other.size(); i++) + for (wtf_size_t i = 1; i < other.size(); i++) normalized_b = other[i]->GetIntersect(normalized_b); // Empty list of plugins is equivalent to no plugins being allowed.
diff --git a/third_party/blink/renderer/core/frame/csp/source_list_directive.cc b/third_party/blink/renderer/core/frame/csp/source_list_directive.cc index 1289c24..cc8dd0e 100644 --- a/third_party/blink/renderer/core/frame/csp/source_list_directive.cc +++ b/third_party/blink/renderer/core/frame/csp/source_list_directive.cc
@@ -50,7 +50,9 @@ const UChar* position = begin; SkipWhile<UChar, IsSourceCharacter>(position, end); - if (!EqualIgnoringASCIICase("'none'", StringView(begin, position - begin))) + if (!EqualIgnoringASCIICase( + "'none'", + StringView(begin, static_cast<wtf_size_t>(position - begin)))) return false; SkipWhile<UChar, IsASCIISpace>(position, end); @@ -167,7 +169,8 @@ host_wildcard, port_wildcard)); } else { policy_->ReportInvalidSourceExpression( - directive_name_, String(begin_source, position - begin_source)); + directive_name_, String(begin_source, static_cast<wtf_size_t>( + position - begin_source))); } DCHECK(position == end || IsASCIISpace(*position)); @@ -189,7 +192,7 @@ if (begin == end) return false; - StringView token(begin, end - begin); + StringView token(begin, static_cast<wtf_size_t>(end - begin)); if (EqualIgnoringASCIICase("'none'", token)) return false; @@ -372,7 +375,7 @@ if (position + 1 != end || *position != '\'' || position == nonce_begin) return false; - *nonce = String(nonce_begin, position - nonce_begin); + *nonce = String(nonce_begin, static_cast<wtf_size_t>(position - nonce_begin)); return true; } @@ -461,7 +464,8 @@ Vector<char> hash_vector; // We accept base64url-encoded data here by normalizing it to base64. - Base64Decode(NormalizeToBase64(String(hash_begin, position - hash_begin)), + Base64Decode(NormalizeToBase64(String( + hash_begin, static_cast<wtf_size_t>(position - hash_begin))), hash_vector); if (hash_vector.size() > kMaxDigestSize) return false; @@ -492,7 +496,7 @@ if (position != end) return false; - *scheme = String(begin, end - begin); + *scheme = String(begin, static_cast<wtf_size_t>(end - begin)); return true; } @@ -543,7 +547,7 @@ SkipWhile<UChar, IsHostCharacter>(position, end); } - *host = String(host_begin, end - host_begin); + *host = String(host_begin, static_cast<wtf_size_t>(end - host_begin)); return true; } @@ -558,11 +562,13 @@ // path/to/file.js?query=string || path/to/file.js#anchor // ^ ^ if (position < end) { - policy_->ReportInvalidPathCharacter(directive_name_, - String(begin, end - begin), *position); + policy_->ReportInvalidPathCharacter( + directive_name_, String(begin, static_cast<wtf_size_t>(end - begin)), + *position); } - *path = DecodeURLEscapeSequences(String(begin, position - begin)); + *path = DecodeURLEscapeSequences( + String(begin, static_cast<wtf_size_t>(position - begin))); DCHECK(position <= end); DCHECK(position == end || (*position == '#' || *position == '?')); @@ -664,7 +670,7 @@ bool SourceListDirective::HasSourceMatchInList( const KURL& url, ResourceRequest::RedirectStatus redirect_status) const { - for (size_t i = 0; i < list_.size(); ++i) { + for (wtf_size_t i = 0; i < list_.size(); ++i) { if (list_[i]->Matches(url, redirect_status)) return true; } @@ -726,7 +732,7 @@ HeapVector<Member<CSPSource>> normalized_b = other[0]->GetSources(other[0]->policy_->GetSelfSource()); - for (size_t i = 1; i < other.size(); i++) { + for (wtf_size_t i = 1; i < other.size(); i++) { allow_inline_other = allow_inline_other && other[i]->allow_inline_; allow_eval_other = allow_eval_other && other[i]->allow_eval_; allow_wasm_eval_other = allow_wasm_eval_other && other[i]->allow_wasm_eval_; @@ -786,7 +792,7 @@ source_list.allow_star = allow_star_; source_list.allow_redirects = allow_redirects_; WebVector<WebContentSecurityPolicySourceExpression> list(list_.size()); - for (size_t i = 0; i < list_.size(); ++i) + for (wtf_size_t i = 0; i < list_.size(); ++i) list[i] = list_[i]->ExposeForNavigationalChecks(); source_list.sources.Swap(list); return source_list;
diff --git a/third_party/blink/renderer/core/frame/csp/source_list_directive_test.cc b/third_party/blink/renderer/core/frame/csp/source_list_directive_test.cc index a65ec9f..070fbe0ff 100644 --- a/third_party/blink/renderer/core/frame/csp/source_list_directive_test.cc +++ b/third_party/blink/renderer/core/frame/csp/source_list_directive_test.cc
@@ -274,7 +274,7 @@ csp.Get()); HeapVector<Member<CSPSource>> expected = helper_source_list.list_; EXPECT_EQ(normalized.size(), expected.size()); - for (size_t i = 0; i < normalized.size(); i++) { + for (wtf_size_t i = 0; i < normalized.size(); i++) { Source a = {normalized[i]->scheme_, normalized[i]->host_, normalized[i]->port_, normalized[i]->path_, normalized[i]->host_wildcard_, normalized[i]->port_wildcard_}; @@ -329,7 +329,7 @@ csp.Get()); HeapVector<Member<CSPSource>> expected = helper_source_list.list_; EXPECT_EQ(normalized.size(), expected.size()); - for (size_t i = 0; i < expected.size(); i++) { + for (wtf_size_t i = 0; i < expected.size(); i++) { Source a = {expected[i]->scheme_, expected[i]->host_, expected[i]->port_, expected[i]->path_, expected[i]->host_wildcard_, expected[i]->port_wildcard_}; @@ -1333,7 +1333,7 @@ SourceListDirective expected_list("script-src", test.expected, csp.Get()); HeapVector<Member<CSPSource>> expected = expected_list.list_; EXPECT_EQ(normalized.size(), expected.size()); - for (size_t i = 0; i < expected.size(); i++) { + for (wtf_size_t i = 0; i < expected.size(); i++) { Source a = {expected[i]->scheme_, expected[i]->host_, expected[i]->port_, expected[i]->path_, expected[i]->host_wildcard_, expected[i]->port_wildcard_};
diff --git a/third_party/blink/renderer/core/frame/event_handler_registry.cc b/third_party/blink/renderer/core/frame/event_handler_registry.cc index 77fb406..cb6cfcb 100644 --- a/third_party/blink/renderer/core/frame/event_handler_registry.cc +++ b/third_party/blink/renderer/core/frame/event_handler_registry.cc
@@ -46,7 +46,7 @@ EventHandlerRegistry::EventHandlerRegistry(LocalFrame& frame) : frame_(frame) {} EventHandlerRegistry::~EventHandlerRegistry() { - for (size_t i = 0; i < kEventHandlerClassCount; ++i) { + for (int i = 0; i < kEventHandlerClassCount; ++i) { EventHandlerClass handler_class = static_cast<EventHandlerClass>(i); CheckConsistency(handler_class); } @@ -195,11 +195,11 @@ // This code is not efficient at all. Vector<AtomicString> event_types = target.EventTypes(); - for (size_t i = 0; i < event_types.size(); ++i) { + for (wtf_size_t i = 0; i < event_types.size(); ++i) { EventListenerVector* listeners = target.GetEventListeners(event_types[i]); if (!listeners) continue; - for (unsigned count = listeners->size(); count > 0; --count) { + for (wtf_size_t count = listeners->size(); count > 0; --count) { EventHandlerClass handler_class; if (!EventTypeToClass(event_types[i], (*listeners)[count - 1].Options(), &handler_class)) @@ -218,7 +218,7 @@ bool handlers_changed[kEventHandlerClassCount]; bool target_set_changed[kEventHandlerClassCount]; - for (size_t i = 0; i < kEventHandlerClassCount; ++i) { + for (int i = 0; i < kEventHandlerClassCount; ++i) { EventHandlerClass handler_class = static_cast<EventHandlerClass>(i); EventTargetSet* targets = &targets_[handler_class]; @@ -228,7 +228,7 @@ UpdateEventHandlerInternal(kRemoveAll, handler_class, &target); } - for (size_t i = 0; i < kEventHandlerClassCount; ++i) { + for (int i = 0; i < kEventHandlerClassCount; ++i) { EventHandlerClass handler_class = static_cast<EventHandlerClass>(i); if (handlers_changed[i]) { bool has_handlers = targets_[handler_class].Contains(&target); @@ -344,7 +344,7 @@ void EventHandlerRegistry::ClearWeakMembers(Visitor* visitor) { Vector<UntracedMember<EventTarget>> dead_targets; - for (size_t i = 0; i < kEventHandlerClassCount; ++i) { + for (int i = 0; i < kEventHandlerClassCount; ++i) { EventHandlerClass handler_class = static_cast<EventHandlerClass>(i); const EventTargetSet* targets = &targets_[handler_class]; for (const auto& event_target : *targets) { @@ -357,13 +357,13 @@ } } } - for (size_t i = 0; i < dead_targets.size(); ++i) + for (wtf_size_t i = 0; i < dead_targets.size(); ++i) DidRemoveAllEventHandlers(*dead_targets[i]); } void EventHandlerRegistry::DocumentDetached(Document& document) { // Remove all event targets under the detached document. - for (size_t handler_class_index = 0; + for (int handler_class_index = 0; handler_class_index < kEventHandlerClassCount; ++handler_class_index) { EventHandlerClass handler_class = static_cast<EventHandlerClass>(handler_class_index); @@ -386,7 +386,7 @@ NOTREACHED(); } } - for (size_t i = 0; i < targets_to_remove.size(); ++i) + for (wtf_size_t i = 0; i < targets_to_remove.size(); ++i) UpdateEventHandlerInternal(kRemoveAll, handler_class, targets_to_remove[i]); }
diff --git a/third_party/blink/renderer/core/frame/find_in_page.cc b/third_party/blink/renderer/core/frame/find_in_page.cc index 5866de6..1c13d55 100644 --- a/third_party/blink/renderer/core/frame/find_in_page.cc +++ b/third_party/blink/renderer/core/frame/find_in_page.cc
@@ -265,8 +265,8 @@ void FindInPage::SetTickmarks(const WebVector<WebRect>& tickmarks) { if (LayoutView* layout_view = frame_->GetFrame()->ContentLayoutObject()) { - Vector<IntRect> tickmarks_converted(tickmarks.size()); - for (size_t i = 0; i < tickmarks.size(); ++i) + Vector<IntRect> tickmarks_converted(SafeCast<wtf_size_t>(tickmarks.size())); + for (wtf_size_t i = 0; i < tickmarks.size(); ++i) tickmarks_converted[i] = tickmarks[i]; layout_view->OverrideTickmarks(tickmarks_converted); }
diff --git a/third_party/blink/renderer/core/frame/find_in_page_test.cc b/third_party/blink/renderer/core/frame/find_in_page_test.cc index b1c01f0..cb9f3bd 100644 --- a/third_party/blink/renderer/core/frame/find_in_page_test.cc +++ b/third_party/blink/renderer/core/frame/find_in_page_test.cc
@@ -66,7 +66,7 @@ EXPECT_EQ(expected_version, actual_version); EXPECT_EQ(expected_rects.size(), actual_rects.size()); EXPECT_EQ(expected_active_match_rect, actual_active_match_rect); - for (size_t i = 0; i < expected_rects.size(); ++i) { + for (wtf_size_t i = 0; i < actual_rects.size(); ++i) { EXPECT_EQ(expected_rects[i], actual_rects[i]); } }
diff --git a/third_party/blink/renderer/core/frame/frame.cc b/third_party/blink/renderer/core/frame/frame.cc index d08e0a7..e300d85 100644 --- a/third_party/blink/renderer/core/frame/frame.cc +++ b/third_party/blink/renderer/core/frame/frame.cc
@@ -177,7 +177,7 @@ for (Frame* child = Tree().FirstChild(); child; child = child->Tree().NextSibling()) child_frames.push_back(child); - for (size_t i = 0; i < child_frames.size(); ++i) + for (wtf_size_t i = 0; i < child_frames.size(); ++i) child_frames[i]->DidChangeVisibilityState(); }
diff --git a/third_party/blink/renderer/core/frame/frame_serializer.cc b/third_party/blink/renderer/core/frame/frame_serializer.cc index 70b73c8..89fe3b26 100644 --- a/third_party/blink/renderer/core/frame/frame_serializer.cc +++ b/third_party/blink/renderer/core/frame/frame_serializer.cc
@@ -355,27 +355,25 @@ // in each bucket to avoid potential spikes in the distribution. UMA_HISTOGRAM_COUNTS_100( "PageSerialization.ProblemDetection.TotalImageCount", - static_cast<int64_t>(total_image_count_)); + total_image_count_); if (total_image_count_ > 0) { DCHECK_LE(loaded_image_count_, total_image_count_); DEFINE_STATIC_LOCAL( LinearHistogram, image_histogram, ("PageSerialization.ProblemDetection.LoadedImagePercentage", 1, 100, 21)); - image_histogram.Count( - static_cast<int64_t>(loaded_image_count_ * 100 / total_image_count_)); + image_histogram.Count(loaded_image_count_ * 100 / total_image_count_); } UMA_HISTOGRAM_COUNTS_100("PageSerialization.ProblemDetection.TotalCSSCount", - static_cast<int64_t>(total_css_count_)); + total_css_count_); if (total_css_count_ > 0) { DCHECK_LE(loaded_css_count_, total_css_count_); DEFINE_STATIC_LOCAL( LinearHistogram, css_histogram, ("PageSerialization.ProblemDetection.LoadedCSSPercentage", 1, 100, 21)); - css_histogram.Count( - static_cast<int64_t>(loaded_css_count_ * 100 / total_css_count_)); + css_histogram.Count(loaded_css_count_ * 100 / total_css_count_); } should_collect_problem_metric_ = false; }
diff --git a/third_party/blink/renderer/core/frame/link_highlights.cc b/third_party/blink/renderer/core/frame/link_highlights.cc index e0a7b06..8a4ec54e 100644 --- a/third_party/blink/renderer/core/frame/link_highlights.cc +++ b/third_party/blink/renderer/core/frame/link_highlights.cc
@@ -52,7 +52,7 @@ // don't get a new target to highlight. RemoveAllHighlights(); - for (size_t i = 0; i < highlight_nodes.size(); ++i) { + for (wtf_size_t i = 0; i < highlight_nodes.size(); ++i) { Node* node = highlight_nodes[i]; if (!node || !node->GetLayoutObject())
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc index f11d474..62ceb16 100644 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -488,7 +488,7 @@ // potentially interfering with others. HeapVector<Member<LocalFrame>> frames; frames.push_back(GetFrame()); - for (size_t i = 0; i < frames.size(); i++) { + for (wtf_size_t i = 0; i < frames.size(); i++) { for (Frame* child = frames[i]->Tree().FirstChild(); child; child = child->Tree().NextSibling()) { if (child->IsLocalFrame()) @@ -845,9 +845,11 @@ return 0; ChromeClient& chrome_client = page->GetChromeClient(); - if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) - return lroundf(chrome_client.RootWindowRect().Height() * - chrome_client.GetScreenInfo().device_scale_factor); + if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { + return static_cast<int>( + lroundf(chrome_client.RootWindowRect().Height() * + chrome_client.GetScreenInfo().device_scale_factor)); + } return chrome_client.RootWindowRect().Height(); } @@ -860,10 +862,11 @@ return 0; ChromeClient& chrome_client = page->GetChromeClient(); - if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) - return lroundf(chrome_client.RootWindowRect().Width() * - chrome_client.GetScreenInfo().device_scale_factor); - + if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { + return static_cast<int>( + lroundf(chrome_client.RootWindowRect().Width() * + chrome_client.GetScreenInfo().device_scale_factor)); + } return chrome_client.RootWindowRect().Width(); } @@ -920,9 +923,11 @@ return 0; ChromeClient& chrome_client = page->GetChromeClient(); - if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) - return lroundf(chrome_client.RootWindowRect().X() * - chrome_client.GetScreenInfo().device_scale_factor); + if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { + return static_cast<int>( + lroundf(chrome_client.RootWindowRect().X() * + chrome_client.GetScreenInfo().device_scale_factor)); + } return chrome_client.RootWindowRect().X(); } @@ -935,9 +940,11 @@ return 0; ChromeClient& chrome_client = page->GetChromeClient(); - if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) - return lroundf(chrome_client.RootWindowRect().Y() * - chrome_client.GetScreenInfo().device_scale_factor); + if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { + return static_cast<int>( + lroundf(chrome_client.RootWindowRect().Y() * + chrome_client.GetScreenInfo().device_scale_factor)); + } return chrome_client.RootWindowRect().Y(); }
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc index de1453e..aa2c59e 100644 --- a/third_party/blink/renderer/core/frame/local_frame_view.cc +++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -31,6 +31,7 @@ #include <utility> #include "base/memory/ptr_util.h" +#include "base/numerics/safe_conversions.h" #include "cc/layers/picture_layer.h" #include "third_party/blink/public/mojom/page/page_visibility_state.mojom-blink.h" #include "third_party/blink/public/platform/task_type.h" @@ -688,8 +689,9 @@ GetLayoutView()->DocumentRect().Height()); value->SetInteger("visibleHeight", Height()); value->SetInteger("approximateBlankCharacterCount", - FontFaceSetDocument::ApproximateBlankCharacterCount( - *frame_->GetDocument())); + base::saturated_cast<int>( + FontFaceSetDocument::ApproximateBlankCharacterCount( + *frame_->GetDocument()))); return value; }
diff --git a/third_party/blink/renderer/core/frame/message_report_body.h b/third_party/blink/renderer/core/frame/message_report_body.h index 54b40611..3c44e32e0 100644 --- a/third_party/blink/renderer/core/frame/message_report_body.h +++ b/third_party/blink/renderer/core/frame/message_report_body.h
@@ -22,12 +22,12 @@ String sourceFile() const { return location_->Url(); } - long lineNumber(bool& is_null) const { + uint32_t lineNumber(bool& is_null) const { is_null = location_->IsUnknown(); return location_->LineNumber(); } - long columnNumber(bool& is_null) const { + uint32_t columnNumber(bool& is_null) const { is_null = location_->IsUnknown(); return location_->ColumnNumber(); }
diff --git a/third_party/blink/renderer/core/frame/navigator.cc b/third_party/blink/renderer/core/frame/navigator.cc index dbccaeb..c7dd8ed 100644 --- a/third_party/blink/renderer/core/frame/navigator.cc +++ b/third_party/blink/renderer/core/frame/navigator.cc
@@ -100,7 +100,7 @@ // Sanitizing tokens. We could do that more extensively but we should assume // that the accept languages are already sane and support BCP47. It is // likely a waste of time to make sure the tokens matches that spec here. - for (size_t i = 0; i < languages.size(); ++i) { + for (wtf_size_t i = 0; i < languages.size(); ++i) { String& token = languages[i]; token = token.StripWhiteSpace(); if (token.length() >= 3 && token[2] == '_')
diff --git a/third_party/blink/renderer/core/frame/pausable_script_executor.cc b/third_party/blink/renderer/core/frame/pausable_script_executor.cc index 19c7da7..1e7e867a 100644 --- a/third_party/blink/renderer/core/frame/pausable_script_executor.cc +++ b/third_party/blink/renderer/core/frame/pausable_script_executor.cc
@@ -107,8 +107,9 @@ Vector<v8::Local<v8::Value>> results; v8::Local<v8::Value> single_result; Vector<v8::Local<v8::Value>> args; - args.ReserveCapacity(args_.Size()); - for (size_t i = 0; i < args_.Size(); ++i) + wtf_size_t args_size = SafeCast<wtf_size_t>(args_.Size()); + args.ReserveCapacity(args_size); + for (wtf_size_t i = 0; i < args_size; ++i) args.push_back(args_.Get(i)); { std::unique_ptr<UserGestureIndicator> gesture_indicator;
diff --git a/third_party/blink/renderer/core/frame/screen.cc b/third_party/blink/renderer/core/frame/screen.cc index 836b9515..f31ab99 100644 --- a/third_party/blink/renderer/core/frame/screen.cc +++ b/third_party/blink/renderer/core/frame/screen.cc
@@ -48,7 +48,8 @@ return 0; if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { WebScreenInfo screen_info = page->GetChromeClient().GetScreenInfo(); - return lroundf(screen_info.rect.height * screen_info.device_scale_factor); + return static_cast<int>( + lroundf(screen_info.rect.height * screen_info.device_scale_factor)); } return page->GetChromeClient().GetScreenInfo().rect.height; } @@ -61,7 +62,8 @@ return 0; if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { WebScreenInfo screen_info = page->GetChromeClient().GetScreenInfo(); - return lroundf(screen_info.rect.width * screen_info.device_scale_factor); + return static_cast<int>( + lroundf(screen_info.rect.width * screen_info.device_scale_factor)); } return page->GetChromeClient().GetScreenInfo().rect.width; } @@ -88,8 +90,8 @@ return 0; if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { WebScreenInfo screen_info = page->GetChromeClient().GetScreenInfo(); - return lroundf(screen_info.available_rect.x * - screen_info.device_scale_factor); + return static_cast<int>(lroundf(screen_info.available_rect.x * + screen_info.device_scale_factor)); } return static_cast<int>( page->GetChromeClient().GetScreenInfo().available_rect.x); @@ -103,8 +105,8 @@ return 0; if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { WebScreenInfo screen_info = page->GetChromeClient().GetScreenInfo(); - return lroundf(screen_info.available_rect.y * - screen_info.device_scale_factor); + return static_cast<int>(lroundf(screen_info.available_rect.y * + screen_info.device_scale_factor)); } return static_cast<int>( page->GetChromeClient().GetScreenInfo().available_rect.y); @@ -118,8 +120,8 @@ return 0; if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { WebScreenInfo screen_info = page->GetChromeClient().GetScreenInfo(); - return lroundf(screen_info.available_rect.height * - screen_info.device_scale_factor); + return static_cast<int>(lroundf(screen_info.available_rect.height * + screen_info.device_scale_factor)); } return page->GetChromeClient().GetScreenInfo().available_rect.height; } @@ -132,8 +134,8 @@ return 0; if (page->GetSettings().GetReportScreenSizeInPhysicalPixelsQuirk()) { WebScreenInfo screen_info = page->GetChromeClient().GetScreenInfo(); - return lroundf(screen_info.available_rect.width * - screen_info.device_scale_factor); + return static_cast<int>(lroundf(screen_info.available_rect.width * + screen_info.device_scale_factor)); } return page->GetChromeClient().GetScreenInfo().available_rect.width; }
diff --git a/third_party/blink/renderer/core/frame/smart_clip.cc b/third_party/blink/renderer/core/frame/smart_clip.cc index 60a0b403..36046146 100644 --- a/third_party/blink/renderer/core/frame/smart_clip.cc +++ b/third_party/blink/renderer/core/frame/smart_clip.cc
@@ -86,7 +86,7 @@ // Unite won't work with the empty rect, so we initialize to the first rect. IntRect united_rects = hit_nodes[0]->PixelSnappedBoundingBox(); StringBuilder collected_text; - for (size_t i = 0; i < hit_nodes.size(); ++i) { + for (wtf_size_t i = 0; i < hit_nodes.size(); ++i) { collected_text.Append(ExtractTextFromNode(hit_nodes[i])); united_rects.Unite(hit_nodes[i]->PixelSnappedBoundingBox()); }
diff --git a/third_party/blink/renderer/core/frame/use_counter.cc b/third_party/blink/renderer/core/frame/use_counter.cc index 50cf45b..3d1aee1 100644 --- a/third_party/blink/renderer/core/frame/use_counter.cc +++ b/third_party/blink/renderer/core/frame/use_counter.cc
@@ -1351,12 +1351,13 @@ if (!mute_count_) { // If any feature was recorded prior to navigation commits, flush to the // browser side. - for (size_t feature_id = 0; feature_id < features_recorded_.size(); + for (wtf_size_t feature_id = 0; feature_id < features_recorded_.size(); ++feature_id) { if (features_recorded_.QuickGet(feature_id)) ReportAndTraceMeasurementByFeatureId(feature_id, *frame); } - for (size_t sample_id = 0; sample_id < css_recorded_.size(); ++sample_id) { + for (wtf_size_t sample_id = 0; sample_id < css_recorded_.size(); + ++sample_id) { if (css_recorded_.QuickGet(sample_id)) ReportAndTraceMeasurementByCSSSampleId(sample_id, frame, false); if (animated_css_recorded_.QuickGet(sample_id))
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc index 0891b15..6db123c 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -327,7 +327,7 @@ ComputePageRects(page_size_in_pixels); const float page_width = page_size_in_pixels.Width(); - size_t num_pages = PageRects().size(); + wtf_size_t num_pages = PageRects().size(); int total_height = num_pages * (page_size_in_pixels.Height() + 1) - 1; FloatRect all_pages_rect(0, 0, page_width, total_height); @@ -340,7 +340,7 @@ context.FillRect(all_pages_rect, Color::kWhite); int current_height = 0; - for (size_t page_index = 0; page_index < num_pages; page_index++) { + for (wtf_size_t page_index = 0; page_index < num_pages; page_index++) { // Draw a line for a page boundary if this isn't the first page. if (page_index > 0) { context.Save(); @@ -1202,7 +1202,7 @@ void WebLocalFrameImpl::RemoveSpellingMarkersUnderWords( const WebVector<WebString>& words) { Vector<String> converted_words; - converted_words.Append(words.Data(), words.size()); + converted_words.Append(words.Data(), SafeCast<wtf_size_t>(words.size())); GetFrame()->RemoveSpellingMarkersUnderWords(converted_words); }
diff --git a/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc b/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc index e97a0b7..3416dc7 100644 --- a/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_performance_agent.cc
@@ -82,6 +82,10 @@ .setValue(value) .build()); } + +TimeTicks GetTimeTicksNow() { + return base::subtle::TimeTicksNowIgnoringOverride(); +} } // namespace Response InspectorPerformanceAgent::getMetrics( @@ -106,17 +110,19 @@ } // Page performance metrics. - TimeTicks now = base::subtle::TimeTicksNowIgnoringOverride(); + TimeTicks now = GetTimeTicksNow(); AppendMetric(result.get(), "LayoutCount", static_cast<double>(layout_count_)); AppendMetric(result.get(), "RecalcStyleCount", static_cast<double>(recalc_style_count_)); AppendMetric(result.get(), "LayoutDuration", layout_duration_.InSecondsF()); AppendMetric(result.get(), "RecalcStyleDuration", recalc_style_duration_.InSecondsF()); + TimeDelta script_duration = script_duration_; if (!script_start_ticks_.is_null()) script_duration += now - script_start_ticks_; AppendMetric(result.get(), "ScriptDuration", script_duration.InSecondsF()); + TimeDelta task_duration = task_duration_; if (!task_start_ticks_.is_null()) task_duration += now - task_start_ticks_; @@ -157,14 +163,13 @@ void InspectorPerformanceAgent::ScriptStarts() { if (!script_call_depth_++) - script_start_ticks_ = base::subtle::TimeTicksNowIgnoringOverride(); + script_start_ticks_ = GetTimeTicksNow(); } void InspectorPerformanceAgent::ScriptEnds() { if (--script_call_depth_) return; - script_duration_ += - base::subtle::TimeTicksNowIgnoringOverride() - script_start_ticks_; + script_duration_ += GetTimeTicksNow() - script_start_ticks_; script_start_ticks_ = TimeTicks(); } @@ -185,36 +190,36 @@ } void InspectorPerformanceAgent::Will(const probe::RecalculateStyle& probe) { - recalc_style_start_ticks_ = base::subtle::TimeTicksNowIgnoringOverride(); + recalc_style_start_ticks_ = GetTimeTicksNow(); } void InspectorPerformanceAgent::Did(const probe::RecalculateStyle& probe) { - recalc_style_duration_ += - base::subtle::TimeTicksNowIgnoringOverride() - recalc_style_start_ticks_; + recalc_style_duration_ += GetTimeTicksNow() - recalc_style_start_ticks_; recalc_style_count_++; } void InspectorPerformanceAgent::Will(const probe::UpdateLayout& probe) { if (!layout_depth_++) - layout_start_ticks_ = base::subtle::TimeTicksNowIgnoringOverride(); + layout_start_ticks_ = GetTimeTicksNow(); } void InspectorPerformanceAgent::Did(const probe::UpdateLayout& probe) { if (--layout_depth_) return; - layout_duration_ += - base::subtle::TimeTicksNowIgnoringOverride() - layout_start_ticks_; + layout_duration_ += GetTimeTicksNow() - layout_start_ticks_; layout_count_++; } +// Will/DidProcessTask() ignore caller provided times to ensure time domain +// consistency with other metrics collected in this module. void InspectorPerformanceAgent::WillProcessTask(base::TimeTicks start_time) { - task_start_ticks_ = start_time; + task_start_ticks_ = GetTimeTicksNow(); } void InspectorPerformanceAgent::DidProcessTask(base::TimeTicks start_time, base::TimeTicks end_time) { - if (task_start_ticks_ == start_time) - task_duration_ += end_time - start_time; + if (!task_start_ticks_.is_null()) + task_duration_ += GetTimeTicksNow() - task_start_ticks_; task_start_ticks_ = TimeTicks(); }
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc index 766012d9..d6c00a07 100644 --- a/third_party/blink/renderer/core/layout/layout_block.cc +++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -72,7 +72,7 @@ struct SameSizeAsLayoutBlock : public LayoutBox { LayoutObjectChildList children; - scoped_refptr<const NGConstraintSpace> cached_constraint_space_; + base::Optional<NGConstraintSpace> cached_constraint_space_; uint32_t bitfields; }; @@ -450,7 +450,7 @@ ClearLayoutOverflow(); height_available_to_children_changed_ = false; - cached_constraint_space_ = nullptr; + cached_constraint_space_.reset(); } bool LayoutBlock::WidthAvailableToChildrenHasChanged() { @@ -1996,11 +1996,13 @@ } const NGConstraintSpace* LayoutBlock::CachedConstraintSpace() const { - return cached_constraint_space_.get(); + return cached_constraint_space_.has_value() + ? &cached_constraint_space_.value() + : nullptr; } void LayoutBlock::SetCachedConstraintSpace(const NGConstraintSpace& space) { - cached_constraint_space_ = &space; + cached_constraint_space_.emplace(space); } bool LayoutBlock::RecalcNormalFlowChildOverflowIfNeeded(
diff --git a/third_party/blink/renderer/core/layout/layout_block.h b/third_party/blink/renderer/core/layout/layout_block.h index e551f130..d17d5db6 100644 --- a/third_party/blink/renderer/core/layout/layout_block.h +++ b/third_party/blink/renderer/core/layout/layout_block.h
@@ -27,13 +27,13 @@ #include <memory> #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_box.h" +#include "third_party/blink/renderer/core/layout/ng/ng_constraint_space.h" #include "third_party/blink/renderer/platform/wtf/list_hash_set.h" namespace blink { struct PaintInfo; class LineLayoutBox; -class NGConstraintSpace; class WordMeasurement; typedef WTF::ListHashSet<LayoutBox*, 16> TrackedLayoutBoxListHashSet; @@ -538,7 +538,7 @@ virtual bool UpdateLogicalWidthAndColumnWidth(); LayoutObjectChildList children_; - scoped_refptr<const NGConstraintSpace> cached_constraint_space_; + base::Optional<NGConstraintSpace> cached_constraint_space_; unsigned has_margin_before_quirk_ : 1; // Note these quirk values can't be put
diff --git a/third_party/blink/renderer/core/layout/layout_table.cc b/third_party/blink/renderer/core/layout/layout_table.cc index ab67179c..f2497d62 100644 --- a/third_party/blink/renderer/core/layout/layout_table.cc +++ b/third_party/blink/renderer/core/layout/layout_table.cc
@@ -254,21 +254,16 @@ column_layout_objects_.resize(0); } -void LayoutTable::ColumnStructureChanged() { - column_structure_changed_ = true; - InvalidateCachedColumns(); - // We don't really need to recompute our sections, but we do need to update - // our column count, whether we have a column, and possibly the logical width - // distribution too. - SetNeedsSectionRecalc(); -} - void LayoutTable::AddColumn(const LayoutTableCol*) { - ColumnStructureChanged(); + InvalidateCachedColumns(); } void LayoutTable::RemoveColumn(const LayoutTableCol*) { - ColumnStructureChanged(); + InvalidateCachedColumns(); + // We don't really need to recompute our sections, but we need to update our + // column count and whether we have a column. Currently, we only have one + // size-fit-all flag but we may have to consider splitting it. + SetNeedsSectionRecalc(); } bool LayoutTable::IsLogicalWidthAuto() const { @@ -1255,16 +1250,11 @@ child = child->NextSibling()) { if (child->IsTableSection()) { LayoutTableSection* section = ToLayoutTableSection(child); - if (column_structure_changed_) { - section->MarkAllCellsWidthsDirtyAndOrNeedsLayout( - LayoutTable::kMarkDirtyAndNeedsLayout); - } unsigned section_cols = section->NumEffectiveColumns(); if (section_cols > max_cols) max_cols = section_cols; } } - column_structure_changed_ = false; effective_columns_.resize(max_cols); effective_column_positions_.resize(max_cols + 1);
diff --git a/third_party/blink/renderer/core/layout/layout_table.h b/third_party/blink/renderer/core/layout/layout_table.h index 9edfc57..045eff0 100644 --- a/third_party/blink/renderer/core/layout/layout_table.h +++ b/third_party/blink/renderer/core/layout/layout_table.h
@@ -430,7 +430,6 @@ void EnsureIsReadyForPaintInvalidation() override; void InvalidatePaint(const PaintInvalidatorContext&) const override; bool PaintedOutputOfObjectHasNoEffectRegardlessOfSize() const override; - void ColumnStructureChanged(); private: bool IsOfType(LayoutObjectType type) const override { @@ -562,12 +561,6 @@ mutable bool needs_section_recalc_ : 1; bool column_logical_width_changed_ : 1; - // This flag indicates whether any columns (with or without fixed widths) have - // been added or removed since the last layout. If they have, then the true - // size of the cell contents needs to be determined with a full layout before - // the layout cache is updated. The layout cache can be invalid when layout is - // valid (e.g. if the table is being painted for the first time). - mutable bool column_structure_changed_ : 1; mutable bool column_layout_objects_valid_ : 1; mutable unsigned no_cell_colspan_at_least_; unsigned CalcNoCellColspanAtLeast() const {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc index 3488b31..3cd3821f 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm_test.cc
@@ -41,7 +41,7 @@ NGInlineNode inline_node(block_flow); NGLogicalSize size(LayoutUnit(50), LayoutUnit(20)); - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpaceBuilder( WritingMode::kHorizontalTb, /* icb_size */ size.ConvertToPhysical(WritingMode::kHorizontalTb)) @@ -49,21 +49,21 @@ .ToConstraintSpace(WritingMode::kHorizontalTb); scoped_refptr<NGLayoutResult> layout_result = - inline_node.Layout(*constraint_space, nullptr); + inline_node.Layout(constraint_space, nullptr); auto* line1 = ToNGPhysicalLineBoxFragment(layout_result->PhysicalFragment().get()); EXPECT_FALSE(line1->BreakToken()->IsFinished()); // Perform 2nd layout with the break token from the 1st line. scoped_refptr<NGLayoutResult> layout_result2 = - inline_node.Layout(*constraint_space, line1->BreakToken()); + inline_node.Layout(constraint_space, line1->BreakToken()); auto* line2 = ToNGPhysicalLineBoxFragment(layout_result2->PhysicalFragment().get()); EXPECT_FALSE(line2->BreakToken()->IsFinished()); // Perform 3rd layout with the break token from the 2nd line. scoped_refptr<NGLayoutResult> layout_result3 = - inline_node.Layout(*constraint_space, line2->BreakToken()); + inline_node.Layout(constraint_space, line2->BreakToken()); auto* line3 = ToNGPhysicalLineBoxFragment(layout_result3->PhysicalFragment().get()); EXPECT_TRUE(line3->BreakToken()->IsFinished()); @@ -182,9 +182,9 @@ LayoutBlockFlow* block_flow = ToLayoutBlockFlow(GetLayoutObjectByElementId("container")); NGBlockNode block_node(block_flow); - scoped_refptr<NGConstraintSpace> space = + NGConstraintSpace space = NGConstraintSpace::CreateFromLayoutObject(*block_flow); - scoped_refptr<NGLayoutResult> layout_result = block_node.Layout(*space); + scoped_refptr<NGLayoutResult> layout_result = block_node.Layout(space); auto* block_box = ToNGPhysicalBoxFragment(layout_result->PhysicalFragment().get()); @@ -215,9 +215,9 @@ LayoutBlockFlow* block_flow = ToLayoutBlockFlow(GetLayoutObjectByElementId("container")); NGInlineNode inline_node(block_flow); - scoped_refptr<NGConstraintSpace> space = + NGConstraintSpace space = NGConstraintSpace::CreateFromLayoutObject(*block_flow); - scoped_refptr<NGLayoutResult> layout_result = inline_node.Layout(*space); + scoped_refptr<NGLayoutResult> layout_result = inline_node.Layout(space); auto* line = ToNGPhysicalLineBoxFragment(layout_result->PhysicalFragment().get()); @@ -258,7 +258,7 @@ </div> )HTML"); // ** Run LayoutNG algorithm ** - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> html_fragment; std::tie(html_fragment, space) = RunBlockLayoutAlgorithmForElement( GetDocument().getElementsByTagName("html")->item(0)); @@ -442,7 +442,7 @@ <div id="container">Hello</div> )HTML"); Element* element = GetElementById("container"); - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> box_fragment; std::tie(box_fragment, space) = RunBlockLayoutAlgorithmForElement(element); @@ -470,7 +470,7 @@ <div id="container"><span id="rel">XXXX YYYY</div> )HTML"); Element* element = GetElementById("container"); - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> box_fragment; std::tie(box_fragment, space) = RunBlockLayoutAlgorithmForElement(element);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc index 8a68827..f90bd1a 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
@@ -732,7 +732,8 @@ node.InitialContainingBlockSize()) << constraint_space->InitialContainingBlockSize() << " vs " << node.InitialContainingBlockSize(); - scoped_refptr<NGConstraintSpace> space = + + NGConstraintSpace space = NGConstraintSpaceBuilder(writing_mode, icb_size) .SetTextDirection(style.Direction()) .SetAvailableSize({available_inline_size, NGSizeIndefinite}) @@ -754,7 +755,7 @@ NGLineInfo line_info; NGLineBreaker line_breaker( - node, mode, *space, &positioned_floats, &unpositioned_floats, + node, mode, space, &positioned_floats, &unpositioned_floats, nullptr /* container_builder */, &empty_exclusion_space, 0u, line_opportunity, break_token.get()); line_breaker.NextLine(&line_info); @@ -786,14 +787,14 @@ MinMaxSizeInput zero_input; // Floats don't intrude into floats. // We'll need extrinsic sizing data when computing min/max for orthogonal // flow roots. - scoped_refptr<NGConstraintSpace> extrinsic_constraint_space; + NGConstraintSpace extrinsic_constraint_space; const NGConstraintSpace* optional_constraint_space = nullptr; if (!IsParallelWritingMode(container_writing_mode, float_node.Style().GetWritingMode())) { DCHECK(constraint_space); extrinsic_constraint_space = CreateExtrinsicConstraintSpaceForChild( *constraint_space, input.extrinsic_block_size, float_node); - optional_constraint_space = extrinsic_constraint_space.get(); + optional_constraint_space = &extrinsic_constraint_space; } MinMaxSize child_sizes = ComputeMinAndMaxContentContribution(
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node_test.cc index 0922cea..e71c5e97 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node_test.cc
@@ -103,12 +103,12 @@ Vector<scoped_refptr<const NGPhysicalTextFragment>>* fragments_out) { NGPhysicalSize icb_size(LayoutUnit(200), LayoutUnit(200)); - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpaceBuilder(WritingMode::kHorizontalTb, icb_size) .SetAvailableSize({LayoutUnit::Max(), LayoutUnit(-1)}) .ToConstraintSpace(WritingMode::kHorizontalTb); scoped_refptr<NGLayoutResult> result = - NGInlineLayoutAlgorithm(node, *constraint_space).Layout(); + NGInlineLayoutAlgorithm(node, constraint_space).Layout(); const NGPhysicalLineBoxFragment* line = ToNGPhysicalLineBoxFragment(result->PhysicalFragment().get());
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc index 208595b..e52cf60 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc
@@ -33,7 +33,7 @@ node.PrepareLayoutIfNeeded(); - scoped_refptr<NGConstraintSpace> space = + NGConstraintSpace space = NGConstraintSpaceBuilder( WritingMode::kHorizontalTb, /* icb_size */ {NGSizeIndefinite, NGSizeIndefinite}) @@ -50,7 +50,7 @@ NGLineLayoutOpportunity line_opportunity(available_width); while (!break_token || !break_token->IsFinished()) { NGLineInfo line_info; - NGLineBreaker line_breaker(node, NGLineBreakerMode::kContent, *space, + NGLineBreaker line_breaker(node, NGLineBreakerMode::kContent, space, &positioned_floats, &unpositioned_floats, /* container_builder */ nullptr, &exclusion_space, 0u, line_opportunity,
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc index 7319e68c7..cffcb1a 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow.cc
@@ -59,11 +59,11 @@ return; } - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpace::CreateFromLayoutObject(*this); scoped_refptr<NGLayoutResult> result = - NGBlockNode(this).Layout(*constraint_space); + NGBlockNode(this).Layout(constraint_space); for (NGOutOfFlowPositionedDescendant descendant : result->OutOfFlowPositionedDescendants()) @@ -91,7 +91,7 @@ containing_block->Size().Height()); NGLogicalOffset logical_offset(LogicalLeft(), LogicalTop()); physical_offset = logical_offset.ConvertToPhysical( - constraint_space->GetWritingMode(), constraint_space->Direction(), + constraint_space.GetWritingMode(), constraint_space.Direction(), containing_block_size, fragment->Size()); } result->SetOffset(physical_offset); @@ -101,7 +101,7 @@ LayoutBlock* container = ContainingBlock(); const ComputedStyle* container_style = container->Style(); const ComputedStyle* parent_style = Parent()->Style(); - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpace::CreateFromLayoutObject(*this); NGFragmentBuilder container_builder( container, scoped_refptr<const ComputedStyle>(container_style), @@ -112,7 +112,7 @@ // layout. Override sizes are padding box size, not border box, so we must add // borders and scrollbars to compensate. NGBoxStrut borders_and_scrollbars = - ComputeBorders(*constraint_space, *container_style) + + ComputeBorders(constraint_space, *container_style) + NGBlockNode(container).GetScrollbarSizes(); // Calculate the border-box size of the object that's the containing block of @@ -142,9 +142,9 @@ container_builder.SetInlineSize(container_border_box_logical_width); container_builder.SetBlockSize(container_border_box_logical_height); container_builder.SetBorders( - ComputeBorders(*constraint_space, *container_style)); + ComputeBorders(constraint_space, *container_style)); container_builder.SetPadding( - ComputePadding(*constraint_space, *container_style)); + ComputePadding(constraint_space, *container_style)); // Calculate the actual size of the containing block for this out-of-flow // descendant. This is what's used to size and position us. @@ -232,7 +232,7 @@ NGOutOfFlowLayoutPart( &container_builder, css_container->CanContainAbsolutePositionObjects(), css_container->CanContainFixedPositionObjects(), borders_and_scrollbars, - *constraint_space, *container_style) + constraint_space, *container_style) .Run(/* only_layout */ this); scoped_refptr<NGLayoutResult> result = container_builder.ToBoxFragment(); // These are the unpositioned OOF descendants of the current OOF block.
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_flexible_box.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_flexible_box.cc index 88f8f93..80f9623 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_flexible_box.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_flexible_box.cc
@@ -22,11 +22,11 @@ // TODO(dgrogan): Reuse logic from LayoutNGBlockFlow's // UpdateOutOfFlowBlockLayout when this flexbox is out of flow. - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpace::CreateFromLayoutObject(*this); scoped_refptr<NGLayoutResult> result = - NGBlockNode(this).Layout(*constraint_space); + NGBlockNode(this).Layout(constraint_space); for (NGOutOfFlowPositionedDescendant descendant : result->OutOfFlowPositionedDescendants()) @@ -43,7 +43,7 @@ containing_block->Size().Height()); NGLogicalOffset logical_offset(LogicalLeft(), LogicalTop()); physical_offset = logical_offset.ConvertToPhysical( - constraint_space->GetWritingMode(), constraint_space->Direction(), + constraint_space.GetWritingMode(), constraint_space.Direction(), containing_block_size, fragment->Size()); } result->SetOffset(physical_offset);
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc index c785494c..c1d4ec8 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.cc
@@ -231,7 +231,7 @@ if (constraint_space.IsIntermediateLayout()) return; - Base::cached_constraint_space_ = &constraint_space; + Base::cached_constraint_space_.emplace(constraint_space); cached_result_ = &layout_result; }
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h index 8379a5de..bd059b88 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_mixin.h
@@ -9,6 +9,7 @@ #include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/layout/layout_box_model_object.h" +#include "third_party/blink/renderer/core/layout/ng/ng_constraint_space.h" namespace blink {
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_table_caption.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_table_caption.cc index 1ec5ed14..04e53b0 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_table_caption.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_table_caption.cc
@@ -21,11 +21,11 @@ DCHECK(!IsOutOfFlowPositioned()) << "Out of flow captions are blockified."; - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpace::CreateFromLayoutObject(*this); scoped_refptr<NGLayoutResult> result = - NGBlockNode(this).Layout(*constraint_space); + NGBlockNode(this).Layout(constraint_space); // Tell legacy layout there were abspos descendents we couldn't place. We know // we have to pass up to legacy here because this method is legacy's entry
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_table_cell.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_table_cell.cc index b8cb4e14..8a6125e8 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_table_cell.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_table_cell.cc
@@ -22,11 +22,11 @@ SetOverrideLogicalWidth(LogicalWidth()); - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = NGConstraintSpace::CreateFromLayoutObject(*this); scoped_refptr<NGLayoutResult> result = - NGBlockNode(this).Layout(*constraint_space); + NGBlockNode(this).Layout(constraint_space); for (NGOutOfFlowPositionedDescendant descendant : result->OutOfFlowPositionedDescendants()) @@ -43,7 +43,7 @@ NGLogicalOffset logical_offset(LogicalLeft() + section->Location().X(), LogicalTop() + section->Location().Y()); physical_offset = logical_offset.ConvertToPhysical( - constraint_space->GetWritingMode(), constraint_space->Direction(), + constraint_space.GetWritingMode(), constraint_space.Direction(), section_size, fragment->Size()); } result->SetOffset(physical_offset);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_absolute_utils_test.cc b/third_party/blink/renderer/core/layout/ng/ng_absolute_utils_test.cc index c070173..ff53545 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_absolute_utils_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_absolute_utils_test.cc
@@ -91,10 +91,10 @@ scoped_refptr<ComputedStyle> style_; NGLogicalSize container_size_; - scoped_refptr<NGConstraintSpace> ltr_space_; - scoped_refptr<NGConstraintSpace> rtl_space_; - scoped_refptr<NGConstraintSpace> vertical_lr_space_; - scoped_refptr<NGConstraintSpace> vertical_rl_space_; + NGConstraintSpace ltr_space_; + NGConstraintSpace rtl_space_; + NGConstraintSpace vertical_lr_space_; + NGConstraintSpace vertical_rl_space_; }; TEST_F(NGAbsoluteUtilsTest, Horizontal) { @@ -148,7 +148,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true); estimated_inline = minmax_60; p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(minmax_60.min_size, p.size.width); EXPECT_EQ(LayoutUnit(0), p.inset.left); @@ -158,14 +158,14 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true); estimated_inline = minmax_60; p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_right_position, estimated_inline, + ltr_space_, *style_, static_right_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(minmax_60.min_size, p.size.width); EXPECT_EQ(container_size_.inline_size, p.inset.right); // All auto + RTL. p = ComputePartialAbsoluteWithChildInlineSize( - *rtl_space_, *style_, static_position, estimated_inline, base::nullopt, + rtl_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(minmax_60.min_size, p.size.width); EXPECT_EQ(container_size_.inline_size - minmax_60.min_size, p.inset.right); @@ -175,7 +175,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); LayoutUnit margin_space = (container_size_.inline_size - left - right - p.size.width) / 2; @@ -188,7 +188,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); estimated_inline.reset(); ComputeFullAbsoluteWithChildBlockSize( - *vertical_lr_space_, *style_, static_position, estimated_block, + vertical_lr_space_, *style_, static_position, estimated_block, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(left + margin_space, p.inset.left); EXPECT_EQ(right + margin_space, p.inset.right); @@ -199,7 +199,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); estimated_inline.reset(); ComputeFullAbsoluteWithChildBlockSize( - *vertical_rl_space_, *style_, static_position, estimated_block, + vertical_rl_space_, *style_, static_position, estimated_block, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(left + margin_space, p.inset.left); EXPECT_EQ(right + margin_space, p.inset.right); @@ -208,7 +208,7 @@ SetHorizontalStyle(left, NGAuto, LayoutUnit(200), NGAuto, right); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(left, p.inset.left); EXPECT_EQ(-left, p.inset.right); @@ -218,7 +218,7 @@ WritingMode::kHorizontalTb); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *rtl_space_, *style_, static_position, estimated_inline, base::nullopt, + rtl_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kRtl); EXPECT_EQ(-right, p.inset.left); EXPECT_EQ(right, p.inset.right); @@ -228,7 +228,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true); estimated_inline = minmax_60; p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(minmax_60.min_size, p.size.width); @@ -237,7 +237,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(margin_left, p.inset.left); EXPECT_EQ(container_size_.inline_size - margin_left - width, p.inset.right); @@ -247,7 +247,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *rtl_space_, *style_, static_position, estimated_inline, base::nullopt, + rtl_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(margin_left, p.inset.left); EXPECT_EQ(container_size_.inline_size - margin_left - width, p.inset.right); @@ -257,7 +257,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), true); estimated_inline = minmax_60; p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ( container_size_.inline_size - minmax_60.min_size - left - margin_left, @@ -269,7 +269,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(left + margin_left, p.inset.left); @@ -281,7 +281,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(left + margin_left, p.inset.left); style_->SetBoxSizing(EBoxSizing::kBorderBox); @@ -291,7 +291,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(right + margin_right, p.inset.right); @@ -300,7 +300,7 @@ EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); estimated_inline.reset(); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(width, p.size.width); } @@ -352,14 +352,14 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), true); auto_height = LayoutUnit(60); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(*auto_height, p.size.height); EXPECT_EQ(LayoutUnit(0), p.inset.top); // All auto, static position bottom ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position_bottom, auto_height, base::nullopt, + ltr_space_, *style_, static_position_bottom, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(container_size_.block_size, p.inset.bottom); @@ -368,7 +368,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); auto_height.reset(); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); LayoutUnit margin_space = (container_size_.block_size - top - height - bottom) / 2; @@ -380,7 +380,7 @@ WritingMode::kVerticalLr); EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); p = ComputePartialAbsoluteWithChildInlineSize( - *vertical_lr_space_, *style_, static_position, minmax_60, base::nullopt, + vertical_lr_space_, *style_, static_position, minmax_60, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(top + margin_space, p.inset.top); EXPECT_EQ(bottom + margin_space, p.inset.bottom); @@ -390,7 +390,7 @@ WritingMode::kVerticalRl); EXPECT_EQ(AbsoluteNeedsChildInlineSize(*style_), false); p = ComputePartialAbsoluteWithChildInlineSize( - *vertical_rl_space_, *style_, static_position, minmax_60, base::nullopt, + vertical_rl_space_, *style_, static_position, minmax_60, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(top + margin_space, p.inset.top); EXPECT_EQ(bottom + margin_space, p.inset.bottom); @@ -399,7 +399,7 @@ SetVerticalStyle(top, NGAuto, LayoutUnit(300), NGAuto, bottom); EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(top, p.inset.top); EXPECT_EQ(-top, p.inset.bottom); @@ -409,7 +409,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), true); auto_height = LayoutUnit(60); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(*auto_height, p.size.height); @@ -418,7 +418,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); auto_height.reset(); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(margin_top, p.inset.top); EXPECT_EQ(container_size_.block_size - margin_top - height, p.inset.bottom); @@ -428,7 +428,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), true); auto_height = LayoutUnit(20); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(border_padding, p.size.height); @@ -437,7 +437,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), true); auto_height = LayoutUnit(70); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(*auto_height, p.size.height); @@ -446,7 +446,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); auto_height.reset(); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(top + margin_top, p.inset.top); @@ -455,7 +455,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); auto_height.reset(); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(bottom + margin_bottom, p.inset.bottom); @@ -464,7 +464,7 @@ EXPECT_EQ(AbsoluteNeedsChildBlockSize(*style_), false); auto_height.reset(); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(height, p.size.height); } @@ -488,21 +488,21 @@ // width < min gets set to min. SetHorizontalStyle(NGAuto, NGAuto, LayoutUnit(5), NGAuto, NGAuto); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(min, p.size.width); // width > max gets set to max. SetHorizontalStyle(NGAuto, NGAuto, LayoutUnit(200), NGAuto, NGAuto); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(max, p.size.width); // Unspecified width becomes minmax, gets clamped to min. SetHorizontalStyle(NGAuto, NGAuto, NGAuto, NGAuto, NGAuto); p = ComputePartialAbsoluteWithChildInlineSize( - *ltr_space_, *style_, static_position, estimated_inline, base::nullopt, + ltr_space_, *style_, static_position, estimated_inline, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr); EXPECT_EQ(min, p.size.width); @@ -513,14 +513,14 @@ // height < min gets set to min. SetVerticalStyle(NGAuto, NGAuto, LayoutUnit(5), NGAuto, NGAuto); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(min, p.size.height); // height > max gets set to max. SetVerticalStyle(NGAuto, NGAuto, LayoutUnit(200), NGAuto, NGAuto); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(max, p.size.height); @@ -528,7 +528,7 @@ SetVerticalStyle(NGAuto, NGAuto, NGAuto, NGAuto, NGAuto); auto_height = LayoutUnit(20); ComputeFullAbsoluteWithChildBlockSize( - *ltr_space_, *style_, static_position, auto_height, base::nullopt, + ltr_space_, *style_, static_position, auto_height, base::nullopt, WritingMode::kHorizontalTb, TextDirection::kLtr, &p); EXPECT_EQ(min, p.size.width); }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.cc index 49fbfe4f..fa48c1f 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.cc
@@ -28,16 +28,15 @@ GetDocument().Lifecycle().AdvanceTo(DocumentLifecycle::kInPerformLayout); } -std::pair<scoped_refptr<const NGPhysicalBoxFragment>, - scoped_refptr<NGConstraintSpace>> +std::pair<scoped_refptr<const NGPhysicalBoxFragment>, NGConstraintSpace> NGBaseLayoutAlgorithmTest::RunBlockLayoutAlgorithmForElement(Element* element) { LayoutBlockFlow* block_flow = ToLayoutBlockFlow(element->GetLayoutObject()); NGBlockNode node(block_flow); - scoped_refptr<NGConstraintSpace> space = + NGConstraintSpace space = NGConstraintSpace::CreateFromLayoutObject(*block_flow); scoped_refptr<NGLayoutResult> result = - NGBlockLayoutAlgorithm(node, *space).Layout(); + NGBlockLayoutAlgorithm(node, space).Layout(); return std::make_pair( ToNGPhysicalBoxFragment(result->PhysicalFragment().get()), std::move(space)); @@ -76,7 +75,7 @@ return ToNGPhysicalBoxFragment(child.get()); } -scoped_refptr<NGConstraintSpace> ConstructBlockLayoutTestConstraintSpace( +NGConstraintSpace ConstructBlockLayoutTestConstraintSpace( WritingMode writing_mode, TextDirection direction, NGLogicalSize size,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.h b/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.h index e6811a1..ca291b3 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.h +++ b/third_party/blink/renderer/core/layout/ng/ng_base_layout_algorithm_test.h
@@ -32,8 +32,7 @@ // RunBlockLayoutAlgorithmForElement. void AdvanceToLayoutPhase(); - std::pair<scoped_refptr<const NGPhysicalBoxFragment>, - scoped_refptr<NGConstraintSpace>> + std::pair<scoped_refptr<const NGPhysicalBoxFragment>, NGConstraintSpace> RunBlockLayoutAlgorithmForElement(Element* element); scoped_refptr<const NGPhysicalBoxFragment> GetBoxFragmentByElementId( @@ -63,7 +62,7 @@ unsigned index_; }; -scoped_refptr<NGConstraintSpace> ConstructBlockLayoutTestConstraintSpace( +NGConstraintSpace ConstructBlockLayoutTestConstraintSpace( WritingMode writing_mode, TextDirection direction, NGLogicalSize size,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc index af8d3d6..9f05227 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -241,13 +241,13 @@ // flow roots. If the child is a block node, we can check that right away, // but if it's inline, there's no way of telling; there may be floated // children that establish an orthogonal flow root. - scoped_refptr<NGConstraintSpace> extrinsic_constraint_space; + NGConstraintSpace extrinsic_constraint_space; const NGConstraintSpace* optional_constraint_space = nullptr; if (!IsParallelWritingMode(Style().GetWritingMode(), child.Style().GetWritingMode())) { extrinsic_constraint_space = CreateExtrinsicConstraintSpaceForChild( ConstraintSpace(), extrinsic_block_size, child); - optional_constraint_space = extrinsic_constraint_space.get(); + optional_constraint_space = &extrinsic_constraint_space; } child_sizes = ComputeMinAndMaxContentContribution( Style().GetWritingMode(), child, child_input, @@ -1036,15 +1036,15 @@ (opportunity.rect.InlineSize() - inline_negative_margin + inline_margin) .ClampNegativeToZero(), child_available_size_.block_size}; - auto child_space = + NGConstraintSpace child_space = CreateConstraintSpaceForChild(child, child_data, child_available_size); // All formatting context roots (like this child) should start with an empty // exclusion space. - DCHECK(child_space->ExclusionSpace().IsEmpty()); + DCHECK(child_space.ExclusionSpace().IsEmpty()); scoped_refptr<NGLayoutResult> layout_result = - child.Layout(*child_space, child_break_token); + child.Layout(child_space, child_break_token); // Since this child establishes a new formatting context, no exclusion space // should be returned. @@ -1096,10 +1096,10 @@ NGInflowChildData child_data = ComputeChildData(*previous_inflow_position, child, child_break_token, has_clearance_past_adjoining_floats); - scoped_refptr<NGConstraintSpace> child_space = + NGConstraintSpace child_space = CreateConstraintSpaceForChild(child, child_data, child_available_size_); scoped_refptr<NGLayoutResult> layout_result = - child.Layout(*child_space, child_break_token); + child.Layout(child_space, child_break_token); base::Optional<LayoutUnit> child_bfc_block_offset = layout_result->BfcBlockOffset(); @@ -1110,7 +1110,7 @@ // distinction. bool relayout_child_when_bfc_resolved = layout_result->AdjoiningFloatTypes() && !child_bfc_block_offset && - !child_space->FloatsBfcBlockOffset(); + !child_space.FloatsBfcBlockOffset(); bool is_empty_block = IsEmptyBlock(child, *layout_result); // A child may have aborted its layout if it resolved its BFC block offset. @@ -1139,7 +1139,7 @@ // abort our layout if needed. bool has_clearance = layout_result->IsPushedByFloats(); if (!child_bfc_block_offset) { - if (!has_clearance && child_space->HasClearanceOffset() && + if (!has_clearance && child_space.HasClearanceOffset() && child.Style().Clear() != EClear::kNone) { // This is an empty block child that we collapsed through, so we have to // detect clearance manually. See if the child's hypothetical border edge @@ -1147,8 +1147,8 @@ // before it. LayoutUnit child_block_offset_estimate = BfcBlockOffset() + layout_result->EndMarginStrut().Sum(); - if (child_block_offset_estimate < child_space->ClearanceOffset() || - child_space->ShouldForceClearance()) + if (child_block_offset_estimate < child_space.ClearanceOffset() || + child_space.ShouldForceClearance()) has_clearance = empty_block_affected_by_clearance = true; } } @@ -1168,7 +1168,7 @@ // Since we know our own BFC block offset, though, we can calculate that // of the child as well. child_bfc_block_offset = PositionEmptyChildWithParentBfc( - child, *child_space, child_data, *layout_result); + child, child_space, child_data, *layout_result); } } else if (!has_clearance) { // We shouldn't have any pending floats here, since an in-flow child found @@ -1221,10 +1221,9 @@ relayout_child_when_bfc_resolved || empty_block_affected_by_clearance_needs_relayout) && child_bfc_block_offset) { - scoped_refptr<NGConstraintSpace> new_child_space = - CreateConstraintSpaceForChild(child, child_data, child_available_size_, - child_bfc_block_offset); - layout_result = child.Layout(*new_child_space, child_break_token); + NGConstraintSpace new_child_space = CreateConstraintSpaceForChild( + child, child_data, child_available_size_, child_bfc_block_offset); + layout_result = child.Layout(new_child_space, child_break_token); if (layout_result->Status() == NGLayoutResult::kBfcBlockOffsetResolved) { // Even a second layout pass may abort, if the BFC block offset initially @@ -1236,7 +1235,7 @@ DCHECK(child_bfc_block_offset); new_child_space = CreateConstraintSpaceForChild( child, child_data, child_available_size_, child_bfc_block_offset); - layout_result = child.Layout(*new_child_space, child_break_token); + layout_result = child.Layout(new_child_space, child_break_token); } DCHECK_EQ(layout_result->Status(), NGLayoutResult::kSuccess); @@ -1788,14 +1787,13 @@ return {}; const ComputedStyle& child_style = child.Style(); - scoped_refptr<NGConstraintSpace> space = + NGConstraintSpace space = NGConstraintSpaceBuilder(ConstraintSpace()) .SetAvailableSize(child_available_size_) .SetPercentageResolutionSize(child_percentage_size_) .ToConstraintSpace(child_style.GetWritingMode()); - NGBoxStrut margins = - ComputeMarginsFor(*space, child_style, ConstraintSpace()); + NGBoxStrut margins = ComputeMarginsFor(space, child_style, ConstraintSpace()); if (ShouldIgnoreBlockStartMargin(ConstraintSpace(), child, child_break_token)) margins.block_start = LayoutUnit(); @@ -1804,19 +1802,18 @@ // correctly. if (!child.CreatesNewFormattingContext()) { NGBoxStrut child_border_padding = - ComputeBorders(*space, child) + ComputePadding(*space, child.Style()); + ComputeBorders(space, child) + ComputePadding(space, child.Style()); LayoutUnit child_inline_size = - ComputeInlineSizeForFragment(*space, child, child_border_padding); + ComputeInlineSizeForFragment(space, child, child_border_padding); ResolveInlineMargins(child_style, Style(), - space->AvailableSize().inline_size, child_inline_size, + space.AvailableSize().inline_size, child_inline_size, &margins); } return margins; } -scoped_refptr<NGConstraintSpace> -NGBlockLayoutAlgorithm::CreateConstraintSpaceForChild( +NGConstraintSpace NGBlockLayoutAlgorithm::CreateConstraintSpaceForChild( const NGLayoutInputNode child, const NGInflowChildData& child_data, const NGLogicalSize child_available_size,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h index 1b318507..cc8da8e 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.h
@@ -87,7 +87,7 @@ const NGBreakToken* child_break_token); // Creates a new constraint space for the current child. - scoped_refptr<NGConstraintSpace> CreateConstraintSpaceForChild( + NGConstraintSpace CreateConstraintSpaceForChild( const NGLayoutInputNode child, const NGInflowChildData& child_data, const NGLogicalSize child_available_size,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm_test.cc index b796cc0b..ae17cc1 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm_test.cc
@@ -45,12 +45,11 @@ MinMaxSize RunComputeMinAndMax(NGBlockNode node) { // The constraint space is not used for min/max computation, but we need // it to create the algorithm. - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(), LayoutUnit())); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(), LayoutUnit())); - NGBlockLayoutAlgorithm algorithm(node, *space); + NGBlockLayoutAlgorithm algorithm(node, space); MinMaxSizeInput input; auto min_max = algorithm.ComputeMinMaxSize(input); EXPECT_TRUE(min_max.has_value()); @@ -80,15 +79,14 @@ <div id="box" style="width:30px; height:40px"></div> )HTML"); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); NGBlockNode box(ToLayoutBox(GetLayoutObjectByElementId("box"))); scoped_refptr<const NGPhysicalFragment> frag = - RunBlockLayoutAlgorithm(*space, box); + RunBlockLayoutAlgorithm(space, box); EXPECT_EQ(NGPhysicalSize(LayoutUnit(30), LayoutUnit(40)), frag->Size()); } @@ -100,40 +98,39 @@ <div id="box" style="width:30px; height:40px"></div> )HTML"); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); LayoutBlockFlow* block_flow = ToLayoutBlockFlow(GetLayoutObjectByElementId("box")); NGBlockNode node(block_flow); - scoped_refptr<NGLayoutResult> result(node.Layout(*space, nullptr)); + scoped_refptr<NGLayoutResult> result(node.Layout(space, nullptr)); EXPECT_EQ(NGPhysicalSize(LayoutUnit(30), LayoutUnit(40)), result->PhysicalFragment()->Size()); // Test pointer-equal constraint space - result = block_flow->CachedLayoutResult(*space, nullptr); + result = block_flow->CachedLayoutResult(space, nullptr); EXPECT_NE(result.get(), nullptr); // Test identical, but not pointer-equal, constraint space space = ConstructBlockLayoutTestConstraintSpace( WritingMode::kHorizontalTb, TextDirection::kLtr, NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); - result = block_flow->CachedLayoutResult(*space, nullptr); + result = block_flow->CachedLayoutResult(space, nullptr); EXPECT_NE(result.get(), nullptr); // Test different constraint space space = ConstructBlockLayoutTestConstraintSpace( WritingMode::kHorizontalTb, TextDirection::kLtr, NGLogicalSize(LayoutUnit(200), NGSizeIndefinite)); - result = block_flow->CachedLayoutResult(*space, nullptr); + result = block_flow->CachedLayoutResult(space, nullptr); EXPECT_EQ(result.get(), nullptr); // Test layout invalidation block_flow->SetNeedsLayout(""); - result = block_flow->CachedLayoutResult(*space, nullptr); + result = block_flow->CachedLayoutResult(space, nullptr); EXPECT_EQ(result.get(), nullptr); } @@ -153,13 +150,12 @@ const int kMarginTop = 5; NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); EXPECT_EQ(LayoutUnit(kWidth), frag->Size().width); EXPECT_EQ(LayoutUnit(kHeight1 + kHeight2 + kMarginTop), frag->Size().height); @@ -198,12 +194,11 @@ const int kMarginLeft = 100; NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); scoped_refptr<const NGPhysicalBoxFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); const NGLink& child = frag->Children()[0]; const NGLink& child2 = @@ -254,7 +249,7 @@ )HTML"); // ** Run LayoutNG algorithm ** - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> fragment; std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( GetDocument().getElementsByTagName("html")->item(0)); @@ -335,7 +330,7 @@ )HTML"); // ** Run LayoutNG algorithm ** - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> fragment; std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( GetDocument().getElementsByTagName("html")->item(0)); @@ -608,12 +603,11 @@ const int kMarginTop = 40; NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(500), LayoutUnit(500))); scoped_refptr<const NGPhysicalBoxFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); ASSERT_EQ(frag->Children().size(), 2UL); @@ -911,13 +905,12 @@ NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); ASSERT_EQ(frag->Children().size(), 1UL); @@ -949,12 +942,11 @@ NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Size().width); EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type()); @@ -982,12 +974,11 @@ NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(100), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); EXPECT_EQ(LayoutUnit(kWidth + kPaddingLeft), frag->Size().width); EXPECT_EQ(NGPhysicalFragment::kFragmentBox, frag->Type()); @@ -1045,7 +1036,7 @@ )HTML"); // ** Run LayoutNG algorithm ** - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> fragment; std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( GetDocument().getElementsByTagName("html")->item(0)); @@ -1174,7 +1165,7 @@ )HTML"); // ** Run LayoutNG algorithm ** - scoped_refptr<NGConstraintSpace> space; + NGConstraintSpace space; scoped_refptr<const NGPhysicalBoxFragment> fragment; std::tie(fragment, space) = RunBlockLayoutAlgorithmForElement( GetDocument().getElementsByTagName("html")->item(0)); @@ -1506,12 +1497,11 @@ NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(100), NGSizeIndefinite), true); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(100), NGSizeIndefinite), true); scoped_refptr<const NGPhysicalFragment> frag = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); EXPECT_EQ(LayoutUnit(kWidthChild2), frag->Size().width); } @@ -1672,15 +1662,14 @@ LayoutUnit kFragmentainerSpaceAvailable(200); NGBlockNode node(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); // We should only have one 150x200 fragment with no fragmentation. scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); ASSERT_TRUE(fragment->BreakToken()->IsFinished()); } @@ -1701,18 +1690,17 @@ LayoutUnit kFragmentainerSpaceAvailable(200); NGBlockNode node(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); ASSERT_FALSE(fragment->BreakToken()->IsFinished()); - fragment = NGBlockLayoutAlgorithm(node, *space, + fragment = NGBlockLayoutAlgorithm(node, space, ToNGBlockBreakToken(fragment->BreakToken())) .Layout() ->PhysicalFragment(); @@ -1748,14 +1736,13 @@ LayoutUnit kFragmentainerSpaceAvailable(200); NGBlockNode node(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); ASSERT_FALSE(fragment->BreakToken()->IsFinished()); @@ -1767,7 +1754,7 @@ EXPECT_FALSE(iterator.NextChild()); - fragment = NGBlockLayoutAlgorithm(node, *space, + fragment = NGBlockLayoutAlgorithm(node, space, ToNGBlockBreakToken(fragment->BreakToken())) .Layout() ->PhysicalFragment(); @@ -1817,14 +1804,13 @@ LayoutUnit kFragmentainerSpaceAvailable(200); NGBlockNode node(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(200)), fragment->Size()); ASSERT_FALSE(fragment->BreakToken()->IsFinished()); @@ -1836,7 +1822,7 @@ EXPECT_FALSE(iterator.NextChild()); - fragment = NGBlockLayoutAlgorithm(node, *space, + fragment = NGBlockLayoutAlgorithm(node, space, ToNGBlockBreakToken(fragment->BreakToken())) .Layout() ->PhysicalFragment(); @@ -1884,14 +1870,13 @@ LayoutUnit kFragmentainerSpaceAvailable(200); NGBlockNode node(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(70)), fragment->Size()); ASSERT_FALSE(fragment->BreakToken()->IsFinished()); @@ -1903,7 +1888,7 @@ EXPECT_FALSE(iterator.NextChild()); - fragment = NGBlockLayoutAlgorithm(node, *space, + fragment = NGBlockLayoutAlgorithm(node, space, ToNGBlockBreakToken(fragment->BreakToken())) .Layout() ->PhysicalFragment(); @@ -1952,14 +1937,13 @@ LayoutUnit kFragmentainerSpaceAvailable(150); NGBlockNode node(ToLayoutBlockFlow(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(50)), fragment->Size()); ASSERT_FALSE(fragment->BreakToken()->IsFinished()); @@ -1980,7 +1964,7 @@ WritingMode::kHorizontalTb, TextDirection::kLtr, NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, kFragmentainerSpaceAvailable); - fragment = NGBlockLayoutAlgorithm(node, *space, + fragment = NGBlockLayoutAlgorithm(node, space, ToNGBlockBreakToken(fragment->BreakToken())) .Layout() ->PhysicalFragment(); @@ -2032,16 +2016,15 @@ LayoutUnit kFragmentainerSpaceAvailable(150); NGBlockNode node(ToLayoutBlockFlow(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); AdvanceToLayoutPhase(); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(60)), fragment->Size()); ASSERT_TRUE(fragment->BreakToken()->IsFinished()); @@ -2081,14 +2064,13 @@ LayoutUnit kFragmentainerSpaceAvailable(150); NGBlockNode node(ToLayoutBlockFlow(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, - kFragmentainerSpaceAvailable); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, + kFragmentainerSpaceAvailable); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(150), LayoutUnit(50)), fragment->Size()); ASSERT_FALSE(fragment->BreakToken()->IsFinished()); @@ -2106,7 +2088,7 @@ WritingMode::kHorizontalTb, TextDirection::kLtr, NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true, kFragmentainerSpaceAvailable); - fragment = NGBlockLayoutAlgorithm(node, *space, + fragment = NGBlockLayoutAlgorithm(node, space, ToNGBlockBreakToken(fragment->BreakToken())) .Layout() ->PhysicalFragment(); @@ -2207,13 +2189,12 @@ )HTML"); NGBlockNode node(ToLayoutBlockFlow(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(200), LayoutUnit(150)), fragment->Size()); FragmentChildIterator iterator(ToNGPhysicalBoxFragment(fragment.get())); @@ -2243,13 +2224,12 @@ )HTML"); NGBlockNode node(ToLayoutBlockFlow(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(200), LayoutUnit(10)), fragment->Size()); FragmentChildIterator iterator(ToNGPhysicalBoxFragment(fragment.get())); @@ -2281,13 +2261,12 @@ )HTML"); NGBlockNode node(ToLayoutBlockFlow(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite), false, true); scoped_refptr<const NGPhysicalFragment> fragment = - NGBlockLayoutAlgorithm(node, *space).Layout()->PhysicalFragment(); + NGBlockLayoutAlgorithm(node, space).Layout()->PhysicalFragment(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(200), LayoutUnit(10)), fragment->Size()); FragmentChildIterator iterator(ToNGPhysicalBoxFragment(fragment.get()));
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc index 7f8d4829..748aa2f 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_block_node.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_block_node.cc
@@ -323,7 +323,7 @@ return ComputeMinMaxSizeFromLegacy(input.size_type); } - scoped_refptr<NGConstraintSpace> zero_constraint_space = + NGConstraintSpace zero_constraint_space = CreateConstraintSpaceBuilderForMinMax(*this).ToConstraintSpace( Style().GetWritingMode()); @@ -332,7 +332,7 @@ // flow root isn't going to give the right result. DCHECK(!is_orthogonal_flow_root); - constraint_space = zero_constraint_space.get(); + constraint_space = &zero_constraint_space; } if (is_orthogonal_flow_root || !CanUseNewLayout()) { @@ -369,7 +369,7 @@ } // Have to synthesize this value. - scoped_refptr<NGLayoutResult> layout_result = Layout(*zero_constraint_space); + scoped_refptr<NGLayoutResult> layout_result = Layout(zero_constraint_space); NGBoxFragment min_fragment( container_writing_mode, TextDirection::kLtr, // irrelevant here @@ -377,13 +377,13 @@ sizes.min_size = min_fragment.Size().inline_size; // Now, redo with infinite space for max_content - scoped_refptr<NGConstraintSpace> infinite_constraint_space = + NGConstraintSpace infinite_constraint_space = CreateConstraintSpaceBuilderForMinMax(*this) .SetAvailableSize({LayoutUnit::Max(), LayoutUnit()}) .SetPercentageResolutionSize({LayoutUnit(), LayoutUnit()}) .ToConstraintSpace(Style().GetWritingMode()); - layout_result = Layout(*infinite_constraint_space); + layout_result = Layout(infinite_constraint_space); NGBoxFragment max_fragment( container_writing_mode, TextDirection::kLtr, // irrelevant here @@ -738,7 +738,7 @@ } const ComputedStyle& style = Style(); - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = space_builder.SetIsNewFormattingContext(true) .SetIsShrinkToFit(true) .SetAvailableSize(parent_constraint_space.AvailableSize()) @@ -748,7 +748,7 @@ parent_constraint_space.ReplacedPercentageResolutionSize()) .SetTextDirection(style.Direction()) .ToConstraintSpace(style.GetWritingMode()); - return Layout(*constraint_space); + return Layout(constraint_space); } scoped_refptr<NGLayoutResult> NGBlockNode::RunOldLayout(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc index c746315..b1776a8 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc
@@ -108,11 +108,10 @@ do { // Lay out one column. Each column will become a fragment. - scoped_refptr<NGConstraintSpace> child_space = - CreateConstraintSpaceForColumns(column_size, - separate_leading_margins); + NGConstraintSpace child_space = CreateConstraintSpaceForColumns( + column_size, separate_leading_margins); - NGBlockLayoutAlgorithm child_algorithm(Node(), *child_space.get(), + NGBlockLayoutAlgorithm child_algorithm(Node(), child_space, break_token.get()); child_algorithm.SetBoxType(NGPhysicalFragment::kColumnBox); scoped_refptr<NGLayoutResult> result = child_algorithm.Layout(); @@ -256,13 +255,13 @@ // make us lay out all the multicol content as one single tall strip. When // we're done with this layout pass, we can examine the result and calculate // an ideal column block size. - auto space = CreateConstaintSpaceForBalancing(column_size); - NGBlockLayoutAlgorithm balancing_algorithm(Node(), *space.get()); + NGConstraintSpace space = CreateConstaintSpaceForBalancing(column_size); + NGBlockLayoutAlgorithm balancing_algorithm(Node(), space); scoped_refptr<NGLayoutResult> result = balancing_algorithm.Layout(); // TODO(mstensho): This is where the fun begins. We need to examine the entire // fragment tree, not just the root. - NGFragment fragment(space->GetWritingMode(), *result->PhysicalFragment()); + NGFragment fragment(space.GetWritingMode(), *result->PhysicalFragment()); LayoutUnit single_strip_block_size = fragment.BlockSize(); // Some extra care is required the division here. We want a the resulting @@ -288,8 +287,7 @@ return ConstrainColumnBlockSize(length, Node(), ConstraintSpace()); } -scoped_refptr<NGConstraintSpace> -NGColumnLayoutAlgorithm::CreateConstraintSpaceForColumns( +NGConstraintSpace NGColumnLayoutAlgorithm::CreateConstraintSpaceForColumns( const NGLogicalSize& column_size, bool separate_leading_margins) const { NGConstraintSpaceBuilder space_builder(ConstraintSpace()); @@ -316,8 +314,7 @@ return space_builder.ToConstraintSpace(Style().GetWritingMode()); } -scoped_refptr<NGConstraintSpace> -NGColumnLayoutAlgorithm::CreateConstaintSpaceForBalancing( +NGConstraintSpace NGColumnLayoutAlgorithm::CreateConstaintSpaceForBalancing( const NGLogicalSize& column_size) const { NGConstraintSpaceBuilder space_builder(ConstraintSpace()); space_builder.SetAvailableSize({column_size.inline_size, NGSizeIndefinite});
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h index 19262a4..18b813ef 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.h
@@ -43,10 +43,10 @@ LayoutUnit current_column_size, LayoutUnit container_content_box_block_size) const; - scoped_refptr<NGConstraintSpace> CreateConstraintSpaceForColumns( + NGConstraintSpace CreateConstraintSpaceForColumns( const NGLogicalSize& column_size, bool separate_leading_margins) const; - scoped_refptr<NGConstraintSpace> CreateConstaintSpaceForBalancing( + NGConstraintSpace CreateConstaintSpaceForBalancing( const NGLogicalSize& column_size) const; };
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm_test.cc b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm_test.cc index 8e4f2d1..ce4ee45 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm_test.cc
@@ -39,11 +39,10 @@ scoped_refptr<const NGPhysicalBoxFragment> RunBlockLayoutAlgorithm( Element* element) { NGBlockNode container(ToLayoutBox(element->GetLayoutObject())); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); - return RunBlockLayoutAlgorithm(*space, container); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + return RunBlockLayoutAlgorithm(space, container); } String DumpFragmentTree(const NGPhysicalBoxFragment* fragment) { @@ -81,12 +80,11 @@ )HTML"); NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> parent_fragment = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); FragmentChildIterator iterator(parent_fragment.get()); const auto* fragment = iterator.NextChild(); ASSERT_TRUE(fragment); @@ -123,12 +121,11 @@ )HTML"); NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> parent_fragment = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); FragmentChildIterator iterator(parent_fragment.get()); const auto* fragment = iterator.NextChild(); EXPECT_EQ(NGPhysicalSize(LayoutUnit(210), LayoutUnit(100)), fragment->Size()); @@ -173,12 +170,11 @@ )HTML"); NGBlockNode container(ToLayoutBox(GetLayoutObjectByElementId("container"))); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); scoped_refptr<const NGPhysicalBoxFragment> parent_fragment = - RunBlockLayoutAlgorithm(*space, container); + RunBlockLayoutAlgorithm(space, container); FragmentChildIterator iterator(parent_fragment.get()); const auto* fragment = iterator.NextChild(); @@ -1980,11 +1976,10 @@ scoped_refptr<ComputedStyle> style = ComputedStyle::Clone(layout_object->StyleRef()); layout_object->SetStyle(style); - scoped_refptr<NGConstraintSpace> space = - ConstructBlockLayoutTestConstraintSpace( - WritingMode::kHorizontalTb, TextDirection::kLtr, - NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); - NGColumnLayoutAlgorithm algorithm(node, *space.get()); + NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace( + WritingMode::kHorizontalTb, TextDirection::kLtr, + NGLogicalSize(LayoutUnit(1000), NGSizeIndefinite)); + NGColumnLayoutAlgorithm algorithm(node, space); base::Optional<MinMaxSize> size; MinMaxSizeInput zero_input;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc index 7181666..5f774bf5 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.cc
@@ -57,7 +57,7 @@ baseline_requests_.swap(baseline_requests); } -scoped_refptr<NGConstraintSpace> NGConstraintSpace::CreateFromLayoutObject( +NGConstraintSpace NGConstraintSpace::CreateFromLayoutObject( const LayoutBox& box) { auto writing_mode = box.StyleRef().GetWritingMode(); bool parallel_containing_block = IsParallelWritingMode(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h index 1ffe6a7..03bbebf2 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space.h
@@ -37,15 +37,16 @@ // This enum is used for communicating to *direct* children of table cells, // which layout phase the table cell is in. enum NGTableCellChildLayoutPhase { - kNone, // The node isn't a table cell child. + kNotTableCellChild, // The node isn't a table cell child. kMeasure, // The node is a table cell child, in the "measure" phase. kLayout // The node is a table cell child, in the "layout" phase. }; // The NGConstraintSpace represents a set of constraints and available space // which a layout algorithm may produce a NGFragment within. -class CORE_EXPORT NGConstraintSpace final - : public RefCounted<NGConstraintSpace> { +class CORE_EXPORT NGConstraintSpace final { + DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); + public: enum ConstraintSpaceFlags { kOrthogonalWritingModeRoot = 1 << 0, @@ -64,11 +65,16 @@ kNumberOfConstraintSpaceFlags = 11 }; + NGConstraintSpace() {} + NGConstraintSpace(const NGConstraintSpace&) = default; + NGConstraintSpace(NGConstraintSpace&&) = default; + NGConstraintSpace& operator=(const NGConstraintSpace&) = default; + NGConstraintSpace& operator=(NGConstraintSpace&&) = default; + // Creates NGConstraintSpace representing LayoutObject's containing block. // This should live on NGBlockNode or another layout bridge and probably take // a root NGConstraintSpace. - static scoped_refptr<NGConstraintSpace> CreateFromLayoutObject( - const LayoutBox&); + static NGConstraintSpace CreateFromLayoutObject(const LayoutBox&); const NGExclusionSpace& ExclusionSpace() const { return exclusion_space_; } @@ -322,7 +328,7 @@ NGBfcOffset bfc_offset_; base::Optional<LayoutUnit> floats_bfc_block_offset_; - const NGExclusionSpace exclusion_space_; + NGExclusionSpace exclusion_space_; LayoutUnit clearance_offset_; Vector<NGBaselineRequest> baseline_requests_;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc index 8760a6fd..2b819c8 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.cc
@@ -103,7 +103,7 @@ return *this; } -scoped_refptr<NGConstraintSpace> NGConstraintSpaceBuilder::ToConstraintSpace( +const NGConstraintSpace NGConstraintSpaceBuilder::ToConstraintSpace( WritingMode out_writing_mode) { // Whether the child and the containing block are parallel to each other. // Example: vertical-rl and vertical-lr @@ -181,7 +181,7 @@ base::Optional<LayoutUnit> floats_bfc_block_offset = is_new_fc_ ? base::nullopt : floats_bfc_block_offset_; - return base::AdoptRef(new NGConstraintSpace( + return NGConstraintSpace( out_writing_mode, text_direction_, available_size, percentage_resolution_size, replaced_percentage_resolution_size, parent_percentage_resolution_size.inline_size, @@ -189,7 +189,7 @@ fragmentainer_space_at_bfc_start_, fragmentation_type_, table_cell_child_layout_phase_, adjoining_floats_, margin_strut, bfc_offset, floats_bfc_block_offset, exclusion_space, clearance_offset, - baseline_requests_, resolved_flags)); + baseline_requests_, resolved_flags); } } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h index a813d24..7cf54c1 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder.h
@@ -131,7 +131,7 @@ // - Has its size is determined by its parent layout (flex, abs-pos). // // WritingMode specifies the writing mode of the generated space. - scoped_refptr<NGConstraintSpace> ToConstraintSpace(WritingMode); + const NGConstraintSpace ToConstraintSpace(WritingMode); private: void SetFlag(NGConstraintSpace::ConstraintSpaceFlags mask, bool value) { @@ -151,7 +151,8 @@ WritingMode parent_writing_mode_; NGFragmentationType fragmentation_type_ = kFragmentNone; - NGTableCellChildLayoutPhase table_cell_child_layout_phase_ = kNone; + NGTableCellChildLayoutPhase table_cell_child_layout_phase_ = + kNotTableCellChild; NGFloatTypes adjoining_floats_ = kFloatTypeNone; TextDirection text_direction_ = TextDirection::kLtr;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder_test.cc b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder_test.cc index c6ea0c1..98cfab9 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_constraint_space_builder_test.cc
@@ -25,15 +25,16 @@ horizontal_builder.SetPercentageResolutionSize(fixed_size); NGConstraintSpaceBuilder vertical_builder( - *horizontal_builder.ToConstraintSpace(WritingMode::kHorizontalTb)); + horizontal_builder.ToConstraintSpace(WritingMode::kHorizontalTb)); vertical_builder.SetAvailableSize(indefinite_size); vertical_builder.SetPercentageResolutionSize(indefinite_size); - scoped_refptr<NGConstraintSpace> space = + + NGConstraintSpace space = vertical_builder.ToConstraintSpace(WritingMode::kVerticalLr); - EXPECT_EQ(space->AvailableSize().inline_size, icb_size.height); - EXPECT_EQ(space->PercentageResolutionSize().inline_size, icb_size.height); + EXPECT_EQ(space.AvailableSize().inline_size, icb_size.height); + EXPECT_EQ(space.PercentageResolutionSize().inline_size, icb_size.height); }; // Asserts that indefinite inline length becomes initial containing @@ -50,15 +51,16 @@ horizontal_builder.SetPercentageResolutionSize(fixed_size); NGConstraintSpaceBuilder vertical_builder( - *horizontal_builder.ToConstraintSpace(WritingMode::kVerticalLr)); + horizontal_builder.ToConstraintSpace(WritingMode::kVerticalLr)); vertical_builder.SetAvailableSize(indefinite_size); vertical_builder.SetPercentageResolutionSize(indefinite_size); - scoped_refptr<NGConstraintSpace> space = + + NGConstraintSpace space = vertical_builder.ToConstraintSpace(WritingMode::kHorizontalTb); - EXPECT_EQ(space->AvailableSize().inline_size, icb_size.width); - EXPECT_EQ(space->PercentageResolutionSize().inline_size, icb_size.width); + EXPECT_EQ(space.AvailableSize().inline_size, icb_size.width); + EXPECT_EQ(space.PercentageResolutionSize().inline_size, icb_size.width); }; } // namespace
diff --git a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc index c31bd45d..e078254 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_flex_layout_algorithm.cc
@@ -43,20 +43,20 @@ if (child.IsOutOfFlowPositioned()) continue; - NGConstraintSpaceBuilder space_builder(ConstraintSpace()); - space_builder.SetAvailableSize(flex_container_content_box_size); - space_builder.SetPercentageResolutionSize(flex_container_content_box_size); - scoped_refptr<NGConstraintSpace> child_space = - space_builder.ToConstraintSpace(child.Style().GetWritingMode()); + NGConstraintSpace child_space = + NGConstraintSpaceBuilder(ConstraintSpace()) + .SetAvailableSize(flex_container_content_box_size) + .SetPercentageResolutionSize(flex_container_content_box_size) + .ToConstraintSpace(child.Style().GetWritingMode()); LayoutUnit main_axis_border_and_padding = - ComputeBorders(*child_space, child.Style()).InlineSum() + - ComputePadding(*child_space, child.Style()).InlineSum(); + ComputeBorders(child_space, child.Style()).InlineSum() + + ComputePadding(child_space, child.Style()).InlineSum(); // ComputeMinMaxSize will layout the child if it has an orthogonal writing // mode. MinMaxSize will be in the container's inline direction. MinMaxSizeInput zero_input; MinMaxSize min_max_sizes_border_box = child.ComputeMinMaxSize( - ConstraintSpace().GetWritingMode(), zero_input, child_space.get()); + ConstraintSpace().GetWritingMode(), zero_input, &child_space); LayoutUnit flex_base_border_box; if (child.Style().FlexBasis().IsAuto() && child.Style().Width().IsAuto()) { @@ -70,7 +70,7 @@ // TODO(dgrogan): Use ResolveBlockLength here for column flex boxes. flex_base_border_box = ResolveInlineLength( - *child_space, child.Style(), min_max_sizes_border_box, + child_space, child.Style(), min_max_sizes_border_box, length_to_resolve, LengthResolveType::kContentSize, LengthResolvePhase::kLayout); } @@ -83,7 +83,7 @@ flex_base_border_box - main_axis_border_and_padding; LayoutUnit main_axis_margin = - ComputeMarginsForSelf(*child_space, child.Style()).InlineSum(); + ComputeMarginsForSelf(child_space, child.Style()).InlineSum(); // TODO(dgrogan): When child has a min/max-{width,height} set, call // Resolve{Inline,Block}Length here with child's style and constraint space. @@ -126,11 +126,10 @@ space_builder.SetPercentageResolutionSize( flex_container_content_box_size); space_builder.SetIsFixedSizeInline(true); - scoped_refptr<NGConstraintSpace> child_space = - space_builder.ToConstraintSpace( - flex_item.box->Style()->GetWritingMode()); + NGConstraintSpace child_space = space_builder.ToConstraintSpace( + flex_item.box->Style()->GetWritingMode()); flex_item.layout_result = - flex_item.ng_input_node.Layout(*child_space, nullptr /*break token*/); + flex_item.ng_input_node.Layout(child_space, nullptr /*break token*/); flex_item.cross_axis_size = flex_item.layout_result->PhysicalFragment()->Size().height; // TODO(dgrogan): Port logic from
diff --git a/third_party/blink/renderer/core/layout/ng/ng_floats_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_floats_utils.cc index 2407bbd..d966edb 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_floats_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_floats_utils.cc
@@ -59,7 +59,7 @@ // Creates a constraint space for an unpositioned float. origin_block_offset // should only be set when we want to fragmentation to occur. -scoped_refptr<NGConstraintSpace> CreateConstraintSpaceForFloat( +NGConstraintSpace CreateConstraintSpaceForFloat( const NGLogicalSize& float_available_size, const NGLogicalSize& float_percentage_size, const NGLogicalSize& float_replaced_percentage_size, @@ -119,7 +119,7 @@ break; case CSSBoxType::kPadding: shape_insets = - ComputeBorders(*CreateConstraintSpaceForFloat( + ComputeBorders(CreateConstraintSpaceForFloat( float_available_size, float_percentage_size, float_replaced_percentage_size, unpositioned_float, parent_space), @@ -129,12 +129,11 @@ TextDirection::kLtr); break; case CSSBoxType::kContent: - const scoped_refptr<NGConstraintSpace> space = - CreateConstraintSpaceForFloat( - float_available_size, float_percentage_size, - float_replaced_percentage_size, unpositioned_float, parent_space); + const NGConstraintSpace space = CreateConstraintSpaceForFloat( + float_available_size, float_percentage_size, + float_replaced_percentage_size, unpositioned_float, parent_space); NGBoxStrut border_padding = - ComputeBorders(*space, style) + ComputePadding(*space, style); + ComputeBorders(space, style) + ComputePadding(space, style); shape_insets = border_padding .ConvertToPhysical(style.GetWritingMode(), style.Direction()) @@ -191,13 +190,13 @@ if (unpositioned_float->layout_result) return; - const scoped_refptr<NGConstraintSpace> space = CreateConstraintSpaceForFloat( + const NGConstraintSpace space = CreateConstraintSpaceForFloat( float_available_size, float_percentage_size, float_replaced_percentage_size, *unpositioned_float, parent_space); - unpositioned_float->layout_result = unpositioned_float->node.Layout(*space); + unpositioned_float->layout_result = unpositioned_float->node.Layout(space); unpositioned_float->margins = - ComputeMarginsFor(*space, unpositioned_float->node.Style(), parent_space); + ComputeMarginsFor(space, unpositioned_float->node.Style(), parent_space); } } // namespace @@ -254,14 +253,14 @@ layout_result = unpositioned_float->layout_result; fragment_margins = unpositioned_float->margins; } else { - scoped_refptr<NGConstraintSpace> space = CreateConstraintSpaceForFloat( + NGConstraintSpace space = CreateConstraintSpaceForFloat( float_available_size, float_percentage_size, float_replaced_percentage_size, *unpositioned_float, parent_space, origin_bfc_offset.block_offset); - layout_result = unpositioned_float->node.Layout( - *space, unpositioned_float->token.get()); + layout_result = + unpositioned_float->node.Layout(space, unpositioned_float->token.get()); fragment_margins = ComputeMarginsFor( - *space, unpositioned_float->node.Style(), parent_space); + space, unpositioned_float->node.Style(), parent_space); // Make the margins fragmentation aware. if (ShouldIgnoreBlockStartMargin(parent_space, unpositioned_float->node,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_inline_layout_test.cc b/third_party/blink/renderer/core/layout/ng/ng_inline_layout_test.cc index 4f94e8f78..5533923 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_inline_layout_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_inline_layout_test.cc
@@ -20,8 +20,7 @@ class NGInlineLayoutTest : public SimTest { public: - scoped_refptr<NGConstraintSpace> ConstraintSpaceForElement( - LayoutBlockFlow* block_flow) { + NGConstraintSpace ConstraintSpaceForElement(LayoutBlockFlow* block_flow) { return NGConstraintSpaceBuilder( block_flow->Style()->GetWritingMode(), /* icb_size */ {NGSizeIndefinite, NGSizeIndefinite}) @@ -45,12 +44,11 @@ Element* target = GetDocument().getElementById("target"); LayoutBlockFlow* block_flow = ToLayoutBlockFlow(target->GetLayoutObject()); - scoped_refptr<NGConstraintSpace> constraint_space = - ConstraintSpaceForElement(block_flow); + NGConstraintSpace constraint_space = ConstraintSpaceForElement(block_flow); NGBlockNode node(block_flow); scoped_refptr<NGLayoutResult> result = - NGBlockLayoutAlgorithm(node, *constraint_space).Layout(); + NGBlockLayoutAlgorithm(node, constraint_space).Layout(); EXPECT_TRUE(result); String expected_text("Hello World!"); @@ -71,12 +69,11 @@ Element* target = GetDocument().getElementById("target"); LayoutBlockFlow* block_flow = ToLayoutBlockFlow(target->GetLayoutObject()); - scoped_refptr<NGConstraintSpace> constraint_space = - ConstraintSpaceForElement(block_flow); + NGConstraintSpace constraint_space = ConstraintSpaceForElement(block_flow); NGBlockNode node(block_flow); scoped_refptr<NGLayoutResult> result = - NGBlockLayoutAlgorithm(node, *constraint_space).Layout(); + NGBlockLayoutAlgorithm(node, constraint_space).Layout(); EXPECT_TRUE(result); String expected_text("Hello ");
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc index ca787929..56caeab 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
@@ -296,11 +296,11 @@ // ResolveInlineLength. // The constraint space's writing mode has to match the style, so we can't // use the passed-in mode here. - NGConstraintSpaceBuilder builder( - style.GetWritingMode(), - /* icb_size */ {NGSizeIndefinite, NGSizeIndefinite}); - scoped_refptr<NGConstraintSpace> space = - builder.ToConstraintSpace(style.GetWritingMode()); + NGConstraintSpace space = + NGConstraintSpaceBuilder( + style.GetWritingMode(), + /* icb_size */ {NGSizeIndefinite, NGSizeIndefinite}) + .ToConstraintSpace(style.GetWritingMode()); LayoutUnit content_size = min_and_max ? min_and_max->max_size : NGSizeIndefinite; @@ -317,11 +317,11 @@ } else { if (IsParallelWritingMode(writing_mode, style.GetWritingMode())) { computed_sizes.min_size = computed_sizes.max_size = ResolveInlineLength( - *space, style, min_and_max, inline_size, + space, style, min_and_max, inline_size, LengthResolveType::kContentSize, LengthResolvePhase::kIntrinsic); } else { computed_sizes.min_size = computed_sizes.max_size = ResolveBlockLength( - *space, style, inline_size, content_size, + space, style, inline_size, content_size, LengthResolveType::kContentSize, LengthResolvePhase::kIntrinsic); } } @@ -331,11 +331,11 @@ : style.MaxHeight(); LayoutUnit max; if (IsParallelWritingMode(writing_mode, style.GetWritingMode())) { - max = ResolveInlineLength(*space, style, min_and_max, max_length, + max = ResolveInlineLength(space, style, min_and_max, max_length, LengthResolveType::kMaxSize, LengthResolvePhase::kIntrinsic); } else { - max = ResolveBlockLength(*space, style, max_length, content_size, + max = ResolveBlockLength(space, style, max_length, content_size, LengthResolveType::kMaxSize, LengthResolvePhase::kIntrinsic); } @@ -347,11 +347,11 @@ : style.MinHeight(); LayoutUnit min; if (IsParallelWritingMode(writing_mode, style.GetWritingMode())) { - min = ResolveInlineLength(*space, style, min_and_max, min_length, + min = ResolveInlineLength(space, style, min_and_max, min_length, LengthResolveType::kMinSize, LengthResolvePhase::kIntrinsic); } else { - min = ResolveBlockLength(*space, style, min_length, content_size, + min = ResolveBlockLength(space, style, min_length, content_size, LengthResolveType::kMinSize, LengthResolvePhase::kIntrinsic); } @@ -392,23 +392,23 @@ base::Optional<MinMaxSize> minmax; if (NeedMinMaxSizeForContentContribution(writing_mode, node.Style())) { - scoped_refptr<NGConstraintSpace> adjusted_constraint_space; + NGConstraintSpace adjusted_constraint_space; if (constraint_space) { // TODO(layout-ng): Check if our constraint space produces spec-compliant // outputs. // It is important to set a floats bfc block offset so that we don't get a // partial layout. It is also important that we shrink to fit, by // definition. - NGConstraintSpaceBuilder builder(*constraint_space); - builder.SetAvailableSize(constraint_space->AvailableSize()) - .SetPercentageResolutionSize( - constraint_space->PercentageResolutionSize()) - .SetFloatsBfcBlockOffset(LayoutUnit()) - .SetIsNewFormattingContext(node.CreatesNewFormattingContext()) - .SetIsShrinkToFit(true); adjusted_constraint_space = - builder.ToConstraintSpace(node.Style().GetWritingMode()); - constraint_space = adjusted_constraint_space.get(); + NGConstraintSpaceBuilder(*constraint_space) + .SetAvailableSize(constraint_space->AvailableSize()) + .SetPercentageResolutionSize( + constraint_space->PercentageResolutionSize()) + .SetFloatsBfcBlockOffset(LayoutUnit()) + .SetIsNewFormattingContext(node.CreatesNewFormattingContext()) + .SetIsShrinkToFit(true) + .ToConstraintSpace(node.Style().GetWritingMode()); + constraint_space = &adjusted_constraint_space; } minmax = node.ComputeMinMaxSize(writing_mode, input, constraint_space); } @@ -1036,7 +1036,8 @@ // Table cell children don't apply the "percentage-quirk". I.e. if their // percentage resolution block-size is indefinite, they don't pass through // their parent's percentage resolution block-size. - if (space.TableCellChildLayoutPhase() != NGTableCellChildLayoutPhase::kNone) + if (space.TableCellChildLayoutPhase() != + NGTableCellChildLayoutPhase::kNotTableCellChild) return child_percentage_size; return AdjustChildPercentageSizeForQuirksAndFlex(
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc index c0759738..596f1392 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc
@@ -18,7 +18,7 @@ namespace blink { namespace { -static scoped_refptr<NGConstraintSpace> ConstructConstraintSpace( +static NGConstraintSpace ConstructConstraintSpace( int inline_size, int block_size, bool fixed_inline = false, @@ -45,9 +45,8 @@ LengthResolveType type = LengthResolveType::kContentSize, LengthResolvePhase phase = LengthResolvePhase::kLayout, const base::Optional<MinMaxSize>& sizes = base::nullopt) { - scoped_refptr<NGConstraintSpace> constraint_space = - ConstructConstraintSpace(200, 300); - return ::blink::ResolveInlineLength(*constraint_space, *style_, sizes, + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300); + return ::blink::ResolveInlineLength(constraint_space, *style_, sizes, length, type, phase); } @@ -56,17 +55,15 @@ LengthResolveType type = LengthResolveType::kContentSize, LengthResolvePhase phase = LengthResolvePhase::kLayout, LayoutUnit content_size = LayoutUnit()) { - scoped_refptr<NGConstraintSpace> constraint_space = - ConstructConstraintSpace(200, 300); - return ::blink::ResolveBlockLength(*constraint_space, *style_, length, + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300); + return ::blink::ResolveBlockLength(constraint_space, *style_, length, content_size, type, phase); } LayoutUnit ComputeBlockSizeForFragment( - scoped_refptr<const NGConstraintSpace> constraint_space = - ConstructConstraintSpace(200, 300), + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300), LayoutUnit content_size = LayoutUnit()) { - return ::blink::ComputeBlockSizeForFragment(*constraint_space, *style_, + return ::blink::ComputeBlockSizeForFragment(constraint_space, *style_, content_size); } @@ -81,14 +78,13 @@ } LayoutUnit ComputeInlineSizeForFragment( - scoped_refptr<const NGConstraintSpace> constraint_space = - ConstructConstraintSpace(200, 300), + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300), const MinMaxSize& sizes = MinMaxSize()) { LayoutBox* body = ToLayoutBox(GetDocument().body()->GetLayoutObject()); body->SetStyle(style_); body->SetPreferredLogicalWidthsDirty(); NGBlockNode node(body); - return ::blink::ComputeInlineSizeForFragment(*constraint_space, node, + return ::blink::ComputeInlineSizeForFragment(constraint_space, node, base::nullopt, &sizes); } @@ -258,7 +254,7 @@ PixelsAndPercent(100, -10), kValueRangeNonNegative))); EXPECT_EQ(LayoutUnit(80), ComputeInlineSizeForFragment()); - scoped_refptr<NGConstraintSpace> constraint_space = + NGConstraintSpace constraint_space = ConstructConstraintSpace(120, 120, true, true); style_->SetLogicalWidth(Length(150, kFixed)); EXPECT_EQ(LayoutUnit(120), ComputeInlineSizeForFragment(constraint_space)); @@ -318,10 +314,10 @@ style_->SetLogicalHeight(Length(kAuto)); EXPECT_EQ(LayoutUnit(0), ComputeBlockSizeForFragment()); + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300); style_->SetLogicalHeight(Length(kAuto)); EXPECT_EQ(LayoutUnit(120), - ComputeBlockSizeForFragment(ConstructConstraintSpace(200, 300), - LayoutUnit(120))); + ComputeBlockSizeForFragment(constraint_space, LayoutUnit(120))); style_->SetLogicalHeight(Length(kFillAvailable)); EXPECT_EQ(LayoutUnit(300), ComputeBlockSizeForFragment()); @@ -330,8 +326,7 @@ PixelsAndPercent(100, -10), kValueRangeNonNegative))); EXPECT_EQ(LayoutUnit(70), ComputeBlockSizeForFragment()); - scoped_refptr<NGConstraintSpace> constraint_space = - ConstructConstraintSpace(200, 200, true, true); + constraint_space = ConstructConstraintSpace(200, 200, true, true); style_->SetLogicalHeight(Length(150, kFixed)); EXPECT_EQ(LayoutUnit(200), ComputeBlockSizeForFragment(constraint_space)); @@ -388,11 +383,10 @@ style_->SetMarginBottom(Length(kAuto)); style_->SetMarginLeft(Length(11, kPercent)); - scoped_refptr<NGConstraintSpace> constraint_space( - ConstructConstraintSpace(200, 300)); + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300); NGPhysicalBoxStrut margins = - ComputePhysicalMargins(*constraint_space, *style_); + ComputePhysicalMargins(constraint_space, *style_); EXPECT_EQ(LayoutUnit(20), margins.top); EXPECT_EQ(LayoutUnit(52), margins.right); @@ -411,10 +405,9 @@ style_->SetBorderLeftStyle(EBorderStyle::kSolid); style_->SetWritingMode(WritingMode::kVerticalLr); - scoped_refptr<NGConstraintSpace> constraint_space( - ConstructConstraintSpace(200, 300)); + NGConstraintSpace constraint_space = ConstructConstraintSpace(200, 300); - NGBoxStrut borders = ComputeBorders(*constraint_space, *style_); + NGBoxStrut borders = ComputeBorders(constraint_space, *style_); EXPECT_EQ(LayoutUnit(4), borders.block_start); EXPECT_EQ(LayoutUnit(3), borders.inline_end); @@ -429,10 +422,10 @@ style_->SetPaddingLeft(Length(11, kPercent)); style_->SetWritingMode(WritingMode::kVerticalRl); - scoped_refptr<NGConstraintSpace> constraint_space(ConstructConstraintSpace( - 200, 300, false, false, WritingMode::kVerticalRl)); + NGConstraintSpace constraint_space = ConstructConstraintSpace( + 200, 300, false, false, WritingMode::kVerticalRl); - NGBoxStrut padding = ComputePadding(*constraint_space, *style_); + NGBoxStrut padding = ComputePadding(constraint_space, *style_); EXPECT_EQ(LayoutUnit(52), padding.block_start); EXPECT_EQ(LayoutUnit(), padding.inline_end);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc index 62a1d2f..20fd62a 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part.cc
@@ -132,16 +132,16 @@ // must be computed from Legacy algorithm } else { inline_cb_style = &block_info.value.start_fragment->Style(); - scoped_refptr<NGConstraintSpace> dummy_constraint_space = + NGConstraintSpace dummy_constraint_space = NGConstraintSpaceBuilder(inline_cb_style->GetWritingMode(), icb_size_) .ToConstraintSpace(inline_cb_style->GetWritingMode()); // TODO Creating dummy constraint space just to get borders feels wrong. NGBoxStrut inline_cb_borders = - ComputeBorders(*dummy_constraint_space, *inline_cb_style); + ComputeBorders(dummy_constraint_space, *inline_cb_style); NGPhysicalBoxStrut physical_borders = inline_cb_borders.ConvertToPhysical( inline_cb_style->GetWritingMode(), inline_cb_style->Direction()); NGBoxStrut inline_cb_padding = - ComputePadding(*dummy_constraint_space, *inline_cb_style); + ComputePadding(dummy_constraint_space, *inline_cb_style); // Warning: lots of non-obvious coordinate manipulation ahead. // @@ -314,7 +314,7 @@ default_container_physical_offset; // The block estimate is in the descendant's writing mode. - scoped_refptr<NGConstraintSpace> descendant_constraint_space = + NGConstraintSpace descendant_constraint_space = NGConstraintSpaceBuilder(container_writing_mode, icb_size_) .SetTextDirection(container_info.style->Direction()) .SetAvailableSize(container_info.content_size) @@ -333,23 +333,23 @@ // doesn't concern us. MinMaxSizeInput zero_input; min_max_size = node.ComputeMinMaxSize(descendant_writing_mode, zero_input, - descendant_constraint_space.get()); + &descendant_constraint_space); } base::Optional<NGLogicalSize> replaced_size; if (descendant.node.IsReplaced()) { replaced_size = ComputeReplacedSize( - descendant.node, *descendant_constraint_space, min_max_size); + descendant.node, descendant_constraint_space, min_max_size); } else if (descendant.node.ShouldBeConsideredAsReplaced()) { replaced_size = NGLogicalSize{ min_max_size->ShrinkToFit( - descendant_constraint_space->AvailableSize().inline_size), + descendant_constraint_space.AvailableSize().inline_size), NGSizeIndefinite}; } NGAbsolutePhysicalPosition node_position = ComputePartialAbsoluteWithChildInlineSize( - *descendant_constraint_space, descendant.node.Style(), - static_position, min_max_size, replaced_size, container_writing_mode, + descendant_constraint_space, descendant.node.Style(), static_position, + min_max_size, replaced_size, container_writing_mode, container_info.style->Direction()); // ShouldBeConsideredAsReplaced sets inline size. @@ -370,7 +370,7 @@ } ComputeFullAbsoluteWithChildBlockSize( - *descendant_constraint_space, descendant.node.Style(), static_position, + descendant_constraint_space, descendant.node.Style(), static_position, block_estimate, replaced_size, container_writing_mode, container_info.style->Direction(), &node_position); @@ -459,10 +459,9 @@ .SetIsFixedSizeInline(true); if (block_estimate) builder.SetIsFixedSizeBlock(true); - scoped_refptr<NGConstraintSpace> space = - builder.ToConstraintSpace(writing_mode); + NGConstraintSpace space = builder.ToConstraintSpace(writing_mode); - scoped_refptr<NGLayoutResult> result = descendant.Layout(*space); + scoped_refptr<NGLayoutResult> result = descendant.Layout(space); // Legacy Grid and Flexbox seem to handle oof margins correctly // on their own, and break if we set them here.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part_test.cc b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part_test.cc index 6709b00..f923cdc 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_out_of_flow_layout_part_test.cc
@@ -58,8 +58,6 @@ // Test whether the oof fragments have been collected at NG->Legacy boundary. Element* rel = GetDocument().getElementById("rel"); LayoutBlockFlow* block_flow = ToLayoutBlockFlow(rel->GetLayoutObject()); - scoped_refptr<NGConstraintSpace> space = - NGConstraintSpace::CreateFromLayoutObject(*block_flow); scoped_refptr<const NGLayoutResult> result = block_flow->CachedLayoutResultForTesting(); EXPECT_TRUE(result);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc index 485de1bc..9c9662a 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.cc
@@ -32,8 +32,7 @@ CalculateContentBoxSize(border_box_size, border_scrollbar_padding); NGLogicalSize page_size = content_box_size; - scoped_refptr<NGConstraintSpace> child_space = - CreateConstraintSpaceForPages(page_size); + NGConstraintSpace child_space = CreateConstraintSpaceForPages(page_size); container_builder_.SetInlineSize(border_box_size.inline_size); WritingMode writing_mode = ConstraintSpace().GetWritingMode(); @@ -50,7 +49,7 @@ do { // Lay out one page. Each page will become a fragment. - NGBlockLayoutAlgorithm child_algorithm(Node(), *child_space.get(), + NGBlockLayoutAlgorithm child_algorithm(Node(), child_space, break_token.get()); scoped_refptr<NGLayoutResult> result = child_algorithm.Layout(); scoped_refptr<const NGPhysicalBoxFragment> page( @@ -92,8 +91,7 @@ return algorithm.ComputeMinMaxSize(input); } -scoped_refptr<NGConstraintSpace> -NGPageLayoutAlgorithm::CreateConstraintSpaceForPages( +NGConstraintSpace NGPageLayoutAlgorithm::CreateConstraintSpaceForPages( const NGLogicalSize& page_size) const { NGConstraintSpaceBuilder space_builder(ConstraintSpace()); space_builder.SetAvailableSize(page_size);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h index 86f0d67b0..ac5c2ae7 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h +++ b/third_party/blink/renderer/core/layout/ng/ng_page_layout_algorithm.h
@@ -32,7 +32,7 @@ const MinMaxSizeInput&) const override; private: - scoped_refptr<NGConstraintSpace> CreateConstraintSpaceForPages( + NGConstraintSpace CreateConstraintSpaceForPages( const NGLogicalSize& size) const; };
diff --git a/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc index 9733399..f43794d 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_space_utils.cc
@@ -33,7 +33,7 @@ return false; } -scoped_refptr<NGConstraintSpace> CreateExtrinsicConstraintSpaceForChild( +NGConstraintSpace CreateExtrinsicConstraintSpaceForChild( const NGConstraintSpace& container_constraint_space, LayoutUnit container_extrinsic_block_size, NGLayoutInputNode child) {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_space_utils.h b/third_party/blink/renderer/core/layout/ng/ng_space_utils.h index a14d857..6641915 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_space_utils.h +++ b/third_party/blink/renderer/core/layout/ng/ng_space_utils.h
@@ -40,7 +40,7 @@ // determined, we will resort to using a fallback later on, such as the initial // containing block size. Spec: // https://www.w3.org/TR/css-writing-modes-3/#orthogonal-auto -scoped_refptr<NGConstraintSpace> CreateExtrinsicConstraintSpaceForChild( +NGConstraintSpace CreateExtrinsicConstraintSpaceForChild( const NGConstraintSpace& container_constraint_space, LayoutUnit container_extrinsic_block_size, NGLayoutInputNode child);
diff --git a/third_party/blink/renderer/core/paint/box_border_painter.cc b/third_party/blink/renderer/core/paint/box_border_painter.cc index 1e0eb06..389a970 100644 --- a/third_party/blink/renderer/core/paint/box_border_painter.cc +++ b/third_party/blink/renderer/core/paint/box_border_painter.cc
@@ -771,7 +771,7 @@ float effective_opacity) const { DCHECK(effective_opacity > 0 && effective_opacity <= 1); - const size_t opacity_group_count = border_info.opacity_groups.size(); + const wtf_size_t opacity_group_count = border_info.opacity_groups.size(); // For overdraw logic purposes, treat missing/transparent edges as completed. if (index >= opacity_group_count)
diff --git a/third_party/blink/renderer/core/paint/box_painter_base.cc b/third_party/blink/renderer/core/paint/box_painter_base.cc index 9c54488..71efbe5 100644 --- a/third_party/blink/renderer/core/paint/box_painter_base.cc +++ b/third_party/blink/renderer/core/paint/box_painter_base.cc
@@ -70,7 +70,7 @@ GraphicsContextStateSaver state_saver(context, false); const ShadowList* shadow_list = style.BoxShadow(); - for (size_t i = shadow_list->Shadows().size(); i--;) { + for (wtf_size_t i = shadow_list->Shadows().size(); i--;) { const ShadowData& shadow = shadow_list->Shadows()[i]; if (shadow.Style() != kNormal) continue; @@ -194,7 +194,7 @@ GraphicsContextStateSaver state_saver(context, false); const ShadowList* shadow_list = style.BoxShadow(); - for (size_t i = shadow_list->Shadows().size(); i--;) { + for (wtf_size_t i = shadow_list->Shadows().size(); i--;) { const ShadowData& shadow = shadow_list->Shadows()[i]; if (shadow.Style() != kInset) continue;
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index 66cf132..6804688e 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -227,7 +227,7 @@ // Do not leave the destroyed pointer dangling on any Layers that painted to // this mapping's squashing layer. - for (size_t i = 0; i < squashed_layers_.size(); ++i) { + for (wtf_size_t i = 0; i < squashed_layers_.size(); ++i) { PaintLayer* old_squashed_layer = squashed_layers_[i].paint_layer; // Assert on incorrect mappings between layers and groups DCHECK_EQ(old_squashed_layer->GroupedMapping(), this); @@ -1067,7 +1067,7 @@ } LayoutRect total_squash_bounds; - for (size_t i = 0; i < layers.size(); ++i) { + for (wtf_size_t i = 0; i < layers.size(); ++i) { LayoutRect squashed_bounds = layers[i].paint_layer->BoundingBoxForCompositing(); @@ -1112,7 +1112,7 @@ // subtracting squashLayerOriginInCompositingContainerSpace, but then the // offset overall needs to be negated because that's the direction that the // painting code expects the offset to be. - for (size_t i = 0; i < layers.size(); ++i) { + for (wtf_size_t i = 0; i < layers.size(); ++i) { const LayoutPoint squashed_layer_offset_from_transformed_ancestor = layers[i].paint_layer->ComputeOffsetFromAncestor( *common_transform_ancestor); @@ -1163,7 +1163,7 @@ offset_from_transformed_ancestor->Move( squash_layer_origin_in_compositing_container_space); - for (size_t i = 0; i < layers.size(); ++i) { + for (wtf_size_t i = 0; i < layers.size(); ++i) { LocalClipRectForSquashedLayer(owning_layer_, layers, layers[i]); } } @@ -3078,7 +3078,8 @@ unsigned max_squashed_layer_index) { if (!layout_object) return nullptr; - for (size_t i = 0; i < layers.size() && i < max_squashed_layer_index; ++i) { + for (wtf_size_t i = 0; i < layers.size() && i < max_squashed_layer_index; + ++i) { if (layout_object->IsDescendantOf( &layers[i].paint_layer->GetLayoutObject())) return &layers[i]; @@ -3490,7 +3491,7 @@ DoPaintTask(paint_info, *graphics_layer, paint_layer_flags, context, interest_rect); } else if (graphics_layer == squashing_layer_.get()) { - for (size_t i = 0; i < squashed_layers_.size(); ++i) { + for (wtf_size_t i = 0; i < squashed_layers_.size(); ++i) { DoPaintTask(squashed_layers_[i], *graphics_layer, paint_layer_flags, context, interest_rect); } @@ -3585,9 +3586,9 @@ } bool CompositedLayerMapping::InvalidateLayerIfNoPrecedingEntry( - size_t index_to_clear) { + wtf_size_t index_to_clear) { PaintLayer* layer_to_remove = squashed_layers_[index_to_clear].paint_layer; - size_t previous_index = 0; + wtf_size_t previous_index = 0; for (; previous_index < index_to_clear; ++previous_index) { if (squashed_layers_[previous_index].paint_layer == layer_to_remove) break; @@ -3602,7 +3603,7 @@ bool CompositedLayerMapping::UpdateSquashingLayerAssignment( PaintLayer* squashed_layer, - size_t next_squashed_layer_index) { + wtf_size_t next_squashed_layer_index) { GraphicsLayerPaintInfo paint_info; paint_info.paint_layer = squashed_layer; // NOTE: composited bounds are updated elsewhere @@ -3638,7 +3639,7 @@ void CompositedLayerMapping::RemoveLayerFromSquashingGraphicsLayer( const PaintLayer* layer) { - size_t layer_index = 0; + wtf_size_t layer_index = 0; for (; layer_index < squashed_layers_.size(); ++layer_index) { if (squashed_layers_[layer_index].paint_layer == layer) break; @@ -3655,7 +3656,7 @@ #if DCHECK_IS_ON() bool CompositedLayerMapping::VerifyLayerInSquashingVector( const PaintLayer* layer) { - for (size_t layer_index = 0; layer_index < squashed_layers_.size(); + for (wtf_size_t layer_index = 0; layer_index < squashed_layers_.size(); ++layer_index) { if (squashed_layers_[layer_index].paint_layer == layer) return true; @@ -3666,14 +3667,14 @@ #endif void CompositedLayerMapping::FinishAccumulatingSquashingLayers( - size_t next_squashed_layer_index, + wtf_size_t next_squashed_layer_index, Vector<PaintLayer*>& layers_needing_paint_invalidation) { if (next_squashed_layer_index < squashed_layers_.size()) { // Any additional squashed Layers in the array no longer belong here, but // they might have been added already at an earlier index. Clear pointers on // those that do not appear in the valid set before removing all the extra // entries. - for (size_t i = next_squashed_layer_index; i < squashed_layers_.size(); + for (wtf_size_t i = next_squashed_layer_index; i < squashed_layers_.size(); ++i) { if (InvalidateLayerIfNoPrecedingEntry(i)) { squashed_layers_[i].paint_layer->SetGroupedMapping(
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h index dba8086..fd64edc 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.h
@@ -188,14 +188,14 @@ // Returns true if the assignment actually changed the assigned squashing // layer. bool UpdateSquashingLayerAssignment(PaintLayer* squashed_layer, - size_t next_squashed_layer_index); + wtf_size_t next_squashed_layer_index); void RemoveLayerFromSquashingGraphicsLayer(const PaintLayer*); #if DCHECK_IS_ON() bool VerifyLayerInSquashingVector(const PaintLayer*); #endif void FinishAccumulatingSquashingLayers( - size_t next_squashed_layer_index, + wtf_size_t next_squashed_layer_index, Vector<PaintLayer*>& layers_needing_paint_invalidation); void UpdateRenderingContext(); void UpdateShouldFlattenTransform(); @@ -512,7 +512,7 @@ // Clear the groupedMapping entry on the layer at the given index, only if // that layer does not appear earlier in the set of layers for this object. - bool InvalidateLayerIfNoPrecedingEntry(size_t); + bool InvalidateLayerIfNoPrecedingEntry(wtf_size_t); // Main GraphicsLayer of the CLM for the iframe's content document. GraphicsLayer* FrameContentsGraphicsLayer() const;
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.h b/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.h index b61459d..3f68d8c 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.h +++ b/third_party/blink/renderer/core/paint/compositing/compositing_layer_assigner.h
@@ -81,7 +81,7 @@ // Counter that tracks what index the next Layer would be if it gets // squashed to the current squashing layer. - size_t next_squashed_layer_index; + wtf_size_t next_squashed_layer_index; // The absolute bounding rect of all the squashed layers. IntRect bounding_rect;
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc b/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc index 05e8195..d11dde3 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc
@@ -337,8 +337,8 @@ : CompositingReason::kNone; if (has_non_root_composited_scrolling_ancestor) { - Vector<size_t> unclipped_descendants_to_remove; - for (size_t i = 0; i < unclipped_descendants.size(); i++) { + Vector<wtf_size_t> unclipped_descendants_to_remove; + for (wtf_size_t i = 0; i < unclipped_descendants.size(); i++) { PaintLayer* unclipped_descendant = unclipped_descendants.at(i); // If we've reached the containing block of one of the unclipped // descendants, that element is no longer relevant to whether or not we @@ -356,7 +356,7 @@ // Remove irrelevant unclipped descendants in reverse order so our stored // indices remain valid. - for (size_t i = 0; i < unclipped_descendants_to_remove.size(); i++) { + for (wtf_size_t i = 0; i < unclipped_descendants_to_remove.size(); i++) { unclipped_descendants.EraseAt(unclipped_descendants_to_remove.at( unclipped_descendants_to_remove.size() - i - 1)); }
diff --git a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc index 2005793..1f3d367 100644 --- a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc +++ b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc
@@ -330,7 +330,7 @@ if (layer->Children().size()) { std::unique_ptr<JSONArray> children_json = JSONArray::Create(); - for (size_t i = 0; i < layer->Children().size(); i++) { + for (wtf_size_t i = 0; i < layer->Children().size(); i++) { children_json->PushObject(GraphicsLayerTreeAsJSON( layer->Children()[i], flags, rendering_context_map)); }
diff --git a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc index bd00dbd..f4a7e0f 100644 --- a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_builder.cc
@@ -55,7 +55,7 @@ RebuildRecursive(layer, child_layers, ignored); } -using PendingPair = std::pair<const PaintLayer*, size_t>; +using PendingPair = std::pair<const PaintLayer*, wtf_size_t>; void GraphicsLayerTreeBuilder::RebuildRecursive( PaintLayer& layer, @@ -128,7 +128,7 @@ // them by index. Then insert them one-by-one into the array, // incrementing |offset| by one each time to account for previous // insertions. - size_t offset = 0; + wtf_size_t offset = 0; Vector<PendingPair> pending; for (auto& item : *pending_reparents_for_children) pending.push_back(std::make_pair(item.key, item.value));
diff --git a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc index 9dd5523..9b5cc2e 100644 --- a/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc +++ b/third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.cc
@@ -840,7 +840,7 @@ graphics_layer->UpdateTrackingRasterInvalidations(); - for (size_t i = 0; i < graphics_layer->Children().size(); ++i) + for (wtf_size_t i = 0; i < graphics_layer->Children().size(); ++i) UpdateTrackingRasterInvalidationsRecursive(graphics_layer->Children()[i]); if (GraphicsLayer* mask_layer = graphics_layer->MaskLayer())
diff --git a/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc b/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc index 14797920..0eaab63 100644 --- a/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc +++ b/third_party/blink/renderer/core/paint/first_meaningful_paint_detector.cc
@@ -67,7 +67,7 @@ // If the page has many blank characters, the significance value is // accumulated until the text become visible. - int approximate_blank_character_count = + size_t approximate_blank_character_count = FontFaceSetDocument::ApproximateBlankCharacterCount(*GetDocument()); if (approximate_blank_character_count > kBlankCharactersThreshold) { accumulated_significance_while_having_blank_text_ += significance;
diff --git a/third_party/blink/renderer/core/paint/fragment_data.cc b/third_party/blink/renderer/core/paint/fragment_data.cc index 9cf6f03e..d349f3d 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.cc +++ b/third_party/blink/renderer/core/paint/fragment_data.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/paint/fragment_data.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" +#include "third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h" #include "base/debug/stack_trace.h" @@ -54,6 +55,8 @@ const TransformPaintPropertyNode* FragmentData::PostScrollTranslation() const { if (const auto* properties = PaintProperties()) { + if (properties->TransformIsolationNode()) + return properties->TransformIsolationNode(); if (properties->ScrollTranslation()) return properties->ScrollTranslation(); if (properties->ReplacedContentTransform()) @@ -83,6 +86,8 @@ const ClipPaintPropertyNode* FragmentData::PostOverflowClip() const { if (const auto* properties = PaintProperties()) { + if (properties->ClipIsolationNode()) + return properties->ClipIsolationNode(); if (properties->OverflowClip()) return properties->OverflowClip(); if (properties->InnerBorderRadiusClip()) @@ -109,6 +114,14 @@ return LocalBorderBoxProperties().Effect(); } +const EffectPaintPropertyNode* FragmentData::PostIsolationEffect() const { + if (const auto* properties = PaintProperties()) { + if (properties->EffectIsolationNode()) + return properties->EffectIsolationNode(); + } + return LocalBorderBoxProperties().Effect(); +} + void FragmentData::InvalidateClipPathCache() { if (!rare_data_) return; @@ -125,4 +138,36 @@ rare_data_->clip_path_path = std::move(path); } +template <typename Rect, typename PaintOffsetFunction> +static void MapRectBetweenFragment( + const FragmentData& from_fragment, + const FragmentData& to_fragment, + const PaintOffsetFunction& paint_offset_function, + Rect& rect) { + if (&from_fragment == &to_fragment) + return; + const auto* from_transform = + from_fragment.LocalBorderBoxProperties().Transform(); + const auto* to_transform = to_fragment.LocalBorderBoxProperties().Transform(); + rect.MoveBy(paint_offset_function(from_fragment.PaintOffset())); + GeometryMapper::SourceToDestinationRect(from_transform, to_transform, rect); + rect.MoveBy(-paint_offset_function(to_fragment.PaintOffset())); +} + +void FragmentData::MapRectToFragment(const FragmentData& fragment, + IntRect& rect) const { + MapRectBetweenFragment(*this, fragment, + [](const LayoutPoint& paint_offset) { + return RoundedIntPoint(paint_offset); + }, + rect); +} + +void FragmentData::MapRectToFragment(const FragmentData& fragment, + LayoutRect& rect) const { + MapRectBetweenFragment( + *this, fragment, + [](const LayoutPoint& paint_offset) { return paint_offset; }, rect); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h index 3655ad41..3cbdc22 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.h +++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -188,7 +188,7 @@ // overflow clip, scroll translation) that apply to contents. PropertyTreeState ContentsProperties() const { return PropertyTreeState(PostScrollTranslation(), PostOverflowClip(), - LocalBorderBoxProperties().Effect()); + PostIsolationEffect()); } // This is the complete set of property nodes that can be used to @@ -209,6 +209,12 @@ const ClipPaintPropertyNode* PostOverflowClip() const; const EffectPaintPropertyNode* PreEffect() const; const EffectPaintPropertyNode* PreFilter() const; + const EffectPaintPropertyNode* PostIsolationEffect() const; + + // Map a rect from |this|'s local border box space to |fragment|'s local + // border box space. Both fragments must have local border box properties. + void MapRectToFragment(const FragmentData& fragment, IntRect&) const; + void MapRectToFragment(const FragmentData& fragment, LayoutRect&) const; ~FragmentData() { if (next_fragment_)
diff --git a/third_party/blink/renderer/core/paint/frame_set_painter.cc b/third_party/blink/renderer/core/paint/frame_set_painter.cc index 487e0be..683c170 100644 --- a/third_party/blink/renderer/core/paint/frame_set_painter.cc +++ b/third_party/blink/renderer/core/paint/frame_set_painter.cc
@@ -76,7 +76,7 @@ } static bool ShouldPaintBorderAfter(const LayoutFrameSet::GridAxis& axis, - size_t index) { + wtf_size_t index) { // Should not paint a border after the last frame along the axis. return index + 1 < axis.sizes_.size() && axis.allow_border_[index + 1]; } @@ -95,12 +95,12 @@ return; LayoutObject* child = layout_frame_set_.FirstChild(); - size_t rows = layout_frame_set_.Rows().sizes_.size(); - size_t cols = layout_frame_set_.Columns().sizes_.size(); + wtf_size_t rows = layout_frame_set_.Rows().sizes_.size(); + wtf_size_t cols = layout_frame_set_.Columns().sizes_.size(); LayoutUnit y_pos; - for (size_t r = 0; r < rows; r++) { + for (wtf_size_t r = 0; r < rows; r++) { LayoutUnit x_pos; - for (size_t c = 0; c < cols; c++) { + for (wtf_size_t c = 0; c < cols; c++) { x_pos += layout_frame_set_.Columns().sizes_[c]; if (ShouldPaintBorderAfter(layout_frame_set_.Columns(), c)) { PaintColumnBorder(
diff --git a/third_party/blink/renderer/core/paint/grid_painter.cc b/third_party/blink/renderer/core/paint/grid_painter.cc index dbb5fe0..0466fb89 100644 --- a/third_party/blink/renderer/core/paint/grid_painter.cc +++ b/third_party/blink/renderer/core/paint/grid_painter.cc
@@ -18,16 +18,16 @@ // This doesn't work with grid items overflowing their grid areas, but that is // managed with m_gridItemsOverflowingGridArea. - size_t start_grid_area_index = + wtf_size_t start_grid_area_index = static_cast<wtf_size_t>( std::upper_bound(coordinates.begin(), coordinates.end() - 1, start) - - coordinates.begin(); + coordinates.begin()); if (start_grid_area_index > 0) --start_grid_area_index; - size_t end_grid_area_index = + wtf_size_t end_grid_area_index = static_cast<wtf_size_t>( std::upper_bound(coordinates.begin() + start_grid_area_index, coordinates.end() - 1, end) - - coordinates.begin(); + coordinates.begin()); if (end_grid_area_index > 0) --end_grid_area_index; @@ -55,7 +55,7 @@ if (!layout_grid_.StyleRef().IsLeftToRightDirection()) { // Translate columnPositions in RTL as we need the physical coordinates of // the columns in order to call dirtiedGridAreas(). - for (size_t i = 0; i < column_positions.size(); i++) + for (wtf_size_t i = 0; i < column_positions.size(); i++) column_positions[i] = layout_grid_.TranslateRTLCoordinate(column_positions[i]); // We change the order of tracks in columnPositions, as in RTL the leftmost @@ -72,13 +72,13 @@ if (!layout_grid_.StyleRef().IsLeftToRightDirection()) { // As we changed the order of tracks previously, we need to swap the dirtied // columns in RTL. - size_t last_line = column_positions.size() - 1; + wtf_size_t last_line = column_positions.size() - 1; dirtied_columns = GridSpan::TranslatedDefiniteGridSpan( last_line - dirtied_columns.EndLine(), last_line - dirtied_columns.StartLine()); } - Vector<std::pair<LayoutBox*, size_t>> grid_items_to_be_painted; + Vector<std::pair<LayoutBox*, wtf_size_t>> grid_items_to_be_painted; // TODO(svillar): This way of retrieving cells is extremelly // inefficient for the list-based grid implementation. We must
diff --git a/third_party/blink/renderer/core/paint/link_highlight_impl.cc b/third_party/blink/renderer/core/paint/link_highlight_impl.cc index 6a2ea27..a2bcd67 100644 --- a/third_party/blink/renderer/core/paint/link_highlight_impl.cc +++ b/third_party/blink/renderer/core/paint/link_highlight_impl.cc
@@ -188,7 +188,7 @@ DCHECK(quads.size()); Path new_path; - for (size_t quad_index = 0; quad_index < quads.size(); ++quad_index) { + for (wtf_size_t quad_index = 0; quad_index < quads.size(); ++quad_index) { FloatQuad absolute_quad = quads[quad_index]; // Scrolling content layers have the same offset from layout object as the
diff --git a/third_party/blink/renderer/core/paint/ng/ng_paint_fragment_traversal.cc b/third_party/blink/renderer/core/paint/ng/ng_paint_fragment_traversal.cc index 77732a7..1aa3e390 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_paint_fragment_traversal.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_paint_fragment_traversal.cc
@@ -150,7 +150,7 @@ children.begin(), children.end(), [&fragment](const auto& child) { return &fragment == child.get(); }); DCHECK(it != children.end()); - return std::distance(children.begin(), it); + return static_cast<unsigned>(std::distance(children.begin(), it)); } } // namespace
diff --git a/third_party/blink/renderer/core/paint/object_paint_properties.h b/third_party/blink/renderer/core/paint/object_paint_properties.h index e9415c7..efd20c9 100644 --- a/third_party/blink/renderer/core/paint/object_paint_properties.h +++ b/third_party/blink/renderer/core/paint/object_paint_properties.h
@@ -70,8 +70,11 @@ #define ADD_NODE(type, function, variable) \ const type##PaintPropertyNode* function() const { return variable.get(); } \ UpdateResult Update##function(const type##PaintPropertyNode& parent, \ - type##PaintPropertyNode::State&& state) { \ - auto result = Update(variable, parent, std::move(state)); \ + type##PaintPropertyNode::State&& state, \ + bool is_parent_alias = false) { \ + auto result = is_parent_alias \ + ? UpdateAlias(variable, parent) \ + : Update(variable, parent, std::move(state)); \ DCHECK(!is_immutable_ || result.Unchanged()) \ << "Value changed while immutable. New state:\n" \ << *variable; \ @@ -120,6 +123,13 @@ // To use any content offset based on ScrollOrigin() (e.g. LayoutBox // or InlineBox's PhysicalLocation()) in this space, we should add // ScrollOrigin() to the offset. + // + // ... +-[ TransformIsolationNode ] This serves as a parent to subtree + // transforms on an element with paint + // containment. It induces a + // paintOffsetTranslationNode and is the + // deepest child of any transform tree on + // the contain: paint element. ADD_TRANSFORM(PaintOffsetTranslation, paint_offset_translation_); ADD_TRANSFORM(StickyTranslation, sticky_translation_); ADD_TRANSFORM(Transform, transform_); @@ -127,6 +137,7 @@ ADD_TRANSFORM(ReplacedContentTransform, replaced_content_transform_); ADD_TRANSFORM(ScrollTranslation, scroll_translation_); ADD_NODE(Scroll, Scroll, scroll_); + ADD_TRANSFORM(TransformIsolationNode, transform_isolation_node_); // The hierarchy of the effect subtree created by a LayoutObject is as // follows: @@ -149,6 +160,11 @@ // +-[ link highlight effect ] // The link highlight effect is only used for link highlight animations // and should never have descendants. + // + // ... +-[ effectIsolationNode ] + // This serves as a parent to subtree effects on an element with paint + // containment, It is the deepest child of any effect tree on the + // contain: paint element. ADD_EFFECT(Effect, effect_); ADD_EFFECT(Filter, filter_); ADD_EFFECT(VerticalScrollbarEffect, vertical_scrollbar_effect_); @@ -156,6 +172,7 @@ ADD_EFFECT(Mask, mask_); ADD_EFFECT(ClipPath, clip_path_); ADD_EFFECT(LinkHighlightEffect, link_highlight_effect_); + ADD_EFFECT(EffectIsolationNode, effect_isolation_node_); // The hierarchy of the clip subtree created by a LayoutObject is as follows: // [ fragment clip ] @@ -190,6 +207,11 @@ // [ css clip fixed position ] // Clip created by CSS clip. Only exists if the current clip includes // some clip that doesn't apply to our fixed position descendants. + // + // ... +-[ clipIsolationNode ] + // This serves as a parent to subtree clips on an element with paint + // containment. It is the deepest child of any clip tree on the contain: + // paint element. ADD_CLIP(FragmentClip, fragment_clip_); ADD_CLIP(ClipPathClip, clip_path_clip_); ADD_CLIP(MaskClip, mask_clip_); @@ -198,6 +220,7 @@ ADD_CLIP(OverflowControlsClip, overflow_controls_clip_); ADD_CLIP(InnerBorderRadiusClip, inner_border_radius_clip_); ADD_CLIP(OverflowClip, overflow_clip_); + ADD_CLIP(ClipIsolationNode, clip_isolation_node_); #if DCHECK_IS_ON() // Used by FindPropertiesNeedingUpdate.h for verifying state doesn't change. @@ -244,6 +267,17 @@ field = PaintPropertyNode::Create(parent, std::move(state)); return UpdateResult::kNewNodeCreated; } + template <typename PaintPropertyNode> + UpdateResult UpdateAlias(scoped_refptr<PaintPropertyNode>& field, + const PaintPropertyNode& parent) { + if (field) { + DCHECK(field->IsParentAlias()); + return field->SetParent(&parent) ? UpdateResult::kValueChanged + : UpdateResult::kUnchanged; + } + field = PaintPropertyNode::CreateAlias(parent); + return UpdateResult::kNewNodeCreated; + } // This is used in DCHECKs only, but is not guarded by DCHECK_IS_ON() because // we can't have a similar guard in a macro definition.
diff --git a/third_party/blink/renderer/core/paint/object_painter_base.cc b/third_party/blink/renderer/core/paint/object_painter_base.cc index afd59ff..929c97bc 100644 --- a/third_party/blink/renderer/core/paint/object_painter_base.cc +++ b/third_party/blink/renderer/core/paint/object_painter_base.cc
@@ -111,7 +111,7 @@ SkPath::Iter iter(path, false); SkPoint points[4]; - size_t count = 0; + wtf_size_t count = 0; for (SkPath::Verb verb = iter.next(points, false); verb != SkPath::kDone_Verb; verb = iter.next(points, false)) { if (verb != SkPath::kLine_Verb) @@ -163,7 +163,7 @@ // edge. int adjacent_width_start = first_adjacent_width; int adjacent_width_end; - for (size_t i = 0; i < count; ++i) { + for (wtf_size_t i = 0; i < count; ++i) { OutlineEdgeInfo& edge = edges[i]; adjacent_width_end = i == count - 1 ? first_adjacent_width
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.h b/third_party/blink/renderer/core/paint/paint_invalidator.h index d6e96c5..1f5c36b 100644 --- a/third_party/blink/renderer/core/paint/paint_invalidator.h +++ b/third_party/blink/renderer/core/paint/paint_invalidator.h
@@ -24,13 +24,13 @@ public: ParentContextAccessor() = default; ParentContextAccessor(PrePaintTreeWalk* tree_walk, - size_t parent_context_index) + wtf_size_t parent_context_index) : tree_walk_(tree_walk), parent_context_index_(parent_context_index) {} const PaintInvalidatorContext* ParentContext() const; private: PrePaintTreeWalk* tree_walk_ = nullptr; - size_t parent_context_index_ = 0u; + wtf_size_t parent_context_index_ = 0u; }; PaintInvalidatorContext() = default;
diff --git a/third_party/blink/renderer/core/paint/paint_layer.cc b/third_party/blink/renderer/core/paint/paint_layer.cc index 2072f0b..3087098 100644 --- a/third_party/blink/renderer/core/paint/paint_layer.cc +++ b/third_party/blink/renderer/core/paint/paint_layer.cc
@@ -1685,6 +1685,7 @@ dirty_rect, fragment.layer_bounds, fragment.background_rect, fragment.foreground_rect, offset_from_root); + fragment.root_fragment_data = &root_layer->GetLayoutObject().FirstFragment(); fragment.fragment_data = &GetLayoutObject().FirstFragment(); fragments.push_back(fragment); } @@ -1716,51 +1717,71 @@ const LayoutPoint* offset_from_root, const LayoutSize& sub_pixel_accumulation) const { PaintLayerFragment fragment; + const auto& first_fragment_data = GetLayoutObject().FirstFragment(); + const auto& first_root_fragment_data = + root_layer->GetLayoutObject().FirstFragment(); - // If |root_layer| is inside the same pagination container as |this|, and - // there is no compositing boundary inside pagination (this is what - // ShouldFragmentCompositedBounds() checks), then try to match - // fragments from |root_layer| to |this|, so that any - // fragment clip for |root_layer|'s fragment matches |this|'s. - bool should_match_fragments = root_layer->EnclosingPaginationLayer() && - root_layer->EnclosingPaginationLayer() == EnclosingPaginationLayer() && - ShouldFragmentCompositedBounds(); + // If both |this| and |root_layer| are fragmented and are inside the same + // pagination container, then try to match fragments from |root_layer| to + // |this|, so that any fragment clip for |root_layer|'s fragment matches + // |this|'s. Note we check both ShouldFragmentCompositedBounds() and next + // fragment here because the former may return false even if |this| is + // fragmented, e.g. for fixed-position objects in paged media, and the next + // fragment can be null even if the first fragment is actually in a fragmented + // context when the current layer appears in only one of the multiple + // fragments of the pagination container. + bool is_fragmented = + ShouldFragmentCompositedBounds() || first_fragment_data.NextFragment(); + bool should_match_fragments = + is_fragmented && + root_layer->EnclosingPaginationLayer() == EnclosingPaginationLayer(); // The inherited offset_from_root does not include any pagination offsets. - // In the presence of fragmentation, we cannot use it. Note that we may also - // create fragments when ShouldFragmentCompositedBounds() is false, e.g. for - // fixed-position objects in paged media. - bool offset_from_root_can_be_used = - offset_from_root && !ShouldFragmentCompositedBounds(root_layer) && - !GetLayoutObject().FirstFragment().NextFragment(); - for (auto* fragment_data = &GetLayoutObject().FirstFragment(); fragment_data; + // In the presence of fragmentation, we cannot use it. + bool offset_from_root_can_be_used = offset_from_root && !is_fragmented; + for (auto* fragment_data = &first_fragment_data; fragment_data; fragment_data = fragment_data->NextFragment()) { - const FragmentData* root_fragment = - &root_layer->GetLayoutObject().FirstFragment(); - if (should_match_fragments) { - for (root_fragment = &root_layer->GetLayoutObject().FirstFragment(); - root_fragment; root_fragment = root_fragment->NextFragment()) { - if (root_fragment->LogicalTopInFlowThread() == + const FragmentData* root_fragment_data; + if (root_layer == this) { + root_fragment_data = fragment_data; + } else if (should_match_fragments) { + for (root_fragment_data = &first_root_fragment_data; root_fragment_data; + root_fragment_data = root_fragment_data->NextFragment()) { + if (root_fragment_data->LogicalTopInFlowThread() == fragment_data->LogicalTopInFlowThread()) break; } + } else { + root_fragment_data = &first_root_fragment_data; } - bool cant_find_fragment = !root_fragment; + bool cant_find_fragment = !root_fragment_data; if (cant_find_fragment) { + DCHECK(should_match_fragments); // Fall back to the first fragment, in order to have // PaintLayerClipper at least compute |fragment.layer_bounds|. - root_fragment = &root_layer->GetLayoutObject().FirstFragment(); + root_fragment_data = &first_root_fragment_data; } ClipRectsContext clip_rects_context( - root_layer, root_fragment, kUncachedClipRects, + root_layer, root_fragment_data, kUncachedClipRects, overlay_scrollbar_clip_behavior, respect_overflow_clip, sub_pixel_accumulation); + base::Optional<LayoutRect> fragment_dirty_rect; + if (dirty_rect) { + // |dirty_rect| is in the coordinate space of |root_layer| (i.e. the + // space of |root_layer|'s first fragment). Map the rect to the space of + // the current root fragment. + fragment_dirty_rect = *dirty_rect; + first_root_fragment_data.MapRectToFragment(*root_fragment_data, + *fragment_dirty_rect); + } + Clipper(kUseGeometryMapper) .CalculateRects( - clip_rects_context, fragment_data, dirty_rect, + clip_rects_context, fragment_data, + fragment_dirty_rect ? &*fragment_dirty_rect : nullptr, fragment.layer_bounds, fragment.background_rect, fragment.foreground_rect, offset_from_root_can_be_used ? offset_from_root : nullptr); @@ -1772,8 +1793,8 @@ fragment.foreground_rect.Reset(); } + fragment.root_fragment_data = root_fragment_data; fragment.fragment_data = fragment_data; - fragment.pagination_offset = fragment_data->PaginationOffset(); fragments.push_back(fragment); } @@ -2256,7 +2277,7 @@ PaintLayer* hit_layer = HitTestLayerByApplyingTransform( root_layer, container_layer, result, recursion_data, transform_state, - z_offset, fragment.pagination_offset); + z_offset, fragment.fragment_data->PaginationOffset()); if (hit_layer) return hit_layer; }
diff --git a/third_party/blink/renderer/core/paint/paint_layer_clipper.cc b/third_party/blink/renderer/core/paint/paint_layer_clipper.cc index bc74390..63a13cb 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_clipper.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_clipper.cc
@@ -48,6 +48,7 @@ #include "third_party/blink/renderer/core/frame/local_frame_view.h" #include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/layout/layout_view.h" +#include "third_party/blink/renderer/core/paint/compositing/compositing_reason_finder.h" #include "third_party/blink/renderer/core/paint/object_paint_properties.h" #include "third_party/blink/renderer/core/paint/paint_layer.h" #include "third_party/blink/renderer/core/paint/paint_layer_scrollable_area.h" @@ -274,56 +275,36 @@ ClipRect& background_rect, ClipRect& foreground_rect, const LayoutPoint* offset_from_root) const { + layer_bounds.SetSize(LayoutSize(layer_.PixelSnappedSize())); if (offset_from_root) { layer_bounds.SetLocation(*offset_from_root); } else { - layer_bounds.SetX(context.sub_pixel_accumulation.Width()); - layer_bounds.SetY(context.sub_pixel_accumulation.Height()); - // This takes into account not just PaintLayer offset, but - // conversion of flow thread to visual coordinates for intervening - // fragmentation. - if (layer_.ShouldFragmentCompositedBounds(context.root_layer)) { - PaintLayer* enclosing_pagination_layer = - layer_.EnclosingPaginationLayer(); - LayoutPoint location(layer_bounds.Location()); - layer_.ConvertToLayerCoords(enclosing_pagination_layer, location); - location.MoveBy(fragment_data.PaginationOffset()); - location.MoveBy(enclosing_pagination_layer->VisualOffsetFromAncestor( - context.root_layer)); - layer_bounds.SetLocation(location); - } else { - const auto* current_transform = - fragment_data.PreEffectProperties().Transform(); - const auto* root_transform = - context.root_fragment->LocalBorderBoxProperties().Transform(); - if (&layer_ == context.root_layer || - current_transform == root_transform) { - layer_bounds.MoveBy(fragment_data.PaintOffset()); - layer_bounds.MoveBy(-context.root_fragment->PaintOffset()); - } else { - const TransformationMatrix& transform = - GeometryMapper::SourceToDestinationProjection(current_transform, - root_transform); + layer_bounds.SetLocation(LayoutPoint(context.sub_pixel_accumulation)); + layer_bounds.MoveBy(fragment_data.PaintOffset()); - if (transform.IsIdentityOr2DTranslation()) { - layer_bounds.MoveBy(fragment_data.PaintOffset()); - // The transform should be an integer translation, up to floating - // point error. - layer_bounds.Move( - LayoutSize((float)transform.E(), (float)transform.F())); - layer_bounds.MoveBy(-context.root_fragment->PaintOffset()); - } else { - // This branch can happen due to perspective transforms. - // TODO(chrishtr): investigate whether the paint code is broken - // in this case. - LayoutPoint location(layer_bounds.Location()); - layer_.ConvertToLayerCoords(context.root_layer, location); - layer_bounds.SetLocation(location); - } + const auto* current_transform = fragment_data.PreTransform(); + const auto* root_transform = + context.root_fragment->LocalBorderBoxProperties().Transform(); + if (current_transform != root_transform) { + if (current_transform->RequiresCompositingForRootScroller()) { + // This is a fast-path for computing the SourceToDestinationProjection + // when the current transform is the root scroller's scroll translation. + const auto& transform = current_transform->Matrix(); +#if DCHECK_IS_ON() + DCHECK(transform.IsIdentityOr2DTranslation()); + DCHECK(transform.ApproximatelyEquals( + GeometryMapper::SourceToDestinationProjection(current_transform, + root_transform))); +#endif + layer_bounds.Move( + LayoutSize(LayoutUnit(transform.E()), LayoutUnit(transform.F()))); + } else { + GeometryMapper::SourceToDestinationRect(current_transform, + root_transform, layer_bounds); } } + layer_bounds.MoveBy(-context.root_fragment->PaintOffset()); } - layer_bounds.SetSize(LayoutSize(layer_.PixelSnappedSize())); CalculateBackgroundClipRectWithGeometryMapper( context, fragment_data, kRespectOverflowClip, background_rect);
diff --git a/third_party/blink/renderer/core/paint/paint_layer_fragment.h b/third_party/blink/renderer/core/paint/paint_layer_fragment.h index 30b9d07..2982c453 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_fragment.h +++ b/third_party/blink/renderer/core/paint/paint_layer_fragment.h
@@ -43,65 +43,46 @@ // fragments are called "paginated fragments". Note that this is a Blink // vocabulary extension and doesn't come from the specification. // -// The fragments are collected by calling PaintLayer::collectFragments +// The fragments are collected by calling PaintLayer::CollectFragments // on every box once per paint/hit-testing operation. struct PaintLayerFragment { DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); public: - void MoveBy(const LayoutPoint& offset) { - layer_bounds.MoveBy(offset); - background_rect.MoveBy(offset); - foreground_rect.MoveBy(offset); - } + // See |root_fragment_data| for the coordinate space of |layer_bounds|, + // |background_rect| and |foreground_rect|. - void Intersect(const LayoutRect& rect) { - background_rect.Intersect(rect); - foreground_rect.Intersect(rect); - } - - // Set on all fragments. - // - // The PaintLayer's size in the associated ClipRectsContext's - // rootLayer coordinate system. See PaintLayer::m_size for the - // exact rectangle. - // - // TODO(jchaffraix): We should store the rootLayer here to ensure we don't - // mix coordinate systems by mistake. + // The PaintLayer's size in the space defined by |root_fragment_data|. + // See PaintLayer::size_ for the exact rectangle. LayoutRect layer_bounds; - // Set on all fragments. - // // The rectangle used to clip the background. // // The rectangle is the rectangle-to-paint if no clip applies to the - // fragment. It is the intersection between the visual overflow rect - // and any overflow clips or 'clip' properties. It is also intersected with - // |paginationClip| if it is present. + // fragment. It is the intersection of + // - the visual overflow rect and + // - all clips between |root_fragment_data->LocalBorderBoxProperties() + // .Clip()| (not included) and |fragment_data->PreClip()| (included). // - // See PaintLayerClipper::calculateRects. + // See PaintLayerClipper::CalculateRects. ClipRect background_rect; - // Set on all fragments. - // // The rectangle used to clip the content (foreground). // // The rectangle is the rectangle-to-paint if no clip applies to the - // fragment. If there is an overflow clip, the rectangle-to-paint is - // intersected with the border box rect without the scrollbars (content gets - // clipped at their edge). Also any enclosing 'clip' properties get applied - // to the intersected rectangle. It is also intersected with - // |paginationClip| if it is present. + // fragment. If the layer should apply overflow clip, the rectangle is the + // intersection of |background_rect| and the overflow clip rect. Otherwise + // it's the same as |background_rect|. // - // See PaintLayerClipper::calculateRects. + // See PaintLayerClipper::CalculateRects. ClipRect foreground_rect; - // Only set on paginated fragments. - // - // The physical translation to apply to shift the layer when - // painting/hit-testing. - LayoutPoint pagination_offset; + // Defines the coordinate space of the above rects: + // root_fragment_data->LocalBorderBoxProperties().Transform() + + // root_fragment_data.PaintOffset(). + const FragmentData* root_fragment_data = nullptr; + // The corresponding FragmentData of this structure. const FragmentData* fragment_data = nullptr; };
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.cc b/third_party/blink/renderer/core/paint/paint_layer_painter.cc index acd1965..9bef99a 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.cc
@@ -230,10 +230,10 @@ } void PaintLayerPainter::AdjustForPaintProperties( + const GraphicsContext& context, PaintLayerPaintingInfo& painting_info, PaintLayerFlags& paint_flags) { - // TODO(wangxianzhu): Make this function fragment aware. - const auto& current_fragment = paint_layer_.GetLayoutObject().FirstFragment(); + const auto& first_fragment = paint_layer_.GetLayoutObject().FirstFragment(); bool use_infinite_dirty_rect = // Cull rects and clips can't be propagated across a filter which moves @@ -246,7 +246,10 @@ // 2) Complexity: Difficulty updating clips when ancestor transforms // change. // For these reasons, we use an infinite dirty rect here. - paint_layer_.PaintsWithTransform(painting_info.GetGlobalPaintFlags()); + // The reasons don't apply for printing though, because when we enter and + // leaving printing mode, full invalidations occur. + (!context.Printing() && + paint_layer_.PaintsWithTransform(painting_info.GetGlobalPaintFlags())); if (use_infinite_dirty_rect) painting_info.paint_dirty_rect = LayoutRect(LayoutRect::InfiniteIntRect()); @@ -255,15 +258,6 @@ return; if (!use_infinite_dirty_rect) { - const auto* current_transform = - current_fragment.LocalBorderBoxProperties().Transform(); - const auto& root_fragment = - painting_info.root_layer->GetLayoutObject().FirstFragment(); - const auto* root_transform = - root_fragment.LocalBorderBoxProperties().Transform(); - if (current_transform == root_transform) - return; - // painting_info.paint_dirty_rect is currently in // |painting_info.root_layer|'s pixel-snapped border box space. We need to // adjust it into |paint_layer_|'s space. @@ -272,14 +266,13 @@ // - The current layer's transform state escapes the root layers contents // transform, e.g. a fixed-position layer; // - Scroll offsets. - const auto& matrix = GeometryMapper::SourceToDestinationProjection( - root_transform, current_transform); - painting_info.paint_dirty_rect.MoveBy( - RoundedIntPoint(root_fragment.PaintOffset())); - painting_info.paint_dirty_rect = - matrix.MapRect(painting_info.paint_dirty_rect); - painting_info.paint_dirty_rect.MoveBy( - -RoundedIntPoint(current_fragment.PaintOffset())); + const auto& first_root_fragment = + painting_info.root_layer->GetLayoutObject().FirstFragment(); + if (first_root_fragment.LocalBorderBoxProperties().Transform() == + first_fragment.LocalBorderBoxProperties().Transform()) + return; + first_root_fragment.MapRectToFragment(first_fragment, + painting_info.paint_dirty_rect); } // Make the current layer the new root layer. @@ -289,11 +282,10 @@ paint_flags &= ~kPaintLayerPaintingOverflowContents; paint_flags &= ~kPaintLayerPaintingCompositingScrollingPhase; - // TODO(wangxianzhu): Make this function fragment aware. - if (current_fragment.PaintProperties() && - current_fragment.PaintProperties()->PaintOffsetTranslation()) { + if (first_fragment.PaintProperties() && + first_fragment.PaintProperties()->PaintOffsetTranslation()) { painting_info.sub_pixel_accumulation = - ToLayoutSize(current_fragment.PaintOffset()); + ToLayoutSize(first_fragment.PaintOffset()); } } @@ -352,7 +344,7 @@ : painting_info_arg.sub_pixel_accumulation; PaintLayerPaintingInfo painting_info = painting_info_arg; - AdjustForPaintProperties(painting_info, paint_flags); + AdjustForPaintProperties(context, painting_info, paint_flags); ShouldRespectOverflowClipType respect_overflow_clip = ShouldRespectOverflowClip(paint_flags, paint_layer_.GetLayoutObject()); @@ -465,7 +457,6 @@ for (auto& fragment : layer_fragments) { fragment.background_rect.Move(negative_offset); fragment.foreground_rect.Move(negative_offset); - fragment.pagination_offset.Move(negative_offset); } } else if (should_paint_content) { should_paint_content = AtLeastOneFragmentIntersectsDamageRect( @@ -633,36 +624,26 @@ const PaintLayerPaintingInfo& local_painting_info, PaintLayerFlags local_paint_flags, const LayoutPoint& offset_from_root) { - if (paint_layer_.EnclosingPaginationLayer()) - return true; // The fragments created have already been found to intersect - // with the damage rect. - if (&paint_layer_ == local_painting_info.root_layer && (local_paint_flags & kPaintLayerPaintingOverflowContents)) return true; - for (PaintLayerFragment& fragment : fragments) { - LayoutPoint new_offset_from_root = - offset_from_root + fragment.pagination_offset; - // Note that this really only works reliably on the first fragment. If the - // layer has visible overflow and a subsequent fragment doesn't intersect - // with the border box of the layer (i.e. only contains an overflow portion - // of the layer), intersection will fail. The reason for this is that - // fragment.layerBounds is set to the border box, not the bounding box, of - // the layer. - if (paint_layer_.IntersectsDamageRect(fragment.layer_bounds, - fragment.background_rect.Rect(), - new_offset_from_root)) - return true; - } - return false; + // Skip the optimization if the layer is fragmented to avoid complexity + // about overflows in fragments. LayoutObject painters will do cull rect + // optimization later. + if (paint_layer_.EnclosingPaginationLayer() || fragments.size() > 1) + return true; + + return paint_layer_.IntersectsDamageRect(fragments[0].layer_bounds, + fragments[0].background_rect.Rect(), + offset_from_root); } template <typename Function> static void ForAllFragments(GraphicsContext& context, const PaintLayerFragments& fragments, const Function& function) { - for (size_t i = 0; i < fragments.size(); ++i) { + for (wtf_size_t i = 0; i < fragments.size(); ++i) { base::Optional<ScopedDisplayItemFragment> scoped_display_item_fragment; if (i) scoped_display_item_fragment.emplace(context, i); @@ -772,13 +753,12 @@ DisplayItem::PaintPhaseToDrawingType(phase)); LayoutRect new_cull_rect(clip_rect.Rect()); - // We paint in the containing transform node's space. Now |new_cull_rect| is - // in the pixel-snapped border box space of |painting_info.root_layer|. - // Adjust it to the correct space. + // Now |new_cull_rect| is in the pixel-snapped border box space of + // |fragment.root_fragment_data|. Adjust it to the containing transform node's + // space in which we will paint. new_cull_rect.MoveBy( - RoundedIntPoint(painting_info.root_layer->GetLayoutObject() - .FirstFragment() - .PaintOffset())); + RoundedIntPoint(fragment.root_fragment_data->PaintOffset())); + // If we had pending stylesheets, we should avoid painting descendants of // layout view to avoid FOUC. bool suppress_painting_descendants = paint_layer_.GetLayoutObject()
diff --git a/third_party/blink/renderer/core/paint/paint_layer_painter.h b/third_party/blink/renderer/core/paint/paint_layer_painter.h index 14e0caf..e1ca592 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_painter.h +++ b/third_party/blink/renderer/core/paint/paint_layer_painter.h
@@ -118,7 +118,9 @@ void PaintEmptyContentForFilters(GraphicsContext&); - void AdjustForPaintProperties(PaintLayerPaintingInfo&, PaintLayerFlags&); + void AdjustForPaintProperties(const GraphicsContext&, + PaintLayerPaintingInfo&, + PaintLayerFlags&); PaintLayer& paint_layer_; };
diff --git a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc index ae44129..a38e9efb 100644 --- a/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc +++ b/third_party/blink/renderer/core/paint/paint_layer_stacking_node.cc
@@ -224,12 +224,12 @@ void PaintLayerStackingNode::UpdateStackingParentForZOrderLists( PaintLayerStackingNode* stacking_parent) { if (pos_z_order_list_) { - for (size_t i = 0; i < pos_z_order_list_->size(); ++i) + for (wtf_size_t i = 0; i < pos_z_order_list_->size(); ++i) pos_z_order_list_->at(i)->SetStackingParent(stacking_parent); } if (neg_z_order_list_) { - for (size_t i = 0; i < neg_z_order_list_->size(); ++i) + for (wtf_size_t i = 0; i < neg_z_order_list_->size(); ++i) neg_z_order_list_->at(i)->SetStackingParent(stacking_parent); } }
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc index 0451973..b5ed652 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder.cc
@@ -152,6 +152,9 @@ ALWAYS_INLINE void UpdateReplacedContentTransform(); ALWAYS_INLINE void UpdateScrollAndScrollTranslation(); ALWAYS_INLINE void UpdateOutOfFlowContext(); + ALWAYS_INLINE void UpdateTransformIsolationNode(); + ALWAYS_INLINE void UpdateEffectIsolationNode(); + ALWAYS_INLINE void UpdateClipIsolationNode(); bool NeedsPaintPropertyUpdate() const { return object_.NeedsPaintPropertyUpdate() || @@ -269,6 +272,10 @@ return false; } +static bool NeedsIsolationNodes(const LayoutObject& object) { + return object.HasLayer() && object.ShouldApplyPaintContainment(); +} + static bool NeedsPaintOffsetTranslation(const LayoutObject& object) { if (!object.IsBoxModelObject()) return false; @@ -291,6 +298,11 @@ return true; } + if (NeedsIsolationNodes(box_model)) { + DCHECK(box_model.HasLayer()); + return true; + } + if (box_model.HasLayer() && box_model.Layer()->PaintsWithTransform( kGlobalPaintFlattenCompositingLayers)) { return true; @@ -1649,6 +1661,48 @@ OnClear(properties_->ClearCssClipFixedPosition()); } +void FragmentPaintPropertyTreeBuilder::UpdateTransformIsolationNode() { + if (NeedsPaintPropertyUpdate()) { + if (NeedsIsolationNodes(object_)) { + OnUpdate(properties_->UpdateTransformIsolationNode( + *context_.current.transform, TransformPaintPropertyNode::State{}, + true /* is_parent_alias */)); + } else { + OnClear(properties_->ClearTransformIsolationNode()); + } + } + if (properties_->TransformIsolationNode()) + context_.current.transform = properties_->TransformIsolationNode(); +} + +void FragmentPaintPropertyTreeBuilder::UpdateEffectIsolationNode() { + if (NeedsPaintPropertyUpdate()) { + if (NeedsIsolationNodes(object_)) { + OnUpdate(properties_->UpdateEffectIsolationNode( + *context_.current_effect, EffectPaintPropertyNode::State{}, + true /* is_parent_alias */)); + } else { + OnClear(properties_->ClearEffectIsolationNode()); + } + } + if (properties_->EffectIsolationNode()) + context_.current_effect = properties_->EffectIsolationNode(); +} + +void FragmentPaintPropertyTreeBuilder::UpdateClipIsolationNode() { + if (NeedsPaintPropertyUpdate()) { + if (NeedsIsolationNodes(object_)) { + OnUpdate(properties_->UpdateClipIsolationNode( + *context_.current.clip, ClipPaintPropertyNode::State{}, + true /* is_parent_alias */)); + } else { + OnClear(properties_->ClearClipIsolationNode()); + } + } + if (properties_->ClipIsolationNode()) + context_.current.clip = properties_->ClipIsolationNode(); +} + static LayoutRect MapLocalRectToAncestorLayer( const LayoutBox& box, const LayoutRect& local_rect, @@ -2045,6 +2099,9 @@ UpdatePerspective(); UpdateReplacedContentTransform(); UpdateScrollAndScrollTranslation(); + UpdateTransformIsolationNode(); + UpdateEffectIsolationNode(); + UpdateClipIsolationNode(); } UpdateOutOfFlowContext(); @@ -2222,7 +2279,7 @@ auto fragment_offset_in_flow_thread = original_offset_in_flow_thread - original_offset_in_fragment; - for (size_t i = 0; i < context_.fragments.size(); ++i) { + for (wtf_size_t i = 0; i < context_.fragments.size(); ++i) { auto& fragment_context = context_.fragments[i]; fragment_context.repeating_paint_offset_adjustment = LayoutSize(); // Adjust paint offsets of repeatings (not including the original).
diff --git a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc index e412b40..efe76155b 100644 --- a/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc +++ b/third_party/blink/renderer/core/paint/paint_property_tree_builder_test.cc
@@ -3264,48 +3264,89 @@ const ObjectPaintProperties* clip_properties = clipper->FirstFragment().PaintProperties(); LayoutObject* child = GetLayoutObjectByElementId("child"); + const auto& clip_local_properties = + clipper->FirstFragment().LocalBorderBoxProperties(); + + // Verify that we created isolation nodes. + EXPECT_TRUE(clip_properties->TransformIsolationNode()); + EXPECT_TRUE(clip_properties->EffectIsolationNode()); + EXPECT_TRUE(clip_properties->ClipIsolationNode()); + + // Verify parenting: + + // Transform isolation node should be parented to the local border box + // properties transform, which should be the paint offset translation. + EXPECT_EQ(clip_properties->TransformIsolationNode()->Parent(), + clip_local_properties.Transform()); + EXPECT_EQ(clip_properties->TransformIsolationNode()->Parent(), + clip_properties->PaintOffsetTranslation()); + // Similarly, effect isolation node is parented to the local border box + // properties effect. + EXPECT_EQ(clip_properties->EffectIsolationNode()->Parent(), + clip_local_properties.Effect()); + // Clip isolation node, however, is parented to the overflow clip, which is in + // turn parented to the local border box properties clip. + EXPECT_EQ(clip_properties->ClipIsolationNode()->Parent(), + clip_properties->OverflowClip()); + EXPECT_EQ(clip_properties->OverflowClip()->Parent(), + clip_local_properties.Clip()); + + // Verify transform: + + // Isolation transform node should be identity. + EXPECT_EQ(clip_properties->TransformIsolationNode()->Matrix(), + TransformationMatrix()); // TODO(crbug.com/732611): SPv2 invalidations are incorrect if there is // scrolling. if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled()) { EXPECT_FALSE(DocScrollTranslation()); EXPECT_TRUE(DocPreTranslation()); - EXPECT_EQ(DocPreTranslation(), - clipper->FirstFragment().LocalBorderBoxProperties().Transform()); + // Isolation induces paint offset translation, so the node should be + // different from the doc node, but its parent is the same as the doc node. + EXPECT_EQ(DocPreTranslation(), clipper->FirstFragment() + .LocalBorderBoxProperties() + .Transform() + ->Parent()); } else { // Always create scroll translation for layout view even the document does // not scroll (not enough content). EXPECT_TRUE(DocScrollTranslation()); - EXPECT_EQ(DocScrollTranslation(), - clipper->FirstFragment().LocalBorderBoxProperties().Transform()); + // Isolation induces paint offset translation, so the node should be + // different from the doc node, but its parent is the same as the doc node. + EXPECT_EQ(DocScrollTranslation(), clipper->FirstFragment() + .LocalBorderBoxProperties() + .Transform() + ->Parent()); } + + // Verify clip: + EXPECT_EQ(DocContentClip(), clipper->FirstFragment().LocalBorderBoxProperties().Clip()); + // Clip isolation node should be big enough to encompass all other clips, + // including DocContentClip. + EXPECT_TRUE(clip_properties->ClipIsolationNode()->ClipRect().Rect().Contains( + DocContentClip()->ClipRect().Rect())); + + // Verify contents properties and child properties: auto contents_properties = clipper->FirstFragment().ContentsProperties(); - EXPECT_EQ(LayoutPoint(30, 20), clipper->FirstFragment().PaintOffset()); - // TODO(crbug.com/732611): SPv2 invalidations are incorrect if there is - // scrolling. - if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled()) { - EXPECT_EQ(DocPreTranslation(), contents_properties.Transform()); - } else { - EXPECT_EQ(DocScrollTranslation(), contents_properties.Transform()); - } - EXPECT_EQ(clip_properties->OverflowClip(), contents_properties.Clip()); + // Since the clipper is isolated, its paint offset should be 0, 0. + EXPECT_EQ(LayoutPoint(0, 0), clipper->FirstFragment().PaintOffset()); + // Ensure that the contents properties match isolation nodes. + EXPECT_EQ(clip_properties->TransformIsolationNode(), + contents_properties.Transform()); + EXPECT_EQ(clip_properties->ClipIsolationNode(), contents_properties.Clip()); + EXPECT_EQ(clip_properties->EffectIsolationNode(), + contents_properties.Effect()); - // TODO(crbug.com/732611): SPv2 invalidations are incorrect if there is - // scrolling. - if (RuntimeEnabledFeatures::SlimmingPaintV2Enabled()) { - EXPECT_EQ(DocPreTranslation(), - child->FirstFragment().LocalBorderBoxProperties().Transform()); - } else { - EXPECT_EQ(DocScrollTranslation(), - child->FirstFragment().LocalBorderBoxProperties().Transform()); - } - EXPECT_EQ(clip_properties->OverflowClip(), + // Child should be using isolation nodes as its local border box properties. + EXPECT_EQ(contents_properties.Transform(), + child->FirstFragment().LocalBorderBoxProperties().Transform()); + EXPECT_EQ(contents_properties.Clip(), child->FirstFragment().LocalBorderBoxProperties().Clip()); - - EXPECT_NE(nullptr, + EXPECT_EQ(contents_properties.Effect(), child->FirstFragment().LocalBorderBoxProperties().Effect()); CHECK_EXACT_VISUAL_RECT(LayoutRect(0, 0, 400, 500), child, clipper); }
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc index 1636421..7a88db8c 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.cc
@@ -78,7 +78,7 @@ // We need to be careful not to have a reference to the parent context, since // this reference will be to the context_storage_ memory which may be // reallocated during this function call. - size_t parent_context_index = context_storage_.size() - 1; + wtf_size_t parent_context_index = context_storage_.size() - 1; auto parent_context = [this, parent_context_index]() -> PrePaintTreeWalkContext& { return context_storage_[parent_context_index]; @@ -383,7 +383,7 @@ // We need to be careful not to have a reference to the parent context, since // this reference will be to the context_storage_ memory which may be // reallocated during this function call. - size_t parent_context_index = context_storage_.size() - 1; + wtf_size_t parent_context_index = context_storage_.size() - 1; auto parent_context = [this, parent_context_index]() -> PrePaintTreeWalkContext& { return context_storage_[parent_context_index];
diff --git a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h index 3d51b061..3a0f2a5 100644 --- a/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h +++ b/third_party/blink/renderer/core/paint/pre_paint_tree_walk.h
@@ -70,7 +70,7 @@ bool effective_whitelisted_touch_action_changed = false; }; - const PrePaintTreeWalkContext& ContextAt(size_t index) { + const PrePaintTreeWalkContext& ContextAt(wtf_size_t index) { DCHECK_LT(index, context_storage_.size()); return context_storage_[index]; }
diff --git a/third_party/blink/renderer/core/style/ComputedStyle.md b/third_party/blink/renderer/core/style/ComputedStyle.md index 02024606..96fcbd0 100644 --- a/third_party/blink/renderer/core/style/ComputedStyle.md +++ b/third_party/blink/renderer/core/style/ComputedStyle.md
@@ -12,9 +12,9 @@ ## JSON files: These files are inputs to the generator and tell the generator what shape our fields and functions take. This is a list of all the relevant JSON files (more detailed documentation can be found in the files themselves): -* [CSSProperties.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/CSSProperties.json5): Contains information for all the CSS properties we support. -* [ComputedStyleExtraFields.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/ComputedStyleExtraFields.json5): Specifies fields in ComputedStyle that we would like to generate, but are not CSS properties. -* [ComputedStyleDiffFunctions.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/ComputedStyleDiffFunctions.json5): Specifies the fields we want to diff in the various diff functions in ComputedStyle. It is used to generate the various diffing functions on ComputedStyle. +* [css_properties.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/css_properties.json5): Contains information for all the CSS properties we support. +* [computed_style_extra_fields.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/computed_style_extra_fields.json5): Specifies fields in ComputedStyle that we would like to generate, but are not CSS properties. +* [computed_style_diff_functions.json5](https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/computed_style_diff_functions.json5): Specifies the fields we want to diff in the various diff functions in ComputedStyle. It is used to generate the various diffing functions on ComputedStyle. ## Generator files: These scripts generate the computed_style_base.{h,cc} files. This is a list of the relevant generator files (more detailed documentation can be found in the files themselves):
diff --git a/third_party/blink/renderer/core/style/computed_style_constants.h b/third_party/blink/renderer/core/style/computed_style_constants.h index c9ea1e2..f470579 100644 --- a/third_party/blink/renderer/core/style/computed_style_constants.h +++ b/third_party/blink/renderer/core/style/computed_style_constants.h
@@ -64,7 +64,7 @@ enum PseudoId { // The order must be NOP ID, public IDs, and then internal IDs. // If you add or remove a public ID, you must update the field_size of - // "PseudoBits" in ComputedStyleExtraFields.json5. + // "PseudoBits" in computed_style_extra_fields.json5. kPseudoIdNone, kPseudoIdFirstLine, kPseudoIdFirstLetter,
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.cc b/third_party/blink/renderer/core/style/style_fetched_image.cc index 44f870d4..68a9dc3 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image.cc +++ b/third_party/blink/renderer/core/style/style_fetched_image.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/core/css/css_image_value.h" #include "third_party/blink/renderer/core/dom/document.h" +#include "third_party/blink/renderer/core/frame/settings.h" #include "third_party/blink/renderer/core/loader/resource/image_resource_content.h" #include "third_party/blink/renderer/core/style/computed_style.h" #include "third_party/blink/renderer/core/svg/graphics/svg_image.h" @@ -131,6 +132,8 @@ if (document_ && image.IsSVGImage()) ToSVGImage(image).UpdateUseCounters(*document_); + + image_->UpdateImageAnimationPolicy(); } // Oilpan: do not prolong the Document's lifetime. @@ -161,6 +164,14 @@ image_->LoadDeferredImage(document_->Fetcher()); } +bool StyleFetchedImage::GetImageAnimationPolicy(ImageAnimationPolicy& policy) { + if (!document_ || !document_->GetSettings()) { + return false; + } + policy = document_->GetSettings()->GetImageAnimationPolicy(); + return true; +} + void StyleFetchedImage::Trace(blink::Visitor* visitor) { visitor->Trace(image_); visitor->Trace(document_);
diff --git a/third_party/blink/renderer/core/style/style_fetched_image.h b/third_party/blink/renderer/core/style/style_fetched_image.h index 1e80f57..6bd9314e 100644 --- a/third_party/blink/renderer/core/style/style_fetched_image.h +++ b/third_party/blink/renderer/core/style/style_fetched_image.h
@@ -63,6 +63,7 @@ void AddClient(ImageResourceObserver*) override; void RemoveClient(ImageResourceObserver*) override; void ImageNotifyFinished(ImageResourceContent*) override; + bool GetImageAnimationPolicy(ImageAnimationPolicy&) override; String DebugName() const override { return "StyleFetchedImage"; } scoped_refptr<Image> GetImage(const ImageResourceObserver&, const Document&,
diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn index a3609bbd..f062224 100644 --- a/third_party/blink/renderer/devtools/BUILD.gn +++ b/third_party/blink/renderer/devtools/BUILD.gn
@@ -1194,7 +1194,7 @@ script = "scripts/build/generate_supported_css.py" inputs = [ - "../core/css/CSSProperties.json5", + "../core/css/css_properties.json5", ] outputs = [
diff --git a/third_party/blink/renderer/devtools/front_end/ui/InplaceEditor.js b/third_party/blink/renderer/devtools/front_end/ui/InplaceEditor.js index ae2f538b..31e4f832 100644 --- a/third_party/blink/renderer/devtools/front_end/ui/InplaceEditor.js +++ b/third_party/blink/renderer/devtools/front_end/ui/InplaceEditor.js
@@ -32,6 +32,10 @@ element.classList.add('editing'); element.setAttribute('contenteditable', 'plaintext-only'); + const oldRole = element.getAttribute('role'); + UI.ARIAUtils.markAsTextBox(element); + editingContext.oldRole = oldRole; + const oldTabIndex = element.getAttribute('tabIndex'); if (typeof oldTabIndex !== 'number' || oldTabIndex < 0) element.tabIndex = 0; @@ -44,6 +48,11 @@ element.classList.remove('editing'); element.removeAttribute('contenteditable'); + if (typeof editingContext.oldRole !== 'string') + element.removeAttribute('role'); + else + element.role = editingContext.oldRole; + if (typeof editingContext.oldTabIndex !== 'number') element.removeAttribute('tabIndex'); else
diff --git a/third_party/blink/renderer/modules/accessibility/ax_media_controls.cc b/third_party/blink/renderer/modules/accessibility/ax_media_controls.cc index 8fbf352..5364dff 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_media_controls.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_media_controls.cc
@@ -109,21 +109,14 @@ GetLayoutObject()->GetNode()); } -bool AccessibilityMediaControl::OnNativeScrollToGlobalPointAction( - const IntPoint& point) const { +bool AccessibilityMediaControl::InternalSetAccessibilityFocusAction() { MediaControlElementsHelper::NotifyMediaControlAccessibleFocus(GetElement()); - return AXLayoutObject::OnNativeScrollToGlobalPointAction(point); + return AXLayoutObject::InternalSetAccessibilityFocusAction(); } -bool AccessibilityMediaControl::OnNativeScrollToMakeVisibleAction() const { - MediaControlElementsHelper::NotifyMediaControlAccessibleFocus(GetElement()); - return AXLayoutObject::OnNativeScrollToMakeVisibleAction(); -} - -bool AccessibilityMediaControl::OnNativeScrollToMakeVisibleWithSubFocusAction( - const IntRect& rect) const { - MediaControlElementsHelper::NotifyMediaControlAccessibleFocus(GetElement()); - return AXLayoutObject::OnNativeScrollToMakeVisibleWithSubFocusAction(rect); +bool AccessibilityMediaControl::InternalClearAccessibilityFocusAction() { + MediaControlElementsHelper::NotifyMediaControlAccessibleBlur(GetElement()); + return AXLayoutObject::InternalClearAccessibilityFocusAction(); } String AccessibilityMediaControl::TextAlternative(
diff --git a/third_party/blink/renderer/modules/accessibility/ax_media_controls.h b/third_party/blink/renderer/modules/accessibility/ax_media_controls.h index 17f1913..77919be8 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_media_controls.h +++ b/third_party/blink/renderer/modules/accessibility/ax_media_controls.h
@@ -54,10 +54,8 @@ AXDescriptionFrom&, AXObjectVector* description_objects) const override; - bool OnNativeScrollToGlobalPointAction(const IntPoint&) const override; - bool OnNativeScrollToMakeVisibleAction() const override; - bool OnNativeScrollToMakeVisibleWithSubFocusAction( - const IntRect&) const override; + bool InternalSetAccessibilityFocusAction() override; + bool InternalClearAccessibilityFocusAction() override; protected: AccessibilityMediaControl(LayoutObject*, AXObjectCacheImpl&);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 74ddf2a..da7ca65 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -2904,12 +2904,10 @@ } bool AXObject::InternalClearAccessibilityFocusAction() { - // TODO(mlamouri): implement return false; } bool AXObject::InternalSetAccessibilityFocusAction() { - // TODO(mlamouri): implement return false; }
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.cc index 088518d..7a6b6ac 100644 --- a/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.cc +++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.cc
@@ -128,4 +128,14 @@ ->OnAccessibleFocus(); } +void MediaControlElementsHelper::NotifyMediaControlAccessibleBlur( + Element* element) { + const HTMLMediaElement* media_element = ToParentMediaElement(element); + if (!media_element || !media_element->GetMediaControls()) + return; + + static_cast<MediaControlsImpl*>(media_element->GetMediaControls()) + ->OnAccessibleBlur(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h index adc67d95..0e39ac35 100644 --- a/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h +++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h
@@ -64,6 +64,7 @@ // Utility function that notifies the media controls in which the element is // that it was focused by an accessibility tool. static void NotifyMediaControlAccessibleFocus(Element*); + static void NotifyMediaControlAccessibleBlur(Element*); }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc b/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc index 7381e7f..ad74801 100644 --- a/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc +++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.cc
@@ -135,6 +135,10 @@ visitor->Trace(event_listener_); } +bool MediaControlPanelElement::KeepDisplayedForAccessibility() { + return keep_displayed_for_accessibility_; +} + void MediaControlPanelElement::SetKeepDisplayedForAccessibility(bool value) { keep_displayed_for_accessibility_ = value; }
diff --git a/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h b/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h index 301e1a26..ccb43bb 100644 --- a/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h +++ b/third_party/blink/renderer/modules/media_controls/elements/media_control_panel_element.h
@@ -26,6 +26,7 @@ void MakeOpaque(); void MakeTransparent(); + bool KeepDisplayedForAccessibility(); void SetKeepDisplayedForAccessibility(bool); // Node override;
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc index 18a7d94ee..b4b62837 100644 --- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc +++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.cc
@@ -1041,6 +1041,10 @@ if (download_iph_manager_ && download_iph_manager_->IsShowingInProductHelp()) return false; + // Don't hide if we have accessiblity focus. + if (panel_->KeepDisplayedForAccessibility()) + return false; + return true; } @@ -1417,6 +1421,9 @@ } void MediaControlsImpl::OnAccessibleFocus() { + if (panel_->KeepDisplayedForAccessibility()) + return; + panel_->SetKeepDisplayedForAccessibility(true); if (!MediaElement().ShouldShowControls()) @@ -1440,6 +1447,16 @@ animated_arrow_container_element_->ShowArrowAnimation(direction); } +void MediaControlsImpl::OnAccessibleBlur() { + panel_->SetKeepDisplayedForAccessibility(false); + + if (MediaElement().ShouldShowControls()) + return; + + keep_showing_until_timer_fires_ = false; + ResetHideMediaControlsTimer(); +} + void MediaControlsImpl::DefaultEventHandler(Event& event) { HTMLDivElement::DefaultEventHandler(event);
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl.h b/third_party/blink/renderer/modules/media_controls/media_controls_impl.h index 4e13a5bf..c45c600 100644 --- a/third_party/blink/renderer/modules/media_controls/media_controls_impl.h +++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl.h
@@ -190,6 +190,7 @@ // accessibility tool. This is meant to be replaced by AOM when the event will // be exposed to the platform. void OnAccessibleFocus(); + void OnAccessibleBlur(); // TODO(884770): This should only be here until the double-tap-to-jump logic // is moved to the controls from the overlay play button.
diff --git a/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc b/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc index a772b25..77fb07a 100644 --- a/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc +++ b/third_party/blink/renderer/modules/media_controls/media_controls_impl_test.cc
@@ -1095,34 +1095,13 @@ EXPECT_TRUE(IsElementVisible(*panel)); platform()->RunForPeriodSeconds(2); - EXPECT_FALSE(IsElementVisible(*panel)); - - MediaControls().OnAccessibleFocus(); - platform()->RunForPeriodSeconds(2); - EXPECT_TRUE(IsElementVisible(*panel)); -} - -TEST_F(MediaControlsImplTestWithMockScheduler, - AccessibleFocusKeepsControlsHiddenButDisplayed) { - EnsureSizing(); - - Element* panel = MediaControls().PanelElement(); - - MediaControls().MediaElement().SetSrc("http://example.com"); - MediaControls().MediaElement().Play(); - - platform()->RunForPeriodSeconds(2); + SimulateHideMediaControlsTimerFired(); EXPECT_TRUE(IsElementVisible(*panel)); - MediaControls().OnAccessibleFocus(); + MediaControls().OnAccessibleBlur(); platform()->RunForPeriodSeconds(4); + SimulateHideMediaControlsTimerFired(); EXPECT_FALSE(IsElementVisible(*panel)); - - // Display is none but can't be checked via InlineStyle. Adding checks of this - // to make sure that any one changing this assumption will have to update this - // test. - EXPECT_FALSE(panel->InlineStyle()); - EXPECT_NE(EDisplay::kNone, panel->EnsureComputedStyle()->Display()); } TEST_F(MediaControlsImplTest,
diff --git a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc index d1b146d..6bfb1505 100644 --- a/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc +++ b/third_party/blink/renderer/platform/graphics/compositing/paint_chunks_to_cc_layer_test.cc
@@ -1186,43 +1186,6 @@ EXPECT_THAT(*output, PaintRecordMatcher::Make({cc::PaintOpType::DrawRecord})); } -TEST_F(PaintChunksToCcLayerTest, NoopEffectDoesNotEmitItems) { - auto e1 = CreateOpacityEffect(e0(), 0.5f); - auto noop_e2 = EffectPaintPropertyNode::CreateAlias(*e1); - auto noop_e3 = EffectPaintPropertyNode::CreateAlias(*noop_e2); - auto e4 = CreateOpacityEffect(*noop_e3, 0.5f); - - TestChunks chunks; - chunks.AddChunk(t0(), c0(), e0()); - chunks.AddChunk(t0(), c0(), *e1); - chunks.AddChunk(t0(), c0(), *noop_e2); - chunks.AddChunk(t0(), c0(), *noop_e3); - chunks.AddChunk(t0(), c0(), *e4); - chunks.AddChunk(t0(), c0(), *noop_e2); - chunks.AddChunk(t0(), c0(), *e1); - - auto output = - PaintChunksToCcLayer::Convert( - chunks.chunks, PropertyTreeState::Root(), gfx::Vector2dF(), - chunks.items, cc::DisplayItemList::kToBeReleasedAsPaintOpBuffer) - ->ReleaseAsRecord(); - - EXPECT_THAT(*output, - PaintRecordMatcher::Make({ - cc::PaintOpType::DrawRecord, // e0 - cc::PaintOpType::SaveLayerAlpha, // e1 - cc::PaintOpType::DrawRecord, // draw with e1 - cc::PaintOpType::DrawRecord, // draw with noop_e2 - cc::PaintOpType::DrawRecord, // draw_with noop_e3 - cc::PaintOpType::SaveLayerAlpha, // e4 - cc::PaintOpType::DrawRecord, // draw with e4 - cc::PaintOpType::Restore, // end e4 - cc::PaintOpType::DrawRecord, // draw with noop_e2 - cc::PaintOpType::DrawRecord, // draw with e1 - cc::PaintOpType::Restore // end noop_e2 (or e1) - })); -} - // These tests are testing error recovery path that are only used in // release builds. A DCHECK'd build will trap instead. #if !DCHECK_IS_ON() @@ -1293,5 +1256,42 @@ } #endif +TEST_F(PaintChunksToCcLayerTest, NoopEffectDoesNotEmitItems) { + auto e1 = CreateOpacityEffect(e0(), 0.5f); + auto noop_e2 = EffectPaintPropertyNode::CreateAlias(*e1); + auto noop_e3 = EffectPaintPropertyNode::CreateAlias(*noop_e2); + auto e4 = CreateOpacityEffect(*noop_e3, 0.5f); + + TestChunks chunks; + chunks.AddChunk(t0(), c0(), e0()); + chunks.AddChunk(t0(), c0(), *e1); + chunks.AddChunk(t0(), c0(), *noop_e2); + chunks.AddChunk(t0(), c0(), *noop_e3); + chunks.AddChunk(t0(), c0(), *e4); + chunks.AddChunk(t0(), c0(), *noop_e2); + chunks.AddChunk(t0(), c0(), *e1); + + auto output = + PaintChunksToCcLayer::Convert( + chunks.chunks, PropertyTreeState::Root(), gfx::Vector2dF(), + chunks.items, cc::DisplayItemList::kToBeReleasedAsPaintOpBuffer) + ->ReleaseAsRecord(); + + EXPECT_THAT(*output, + PaintRecordMatcher::Make({ + cc::PaintOpType::DrawRecord, // e0 + cc::PaintOpType::SaveLayerAlpha, // e1 + cc::PaintOpType::DrawRecord, // draw with e1 + cc::PaintOpType::DrawRecord, // draw with noop_e2 + cc::PaintOpType::DrawRecord, // draw_with noop_e3 + cc::PaintOpType::SaveLayerAlpha, // e4 + cc::PaintOpType::DrawRecord, // draw with e4 + cc::PaintOpType::Restore, // end e4 + cc::PaintOpType::DrawRecord, // draw with noop_e2 + cc::PaintOpType::DrawRecord, // draw with e1 + cc::PaintOpType::Restore // end noop_e2 (or e1) + })); +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/image_decoder_wrapper.cc b/third_party/blink/renderer/platform/graphics/image_decoder_wrapper.cc index d4492c8..803b7d50 100644 --- a/third_party/blink/renderer/platform/graphics/image_decoder_wrapper.cc +++ b/third_party/blink/renderer/platform/graphics/image_decoder_wrapper.cc
@@ -163,8 +163,8 @@ DCHECK_EQ(scaled_size_bitmap.width(), scaled_size_.width()); DCHECK_EQ(scaled_size_bitmap.height(), scaled_size_.height()); -// If we decoded into external memory, the bitmap should be backed by the -// pixels passed to the allocator. + // If we decoded into external memory, the bitmap should be backed by the + // pixels passed to the allocator. DCHECK(!decode_to_external_memory || scaled_size_bitmap.getPixels() == pixels_);
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc index 4513fb9..c1338cb7 100644 --- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc +++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.cc
@@ -123,18 +123,6 @@ return temp; } -void GeometryMapper::SourceToDestinationRect( - const TransformPaintPropertyNode* source_transform_node, - const TransformPaintPropertyNode* destination_transform_node, - FloatRect& mapping_rect) { - bool success = false; - const TransformationMatrix& source_to_destination = - SourceToDestinationProjectionInternal( - source_transform_node, destination_transform_node, success); - mapping_rect = - success ? source_to_destination.MapRect(mapping_rect) : FloatRect(); -} - bool GeometryMapper::LocalToAncestorVisualRect( const PropertyTreeState& local_state, const PropertyTreeState& ancestor_state,
diff --git a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h index e4a0637..050edc73 100644 --- a/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h +++ b/third_party/blink/renderer/platform/graphics/paint/geometry_mapper.h
@@ -51,11 +51,22 @@ // Same as SourceToDestinationProjection() except that it maps the rect // rather than returning the matrix. - // |mapping_rect| is both input and output. + // |mapping_rect| is both input and output. Its type can be FloatRect, + // LayoutRect and IntRect. + template <typename Rect> static void SourceToDestinationRect( const TransformPaintPropertyNode* source_transform_node, const TransformPaintPropertyNode* destination_transform_node, - FloatRect& mapping_rect); + Rect& mapping_rect) { + if (source_transform_node == destination_transform_node) + return; + bool success = false; + const TransformationMatrix& source_to_destination = + SourceToDestinationProjectionInternal( + source_transform_node, destination_transform_node, success); + mapping_rect = + success ? source_to_destination.MapRect(mapping_rect) : Rect(); + } // Returns the clip rect between |local_state| and |ancestor_state|. The clip // rect is the total clip rect that should be applied when painting contents
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_property_node.h b/third_party/blink/renderer/platform/graphics/paint/paint_property_node.h index 058e0b1..170130e 100644 --- a/third_party/blink/renderer/platform/graphics/paint/paint_property_node.h +++ b/third_party/blink/renderer/platform/graphics/paint/paint_property_node.h
@@ -130,6 +130,8 @@ private: friend class PaintPropertyNodeTest; + // Object paint properties can set the parent directly for an alias update. + friend class ObjectPaintProperties; scoped_refptr<const NodeType> parent_; // Indicates whether this node is an alias for its parent. Parent aliases are
diff --git a/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h b/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h index 5bd7f65..5dc76d0 100644 --- a/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h +++ b/third_party/blink/renderer/platform/graphics/paint/scroll_paint_property_node.h
@@ -79,6 +79,12 @@ return base::AdoptRef( new ScrollPaintPropertyNode(&parent, std::move(state))); } + static scoped_refptr<ScrollPaintPropertyNode> CreateAlias( + const ScrollPaintPropertyNode&) { + // ScrollPaintPropertyNodes cannot be aliases. + NOTREACHED(); + return nullptr; + } bool Update(const ScrollPaintPropertyNode& parent, State&& state) { bool parent_changed = SetParent(&parent);
diff --git a/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h b/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h index 0b2c4687..d5ced2c 100644 --- a/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h +++ b/third_party/blink/renderer/platform/graphics/paint/transform_paint_property_node.h
@@ -162,6 +162,10 @@ CompositingReason::kComboActiveAnimation; } + bool RequiresCompositingForRootScroller() const { + return state_.direct_compositing_reasons & CompositingReason::kRootScroller; + } + const CompositorElementId& GetCompositorElementId() const { return state_.compositor_element_id; }
diff --git a/third_party/blink/renderer/platform/image-decoders/ico/ico_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/ico/ico_image_decoder.cc index 79c81f1..15f37e77 100644 --- a/third_party/blink/renderer/platform/image-decoders/ico/ico_image_decoder.cc +++ b/third_party/blink/renderer/platform/image-decoders/ico/ico_image_decoder.cc
@@ -227,7 +227,10 @@ if (png_decoder->Size() != dir_entry.size_) return SetFailed(); + png_decoder->SetMemoryAllocator(frame_buffer_cache_[index].GetAllocator()); const auto* frame = png_decoder->DecodeFrameBufferAtIndex(0); + png_decoder->SetMemoryAllocator(nullptr); + if (frame) frame_buffer_cache_[index] = *frame; }
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 7d3776b..ea2c6c58 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -159,6 +159,7 @@ }, { name: "CallCaptureListenersAtCapturePhaseAtShadowHosts", + status: "stable", }, { name: "Canvas2dContextLostRestored",
diff --git a/third_party/blink/renderer/platform/transforms/transformation_matrix.h b/third_party/blink/renderer/platform/transforms/transformation_matrix.h index 9e61366a..76cf5e5 100644 --- a/third_party/blink/renderer/platform/transforms/transformation_matrix.h +++ b/third_party/blink/renderer/platform/transforms/transformation_matrix.h
@@ -27,6 +27,8 @@ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_TRANSFORMS_TRANSFORMATION_MATRIX_H_ #include <string.h> // for memcpy +#include <cmath> +#include <limits> #include <memory> #include "SkMatrix44.h" #include "build/build_config.h" @@ -35,6 +37,14 @@ #include "third_party/blink/renderer/platform/wtf/alignment.h" #include "third_party/blink/renderer/platform/wtf/allocator.h" +#if DCHECK_IS_ON() +namespace { +bool ApproximatelyEquals(const double& d1, const double& d2) { + return std::fabs(d1 - d2) < std::numeric_limits<double>::epsilon(); +} +} // namespace +#endif + namespace gfx { class Transform; } @@ -408,6 +418,27 @@ // details and discussion. void FlattenTo2d(); +#if DCHECK_IS_ON() + bool ApproximatelyEquals(const TransformationMatrix& m2) const { + return ::ApproximatelyEquals(matrix_[0][0], m2.matrix_[0][0]) && + ::ApproximatelyEquals(matrix_[0][1], m2.matrix_[0][1]) && + ::ApproximatelyEquals(matrix_[0][2], m2.matrix_[0][2]) && + ::ApproximatelyEquals(matrix_[0][3], m2.matrix_[0][3]) && + ::ApproximatelyEquals(matrix_[1][0], m2.matrix_[1][0]) && + ::ApproximatelyEquals(matrix_[1][1], m2.matrix_[1][1]) && + ::ApproximatelyEquals(matrix_[1][2], m2.matrix_[1][2]) && + ::ApproximatelyEquals(matrix_[1][3], m2.matrix_[1][3]) && + ::ApproximatelyEquals(matrix_[2][0], m2.matrix_[2][0]) && + ::ApproximatelyEquals(matrix_[2][1], m2.matrix_[2][1]) && + ::ApproximatelyEquals(matrix_[2][2], m2.matrix_[2][2]) && + ::ApproximatelyEquals(matrix_[2][3], m2.matrix_[2][3]) && + ::ApproximatelyEquals(matrix_[3][0], m2.matrix_[3][0]) && + ::ApproximatelyEquals(matrix_[3][1], m2.matrix_[3][1]) && + ::ApproximatelyEquals(matrix_[3][2], m2.matrix_[3][2]) && + ::ApproximatelyEquals(matrix_[3][3], m2.matrix_[3][3]); + } +#endif + bool operator==(const TransformationMatrix& m2) const { return matrix_[0][0] == m2.matrix_[0][0] && matrix_[0][1] == m2.matrix_[0][1] &&
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js index 1a7ab73..76daf2b 100644 --- a/third_party/closure_compiler/externs/file_manager_private.js +++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -945,6 +945,12 @@ entry, callback) {}; /** + * Returns list of paths shared with the crostini container. + * @param {function(!Array<!Entry>)} callback + */ +chrome.fileManagerPrivate.getCrostiniSharedPaths = function(callback) {}; + +/** * Begin installation of a Linux package. * @param {!Entry} entry * @param {function(!chrome.fileManagerPrivate.InstallLinuxPackageResponse,
diff --git a/third_party/fuchsia-sdk/BUILD.gn b/third_party/fuchsia-sdk/BUILD.gn index ed179d5..00f37bd 100644 --- a/third_party/fuchsia-sdk/BUILD.gn +++ b/third_party/fuchsia-sdk/BUILD.gn
@@ -231,7 +231,6 @@ "audio_device_enumerator.fidl", "audio_in.fidl", "audio_out.fidl", - "audio_renderer.fidl", "gain_control.fidl", "stream.fidl", "stream_type.fidl",
diff --git a/tools/grit/grit_rule.gni b/tools/grit/grit_rule.gni index 25f785593..c50895a 100644 --- a/tools/grit/grit_rule.gni +++ b/tools/grit/grit_rule.gni
@@ -66,7 +66,9 @@ # # configs (optional) # List of additional configs to be applied to the generated target. +# # deps (optional) +# testonly (optional) # visibility (optional) # Normal meaning. # @@ -321,6 +323,8 @@ grit_custom_target = target_name + "_grit" action(grit_custom_target) { + testonly = defined(invoker.testonly) && invoker.testonly + script = "//tools/grit/grit.py" inputs = [ @@ -429,6 +433,8 @@ # This is the thing that people actually link with, it must be named the # same as the argument the template was invoked with. source_set(target_name) { + testonly = defined(invoker.testonly) && invoker.testonly + # Since we generate a file, we need to be run before the targets that # depend on us. sources = grit_outputs
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index afd3252..627afa8 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -16764,6 +16764,7 @@ <int value="1276" label="WEBVIEWINTERNAL_SETSPATIALNAVIGATIONENABLED"/> <int value="1277" label="WEBVIEWINTERNAL_ISSPATIALNAVIGATIONENABLED"/> <int value="1278" label="FILEMANAGERPRIVATEINTERNAL_GETTHUMBNAIL"/> + <int value="1279" label="FILEMANAGERPRIVATEINTERNAL_GETCROSTINISHAREDPATHS"/> </enum> <enum name="ExtensionIconState">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index ac32801..2b6b5eb 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -3956,7 +3956,7 @@ </histogram> <histogram name="Arc.Supervision.Transition.Result" - enum="ArcSupervisionTransitionResult" expires_after="M71"> + enum="ArcSupervisionTransitionResult" expires_after="M74"> <owner>phongo@google.com</owner> <owner>brunokim@google.com</owner> <summary> @@ -9125,14 +9125,14 @@ </histogram> <histogram name="Blink.ResourceFetcher.StaleWhileRevalidate" - enum="BooleanAttempted" expires_after="M71"> + enum="BooleanAttempted" expires_after="M74"> <owner>dtapuska@chromium.org</owner> <owner>kenjibaheux@google.com</owner> <summary>Count of resources attempted Stale Revalidation.</summary> </histogram> <histogram name="Blink.ResourceFetcher.StaleWhileRevalidateDuration" units="ms" - expires_after="M71"> + expires_after="M74"> <owner>dtapuska@chromium.org</owner> <owner>kenjibaheux@google.com</owner> <summary>Duration of completed stale revalidation attempts.</summary> @@ -38845,6 +38845,18 @@ </summary> </histogram> +<histogram name="IOS.RestoreNavigationItemCount" units="rank"> + <owner>eugenebut@chromium.org</owner> + <summary> + [iOS] The number of items Navigation Manager was requested to restore. 100 + is logged when the number of navigation items is greater than 100. This is + just a requested count and actual number of restored items can be smaller. + Restoration is triggered in the following cases (the list is not + exhaustive): app cold start, remote tab was open, cookie were cleared, + recently closed tab was restored. + </summary> +</histogram> + <histogram name="IOS.SearchExtension.Action" enum="IOSSearchExtensionAction"> <owner>olivierrobin@chromium.org</owner> <summary>The action selected by the user in the Search Extension.</summary> @@ -38975,18 +38987,6 @@ </summary> </histogram> -<histogram name="IOSRestoreNavigationItemCount" units="rank"> - <owner>eugenebut@chromium.org</owner> - <summary> - [iOS] The number of items Navigation Manager was requested to restore. 100 - is logged when the number of navigation items is greater than 100. This is - just a requested count and actual number of restored items can be smaller. - Restoration is triggered in the following cases (the list is not - exhaustive): app cold start, remote tab was open, cookie were cleared, - recently closed tab was restored. - </summary> -</histogram> - <histogram name="IPC.AttachmentBrokerPrivileged.BrokerAttachmentError" enum="IPCAttachmentBrokerPrivilegedBrokerAttachmentError"> <owner>erikchen@chromium.org</owner> @@ -69401,7 +69401,7 @@ <summary> Total number of bytes that went towards loading ad resources for a single page over it's entire lifetime. This includes resources that did not finish - or were canceled. + or were canceled. Only recorded for pages with non-zero ad bytes. </summary> </histogram> @@ -69412,6 +69412,7 @@ <summary> Total number of network bytes that were used to load top-level ad resources on the page. This includes resources that did not finish or were canceled. + Only recorded for pages with non-zero ad bytes. </summary> </histogram> @@ -69421,7 +69422,8 @@ <owner>johnidel@chromium.org</owner> <summary> Total number of bytes that were used to load resources on the page. This - includes resources that did not finish loading or were canceled. + includes resources that did not finish loading or were canceled. Only + recorded for pages with non-zero ad bytes. </summary> </histogram> @@ -69433,7 +69435,7 @@ Total number of bytes that were used to load resources that did not finish loading on the page (e.g. ongoing video). This includes resource loads that were canceled or resource loads that were ongoing when the page was - destroyed. + destroyed. Only recorded for pages with non-zero ad bytes. </summary> </histogram>
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb index 6b18c511..4c569304 100644 --- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb +++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
@@ -39,7 +39,7 @@ <translation id="5331422999063554397">उलट रंग</translation> <translation id="5555153510860501336">उच्च तीव्रता अक्षम केली आहे</translation> <translation id="5558600050691192317">कीबोर्ड आदेश</translation> -<translation id="5594989420907487559">अॅनिमेशन केवळ एकदाच चालवा किंवा अॅनिमेशन पूर्णपणे अक्षम करा.</translation> +<translation id="5594989420907487559">अॅनिमेशन केवळ एकदाच रन करा किंवा अॅनिमेशन पूर्णपणे अक्षम करा.</translation> <translation id="5631241868147802353">डीफॉल्ट रंग योजना:</translation> <translation id="5650358096585648000">दृश्यमान अभिप्राय</translation> <translation id="5710185147685935461">वेबपृष्ठे वाचणे सोपे करण्यासाठी रंग योजना बदला किंवा उलट करा.</translation>
diff --git a/ui/aura/test/ui_controls_factory_ozone.cc b/ui/aura/test/ui_controls_factory_ozone.cc index 8538cfb0..c4bcb4c3 100644 --- a/ui/aura/test/ui_controls_factory_ozone.cc +++ b/ui/aura/test/ui_controls_factory_ozone.cc
@@ -11,7 +11,6 @@ #include "services/service_manager/public/cpp/connector.h" #include "services/ws/public/mojom/constants.mojom.h" #include "services/ws/public/mojom/event_injector.mojom.h" -#include "ui/aura/client/screen_position_client.h" #include "ui/aura/env.h" #include "ui/aura/mus/window_tree_client.h" #include "ui/aura/test/aura_test_utils.h" @@ -19,6 +18,8 @@ #include "ui/aura/test/ui_controls_factory_aura.h" #include "ui/aura/window_tree_host.h" #include "ui/base/test/ui_controls_aura.h" +#include "ui/display/display.h" +#include "ui/display/screen.h" #include "ui/events/event_utils.h" #include "ui/events/test/events_test_utils.h" @@ -122,15 +123,17 @@ bool SendMouseMoveNotifyWhenDone(long screen_x, long screen_y, base::OnceClosure closure) override { - gfx::Point root_location(screen_x, screen_y); - aura::client::ScreenPositionClient* screen_position_client = - aura::client::GetScreenPositionClient(host_->window()); - if (screen_position_client) { - screen_position_client->ConvertPointFromScreen(host_->window(), - &root_location); + // The location needs to be in display's coordinate. + gfx::Point display_location(screen_x, screen_y); + display::Display display; + if (!display::Screen::GetScreen()->GetDisplayWithDisplayId( + host_->GetDisplayId(), &display)) { + LOG(ERROR) << "Failed to see the display for " << host_->GetDisplayId(); + return false; } + display_location -= display.bounds().OffsetFromOrigin(); - gfx::Point host_location = root_location; + gfx::Point host_location = display_location; host_->ConvertDIPToPixels(&host_location); ui::EventType event_type; @@ -155,15 +158,17 @@ int button_state, base::OnceClosure closure, int accelerator_state) override { - gfx::Point root_location = host_->window()->env()->last_mouse_location(); - aura::client::ScreenPositionClient* screen_position_client = - aura::client::GetScreenPositionClient(host_->window()); - if (screen_position_client) { - screen_position_client->ConvertPointFromScreen(host_->window(), - &root_location); + // The location needs to be in display's coordinate. + gfx::Point display_location = host_->window()->env()->last_mouse_location(); + display::Display display; + if (!display::Screen::GetScreen()->GetDisplayWithDisplayId( + host_->GetDisplayId(), &display)) { + LOG(ERROR) << "Failed to see the display for " << host_->GetDisplayId(); + return false; } + display_location -= display.bounds().OffsetFromOrigin(); - gfx::Point host_location = root_location; + gfx::Point host_location = display_location; host_->ConvertDIPToPixels(&host_location); int changed_button_flag = 0;
diff --git a/ui/aura/window.h b/ui/aura/window.h index 18a6a36..990924a 100644 --- a/ui/aura/window.h +++ b/ui/aura/window.h
@@ -221,6 +221,7 @@ std::unique_ptr<WindowTargeter> SetEventTargeter( std::unique_ptr<WindowTargeter> targeter); WindowTargeter* targeter() { return targeter_.get(); } + const WindowTargeter* targeter() const { return targeter_.get(); } // Changes the bounds of the window. If present, the window's parent's // LayoutManager may adjust the bounds.
diff --git a/ui/compositor/host/host_context_factory_private.cc b/ui/compositor/host/host_context_factory_private.cc index 629153a..974d5cb 100644 --- a/ui/compositor/host/host_context_factory_private.cc +++ b/ui/compositor/host/host_context_factory_private.cc
@@ -71,13 +71,6 @@ compositor_data.display_client->GetBoundPtr(resize_task_runner_) .PassInterface(); -#if defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW) - gpu::SurfaceHandle surface_handle = compositor->widget(); -#else - // TODO(kylechar): Fix this when we support macOS. - gpu::SurfaceHandle surface_handle = gpu::kNullSurfaceHandle; -#endif - // Initialize ExternalBeginFrameController client if enabled. compositor_data.external_begin_frame_controller_client.reset(); if (compositor->external_begin_frames_enabled()) { @@ -92,7 +85,9 @@ } root_params->frame_sink_id = compositor->frame_sink_id(); - root_params->widget = surface_handle; +#if defined(GPU_SURFACE_HANDLE_IS_ACCELERATED_WINDOW) + root_params->widget = compositor->widget(); +#endif root_params->gpu_compositing = gpu_compositing; root_params->renderer_settings = renderer_settings_; @@ -128,8 +123,6 @@ void HostContextFactoryPrivate::UnconfigureCompositor(Compositor* compositor) { #if defined(OS_WIN) - // TODO(crbug.com/791660): Make sure that GpuProcessHost::SetChildSurface() - // doesn't crash the GPU process after parent is unregistered. gfx::RenderingWindowManager::GetInstance()->UnregisterParent( compositor->widget()); #endif
diff --git a/ui/compositor/test/in_process_context_provider.cc b/ui/compositor/test/in_process_context_provider.cc index d07ee21..ce0b4d54 100644 --- a/ui/compositor/test/in_process_context_provider.cc +++ b/ui/compositor/test/in_process_context_provider.cc
@@ -102,8 +102,7 @@ nullptr, /* surface */ !window_, /* is_offscreen */ window_, attribs_, gpu::SharedMemoryLimits(), gpu_memory_buffer_manager_, - image_factory_, nullptr /* gpu_channel_manager_delegate */, - base::ThreadTaskRunnerHandle::Get()); + image_factory_, base::ThreadTaskRunnerHandle::Get()); if (bind_result_ != gpu::ContextResult::kSuccess) return bind_result_;
diff --git a/ui/file_manager/file_manager/foreground/js/crostini.js b/ui/file_manager/file_manager/foreground/js/crostini.js index a7ba89f..7f20ea1 100644 --- a/ui/file_manager/file_manager/foreground/js/crostini.js +++ b/ui/file_manager/file_manager/foreground/js/crostini.js
@@ -13,21 +13,38 @@ Crostini.SHARED_PATHS_ = {}; /** - * Add entry as a shared path. + * Registers an entry as a shared path. * @param {!Entry} entry * @param {!VolumeManager} volumeManager */ -Crostini.addSharedPath = function(entry, volumeManager) { - const root = volumeManager.getLocationInfo(entry).rootType; - let paths = Crostini.SHARED_PATHS_[root]; +Crostini.registerSharedPath = function(entry, volumeManager) { + const info = volumeManager.getLocationInfo(entry); + if (!info) + return; + let paths = Crostini.SHARED_PATHS_[info.rootType]; if (!paths) { paths = {}; - Crostini.SHARED_PATHS_[root] = paths; + Crostini.SHARED_PATHS_[info.rootType] = paths; } paths[entry.fullPath] = true; }; /** + * Unregisters entry as a shared path. + * @param {!Entry} entry + * @param {!VolumeManager} volumeManager + */ +Crostini.unregisterSharedPath = function(entry, volumeManager) { + const info = volumeManager.getLocationInfo(entry); + if (!info) + return; + const paths = Crostini.SHARED_PATHS_[info.rootType]; + if (paths) { + delete paths[entry.fullPath]; + } +}; + +/** * Returns true if entry is shared. * @param {!Entry} entry * @param {!VolumeManager} volumeManager
diff --git a/ui/file_manager/file_manager/foreground/js/crostini_unittest.js b/ui/file_manager/file_manager/foreground/js/crostini_unittest.js index 798f6f5..46ebe8e 100644 --- a/ui/file_manager/file_manager/foreground/js/crostini_unittest.js +++ b/ui/file_manager/file_manager/foreground/js/crostini_unittest.js
@@ -18,12 +18,15 @@ assertFalse(Crostini.isPathShared(foo1, volumeManager)); - Crostini.addSharedPath(foo1, volumeManager); + Crostini.registerSharedPath(foo1, volumeManager); assertFalse(Crostini.isPathShared(root, volumeManager)); assertTrue(Crostini.isPathShared(foo1, volumeManager)); assertTrue(Crostini.isPathShared(foobar1, volumeManager)); - Crostini.addSharedPath(foobar2, volumeManager); + Crostini.registerSharedPath(foobar2, volumeManager); assertFalse(Crostini.isPathShared(foo2, volumeManager)); assertTrue(Crostini.isPathShared(foobar2, volumeManager)); + + Crostini.unregisterSharedPath(foobar2, volumeManager); + assertFalse(Crostini.isPathShared(foobar2, volumeManager)); }
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager.js b/ui/file_manager/file_manager/foreground/js/file_manager.js index 78b6df95..c9b7037 100644 --- a/ui/file_manager/file_manager/foreground/js/file_manager.js +++ b/ui/file_manager/file_manager/foreground/js/file_manager.js
@@ -1229,7 +1229,19 @@ str('LINUX_FILES_ROOT_LABEL'), VolumeManagerCommon.RootType.CROSTINI, true)) : null; + // Redraw the tree even if not enabled. This is required for testing. this.directoryTree.redraw(false); + + if (!enabled) + return; + + // Load any existing shared paths. + chrome.fileManagerPrivate.getCrostiniSharedPaths((entries) => { + for (let i = 0; i < entries.length; i++) { + Crostini.registerSharedPath(entries[i], assert(this.volumeManager_)); + } + }); + }); };
diff --git a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js index 9611bb1..6eb8adc 100644 --- a/ui/file_manager/file_manager/foreground/js/file_manager_commands.js +++ b/ui/file_manager/file_manager/foreground/js/file_manager_commands.js
@@ -1664,7 +1664,7 @@ 'Error sharing with linux: ' + chrome.runtime.lastError.message); } else { - Crostini.addSharedPath(dir, assert(fileManager.volumeManager)); + Crostini.registerSharedPath(dir, fileManager.volumeManager); } }); }
diff --git a/ui/file_manager/file_manager/test/BUILD.gn b/ui/file_manager/file_manager/test/BUILD.gn index 3afa8ae..d833944 100644 --- a/ui/file_manager/file_manager/test/BUILD.gn +++ b/ui/file_manager/file_manager/test/BUILD.gn
@@ -74,6 +74,7 @@ js_library("crostini") { deps = [ + "../foreground/js:crostini", "js:test_util", "//ui/webui/resources/js:webui_resource_test", ]
diff --git a/ui/file_manager/file_manager/test/crostini.js b/ui/file_manager/file_manager/test/crostini.js index 0ca0b22..1f8a5a04 100644 --- a/ui/file_manager/file_manager/test/crostini.js +++ b/ui/file_manager/file_manager/test/crostini.js
@@ -255,16 +255,15 @@ .then(() => { // Right-click 'photos' directory. // Check 'Share with Linux' is shown in menu. - test.selectFile('photos'); assertTrue( - test.fakeMouseRightClick('#file-list li[selected]'), + test.fakeMouseRightClick('#file-list [file-name="photos"]'), 'right-click photos'); return test.waitForElement( '#file-context-menu:not([hidden]) ' + '[command="#share-with-linux"]:not([hidden]):not([disabled])'); }) .then(() => { - // Click on 'Start with Linux'. + // Click on 'Share with Linux'. assertTrue( test.fakeMouseClick( '#file-context-menu [command="#share-with-linux"]'), @@ -280,8 +279,9 @@ // Verify right-click menu with 'Share with Linux' is not shown for: // * Files (not directory) +// * Any folder already shared // * Root Downloads folder -// * Any folder outside of downloads (e.g. crostini or drive) +// * Any folder outside of downloads (e.g. crostini or orive) crostini.testSharePathNotShown = (done) => { const myFiles = '#directory-tree .tree-item [root-type-icon="my_files"]'; const downloads = '#file-list li [file-type-icon="downloads"]'; @@ -289,14 +289,27 @@ const googleDrive = '#directory-tree .tree-item [volume-type-icon="drive"]'; const menuNoShareWithLinux = '#file-context-menu:not([hidden]) ' + '[command="#share-with-linux"][hidden][disabled="disabled"]'; + let alreadySharedPhotosDir; test.setupAndWaitUntilReady() .then(() => { // Right-click 'hello.txt' file. // Check 'Share with Linux' is not shown in menu. - test.selectFile('hello.txt'); assertTrue( - test.fakeMouseRightClick('#file-list li[selected]'), + test.fakeMouseRightClick('#file-list [file-name="hello.txt"]'), + 'right-click hello.txt'); + return test.waitForElement(menuNoShareWithLinux); + }) + .then(() => { + // Set a folder as already shared. + alreadySharedPhotosDir = + mockVolumeManager + .getCurrentProfileVolumeInfo( + VolumeManagerCommon.VolumeType.DOWNLOADS) + .fileSystem.entries['/photos']; + Crostini.registerSharedPath(alreadySharedPhotosDir, mockVolumeManager); + assertTrue( + test.fakeMouseRightClick('#file-list [file-name="photos"]'), 'right-click hello.txt'); return test.waitForElement(menuNoShareWithLinux); }) @@ -323,9 +336,8 @@ }) .then(() => { // Check 'Share with Linux' is not shown in menu. - test.selectFile('A'); assertTrue( - test.fakeMouseRightClick('#file-list li[selected]'), + test.fakeMouseRightClick('#file-list [file-name="A"]'), 'right-click directory A'); return test.waitForElement(menuNoShareWithLinux); }) @@ -340,9 +352,8 @@ }) .then(() => { // Check 'Share with Linux' is not shown in menu. - test.selectFile('photos'); assertTrue( - test.fakeMouseRightClick('#file-list li[selected]'), + test.fakeMouseRightClick('#file-list [file-name="photos"]'), 'right-click photos'); return test.waitForElement(menuNoShareWithLinux); }) @@ -353,6 +364,9 @@ '#directory-tree .tree-item [root-type-icon="crostini"]'); }) .then(() => { + // Clear Crostini shared folders. + Crostini.unregisterSharedPath( + alreadySharedPhotosDir, mockVolumeManager); done(); }); };
diff --git a/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js b/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js index e056ad5..1e36a99 100644 --- a/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js +++ b/ui/file_manager/file_manager/test/js/chrome_file_manager_private_test_impl.js
@@ -89,6 +89,10 @@ } setTimeout(callback, 0, results); }, + getCrostiniSharedPaths: (callback) => { + // Returns Entry[]. + setTimeout(callback, 0, []); + }, getPreferences: (callback) => { setTimeout(callback, 0, chrome.fileManagerPrivate.preferences_); },
diff --git a/ui/file_manager/file_manager/test/js/strings.js b/ui/file_manager/file_manager/test/js/strings.js index e8e5c9a..1c2460a 100644 --- a/ui/file_manager/file_manager/test/js/strings.js +++ b/ui/file_manager/file_manager/test/js/strings.js
@@ -9,6 +9,9 @@ // Extend with additional fields not found in grdp files. Object.setPrototypeOf(loadTimeData.data_, { + 'CHROMEOS_RELEASE_BOARD': 'unknown', + 'GOOGLE_DRIVE_REDEEM_URL': 'http://www.google.com/intl/en/chrome/devices' + + '/goodies.html?utm_source=filesapp&utm_medium=banner&utm_campaign=gsg', 'HIDE_SPACE_INFO': false, 'UI_LOCALE': 'en_US', 'language': 'en-US',
diff --git a/ui/file_manager/integration_tests/file_manager/create_new_folder.js b/ui/file_manager/integration_tests/file_manager/create_new_folder.js index c5c9225b..7a6e9a4 100644 --- a/ui/file_manager/integration_tests/file_manager/create_new_folder.js +++ b/ui/file_manager/integration_tests/file_manager/create_new_folder.js
@@ -199,20 +199,26 @@ testcase.createFolderNestedDownloads = function() { let appId; - const promise = new Promise(function(resolve) { - setupAndWaitUntilReady( - null, RootPath.DOWNLOADS, resolve, BASIC_LOCAL_ENTRY_SET, []); - }).then(function(results) { - appId = results.windowId; - return expandRoot(appId, TREEITEM_DOWNLOADS); - }).then(function() { - return navigateWithDirectoryTree(appId, '/photos', 'Downloads'); - }).then(function() { - return remoteCall.waitForFiles( - appId, [], {ignoreLastModifiedTime: true}); - }).then(function() { - return createNewFolder(appId, [], TREEITEM_DOWNLOADS); - }); + const promise = + new Promise(function(resolve) { + setupAndWaitUntilReady( + null, RootPath.DOWNLOADS, resolve, BASIC_LOCAL_ENTRY_SET, []); + }) + .then(function(results) { + appId = results.windowId; + return expandRoot(appId, TREEITEM_DOWNLOADS); + }) + .then(function() { + return remoteCall.navigateWithDirectoryTree( + appId, '/photos', 'Downloads'); + }) + .then(function() { + return remoteCall.waitForFiles( + appId, [], {ignoreLastModifiedTime: true}); + }) + .then(function() { + return createNewFolder(appId, [], TREEITEM_DOWNLOADS); + }); testPromise(promise); };
diff --git a/ui/file_manager/integration_tests/file_manager/crostini.js b/ui/file_manager/integration_tests/file_manager/crostini.js index 3d96e3d..bf70c95 100644 --- a/ui/file_manager/integration_tests/file_manager/crostini.js +++ b/ui/file_manager/integration_tests/file_manager/crostini.js
@@ -5,8 +5,8 @@ 'use strict'; testcase.mountCrostini = function() { - const fake = '#directory-tree .tree-item [root-type-icon="crostini"]'; - const real = '#directory-tree .tree-item [volume-type-icon="crostini"]'; + const fakeLinuxFiles = '#directory-tree [root-type-icon="crostini"]'; + const realLinxuFiles = '#directory-tree [volume-type-icon="crostini"]'; let appId; StepsRunner.run([ @@ -14,28 +14,86 @@ setupAndWaitUntilReady( null, RootPath.DOWNLOADS, this.next, [ENTRIES.hello], []); }, + // Add entries to crostini volume, but do not mount. function(results) { - // Add entries to crostini volume, but do not mount. appId = results.windowId; addEntries(['crostini'], BASIC_CROSTINI_ENTRY_SET, this.next); }, + // Linux files fake root is shown. function() { - // Linux files fake root is shown. - remoteCall.waitForElement(appId, fake).then(this.next); + remoteCall.waitForElement(appId, fakeLinuxFiles).then(this.next); }, + // Mount crostini, and ensure real root and files are shown. function() { - // Mount crostini, and ensure real root and files are shown. - remoteCall.callRemoteTestUtil('fakeMouseClick', appId, [fake]); - remoteCall.waitForElement(appId, real).then(this.next); + remoteCall.callRemoteTestUtil('fakeMouseClick', appId, [fakeLinuxFiles]); + remoteCall.waitForElement(appId, realLinxuFiles).then(this.next); }, function() { const files = TestEntryInfo.getExpectedRows(BASIC_CROSTINI_ENTRY_SET); remoteCall.waitForFiles(appId, files).then(this.next); }, + // Unmount and ensure fake root is shown. function() { // Unmount and ensure fake root is shown. remoteCall.callRemoteTestUtil('unmount', null, ['crostini']); - remoteCall.waitForElement(appId, fake).then(this.next); + remoteCall.waitForElement(appId, fakeLinuxFiles).then(this.next); + }, + function() { + checkIfNoErrorsOccured(this.next); + }, + ]); +}; + +testcase.sharePathWithCrostini = function() { + const fakeLinuxFiles = '#directory-tree [root-type-icon="crostini"]'; + const realLinuxFiles = '#directory-tree [volume-type-icon="crostini"]'; + const downloads = '#directory-tree [volume-type-icon="downloads"]'; + const photos = '#file-list [file-name="photos"]'; + const menuShareWithLinux = '#file-context-menu:not([hidden]) ' + + '[command="#share-with-linux"]:not([hidden]):not([disabled])'; + const menuNoShareWithLinux = '#file-context-menu:not([hidden]) ' + + '[command="#share-with-linux"][hidden][disabled="disabled"]'; + let appId; + + StepsRunner.run([ + function() { + setupAndWaitUntilReady( + null, RootPath.DOWNLOADS, this.next, [ENTRIES.photos], []); + }, + // Ensure fake Linux files root is shown. + function(results) { + appId = results.windowId; + remoteCall.waitForElement(appId, fakeLinuxFiles).then(this.next); + }, + // Mount crostini, and ensure real root is shown. + function() { + remoteCall.callRemoteTestUtil('fakeMouseClick', appId, [fakeLinuxFiles]); + remoteCall.waitForElement(appId, realLinuxFiles).then(this.next); + }, + // Go back to downloads, wait for photos dir to be shown. + function(results) { + remoteCall.callRemoteTestUtil('fakeMouseClick', appId, [downloads]); + remoteCall.waitForElement(appId, photos).then(this.next); + }, + // Right-click 'photos' directory, ensure 'Share with Linux' is shown. + function(results) { + remoteCall.callRemoteTestUtil('fakeMouseRightClick', appId, [photos]); + remoteCall.waitForElement(appId, menuShareWithLinux).then(this.next); + }, + // Click on 'Share with Linux', ensure menu is closed. + function() { + remoteCall.callRemoteTestUtil( + 'fakeMouseClick', appId, + ['#file-context-menu [command="#share-with-linux"]'], this.next); + remoteCall.waitForElement(appId, '#file-context-menu[hidden]') + .then(this.next); + }, + // Right-click 'photos' directory, ensure 'Share with Linux' is not shown. + function() { + remoteCall.callRemoteTestUtil( + 'fakeMouseRightClick', appId, ['#file-list [file-name="photos"'], + this.next); + remoteCall.waitForElement(appId, menuNoShareWithLinux).then(this.next); }, function() { checkIfNoErrorsOccured(this.next);
diff --git a/ui/file_manager/integration_tests/file_manager/directory_tree_context_menu.js b/ui/file_manager/integration_tests/file_manager/directory_tree_context_menu.js index 86a90e0..413060b 100644 --- a/ui/file_manager/integration_tests/file_manager/directory_tree_context_menu.js +++ b/ui/file_manager/integration_tests/file_manager/directory_tree_context_menu.js
@@ -45,79 +45,6 @@ })]); /** - * Expands tree item. - */ -function expandTreeItemInDirectoryTree(windowId, query) { - return remoteCall.waitForElement(windowId, query).then(function() { - return remoteCall.callRemoteTestUtil('queryAllElements', windowId, - [`${query}[expanded]`]).then(function(elements) { - // If it's already expanded, do nothing. - if (elements.length > 0) - return; - - // Focus to directory tree. - return remoteCall.callRemoteTestUtil( - 'focus', windowId, ['#directory-tree']).then(function() { - // Expand download volume. - return remoteCall.callRemoteTestUtil('fakeMouseClick', windowId, - [`${query} .expand-icon`]); - }); - }); - }); -} - -/** - * Expands download volume in directory tree. - */ -function expandDownloadVolumeInDirectoryTree(windowId) { - return expandTreeItemInDirectoryTree( - windowId, '[volume-type-for-testing="downloads"]'); -} - -/** - * Expands directory tree for specified path. - * TODO(yawano): Move this to remote_call.js - */ -function expandDirectoryTreeFor(windowId, path) { - return expandDirectoryTreeForInternal_(windowId, path.split('/'), 0); -} - -/** - * Internal function for expanding directory tree for specified path. - */ -function expandDirectoryTreeForInternal_(windowId, components, index) { - if (index >= components.length - 1) - return Promise.resolve(); - - if (index === 0) { - return expandDownloadVolumeInDirectoryTree(windowId).then(function() { - return expandDirectoryTreeForInternal_(windowId, components, index + 1); - }); - } - - var path = `/${components.slice(1, index + 1).join('/')}`; - return expandTreeItemInDirectoryTree( - windowId, `[full-path-for-testing="${path}"]`).then(function() { - return expandDirectoryTreeForInternal_(windowId, components, index + 1); - }); -} - -/** - * Navigates to specified directory on Download volume by using directory tree. - */ -function navigateWithDirectoryTree(windowId, path, rootLabel) { - return expandDirectoryTreeFor(windowId, path).then(function() { - // Select target path. - return remoteCall.callRemoteTestUtil('fakeMouseClick', windowId, - [`[full-path-for-testing="${path}"]`]); - }).then(function() { - // Wait until the Files app is navigated to the path. - return remoteCall.waitUntilCurrentDirectoryIsChanged( - windowId, `/${rootLabel}${path}`); - }); -} - -/** * Clicks context menu item of id in directory tree. */ function clickDirectoryTreeContextMenuItem(windowId, path, id) { @@ -148,20 +75,26 @@ */ function navigateToDestinationDirectoryAndTestPaste(windowId) { // Navigates to destination directory. - return navigateWithDirectoryTree(windowId, '/destination', 'Downloads') - .then(function() { - // Confirm files before paste. - return remoteCall.waitForFiles(windowId, ITEMS_IN_DEST_DIR_BEFORE_PASTE, - {ignoreLastModifiedTime: true}); - }).then(function() { - // Paste - return remoteCall.callRemoteTestUtil('fakeKeyDown', windowId, - ['body', 'v', 'U+0056' /* v */, true /* ctrl */, false, false]); - }).then(function() { - // Confirm the photos directory is pasted correctly. - return remoteCall.waitForFiles(windowId, ITEMS_IN_DEST_DIR_AFTER_PASTE, - {ignoreLastModifiedTime: true}); - }); + return remoteCall + .navigateWithDirectoryTree(windowId, '/destination', 'Downloads') + .then(function() { + // Confirm files before paste. + return remoteCall.waitForFiles( + windowId, ITEMS_IN_DEST_DIR_BEFORE_PASTE, + {ignoreLastModifiedTime: true}); + }) + .then(function() { + // Paste + return remoteCall.callRemoteTestUtil( + 'fakeKeyDown', windowId, + ['body', 'v', 'U+0056' /* v */, true /* ctrl */, false, false]); + }) + .then(function() { + // Confirm the photos directory is pasted correctly. + return remoteCall.waitForFiles( + windowId, ITEMS_IN_DEST_DIR_AFTER_PASTE, + {ignoreLastModifiedTime: true}); + }); } /** @@ -193,7 +126,8 @@ var windowId; return setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); }).then(function() { return renamePhotosDirectoryTo(windowId, 'New photos', useKeyboardShortcut); }).then(function() { @@ -210,7 +144,8 @@ var windowId; return setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); }).then(function() { return renamePhotosDirectoryTo(windowId, newName, false); }).then(function() { @@ -229,9 +164,10 @@ windowId = id; if (changeCurrentDirectory) - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); else - return expandDownloadVolumeInDirectoryTree(windowId); + return remoteCall.expandDownloadVolumeInDirectoryTree(windowId); }).then(function() { if (useKeyboardShortcut) { return remoteCall.callRemoteTestUtil('fakeKeyDown', windowId, @@ -259,7 +195,8 @@ windowId, changeCurrentDirectory ? '/Downloads/photos' : '/Downloads'); }).then(function() { // Confirm that new directory is actually created by navigating to it. - return navigateWithDirectoryTree(windowId, '/photos/test', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos/test', 'Downloads'); }); } @@ -270,7 +207,8 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); }).then(function() { return clickDirectoryTreeContextMenuItem(windowId, '/photos', 'copy'); }).then(function() { @@ -285,7 +223,8 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); }).then(function() { // Press Ctrl+C. return remoteCall.callRemoteTestUtil('fakeKeyDown', windowId, @@ -302,7 +241,7 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return expandDownloadVolumeInDirectoryTree(windowId); + return remoteCall.expandDownloadVolumeInDirectoryTree(windowId); }).then(function() { return clickDirectoryTreeContextMenuItem(windowId, '/photos', 'copy'); }).then(function() { @@ -317,7 +256,8 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); }).then(function() { return clickDirectoryTreeContextMenuItem(windowId, '/photos', 'cut'); }).then(function() { @@ -336,7 +276,8 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); }).then(function() { // Press Ctrl+X. return remoteCall.callRemoteTestUtil('fakeKeyDown', windowId, @@ -357,7 +298,7 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return expandDownloadVolumeInDirectoryTree(windowId); + return remoteCall.expandDownloadVolumeInDirectoryTree(windowId); }).then(function() { return clickDirectoryTreeContextMenuItem(windowId, '/photos', 'cut'); }).then(function() { @@ -373,38 +314,55 @@ */ testcase.dirPasteWithContextMenu = function() { var windowId; - testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { - // Copy photos directory as a test data. - windowId = id; - return navigateWithDirectoryTree(windowId, '/photos', 'Downloads'); - }).then(function() { - return remoteCall.callRemoteTestUtil('fakeKeyDown', windowId, - ['body', 'c', 'U+0043' /* c */, true /* ctrl */, false, false]); - }).then(function() { - return navigateWithDirectoryTree(windowId, '/destination', 'Downloads'); - }).then(function() { - // Confirm files before paste. - return remoteCall.waitForFiles(windowId, ITEMS_IN_DEST_DIR_BEFORE_PASTE, - {ignoreLastModifiedTime: true}); - }).then(function() { - return clickDirectoryTreeContextMenuItem( - windowId, '/destination', 'paste-into-folder'); - }).then(function() { - // Confirm the photos directory is pasted correctly. - return remoteCall.waitForFiles(windowId, ITEMS_IN_DEST_DIR_AFTER_PASTE, - {ignoreLastModifiedTime: true}); - }).then(function() { - // Expand the directory tree. - return remoteCall.waitForElement(windowId, - '[full-path-for-testing="/destination"] .expand-icon'); - }).then(function() { - return remoteCall.callRemoteTestUtil('fakeMouseClick', windowId, - ['[full-path-for-testing="/destination"] .expand-icon']); - }).then(function() { - // Confirm the copied directory is added to the directory tree. - return remoteCall.waitForElement(windowId, - '[full-path-for-testing="/destination/photos"]'); - })); + testPromise( + setupForDirectoryTreeContextMenuTest() + .then(function(id) { + // Copy photos directory as a test data. + windowId = id; + return remoteCall.navigateWithDirectoryTree( + windowId, '/photos', 'Downloads'); + }) + .then(function() { + return remoteCall.callRemoteTestUtil( + 'fakeKeyDown', windowId, + ['body', 'c', 'U+0043' /* c */, true /* ctrl */, false, false]); + }) + .then(function() { + return remoteCall.navigateWithDirectoryTree( + windowId, '/destination', 'Downloads'); + }) + .then(function() { + // Confirm files before paste. + return remoteCall.waitForFiles( + windowId, ITEMS_IN_DEST_DIR_BEFORE_PASTE, + {ignoreLastModifiedTime: true}); + }) + .then(function() { + return clickDirectoryTreeContextMenuItem( + windowId, '/destination', 'paste-into-folder'); + }) + .then(function() { + // Confirm the photos directory is pasted correctly. + return remoteCall.waitForFiles( + windowId, ITEMS_IN_DEST_DIR_AFTER_PASTE, + {ignoreLastModifiedTime: true}); + }) + .then(function() { + // Expand the directory tree. + return remoteCall.waitForElement( + windowId, + '[full-path-for-testing="/destination"] .expand-icon'); + }) + .then(function() { + return remoteCall.callRemoteTestUtil( + 'fakeMouseClick', windowId, + ['[full-path-for-testing="/destination"] .expand-icon']); + }) + .then(function() { + // Confirm the copied directory is added to the directory tree. + return remoteCall.waitForElement( + windowId, '[full-path-for-testing="/destination/photos"]'); + })); }; /** @@ -414,7 +372,7 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return expandDownloadVolumeInDirectoryTree(windowId); + return remoteCall.expandDownloadVolumeInDirectoryTree(windowId); }).then(function() { return clickDirectoryTreeContextMenuItem(windowId, '/photos', 'copy'); }).then(function() { @@ -456,7 +414,7 @@ var windowId; testPromise(setupForDirectoryTreeContextMenuTest().then(function(id) { windowId = id; - return expandDownloadVolumeInDirectoryTree(windowId); + return remoteCall.expandDownloadVolumeInDirectoryTree(windowId); }).then(function() { return remoteCall.waitForElement( windowId, '[full-path-for-testing="/photos"]');
diff --git a/ui/file_manager/integration_tests/remote_call.js b/ui/file_manager/integration_tests/remote_call.js index aa8b80f..e45bc58 100644 --- a/ui/file_manager/integration_tests/remote_call.js +++ b/ui/file_manager/integration_tests/remote_call.js
@@ -437,6 +437,104 @@ }; /** + * Expands tree item. + */ +RemoteCallFilesApp.prototype.expandTreeItemInDirectoryTree = function( + windowId, query) { + return this.waitForElement(windowId, query) + .then(() => { + return this.callRemoteTestUtil( + 'queryAllElements', windowId, [`${query}[expanded]`]); + }) + .then(elements => { + // If it's already expanded, do nothing. + if (elements.length > 0) + return; + + // Focus to directory tree. + return this.callRemoteTestUtil('focus', windowId, ['#directory-tree']) + .then(() => { + // Expand directory volume. + return this.callRemoteTestUtil( + 'fakeMouseClick', windowId, [`${query} .expand-icon`]); + }); + }); +}; + +/** + * Expands directory tree for specified path. + */ +RemoteCallFilesApp.prototype.expandDirectoryTreeFor = function( + windowId, path, volumeType = 'downloads') { + return this.expandDirectoryTreeForInternal_( + windowId, path.split('/'), 0, volumeType); +}; + +/** + * Internal function for expanding directory tree for specified path. + */ +RemoteCallFilesApp.prototype.expandDirectoryTreeForInternal_ = function( + windowId, components, index, volumeType) { + if (index >= components.length - 1) + return Promise.resolve(); + + if (index === 0) { + return this.expandVolumeInDirectoryTree(windowId, volumeType).then(() => { + return this.expandDirectoryTreeForInternal_( + windowId, components, index + 1, volumeType); + }); + } + const path = `/${components.slice(1, index + 1).join('/')}`; + return this + .expandTreeItemInDirectoryTree( + windowId, `[full-path-for-testing="${path}"]`) + .then(() => { + return this.expandDirectoryTreeForInternal_( + windowId, components, index + 1, volumeType); + }); +}; + +/** + * Expands download volume in directory tree. + */ +RemoteCallFilesApp.prototype.expandDownloadVolumeInDirectoryTree = function( + windowId) { + return this.expandVolumeInDirectoryTree(windowId, 'downloads'); +}; + +/** + * Expands download volume in directory tree. + */ +RemoteCallFilesApp.prototype.expandVolumeInDirectoryTree = function( + windowId, volumeType) { + return this.expandTreeItemInDirectoryTree( + windowId, `[volume-type-for-testing="${volumeType}"]`); +}; + +/** + * Navigates to specified directory on the specified volume by using directory + * tree. + */ +RemoteCallFilesApp.prototype.navigateWithDirectoryTree = function( + windowId, path, rootLabel, volumeType = 'downloads') { + return this.expandDirectoryTreeFor(windowId, path, volumeType) + .then(() => { + // Select target path. + return this.callRemoteTestUtil( + 'fakeMouseClick', windowId, [`[full-path-for-testing="${path}"]`]); + }) + .then(() => { + if (rootLabel === 'My Drive') { + path = path.replace(/^\/root\//, '/'); + } + + // Wait until the Files app is navigated to the path. + return this.waitUntilCurrentDirectoryIsChanged( + windowId, `/${rootLabel}${path}`); + }); +}; + +/** * Class to manipulate the window in the remote extension. * * @param {string} extensionId ID of extension to be manipulated.
diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc index 2313b1f..dd97b99 100644 --- a/ui/gl/gl_gl_api_implementation.cc +++ b/ui/gl/gl_gl_api_implementation.cc
@@ -80,25 +80,6 @@ } } - if (type == GL_FLOAT && version->is_angle && version->is_es && - version->major_version == 2) { - // It's possible that the texture is using a sized internal format, and - // ANGLE exposing GLES2 API doesn't support those. - // TODO(oetuaho@nvidia.com): Remove these conversions once ANGLE has the - // support. - // http://code.google.com/p/angleproject/issues/detail?id=556 - switch (format) { - case GL_RGBA: - gl_internal_format = GL_RGBA; - break; - case GL_RGB: - gl_internal_format = GL_RGB; - break; - default: - break; - } - } - if (version->IsAtLeastGL(2, 1) || version->IsAtLeastGLES(3, 0)) { switch (internal_format) { case GL_SRGB_EXT:
diff --git a/ui/ozone/demo/simple_renderer_factory.cc b/ui/ozone/demo/simple_renderer_factory.cc index 7345ab9..328cfe4 100644 --- a/ui/ozone/demo/simple_renderer_factory.cc +++ b/ui/ozone/demo/simple_renderer_factory.cc
@@ -18,6 +18,7 @@ #if BUILDFLAG(ENABLE_VULKAN) #include "gpu/vulkan/init/vulkan_factory.h" +#include "gpu/vulkan/vulkan_surface.h" #include "ui/ozone/demo/vulkan_overlay_renderer.h" #include "ui/ozone/demo/vulkan_renderer.h" #endif @@ -102,7 +103,10 @@ std::move(overlay_surface), surface_factory_ozone, vulkan_implementation_.get(), widget, size); } - return std::make_unique<VulkanRenderer>(vulkan_implementation_.get(), + std::unique_ptr<gpu::VulkanSurface> vulkan_surface = + vulkan_implementation_->CreateViewSurface(widget); + return std::make_unique<VulkanRenderer>(std::move(vulkan_surface), + vulkan_implementation_.get(), widget, size); } #endif
diff --git a/ui/ozone/demo/vulkan_overlay_renderer.cc b/ui/ozone/demo/vulkan_overlay_renderer.cc index 4bfc3167..5f4d6125 100644 --- a/ui/ozone/demo/vulkan_overlay_renderer.cc +++ b/ui/ozone/demo/vulkan_overlay_renderer.cc
@@ -15,7 +15,6 @@ #include "gpu/vulkan/vulkan_device_queue.h" #include "gpu/vulkan/vulkan_function_pointers.h" #include "gpu/vulkan/vulkan_implementation.h" -#include "gpu/vulkan/vulkan_render_pass.h" #include "gpu/vulkan/vulkan_surface.h" #include "gpu/vulkan/vulkan_swap_chain.h" #include "ui/display/types/display_snapshot.h" @@ -48,6 +47,7 @@ VulkanOverlayRenderer::~VulkanOverlayRenderer() { DestroyBuffers(); + DestroyRenderPass(); command_pool_->Destroy(); command_pool_.reset(); device_queue_->Destroy(); @@ -64,35 +64,44 @@ } VkAttachmentDescription render_pass_attachments[] = {{ - .format = VK_FORMAT_B8G8R8A8_SRGB, - .samples = VK_SAMPLE_COUNT_1_BIT, - .loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR, - .storeOp = VK_ATTACHMENT_STORE_OP_STORE, - .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED, - .finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, + /* .flags = */ 0, + /* .format = */ VK_FORMAT_B8G8R8A8_SRGB, + /* .samples = */ VK_SAMPLE_COUNT_1_BIT, + /* .loadOp = */ VK_ATTACHMENT_LOAD_OP_CLEAR, + /* .storeOp = */ VK_ATTACHMENT_STORE_OP_STORE, + /* .stencilLoadOp = */ VK_ATTACHMENT_LOAD_OP_DONT_CARE, + /* .stencilStoreOp = */ VK_ATTACHMENT_STORE_OP_DONT_CARE, + /* .initialLayout = */ VK_IMAGE_LAYOUT_UNDEFINED, + /* .finalLayout = */ VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, }}; VkAttachmentReference color_attachment_references[] = { - {.attachment = 0, .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}}; + {/* .attachment = */ 0, + /* .layout = */ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}}; VkSubpassDescription render_pass_subpasses[] = {{ - .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS, - .inputAttachmentCount = 0, - .colorAttachmentCount = base::size(color_attachment_references), - .pColorAttachments = color_attachment_references, - .pResolveAttachments = nullptr, - .pDepthStencilAttachment = nullptr, - .preserveAttachmentCount = 0, - .pPreserveAttachments = nullptr, + /* .flags = */ 0, + /* .pipelineBindPoint = */ VK_PIPELINE_BIND_POINT_GRAPHICS, + /* .inputAttachmentCount = */ 0, + /* .pInputAttachments = */ nullptr, + /* .colorAttachmentCount = */ base::size(color_attachment_references), + /* .pColorAttachments = */ color_attachment_references, + /* .pResolveAttachments = */ nullptr, + /* .pDepthStencilAttachment = */ nullptr, + /* .preserveAttachmentCount = */ 0, + /* .pPreserveAttachments = */ nullptr, }}; VkRenderPassCreateInfo render_pass_create_info = { - .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, - .attachmentCount = base::size(render_pass_attachments), - .pAttachments = render_pass_attachments, - .subpassCount = base::size(render_pass_subpasses), - .pSubpasses = render_pass_subpasses, - .dependencyCount = 0, + /* .sType = */ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, + /* .pNext = */ nullptr, + /* .flags = */ 0, + /* .attachmentCount = */ base::size(render_pass_attachments), + /* .pAttachments = */ render_pass_attachments, + /* .subpassCount = */ base::size(render_pass_subpasses), + /* .pSubpasses = */ render_pass_subpasses, + /* .dependencyCount = */ 0, + /* .pDependencies = */ nullptr, }; CHECK_EQ(vkCreateRenderPass(device_queue_->GetVulkanDevice(), @@ -109,6 +118,14 @@ return true; } +void VulkanOverlayRenderer::DestroyRenderPass() { + if (render_pass_ == VK_NULL_HANDLE) + return; + + vkDestroyRenderPass(device_queue_->GetVulkanDevice(), render_pass_, nullptr); + render_pass_ = VK_NULL_HANDLE; +} + void VulkanOverlayRenderer::DestroyBuffers() { VkDevice vk_device = device_queue_->GetVulkanDevice(); @@ -146,7 +163,7 @@ TRACE_EVENT0("ozone", "VulkanOverlayRenderer::RenderFrame"); VkClearValue clear_value = { - .color = {.float32 = {.5f, 1.f - NextFraction(), .5f, 1.f}}}; + /* .color = */ {/* .float32 = */ {.5f, 1.f - NextFraction(), .5f, 1.f}}}; const Buffer& buffer = *buffers_[next_buffer_]; next_buffer_++; @@ -159,14 +176,26 @@ { gpu::ScopedSingleUseCommandBufferRecorder recorder(command_buffer); - VkRenderPassBeginInfo begin_info = {}; - begin_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; - begin_info.renderPass = render_pass_; - begin_info.framebuffer = buffer.vk_framebuffer(); - begin_info.renderArea.extent.width = buffer.size().width(); - begin_info.renderArea.extent.height = buffer.size().height(); - begin_info.clearValueCount = 1; - begin_info.pClearValues = &clear_value; + VkRenderPassBeginInfo begin_info = { + /* .sType = */ VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, + /* .pNext = */ nullptr, + /* .renderPass = */ render_pass_, + /* .framebuffer = */ buffer.vk_framebuffer(), + /* .renderArea = */ + { + /* .offset = */ { + /* .x = */ 0, + /* .y = */ 0, + }, + /* .extent = */ + { + /* .width = */ buffer.size().width(), + /* .height = */ buffer.size().height(), + }, + }, + /* .clearValueCount = */ 1, + /* .pClearValues = */ &clear_value, + }; vkCmdBeginRenderPass(recorder.handle(), &begin_info, VK_SUBPASS_CONTENTS_INLINE); @@ -303,25 +332,27 @@ } VkImageViewCreateInfo vk_image_view_create_info = { - .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, - .image = vk_image, - .viewType = VK_IMAGE_VIEW_TYPE_2D, - .format = VK_FORMAT_B8G8R8A8_SRGB, - .components = - { - .r = VK_COMPONENT_SWIZZLE_IDENTITY, - .b = VK_COMPONENT_SWIZZLE_IDENTITY, - .g = VK_COMPONENT_SWIZZLE_IDENTITY, - .a = VK_COMPONENT_SWIZZLE_IDENTITY, - }, - .subresourceRange = - { - .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, - .baseMipLevel = 0, - .levelCount = 1, - .baseArrayLayer = 0, - .layerCount = 1, - }, + /* .sType = */ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + /* .pNext = */ nullptr, + /* .flags = */ 0, + /* .image = */ vk_image, + /* .viewType = */ VK_IMAGE_VIEW_TYPE_2D, + /* .format = */ VK_FORMAT_B8G8R8A8_SRGB, + /* .components = */ + { + /* .r = */ VK_COMPONENT_SWIZZLE_IDENTITY, + /* .b = */ VK_COMPONENT_SWIZZLE_IDENTITY, + /* .g = */ VK_COMPONENT_SWIZZLE_IDENTITY, + /* .a = */ VK_COMPONENT_SWIZZLE_IDENTITY, + }, + /* .subresourceRange = */ + { + /* .aspectMask = */ VK_IMAGE_ASPECT_COLOR_BIT, + /* .baseMipLevel = */ 0, + /* .levelCount = */ 1, + /* .baseArrayLayer = */ 0, + /* .layerCount = */ 1, + }, }; VkResult result; @@ -332,13 +363,15 @@ LOG(FATAL) << "Failed to create a Vulkan image view."; } VkFramebufferCreateInfo vk_framebuffer_create_info = { - .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, - .renderPass = vk_render_pass, - .attachmentCount = 1, - .pAttachments = &vk_image_view, - .width = size.width(), - .height = size.height(), - .layers = 1, + /* .sType = */ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, + /* .pNext = */ nullptr, + /* .flags = */ 0, + /* .renderPass = */ vk_render_pass, + /* .attachmentCount = */ 1, + /* .pAttachments = */ &vk_image_view, + /* .width = */ size.width(), + /* .height = */ size.height(), + /* .layers = */ 1, }; VkFramebuffer vk_framebuffer = VK_NULL_HANDLE;
diff --git a/ui/ozone/demo/vulkan_overlay_renderer.h b/ui/ozone/demo/vulkan_overlay_renderer.h index 8a8a7c5..37b75125 100644 --- a/ui/ozone/demo/vulkan_overlay_renderer.h +++ b/ui/ozone/demo/vulkan_overlay_renderer.h
@@ -89,6 +89,7 @@ const VkFence fence_; }; + void DestroyRenderPass(); void DestroyBuffers(); void RecreateBuffers(); void RenderFrame(); @@ -111,7 +112,7 @@ std::unique_ptr<gpu::VulkanCommandPool> command_pool_; std::unique_ptr<OverlaySurface> overlay_surface_; - VkRenderPass render_pass_; + VkRenderPass render_pass_ = VK_NULL_HANDLE; base::WeakPtrFactory<VulkanOverlayRenderer> weak_ptr_factory_;
diff --git a/ui/ozone/demo/vulkan_renderer.cc b/ui/ozone/demo/vulkan_renderer.cc index 89cbc215..9a69457 100644 --- a/ui/ozone/demo/vulkan_renderer.cc +++ b/ui/ozone/demo/vulkan_renderer.cc
@@ -11,97 +11,196 @@ #include "base/trace_event/trace_event.h" #include "gpu/vulkan/init/vulkan_factory.h" #include "gpu/vulkan/vulkan_command_buffer.h" +#include "gpu/vulkan/vulkan_command_pool.h" #include "gpu/vulkan/vulkan_device_queue.h" +#include "gpu/vulkan/vulkan_function_pointers.h" #include "gpu/vulkan/vulkan_implementation.h" -#include "gpu/vulkan/vulkan_render_pass.h" #include "gpu/vulkan/vulkan_surface.h" #include "gpu/vulkan/vulkan_swap_chain.h" namespace ui { -VulkanRenderer::VulkanRenderer(gpu::VulkanImplementation* vulkan_implementation, +VulkanRenderer::VulkanRenderer(std::unique_ptr<gpu::VulkanSurface> surface, + gpu::VulkanImplementation* vulkan_implementation, gfx::AcceleratedWidget widget, const gfx::Size& size) : RendererBase(widget, size), vulkan_implementation_(vulkan_implementation), + surface_(std::move(surface)), + size_(size), weak_ptr_factory_(this) {} VulkanRenderer::~VulkanRenderer() { - surface_->Finish(); - render_pass_->Destroy(); + DestroyFramebuffers(); + DestroyRenderPass(); surface_->Destroy(); surface_.reset(); + command_pool_->Destroy(); + command_pool_.reset(); device_queue_->Destroy(); device_queue_.reset(); } bool VulkanRenderer::Initialize() { + TRACE_EVENT1("ozone", "VulkanRenderer::Initialize", "widget", widget_); + device_queue_ = gpu::CreateVulkanDeviceQueue( vulkan_implementation_, gpu::VulkanDeviceQueue::GRAPHICS_QUEUE_FLAG | gpu::VulkanDeviceQueue::PRESENTATION_SUPPORT_QUEUE_FLAG); - CHECK(device_queue_); + if (!device_queue_) { + LOG(FATAL) << "Failed to init device queue"; + } - surface_ = vulkan_implementation_->CreateViewSurface(widget_); - if (!surface_) - LOG(FATAL) << "Vulkan surface not supported by platform"; - CHECK(surface_->Initialize(device_queue_.get(), - gpu::VulkanSurface::DEFAULT_SURFACE_FORMAT)); + if (!surface_->Initialize(device_queue_.get(), + gpu::VulkanSurface::DEFAULT_SURFACE_FORMAT)) { + LOG(FATAL) << "Failed to init surface"; + } - gpu::VulkanRenderPass::RenderPassData render_pass_data; + VkAttachmentDescription render_pass_attachments[] = {{ + /* .flags = */ 0, + /* .format = */ surface_->surface_format().format, + /* .samples = */ VK_SAMPLE_COUNT_1_BIT, + /* .loadOp = */ VK_ATTACHMENT_LOAD_OP_CLEAR, + /* .storeOp = */ VK_ATTACHMENT_STORE_OP_STORE, + /* .stencilLoadOp = */ VK_ATTACHMENT_LOAD_OP_DONT_CARE, + /* .stencilStoreOp = */ VK_ATTACHMENT_STORE_OP_DONT_CARE, + /* .initialLayout = */ VK_IMAGE_LAYOUT_UNDEFINED, + /* .finalLayout = */ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, + }}; - render_pass_data.attachments.resize(1); - gpu::VulkanRenderPass::AttachmentData* attachment = - &render_pass_data.attachments[0]; - attachment->attachment_type = - gpu::VulkanRenderPass::AttachmentType::ATTACHMENT_TYPE_SWAP_IMAGE; - attachment->sample_count = VK_SAMPLE_COUNT_1_BIT; - attachment->load_op = VK_ATTACHMENT_LOAD_OP_CLEAR; - attachment->store_op = VK_ATTACHMENT_STORE_OP_STORE; - attachment->stencil_load_op = VK_ATTACHMENT_LOAD_OP_DONT_CARE; - attachment->stencil_store_op = VK_ATTACHMENT_STORE_OP_DONT_CARE; - attachment->start_layout = - gpu::VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_UNDEFINED; - attachment->end_layout = - gpu::VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_PRESENT; + VkAttachmentReference color_attachment_references[] = { + {/* .attachment = */ 0, + /* .layout = */ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL}}; - render_pass_data.subpass_datas.resize(1); - gpu::VulkanRenderPass::SubpassData* subpass_data = - &render_pass_data.subpass_datas[0]; + VkSubpassDescription render_pass_subpasses[] = {{ + /* .flags = */ 0, + /* .pipelineBindPoint = */ VK_PIPELINE_BIND_POINT_GRAPHICS, + /* .inputAttachmentCount = */ 0, + /* .pInputAttachments = */ nullptr, + /* .colorAttachmentCount = */ base::size(color_attachment_references), + /* .pColorAttachments = */ color_attachment_references, + /* .pResolveAttachments = */ nullptr, + /* .pDepthStencilAttachment = */ nullptr, + /* .preserveAttachmentCount = */ 0, + /* .pPreserveAttachments = */ nullptr, + }}; - subpass_data->subpass_attachments.resize(1); - gpu::VulkanRenderPass::SubpassAttachment* subpass_attachment = - &subpass_data->subpass_attachments[0]; - subpass_attachment->attachment_index = 0; - subpass_attachment->subpass_layout = - gpu::VulkanRenderPass::ImageLayoutType::IMAGE_LAYOUT_TYPE_IMAGE_VIEW; + VkRenderPassCreateInfo render_pass_create_info = { + /* .sType = */ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, + /* .pNext = */ nullptr, + /* .flags = */ 0, + /* .attachmentCount = */ base::size(render_pass_attachments), + /* .pAttachments = */ render_pass_attachments, + /* .subpassCount = */ base::size(render_pass_subpasses), + /* .pSubpasses = */ render_pass_subpasses, + /* .dependencyCount = */ 0, + /* .pDependencies = */ nullptr, + }; - gpu::VulkanSwapChain* swap_chain = surface_->GetSwapChain(); - CHECK(render_pass_data.ValidateData(swap_chain)); + CHECK_EQ(vkCreateRenderPass(device_queue_->GetVulkanDevice(), + &render_pass_create_info, nullptr, &render_pass_), + VK_SUCCESS); - render_pass_ = std::make_unique<gpu::VulkanRenderPass>(device_queue_.get()); - CHECK(render_pass_->Initialize(swap_chain, render_pass_data)); + command_pool_ = std::make_unique<gpu::VulkanCommandPool>(device_queue_.get()); + CHECK(command_pool_->Initialize()); + + RecreateFramebuffers(); // Schedule the initial render. PostRenderFrameTask(); return true; } +void VulkanRenderer::DestroyRenderPass() { + if (render_pass_ == VK_NULL_HANDLE) + return; + + vkDestroyRenderPass(device_queue_->GetVulkanDevice(), render_pass_, nullptr); + render_pass_ = VK_NULL_HANDLE; +} + +void VulkanRenderer::DestroyFramebuffers() { + VkDevice vk_device = device_queue_->GetVulkanDevice(); + + VkResult result = vkQueueWaitIdle(device_queue_->GetVulkanQueue()); + CHECK_EQ(result, VK_SUCCESS); + + for (std::unique_ptr<Framebuffer>& framebuffer : framebuffers_) { + if (!framebuffer) + continue; + + framebuffer->command_buffer()->Destroy(); + vkDestroyFramebuffer(vk_device, framebuffer->vk_framebuffer(), nullptr); + vkDestroyImageView(vk_device, framebuffer->vk_image_view(), nullptr); + framebuffer.reset(); + } +} + +void VulkanRenderer::RecreateFramebuffers() { + TRACE_EVENT0("ozone", "VulkanRenderer::RecreateFramebuffers"); + + DestroyFramebuffers(); + + surface_->SetSize(size_); + + gpu::VulkanSwapChain* vulkan_swap_chain = surface_->GetSwapChain(); + const uint32_t num_images = vulkan_swap_chain->num_images(); + framebuffers_.resize(num_images); + + for (uint32_t image = 0; image < num_images; ++image) { + framebuffers_[image] = + Framebuffer::Create(device_queue_.get(), command_pool_.get(), + render_pass_, surface_.get(), image); + CHECK(framebuffers_[image]); + } +} + void VulkanRenderer::RenderFrame() { TRACE_EVENT0("ozone", "VulkanRenderer::RenderFrame"); - VkClearValue clear_value = {.color = {{.5f, 1.f - NextFraction(), .5f, 1.f}}}; - render_pass_->SetClearValue(0, clear_value); + VkClearValue clear_value = { + /* .color = */ {/* .float32 = */ {.5f, 1.f - NextFraction(), .5f, 1.f}}}; - gpu::VulkanCommandBuffer* command_buffer = - surface_->GetSwapChain()->GetCurrentCommandBuffer(); + gpu::VulkanSwapChain* vulkan_swap_chain = surface_->GetSwapChain(); + const uint32_t image = vulkan_swap_chain->current_image(); + const Framebuffer& framebuffer = *framebuffers_[image]; + + gpu::VulkanCommandBuffer& command_buffer = *framebuffer.command_buffer(); + { - gpu::ScopedSingleUseCommandBufferRecorder recorder(*command_buffer); - render_pass_->BeginRenderPass(recorder, true); - render_pass_->EndRenderPass(recorder); + gpu::ScopedSingleUseCommandBufferRecorder recorder(command_buffer); + + VkRenderPassBeginInfo begin_info = { + /* .sType = */ VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, + /* .pNext = */ nullptr, + /* .renderPass = */ render_pass_, + /* .framebuffer = */ framebuffer.vk_framebuffer(), + /* .renderArea = */ + { + /* .offset = */ { + /* .x = */ 0, + /* .y = */ 0, + }, + /* .extent = */ + { + /* .width = */ vulkan_swap_chain->size().width(), + /* .height = */ vulkan_swap_chain->size().height(), + }, + }, + /* .clearValueCount = */ 1, + /* .pClearValues = */ &clear_value, + }; + + vkCmdBeginRenderPass(recorder.handle(), &begin_info, + VK_SUBPASS_CONTENTS_INLINE); + + vkCmdEndRenderPass(recorder.handle()); } - CHECK_EQ(surface_->SwapBuffers(), gfx::SwapResult::SWAP_ACK); + CHECK(command_buffer.Submit(0, nullptr, 0, nullptr)); + + vulkan_swap_chain->SwapBuffers(); PostRenderFrameTask(); } @@ -112,4 +211,80 @@ weak_ptr_factory_.GetWeakPtr())); } +VulkanRenderer::Framebuffer::Framebuffer( + VkImageView vk_image_view, + VkFramebuffer vk_framebuffer, + std::unique_ptr<gpu::VulkanCommandBuffer> command_buffer) + : vk_image_view_(vk_image_view), + vk_framebuffer_(vk_framebuffer), + command_buffer_(std::move(command_buffer)) {} + +VulkanRenderer::Framebuffer::~Framebuffer() {} + +std::unique_ptr<VulkanRenderer::Framebuffer> +VulkanRenderer::Framebuffer::Create(gpu::VulkanDeviceQueue* vulkan_device_queue, + gpu::VulkanCommandPool* vulkan_command_pool, + VkRenderPass vk_render_pass, + gpu::VulkanSurface* vulkan_surface, + uint32_t vulkan_swap_chain_image_index) { + gpu::VulkanSwapChain* vulkan_swap_chain = vulkan_surface->GetSwapChain(); + const VkDevice vk_device = vulkan_device_queue->GetVulkanDevice(); + VkImageViewCreateInfo vk_image_view_create_info = { + /* .sType = */ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, + /* .pNext = */ nullptr, + /* .flags = */ 0, + /* .image = */ vulkan_swap_chain->GetImage(vulkan_swap_chain_image_index), + /* .viewType = */ VK_IMAGE_VIEW_TYPE_2D, + /* .format = */ vulkan_surface->surface_format().format, + /* .components = */ + { + /* .r = */ VK_COMPONENT_SWIZZLE_IDENTITY, + /* .b = */ VK_COMPONENT_SWIZZLE_IDENTITY, + /* .g = */ VK_COMPONENT_SWIZZLE_IDENTITY, + /* .a = */ VK_COMPONENT_SWIZZLE_IDENTITY, + }, + /* .subresourceRange = */ + { + /* .aspectMask = */ VK_IMAGE_ASPECT_COLOR_BIT, + /* .baseMipLevel = */ 0, + /* .levelCount = */ 1, + /* .baseArrayLayer = */ 0, + /* .layerCount = */ 1, + }, + }; + + VkResult result; + VkImageView vk_image_view = VK_NULL_HANDLE; + result = vkCreateImageView(vk_device, &vk_image_view_create_info, nullptr, + &vk_image_view); + if (result != VK_SUCCESS) { + LOG(FATAL) << "Failed to create a Vulkan image view."; + } + VkFramebufferCreateInfo vk_framebuffer_create_info = { + /* .sType = */ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, + /* .pNext = */ nullptr, + /* .flags = */ 0, + /* .renderPass = */ vk_render_pass, + /* .attachmentCount = */ 1, + /* .pAttachments = */ &vk_image_view, + /* .width = */ vulkan_swap_chain->size().width(), + /* .height = */ vulkan_swap_chain->size().height(), + /* .layers = */ 1, + }; + + VkFramebuffer vk_framebuffer = VK_NULL_HANDLE; + result = vkCreateFramebuffer(vk_device, &vk_framebuffer_create_info, nullptr, + &vk_framebuffer); + if (result != VK_SUCCESS) { + LOG(FATAL) << "Failed to create a Vulkan framebuffer."; + } + + auto command_buffer = std::make_unique<gpu::VulkanCommandBuffer>( + vulkan_device_queue, vulkan_command_pool, true /* primary */); + CHECK(command_buffer->Initialize()); + + return std::make_unique<VulkanRenderer::Framebuffer>( + vk_image_view, vk_framebuffer, std::move(command_buffer)); +} + } // namespace ui
diff --git a/ui/ozone/demo/vulkan_renderer.h b/ui/ozone/demo/vulkan_renderer.h index f372affc..cd7e6554 100644 --- a/ui/ozone/demo/vulkan_renderer.h +++ b/ui/ozone/demo/vulkan_renderer.h
@@ -5,16 +5,21 @@ #ifndef UI_OZONE_DEMO_VULKAN_RENDERER_H_ #define UI_OZONE_DEMO_VULKAN_RENDERER_H_ +#include <vulkan/vulkan.h> + #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" +#include "ui/gfx/buffer_types.h" +#include "ui/gfx/presentation_feedback.h" #include "ui/gfx/swap_result.h" #include "ui/ozone/demo/renderer_base.h" namespace gpu { class VulkanDeviceQueue; class VulkanImplementation; -class VulkanRenderPass; +class VulkanCommandBuffer; +class VulkanCommandPool; class VulkanSurface; } // namespace gpu @@ -22,7 +27,8 @@ class VulkanRenderer : public RendererBase { public: - VulkanRenderer(gpu::VulkanImplementation* vulkan_instance, + VulkanRenderer(std::unique_ptr<gpu::VulkanSurface> surface, + gpu::VulkanImplementation* vulkan_instance, gfx::AcceleratedWidget widget, const gfx::Size& size); ~VulkanRenderer() override; @@ -31,13 +37,47 @@ bool Initialize() override; private: + class Framebuffer { + public: + Framebuffer(VkImageView vk_image_view, + VkFramebuffer vk_framebuffer, + std::unique_ptr<gpu::VulkanCommandBuffer> command_buffer); + ~Framebuffer(); + + static std::unique_ptr<Framebuffer> Create( + gpu::VulkanDeviceQueue* vulkan_device_queue, + gpu::VulkanCommandPool* vulkan_command_pool, + VkRenderPass vk_render_pass, + gpu::VulkanSurface* vulkan_surface, + uint32_t vulkan_swap_chain_image_index); + + VkImageView vk_image_view() const { return vk_image_view_; } + VkFramebuffer vk_framebuffer() const { return vk_framebuffer_; } + gpu::VulkanCommandBuffer* command_buffer() const { + return command_buffer_.get(); + } + + private: + const VkImageView vk_image_view_; + const VkFramebuffer vk_framebuffer_; + const std::unique_ptr<gpu::VulkanCommandBuffer> command_buffer_; + }; + + void DestroyRenderPass(); + void DestroyFramebuffers(); + void RecreateFramebuffers(); void RenderFrame(); void PostRenderFrameTask(); + std::vector<std::unique_ptr<Framebuffer>> framebuffers_; + gpu::VulkanImplementation* const vulkan_implementation_; std::unique_ptr<gpu::VulkanDeviceQueue> device_queue_; + std::unique_ptr<gpu::VulkanCommandPool> command_pool_; std::unique_ptr<gpu::VulkanSurface> surface_; - std::unique_ptr<gpu::VulkanRenderPass> render_pass_; + gfx::Size size_; + + VkRenderPass render_pass_ = VK_NULL_HANDLE; base::WeakPtrFactory<VulkanRenderer> weak_ptr_factory_;
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc index c2a99d7..7aa4285 100644 --- a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc +++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
@@ -115,9 +115,9 @@ gbm_ = gbm.get(); drm_ = new ui::MockDrmDevice(std::move(gbm)); - CrtcState crtc_state = {.planes = { - {.formats = {DRM_FORMAT_XRGB8888}}, - }}; + CrtcState crtc_state = {/* .planes = */ { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + }}; InitializeDrmState({crtc_state}); screen_manager_.reset(new ui::ScreenManager()); @@ -205,7 +205,7 @@ } crtc_plane_properties[plane_idx].properties.push_back( - {.id = pair.first, .value = value}); + {/* .id = */ pair.first, /* .value = */ value}); } } @@ -279,11 +279,11 @@ plane_list_.back().display_bounds = overlay_rect_; CrtcState state = { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, - {.formats = {DRM_FORMAT_XRGB8888}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + }, }; InitializeDrmState(std::vector<CrtcState>(1, state)); @@ -308,11 +308,11 @@ AddPlane(overlay_params_.back()); CrtcState state = { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888}}, - {.formats = {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, + }, }; InitializeDrmState(std::vector<CrtcState>(1, state)); @@ -334,11 +334,11 @@ AddPlane(overlay_params_.back()); CrtcState state = { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888}}, - {.formats = {DRM_FORMAT_XRGB8888}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + }, }; InitializeDrmState(std::vector<CrtcState>(1, state)); @@ -354,18 +354,18 @@ RejectYUVBuffersIfNotSupported_MirroredControllers) { std::vector<CrtcState> crtc_states = { { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888}}, - {.formats = {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, + }, }, { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888}}, - {.formats = {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, + }, }, }; InitializeDrmState(crtc_states); @@ -421,18 +421,18 @@ TEST_F(DrmOverlayValidatorTest, OptimalFormatXRGB_MirroredControllers) { std::vector<CrtcState> crtc_states = { { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888}}, - {.formats = {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, + }, }, { - .planes = - { - {.formats = {DRM_FORMAT_XRGB8888}}, - {.formats = {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, - }, + /* .planes = */ + { + {/* .formats = */ {DRM_FORMAT_XRGB8888}}, + {/* .formats = */ {DRM_FORMAT_XRGB8888, DRM_FORMAT_UYVY}}, + }, }, }; InitializeDrmState(crtc_states);
diff --git a/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc b/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc index fc0315c3..ce1d6ce 100644 --- a/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc +++ b/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc
@@ -183,13 +183,23 @@ base::ScopedFD vk_image_fd(dup(buffer->GetPlaneFd(0))); DCHECK(vk_image_fd.is_valid()); + // TODO(spang): Fix this for formats other than gfx::BufferFormat::BGRA_8888 + DCHECK_EQ(format, display::DisplaySnapshot::PrimaryFormat()); + VKFormat format = VK_FORMAT_B8G8R8A8_SRGB; + VkDmaBufImageCreateInfo dma_buf_image_create_info = { - .sType = static_cast<VkStructureType>( + /* .sType = */ static_cast<VkStructureType>( VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL), - .fd = vk_image_fd.release(), - .format = VK_FORMAT_B8G8R8A8_SRGB, - .extent = (VkExtent3D){size.width(), size.height(), 1}, - .strideInBytes = buffer->GetPlaneStride(0), + /* .pNext = */ nullptr, + /* .fd = */ vk_image_fd.release(), + /* .format = */ format, + /* .extent = */ + { + /* .width = */ size.width(), + /* .height = */ size.height(), + /* .depth = */ 1, + }, + /* .strideInBytes = */ buffer->GetPlaneStride(0), }; VkResult result =
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc index 662d7232..28c210a 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
@@ -141,7 +141,8 @@ else if (pair.first == kInFormatsPropId) value = kInFormatsBlobPropId; - plane.properties.push_back({.id = pair.first, .value = value}); + plane.properties.push_back( + {/* .id = */ pair.first, /*.value = */ value}); }; drm_->SetPropertyBlob(ui::MockDrmDevice::AllocateInFormatsBlob(
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc index 177a262..5c6b127 100644 --- a/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc +++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_manager_unittest.cc
@@ -144,7 +144,8 @@ } else if (pair.first == kInFormatsPropId) { value = kInFormatsBlobPropId; } - plane_prop.properties.push_back({.id = pair.first, .value = value}); + plane_prop.properties.push_back( + {/* .id = */ pair.first, /* .value = */ value}); }; plane_properties_.emplace_back(std::move(plane_prop)); @@ -365,8 +366,8 @@ plane_prop.id = 102; plane_prop.crtc_mask = (1 << 0) | (1 << 1); plane_prop.properties = { - {.id = kTypePropId, .value = DRM_PLANE_TYPE_OVERLAY}, - {.id = kInFormatsPropId, .value = kInFormatsBlobPropId}, + {/* .id = */ kTypePropId, /* .value = */ DRM_PLANE_TYPE_OVERLAY}, + {/* .id = */ kInFormatsPropId, /* .value = */ kInFormatsBlobPropId}, }; plane_properties_.emplace_back(std::move(plane_prop)); fake_drm_->InitializeState(crtc_properties_, plane_properties_, @@ -459,8 +460,10 @@ TEST_P(HardwareDisplayPlaneManagerAtomicTest, SetColorCorrectionOnAllCrtcPlanes_Success) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - plane_properties_[0].properties.push_back({.id = kPlaneCtmId, .value = 0}); - plane_properties_[1].properties.push_back({.id = kPlaneCtmId, .value = 0}); + plane_properties_[0].properties.push_back( + {/* .id = */ kPlaneCtmId, /* .value = */ 0}); + plane_properties_[1].properties.push_back( + {/* .id = */ kPlaneCtmId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -485,7 +488,8 @@ TEST_P(HardwareDisplayPlaneManagerAtomicTest, SetColorCorrectionOnAllCrtcPlanes_OnePlaneMissingCtmProperty) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/2); - plane_properties_[0].properties.push_back({.id = kPlaneCtmId, .value = 0}); + plane_properties_[0].properties.push_back( + {/* .id = */ kPlaneCtmId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -497,7 +501,8 @@ TEST_P(HardwareDisplayPlaneManagerTest, SetColorMatrix_Success) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - crtc_properties_[0].properties.push_back({.id = kCtmPropId, .value = 0}); + crtc_properties_[0].properties.push_back( + {/* .id = */ kCtmPropId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -519,7 +524,8 @@ TEST_P(HardwareDisplayPlaneManagerTest, SetColorMatrix_ErrorEmptyCtm) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - crtc_properties_[0].properties.push_back({.id = kCtmPropId, .value = 0}); + crtc_properties_[0].properties.push_back( + {/* .id = */ kCtmPropId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -537,7 +543,8 @@ TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_MissingDegamma) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - crtc_properties_[0].properties.push_back({.id = kCtmPropId, .value = 0}); + crtc_properties_[0].properties.push_back( + {/* .id = */ kCtmPropId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -553,7 +560,7 @@ } crtc_properties_[0].properties.push_back( - {.id = kDegammaLutSizePropId, .value = 1}); + {/* .id = */ kDegammaLutSizePropId, /* .value = */ 1}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, /*use_atomic=*/true); @@ -571,7 +578,8 @@ TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_MissingGamma) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - crtc_properties_[0].properties.push_back({.id = kCtmPropId, .value = 0}); + crtc_properties_[0].properties.push_back( + {/* .id = */ kCtmPropId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -587,7 +595,7 @@ } crtc_properties_[0].properties.push_back( - {.id = kGammaLutSizePropId, .value = 1}); + {/* .id = */ kGammaLutSizePropId, /* .value = */ 1}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, /*use_atomic=*/true); @@ -625,7 +633,8 @@ TEST_P(HardwareDisplayPlaneManagerTest, SetGammaCorrection_Success) { InitializeDrmState(/*crtc_count=*/1, /*planes_per_crtc=*/1); - crtc_properties_[0].properties.push_back({.id = kCtmPropId, .value = 0}); + crtc_properties_[0].properties.push_back( + {/* .id = */ kCtmPropId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -634,12 +643,13 @@ EXPECT_EQ(0, fake_drm_->get_commit_count()); crtc_properties_[0].properties.push_back( - {.id = kDegammaLutSizePropId, .value = 1}); + {/* .id = */ kDegammaLutSizePropId, /* .value = */ 1}); crtc_properties_[0].properties.push_back( - {.id = kDegammaLutPropId, .value = 0}); + {/* .id = */ kDegammaLutPropId, /* .value = */ 0}); crtc_properties_[0].properties.push_back( - {.id = kGammaLutSizePropId, .value = 1}); - crtc_properties_[0].properties.push_back({.id = kGammaLutPropId, .value = 0}); + {/* .id = */ kGammaLutSizePropId, /* .value = */ 1}); + crtc_properties_[0].properties.push_back( + {/* .id = */ kGammaLutPropId, /* .value = */ 0}); fake_drm_->InitializeState(crtc_properties_, plane_properties_, property_names_, use_atomic_); @@ -712,9 +722,9 @@ InitializationFailsIfSupportForOutFencePropertiesIsPartial) { InitializeDrmState(/*crtc_count=*/3, /*planes_per_crtc=*/1); crtc_properties_[0].properties.push_back( - {.id = kOutFencePtrPropId, .value = 1}); + {/* .id = */ kOutFencePtrPropId, /* .value = */ 1}); crtc_properties_[2].properties.push_back( - {.id = kOutFencePtrPropId, .value = 2}); + {/* .id = */ kOutFencePtrPropId, /* .value = */ 2}); EXPECT_FALSE(fake_drm_->InitializeStateWithResult( crtc_properties_, plane_properties_, property_names_, use_atomic_)); @@ -724,11 +734,11 @@ InitializationSucceedsIfSupportForOutFencePropertiesIsComplete) { InitializeDrmState(/*crtc_count=*/3, /*planes_per_crtc=*/1); crtc_properties_[0].properties.push_back( - {.id = kOutFencePtrPropId, .value = 1}); + {/* .id = */ kOutFencePtrPropId, /* .value = */ 1}); crtc_properties_[1].properties.push_back( - {.id = kOutFencePtrPropId, .value = 2}); + {/* .id = */ kOutFencePtrPropId, /* .value = */ 2}); crtc_properties_[2].properties.push_back( - {.id = kOutFencePtrPropId, .value = 3}); + {/* .id = */ kOutFencePtrPropId, /* .value = */ 3}); EXPECT_TRUE(fake_drm_->InitializeStateWithResult( crtc_properties_, plane_properties_, property_names_, use_atomic_));
diff --git a/ui/strings/translations/ui_strings_bn.xtb b/ui/strings/translations/ui_strings_bn.xtb index fe8b385..97d034f 100644 --- a/ui/strings/translations/ui_strings_bn.xtb +++ b/ui/strings/translations/ui_strings_bn.xtb
@@ -149,7 +149,7 @@ <translation id="7814458197256864873">&কপি করুন</translation> <translation id="7879499977785298635">ব্লক করবেন না</translation> <translation id="7907591526440419938">খোলা ফাইল</translation> -<translation id="7969046989155602842">কম্যান্ড</translation> +<translation id="7969046989155602842">কমান্ড</translation> <translation id="8087772101393322318"><ph name="KEY_MODIFIER_NAME" />+<ph name="KEY_COMBO_NAME" /></translation> <translation id="8106081041558092062">{HOURS,plural, =1{১ ঘণ্টা পূর্বে}one{# ঘণ্টা পূর্বে}other{# ঘণ্টা পূর্বে}}</translation> <translation id="8131263257437993507">{SECONDS,plural, =1{১ সেকেন্ড বাকি}one{# সেকেন্ড বাকি}other{# সেকেন্ড বাকি}}</translation>
diff --git a/ui/strings/translations/ui_strings_ml.xtb b/ui/strings/translations/ui_strings_ml.xtb index 645dbeb..d44fc29a 100644 --- a/ui/strings/translations/ui_strings_ml.xtb +++ b/ui/strings/translations/ui_strings_ml.xtb
@@ -149,8 +149,8 @@ <translation id="7814458197256864873">&പകര്ത്തൂ</translation> <translation id="7879499977785298635">ബ്ലോക്ക് ചെയ്യരുത്</translation> <translation id="7907591526440419938">ഫയല് തുറക്കുക</translation> -<translation id="7969046989155602842">ആജ്ഞ നൽകുക</translation> -<translation id="8087772101393322318"><ph name="KEY_MODIFIER_NAME" />+<ph name="KEY_COMBO_NAME" /> എന്നിവ</translation> +<translation id="7969046989155602842">കമാൻഡ്</translation> +<translation id="8087772101393322318"><ph name="KEY_MODIFIER_NAME" />+<ph name="KEY_COMBO_NAME" /></translation> <translation id="8106081041558092062">{HOURS,plural, =1{ഒരു മണിക്കൂര് മുമ്പ്}other{# മണിക്കൂർ മുമ്പ്}}</translation> <translation id="8131263257437993507">{SECONDS,plural, =1{ഒരു സെക്കൻഡ് ശേഷിക്കുന്നു}other{# സെക്കൻഡ് ശേഷിക്കുന്നു}}</translation> <translation id="815598010540052116">താഴേക്ക് സ്ക്രോള്ചെയ്യൂ</translation>
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index 9289cf0..f9b913f1 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -85,6 +85,8 @@ "bubble/info_bubble.h", "bubble/tooltip_icon.h", "button_drag_utils.h", + "cocoa/bridge_factory_host.h", + "cocoa/bridge_factory_impl.h", "cocoa/bridged_native_widget.h", "cocoa/native_widget_mac_nswindow.h", "cocoa/window_touch_bar_delegate.h", @@ -439,8 +441,6 @@ # public into this list, along with the implementation file. sources += [ "cocoa/bridge_factory_host.cc", - "cocoa/bridge_factory_host.h", - "cocoa/bridge_factory_impl.h", "cocoa/bridge_factory_impl.mm", "cocoa/bridged_content_view.h", "cocoa/bridged_content_view.mm",
diff --git a/ui/views/controls/menu/menu_config.cc b/ui/views/controls/menu/menu_config.cc index 7ea5c01..d8115e9 100644 --- a/ui/views/controls/menu/menu_config.cc +++ b/ui/views/controls/menu/menu_config.cc
@@ -5,9 +5,11 @@ #include "ui/views/controls/menu/menu_config.h" #include "base/macros.h" +#include "ui/base/material_design/material_design_controller.h" #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_image_util.h" #include "ui/views/controls/menu/menu_item_view.h" +#include "ui/views/layout/layout_provider.h" #include "ui/views/round_rect_painter.h" namespace views { @@ -83,6 +85,13 @@ return corner_radius; } +int MenuConfig::ShadowElevationForMenu(const MenuController* controller) const { + if ((controller && controller->use_touchable_layout()) || + ui::MaterialDesignController::IsRefreshUi()) + return touchable_menu_shadow_elevation; + return 0; +} + bool MenuConfig::ShouldShowAcceleratorText(const MenuItemView* item, base::string16* text) const { if (!show_accelerators || !item->GetDelegate() || !item->GetCommand()) @@ -104,4 +113,37 @@ return instance; } +void MenuConfig::InitMaterialMenuConfig() { + // These config parameters are from https://crbug.com/829347 and the spec + // images linked from that bug. + menu_horizontal_border_size = 0; + submenu_horizontal_inset = 0; + minimum_text_item_height = 28; + minimum_container_item_height = 40; + minimum_menu_width = 320; + label_to_arrow_padding = 0; + arrow_to_edge_padding = 16; + check_width = 16; + check_height = 16; + separator_height = 9; + separator_lower_height = 4; + separator_upper_height = 4; + separator_spacing_height = 5; + separator_thickness = 1; + align_arrow_and_shortcut = true; + use_outer_border = false; + icons_in_label = true; + corner_radius = 8; + auxiliary_corner_radius = 4; + if (!ui::MaterialDesignController::IsTouchOptimizedUiEnabled()) { + touchable_menu_height = minimum_text_item_height; + touchable_menu_width = minimum_menu_width; + if (LayoutProvider::Get()) { + touchable_menu_shadow_elevation = + LayoutProvider::Get()->GetShadowElevationMetric(EMPHASIS_MEDIUM); + } + touchable_anchor_offset = 0; + } +} + } // namespace views
diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h index 885aa4c..fc629ac 100644 --- a/ui/views/controls/menu/menu_config.h +++ b/ui/views/controls/menu/menu_config.h
@@ -22,11 +22,18 @@ static const MenuConfig& instance(); + // Initialize to the specs presented in https://crbug.com/829347 + void InitMaterialMenuConfig(); + // Helper methods to simplify access to MenuConfig: // Returns the appropriate corner radius for the menu controlled by // |controller|, or the default corner radius if |controller| is nullptr. int CornerRadiusForMenu(const MenuController* controller) const; + // Returns the appropriate shadow elevation for the menu controlled by + // |controller|, or the default shadow elevation if |controller| is nullptr. + int ShadowElevationForMenu(const MenuController* controller) const; + // Returns whether |item_view| should show accelerator text. If so, returns // the text to show. bool ShouldShowAcceleratorText(const MenuItemView* item_view,
diff --git a/ui/views/controls/menu/menu_config_chromeos.cc b/ui/views/controls/menu/menu_config_chromeos.cc index 085c1adb..41b3911 100644 --- a/ui/views/controls/menu/menu_config_chromeos.cc +++ b/ui/views/controls/menu/menu_config_chromeos.cc
@@ -4,26 +4,30 @@ #include "ui/views/controls/menu/menu_config.h" +#include "ui/base/material_design/material_design_controller.h" #include "ui/views/controls/menu/menu_image_util.h" namespace views { void MenuConfig::Init() { - submenu_horizontal_inset = 1; - arrow_to_edge_padding = 21; - gfx::ImageSkia check = GetMenuCheckImage(false); - check_height = check.height(); - item_min_height = 29; - separator_spacing_height = 7; - separator_lower_height = 8; - separator_upper_height = 8; + if (ui::MaterialDesignController::IsRefreshUi()) { + InitMaterialMenuConfig(); + } else { + align_arrow_and_shortcut = true; + gfx::ImageSkia check = GetMenuCheckImage(false); + check_height = check.height(); + corner_radius = 2; + separator_spacing_height = 7; + separator_lower_height = 8; + separator_upper_height = 8; + submenu_horizontal_inset = 1; + // In Ash, the border is provided by the shadow. + use_outer_border = false; + } always_use_icon_to_label_padding = true; - align_arrow_and_shortcut = true; + arrow_to_edge_padding = 21; + item_min_height = 29; offset_context_menus = true; - corner_radius = 2; - - // In Ash, the border is provided by the shadow. - use_outer_border = false; } } // namespace views
diff --git a/ui/views/controls/menu/menu_config_linux.cc b/ui/views/controls/menu/menu_config_linux.cc index ded2045..05af6d80f 100644 --- a/ui/views/controls/menu/menu_config_linux.cc +++ b/ui/views/controls/menu/menu_config_linux.cc
@@ -4,10 +4,15 @@ #include "ui/views/controls/menu/menu_config.h" +#include "ui/base/material_design/material_design_controller.h" + namespace views { void MenuConfig::Init() { - arrow_to_edge_padding = 6; + if (ui::MaterialDesignController::IsRefreshUi()) + InitMaterialMenuConfig(); + else + arrow_to_edge_padding = 6; } } // namespace views
diff --git a/ui/views/controls/menu/menu_config_mac.mm b/ui/views/controls/menu/menu_config_mac.mm index 607ed754..ea9c2ab 100644 --- a/ui/views/controls/menu/menu_config_mac.mm +++ b/ui/views/controls/menu/menu_config_mac.mm
@@ -8,45 +8,16 @@ #include "base/mac/mac_util.h" -namespace { - -void InitMaterialMenuConfig(views::MenuConfig* config) { - // These config parameters are from https://crbug.com/829347 and the spec - // images linked from that bug. - config->menu_horizontal_border_size = 0; - config->submenu_horizontal_inset = 0; - config->minimum_text_item_height = 28; - config->minimum_container_item_height = 40; - config->minimum_menu_width = 320; - config->label_to_arrow_padding = 0; - config->arrow_to_edge_padding = 16; - config->check_width = 16; - config->check_height = 16; - config->arrow_width = 8; - config->separator_height = 9; - config->separator_lower_height = 4; - config->separator_upper_height = 4; - config->separator_spacing_height = 5; - config->separator_thickness = 1; - config->align_arrow_and_shortcut = true; - config->use_outer_border = false; - config->icons_in_label = true; - config->corner_radius = 8; - config->auxiliary_corner_radius = 4; -} - -} // namespace - namespace views { void MenuConfig::Init() { + InitMaterialMenuConfig(); font_list = gfx::FontList(gfx::Font([NSFont menuFontOfSize:0.0])); check_selected_combobox_item = true; arrow_key_selection_wraps = false; use_mnemonics = false; show_context_menu_accelerators = false; all_menus_use_prefix_selection = true; - InitMaterialMenuConfig(this); } } // namespace views
diff --git a/ui/views/controls/menu/menu_config_win.cc b/ui/views/controls/menu/menu_config_win.cc index 6048ee0..cfda853 100644 --- a/ui/views/controls/menu/menu_config_win.cc +++ b/ui/views/controls/menu/menu_config_win.cc
@@ -12,6 +12,7 @@ #include "base/win/scoped_gdi_object.h" #include "base/win/win_client_metrics.h" #include "ui/base/l10n/l10n_util_win.h" +#include "ui/base/material_design/material_design_controller.h" #include "ui/gfx/color_utils.h" #include "ui/native_theme/native_theme_win.h" @@ -20,6 +21,13 @@ namespace views { void MenuConfig::Init() { + if (ui::MaterialDesignController::IsRefreshUi()) { + InitMaterialMenuConfig(); + } else { + separator_upper_height = 5; + separator_lower_height = 7; + } + arrow_color = color_utils::GetSysSkColor(COLOR_MENUTEXT); NONCLIENTMETRICS_XP metrics; @@ -36,7 +44,7 @@ if (!arrow_size.IsEmpty()) { arrow_width = arrow_size.width(); } else { - // Sadly I didn't see a specify metrics for this. + // Sadly I didn't see a specific metric for this. arrow_width = GetSystemMetrics(SM_CXMENUCHECK); } @@ -46,9 +54,6 @@ show_cues == TRUE); SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &show_delay, 0); - - separator_upper_height = 5; - separator_lower_height = 7; } } // namespace views
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc index b4da2b5..81a325fd 100644 --- a/ui/views/controls/menu/menu_controller.cc +++ b/ui/views/controls/menu/menu_controller.cc
@@ -15,6 +15,7 @@ #include "base/time/time.h" #include "build/build_config.h" #include "ui/base/dragdrop/os_exchange_data.h" +#include "ui/base/material_design/material_design_controller.h" #include "ui/display/screen.h" #include "ui/events/event.h" #include "ui/events/event_utils.h" @@ -60,6 +61,7 @@ using base::TimeDelta; using ui::OSExchangeData; +using MD = ui::MaterialDesignController; namespace views { @@ -1786,7 +1788,15 @@ const gfx::Point& screen_loc) { gfx::Point view_loc = screen_loc; View::ConvertPointFromScreen(submenu, &view_loc); + MenuScrollViewContainer* container = submenu->GetScrollViewContainer(); + // When the menu has a Bubble border, that area is largely transparent. This + // will exclude that region from hit-testing. + gfx::Rect content_rect = + container->HasBubbleBorder() + ? container->ConvertRectToParent(container->GetContentsBounds()) + : container->bounds(); gfx::Rect vis_rect = submenu->GetVisibleBounds(); + vis_rect.Intersect(content_rect); return vis_rect.Contains(view_loc); } @@ -2033,6 +2043,17 @@ const gfx::Rect& monitor_bounds = state_.monitor_bounds; const gfx::Rect& anchor_bounds = state_.initial_bounds; + const MenuConfig& menu_config = MenuConfig::instance(); + // Shadow insets are built into MenuScrollView's preferred size so it must be + // compensated for when determining the bounds of menus with a bubble border. + const gfx::Insets border_and_shadow_insets = + (MD::IsRefreshUi() && !menu_config.use_outer_border) + ? BubbleBorder::GetBorderAndShadowInsets( + menu_config.ShadowElevationForMenu(this)) + : gfx::Insets(); + + menu_bounds.Inset(border_and_shadow_insets); + // For comboboxes, ensure the menu is at least as wide as the anchor. if (is_combobox_) menu_bounds.set_width(std::max(menu_bounds.width(), anchor_bounds.width())); @@ -2050,8 +2071,6 @@ // Assume we can honor prefer_leading. *is_leading = prefer_leading; - const MenuConfig& menu_config = MenuConfig::instance(); - if (item->GetParentMenuItem()) { // Not the first menu; position it relative to the bounds of its parent menu // item. @@ -2126,8 +2145,10 @@ } // Everything beyond this point requires monitor bounds to be non-empty. - if (monitor_bounds.IsEmpty()) + if (monitor_bounds.IsEmpty()) { + menu_bounds.Inset(-border_and_shadow_insets); return menu_bounds; + } // If the menu position is below or above the anchor bounds, force it to fit // on the screen. Otherwise, try to fit the menu in the following locations: @@ -2174,6 +2195,7 @@ base::ClampToRange(menu_bounds.y(), monitor_bounds.y(), monitor_bounds.bottom() - menu_bounds.height())); + menu_bounds.Inset(-border_and_shadow_insets); return menu_bounds; } @@ -2196,7 +2218,7 @@ // compensated for when determining the bounds of touchable menus. const gfx::Insets border_and_shadow_insets = BubbleBorder::GetBorderAndShadowInsets( - menu_config.touchable_menu_shadow_elevation); + menu_config.ShadowElevationForMenu(this)); const gfx::Rect& monitor_bounds = state_.monitor_bounds; @@ -2266,7 +2288,7 @@ border_and_shadow_insets.bottom() - menu_config.touchable_anchor_offset; // Align the right of the container with the right of the anchor. - if (x + menu_size.width() > monitor_bounds.width()) { + if (x + menu_size.width() > monitor_bounds.right()) { x = anchor_bounds.right() - menu_size.width() + border_and_shadow_insets.right(); } @@ -2288,7 +2310,7 @@ menu_config.touchable_anchor_offset; } // Align the bottom of the menu to the bottom of the anchor. - if (y + menu_size.height() > monitor_bounds.height()) { + if (y + menu_size.height() > monitor_bounds.bottom()) { y = anchor_bounds.bottom() - menu_size.height() + border_and_shadow_insets.bottom(); } @@ -2298,13 +2320,13 @@ x = anchor_bounds.right() - border_and_shadow_insets.left() + menu_config.touchable_anchor_offset; y = anchor_bounds.y() - border_and_shadow_insets.top(); - if (x + menu_size.width() > monitor_bounds.width()) { + if (x + menu_size.width() > monitor_bounds.right()) { // Align the right of the menu with the left of the anchor. x = anchor_bounds.x() - menu_size.width() + border_and_shadow_insets.right() - menu_config.touchable_anchor_offset; } - if (y + menu_size.height() > monitor_bounds.height()) { + if (y + menu_size.height() > monitor_bounds.bottom()) { // Align the bottom of the menu with the bottom of the anchor. y = anchor_bounds.bottom() - menu_size.height() + border_and_shadow_insets.bottom();
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc index e338a213..b5a51ed1 100644 --- a/ui/views/controls/menu/menu_controller_unittest.cc +++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -1429,6 +1429,10 @@ TEST_F(MenuControllerTest, CalculateMenuBoundsBestFitTest) { MenuBoundsOptions options; gfx::Rect expected; + MenuScrollViewContainer* container = + menu_item()->GetSubmenu()->GetScrollViewContainer(); + gfx::Insets menu_insets = + container->HasBubbleBorder() ? container->GetInsets() : gfx::Insets(); // Fits in all locations -> placed below. options.anchor_bounds = @@ -1436,9 +1440,9 @@ options.monitor_bounds = gfx::Rect(0, 0, options.anchor_bounds.right() + options.menu_size.width(), options.anchor_bounds.bottom() + options.menu_size.height()); - expected = - gfx::Rect(options.anchor_bounds.x(), options.anchor_bounds.bottom(), - options.menu_size.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.bottom() - menu_insets.top(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); // Fits above and to both sides -> placed above. @@ -1447,8 +1451,9 @@ options.monitor_bounds = gfx::Rect(0, 0, options.anchor_bounds.right() + options.menu_size.width(), options.anchor_bounds.bottom()); - expected = gfx::Rect(options.anchor_bounds.x(), - options.anchor_bounds.y() - options.menu_size.height(), + expected = gfx::Rect(options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.y() - options.menu_size.height() + + menu_insets.bottom(), options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); @@ -1458,10 +1463,10 @@ options.monitor_bounds = gfx::Rect(0, 0, options.anchor_bounds.right() + options.menu_size.width(), options.menu_size.height()); - expected = - gfx::Rect(options.anchor_bounds.right(), - options.monitor_bounds.bottom() - options.menu_size.height(), - options.menu_size.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.right() - menu_insets.left(), + options.monitor_bounds.bottom() - + options.menu_size.height() + menu_insets.bottom(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); // Fits only on left -> placed left. @@ -1469,10 +1474,11 @@ options.menu_size.height() / 2, 0, 0); options.monitor_bounds = gfx::Rect(0, 0, options.anchor_bounds.right(), options.menu_size.height()); - expected = - gfx::Rect(options.anchor_bounds.x() - options.menu_size.width(), - options.monitor_bounds.bottom() - options.menu_size.height(), - options.menu_size.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.x() - options.menu_size.width() + + menu_insets.right(), + options.monitor_bounds.bottom() - + options.menu_size.height() + menu_insets.bottom(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); // Fits on both sides, prefer left -> placed left. @@ -1482,10 +1488,11 @@ options.monitor_bounds = gfx::Rect(0, 0, options.anchor_bounds.right() + options.menu_size.width(), options.menu_size.height()); - expected = - gfx::Rect(options.anchor_bounds.x() - options.menu_size.width(), - options.monitor_bounds.bottom() - options.menu_size.height(), - options.menu_size.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.x() - options.menu_size.width() + + menu_insets.right(), + options.monitor_bounds.bottom() - + options.menu_size.height() + menu_insets.bottom(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); // Fits only on right -> placed right. @@ -1493,10 +1500,10 @@ options.monitor_bounds = gfx::Rect(0, 0, options.anchor_bounds.right() + options.menu_size.width(), options.menu_size.height()); - expected = - gfx::Rect(options.anchor_bounds.right(), - options.monitor_bounds.bottom() - options.menu_size.height(), - options.menu_size.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.right() - menu_insets.left(), + options.monitor_bounds.bottom() - + options.menu_size.height() + menu_insets.bottom(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); } @@ -1504,18 +1511,22 @@ TEST_F(MenuControllerTest, CalculateMenuBoundsAnchorTest) { MenuBoundsOptions options; gfx::Rect expected; + MenuScrollViewContainer* container = + menu_item()->GetSubmenu()->GetScrollViewContainer(); + gfx::Insets menu_insets = + container->HasBubbleBorder() ? container->GetInsets() : gfx::Insets(); options.menu_anchor = MENU_ANCHOR_TOPLEFT; - expected = - gfx::Rect(options.anchor_bounds.x(), options.anchor_bounds.bottom(), - options.menu_size.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.bottom() - menu_insets.top(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); options.menu_anchor = MENU_ANCHOR_TOPRIGHT; - expected = - gfx::Rect(options.anchor_bounds.right() - options.menu_size.width(), - options.anchor_bounds.bottom(), options.menu_size.width(), - options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.right() - + options.menu_size.width() + menu_insets.left(), + options.anchor_bounds.bottom() - menu_insets.top(), + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); // Menu will be placed above or below with an offset. @@ -1526,7 +1537,8 @@ expected = gfx::Rect( options.anchor_bounds.x() + (options.anchor_bounds.width() - options.menu_size.width()) / 2, - options.anchor_bounds.y() - options.menu_size.height() - kTouchYPadding, + options.anchor_bounds.y() - options.menu_size.height() + + menu_insets.bottom() - kTouchYPadding, options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); @@ -1536,8 +1548,8 @@ expected = gfx::Rect( options.anchor_bounds.x() + (options.anchor_bounds.width() - options.menu_size.width()) / 2, - options.anchor_bounds.y() + kTouchYPadding, options.menu_size.width(), - options.menu_size.height()); + options.anchor_bounds.y() - menu_insets.top() + kTouchYPadding, + options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); // Assumes anchor bounds is at the bottom of screen. @@ -1549,7 +1561,8 @@ expected = gfx::Rect( options.anchor_bounds.x() + (options.anchor_bounds.width() - options.menu_size.width()) / 2, - options.anchor_bounds.y() - options.menu_size.height(), + options.anchor_bounds.y() - options.menu_size.height() + + menu_insets.bottom(), options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); @@ -1560,8 +1573,8 @@ options.anchor_bounds = gfx::Rect(options.monitor_bounds.x(), options.menu_size.height(), 0, 0); expected = gfx::Rect( - options.anchor_bounds.x(), - options.anchor_bounds.y() + + options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.y() + menu_insets.top() + (options.anchor_bounds.height() - options.menu_size.height()) / 2, options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); @@ -1569,8 +1582,9 @@ options.anchor_bounds = gfx::Rect(options.monitor_bounds.right(), options.menu_size.height(), 0, 0); expected = gfx::Rect( - options.anchor_bounds.right() - options.menu_size.width(), - options.anchor_bounds.y() + + options.anchor_bounds.right() - options.menu_size.width() + + menu_insets.right(), + options.anchor_bounds.y() + menu_insets.top() + (options.anchor_bounds.height() - options.menu_size.height()) / 2, options.menu_size.width(), options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); @@ -1578,29 +1592,38 @@ TEST_F(MenuControllerTest, CalculateMenuBoundsMonitorFitTest) { MenuBoundsOptions options; + MenuScrollViewContainer* scroll_view_container = + menu_item()->GetSubmenu()->GetScrollViewContainer(); + gfx::Insets menu_insets = scroll_view_container->HasBubbleBorder() + ? scroll_view_container->GetInsets() + : gfx::Insets(); + gfx::Rect expected; options.monitor_bounds = gfx::Rect(0, 0, 100, 100); options.anchor_bounds = gfx::Rect(); options.menu_size = gfx::Size(options.monitor_bounds.width() / 2, options.monitor_bounds.height() * 2); - expected = - gfx::Rect(options.anchor_bounds.x(), options.anchor_bounds.bottom(), - options.menu_size.width(), options.monitor_bounds.height()); + expected = gfx::Rect(options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.bottom() - menu_insets.top(), + options.menu_size.width(), + options.monitor_bounds.height() + menu_insets.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); options.menu_size = gfx::Size(options.monitor_bounds.width() * 2, options.monitor_bounds.height() / 2); - expected = - gfx::Rect(options.anchor_bounds.x(), options.anchor_bounds.bottom(), - options.monitor_bounds.width(), options.menu_size.height()); + expected = gfx::Rect(options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.bottom() - menu_insets.top(), + options.monitor_bounds.width() + menu_insets.width(), + options.menu_size.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); options.menu_size = gfx::Size(options.monitor_bounds.width() * 2, options.monitor_bounds.height() * 2); - expected = gfx::Rect( - options.anchor_bounds.x(), options.anchor_bounds.bottom(), - options.monitor_bounds.width(), options.monitor_bounds.height()); + expected = gfx::Rect(options.anchor_bounds.x() - menu_insets.left(), + options.anchor_bounds.bottom() - menu_insets.top(), + options.monitor_bounds.width() + menu_insets.width(), + options.monitor_bounds.height() + menu_insets.height()); EXPECT_EQ(expected, CalculateMenuBounds(options)); } @@ -1743,11 +1766,18 @@ std::make_unique<TestMenuItemViewShown>(sub_menu_item_delegate.get()); sub_menu_item->AddEmptyMenusForTest(); sub_menu_item->SetController(controller); - sub_menu_item->SetBounds(0, 50, 50, 50); + gfx::Rect sub_menu_bounds(0, 50, 50, 50); + sub_menu_item->SetBoundsRect(sub_menu_bounds); base_submenu->AddChildView(sub_menu_item.get()); SubmenuView* sub_menu_view = sub_menu_item->GetSubmenu(); - sub_menu_view->SetBounds(0, 50, 50, 50); - sub_menu_view->ShowAt(owner(), gfx::Rect(0, 50, 50, 50), false); + MenuScrollViewContainer* sub_menu_view_container = + sub_menu_view->GetScrollViewContainer(); + gfx::Insets menu_insets = sub_menu_view_container->HasBubbleBorder() + ? sub_menu_view_container->GetInsets() + : gfx::Insets(); + sub_menu_bounds.Inset(-menu_insets); + sub_menu_view->SetBoundsRect(sub_menu_bounds); + sub_menu_view->ShowAt(owner(), sub_menu_bounds, false); GetMenuHost(sub_menu_view) ->SetContentsView(sub_menu_view->GetScrollViewContainer());
diff --git a/ui/views/controls/menu/menu_item_view_unittest.cc b/ui/views/controls/menu/menu_item_view_unittest.cc index 07273f5d..550dbffd 100644 --- a/ui/views/controls/menu/menu_item_view_unittest.cc +++ b/ui/views/controls/menu/menu_item_view_unittest.cc
@@ -47,7 +47,9 @@ DISALLOW_COPY_AND_ASSIGN(TestMenuItemView); }; -TEST(MenuItemViewUnitTest, TestMenuItemViewWithFlexibleWidthChild) { +using MenuItemViewUnitTest = views::ViewsTestBase; + +TEST_F(MenuItemViewUnitTest, TestMenuItemViewWithFlexibleWidthChild) { TestMenuItemView root_menu; root_menu.set_owned_by_client(); @@ -86,7 +88,7 @@ // Tests that the top-level menu item with hidden children should contain the // "(empty)" menu item to display. -TEST(MenuItemViewUnitTest, TestEmptyTopLevelWhenAllItemsAreHidden) { +TEST_F(MenuItemViewUnitTest, TestEmptyTopLevelWhenAllItemsAreHidden) { TestMenuItemView root_menu; views::MenuItemView* item1 = root_menu.AppendMenuItemWithLabel(1, base::ASCIIToUTF16("item 1")); @@ -117,7 +119,7 @@ // Tests that submenu with hidden children should contain the "(empty)" menu // item to display. -TEST(MenuItemViewUnitTest, TestEmptySubmenuWhenAllChildItemsAreHidden) { +TEST_F(MenuItemViewUnitTest, TestEmptySubmenuWhenAllChildItemsAreHidden) { TestMenuItemView root_menu; MenuItemView* submenu_item = root_menu.AppendSubMenu(1, base::ASCIIToUTF16("My Submenu")); @@ -148,7 +150,7 @@ empty_item->title()); } -TEST(MenuItemViewUnitTest, UseMnemonicOnPlatform) { +TEST_F(MenuItemViewUnitTest, UseMnemonicOnPlatform) { TestMenuItemView root_menu; views::MenuItemView* item1 = root_menu.AppendMenuItemWithLabel(1, base::ASCIIToUTF16("&Item 1"));
diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index ecbd5d7..aa8ad37 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.cc +++ b/ui/views/controls/menu/menu_scroll_view_container.cc
@@ -8,6 +8,7 @@ #include "cc/paint/paint_flags.h" #include "third_party/skia/include/core/SkPath.h" #include "ui/accessibility/ax_node_data.h" +#include "ui/base/material_design/material_design_controller.h" #include "ui/gfx/canvas.h" #include "ui/gfx/color_palette.h" #include "ui/views/border.h" @@ -19,6 +20,7 @@ #include "ui/views/round_rect_painter.h" using ui::NativeTheme; +using MD = ui::MaterialDesignController; namespace views { @@ -186,14 +188,14 @@ arrow_ = BubbleBorderTypeFromAnchor( content_view_->GetMenuItem()->GetMenuController()->GetAnchorPosition()); - if (arrow_ != BubbleBorder::NONE) + if (HasBubbleBorder()) CreateBubbleBorder(); else CreateDefaultBorder(); } bool MenuScrollViewContainer::HasBubbleBorder() { - return arrow_ != BubbleBorder::NONE; + return (arrow_ != BubbleBorder::NONE) || MD::IsRefreshUi(); } void MenuScrollViewContainer::SetBubbleArrowOffset(int offset) { @@ -237,7 +239,7 @@ void MenuScrollViewContainer::OnNativeThemeChanged( const ui::NativeTheme* theme) { - if (arrow_ == BubbleBorder::NONE) + if (!HasBubbleBorder()) CreateDefaultBorder(); } @@ -309,13 +311,14 @@ void MenuScrollViewContainer::CreateBubbleBorder() { bubble_border_ = new BubbleBorder(arrow_, BubbleBorder::SMALL_SHADOW, SK_ColorWHITE); - if (content_view_->GetMenuItem() - ->GetMenuController() - ->use_touchable_layout()) { + MenuController* controller = + content_view_->GetMenuItem()->GetMenuController(); + if (MD::IsRefreshUi() || controller->use_touchable_layout()) { const MenuConfig& menu_config = MenuConfig::instance(); - bubble_border_->SetCornerRadius(menu_config.touchable_corner_radius); + bubble_border_->SetCornerRadius( + menu_config.CornerRadiusForMenu(controller)); bubble_border_->set_md_shadow_elevation( - menu_config.touchable_menu_shadow_elevation); + menu_config.ShadowElevationForMenu(controller)); scroll_view_->GetContents()->SetBorder(CreateEmptyBorder( gfx::Insets(menu_config.vertical_touchable_menu_item_padding, 0))); }
diff --git a/ui/views/controls/menu/menu_scroll_view_container.h b/ui/views/controls/menu/menu_scroll_view_container.h index f083419..6d3caf7 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.h +++ b/ui/views/controls/menu/menu_scroll_view_container.h
@@ -9,6 +9,7 @@ #include "ui/views/bubble/bubble_border.h" #include "ui/views/controls/menu/menu_types.h" #include "ui/views/view.h" +#include "ui/views/views_export.h" namespace views { @@ -17,7 +18,7 @@ // MenuScrollViewContainer contains the SubmenuView (through a MenuScrollView) // and two scroll buttons. The scroll buttons are only visible and enabled if // the preferred height of the SubmenuView is bigger than our bounds. -class MenuScrollViewContainer : public View { +class VIEWS_EXPORT MenuScrollViewContainer : public View { public: explicit MenuScrollViewContainer(SubmenuView* content_view); @@ -25,7 +26,7 @@ View* scroll_down_button() const { return scroll_down_button_; } View* scroll_up_button() const { return scroll_up_button_; } - // External function to check if the bubble border is usd. + // External function to check if the bubble border is used. bool HasBubbleBorder(); // Offsets the Arrow from the default location.
diff --git a/ui/views_bridge_mac/BUILD.gn b/ui/views_bridge_mac/BUILD.gn index 676cd39..216818e 100644 --- a/ui/views_bridge_mac/BUILD.gn +++ b/ui/views_bridge_mac/BUILD.gn
@@ -5,7 +5,6 @@ import("//mojo/public/tools/bindings/mojom.gni") mojom("mojo") { - cpp_only = true assert(is_mac) sources = [
diff --git a/ui/wm/core/easy_resize_window_targeter.h b/ui/wm/core/easy_resize_window_targeter.h index c54c91fc..560c4b2 100644 --- a/ui/wm/core/easy_resize_window_targeter.h +++ b/ui/wm/core/easy_resize_window_targeter.h
@@ -16,7 +16,10 @@ namespace wm { // An EventTargeter for a container window that uses a slightly larger -// hit-target region for easier resize. +// hit-target region for easier resize. It extends the hit test region for child +// windows (top level Widgets that are resizable) to outside their bounds. For +// Ash, this correlates to ash::kResizeOutsideBoundsSize. For the interior +// resize area, see ash::wm::InstallResizeHandleWindowTargeterForWindow(). class WM_CORE_EXPORT EasyResizeWindowTargeter : public aura::WindowTargeter { public: // NOTE: the insets must be negative.